KR100289513B1 - 파풀레이션 카운트의 계산 장치와 계산 및 누적 장치 - Google Patents

파풀레이션 카운트의 계산 장치와 계산 및 누적 장치 Download PDF

Info

Publication number
KR100289513B1
KR100289513B1 KR1019940002880A KR19940002880A KR100289513B1 KR 100289513 B1 KR100289513 B1 KR 100289513B1 KR 1019940002880 A KR1019940002880 A KR 1019940002880A KR 19940002880 A KR19940002880 A KR 19940002880A KR 100289513 B1 KR100289513 B1 KR 100289513B1
Authority
KR
South Korea
Prior art keywords
adder
level
carry
full
bits
Prior art date
Application number
KR1019940002880A
Other languages
English (en)
Other versions
KR940020501A (ko
Inventor
데일시모리스
Original Assignee
파트릭 제이. 바렛트
휴렛-팩커드 컴퍼니(델라웨어주법인)
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 파트릭 제이. 바렛트, 휴렛-팩커드 컴퍼니(델라웨어주법인) filed Critical 파트릭 제이. 바렛트
Publication of KR940020501A publication Critical patent/KR940020501A/ko
Application granted granted Critical
Publication of KR100289513B1 publication Critical patent/KR100289513B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/607Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers number-of-ones counters, i.e. devices for counting the number of input lines set to ONE among a plurality of input lines, also called bit counters or parallel counters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

본 발명은 큰 비트 스트링의 파풀레이션 카운트(population count)를 계산하기 위한 방법 및 장치에 관한 것으로, 레지스터내 오퍼랜드에 대해 파풀레이션 카운트를 수행하는데 걸리는 시간을 줄이기 위해 캐리-세이브 가산기를 이용한다. 캐리-세이브 가산기는 캐리를 전달하지 않으므로 이들 가산기 종래 기술에서 이용된 전가산기보다 본질적으로 빠르다. 또한, 본 발명은 오퍼랜드 비트 스트링을 작은 블록으로 나누어 다수의 부분적인 파풀레이션 카운트 계산을 수행하기 위한 신규한 파풀레이션 카운트를 계산하는 방법을 구현한다. 이러한 작은 부분적인 파풀레이션 카운트는 전체 오퍼랜드 비트 스트링에 대해 전체 파풀레이션 카운트보다 계산하는데 훨씬 적은 시간을 필요로 한다.

Description

파풀레이션 카운트의 계산 장치와 계산 및 누산 장치.
제 1 도는 64비트 파풀레이션 카운트(population count)를 계산하는 종래 기술의 방법을 도시한 도면.
제 2 도는 본 발명에 따른 파풀레이션 카운트 인스트럭션의 블록도.
제 3 도는 본 발명의 바람직한 제 1 실시예를 도시한 도면.
제 4 도는 부분적인 파풀레이션 카운트를 캐리-세이브 포맷으로부터 이진수로 감소하기 위한 방법의 제 1 단계를 도시한 도면.
제 5A 도는 감소 방법의 제 2 단계를 도시한 도면.
제 5B 도는 제 5A 도를 단선 5B를 따라 상세하게 도시한 도면.
제 6 도는 감소 방법의 제 3 단계를 도시한 도면.
제 7 도는 감소 방법의 제 4 단계를 도시한 도면.
제 8 도는 본 발명의 바람직한 제 2 실시예를 도시한 도면.
제 9 도는 제 8 도에 도시한 실의 상세 블럭도.
* 도면의 주요 부분에 대한 부호의 설명 *
201: 오퍼랜드 레지스터
203: 파풀레이션 카운트 및 누산 논리 블록
205: 누산 레지스터 801: 레지스터 1
807: 파풀레이션 카운트 회로 809: 결과 제지스터
815: 레지스터 2 901, 915: 전가산기 트리
907,913,925,927: 캐리-세이브 가산기
본 발명은 컴퓨터에 관한 것으로, 특히 파풀레이션 카운트(population count)를 계산하기 위한 컴퓨터 프로세서용의 방법 및 하드웨어 인스트럭션에 관한 것이다.
파풀레이션 카운트는 비트 스트링에서의 ";1";의 수를 카운트하는 것에 관한 것으로, 예를 들면, 비트 패턴 ";01011001";의 파풀레이션 카운트는 4이다. 스트링의 파풀레이션 카운트는 많은 형태의 알고리즘, 특히 암호 해석에 유용하다.
종래 기술의 몇몇 컴퓨터는 파풀레이션 카운트의 계산을 가속화하기 위해 특별한 인스트럭션을 구현한다. 통상적으로, 이러한 인스트럭션은 통상 32비트 크기의 프로세서 레지스터로부터 하나의 오퍼랜드를 취해, 그 오퍼랜드에 대해 파풀레이션 카운트를 계산한 다음 그 결과를 레지스터에 반환한다. 레지스터 크기를 초과하는 이진 스트링에 대한 파풀레이션 카운트 계산이 필요한 경우에는, 그 레지스터의 크기에 따라 여러 부분으로 나누어진 각 부분에서 파풀레이션 카운트가 수행된다. 그 다음에 각 부분의 결과는 정상적인 ";가산"; 인스럭션을 이용하여 합산되어 최종 파풀레이션 카운트 결과를 생성한다.
속도 및 효율성을 위해, 파풀레이션 카운트 인스럭션은 단일의 CPU 사이클로 실행하도록 구현된다. 그러나, 파풀레이션 카운트 기능은 연산적으로 복잡하므로, 단일의 사이클로 파풀레이션 카운트 인스럭션을 구현하는 것은 고성능, 고클럭 주파수의 CPU에서 문제로 된다. 현재의 추세는 더 넓은 데이타 폭을 갖는 컴퓨터, 예로서, 32비트 컴퓨터에서 64비트 컴퓨터로 향하고 있다. 이것은 이제 파풀레이션 카운트 인스럭션이 종래보다 2배의 비트 수에 대한 파풀레이션 카운트를 계산해야 하므로, 더 많은 수행 시간을 필요로 한다는 것을 의미한다. 파풀레이션 카운트 기능의 시간 지연은 대략 오퍼랜드내 비트 수의 로그(log)에 비례한다. 그래서, 16비트 상의 파풀레이션 카운트는 4개의 시간 유닛을 갖고 32비트상에서는 5개의 시간 유닛을 가지며, 64비트상에서는 64개의 시간 유닛을 가질 수 있다.
제 1 도는 64비트 래지스터를 갖는 컴퓨터에서 파풀레이션 카운트 인스럭션을 수행하는 종래 기술의 방법을 도시한 것이다. 래지스터(101)는 파풀레이션 카운트 계산을 필요로 하는 오퍼랜드를 포함한다. 오퍼랜드의 비트는 비트 쌍으로 분리되며, 각 비트 쌍은 1-비트 전가산기(103-109)에 의해 가산된다. 도면에는 단지 4개의 비트 가산기만이 도시되어 있으나, 오퍼랜드 비트를 가산하기 위해 32개의 가산기가 사용된다. 1-비트 가산기의 출력은 다시 쌍으로 분리되고 가가 2-비트 결과 쌍은 2-비트 가산기(111-117)에 의해 가산된다. 또한, 도면의 2개의 2-비트 가산기만이 도시되어 있지만 16개가 사용될 수 있다. 동일한 방식으로, 2-비트 가산기의 출력은 쌍으로 분리되어 8개의 3-비트 가산기(119-133)에 의해 가산된다. 4개의 4-비트 계산기(135-141)는 8개의 3-비트 결과를 가산하는데 사용되고, 2개의 5-비트 전가산기(143 및 145)는 4개의 5-비트 결과를 가산하는데 사용된다. 마지막으로, 6-비트 전가산기(147)는 2개의 6비트 결과를 가산하여 최종 파풀레이션 카운트를 생성하고, 이 카운트는 결과(151)의 최종 7 비트(149)에 저장된다. 전형적으로 상기 결과는 컴퓨터의 래지스터에 저장된다.
종래 기술에 따른 파풀레이션 카운트 계산 방법의 문제점은 전체 ";가산"; 프로세스에 요구되는 시간이다. 제 1 도에 도시된 예에서, 파풀레이션 카운트 계산의 수행을 위해 6 레벨의 전가산기가 필요하다. 전가산기가 사용되기 때문에 각 레벨의 가산기에 의해 생기는 캐리 비트를 전달하기 위해서는 충분한 시간이 허용되어야 한다. 예를 들면, 2개의 이진 비트 스트링 ";11";과 ";01";을 가산하는 2-비트 가산기에서, 최소 유효 비트 가산으로부터 생기는 캐리가 그 다음의 최소 유효 비트 위치로 옮겨지고 최종적으로 최대 유효 비트 위치에 캐리가 나타나는 올바른 결과인 ";100";를 생성하는 데에 충반한 시간이 허용되어야 한다. 후속 3-비트 가산기는 2-비트 결과가 안정화되고 3-비트 가산기에 의해 발생된 캐리의 전달을 위한 충분한 시간이 만료할 때까지 올바른 결과를 발생할 수 없을 것이다. 이러한 프로세스는 각 후속 레벨에 대해 계속되며 모든 가능한 ";캐리";를 고려하는 누적 지연이 중요하다.
단일 CPU 사이클로 파풀레이션 카운트 계산을 하려면, 캐리 지연이 최소화되어야 하는데, 그러기 위해서는 많은 전력을 소모하는 고속의 논리 회로가 필요하다. 또한, CPU 내부의 시간 지연을 최소화하려면, 파풀레이션 카운트가 프로세서의 코어에 근접하게 위치해야 하는데, 이는 CPU 설계자의 융통성을 제어한다.
큰 비트 수에 대한 종래 기술의 파풀레이션 카운트 계산 방법에서는 오퍼랜드 스트링에서 각각의 비트 블록(본 실시예에서는 64비트)에 대해 3 CPU 사이클이 요구된다. 제 1 사이클은 메모리 로드 인스럭션에 사용되고, 제 2 사이클은 파풀레이션 카운트 인스럭션 수행에 사용되며, 제 3 사이클은 이전에 계산된 파풀레이션 카운트 부분 합(sub-total)에 현재 파풀레이션 카운트를 가산하기 위한 가산 인스럭션에 사용된다. 워드 당 세 개의 사이클은 큰 비트 스트링에 대한 파풀레이션 카운트 계산의 비용을 나타낸다.
그러므로, CPU 설계시 편리하게 구현되고 큰 비트 수에 대해 종래 기술 방법 보다 더 빠르게 계산할 수 있는 새로운 파풀레이션 카운트 계산 방법 및 장치가 필요한다.
따라서, 본 발명의 목적은 종래 기술의 설계보다 더 큰 융통성을 허용하고 더 적은 시간을 필요로 하는 비트 스트링에 대한 파풀레이션 카운트를 계산하는 신규한 방법 및 장치를 제공하는 데 있다.
한 사이클내에 레지스터 오퍼랜드 전체에 대한 파풀레이션 카운트를 계산하는 파풀레이션 카운트 인스럭션을 구현하는 대신에, 본 발명에서는 오퍼랜드를 다수의 부분으로 나누는 파풀레이션 카운트 인스럭션을 구현한다. 이러한 방식으로, CPU는 다수의 보다 작은 파풀레이션 카운트를 계산하고, 전체 스트링이 프로세스될 때까지 다수의 파풀레이션 카운트가 단일의 수로 줄어든다. 스트링의 끝에서, 중간 파풀레이션 카운트 합은 단일의 카운트로 줄어든다. 단일의 카운트를 생성하는데 요구되는 시간은 전체 스트링에 걸쳐 분할 상각되므로, 큰 스트링의 경우, 종래 기술 방법보다 총 시간이 적게 걸린다.
작은 파풀레이션 카운트는 전체 오퍼랜드 파풀레이션 카운트보다 실행 시간이 적으므로, 더 빠른 CPU 클럭 속도가 가능하고 CPU 칩 레이아웃에서 칩 설계자에게 더 많은 융통성을 제공할 수 있다. 본 발명의 제 1 실시예에서, 캐리-세이브 가산기는 제 2 합산 오퍼랜드와 파풀레이션 카운트를 결합하는데 이용된다. 캐리-세이브 가산기는 캐리를 전달하지 않으므로, 종래 기술의 설계에 사용된 전가산기 보다 고속이며, 1 CPU 사이클의 합산 동작과 파풀레이션 카운트가 제공된다.
제 2 실시예에서 파풀레이션 카운트는 2개의 레지스터에 저장된 오퍼랜드에 대해 계산되다. 이 오퍼랜드 절반에 각각은 여러 부분으로 나누어지며 각 부분에 대해 파풀레이션 카운트 계산이 행해진다. 전체 스프링이 프로세스될 때까지 다수의 파풀레이션 카운트가 단일의 카운트로 줄어든다. 따라서, 단일의 카운트를 생성하는데 요구되는 시간은 전체 스트링에 걸쳐 분할 상각되어, 큰 비트 스트링의 경우, 총 시간이 더 적게 걸린다.
제 2 도는 파풀레이션 카운트 인스럭션 동안 발생하는 데이타 흐름을 도시하는 본 발명의 블록도이다. 전형적으로, 파풀레이션 카운트가 요구되는 비트 스트링은 컴퓨터 데이타 폭에 의해 결정되는 크기의 비트 블록으로 메모리에 저장된다. 비트 블록은 메모리로부터 판독되어 CPU 레지스터(201)에 저장된다. 파풀레이션 카운트 및 누산 논리 블록(203)은 레지스터(201)에 있는 오퍼랜드에 대해 파풀레이션 카운트를 계산하고 그 계산된 카운터를 누산 레지스터(205)에 저장된 카운트 값에 가산한다. 가산 결과는 이전의 값을 중복기록하는 누산 레지스터(205)에 저장된다. 파풀레이션 카운트와 누산 기능은 한 CPU 사이클내에서 발생한다. 하나의 CPU 사이클내에서 파풀레이션 카운트와 누산 기능을 수행하기 위해, 캐리-세이브 가산기가 사용된다. 캐리-세이브 가산기는 두 이진수를 가산하나, 캐리를 전달하지는 않는다. 대신에, 캐리는 이진값의 개별적인 부분으로서 저장된다. 예를 들어, 두 이진 스트럭션 ";11";과 ";01";이 전가산기에 의해 가산되는 경우, 그 결과는 이진수로 ";100";일 것이다. 동일한 이진 스트링이 캐리-세이브 가산기에 의해 가산되면, 그 결과는 캐리-세이브 포맷으로 ";01";(캐리부분)과 ";10";(합부분) 또는 ";0110";일 것이다. 캐리-세이브포맷을 지정한 이진 포맷으로 변환하기 위해, ";01";이 한자리 좌측으로 시프트되어 ";10";에 가산된다.
예를 들면,
제 3도는 파풀레이션 카운트 인스럭션 수행을 상세하게 설명하기 위한 본 발명의 바람직한 실시예를 도시한 것이다. 처음 4개의 스테이지(stage)는 제 1 도에 도시한 처음 4개의 스테이지와 동작과 기능에 있어서 유사한다. 64비트 오퍼랜드는 CPU 레지스터(301)에 저장된다. 레지스터(301)내의 비트는 쌍으로 나누어져 32개의 1-비트 전가산기(303-307)에 의해 가산된다. 16개의 2-비트 가산기(309-315)는 1-비트 가산기의 출력 쌍을 가산한다. 그 다음에 8개의 3-비트 가산기(317-331)는 2-비트 가산기의 출력 쌍을 가산한다. 4개의 4-비트 가산기(333-339)는 3-비트 가산기의 출력 쌍을 가산한다. 4-비트 가산기(333)의 출력은 캐리-세이브 가산기(341)의 두 입력중 한 입력을 제공한다. 이와 동일한 방식으로 4-비트 카산기(335-339)의 출력은 캐리-세이브 가산기(343-347)의 두 입력중 한 입력을 제공한다. 각 캐리-세이브 가산기(341-347)는 16비트를 가산할 수 있으며 4-비트 가산기(333-339)는 최대 출력이 5비트 길이이므로, 11개의 최대 유효 비트가 제로(0)로 고정된다.
캐리-세이브 가산기(341-347)의 제 2 입력은 누산 레지스터(349)에 의해 제공된다. 이 누산 레지스터는 64비트 폭을 가지며, 캐리-세이브 포맷으로 저장되는 각 블록의 값은 4개의 16-비트 블록(351-357)으로서 취급된다. 그와 같이, 블록내의 상위 8비트는 캐리 정보를 나타내고 하위 8비트는 합 정보를 나타낸다. 가산기(333)로부터의 5비트와 누산 레지스터 블록(351)로부터의 16비트를 가산해서 나온 캐리-세이브 가산기(341)의 출력은 캐리-세이브 포맷으로 누산 레지스터(349)의 블록(351) 저장된다. 이러한 프로세스는 블록(351)으로부터의 이전의 부분 파풀레이션 카운트와 레지스터(301)내 오퍼랜드의 최대 유효 16-비트의 부분 파풀레이션 카운트가 누산 레지스터 블록(351)에 자동적으로 합산되도록 한다. 다른 캐리-세이브 가산기(343-347)도 유사한 방식으로 동작하여, 파풀레이션 카운트 인스럭션이 수행될때마다 4개의 갱신된 부분 파풀레이션 카운트가 누산 레지스터(349)에 저장되게 한다.
실제로 누산 레지스터(349)는 제 1 파풀레이션 카운트 인스럭션이 수행되기 전에 클리어된다. 이후 각 파풀레이션 카운트 인스럭션은 캐리-세이브 포맷의 4개의 새로운 부분 파풀레이션 카운트를 누산 레지스터에 가산할 것이다. 하나 이상의 부분 카운트의 오버플로우가 일어나기 전에 파풀레이션 카운트 인스럭션이 수행될 수 있는 횟수는 누산 레지스터의 크기, 및 캐리와 합에 할당된 비트수에 의존한다. 크기가 각각 2n비트인 필드에 대한 부분 파풀레이션 카운트를 계산하는 시스템에서, 캐리-세이브 포맷이 ";m"; 캐리 비트와 ";m"; 합 비트로 이루어져 있는 경우, 최대 반복수는,
imax= 2(m-n)+ m-n-1
예를 들면, 위에서 언급한 바람직한 실시예에서, 레지스터(301)로부터의 16-비트 필드에 대해 파풀레이션 카운트가 계산되므로, n = 4(24= 16)이다. 위에서 언급한 캐리-세이브 포맷은 8개의 캐피 비트 및 8개의 합 비트이므로 m = 8이다. 따라서, 오버플로우의 위험없이 파풀레이션 카운트 인스럭션이 수행될 수 있는 횟수는,
imax= 2(8-4)+ 8-4-1 = 19
19번의 반복 후에 누산 레지스터내의 4개의 캐리-세이브 값은 더 감소되어야 할 것이다. 요구되는 감소를 수행하는데는 많은 방법이 있지만, 바람직한 방법이 후술된다. 그러나 마찬가지로 다른 방법이 잘 동작할 수 있고 감소를 수행하기 위해 특별한 CPU 인스럭션이 수행될 수 있다.
제 4도는 누산 레지스터의 4개의 부분 파풀레이션 카운트를 4개의 이진값으로 감소시키는 1단계를 도시한 것이다. 캐리를 없애고 합을 남기기 위해, 누산 레지스터(349)의 값을 레지스터(349)의 캐리 위치에 대응하는 위치에서 모두 ";0";(";00"; 베이스 16)을 갖고 다른 모든 위치에서 ";1";(";FF"; 베이스 16)을 갖는 마스크(mask)와 ";앤드(and)";시킨다. ";앤드"; 인스럭션의 결과, 결과 레지스터(401)에서 캐리 정보는 모두 0으로 대체되는 반면 합 정보는 영향받지 않고 레지스터(349)에서 합 정보를 그대로 반영한다.
제 5 도는 감소 프로세스의 2단계를 도시한 것이다. 여기서 누산 레지스터(349)의 내용은 레지스터(501)에 저장되고 7비트 만큼 우측으로 시프트된다. 따라서, 레지스터(501)의 최대 유효 7비트(비트 56-63)는 0으로 될 것이고 레지스터(501)의 비트 위치 0은 레지스터(349)의 비트 위치 7과 동일하게 될 것이다. 이 단계는 캐리 정보를 오프셋시켜 후속 단계에서 요구되는 합 정보와 정렬하도록 제공된다.
제 5B 도는 제 5A 도를 단선 5B를 따라 상세하게 도시한 도면이다. 레지스터(349)내 오퍼랜드의 최소 유효 비트(비트 19-0)가 7비트 만큼 우측으로 시프트되기 전의 상태를 도시한 것이다. 시프트의 수행 후, 레지스터(501)는 그 레지스터(501)의 최소 유효 비트(비트19-0)와의 결과를 보유하고 레지스터(349)의 비트(26-7)에 저장된 데이타를 보유한다.
제 6 도는 감소 프로세스의 3단계를 도시한 것이다. 합 정보를 없애기 위해 레지스터(501)의 내용은 레지스터(602)에 저장된 마스크와 ";앤드";된다. 이 마스크는 레지스터(501)로부터의 정보가 보존될 비트 위치에서 ";1";을 갖고 나머지 모든 비트 위치의 비트에서 제로를 갖는다. 레지스터(603)는 캐리 정보가 제로로 대체된 것을 제외하고는 ";앤드"; 인스럭션의 결과 및 모든 정보를 보유한다.
제 7도는 감소 프로세스의 4단계를 도시한 것이다. 레지스터(603)의 내용과 레지스터(401)의 내용이 ";가산";되고, 그 결과 정상적인 이진 포맷의 제각기 길이가 9비트인 4개의 부분 파풀레이션 카운트가 생긴다. 이 부분 파풀레이션 카운트 (703-709)는 긴 비트 스트링의 파풀레이션 카운트 동안 요구되는 바와 같이 저장되고 누산된다. 결국 부분 파풀레이션 카운트가 저장되는 16비트 블록에서 오버플로우가 일어날 수 있으므로 감소가 더 행해져야 할 것이다. 전술한 실시예에서 오버플로우 이전에 발생할 수 있는 반복 횟수는 215이다. 이수는 다음과 같이 도출된다. 즉,
N = 22m/(최대 감소 결과)= 22m/2n[2(m-n)+ m-n-1]
이 결과치는 가장 가까운 정수 값으로 반내림을 행한다. 따라서, 위의 예에서, N = 22*8/304 = 215로 된다.
소정의 시점에서 부분 파풀레이션 카운트를 단일의 이진수 결과로 감소하기 위해 완전한 감소가 수행되어야 한다. 이러한 최종 감소는 본 기술분야의 당업자에게 알려져 있는 시프팅(shifting)과 마스킹(masking)에 의해 수행된다. 물론, 각종 감소는 파풀레이션 카운트 프로세스의 오버헤드(overhead)를 나타낸다. 그러나, 이러한 감소는 필요로 할 때까지는 지연되므로, 오버헤드는 큰 비트 스트링의 파풀레이션 카운트 계산에 요구되는 오버헤드를 효과적으로 줄일 수 있는 다수의 반복 횟수에 걸쳐 분할 상각된다. 640비트 보다 큰 비트 스트링인 경우, 본 발명의 신규한 장치 및 방법은 주어진 기술과 설계 규칙에 대해 종래 기술의 장치 및 방법보다 빠르다.
위에서 언급한 바랍직한 실시예는 충분히 감소된 파풀레이션 카운트와 누산이 통상적인 경우와 같이 한 CPU 사이클내에서 수행될 수 없다고 가정한다. 각 CPU 설계는 각종 제약을 가지고 있으므로, 가장 효율적인 파풀레이션 카운트 구현은 각 CPU 설계에 따라 상이할 것이고 위에서 언급한 예와도 상이할 수 있다. 그러나, 주어진 CPU 설계의 경우, 가장 효율적인 파풀레이션 카운트 및 누산 설계응 파풀레이션 카운트 감소를 극대화하면서도 누산 기능이 단일의 CPU 사이클내에 일어나기에 충분한 시간을 허용할 것이다. 그래서, 언급된 실시예에서 가산기(333-339)의 출력으로서, 4개의 파풀레이션 카운트를 계산하는 동안, CPU 사이클 시간과 특정의 기술이 가능하다면, 누산 기능이 수행되기 전에 4개의 출력을 2개의 출력으로 감소시키는 것이 보다 효과적인 것이다. 이러한 이유는 하나 또는 그 이상의 부분 카운트의 오버플로우가 발생하기 전에 파풀레이션 카운트 인스럭션이 여러번 수행될 수 있기 때문이다.
본 발명의 두번째 바람직한 실시예가 제 8 도에 도시되어 있다. 본 실시예에서는, 2개의 레지스터에 저장된 오퍼랜드에 대해 4개의 파풀레이션 카운트가 계산된다. 제 1 레지스터(801)에 저장된 오퍼랜드 부분은 2개의 부분(803, 805)으로 나누어진다. 두 부분(803,805)에 대해 파풀레이션 카운트 회로(807)에 의한 개별적인 파풀레이션 카운트가 수행된 후, 그 결과는 전형적으로 레지스터인 기억 장소(809)에 저장된다. 이 결과는 기억 장소(809)내의 개별적인 장소(811 및 813)에 각각 저장된다. 파풀레이션 카운트 회로(807)가 수행하는 기능 (Fn)은 오퍼랜드내 ";1";의 수를 카운트하는 것이다. 물론 ";1";의 수를 카운트하는 대신에 회로는 :0:의 수를 카운트할 수도 있다.
동일한 방식으로, 제 2 레지스터(815)에 저장된 오퍼랜드 부분은 두 부분(817,819)으로 나누어진다. 회로(807)에 의해 두 부분에 대해 파풀레이션 카운트가 계산된 후, 그 결과는 기억 장소(809)내의 개별적인 장소(821, 823)에 각각 저장된다.
4개의 파풀레이션 카운트(811, 813, 821 및 823)는 각각 새로운 반복으로 계산된 4개의 파풀레이션 카운트로 누산해야 할 것이다. 그러나, 파풀레이션 카운트를 계산하는 이러한 프로세스는 큰 비트 스트링에 대한 파풀레이션 카운트를 계산하는데 요구되는 반복 횟수를 종래 기술보다 줄일 수 있도록 128비트 길이의 오퍼랜드를 사용할 수 있는 이점이 있다.
제 9 도는 제 8 도에 따라 기술된 본 발명의 상세도이다. 제 1 레지스터(801)에 저장된 64비트 오퍼랜드는 전가산기 트리(901)에 입력된다. 이 가산기 트리는 전가산기(303-339)와 동일한다. 이 가산기는 앞에서 언급한 바와 같이 64비트에 대해 각각 5비트 크기인 4개의 파풀레이션 카운트를 생성한다. 2개의 5-비트 파풀레이션 카운트(903 및 905)는 캐리-세이브 가산기(907)에 입력되고 캐리-세이브 가산기(907)의 출력은 기억 장소(809)내의 섹션(811)에 저장된다. 가산기 트리(901)의 나머지 2개의 5-비트 파풀레이션 카운트(909 및 911)는 제 2 캐리-세이브 가산기(913)에 입력되고 캐리-세이브 가산기(913)의 출력은 기억 장소(809)애의 섹션(813)에 저장된다.
동일한 방식으로, 제 2 레지스터(815)로부터의 64비트는 가산기 트리(915)에 의해 가산되어 4개의 5-비트 파풀레이션 카운트(917, 919 , 921 및 923)로 생성된다. 이 4개의 파풀레이션 카운트는 2개의 캐리-세이브 가산기(925 및 927)에 입력되고 이 캐리-세이브 가산기의 출력은 기억 장소(809)의 섹션(821 및 823)내에 각각 저장된다. 이러한 프로세스의 최종 결과는 기억 장소(809)에 캐리-세이브 포맷으로 저장된 4개의 파풀레이션 카운트이다.
4개의 캐리-세이브 가산기(907, 913, 925 및 927)는 4개의 전가산기가 사용될 때 필요한 시간을 절약하기 위해 사용된다. 또한, 이 가산기 트리는 4개의 5-비트 파풀레이션 카운트를 생성하는 것으로 도시되어 있지만, 특정의 CPU 설계적 제약으로 인해 이러한 프로세스의 변경을 나타낼 수도 있다. 예를 들어, 부가적인 시간이 허용되면, 가산기 트리에 부가적인 전가산기 스테이지가 부가되어 가산기 트리가 2개의 파풀레이션 카운트를 생성할 수도 있다. 이 경우 단지 2개의 캐리-세이브 가산기만이 필요하다. 반대로, 4-레벨 가산기 트리에 대한 시간이 불충분하면, 3-레벨 가산기 트리는 제각기 8개의 파풀레이션 카운트를 생성하게 구현될 것이다. 이 경우, 8개의 캐리-세이브 가산기가 필요하게 되고 기억 장소(809)는 캐리-세이브 포맷으로 8개의 파풀레이션 카운트를 보유할 것이다.
종래의 기술은 파풀레이션 카운트를 기본(atomic) 인스럭션으로서 취급하는데, 즉, 인스럭션의 출력은 각 인접한 비트에 대해 위치 가중된 것으로서 그 이웃 비트 보다 2n만큼 크거나 작은 값을 나타내는 전형적인 이진수인 반면, 본 발명은 여러 부분들로 나누어진다. 본 발명에 따른 파풀레이션 카운트 인스럭션의 출력은 결과 비트가 그의 이웃 비트보다 2n만큼 크거나 작은 값을 나타낼 필요가 없는 다수의 파풀레이션 카운트이다. 이러한 독특하고 신규한 방법 및 장치는 큰 비트 스트링의 파풀레이션 카운트가 종래 기술의 방법 및 장치보다 훨씬 빠르게 계산되게 할 수 있다.
당업자라면 본 명세서에 개시한 실시예로부터 본 발명의 다른 실시예를 생각해 낼 수 있을 것이다. 본 명세서에 개시된 실시예는 단지 예시적인 것에 불과하며, 본 발명의 범주는 청구 범위에 의해서 한정된다.

Claims (9)

  1. 파풀레이션 카운트를 계산하는 장치에 있어서,
    파풀레이션 카운트가 결정될 비트 스트링을 저장하는 오퍼랜드 저장 레지스터와,
    상기 저장 레지스터로부터 특정 비트 그룹을 각각 가산하며 제각기의 출력을 갖는 다수의 전가산기와,
    상기 다수의 전가산기 출력중 특정 출력과 합산 레지스터로부터의 특정 비트 그룹을 각각 가산하며 제각기의 출력을 갖는 다수의 캐리-세이브 가산기를 포함하며,
    상기 캐리-세이브 가산기의 각 출력은 결과 레지스터내의 특정 비트 수로 저장되어,
    상기 결과 레지스터는 상기 오퍼랜드 레지스터로부터의 비트 서브셋과 상기 합산 레지스터로부터의 비트 그룹의 파풀레이션 카운트 합을 캐리-세이브 포맷으로 포함하는 파풀레이션 카운트의 계산 장치.
  2. 제 1 항에 있어서,
    상기 다수의 전가산기는 제 1 레벨의 전가산기가 상기 오퍼랜드 래지스터로 부터의 비트 및 제 2 레벨의 전산기를 가산하도록 계층적인 순서로 구성되며, 상기 제 2 레벨의 전가산기로부터의 각 출력은 상기 제 1 레벨의 전가산기중의 2개로부터의 출력을 가산하여, 상기 제 1 레벨의 전가산기로부터의 각 출력이 상기 제 2 레벨의 전가산기중 단지 한 가산기에 의해서만 가산되는 파풀레이션 카운트 계산 장치.
  3. 제 2 항에 있어서,
    상기 제 1 레벨의 전가산기의 수는 상기 오퍼랜드 레지스터의 비트 수의 절반이며 전가산기중 상기 제 2 레벨의 전가산기의 수는 상기 오퍼랜드 레지스터 비트 수의 4분의 1인 파풀레이션 카운트 계산 장치.
  4. 제 1 항에 있어서,
    상기 각각의 캐리-세이브 가산기는 다른 모든 캐리-세이브 가산기와 동일한 비트 수를 가산하는 파풀레이션 카운트 계산 장치.
  5. 제 1 항에 있어서,
    상기 합산 레지스터와 상기 결과 레지스터는 단일의 레지스터인 파풀레이션 카운트 계산 장치.
  6. 제 1 기억 장소에 저장된 제 1 비트 스트링의 파풀레이션 카운트를 계산하고, 제 2 기억장소에 저장된 제 2 비트 스트링과 계산된 파풀레이션 카운트를 누산하는 장치에 있어서,
    상기 제 1 기억 장송 저장된 상기 제 1 비트 스트링으로부터의 비트를 가산하여, 동종의 비트 수, 즉, ";0";이나 ";1";의 수를 나타내는 제 1 결과를 발생하는 가산기와,
    상기 제 1 결과와 상기 제 2 기억 장소에 저장된 상기 제 2 비트 스트링을 가산하여, 상기 제 1 결과와 상기 제 2 비트 스트링과의 합을 나타내는 제 2 결과를 캐리-세이브 포맷으로 발생하는 캐리-세이브 가산기와,
    상기 제 2 결과가 저장되는 제 2 결과 기억 장소
    를 포함하는 파풀레이션 카운트의 계산 및 누산 장치.
  7. 제 6 항에 있어서,
    제 2 기억 장소 및 상기 제 2 결과 기억 장소는 단일의 기억 장소인 파풀레이션 카운트의 계산 및 누산장치.
  8. 제 1 비트 스트링의 파풀레이션 카운트를 계산하고, 제 2 비트 스트링과 계산된 파풀레이션 카운트를 누산하는 장치에 있어서,
    파풀레이션 카운트가 생성될 비트 스트링을 저장하는 오퍼랜드 저장 레지스터와,
    상기 제 1 비트 스트링으로부터의 2개의 비트--상기 제 1 비트 스트링으로부터의 각 비트는 상기 제 1 레벨의 전가산기중 단지 하나의 가산기에 의해서만 가산된다--를 각각 가산하여 제각기 출력을 발생하는 제 1 레벨의 전가산기와,
    상기 제 1 레벨의 전가산기로부터의 2개의 출력--상기 제 1 레벨의 전가산기로부터의 각 출력은 상기 제 2 레벨의 전가산기중 단지 하나의 가산기에 의해서만 가산된다--을 각각 가산하여 제각기 출력을 발생하는 제 2 레벨의 전가산기와,
    상기 제 2 레벨의 전가산기로부터의 2개의 출력--상기 제 2 레벨의 전가산기로부터의 각 출력은 상기 제 3 레벨의 전가산기중 단지 하나의 가산기에 의해서만 가산된다--을 각각 가산하여 제각기 출력을 발생하는 제 3 레벨의 전가산기와,
    상기 제 3 레벨의 전가산기로부터의 2개의 출력--상기 제 3 레벨의 전가산기로부터의 각 출력은 상기 제 4 레벨의 전가산기중 단지 하나의 가산기에 의해서만 가산된다--을 각각 가산하여 제각기 출력을 발생하는 제 4 레벨의 전가산기와,
    상기 제 4 레벨의 전가산기로부터의 각 출력--상기 제 4 레벨의 전가산기로 부터의 각 출력은 단지 하나의 상기 캐리-세이브 가산기중의 하나에 의해서만 가산된다--을 제 2 비트 스트링으로부터의 4분의 1의 비트--상기 제 2 비트 스트링으로 부터의 4분의 1의 비트는 상기 캐리-세이브 가산기중의 하나에 의해서만 가산된다--에 가산하며, 제각기 캐리-세이브 포맷으로 합을 발생하는 한 레벨의 캐리-세이브 가산기를 포함하며,
    상기 각각의 합은 캐리-세이브 포맷으로 기억 장소에 저장되는 파풀레이션 카운트의 계산 및 누산 장치.
  9. 제 8 항에 있어서,
    상기 제 2 비트 스트링은 상기 합과 동일한 장소에 저장되는 파풀레이션 카운트의 계산 및 누산 장치.
    10. 파풀레이션 카운트를 계산하는 장치에 있어서,
    제 1 비트 스트링을 저장하는 제 1 기억 장소와,
    제 2 비트 스트링을 저장하는 제 2 기억 장소와,
    상기 제 1 비트 스트링으로 부터의 비트를 가산하여 동종 비트, 즉 ";1";이나 ";0";의 수를 나타내는 제 1 결과를 발생하는 제 1 가산기와,
    상기 제 2 비트 스트링으로 부터의 비트를 가산하여 동종 비트, 즉, ";1";이나 ";0";의 수를 나타내는 제 2 결과를 발생하고, 상기 제 1 가산기가 ";1";을 가산하면 ";1";을 가산하고, 상기 제 1 가산기가 ";0";을 가산하면 ";0";을 가산하여, 상기 제 1 가산기가 동일한 형태의 비트를 가산하는 제 2 가산기와,
    상기 제 1 결과와 상기 제 2 결과를 저장하여 상기 제 1 및 제 2 비트 스트링의 파풀레이션 카운트를 나타내는 다수의 결과를 포한하는 제 3 기억 장소
    를 포함하는 파풀레이션 카운트 계산 장치.
KR1019940002880A 1993-02-19 1994-02-18 파풀레이션 카운트의 계산 장치와 계산 및 누적 장치 KR100289513B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US019,720 1993-02-19
US08/019,720 US5717616A (en) 1993-02-19 1993-02-19 Computer hardware instruction and method for computing population counts

Publications (2)

Publication Number Publication Date
KR940020501A KR940020501A (ko) 1994-09-16
KR100289513B1 true KR100289513B1 (ko) 2001-05-02

Family

ID=21794669

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019940002880A KR100289513B1 (ko) 1993-02-19 1994-02-18 파풀레이션 카운트의 계산 장치와 계산 및 누적 장치

Country Status (4)

Country Link
US (1) US5717616A (ko)
JP (1) JP3529828B2 (ko)
KR (1) KR100289513B1 (ko)
DE (1) DE4403917C2 (ko)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0847551B1 (en) * 1995-08-31 2012-12-05 Intel Corporation A set of instructions for operating on packed data
US6516330B1 (en) * 1999-12-01 2003-02-04 International Business Machines Corporation Counting set bits in data words
US6664967B1 (en) * 2000-05-18 2003-12-16 International Business Machines Corporation Apparatus to detect setting of bits in a data structure
US6795839B2 (en) * 2000-11-30 2004-09-21 Stmicroelectronics, Inc. Method and device for computing the number of bits set to one in an arbitrary length word
US6754685B2 (en) * 2000-12-21 2004-06-22 Sun Microsystems, Inc. Dynamic popcount/shift circuit
CN101361278B (zh) * 2006-01-19 2012-02-01 富士通株式会社 奇偶校验位生成电路、计数电路以及计数方法
US7958173B2 (en) * 2007-07-13 2011-06-07 Freescale Semiconductor, Inc. Population count approximation circuit and method thereof
US7931190B2 (en) * 2007-07-13 2011-04-26 Freescale Semiconductor, Inc. Circuit and method for correlated inputs to a population count circuit
US8661072B2 (en) * 2008-08-19 2014-02-25 International Business Machines Corporation Shared parallel adder tree for executing multiple different population count operations
US8560586B2 (en) * 2010-03-29 2013-10-15 Meltin Bell Linear bit counting implementations
RU2451987C1 (ru) * 2011-04-25 2012-05-27 Государственное образовательное учреждение высшего профессионального образования "Саратовский государственный университет им. Н.Г. Чернышевского" Устройство для расчета порядковых номеров битов с высоким логическим уровнем в строке данных
RU2451988C1 (ru) * 2011-05-05 2012-05-27 Государственное образовательное учреждение высшего профессионального образования "Саратовский государственный университет им. Н.Г. Чернышевского" Быстродействующее устройство для расчета порядковых номеров битов с высоким логическим уровнем в строке данных
US9513907B2 (en) * 2013-08-06 2016-12-06 Intel Corporation Methods, apparatus, instructions and logic to provide vector population count functionality
US9495155B2 (en) * 2013-08-06 2016-11-15 Intel Corporation Methods, apparatus, instructions and logic to provide population count functionality for genome sequencing and alignment
US9361105B2 (en) * 2013-09-20 2016-06-07 Nvidia Corporation Technique for counting values in a register
US10146537B2 (en) * 2015-03-13 2018-12-04 Micron Technology, Inc. Vector population count determination in memory
US10171105B2 (en) * 2016-08-25 2019-01-01 International Business Machines Corporation Carry-less population count
US10050641B1 (en) 2017-03-23 2018-08-14 Hewlett Packard Enterprise Development Lp List manipulation circuits
EP3499362B1 (en) * 2017-12-13 2022-11-30 ARM Limited Vector add-with-carry instruction
JP2023030745A (ja) * 2021-08-24 2023-03-08 富士通株式会社 計算機および計算方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4371951A (en) * 1980-09-29 1983-02-01 Control Data Corporation Apparatus for converting serial input sparse vector format to parallel unpacked format for input to tandem arithmetic logic units
DE3524981A1 (de) * 1985-07-12 1987-01-22 Siemens Ag Anordnung mit einem saettigbaren carry-save-addierer
US4766416A (en) * 1987-07-16 1988-08-23 General Electric Company Circuit for generating the square of a function without multipliers
US4989168A (en) * 1987-11-30 1991-01-29 Fujitsu Limited Multiplying unit in a computer system, capable of population counting
US5321823A (en) * 1988-07-20 1994-06-14 Digital Equipment Corporation Digital processor with bit mask for counting registers for fast register saves
US5455873A (en) * 1990-12-03 1995-10-03 Information International, Inc. Facsimile dynamic thresholding apparatus and method of use thereof

Also Published As

Publication number Publication date
KR940020501A (ko) 1994-09-16
JP3529828B2 (ja) 2004-05-24
JPH06250823A (ja) 1994-09-09
DE4403917C2 (de) 1999-06-02
US5717616A (en) 1998-02-10
DE4403917A1 (de) 1994-08-25

Similar Documents

Publication Publication Date Title
KR100289513B1 (ko) 파풀레이션 카운트의 계산 장치와 계산 및 누적 장치
KR100690225B1 (ko) 데이터 처리기 시스템 및 그룹화를 이용한 명령 시스템
JP3244506B2 (ja) 小型乗算器
JPH07210369A (ja) 並列加算および平均演算を行うための回路およびその方法
US7069288B2 (en) Floating point system with improved support of interval arithmetic
US7613762B2 (en) Floating point remainder with embedded status information
US5301139A (en) Shifter circuit for multiple precision division
CN111936965A (zh) 随机舍入逻辑
US7725522B2 (en) High-speed integer multiplier unit handling signed and unsigned operands and occupying a small area
US5133069A (en) Technique for placement of pipelining stages in multi-stage datapath elements with an automated circuit design system
CN110858137A (zh) 除以整数常数的浮点除法
US5212782A (en) Automated method of inserting pipeline stages in a data path element to achieve a specified operating frequency
US7219117B2 (en) Methods and systems for computing floating-point intervals
US5867413A (en) Fast method of floating-point multiplication and accumulation
US10180826B2 (en) Estimation of bit widths of variables based on liveness
US7958180B2 (en) Multiplier engine
US20140059106A1 (en) Arithmetic circuit for performing division based on restoring division
US7236999B2 (en) Methods and systems for computing the quotient of floating-point intervals
US7366749B2 (en) Floating point adder with embedded status information
WO2009042106A2 (en) Shift-add mechanism
US7831652B2 (en) Floating point multiplier with embedded status information
US6772186B1 (en) Multimedia multiply-adder
US7363337B2 (en) Floating point divider with embedded status information
US7430576B2 (en) Floating point square root provider with embedded status information
US7444367B2 (en) Floating point status information accumulation circuit

Legal Events

Date Code Title Description
A201 Request for examination
N231 Notification of change of applicant
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20080219

Year of fee payment: 8

LAPS Lapse due to unpaid annual fee