JP3529828B2 - ポピュレーション・カウントの計算装置 - Google Patents

ポピュレーション・カウントの計算装置

Info

Publication number
JP3529828B2
JP3529828B2 JP04319794A JP4319794A JP3529828B2 JP 3529828 B2 JP3529828 B2 JP 3529828B2 JP 04319794 A JP04319794 A JP 04319794A JP 4319794 A JP4319794 A JP 4319794A JP 3529828 B2 JP3529828 B2 JP 3529828B2
Authority
JP
Japan
Prior art keywords
adders
bit
adder
bits
level
Prior art date
Legal status (The legal status 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 status listed.)
Expired - Fee Related
Application number
JP04319794A
Other languages
English (en)
Other versions
JPH06250823A (ja
Inventor
デイル・シー・モーリス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
HP Inc
Original Assignee
Hewlett Packard Co
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 Hewlett Packard Co filed Critical Hewlett Packard Co
Publication of JPH06250823A publication Critical patent/JPH06250823A/ja
Application granted granted Critical
Publication of JP3529828B2 publication Critical patent/JP3529828B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、コンピュータに関する
ものであり、とりわけ、コンピュータ・プロセッサがポ
ピュレーション・カウントを計算するためのポピュレー
ション・カウントの計算装置に関するものである。
【0002】
【従来の技術】ポピュレーション・カウントは、ビット
・ストリングにおける「1」の数のカウントを表してい
る。例えば、ビット・パターン「01011001」の
ポピュレーション・カウントは、「4」である。ストリ
ングのポピュレーション・カウントは、多くのアルゴリ
ズム・タイプに、とりわけ、暗号解析に有効である。
【0003】先行技術によるコンピュータの中には、特
殊な命令を実行して、ポピュレーション・カウントの計
算を加速するものもある。一般に、これらの命令は、3
2ビット・サイズのプロセッサ・レジスタから単一のオ
ペランドを取り出して、オペランドにポピュレーション
・カウントの計算を施し、結果をレジスタに戻す。レジ
スタに納めるサイズより大きい2進ストリングのポピュ
レーション・カウントが、必要とされる場合、ポピュレ
ーション・カウントは、レジスタ・サイズによって決ま
る数の部分に分けて実施される。通常の「加算」命令を
利用して、各部分からの結果を合計すると、最終的なポ
ピュレーション・カウントが得られる。
【0004】速度及び効率のため、ポピュレーション・
カウント命令を実行すると、単一CPUサイクルが実行
されるようになっている。しかし、ポピュレーション・
カウント機能は、計算が複雑であるため、極めて高性能
で、クロック周波数の高いCPUの場合、単一サイクル
のポピュレーション・カウント命令を実行するのは問題
がある。現在の趨勢として、コンピュータのデータ幅が
広くなるにつれて、速度問題が一層深刻になっている。
32ビットから離れて、64ビットに向かうのが、今日
の産業界の趨勢である。これは、今や、ポピュレーショ
ン・カウント命令は、従来の2倍の数のビットについて
ポピュレーション・カウントを計算しなければならない
ということを表しており、このため、実行により多くの
時間を要することになる。ポピュレーション・カウント
機能の時間遅延は、オペランドにおけるビット数の対数
にほぼ比例している。従って、16ビットのポピュレー
ション・カウントには、4時間単位を要し、32ビット
のポピュレーション・カウントには、5時間単位を要
し、64ビットのポピュレーション・カウントには、6
時間単位を要することになる。
【0005】図10には、64ビットのレジスタを備え
たコンピュータにおけるポピュレーション・カウント命
令を実行する先行技術が示されている。レジスタ101
には、ポピュレーション・カウントが所望されるオペラ
ンドが納められている。オペランドのビットは、ビット
対に分割され、各ビット対は、1ビット全加算器103
〜109によって加算される。4つの1ビット全加算器
だけしか示されていないが、32の1ビット全加算器を
用いて、オペランド・ビットの加算が行われることにな
る。1ビット全加算器の出力は、対をなすように分割さ
れ、各対をなす2ビット結果は、2ビット加算器111
〜117によって加算される。やはり、示されている2
ビット加算器は、4つであるが、16の2ビット加算器
が用いられることになる。同様に、2ビット加算器から
の出力は、対をなし、8つの3ビット加算器119〜1
33によって加算される。4つの4ビット加算器135
〜141を用いて、8つの3ビット結果が合計され、2
つの5ビット全加算器143及び145を用いて、4つ
の5ビット結果が合計される。最後に、6ビット全加算
器147を用いて、2つの6ビット結果を合計すること
によって、結果151の最後の7ビット149に納めら
れる最終ポピュレーション・カウントが得られる。一般
に、この結果は、コンピュータのレジスタに記憶され
る。
【0006】
【発明が解決しようとする課題】ポピュレーション・カ
ウントを計算する先行技術の問題は、全「加算」プロセ
スを実行するのに必要な時間である。図10に示す例の
場合、ポピュレーション・カウントを実行するには、6
レベルの全加算器が必要とされた。全加算器が用いられ
るので、各レベルの加算器からの桁上げビットが、伝搬
して、最終結果が得られるのに十分な時間を見越してお
かなければならない。例えば、2つの2進ビット・スト
リーム「11」及び「01」を加算する2ビット加算器
の場合、最下位ビットの加算による桁上げによって、次
に下位の位置に繰り上がり、最終的に、桁上げによっ
て、最上位ビット位置につき、正確な答「100」が得
られるまでの時間を容認しなければならない。後続の3
ビット加算器は、2ビットの結果が安定化し、3ビット
加算器によって発生する桁上げが伝搬するのに十分な時
間が終了するまで、正確な答を発生することができな
い。このプロセスは、後続の各レベル毎に継続され、可
能性のある全ての「桁上げ」を考慮した累積遅延は、か
なりのものになる。
【0007】単一CPUサイクルにおけるポピュレーシ
ョン・カウントを可能にするため、大量の電力を消費す
る超高速論理回路の利用を必要とする桁上げ遅延は、最
小限に抑えなければならない。また、CPU内部の遅延
時間を最小限に抑えるため、ポピュレーション・カウン
ト回路要素は、プロセッサのコアに接近して配置しなけ
ればならないので、CPU設計者の融通性に制限を加え
ることになる。
【0008】多数のビットについてポピュレーション・
カウントの計算を行う先行技術は、オペランド・ストリ
ングにおける各ビット・ブロック(本例の場合64ビッ
ト)に3CPUサイクルを必要とする。1つのサイクル
が、メモリ・ロード命令に用いられ、第2のサイクル
が、ポピュレーション・カウント命令の実行に用いら
れ、第3のサイクルが、前もって計算されたポピュレー
ション・カウントの小計に現在のポピュレーション・カ
ウントを加算する加算命令である。3サイクル/ワード
は、大ビット・ストリングに対するポピュレーション・
カウントの計算コストを表している。
【0009】従って、産業界に必要なことは、CPUの
設計において便利なように実現することができ、多数の
ビットに対するポピュレーション・カウントの計算を先
行技術に比べてより速く行えるようにする新しい技術で
ある。
【0010】
【課題を解決するための手段】本発明は、先行技術によ
る設計に比べて、所要時間が短く、設計に融通性を持た
せることができる、ビット・ストリングに対するポピュ
レーション・カウントの計算を行うための、新規で、斬
新な装置を提供する。
【0011】1サイクルで全レジスタ・オペランドのポ
ピュレーション・カウントを計算するポピュレーション
・カウント命令を実行する代わりに、本発明では、オペ
ランドを複数部分に分割するポピュレーション・カウン
ト命令を実施する。こうして、CPUは、複数のより小
さいポピュレーション・カウントを計算し、複数ポピュ
レーション・カウントは、全ストリングの処理が済むま
で、単数ポピュレーション・カウントに換算されない。
ストリングの終端において、ポピュレーション・カウン
トの中間合計が、単一カウントに換算される。単一カウ
ントを得るのに必要な時間は、全ストリングに対して分
割償却され、大きいビット・ストリングの場合、先行技
術の合計時間よりも短くなる。
【0012】ポピュレーション・カウントが少なくなれ
ば、全オペランド・ポピュレーション・カウントに比べ
て実行に要する時間が短くなるので、CPUクロック速
度を高めることが可能になり、CPUチップのレイアウ
トにおいて、チップ設計者により大きい融通性が与えら
れる。本発明の第1の実施例の場合、桁上げ節約加算器
を利用して、ポピュレーション・カウントと第2の合計
オペランドが組み合わせられる。桁上げ節約加算器は、
桁上げを伝搬しないので、先行技術の設計で用いられる
全加算器よりもはるかに高速であり、このアプローチに
よって、1CPUサイクルで、ポピュレーション・カウ
ント及び合計操作が可能になる。
【0013】第2の実施例の場合、ポピュレーション・
カウントは、2つのレジスタに記憶されているオペラン
ドについて計算される。オペランドの各半分が、複数の
部分に分割され、各部分毎に、ポピュレーション・カウ
ントが計算される。複数のポピュレーション・カウント
は、全ストリングの処理が済むまで、単一数のポピュレ
ーション・カウントに換算されない。従って、単一カウ
ントを得るのに必要な時間は、ストリング全体で分割償
却されるので、大きいビット・ストリングの場合、必要
とする合計時間が短くなる。
【0014】
【実施例】図1は、ポピュレーション・カウント命令時
に生じるデータ・フローを表した、本発明のブロック図
である。一般に、ポピュレーション・カウントが所望さ
れるビット・ストリングは、そのサイズがコンピュータ
のデータ幅によって決まるビット・ブロックとしてメモ
リに記憶される。ビット・ブロックは、メモリから読み
取られ、CPUレジスタ201に記憶される。ポピュレ
ーション・カウント及び累算論理ブロック203は、C
PUレジスタ201のオペランドに関してポピュレーシ
ョン・カウントの計算を行い、そのカウントに、累算レ
ジスタ205に記憶された値を加算する。加算結果は、
累算レジスタ205に記憶され、前の値に重ね書きされ
る。ポピュレーション・カウント及び累算機能は、1C
PUサイクル内において実行される。ポピュレーション
・カウント及び累算機能を単一CPUサイクル内で実行
するため、桁上げ節約加算器が用いられる。桁上げ節約
加算器は、2つの2進数を加算するが、桁上げを伝搬し
ない。代わりに、桁上げは、2進値の独立した部分とし
て記憶される。例えば、2つの2進ストリング「11」
と「01」が全加算器で加算されると、結果は、「10
0」の2進ストリングが得られる。同じ2進ストリング
が桁上げ節約加算器で加算されると、結果は、「01」
(桁上げ部分)と「10」(合計部分)または桁上げ節
約フォーマットで「0110」になる。桁上げ節約フォ
ーマットから真の2進フォーマットに変換するため、
「01」が、位置1つ分だけ左にシフトされ、「10」
に加算される。例えば、次の式1のようになる:
【0015】
【0016】図2には、ポピュレーション・カウント命
令の実施の詳細を明らかにする本発明の好適な実施例が
示されている。最初の4つのステージは、図10に関連
して解説した最初の4つのステージと、機能及び動作が
同様である。CPUレジスタ301には、64ビット・
オペランドが記憶される。CPUレジスタ301内のビ
ットは、対をなし、303〜307で表示の32の1ビ
ット全加算器によって加算される。309〜315で表
示の16の2ビット加算器によって、1ビット加算器か
らの対をなす出力が合計される。次に、8つの3ビット
加算器317〜331によって、2ビット加算器からの
対をなす出力が加算される。4つの4ビット全加算器3
33〜339によって、3ビット加算器からの対をなす
出力が加算される。4ビット加算器333からの出力に
よって、桁上げ節約加算器341に対する2つの入力の
一方が得られる。同様に、4ビット全加算器335〜3
39からの出力によって、桁上げ節約加算器343〜3
47に対する2つの入力の一方が得られる。各桁上げ節
約加算器341〜347は、16ビットを加算するが、
4ビット全加算器333〜339は、5ビット長の最大
出力を発生するので、11の最上位ビットが、固定され
て、ゼロになる。
【0017】桁上げ節約加算器341〜347に対する
第2の入力が、累算レジスタ349によって得られる。
累算レジスタは、幅が64ビットであり、4つの16ビ
ットの累算レジスタ・ブロツク351〜357として取
り扱われ、各累算レジスタ・ブロックの値が、桁上げ節
約フォーマットで記憶される。累算レジスタ・ブロッの
最上位の8ビットは、それだけで、桁上げ情報を表し、
最下位の8ビットは、合計情報を表している。4ビット
全加算器333からの5ビットと累算レジスタ・ブロッ
ク351からの16ビットの加算による、桁上げ節約加
算器341の出力は、累算レジスタ・ブロック351の
累算レジスタ349に桁上げ節約フォーマットで記憶さ
れる。このプロセスによって、累算レジスタ351にお
いて、累算レジスタ・ブロック351からの前の部分ポ
ピュレーション・カウントとCPUレジスタ301にお
けるオペランドの最上位の16ビットの部分ポピュレー
ション・カウントを自動的に合計することが可能にな
る。他の桁上げ節約加算器343〜347も、同様に、
動作し、ポピュレーション・カウント命令が実行される
毎に、4つの更新された部分ポピュレーション・カウン
トである結果は、累算レジスタ349に記憶されること
になる。
【0018】実際には、累算レジスタ349は、第1の
ポピュレーション・カウント命令が実行される以前に、
クリアされることになる。各ポピュレーション・カウン
ト命令は、その後、桁上げ節約フォーマットで、4つの
新しい部分ポピュレーション・カウントを累算レジスタ
に追加する。一つ以上の部分ポピュレーション・カウン
トのオーバフローが発生し得るようになる前に、ポピュ
レーション・カウント命令を実行できる回数は、累算レ
ジスタのサイズ並びに桁上げ及び合計に割り当てられる
ビット数によって決まる。サイズが、それぞれ、2n
ットのフィールドについて部分ポピュレーション・カウ
ントを計算するシステムの場合、及び、桁上げ節約フォ
ーマットが、「m」の桁上げビットと、「m」の合計ビ
ットから構成される場合、最大繰り返し数は、下記の式
2によって得られる:
【0019】 imax =2(m-n) +m−n−1 …(2)
【0020】従って、例えば、上述の好適な実施例の場
合、ポピュレーション・カウントは、CPUレジスタ3
01からの16ビット・フィールドについて計算される
ので、n=4(24 =16)になる。上述の桁上げ節約
フォーマットは、8つの桁上げビットと8つの合計ビッ
トであり、従って、m=8になる。従って、オーバフロ
ーの危険を伴わずに、ポピュレーション・カウント命令
を実行することが可能な回数は次の式3のようになる。
【0021】 imax =2(8-4) +8−4−1=19 …(3)
【0022】19回繰り返した後、累算レジスタにおけ
る4つの桁上げ節約値は、さらに、換算する必要があ
る。多くの必要な換算を実行する技術が存在するが、望
ましい技術については、後述する。しかし、他の技術
も、同様にうまく機能する可能性があり、特殊なCPU
命令を実行して、換算を実行することも可能である。
【0023】図3には、累算レジスタにおける4つの部
分ポピュレーション・カウントを4つの2進値に換算す
る場合のステップ1が示されている。桁上げを除去し
て、合計を残すため、累算レジスタ349の値には、累
算レジスタ349における桁上げ位置に対応する位置が
全てゼロ(「00」ベース16)で、他の全ての位置が
1(「FF」ベース16)のマスクとの「アンド」演算
が施される。「アンド」命令の結果として、結果レジス
タ401における桁上げ情報がゼロに置換され、一方、
合計情報は、影響されないが、累算レジスタ349の合
計情報を反映する。
【0024】図4には、換算プロセスのステップ2が示
されている。この場合、累算レジスタ349の内容は、
レジスタ501に記憶されるが、7ビット分だけ右にシ
フトされる。従って、レジスタ501の最上位の7ビッ
ト(ビット56〜63)は、ゼロになり、レジスタ50
1のビット位置0は、レジスタ349のビット位置7に
相当することになる。このステップは、桁上げ情報をオ
フセットさせて、後続のステップで必要とされる合計情
報とのアライメントをとる働きをする。
【0025】図5は、セクション・ライン5に沿って描
かれた図4の詳細図である。7ビット分だけ右へシフト
される前の、累算レジスタ349におけるオペランドの
最下位の20ビット(ビット19〜0)が示されてい
る。シフトが済むと、レジスタ501に結果が保持され
るが、レジスタ501の最下位ビット(ビット19〜
0)には、累算レジスタ349のビット26〜7に納め
られたデータが保持されることになる。
【0026】図6には、換算プロセスのステップ3が示
されている。レジスタ501の内容には、レジスタ60
2に記憶されたマスクとの「アンド」演算が施されて、
合計情報が除去される。マスクは、レジスタ501から
の情報を保存すべきビット位置に「1」を有しており、
他の全てのビット位置にゼロを有している。レジスタ6
03は、「アンド」命令の結果、及び、ゼロに置換され
た桁上げ情報を除く全ての情報を保持している。
【0027】図7には、換算プロセスのステップ4が示
されている。レジスタ603の内容は、結果レジスタ4
01の内容に「加算」され、結果は、それぞれ、長さが
9ビットで、通常の2進フォーマットによる、4つの部
分ポピュレーション・カウント703〜709である。
これらの部分ポピュレーション・カウント703〜70
9は、長いビット・ストリングの部分ポピュレーション
・カウント時に、必要に応じて記憶され、累算される。
最終的には、部分ポピュレーション・カウントを記憶す
る16ビットの累算レジスタ・ブロックがオーバフロー
する可能性があり、さらに換算を施すことが必要にな
る。上述の実施例の場合、オーバフローが可能になる前
に発生可能な繰り返し数は、215である。この数は、
次の式4のようにして導出される。
【0028】 N=22m/(最大換算結果) =22m/2n [2(m-n) +m−n−1] …(4) であり、結果は最も近い整数にまで丸められる。従っ
て、上記例の場合は次の式5のようになる。
【0029】 N=22*8 /304=215 …(5)
【0030】ポイントによっては、部分ポピュレーショ
ン・カウントを単一2進数結果に換算するために、全換
算を実行しなければならない場合もある。この最終慣算
は、当業者には既知のシフティング(shiftin
g)及びマスキングによって実行される。もちろん、各
種換算は、ポピュレーション・カウント・プロセスにお
けるオーバヘッドに相当する。しかし、換算は、必要に
なるまで遅延させられるので、オーバヘッドは、多数の
繰り返しに対して分割償却され、大きいビット・ストリ
ングのポピュレーション・カウントに必要なオーバヘッ
ドが有効に短縮される。ビット・ストリング640ビッ
トを超えると、この新規で、斬新な技術は、所定のテク
ノロジ及び設計規則に関して、先行技術よりも高速にな
る。
【0031】上述の好適な実施例は、完全に換算される
ポピュレーション・カウント及び累算は、一般的には事
実であるが、単一CPUサイクル内において実行できな
いという仮定に立つものである。各CPUの設計には、
異なる制限があるので、最も効率の良いポピュレーショ
ン・カウントの実行は、各CPUの設計毎に異なる可能
性があり、解説の実施例とは異なることになる可能性が
ある。しかし、所定のCPU設計の場合、最も効率の良
いポピュレーション・カウント及び累算設計によって、
ポピュレーション・カウントの換算が最大になり、単一
CPUサイクル内において累算機能を実行するのに十分
な時間も認められる。従って、解説の実施例は、4つの
ポピュレーション・カウントの計算を行ったが、累算機
能が実施される前に、4つの出力を二つの出力に換算す
るCPUのサイクル時間及び特定のテクノロジが認めら
れれば、4ビット全加算器333〜339の出力は、よ
り効率が良くなったであろう。これは、1つ以上の部分
カウントのオーバフローが発生し得るようになる前に、
もっと多くの回数にわたって、ポピュレーション・カウ
ント命令を実行することができるためである。
【0032】本発明の第2の好適な実施例が、図8に示
されている。この図例の場合、4つのポピュレーション
・カウントが、2つのレジスタに記憶されたオペランド
について計算される。第1のレジスタ801に記憶され
たオペランドの部分は、2つの部分803及び805に
分割される。分割したポピュレーション・カウントが、
ポピュレーション・カウント回路807によって両方の
部分(803及び805)について計算され、結果は、
一般的にはレジスタである記憶場所809に記憶され
る。結果は、それぞれ、記憶場所809内の独立した場
所811及び813に記憶される。ポピュレーション・
カウント回路807が実行する機能(Fn)は、オペラ
ンドにおける「1」の数のカウントである。もちろん、
ポピュレーション・カウント回路は、「1」カウントす
る代わりに、「0」をカウントすることも可能である。
【0033】同様に、第2のレジスタ815に記憶され
たオペランドの部分は、2つの部分817及び819に
分割される。ポピュレーション・カウントが、ポピュレ
ーション・カウント回路807によって両方の部分につ
いて計算され、結果は、それぞれ、記憶場所809内の
独立した場所821及び823に記憶される。
【0034】記憶場所809の独立した場所811、8
13、821、823に記憶された四つのポピュレーシ
ョン・カウントは、新たな繰り返し毎に、4つのポピュ
レーション・カウントを計算して、累算しなければなら
ない。しかし、このポピュレーション・カウントの計算
プロセスには、長さが128ビットのオペランドを利用
することによって、大きいストリングに関するポピュレ
ーション・カウントの計算に必要な繰り返し数が、先行
技術によって必要とされた繰り返し数から減少するとい
う利点がある。
【0035】図9は、図8に関連した解説の本発明のよ
り詳細な例示である。第1のレジスタ801に記憶され
たオペランドの64ビットが、全加算器ツリー901に
入力される。この全加算器ツリーは、図2に関連した解
説の1ビット〜4ビット全加算器303〜339と同じ
である。前述のように、この全加算器によって、この6
4ビットについて、それぞれ、サイズが5ビットの、4
つのポピュレーション・カウントが得られる。5ビット
のポピュレーション・カウントのうちの二つのポピュレ
ーション・カウント903及び905が、桁上げ節約加
算器907に入力され、桁上げ節約加算器907の出力
が、記憶場所809内の場所811に記憶される。加算
器ツリー901からの他の2つの5ビット・ポピュレー
ション・カウント909及び911が、第2の桁上げ節
約加算器913に入力され、桁上げ節約加算器913の
出力が、記憶場所809内の場所813に記憶される。
【0036】同様に、第2のレジスタ815からのオペ
ランドの64ビットは、全加算器ツリー915によって
加算され、5ビットのポピュレーション・カウント91
7、919、921、及び、923が得られる。4つの
ポピュレーション・カウントが、2つの桁上げ節約加算
器925及び927に入力され、桁上げ節約加算器から
の出力が、それぞれ、記憶場所809内の場所821及
び823に記憶される。このプロセスの最終結果が、桁
上げ節約フォーマットで記憶場所809に記憶される4
つのポピュレーション・カウントである。
【0037】4つの桁上げ節約加算器907、913、
925及び927は、4つの全加算器を用いた場合に必
要になる時間を節約するために用いられる。また、4つ
の5ビット・ポピュレーション・カウントを生じる全加
算器ツリーが示されているが、特定のCPU設計の制限
によって、このプロセスの修正が命じられる場合もあ
る。例えば、追加時間が許されるなら、全加算器ツリー
に追加全加算器ステージを追加して、全加算器ツリーか
ら二つのポピュレーション・カウントが得られるように
することも可能である。この場合、2つの桁上げ節約加
算器だけしか必要とされない。逆に、4レベル全加算器
ツリーにとって十分な時間があれば、各4レベル全加算
器ツリーが8つのポピュレーション・カウントを生じる
3レベル全加算器ツリーが実施される。この場合、8つ
の桁上げ節約加算器が、必要になり、記憶場所809
は、桁上げ節約フォーマットで八つのポピュレーション
・カウントを保持することになる。
【0038】先行技術では、ポピュレーション・カウン
トを原子命令として取り扱った、すなわち、命令の出力
は、各隣接ビットが隣のビットに対して2n だけ大きい
かまたは小さい値を表すように位置重み付けを施した典
型的な2進数であったが、本発明では、命令を部分に分
割する。本発明によれば、ポピュレーション・カウント
命令の出力は、結果におけるビットが、必ずしも隣接ビ
ットに対して2n だけ大きいかまたは小さい値を表すと
は限らない、複数のポピュレーション・カウントであ
る。この独特な新規の技術によって、大きいビット・ス
トリングのポピュレーション・カウントを、先行技術を
用いた場合に可能な速度よりも速く計算することが可能
になる。
【0039】当業者であれば、本書に開示の本発明に関
する本明細または実施を検討することによって本発明の
他の実施例についても明らかになるであろう。明細書及
び例は、単なる例示とみなされることを意図したもので
あり、本発明の範囲は、特許請求の範囲によって規定さ
れる。
【0040】以上本発明の各実施例について詳述した
が、以下、本発明の各実施例について要約する。 (1). ポピュレーション・カウントが決定されるべ
きビット・ストリングを記憶するオペランド記憶レジス
タと、それぞれ出力を備え、それぞれが前記オペランド
記憶レジスタからの特有ビット・グループを加算する複
数の全加算器と、それぞれ出力を備え、それぞれが合計
レジスタからの特有のビット・グループを前記複数の全
加算器出力のうち特有の出力に加算する複数の桁上げ節
約加算器とを有し、結果レジスタが、ポピュレーション
・カウント、オペランド記憶レジスタからのビットの部
分集合、及び合計レジスタからのビット・グループの合
計を桁上げ節約フォーマットで納めるために、各桁上げ
節約加算器出力が、それぞれ前記結果レジスタに特有の
ビット数で記憶されることを特徴とするポピュレーショ
ン・カウントの計算装置である。
【0041】(2). 前記複数の全加算器は、第1レ
ベルの全加算器がオペランド・レジスタと第2レベルの
全加算器からのビットを加算し、第2レベルにおける各
前記全加算器がそれぞれ前記第1レベルの全加算器から
の各出力が第2レベルの全加算器における前記加算器の
うちの1つのみによって加算されるように第1レベルの
全加算器のうちの2つからの前記出力を加算する前項
(1)に記載のポピュレーション・カウントの計算装置
である。
【0042】(3). 前記第1レベルの全加算器の数
が、オペランド・レジスタのビット数の半分であり、前
記第2レベルの全加算器における全加算器の数が、オペ
ランド・レジスタの数の1/4である前項(2)に記載
のポピュレーション・カウントの計算装置である。
【0043】(4). 各桁上げ節約加算器が、すべて
他の桁上げ節約加算器と同数のビットを加算する前項
(1)に記載のポピュレーション・カウントの計算装置
である。
【0044】(5). 単一のレジスタは、合計レジス
タ及び結果レジスタである前項(1)に記載のポピュレ
ーション・カウントの計算装置である。
【0045】(6). 第1記憶場所に記憶された第1
ストリング・ビットのポピュレーション・カウントを計
算し、第2記憶場所に記憶された第2ストリング・ビッ
トとともに計算されたポピュレーション・カウントを累
算するための装置であって、ビット「1」又は「0」の
ような数を表す第1結果が発生されるように第1記憶場
所に記憶された第1ストリング・ビットからのビットと
ともに加算する加算器と、第1結果及び桁上げ節約フォ
ーマットで第1結果と第2ストリング・ビットの合計を
表す第2結果が発生されるように第2記憶場所に記憶さ
れた第2ストリング・ビットとともに加算する桁上げ節
約加算器と、第2結果が記憶される第2結果記憶場所と
を有する装置である。
【0046】(7). 単一の記憶場所は、第2記憶場
所及び第2結果記憶場所である前項(6)に記載の装置
である。
【0047】(8). 第1ストリング・ビットのポピ
ュレーション・カウントを計算し、第2ストリング・ビ
ットとともに計算されたポピュレーション・カウントを
累算するための装置であって、ポピュレーション・カウ
ントが発生されるべきストリング・ビットを記憶するオ
ペランド記憶レジスタと、前記第1ストリング・ビット
からの各ビットが全加算器の前記第1レベルで1つの加
算器のみにより加算され、各加算器が出力を発生するよ
うに第1ストリング・ビットからの2つのビットととも
に加算する第1レベルの全加算器と、前記第1レベルの
全加算器の各出力が前記第2レベルの全加算器で1つの
加算器のみにより加算され、前記第2レベルの加算器の
での各加算器が出力を発生するように前記第1レベルの
全加算器の2つの出力を加算する第2レベルの全加算器
と、前記第2レベルの全加算器の各出力が前記第3レベ
ルの全加算器で1つの加算器のみにより加算され、前記
第3レベルの加算器での各加算器が出力を発生するよう
に前記第2レベルの全加算器の2つの出力を加算する第
3レベルの全加算器と、前記第3レベルの全加算器の各
出力が前記第4レベルの全加算器で1つの加算器のみに
より加算され、前記第4レベルの加算器での各加算器が
出力を発生するように前記第3レベルの全加算器の2つ
の出力を加算する第4レベルの全加算器と、第4レベル
の全加算器の各出力が1つの桁上げ節約加算器のみによ
って加算されるように、第4レベルの全加算器の出力を
第2ストリング・ビットでのビットの1/4に加算し、
前記第2ストリング・ビットにおけるビットの各1/4
が1つの桁上げ節約加算器のみによって加算され、各桁
上げ節約加算器が桁上げ節約フォーマットで合計を発生
するあるレベルの桁上げ節約加算器とを有し、各合計が
桁上げ節約フォーマットで記憶場所に記憶される装置で
ある。
【0048】(9). 前記第2ストリング・ビットが
前記合計と同じ場所に記憶される前項(8)に記載の装
置である。
【0049】(10) . 第1ストリング・ビットを記
憶する第1記憶場所と、第2ストリング・ビットを記憶
する第2記憶場所と、ビット「1」又は「0」のような
数を表す第1結果が発生されるように第1ストリング・
ビットからのビットとともに加算する第1全加算器と、
ビット「1」又は「0」のような数を表す第2結果が発
生されかつ前記第1加算器が「1」と「0」を加算する
場合及び前記第1加算器が「0」を加算する場合には前
記第1加算器と同じ形式のビット「1」を加算するよう
に前記第2ストリング・ビットからのビットをともに加
算する第2加算器と、それによって前記第1及び第2ス
トリング・ビットに対するポピュレーション・カウント
を表す複数の結果を収納するために、第1結果と第2結
果を記憶する第3記憶場所と、を有するポピュレーショ
ン・カウントの計算装置である。
【0050】
【発明の効果】以上のように、本発明によれば、オペラ
ンド記憶レジスタからのポピュレーション・カウンタを
求めるビット・ストリングから特有のビット・グループ
の加算を複数の全加算器で実行し、桁上げ情報と全加算
器の合計情報とを合計レジスタに記憶し、合計レジスタ
からの特有のビット・グループと全加算器の特有の出力
とを桁上げ節約加算器で加算し、ポピュレーション・カ
ウント、オペランド記憶レジスタからの部分集合、合計
レジスタからのビット・グループとの合計が合計レジス
タにおいて桁上げ節約フォーマットで納めるようにした
ので、計算処理時間を短縮することができるとともに、
設計の融通性を大きくすることができる。
【図面の簡単な説明】
【図1】本発明によるポピュレーション・カウント命令
のブロック図である。
【図2】本発明の好適な実施例を示す図である。
【図3】桁上げ節約フォーマットから2進フォーマット
に部分ポピュレーション・カウントを換算するステップ
1を示す図である。
【図4】換算方法のステップ2を示す図である。
【図5】セクション・ライン5に沿って描かれた図4の
詳細図である。
【図6】換算方法のステップ3を示す図である。
【図7】換算方法のステップ4を示す図である。
【図8】本発明の第2の好適な実施例を示す図である。
【図9】図8に示す実施例の詳細なブロック図である。
【図10】64ビットのポピュレーション・カウントを計
算する先行技術の方法を示す図である。
【符号の説明】
201、301 CPUレジスタ 203 ポピュレーション・カウント及び累算論理ブロ
ック 205、349 累算レジスタ 303、305、307 1ビット全加算器 309、311、313、315 2ビット加算器 317、319、321、323、325、327、3
29、331 3ビット加算器 333、335、337、339 4ビット全加算器 341、343、345、347、925、927 桁
上げ節約加算器 501、602、603、801 レジスタ 807 ポピュレーション・カウント回路 809 記憶場所 815 レジスタ 901 全加算器ツリー 907、913 桁上げ節約加算器 915 全加算器ツリー
───────────────────────────────────────────────────── フロントページの続き (58)調査した分野(Int.Cl.7,DB名) G06F 7/50

Claims (8)

    (57)【特許請求の範囲】
  1. 【請求項1】ビット・ストリングを記憶するオペランド
    記憶レジスタと、 それぞれが出力を有する複数の全加算器であって、それ
    ぞれが、前記オペランド記憶レジスタに記憶されたビッ
    ト・ストリングの異なるビットグループのビットを加算
    して、該異なるビットグループのポピュレーション・カ
    ウントを算出する複数の全加算器と、 それぞれが出力を有する複数の桁上げ節約加算器であっ
    て、それぞれが、累算レジスタに記憶されたポピュレー
    ション・カウントと、前記複数の全加算器のうちの1つ
    から出力されたポピュレーション・カウントとを加算す
    る、複数の桁上げ節約加算器と、 前記複数の桁上げ節約加算器の出力のそれぞれを、所定
    のビット数で記憶する結果レジスタと、を備え、 前記オペランド記憶レジスタから前記複数の全加算器に
    入力された各ビット・グループのポピュレーション・カ
    ウントと、前記累算レジスタから前記複数の桁上げ節約
    加算器のそれぞれに入力されたポピュレーション・カウ
    ントとの合計が、桁上げ節約フォーマットで前記結果レ
    ジスタに記憶されるようにする、 ポピュレーション・カウントを計算する装置。
  2. 【請求項2】前記複数の全加算器は階層順に編成されて
    おり、 第1のレベルの全加算器は、前記オペランド記憶レジス
    タからのビットを加算し、 第2のレベルの全加算器は前記第1のレベルの全加算器
    に接続され、該第2のレベルの全加算器のそれぞれは、
    前記第1のレベルの全加算器のうちの2つの全加算器か
    らの出力を加算し、 前記第1のレベルの全加算器からのそれぞれの出力が、
    前記第2のレベルの全加算器のうちの1つの加算器によ
    ってのみ加算されるようにする、請求項1に記載のポピ
    ュレーション・カウントの計算装置。
  3. 【請求項3】前記第1のレベルの全加算器の数が、前記
    オペランド記憶レジスタのビット数の半分であり、前記
    第2のレベルの全加算器の数が、前記オペランド記憶レ
    ジスタのビット数の4分の1である、請求項2に記載の
    装置。
  4. 【請求項4】それぞれの桁上げ節約加算器が、他の桁上
    げ節約加算器と同じビット数を加算する請求項1に記載
    の装置。
  5. 【請求項5】1つのレジスタが、前記累算レジスタおよ
    び前記結果レジスタの両方を兼ねる請求項1に記載の装
    置。
  6. 【請求項6】第1の記憶場所に記憶された第1のビット
    ・ストリングのポピュレーション・カウントを計算し、
    該計算されたポピュレーション・カウントと、第2の記
    憶場所に記憶された第2のビット・ストリングとを累算
    する装置であって、 前記第1の記憶場所に記憶された第1のビット・ストリ
    ングからのビットを加算して、「1」または「0」のよ
    うなビットの数を表す第1の結果を生成する加算器と、 前記第1の結果と、前記第2の記憶場所に記憶された第
    2のビット・ストリングを加算して、前記第1の結果お
    よび第2のビット・ストリングの合計を桁上げ節約フォ
    ーマットで表す第2の結果を生成する桁上げ節約加算器
    と、 前記第2の結果を記憶する第2の結果記憶場所と、 前記第2の記憶場所および第2の結果記憶場所の両方を
    兼ねた1つの記憶場所と、 を備えるポピュレーション・カウントの計算装置。
  7. 【請求項7】第1のビット・ストリングのポピュレーシ
    ョン・カウントを計算し、該計算されたポピュレーショ
    ン・カウントと第2のビット・ストリングを累算する装
    置であって、 ポピュレーション・カウントが生成されるべきビット・
    ストリングを記憶するオペランド記憶レジスタと、 それぞれが、前記第1のビット・ストリングからの2つ
    のビットを加算して出力を生成する第1のレベルの全加
    算器であって、該第1のビット・ストリングからのそれ
    ぞれのビットが、第1のレベルの全加算器のうちの1つ
    の加算器によってのみ加算されるようにする第1のレベ
    ルの全加算器と、 それぞれが、前記第1のレベルの全加算器からの2つの
    出力を加算して出力を生成する第2のレベルの全加算器
    であって、該第1のレベルの全加算器からのそれぞれの
    出力が、第2のレベルの全加算器のうちの1つの加算器
    によってのみ加算されるようにする第2のレベルの全加
    算器と、 それぞれが、前記第2のレベルの全加算器からの2つの
    出力を加算して出力を生成する第3のレベルの全加算器
    であって、該第2のレベルの全加算器からのそれぞれの
    出力が、第3のレベルの全加算器のうちの1つの加算器
    によってのみ加算されるようにする第3のレベルの全加
    算器と、 それぞれが、前記第3のレベルの全加算器からの2つの
    出力を加算して出力を生成する第4のレベルの全加算器
    であって、該第3のレベルの全加算器からのそれぞれの
    出力が、第4のレベルの全加算器のうちの1つの加算器
    によってのみ加算されるようにする第4のレベルの全加
    算器と、 それぞれが、前記第4のレベルの全加算器からの出力を
    加算するあるレベルの桁上げ節約加算器と、を備え、 前記第4のレベルの全加算器からのそれぞれの出力は、
    1つの前記桁上げ節約加算器によって、前記第2のビッ
    ト・ストリングの4分の1のビットに加算され、該第2
    のビット・ストリングのそれぞれの4分の1のビット
    が、1つの前記桁上げ節約加算器によって加算されるよ
    うにし、 それぞれの桁上げ節約加算器は、桁上げ節約フォーマッ
    トで合計を生成し、 前記合計のそれぞれが、前記桁上げ節約フォーマットで
    記憶場所に記憶されるポピュレーション・カウントの計
    算装置。
  8. 【請求項8】前記第2のビット・ストリングが、前記合
    計と同じ場所に記憶される請求項7に記載のポピュレー
    ション・カウントの計算装置。
JP04319794A 1993-02-19 1994-02-17 ポピュレーション・カウントの計算装置 Expired - Fee Related JP3529828B2 (ja)

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
JPH06250823A JPH06250823A (ja) 1994-09-09
JP3529828B2 true JP3529828B2 (ja) 2004-05-24

Family

ID=21794669

Family Applications (1)

Application Number Title Priority Date Filing Date
JP04319794A Expired - Fee Related JP3529828B2 (ja) 1993-02-19 1994-02-17 ポピュレーション・カウントの計算装置

Country Status (4)

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

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103455304B (zh) * 1995-08-31 2016-04-27 英特尔公司 用于处理指令集的处理器
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 Государственное образовательное учреждение высшего профессионального образования "Саратовский государственный университет им. Н.Г. Чернышевского" Быстродействующее устройство для расчета порядковых номеров битов с высоким логическим уровнем в строке данных
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
US9513907B2 (en) * 2013-08-06 2016-12-06 Intel Corporation Methods, apparatus, instructions and logic to provide vector population count functionality
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
KR100289513B1 (ko) 2001-05-02
DE4403917A1 (de) 1994-08-25
US5717616A (en) 1998-02-10
DE4403917C2 (de) 1999-06-02
KR940020501A (ko) 1994-09-16
JPH06250823A (ja) 1994-09-09

Similar Documents

Publication Publication Date Title
JP3529828B2 (ja) ポピュレーション・カウントの計算装置
JP3244506B2 (ja) 小型乗算器
US8799344B2 (en) Comparator unit for comparing values of floating point operands
JPWO2006112045A1 (ja) 演算処理装置
EP3769208B1 (en) Stochastic rounding logic
US7069288B2 (en) Floating point system with improved support of interval arithmetic
US5742621A (en) Method for implementing an add-compare-select butterfly operation in a data processing system and instruction therefor
US7613762B2 (en) Floating point remainder with embedded status information
US6941334B2 (en) Higher precision divide and square root approximations
Knofel Fast hardware units for the computation of accurate dot products
US20200192633A1 (en) Arithmetic processing device and method of controlling arithmetic processing device
US20040117421A1 (en) Methods and systems for computing floating-point intervals
US6970898B2 (en) System and method for forcing floating point status information to selected values
US7831652B2 (en) Floating point multiplier with embedded status information
EP0677928A1 (en) Process and device for the implementation of the Viterbi algorithm using a metric memory with reduced bandwidth (longer cycle access time)
US20020198917A1 (en) Floating point adder with embedded status information
US7430576B2 (en) Floating point square root provider with embedded status information
US7444367B2 (en) Floating point status information accumulation circuit
US7363337B2 (en) Floating point divider with embedded status information
JPH09128213A (ja) ブロックフローティング処理システムおよび方法
US6981012B2 (en) Method and circuit for normalization of floating point significants in a SIMD array MPP
Nithyashree et al. Design of an efficient vedic binary squaring circuit
JP2821406B2 (ja) 積和演算器およびこれを用いたディジタルフィルタ回路
US20030172100A1 (en) Calculating a sum of numbers using an overflow counter in an environment exceeded by the numbers in bit-size
JPH06301710A (ja) 倍精度積和演算方法および装置

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20040224

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040226

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees