JP3711147B2 - パック・データを処理する1組の命令 - Google Patents
パック・データを処理する1組の命令 Download PDFInfo
- Publication number
- JP3711147B2 JP3711147B2 JP51025297A JP51025297A JP3711147B2 JP 3711147 B2 JP3711147 B2 JP 3711147B2 JP 51025297 A JP51025297 A JP 51025297A JP 51025297 A JP51025297 A JP 51025297A JP 3711147 B2 JP3711147 B2 JP 3711147B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- result
- pack
- source
- bits
- 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 - Lifetime
Links
- 238000000034 method Methods 0.000 title claims description 56
- 230000008569 process Effects 0.000 title description 14
- 230000004044 response Effects 0.000 claims description 23
- 230000033001 locomotion Effects 0.000 claims description 18
- 238000009825 accumulation Methods 0.000 claims description 8
- 238000004364 calculation method Methods 0.000 claims description 7
- 230000009466 transformation Effects 0.000 claims description 3
- 230000026676 system process Effects 0.000 claims 1
- 238000007792 addition Methods 0.000 description 87
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 43
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 43
- 238000010586 diagram Methods 0.000 description 40
- 238000012360 testing method Methods 0.000 description 27
- 230000000295 complement effect Effects 0.000 description 25
- 238000012545 processing Methods 0.000 description 25
- 238000007667 floating Methods 0.000 description 12
- 230000008901 benefit Effects 0.000 description 11
- 230000006870 function Effects 0.000 description 10
- 238000012856 packing Methods 0.000 description 10
- 230000006835 compression Effects 0.000 description 9
- 238000007906 compression Methods 0.000 description 9
- 230000035508 accumulation Effects 0.000 description 5
- 238000013500 data storage Methods 0.000 description 5
- 239000013598 vector Substances 0.000 description 5
- 238000001914 filtration Methods 0.000 description 4
- 229920006395 saturated elastomer Polymers 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 3
- 102100025566 Chymotrypsin-like protease CTRL-1 Human genes 0.000 description 2
- 101000856199 Homo sapiens Chymotrypsin-like protease CTRL-1 Proteins 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 239000003607 modifier Substances 0.000 description 2
- 230000001902 propagating effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000008685 targeting Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/57—Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/14—Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
- G06F17/147—Discrete orthonormal transforms, e.g. discrete cosine transform, discrete sine transform, and variations therefrom, e.g. modified discrete cosine transform, integer transforms approximating the discrete cosine transform
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods 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/607—Methods 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30109—Register structure having multiple operands in a single register
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/3808—Details concerning the type of numbers or the way they are handled
- G06F2207/3812—Devices capable of handling different types of numbers
- G06F2207/382—Reconfigurable for different fixed word lengths
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/3808—Details concerning the type of numbers or the way they are handled
- G06F2207/3828—Multigauge devices, i.e. capable of handling packed numbers without unpacking them
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49905—Exception handling
- G06F7/4991—Overflow or underflow
- G06F7/49921—Saturation, i.e. clipping the result to a minimum or maximum value
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49994—Sign extension
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Databases & Information Systems (AREA)
- Algebra (AREA)
- Discrete Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Document Processing Apparatus (AREA)
- Advance Control (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
- Containers And Plastic Fillers For Packaging (AREA)
Description
1.発明の分野
本発明は特に、コンピュータ・システムの分野に関する。詳細には、本発明はパック・データ処理の分野に関する。
2.関連技術の説明
典型的なコンピュータ・システムでは、ある結果を生成する命令を使用して多数のビット(たとえば、64)で表された値を処理するプロセッサが実装されている。たとえば、加算命令を実行すると、第1の64ビット値と第2の64ビット値が加算され、結果が第3の64ビット値として記憶される。しかし、マルチメディア・アプリケーション(たとえば、CSC(テレビ会議と混合メディア・データ処理を統合したもの)、2D/3Dグラフィックス、画像処理、ビデオ圧縮/圧縮解除、認識アルゴリズム、オーディオ処理を目標とするアプリケーション)では、小数のビットで表すことのできる大量のデータを処理する必要がある。たとえば、通常、グラフィカル・データには8ビットまたは16ビットが必要であり、音声データには8ビットまたは16ビットが必要である。これらのマルチメディアアプリケーションはそれぞれ、1つまたは複数のアルゴリズムを必要とし、これらのアルゴリズムはそれぞれ、いくつかの演算を必要とする。たとえば、アルゴリズムには加算、比較演算、シフト演算が必要である。
従来技術のプロセッサは、マルチメディア・アプリケーション(ならびに同じ特徴を有する他のアプリケーション)の効率を向上させるために、パック・データ・フォーマットを使用する。パック・データ・フォーマットとは、通常、単一の値を表すために使用されるビットが、それぞれ、別々の値を表す、いくつかの固定サイズのデータ要素に分解されるフォーマットである。たとえば、64ビット・レジスタは、それぞれ、別々の32ビット値を表す、2つの32ビット要素に分解することができる。また、このような従来技術のプロセッサは、これらのパック・データ・タイプの各要素を並行して別々に処理する命令を与える。たとえば、パック加算命令は、第1のパック・データおよび第2のパック・データから得た対応するデータ要素を加算する。したがって、マルチメディア・アルゴリズムが多数のデータ要素に対して実行しなければならない5つの演算を含むループを必要とする場合、データをパックし、パック・データ命令を使用してこれらの演算を並行して実行することが望ましい。このように、このようなプロセッサはマルチメディア・アプリケーションをより効率的に処理することができる。
しかし、演算のループが、プロセッサではパック・データに対して実行することのできない演算を含む(すなわち、プロセッサに適切な命令が欠落している)場合、データをアンパックしてその演算を実行する必要がある。たとえば、マルチメディア・アルゴリズムに加算が必要であり、前述のパック加算命令が使用できない場合、プログラマは第1のパック・データと第2のパック・データの両方をアンパックし(すなわち、第1のパック・データと第2のパック・データの両方を含む要素を分離し)、分離された要素どうしを個別に加算し、次いで結果をパックし、パック結果を得て、さらにパック処理できるようにする。そのようなパック処理およびアンパック処理を実行するのに必要な処理時間のために、パック・データ・フォーマットを使用することによる性能上の利点が無効になることが多い。したがって、典型的なマルチメディア・アルゴリズムに必要なすべての演算を与える1組のパック・データ命令を汎用プロセッサ上に組み込むことが望ましい。しかし、現在のマイクロプロセッサ上ではダイ面積が限られているので、追加できる命令の数は限られている。
パック・データ命令を含む1つの汎用プロセッサは、Santa Clara,CaliforniaのIntel Corporationによって製造されているi860XPTMプロセッサである。i860XPプロセッサは要素サイズの異なるいくつかのタイプのパック・データを含む。また、i860XPプロセッサはパック加算命令とパック比較命令とを含む。しかし、パック加算命令は桁上げチェーンを破壊せず、したがってプログラマは、ソフトウェアが実行している演算によってオーバフローが生じることがないようにし、すなわち、演算によってパック・データ内のある要素のビットがパック・データの次の要素にオーバフローしないようにする必要がある。たとえば、「11111111」を記憶している8ビット・パック・データ要素に値1を加算した場合、オーバフローが起こり、結果は「100000000」になる。また、i860XPプロセッサによってサポートされるパック・データ・タイプの小数点の位置は固定される(すなわち、i860XPプロセッサがサポートする8.8数、6.10数、8.24数。この場合、i.j数は、i個の最上位ビットと小数点の後のj個のビットを含む)。したがって、プログラマは、表すことのできる値に関して制限される。i860XPプロセッサはこの2つの命令しかサポートしないので、パック・データを使用するマルチメディア・アルゴリズムで必要とされる多数の演算を実行することはできない。
パック・データをサポートする他の汎用プロセッサは、Motorola,Inc.によって製造されているMC88110TMプロセッサである。MC88110プロセッサは、それぞれの異なるサイズの要素を有するいくつかの異なるパック・データ・フォーマットをサポートする。また、MC88110プロセッサによってサポートされる1組のパック命令には、パックと、アンパックと、パック加算と、パック減算と、パック乗算と、パック比較と、パック・ローテートが含まれる。
MC88110プロセッサのパック・コマンドは、第1のレジスタ対内の各要素の(t*r)/64(tはパック・データの要素内のビット数である)個の最上位ビットを連結して幅rのフィールドを生成することによって動作する。このフィールドは、第2のレジスタ対に記憶されているパック・データの最上位ビットに置き換わる。このパック・データは次いで、第3のレジスタ対に記憶され、左にrビットだけローテートされる。tおよびrに関してサポートされる値の表と、この命令の処理の例を下記の表1および表示2に示す。
パック命令のこの処理系は2つの欠点を有する。第1の欠点は、命令の終わりでローテートを実行するときに追加論理が必要であることである。
第2の欠点は、パック・データ結果を生成するために必要な命令の数である。たとえば、4つの32ビット値を使用して(上記で図示した)第3のレジスタの結果を生成することが望ましい場合、下記の表3に示したようにt=32およびr=32を含む2つの命令が必要になる。
MC88110プロセッサのアンパック・コマンドは、パック・データから得た4ビット・データ要素、8ビット・データ要素、または16ビット・データ要素を2倍の大きさ(8ビット、16ビット、または32ビット)のデータ内の要素の下半分に入れ、それらの上位ビットに零を充填することによって動作する。このアンパック・コマンドの動作の例を表4に示す。
MC88110プロセッサのパック乗算命令は、表5に示したように、パック・データが単一の値を表す場合と同様に、64ビット・パック・データの各要素に32ビット値を乗じる。
この乗算命令は2つの欠点を有する。第1に、この乗算命令は桁上げチェーンを破壊しないように、すなわち、プログラマは、パック・データに対して実行される演算によってオーバフローが生じることがないようにしなければならない。その結果、プログラマは場合によっては、このオーバフローを防止するために追加命令を含める必要がある。第2に、この乗算命令はパック・データ内の各要素に単一の値(すなわち、32ビット値)を乗じる。その結果、ユーザがパック・データ内のどの要素に32ビット値を乗じるかを自由に選択することはできない。したがって、プログラマは、パック・データ内のあらゆる要素上で同じ乗算が必要になるようにデータを準備し、あるいはデータ内の一部の要素に対して乗算が必要になるたびにデータをアンパックして処理時間を浪費しなければならない。したがって、プログラマは複数のマルチプライヤを並行して使用して複数の乗算を実行することができなかった。たとえば、それぞれ長さが1ワードの8つの異なるデータを乗じるには、4回の別々の乗算が必要である。各演算が2つのワードを一度に乗じることによって、ビット16よりも上位のビットに使用されるデータ線および回路が有効に使用される。
MC88110プロセッサのパック比較命令は、第1のパック・データおよび第2のパック・データから得た対応する32ビット・データ要素どうしを比較する。2回の比較はそれぞれ、未満(<)と以上(≧)のどちらかを返すことができ、そのため4つの可能な組合せが得られる。この命令は8ビット結果文字列を返し、このうちの4ビットは、4つの可能な条件のうちのどれが満たされたかを示し、4ビットはそれらのビットの補数を示す。この命令の結果に対する条件付き分岐は、1)条件付き分岐のシーケンスを用い、あるいは2)ジャンプ・テーブルを用いる2つの方法で実施することができる。この命令に関する問題は、if Y>A then X=X+B else X=Xなどの関数を実行するときにデータに基づく条件付き分岐が必要であることである。この関数の擬似コードコンパイル済み表現は下記のとおりである。
新しいマイクロプロセッサは、分岐がどこへ進むかをスペキュラティブに予想することによって実行を加速しようとする。予想が正しい場合、性能は失われず、性能が向上する可能性がある。しかし、予想が誤っている場合、性能が失われる。したがって、予想を正しく行うための誘因は大きい。しかし、(上記のような)データに基づく分岐は、予想アルゴリズムを破壊し、さらに誤った予想を生じさせる予想できない方法で動作する。そのため、この比較命令を使用してデータに対する条件付き分岐をセットアップすると、性能が著しく低下する。
MC88110プロセッサのローテート命令は、64ビット値を0ビットと60ビットとの間のモジュロ4へローテートさせる(たとえば、下記の表6を参照されたい)。
ローテート命令では、レジスタからシフトされた上位ビットがレジスタの下位ビットにシフトされるので、MC88110プロセッサはパック・データ内の各要素を個別にシフトさせることはサポートしない。そのため、パック・データ・タイプ内の各要素を個別にシフトさせる必要があるプログラミング・アルゴリズムでは、1)データをアンパックし、2)各要素に対するシフトを個別に実行し、3)結果をパックした結果パック・データを得て、さらにパック・データ処理できるようにする必要がある。
発明の概要
典型的なマルチメディア・アプリケーションで必要とされる演算をサポートする1組のパック・データ命令をプロセッサに含める方法および装置について説明する。一実施態様では、本発明はプロセッサと記憶領域とを含む。記憶領域は、パック・データを処理するためにプロセッサによって実行されるいくつかの命令を含む。この実施態様では、これらの命令には、パックと、アンパックと、パック加算と、パック減算と、パック乗算と、パック・シフトと、パック比較が含まれる。
プロセッサは、パック命令を受け取ったことに応答して、少なくとも2つのパック・データ内のデータ要素から得たビットの一部をパックし、第3のパック・データを形成する。これに対して、プロセッサは、アンパック命令を受け取ったことに応答して、第1のパック・データ・オペランドから得た少なくとも1つのデータ要素と第2のパック・データ・オペランドから得た少なくとも1つの対応するデータ要素とを含む第4のパック・データを生成する。
プロセッサは、パック加算命令を受け取ったことに応答して、少なくとも2つのパック・データから得た対応するデータ要素を並行して別々に加算する。これに対して、プロセッサは、パック減算命令を受け取ったことに応答して、少なくとも2つのパック・データから得た対応するデータ要素を並行して別々に減算する。
プロセッサは、パック乗算命令を受け取ったことに応答して、少なくとも2つのパック・データから得た対応するデータ要素を並行して別々に乗算する。
プロセッサは、パック・シフト命令を受け取ったことに応答して、パック・データ・オペランド内の各データ要素を、指示されたカウントだけ並行して別々にシフトする。
プロセッサは、パック比較命令を受け取ったことに応答して、指示された関係に従って少なくとも2つのパック・データから得た対応するデータ要素を並行して別々に比較し、この結果としてパック・マスクを第1のレジスタに記憶する。パック・マスクは、少なくとも第1のマスク要素と第2のマスク要素とを含む。第1のマスク要素内の各ビットは1組の対応するデータ要素を比較した結果を示し、それに対して、第2のマスク要素内の各ビットは第2の1組のデータ要素を比較した結果を示す。
【図面の簡単な説明】
本発明を制限ではなく一例として図示する。同じ参照符号は同様な要素を示す。
第1図は、本発明の一実施形態による例示的なコンピュータ・システムを示す図である。
第2図は、本発明の一実施形態によるプロセッサのレジスタ・ファイルを示す図である。
第3図は、本発明の一実施形態によってデータを処理するためにプロセッサによって使用される一般的なステップを示す流れ図である。
第4図は、本発明の一実施形態によるパック・データ・タイプを示す図である。
第5a図は、本発明の一実施形態によるレジスタ内パック・データ表現を示す図である。
第5b図は、本発明の一実施形態によるレジスタ内パック・データ表現を示す図である。
第5c図は、本発明の一実施形態によるレジスタ内パック・データ表現を示す図である。
第6a図は、本発明の一実施形態によるパック・データの使用法を示す制御信号フォーマットを示す図である。
第6b図は、本発明の一実施形態によるパック・データの使用法を示す第2の制御信号フォーマットを示す図である。
パック加減算
第7a図は、本発明の一実施形態によってパック加算を実行する方法を示す図である。
第7b図は、本発明の一実施形態によってパック減算を実行する方法を示す図である。
第8図は、本発明の一実施形態によってパック・データの個別のビットに対してパック加算およびパック減算を実行する回路を示す図である。
第9図は、本発明の一実施形態によってパック・バイト・データに対してパック加算およびパック減算を実行する回路を示す図である。
第10図は、本発明の一実施形態によってパック・ワード・データに対してパック加算およびパック減算を実行する回路を示す論理図である。
第11図は、本発明の一実施形態によってパック・ダブルワード・データに対してパック加算およびパック減算を実行する回路を示す論理図である。
パック乗算
第12図は、本発明の一実施形態によってパック・データに対してパック乗算を実行する方法を示す流れ図である。
第13図は、本発明の一実施形態によってパック乗算を実行する回路を示す図である。
乗算−加減算
第14図は、本発明の一実施形態によってパック・データに対して乗算加算および乗算減算を実行する方法を示す流れ図である。
第15図は、本発明の一実施形態によってパック・データに対して乗算加算または乗算減算、あるいはその両方を実行する回路を示す図である。
パック・シフト
第16図は、本発明の一実施形態によってパック・データに対してパック・シフト演算を実行する方法を示す流れ図である。
第17図は、本発明の一実施形態によってパック・データの個別のバイトに対してパック・シフトを実行する回路を示す流れ図である。
パック
第18図は、本発明の一実施形態によってパック・データに対してパック演算を実行する方法を示す流れ図である。
第19a図は、本発明の一実施形態によってパック・バイト・データに対してパック演算を実行する回路を示す図である。
第19b図は、本発明の一実施形態によってパック・ワード・データに対してパック演算を実行する回路を示す図である。
アンパック
第20図は、本発明の一実施形態によってパック・データに対してアンパック演算を実行する方法を示す流れ図である。
第21図は、本発明の一実施形態によってパック・データに対してアンパック演算を実行する回路を示す図である。
ポピュレーション・カウント
第22図は、本発明の一実施形態によってパック・データに対してポピュレーション・カウント演算を実行する方法を示す流れ図である。
第23図は、本発明の一実施形態によって、パック・データのあるデータ要素に対してポピュレーション・カウント演算を実行し結果パック・データ用の単一の結果データ要素を生成する方法を示す流れ図である。
第24図は、本発明の一実施形態によって、4つのワード・データ要素を有するパック・データに対してポピュレーション・カウント演算を実行する回路を示す図である。
第25図は、本発明の一実施形態によってパック・データの1つのワード・データ要素に対してポピュレーション・カウント演算を実行する詳細な回路を示す図である。
パック論理演算
第26図は、本発明の一実施形態によってパック・データに対していくつかの論理演算を実行する方法を示す流れ図である。
第27図は、本発明の一実施形態によってパック・データに対して論理演算を実行する回路を示す図である。
パック比較
第28図は、本発明の一実施形態によってパック・データに対してパック比較演算を実行する方法を示す流れ図である。
第29図は、本発明の一実施形態によってパック・データの個別のバイトに対してパック比較演算を実行する回路を示す図である。
詳細な説明
本出願は、典型的なマルチメディア・アプリケーションで必要とされるパック・データに対する演算をサポートする1組の命令をプロセッサに含める方法および装置について説明するものである。下記の説明では、本発明を完全に理解していただくために多数の特定の詳細について述べる。しかし、これらの特定の詳細なしに本発明を実施できることが理解されよう。他の例では、本発明を不必要に曖昧にしないように、周知の回路、構造、技法は詳しく示していない。
定義
本発明の実施形態の説明を理解するための基礎として、下記の定義を与える。ビットXないしビットY:
バイナリ数のサブフィールドを定義する。たとえば、バイト001110102(基数2で示されている)のビット0からビット6までは、サブフィールド1110102を表す。バイナリ数の後に続く「2」は基数2を表す。したがって、10002は810に等しく、それに対してF16は1510に等しい。
Rx:
レジスタ。レジスタとは、データを記憶し与えることができる装置である。レジスタの他の機能については下記で説明する。レジスタは必ずしもプロセッサのパッケージの一部ではない。
SRC1、SRC2、DEST:
記憶領域を識別する(たとえば、メモリ・アドレス、レジスタなど)
ソース1−iおよび結果1−i:
データを表す。
コンピュータ・システム
第1図は、本発明の一実施形態による例示的なコンピュータ・システム100を示す。コンピュータ・システム100は、バス101、または情報を伝達するその他の通信ハードウェアおよびソフトウェアと、情報を処理するためにバス101に結合されたプロセッサ109とを含む。プロセッサ109は、CISC形アーキテクチャやRISC形アーキテクチャを含め任意のタイプのアーキテクチャの中央演算処置装置を表す。コンピュータ・システム100はさらに、プロセッサ109が実行すべき情報および命令を記憶するためにバス101に結合されたランダム・アクセス・メモリ(RAM)またはその他の動的記憶装置(メイン・メモリ104と呼ぶ)を含む。メイン・メモリ104は、プロセッサ109による命令の実行時に一時変数またはその他の中間情報を記憶するために使用することもできる。コンピュータ・システム100は、プロセッサ109に関する静的情報および命令を記憶するためにバス101に結合された読取り専用メモリ(ROM)106またはその他の静的記憶装置、あるいはその両方も含む。データ記憶装置107は情報および命令を記憶するためにバス101に結合される。
第1図は、プロセッサ109が実行装置130と、レジスタ・ファイル150と、キャッシュ160と、デコーダ202と、内部バス170とを含むことも示す。もちろん、プロセッサ109は、本発明を曖昧にしないように図示されていない追加回路を含む。
実行装置130は、プロセッサ109が受け取った命令を実行するために使用される。実行装置130は、汎用プロセッサで通常実施される命令を認識するだけでなく、パック・データ・フォーマットに対する演算を実行するためにパック命令セット140内の命令を認識する。一実施形態では、パック命令セット140は、パック演算、アンパック演算、パック加算、パック乗算、パック・シフト演算、パック比較演算、乗算加算、乗算減算、ポピュレーション・カウント演算、1組のパック論理演算(パックANDと、パックANDNOTと、パックORと、パックXORを含む)を下記で説明するようにサポートする命令を含む。パック命令セット140がこれらの命令を含む一実施形態について説明するが、代替実施形態は、これらの命令のサブセットまたはスーパーセットを含むことができる。
これらの命令を含めることによって、マルチメディア・アプリケーションで使用される多数のアルゴリズムで必要とされる演算を、パック・データを使用して実行することができる。したがって、パック・データをアンパックして1つのデータ要素に対して一度に1つまたは複数の演算を実行する必要なしに、必要なデータをパックし、そのパック・データに対して必要な演算を実行するようにアルゴリズムを書くことができる。前述のように、この場合、ある種のマルチメディア・アルゴリズムで必要とされるパック・データ演算をサポートしない従来技術の汎用プロセッサに対する性能上の利点が与えられる。すなわち、マルチメディア・アルゴリズムが、パック・データに対して実行できない演算を必要とする場合、プログラムはデータをアンパックし、別々の要素に対して個別に演算を実行し、次いで結果をパックしてパック結果を得て、さらにパック処理できるようにしなければならない。また、これらの命令のうちのいくつかが実行される開示した方法では、多数のマルチメディア・アプリケーションの性能が向上する。
実行装置130は、内部バス170によってレジスタ・ファイル150に結合される。レジスタ・ファイル150は、データを含む情報を記憶するためのプロセッサ109上の記憶領域を表す。本発明の一態様が、パック・データを処理する前述の命令セットであることを理解されたい。本発明のこの態様によれば、パック・データを記憶するために使用される記憶領域は重大ではない。しかし、レジスタ・ファイル150の一実施形態については下記で第2図を参照して説明する。実行装置130はキャッシュ160およびデコーダ202に結合される。キャッシュ160は、たとえばメイン・メモリ104からのデータまたは制御信号、あるいはその両方をキャッシュするために使用される。デコーダ202は、プロセッサ109が受け取った命令を制御信号またはマイクロコード入口点として復号するために使用される。実行装置130は、このような制御信号またはマイクロコード入口点に応答して、適切な演算を実行する。たとえば、加算命令を受け取った場合、デコーダ202は実行装置130に必要な加算を実行させ、減算命令を受け取った場合、デコーダ202は実行装置130に必要な減算を実行させ、以下同様である。デコーダ202は、いくつかの異なる機構(たとえば、参照テーブル、ハードウェア処理系、PLAなど)を使用して実装される。したがって、デコーダおよび実行装置による様々な命令の実行は一連のif/then文で表されるが、このようなif/then文のシリアル処理の必要なしに命令を実行できることが理解されよう。このif/then処理を論理的に実行する機構は本発明の範囲内であるとみなされる。
第1図は、磁気ディスクや光ディスクなどのデータ記憶装置107と、それに対応するディスク・ドライブも示す。コンピュータ・システム100をバス101を介して表示装置121に結合し、コンピュータ・ユーザに情報を表示することもできる。表示装置121は、フレーム・バッファ、または特殊グラフィックス・レンダリング装置、または陰極線管(CRT)、またはフラット・パネル・ディスプレイ、あるいはそれらの組合せを含むことができる。英数字入力装置122は、英数字キーとその他のキーを含み、通常、選択された情報およびコマンドをプロセッサ109に伝達するためにバス101に結合される。他のタイプのユーザ入力装置は、選択された方向情報およびコマンドをプロセッサ109に伝達し、表示装置121上のカーソルの移動を制御するマウスや、トラックボールや、ペンや、タッチ・スクリーンや、カーソル方向キーなどのカーソル・コントロール123である。この入力装置は通常、2つの軸、すなわち第1の軸(たとえば、x)と第2の軸(たとえば、y)において2自由度を有し、それによって平面内の位置を指定することができる。しかし、本発明は2自由度のみを含む入力装置には限らない。
バス101に結合できる他の装置は、紙、フィルム、または同様なタイプの媒体上に命令、データ、またはその他の情報を印刷するために使用できるハード・コピー装置124である。コンピュータ・システム100は、録音用装置、または情報を記録するためにマイクロフォンに結合されたオーディオ・ディジタイザなどの再生装置125、あるいはその両方に結合することもできる。さらに、この装置は、ディジタル化音声を再生するためにディジタル・アナログ(D/A)変換器に結合されたスピーカを含むことができる。
コンピュータ・システム100はコンピュータ・ネットワーク(たとえば、LAN)内の端末であってもよい。コンピュータ・システム100はその場合、コンピュータ・ネットワークのコンピュータ・サブシステムである。コンピュータ・システム100は任意選択でビデオ・ディジタル化装置126を含む。ビデオ・ディジタル化装置126を使用して、コンピュータ・ネットワーク上の他のユーザへ伝送できるビデオ画像を取り込むことができる。
一実施形態では、プロセッサ109は、x86命令セット(Santa Clara,CaliforniaのIntel Corporationによって製造されているPentium(R)プロセッサなど既存のマイクロプロセッサで使用されている命令セット)と互換性のある命令セットもサポートする。したがって、一実施形態では、プロセッサ109は、Santa Clara,CaliforniaのIntel Corporationによって定義されたIATM−Intel Architectureでサポートされるすべての演算をサポートする(Santa Clara,CaliforniaのIntelから入手可能なMicroprocessors、Intel Data Books第1巻および第2巻(1992年および1993年)を参照されたい)。そのため、プロセッサ109は本発明の演算だけでなく既存のx86演算もサポートすることができる。本発明をx86ベースの命令セットに組み込まれるものとして説明しているが、代替実施形態は本発明を他の命令セットに組み込むことができる。たとえば、本発明は、新しい命令セットを使用する64ビット・プロセッサに組み込むことができる。
第2図は、本発明の一実施形態によるプロセッサのレジスタ・ファイルを示す。レジスタ・ファイル150は、制御/状況情報、整数データ、浮動小数点データ、パック・データを含む情報を記憶するために使用される。第2図に示した実施形態では、レジスタ・ファイル150は整数レジスタ201と、レジスタ209と、状況レジスタ208と、命令ポインタ・レジスタ211とを含む。状況レジスタ208はプロセッサ109の状況を示す。命令ポインタ・レジスタ211は、次に実行すべき命令のアドレスを記憶する。整数レジスタ201、レジスタ209、状況レジスタ208、命令ポインタ・レジスタ211はすべて内部バス170に結合される。任意の追加レジスタも内部バス170に結合される。
一実施形態では、レジスタ209はパック・データと浮動小数点データの両方に使用される。そのような一実施形態では、プロセッサ109は、任意の所与の時間に、レジスタ209をスタック参照浮動小数点レジスタと非スタック参照パック・データ・レジスタのどちらかとして扱わなければならない。この実施形態には、スタック参照浮動小数点レジスタとしてのレジスタ209の処理と非スタック参照パック・データ・レジスタとしてのレジスタ209の処理との間でプロセッサ109を切り換えられるようにする機構が含まれる。他の実施形態では、プロセッサ109はレジスタ209を非スタック参照浮動小数点レジスタおよび非スタック参照パック・データ・レジスタとして同時に処理することができる。他の例として、他の実施形態では、これらの同じレジスタを使用して整数データを記憶することができる。
もちろん、これよりも多くあるいは少ない数の組のレジスタを含む代替実施形態を実施することができる。たとえば、代替実施形態では、浮動小数点データを記憶する独立した1組の浮動小数点レジスタを含むことができる。他の例として、代替実施形態は、それぞれ、制御/状況情報を記憶する、第1の1組のレジスタと、それぞれ、整数、浮動小数点、パック・データを記憶することができる、第2の1組のレジスタとを含むことができる。話を明確にするために、実施形態のレジスタは、意味のうえで特定のタイプの回路に制限すべきではない。実施形態のレジスタはデータを記憶して与え、本明細書で説明する機能を実行できるだけでよい。
いくつかの異なる数のレジスタまたはいくつかの異なるサイズのレジスタ、あるいはその両方を含む様々な数組のレジスタ(たとえば、整数レジスタ201、レジスタ209)を実装することができる。たとえば、一実施形態では、32ビットを記憶するために整数レジスタ201が実装され、8ビットを記憶するためにレジスタ209が実装される(すべての8ビットは浮動小数点データを記憶するために使用され、それに対してパック・データには64ビットのみが使用される)。レジスタ209は8つのレジスタR0212aないしR7212hも含む。R1212a、R2212b、R3212cはレジスタ209内の個別のレジスタの例である。あるレジスタ209の32ビットをある整数レジスタ201内へ移動させることができる。同様に、整数レジスタ内の値をあるレジスタ209の32ビット内へ移動させることができる。他の実施形態では、整数レジスタ201はそれぞれ、64ビットを含み、64ビット・データを整数レジスタ201とレジスタ209との間で移動させることができる。
第3図は、本発明の一実施形態によってデータを処理するためにプロセッサによって使用される一般的なステップを示す流れ図である。たとえば、このような演算には、レジスタ・ファイル150内のレジスタにキャッシュ160、メイン・メモリ104、読取り専用メモリ(ROM)106、またはデータ記憶装置107からのデータをロードするロード演算が含まれる。
ステップ301で、デコーダ202はキャッシュ160とバス101のどちらかから制御信号207を受け取る。デコーダ202は制御信号を復号し、実行すべき演算を判定する。
ステップ302で、デコーダ202はレジスタ・ファイル150、またはメモリ内の位置にアクセスする。レジスタ・ファイル150内のレジスタ、またはメモリ内のメモリ位置は、制御信号207に指定されたレジスタ・アドレスに応じてアクセスされる。たとえば、パック・データに対する演算では、制御信号207はSRC1レジスタ・アドレスと、SRC2レジスタ・アドレスと、DESTレジスタ・アドレスとを含むことができる。SRC1は第1のソース・レジスタのアドレスである。SRC2は第2のソース・レジスタのアドレスである。すべての演算で2つのソース・アドレスが必要であるわけではないので、いくつかのケースではSRC2は任意選択である。演算にSRC2アドレスが必要でない場合、SRC1アドレスのみが使用される。DESTは、結果データが記憶される宛先レジスタのアドレスである。一実施形態では、SRC1またはSRC2がDESTとしても使用される。SRC1、SRC2、DESTについては第6a図および第6b図に関して詳しく説明する。対応するレジスタに記憶されているデータをそれぞれ、ソース1、ソース2、結果と呼ぶ。これらのデータはそれぞれ、長さが64ビットである。
本発明の他の実施形態では、SRC1、SRC2、DESTのどれかあるいはすべてが、プロセッサ109のアドレス可能なメモリ空間内のメモリ位置を定義することができる。たとえば、SRC1はメイン・メモリ104内のメモリ位置を識別することができ、それに対してSRC2は整数レジスタ201内の第1のレジスタを識別し、DESTはレジスタ209内の第2のレジスタを識別する。本明細書の説明を簡単にするために、本発明をレジスタ・ファイル150のアクセスに関して説明する。しかし、このようなアクセスをメモリに対して行うことができる。
ステップ303で、実行装置130がイネーブルされ、アクセスされたデータに対する演算を実行する。ステップ304で、結果が、制御信号207の要件に応じて再びレジスタ・ファイル150に記憶される。
データ・フォーマットおよび記憶フォーマット
第4図は、本発明の一実施形態によるパック・データ・タイプを示す。パック・バイト401、パック・ワード402、パック・ダブルワード403の3つのパック・データ・フォーマットが示されている。パック・バイトは、本発明の一実施形態では、長さが64ビットであり8つのデータを含む。各データ要素の長さは1バイトである。一般に、データ要素とは、同じ長さの他のデータ要素と共に単一のレジスタ(またはメモリ位置)に記憶される個別のデータである。本発明の一実施形態では、レジスタに記憶されるデータ要素の数は、64ビットをデータ要素のビット単位の長さで除した値である。
パック・ワード402は長さが64ビットであり、4つのワード402データ要素を含む。各ワード402データ要素は16ビットの情報を含む。
パック・ダブルワード403は長さが64ビットであり、2つのダブルワード403データ要素を含む。各ダブルワード403データ要素は32ビットの情報を含む。
第5a図ないし第5c図は、本発明の一実施形態によるレジスタ内パック・データ記憶表現を示す。符号なしパック・データ・レジスタ内表現510は、レジスタR0212aないしR7212hのうちの1つでの符号なしパック・バイト401の記憶を示す。各バイト・データ要素ごとの情報は、バイト0ではビット7ないしビット0に記憶され、バイト1ではビット15ないしビット8に記憶され、バイト2ではビット23ないしビット16に記憶され、バイト3ではビット31ないしビット24に記憶され、バイト4ではビット39ないしビット32に記憶され、バイト5ではビット47ないしビット40に記憶され、バイト6ではビット55ないしビット48に記憶され、バイト7ではビット63ないしビット56に記憶される。したがって、レジスタ内のすべての利用可能なビットが使用される。この記憶構成はプロセッサの記憶効率を向上させる。同様に、8つのデータ要素にアクセスする場合、8つのデータ要素に対して1つの演算を同時に実行することができる。符号付きパック・バイト・レジスタ内表現511は符号付きパック・バイト401の記憶を示す。符号インジケータにはあらゆるバイト・データ要素の8ビットしか必要とされないことに留意されたい。
符号なしパック・ワード・レジスタ内表現512は、あるレジスタ209内にワード3ないしワード0がどのように記憶されるかを示す。ビット15ないしビット0はワード0に関するデータ要素情報を含み、ビット32ないしビット16はデータ要素ワード1に関する情報を含み、ビット37ないしビット32はデータ要素ワード2に関する情報を含み、ビット63ないしビット48はデータ要素ワード3に関する情報を含む。符号付きパック・ワード・レジスタ内表現513は符号なしパック・ワード・レジスタ内表現514に類似している。符号インジケータに各ワード・データ要素の16ビットしか必要とされないことに留意されたい。
符号なしパック・ダブルワード・レジスタ内表現514は、レジスタ209がどのように2つのダブルワード・データ要素を記憶するかを示す。ダブルワード0はレジスタのビット31なしビット0に記憶される。ダブルワード1はレジスタのビット63ないしビット32に記憶される。符号付きパック・ダブルワード・レジスタ内表現515は符号なしパック・ダブルワード・レジスタ内表現514に類似している。必要な符号ビットがダブルワード・データ要素の32番目のビットであることに留意されたい。
前述のように、レジスタ209はパック・データと浮動小数点データの両方に使用することができる。本発明のこの実施形態では、アドレスされたレジスタ、たとえばR0212aがパック・データを記憶しているか、それとも浮動小数点データを記憶しているかを追跡するために個別のプログラミング・プロセッサ109が必要になることがある。代替実施形態では、プロセッサ109はレジスタ209内の個別のレジスタに記憶されているデータのタイプを追跡することができる。その場合、この代替実施形態は、たとえば浮動小数点データに対して加算が試みられた場合にエラーを生成する恐れがある。
制御信号フォーマット
下記で、パック・データを処理するためにプロセッサ109によって使用される制御信号フォーマットの一実施形態について説明する。本発明の一実施形態では、制御信号を32ビットとして表される。デコーダ202はバス101から制御信号207を受け取ることができる。他の実施形態では、デコーダ202はキャッシュ160からそのような制御信号を受け取ることもできる。
第6a図は、本発明の一実施形態によるパック・データの使用法を示す制御信号フォーマットを示す。ビット31ないしビット36の演算フィールドOP601は、たとえばパック加算、パック減算など、プロセッサ109によって実行すべき演算に関する情報を与える。ビット25ないしビット20のSRC1 602は、あるレジスタ209のソース・レジスタ・アドレスを与える。このソース・レジスタは制御信号の実行時に使用すべき第1のパック・データ、すなわちソース1を含む。同様に、ビット19ないしビット14のSRC2 603はあるレジスタ209のアドレスを含む。この第2のソース・レジスタは演算の実行時に使用すべきパック・データ、すなわちソース2を含む。ビット5ないしビット0のDEST605はあるレジスタ209のアドレスを含む。この宛先レジスタは、パック・データ演算の結果パック・データ、すなわち結果を記憶する。
ビット12とビット13の制御ビットSZ610は、第1と第2のパック・データ・ソース・レジスタ内のデータ要素の長さを示す。SZ610が012に等しい場合、パック・データはパック・バイト401としてフォーマットされる。SZ610が102に等しい場合、パック・データはパック・ワード402としてフォーマットされる。しかし、他の実施形態では、002または112に等しいSZ610が予約され、これらの値のうちの一方を使用してパック・ダブルワード403を示すことができる。
ビット11の制御ビットT611は、飽和モードを用いて演算を実行するかどうかを示す。T611が1に等しい場合、飽和演算が実行される。T611が零に等しい場合、飽和演算が実行される。飽和演算については下記で説明する。
ビット10の制御ビットS612は符号付き演算の使用を示す。S612が1に等しい場合は、符号付き演算が実行される。S612が0に等しい場合は、符号なしの演算が実行される。
第6b図は、本発明の一実施形態によるパック・データの使用法を示す第2の制御信号フォーマットを示す。このフォーマットは、Intel Corporation、Literature Sales(P.O.Box7641、Mt.prospect、IL、60056−7641)から市販されている「Pentium Processor Family User’s Manual」に記載された一般的な整数命令コード・フォーマットに対応する。OP601、SZ610、T611、S612がすべて1つの大きなフィールドとして組み合わされることに留意されたい。いくつかの制御信号では、ビット3ないしビット5はSRC1 602である。SRC1 602アドレスがある一実施形態では、ビット3ないしビット5はDEST605に対応する。SRC2 603アドレスがある代替実施形態では、ビット0ないしビット2もDEST605に対応する。他の制御信号では、パック・シフト即値演算と同様に、ビット3ないしビット5は命令コード・フィールドへのエクステンションを表す。一実施形態では、このエクステンションによって、プログラマは、シフト・カウント値など制御信号を含む即値を含めることができる。一実施形態では、この即値は制御信号の後に続く。これは、「Pentium Processor Family User’s Manual」の付録F、F−1ページないしF−3ページに詳しく記載されている。ビット0〜2はSRC2 603を表す。この一般的なフォーマットによって、レジスタ間アドレス指定、メモリ・レジスタ間アドレス指定、レジスタ・バイ・メモリ・アドレス指定、レジスタ・バイ・レジスタ・アドレス指定、レジスタ・バイ即値アドレス指定、レジスタ・メモリ間アドレス指定が可能になる。一実施形態では、この一般的なフォーマットは整数レジスタ・レジスタ間アドレス指定とレジスタ整数レジスタ間アドレス指定をサポートすることもできる。
飽和/非飽和の説明
前述のように、T611は演算が任意選択で飽和するかどうかを示す。飽和がイネーブルされた状態で、演算の結果がデータの範囲に対してオーバフローまたはアンダーフローした場合、結果はクランプされる。クランプとは、結果が範囲の最大値または最小値を超えた場合に結果を最大値または最小値に設定することを意味する。アンダーフローの場合、飽和によって結果が範囲内の最低値にクランプされ、オーバフローの場合は最高値にクランプされる。各データ・フォーマットの許容範囲を表7に示す。
前述のように、T611は、飽和演算が実行されるかどうかを示す。したがって、符号なしデータ・フォーマットを使用すると、演算の結果=258であり、飽和がイネーブルされている場合、結果は演算の宛先レジスタに記憶される前に255にクランプされる。同様に、演算の結果=−32999であり、プロセッサ109が飽和をイネーブルした状態で符号付きワード・データ・フォーマットを使用した場合、結果は演算の宛先レジスタに記憶される前に−32768にクランプされる。
パック加算
パック加算演算
本発明の一実施形態では、実行装置130でパック加算を実行することができる。すなわち、本発明では、第1のパック・データの各データ要素を個別に、第2のパック・データの各データ要素に加算することができる。
第7a図は、本発明の一実施形態によってパック加算を実行する方法を示す。ステップ701で、デコーダ202は、プロセッサ109から受け取った制御信号207を復号する。したがって、デコーダ202はパック加算に関する命令コードと、レジスタ209内のSRC1 602アドレス、SRC2 603アドレス、DEST605アドレスと、パック・データ内のデータの飽和/不飽和、符号付き/符号なし、長さを復号する。ステップ702で、デコーダ202は、SRC1 602アドレスおよびSRC2 603アドレスが与えられた場合に、内部バス170を介してレジスタ・ファイル150内のレジスタ209にアクセスする。レジスタ209は、レジスタのこれらのアドレスに記憶されているパック・データ、すなわちそれぞれソース1およびソース2を実行装置130に与える。すなわち、レジスタ209はパック・データを内部バス170を介して実行装置130に伝達する。
ステップ703で、デコーダ202は実行装置130がパック加算を実行できるようにする。デコーダ202はさらに、パック・データ要素の長さ、飽和を使用するかどうか、符号付き演算を使用するかどうかを内部バス170を介して伝達する。ステップ704で、データ要素の長さによって、どのステップを次に実行するかが決定される。パック・データ内のデータ要素の長さが8ビットである(バイト・データ)場合、実行装置130はステップ705aを実行する。しかし、パック・データ内のデータ要素の長さが16ビットである(ワード・データ)場合、実行装置130はステップ705aを実行する。本発明の一実施形態では、8ビット・データ要素長および16ビット・データ要素長のパック加算しかサポートされない。しかし、代替実施形態は異なる長さまたは他の長さをサポートすることができる。たとえば、代替実施形態では32ビット・データ要素長のパック加算をサポートすることもできる。
データ要素の長さが8ビットであると仮定した場合、ステップ705aが実行される。実行装置130はSRC2のビット7ないしビット0にソース1のビット7ないしビット0を加算し、結果パック・データのビット7ないしビット0を生成する。この加算と並行して、実行装置130はソース2のビット15ないしビット8にソース1のビット15ないしビット8を加算し、結果パック・データのビット15ないしビット8を生成する。これらの加算と並行して、実行装置130はソース2のビット23ないしビット16にソース1のビット23ないしビット16を加算し、結果パック・データのビット23ないしビット16を生成する。これらの加算と並行して、実行装置130はソース2のビット31ないしビット24にソース1のビット31ないしビット24を加算し、結果パック・データのビット31ないしビット24を生成する。これらの加算と並行して、実行装置130はソース2のビット39ないしビット32にソース1のビット39ないしビット32を加算し、結果パック・データのビット39ないしビット32を生成する。これらの加算と並行して、実行装置130はソース2のビット47ないしビット40にソース1のビット47ないしビット40を加算し、結果パック・データのビット47ないしビット40を生成する。これらの加算と並行して、実行装置130はソース2のビット55ないしビット48にソース1のビット55ないしビット48を加算し、結果パック・データのビット55ないしビット48を生成する。これらの加算と並行して、実行装置130はソース2のビット63ないしビット56にソース1のビット63ないしビット56を加算し、結果パック・データのビット63ないしビット56を生成する。
データ要素の長さが16ビットであると仮定した場合、ステップ705bが実行される。実行装置130はSRC2のビット15ないしビット0にソース1のビット15ないしビット0を加算し、結果パック・データのビット15ないしビット0を生成する。この加算と並行して、実行装置130はソース2のビット31ないしビット16にソース1のビット31ないしビット16を加算し、結果パック・データのビット31ないしビット16を生成する。これらの加算と並行して、実行装置130はソース2のビット47ないしビット32にソース1のビット47ないしビット32を加算し、結果パック・データのビット47ないしビット32を生成する。これらの加算と並行して、実行装置130はソース2のビット63ないしビット48にソース1のビット63ないしビット48を加算し、結果パック・データのビット63ないしビット48を生成する。
ステップ706で、デコーダ202は、宛先レジスタのDEST605アドレス
を含むあるレジスタ209をイネーブルする。したがって、結果は、DEST605からアドレスされるレジスタに記憶される。
表8aは、パック加算のレジスタ内表現を示す。第1のビット行はソース1パック・データのパック・データ表現である。第2のビット行はソース2パック・データのパック・データ表現である。第3のビット行は結果パック・データのパック・データ表現である。各データ要素の下方の数はデータ要素番号である。たとえば、ソース1データ要素0は100010002である。したがって、データ要素の長さが8ビットであり(バイト・データ)、符号なし不飽和加算を実行する場合、実行装置130は図のような結果パック・データを生成する。
本発明の一実施形態では、結果がオーバフローまたはアンダーフローし、演算が不飽和演算を使用し、結果が単に打ち切られることに留意されたい。すなわち、桁上げビットは無視される。たとえば、第8aでは、結果データ要素1のレジスタ内表現は100010002+100010002=000010002である。同様に、アンダーフローの場合、結果は打ち切られる。この打ち切り形式によって、プログラマは容易にモジュール演算を実行することができる。たとえば、結果データ要素1の数式は(ソース1データ要素1+ソース2データ要素1)mod256=結果データ要素1として表すことができる。さらに、当業者なら、この説明から、状況レジスタ内にエラー・ビットをセットすることによってオーバフローおよびアンダーフローを検出できることが理解されよう。
表8bは、パック・ワード・データ加算のレジスタ内表現を示す。したがって、データ要素の長さが16ビットであり(ワード・データ)、符号なし不飽和加算を実行する場合、実行装置130は図のような結果パック・データを生成する。ワード・データ要素2で、ビット7からの桁上げ(下記の強調表示されたビット1を参照されたい)がビット8に伝搬し、データ要素2をオーバフローさせている(下記の強調表示された「オーバフロー」を参照されたい)ことに留意されたい。
表8cは、パック・ダブルワード・データ加算のレジスタ内表現を示す。この演算は本発明の代替実施形態でサポートされる。したがって、データ要素の長さが32ビットであり(すなわち、ダブルワード・データ)、符号なし不飽和加算を実行する場合、実行装置130は図のような結果パック・データを生成する。ダブルワード・データ要素のビット7およびビット15からの桁上げがそれぞれ、ビット8およびに伝搬していることに留意されたい。
パック加算と通常の加算との違いをより明確に示すために、上記の例のデータを表9で重複する。しかし、この場合、データに対して通常の加算(64ビット)が実行される。ビット7、ビット15、ビット23、ビット31、ビット39、ビット47からの桁上げがそれぞれ、ビット8、ビット16、ビット24、ビット32、ビット40、ビット48に対して行われることに留意されたい。
符号付き/不飽和パック加算
表10は、パック・データのデータ要素長が8ビットである符号付きパック加算の例を示す。飽和は使用されない。したがって、結果はオーバフローすることも、アンダーフローすることもできる。表10は、表8aないし8cおよび表9とは異なるデータを使用する。
符号付き/飽和パック加算
表11は、パック・データのデータ要素長が8ビットである符号付きパック加算の例を示す。飽和は使用されず、したがってオーバフローは最大値にクランプされ、アンダーフローは最小値にクランプされる。表11は表10と同じデータを使用する。この場合、データ要素0およびデータ要素2は最小値にクランプされ、それに対してデータ要素4およびデータ要素6は最大値にクランプされる。
パック減算
パック減算演算
本発明の一実施形態では、実行装置130でパック減算を実行することができる。すなわち、本発明では、第1のパック・データの各データ要素から第2のパック・データの各データ要素を個別に減算することができる。
第7b図は、本発明の一実施形態によってパック減算を実行する方法を示す。ステップ710ないし713がステップ701ないし704に類似していることに留意されたい。
本発明のこの実施形態では、8ビット・データ要素長および16ビット・データ要素長のパック減算しかサポートされない。しかし、代替実施形態は異なる長さまたは他の長さをサポートすることができる。たとえば、代替実施形態では32ビット・データ要素長のパック減算をサポートすることもできる。
データ要素長が8ビットであると仮定した場合、ステップ714aおよび715aが実行される。実行装置130は、ソース2のビット7ないしビット0の2の補数をとる。この2の補数と並行して、実行装置130はソース2のビット15ないしビット8の2の補数をとる。これらの2の補数と並行して、実行装置130はソース2のビット23ないしビット16の2の補数をとる。この2の補数と並行して、実行装置130はソース2のビット31ないしビット24の2の補数をとる。これらの2の補数と並行して、実行装置130はソース2のビット39ないしビット32の2の補数をとる。この2の補数と並行して、実行装置130はソース2のビット47ないしビット40の2の補数をとる。これらの2の補数と並行して、実行装置130はソース2のビット55ないしビット48の2の補数をとる。この2の補数と並行して、実行装置130はソース2のビット63ないしビット56の2の補数をとる。ステップ715aで、実行装置130は、ステップ705aに関して概略的に説明したように、ソース2の2の補数ビットをソース1のビットに加算する。
データ要素長が16ビットであると仮定した場合、ステップ714bおよび715bが実行される。実行装置130は、ソース2のビット15ないしビット0の2の補数をとる。この2の補数と並行して、実行装置130はソース2のビット31ないしビット16の2の補数をとる。これらの2の補数と並行して、実行装置130はソース2のビット47ないしビット32の2の補数をとる。この2の補数と並行して、実行装置130はソース2のビット63ないしビット48の2の補数をとる。ステップ715bで、実行装置130は、ステップ705bに関して概略的に説明したように、ソース2の2の補数ビットをソース1のビットに加算する。
ステップ714および715が、第2の数から第1の数を減算するために本発明の一実施形態で使用される方法であることに留意されたい。しかし、当技術分野では他の減算形式が知られており、本発明を、2の補数演算を使用することに限られるとみなすべきではない。
ステップ716で、デコーダ202は宛先レジスタの宛先アドレスを含むレジスタ209をイネーブルする。したがって、結果パック・データはレジスタ209のDESTレジスタに記憶される。
表12はパック減算のレジスタ内表現を示す。データ要素の長さが8ビットであり(バイト・データ)、符号なし不飽和減算を実行すると仮定した場合、実行装置130は図のような結果パック・データを生成する。
パック・データ加減算回路
第8図は、本発明の一実施形態によってパック・データの個別に対してパック加算およびパック減算を実行する回路を示す。第8図は、修正ビット・スライス加減算器800を示す。加減算器801aないし801bによって、ソース2の2つのビットをソース1に加算し、あるいはソース1から減算することができる。演算桁上げ制御装置803は、制御装置809aへ制御信号を送り加算または減算をイネーブルする。したがって、加減算器801aは、ソース2i805a上で受け取ったビットiをソース1i804a上で受け取ったビットiに対して加算または減算し、結果i806a上で送られる結果ビットを生成する。Cin807aないしCin807bおよびCout808aないしCout808bは、加算器および減算器で一般に使用される桁上げ制御回路を表す。
ビット制御装置802は、Cini+1807bおよびCoutiを制御するためにパック・データ・イネーブル811を介して演算桁上げ制御装置803からイネーブルされる。たとえば表13aで、符号なしパック・バイト加算が実行される。加減算器801aがソース2のビット7にソース1のビット7を加算した場合、演算桁上げ制御装置803はビット制御装置802をイネーブルし、桁上げのビット7からビット8への伝搬を停止する。
しかし、符号なしパック・ワード加算が実行され、加減算器801aが同様に、ソース2のビット7にソース1のビット7を加算するために使用される場合、ビット制御装置802は桁上げをビット8へ伝搬させる。表13bはこの結果を示す。この伝搬は、パック・ダブルワード加算とアンパック加算に対して許可される。
加減算器801aは、まずソース2i805aを反転させることによってソース2i805aの2の補数を形成し1を加算することによって、ソース1i804aからビット・ソース2i805aを減算する。次いで、加減算器801aはこの結果をソース1i804aに加算する。ビット・スライス2の補数技法は当技術分野で良く知られており、当業者には、そのようなビット・スライス2の補数回路をどのように設計すべきかが理解されよう。桁上げの伝搬がビット制御装置802および演算桁上げ制御装置803によって制御されることに留意されたい。
第9図は、本発明の一実施形態によってパック・バイト・データに対してパック加算およびパック減算を実行する回路を示す。ソース1バス901およびソース2バス902はそれぞれ、情報信号をソース1in906aないし906hおよびソース2in905aないし905hを介して加減算器908aないし908hへ送る。したがって、加減算器908aは、ソース2のビット7ないしビット0をソース1のビット7ないしビット0に対して加減算し、加減算器908bは、ソース2のビット15ないしビット8をソース1のビット15ないしビット8に対して加減算し、以下同様である。CTRL904aないし904hは、桁上げの伝搬をイネーブルし、飽和をイネーブル/ディスエーブルし、符号付き/符号なし演算をイネーブル/ディスエーブルする制御信号をパック制御装置911を介して演算制御装置903から受け取る。演算制御装置903は、CTRL904aないし904hから桁上げ情報を受け取り、それを次の上位加減算器908aないし908hに伝搬させないことによって、桁上げの伝搬をディスエーブルする。したがって、演算制御装置903は64ビット・パック・データに対して演算桁上げ制御装置803およびビット制御装置802の演算を実行する。当業者なら、第1図ないし第9図および上記の説明で例示したそのような回路を作製することができよう。
加減算器908aないし908hは結果情報を様々なパック加算の結果出力907aないし907hを介して結果レジスタ901aないし910hへ伝達する。各結果レジスタ910aないし910hは結果情報を記憶し、次いで結果バス909上へ送る。この結果情報は次いで、DEST605レジスタ・アドレスによって指定された整数レジスタに記憶される。
第10図は、本発明の一実施形態によってパック・ワード・データに対してパック加算およびパック減算を実行する回路の論理図である。この場合、パック・ワード演算が実行される。ビット8とビット7との間、ビット24とビット23との間、ビット40とビット39との間、ビット56とビット55との間の桁上げの伝搬は演算制御装置903によってイネーブルされる。したがって、仮想加減算器1008aとして示した加減算器908aおよび908bは協働し、パック・ワード・データ・ソース2の第1のワード(ビット15ないしビット0)をパック・ワード・データ・ソース1の第1のワード(ビット15ないしビット0)に対して加減算し、仮想加減算器1008bとして示した加減算器908cおよび908dは協働し、パック・ワード・データ・ソース2の第2のワード(ビット31ないしビット16)をパック・ワード・データ・ソース1の第2のワード(ビット31ないしビット16)に対して加減算し、以下同様である。
仮想加減算器1008aないし1008dは結果情報を結果出力1007aないし1007d(組合せ結果出力907aないし907b、907cないし907d、907eないし907f、907gないし907h)を介して仮想結果レジスタ1010aないし1010dへ伝達する。各仮想結果レジスタ1010aないし1010d(組合せ結果レジスタ910aないし910b、910cないし910d、910eないし910f、910gないし910h)は、結果バス909上へ伝達すべき16ビット結果データ要素を記憶する。
第11図は、本発明の一実施形態によってパック・ダブルワード・データに対してパック加算およびパック減算を実行する回路の論理図である。ビット8とビット7との間、ビット16とビット15との間、ビット24とビット23との間、ビット40とビット39との間、ビット48とビット47との間、ビット56とビット55との間の桁上げの伝搬は演算制御装置903によってイネーブルされる。したがって、仮想加減算器1108aとして示した加減算器908aないし908dは協働し、パック・ダブルワード・データ・ソース2の第1のダブルワード(ビット31ないしビット0)をパック・ダブルワード・データ・ソース1の第1のダブルワード(ビット31ないしビット0)に対して加減算し、仮想加減算器1108bとして示した加減算器908eないし908hは協働し、パック・ダブルワード・データ・ソース2の第2のダブルワード(ビット63ないしビット32)をパック・ダブルワード・データ・ソース1の第2のワード(ビット63ないしビット32)に対して加減算し、以下同様である。
仮想加減算器1108aないし1108bは結果情報を結果出力1107aないし1107b(組合せ結果出力907aないし907d、および907eないし907h)を介して仮想結果レジスタ1110aないし1110bへ伝達する。各仮想結果レジスタ1110aないし1110b(組合せ結果レジスタ910aないし910d、および910eないし910h)は、結果バス909上へ伝達すべき32ビット結果データ要素を記憶する。
パック乗算
パック乗算演算
本発明の一実施形態では、SRC1レジスタは被乗数データ(ソース1)を含み、SRC2は乗数データ(ソース2)を含み、DESTレジスタは乗算の積の一部(結果)を含む。すなわち、ソース1は、ソース2のそれぞれのデータ要素が独立に乗算される各データ要素を有する。乗算のタイプに応じて、結果は積の上位ビットまたは下位ビットを含む。
本発明の一実施形態では、上位符号なしパック乗算、上位符号付きパック乗算、下位パック乗算の各乗算がサポートされる。上位|下位は、乗算の積のどのビットを結果に含めるかを示す。これが必要であるのは、2つのNビット数の乗算の結果、2N個のビットを有する積が得られるからである。各結果データ要素が被乗数および乗数のデータ要素と同じサイズを有するので、結果では積の半分しか表すことができない。上位では上位ビットが結果として出力される。下位では下位ビットが結果として出力される。たとえば、ソース1[7:0]とソース2[7:0]との符号なし上位パック乗算では、積の上位ビットが結果[7:0]に記憶される。
本発明の一実施形態では、上位|下位演算修飾子を使用することによって、あるデータ要素から次に上位のデータ要素へのオーバフローが起こる可能性がなくなる。すなわち、この修飾子によって、プログラマはオーバフローに気を使わずに積のどのビットを結果に含めるかを選択することができる。プログラマは、パック乗算の組合せを使用して完全な2Nビット積を生成することができる。たとえば、上位符号なしパック乗算を使用し、次いで同じソース1およびソース2を用いた下位パック乗算を使用して、完全な(2N)積を得ることができる。上位演算を行うのは、積の重要な部分が積の上位ビットだけであることが多いからである。プログラマは、多くの場合非パック・データ演算で必要とされるように最初に打ち切りを実行する必要なしに、積の上位ビットを得ることができる。
本発明の一実施形態では、ソース2の各データ要素は異なる値を有することができる。このため、プログラマはソース1の各被乗数に対する乗数として異なる値を有することができる。
第12図は、本発明の一実施形態によってパック・データに対してパック乗算を実行する方法を示す流れ図である。
ステップ1201で、デコーダ202は、プロセッサ109から受け取った制御信号207を復号する。したがって、デコーダ202は適切な乗算に関する命令コードと、レジスタ209内のSRC1 602アドレス、SRC2 603アドレス、DEST605アドレスと、パック・データ内のデータ要素の符号付き/符号なし、上位|下位、長さを復号する。
ステップ1202で、デコーダ202は、SRC1 602アドレスおよびSRC2 603アドレスが与えられた場合に、内部バス170を介してレジスタ・ファイル150内のレジスタ209にアクセスする。レジスタ209は、SRC1 602レジスタに記憶されているパック・データ(ソース1)と、SRC2 603レジスタに記憶されているパック・データ(ソース2)を実行装置130に与える。すなわち、レジスタ209はパック・データを内部バス170を介して実行装置130に伝達する。
ステップ1203で、デコーダ202は実行装置130が適切なパック乗算を実行できるようにする。デコーダ202はさらに、乗算に関するデータ要素のサイズおよび上位|下位を内部バス170を介して伝達する。
ステップ1210で、データ要素のサイズによって、どのステップを次に実行するかが決定される。データ要素のサイズが8ビットである(バイト・データ)場合、実行装置130はステップ1212を実行する。しかし、パック・データ内のデータ要素の長さが16ビットである(ワード・データ)場合、実行装置130はステップ1214を実行する。一実施形態では、16ビット・データ要素サイズのパック乗算しかサポートされない。他の実施形態では、8ビット・データ要素サイズおよび16ビット・データ要素サイズのパック乗算がサポートされる。しかし、他の実施形態では、32ビット・データ要素サイズのパック乗算もサポートされる。
データ要素のサイズが8ビットであると仮定した場合、ステップ1212が実行される。ステップ1212では下記のことが実行される。ソース1のビット7ないしビット0にソース2のビット7ないしビット0が乗算され、結果のビット7ないしビット0が生成される。ソース1のビット15ないしビット8にソース2のビット15ないしビット8が乗算され、結果のビット15ないしビット8が生成される。ソース1のビット23ないしビット16にソース2のビット23ないしビット16が乗算され、結果のビット23ないしビット16が生成される。ソース1のビット31ないしビット24にソース2のビット31ないしビット24が乗算され、結果のビット31ないしビット24が生成される。ソース1のビット39ないしビット32にソース2のビット39ないしビット32が乗算され、結果のビット39ないしビット32が生成される。ソース1のビット47ないしビット40にソース2のビット47ないしビット40が乗算され、結果のビット47ないしビット40が生成される。ソース1のビット55ないしビット48にソース2のビット55ないしビット48が乗算され、結果のビット55ないしビット48が生成される。ソース1のビット63ないしビット56にソース2のビット63ないしビット56が乗算され、結果のビット63ないしビット56が生成される。
データ要素のサイズが16ビットであると仮定した場合、ステップ1214が実行される。ステップ1214では下記のことが実行される。ソース1のビット15ないしビット0にソース2のビット15ないしビット0が乗算され、結果のビット15ないしビット0が生成される。ソース1のビット31ないしビット16にソース2のビット31ないしビット16が乗算され、結果のビット31ないしビット16が生成される。ソース1のビット47ないしビット32にソース2のビット47ないしビット32が乗算され、結果のビット47ないしビット32が生成される。ソース1のビット63ないしビット48にソース2のビット63ないしビット48が乗算され、結果のビット63ないしビット48が生成される。
一実施形態では、ステップ1212の乗算が同時に実行される。しかし、他の実施形態ではこれらの乗算が順次実行される。他の実施形態では、これらの乗算のいくつかが同時に実行され、いくつかが順次実行される。この議論はステップ1214の乗算にも当てはまる。
ステップ1220で、DESTレジスタに結果が記憶される。
表14は、パック・ワード・データに対する符号なし上位パック乗算のレジスタ内表現を示す。第1のビット行はソース1のパック・データ表現である。第2のビット行はソース2のデータ表現である。第3のビット行は結果のパック・データ表現である。各データ要素ビットの下方の数はデータ要素番号である。たとえば、ソース1データ要素2は11111111 000000002である。
表15は、パック・ワード・データに対する上位符号付きパック乗算のレジスタ内表現である。
表16は、パック・ワード・データに対する下位パック乗算のレジスタ内表現である。
パック・データ乗算回路
一実施形態では、アンパック・データに対する単一の乗算と同じ数のクロック・サイクルで複数のデータ要素に対して乗算を行うことができる。同じ数のクロック・サイクルで乗算を実行するために並行処理が使用される。すなわち、各レジスタは、データ要素に対して乗算を実行するよう同時に命令される。このことについて下記で詳しく説明する。
第13図は、本発明の一実施形態によってパック乗算を実行する回路を示す。演算制御装置1300は、乗算を実行する回路を制御する。演算制御装置1300は乗算用の制御信号を処理し、上位|下位イネーブル1380、バイトワード・イネーブル1381、符号イネーブル1382の各出力を有する。上位|下位イネーブル1380は、結果に積の上位ビットを含めるか、それとも下位ビットを含めるかを識別する。バイトワード・イネーブル1381は、バイト・パック・データ乗算を実行するか、それともワード・パック・データ乗算を実行するかを識別する。符号イネーブル1382は、符号付き乗算を使用すべきかどうかを識別する。
パック・ワード・マルチプライヤ1301は4つのワード・データ要素を同時に乗算する。パック・バイト・マルチプライヤ1302は8つのバイト・データ要素を乗算する。パック・ワード・マルチプライヤ1301とパック・バイト・マルチプライヤ1302は共に、ソース1[63:0]1331、ソース2[63:0]1333、符号イネーブル1382、上位|下位イネーブル1380の各入力を有する。
パック・ワード・マルチプライヤ1301は、16×16マルチプライヤA1310、16×16マルチプライヤB1311、16×16マルチプライヤC1312、16×16マルチプライヤD1313の4つの16×16マルチプライヤ回路を含む。16×16マルチプライヤA1310は入力としてソース1[15:0]とソース2[15:0]とを有する。16×16マルチプライヤB1311は入力としてソース[31:16]とソース2[31:16]とを有する。16×16マルチプライヤC1312は入力としてソース1[47:32]とソース2[47:32]とを有する。16×16マルチプライヤD1313は入力としてソース1[63:48]とソース2[63:48]とを有する。各16×16マルチプライヤは符号イネーブル1382に結合される。各16×16マルチプライヤは32ビット積を生成する。各マルチプライヤごとに、マルチプレクサ(それぞれ、M×0 1350、M×1 1351、M×2 1352、M×3 1353)は32ビットの結果を受け取る。上位|下位イネーブル1380の値に応じて、各マルチプレクサは積の上位16ビットまたは下位16ビットを出力する。4つのマルチプレクサの出力は1つの64ビット結果として組み合わされる。この結果は任意選択で結果レジスタ1 1371に記憶される。
パック・バイト・マルチプライヤ1302は8つの8×8マルチプライヤ回路、すなわち8×8マルチプライヤA1320ないし8×8マルチプライヤH1327を含む。各8×8マルチプライヤはソース1[63:0]1331およびソース2[63:0]1333のそれぞれからの8ビット入力を有する。たとえば、8×8マルチプライヤA1320は入力としてソース1[7:0]およびソース2[7:0]を有し、それに対して8×8マルチプライヤH1327は入力としてソース1[63:56]およびソース2[63:56]を有する。各8×8マルチプライヤは符号イネーブル1382に結合される。各8×8マルチプライヤは16ビットの積を生成する。各マルチプライヤごとに、マルチプレクサ(たとえば、M×4 1360およびM×11 1367)は16ビットの結果を受け取る。上位|下位イネーブル1380の値に応じて、各マルチプレクサは積の上位8ビットまたは下位8ビットを出力する。8つのマルチプレクサの出力は1つの64ビット結果として組み合わされる。この結果は任意選択で結果レジスタ2 1372に記憶される。バイトワード・イネーブル1381は、演算で必要とされるデータ要素のサイズに応じて特定の結果レジスタをイネーブルする。
一実施形態では、乗算を実現するために使用される面積が、2つの8×8数の両方または1つの16×16数を乗算することのできる回路を作製することによって削減される。すなわち、2つの8×8マルチプライヤおよび1つの8×8マルチプライヤが1つの8×8・16×16マルチプレクサとして組み合わされる。演算制御装置1300は乗算に適切なサイズをイネーブルする。そのような実施形態では、マルチプレクサが使用する物理的面積が削減されるが、パック・バイト乗算およびパック・ワード乗算を実行することは困難である。パック・ダブルワード乗算をサポートする他の実施形態では、1つのマルチプライヤが4つの8×8乗算、2つの16×16乗算、または1つの32×32乗算を実行することができる。
一実施形態では、パック・ワード乗算しか行われない。この実施形態には、パック・バイト・マルチプライヤ1302および結果レジスタ2 1372は含まれない。
前述のパック乗算を命令セットに含めることの利点
したがって、前述のパック乗算命令では、ソース1内の各データ要素にソース2内のそれぞれのデータ要素を独立に乗算することができる。もちろん、ソース2の各要素に同じ数を記憶することによって、ソース1内の各要素に同じ数を乗算することを必要とするアルゴリズムを実行することができる。また、この乗算命令では、桁上げチェーンを破壊することによってオーバフローが防止され、それによってプログラマがこの責任から解放され、命令によってデータをオーバフローを防止するように準備することが不要になり、よりロバストなコードが得られる。
これに対して、そのような命令をサポートしない従来技術の汎用プロセッサは、データ要素をアンパックし、乗算を実行し、次いで結果を将来パック処理できるようにパックすることによってこの演算を実行する必要がある。したがって、プロセッサ109は、1つの命令を使用しそれぞれの異なるマルチプライヤによってパック・データのそれぞれの異なるデータ要素を並行して乗算することができる。
典型的なマルチメディア・アルゴリズムは多数の乗算を実行する。したがって、これらの乗算を実行する必要がある命令の数を削減することによって、このようなマルチメディア・アルゴリズムの性能は向上する。したがって、プロセッサ109は、それ自体がサポートする命令セットにこの乗算命令を与えることによって、この機能を必要とするアルゴリズムをより高い性能レベルで実行することができる。
乗算−加減算
乗算−加減算演算
一実施形態では、下記で表17aおよび表17bに示すように単一の乗算−加算命令を使用して2つの乗算−加算演算が実行される。表17aは、開示された乗算−加算命令の簡略化表現を示し、それに対して表17bは、開示された乗算−加算命令のビット・レベル例を示す。
乗算−減算演算は、加算が減算で置き換えられることを除いて乗算−加算演算と同じである。2つの乗算−減算演算を実行する乗算−減算命令の例の演算を表18に示す。
本発明の一実施形態では、SRC1レジスタはパック・データ(ソース1)を含み、SRC2レジスタはパック・データ(ソース2)を含み、DESTレジスタはソース1およびソース2に対して乗算−加算命令または乗算−減算命令を実行した結果を含む。乗算−加算命令または乗算−減算命令の第1のステップで、ソース1の各データ要素がソース2のそれぞれのデータ要素と独立に乗算され、1組のそれぞれの中間結果が生成される。乗算−加算命令を実行する際、これらの中間結果が対ごとに合計され、結果的に得られる2つのデータ要素が生成され結果のデータ要素として記憶される。これに対して、乗算−減算命令を実行する際、これらの中間結果が対ごとに減算され、結果的に得られる2つのデータ要素が生成され結果のデータ要素として記憶される。
代替実施形態では、データ要素のビット数、または中間結果のビット数、または結果内のデータ要素のビット数、あるいはそれらの組合せを変更することができる。代替実施形態では、ソース1のデータ要素の数、ソース2のデータ要素の数、結果のデータ要素の数を変更することができる。たとえば、ソース1およびソース2がそれぞれ8つのデータ要素を有する場合、乗算−加減算命令を実施して4つのデータ要素を含む結果を生成することも(結果の各データ要素は2つの中間結果の加算を表す)、2つのデータ要素を含む結果を生成する(結果の各データ要素は4つの中間結果の加算を表す)こともでき、以下同様である。
第14図は、本発明の一実施形態によってパック・データに対して乗算−加算演算および乗算−減算演算を実行する方法を示す流れ図である。
ステップ1401で、デコーダ202は、プロセッサ109が受け取った制御信号207を復号する。したがって、デコーダ202は乗算−加算命令または乗算−減算命令に関する命令コードを復号する。
ステップ1402で、デコーダ202はSRC1 602アドレスおよびSRC2 603アドレスが与えられた場合に内部バス170を介してレジスタ・ファイル150内のレジスタ209にアクセスする。レジスタ209は、SRC1 602レジスタに記憶されているパック・データ(ソース1)と、SRC2 603レジスタに記憶されているパック・データ(ソース2)を実行装置130に与える。すなわち、レジスタ209はパック・データを内部バス170を介して実行装置130に伝達する。
ステップ1403で、デコーダ202は実行装置130が命令を実行できるようにする。命令が乗算−加算命令である場合、フローはステップ1414へ移る。しかし、命令が乗算−減算命令である場合、フローはステップ1415へ移る。
ステップ1414で下記のことが実行される。ソース1のビット15ないしビット0にソース2のビット15ないしビット0が乗算され、第1の32ビット中間結果(中間結果1)が生成される。ソース1のビット31ないしビット16にソース2のビット31ないしビット16が乗算され、第2の32ビット中間結果(中間結果2)が生成される。ソース1のビット47ないしビット32にソース2のビット47ないしビット32が乗算され、第3の32ビット中間結果(中間結果3)が生成される。ソース1のビット63ないしビット48にソース2のビット63ないしビット48が乗算され、第4の32ビット中間結果(中間結果4)が生成される。中間結果1が中間結果2に加算され、結果のビット31ないしビット0が生成され、中間結果3が中間結果4に加算され、結果のビット63ないしビット32が生成される。
ステップ1415は、中間結果1と中間結果2が減算されて結果の31ビットないしビット0が生成され、結果3と中間結果4が減算されて結果の63ビットないしビット32が生成されることを除いて、ステップ1414と同じである。
いくつかの異なる実施形態では、乗算および加減算を順次行うことも、あるいは並行して行うことも、あるいは順次演算と並行演算のある組合せとして行うこともできる。
ステップ1420で、DESTレジスタに結果が記憶される。
パック・データ乗算−加減算回路
一実施形態では、アンパック・データに対する単一の乗算と同じ数のクロック・サイクルで複数のデータ要素に対して乗算−加算命令および乗算−減算命令をそれぞれ行うことができる。同じ数のクロック・サイクルでこれらの命令を実行するために並行処理が使用される。すなわち、各レジスタは、データ要素に対して乗算−加算演算または乗算−減算演算を実行するよう同時に命令される。このことについて下記で詳しく説明する。
第15図は、本発明の一実施形態によってパック・データに対して乗算−加算演算または乗算−減算演算あるいはその両方を実行する回路を示す。演算制御装置1500は、乗算−加算命令および乗算−減算命令に関する制御信号を処理する。演算制御装置1500はイネーブル線1580上で、パック乗算−加減算器1501を制御する信号を出力する。
パック乗算−加減算器1501は、ソース1[63:0]1531、ソース2[63:0]1533、イネーブル1580の各入力を有する。パック乗算−加減算器1501は、16×16マルチプライヤA1510、16×16マルチプライヤB1511、16×16マルチプライヤC1512、16×16マルチプライヤD1513の4つの16×16マルチプライヤ回路を含む。16×16マルチプライヤA1510は入力としてソース1[15:0]とソース2[15:0]とを有する。16×16マルチプライヤB1511は入力としてソース1[31:16]とソース2[31:16]とを有する。16×16マルチプライヤC1512は入力としてソース1[47:32]とソース2[47:32]とを有する。16×16マルチプライヤD1513は入力としてソース1[63:48]とソース2[63:48]とを有する。16×16マルチプライヤA1510および16×16マルチプライヤB1511が生成した32ビット中間結果は仮想加減算器1550によって受け取られ、それに対して16×16マルチプライヤC1512および16×16マルチプライヤD1513が生成した32ビット中間結果は仮想加減算器1551によって受け取られる。
現在の命令が乗算−加算命令であるか、それとも乗算−減算命令であるかに基づいて、仮想加減算器1550および仮想加減算器1551はそれぞれの32ビット入力を加算または減算する。仮想加減算器1550の出力(すなわち、結果のビット31ないしビット0)と仮想加減算器1551の出力(すなわち、結果のビット63ないしビット32)は64ビット結果として組み合わされ、結果レジスタ1571へ伝達される。
一実施形態では、仮想加減算器1551および仮想加減算器1550は仮想加減算器1108bおよび仮想加減算器1108aと同様に実施される(すなわち、仮想加減算器1551および仮想加減算器1550はそれぞれ、適切な伝搬遅延を含む4つの8ビット加算器で構成される)。しかし、代替実施形態では、仮想加減算器1551および仮想加減算器1550を任意の数の方法で実施することができる。
アンパック・データを処理する従来技術のプロセッサ上でこれらの乗算−加算命令または乗算−減算命令の等価物を実行するには、4回の別々の64ビット乗算および2回の64ビット加算または減算と、必要なロード演算およびストア演算が必要である。この場合、ソース1およびソース2のビット16より上位のビットと結果のビット32より上位のビットに使用されるデータ線および回路が無駄になる。同様に、そのような従来技術のプロセッサによって生成される64ビット結果全体がプログラマにとって有用ではないこともある。したがって、プログラマは各結果を打ち切る必要がある。
前述の乗算−加算演算を命令セットに含めることの利点
前述の乗算−加減算命令はいくつかの目的に使用することができる。たとえば、乗算−加算命令は、複素数の乗算と値の乗算および累算に使用することができる。乗算−加算命令を使用するいくつかのアルゴリズムについては下記で説明する。
したがって、プロセッサ109によってサポートされる命令セットに前述の乗算−加算命令または乗算−減算命令あるいはその両方を含めることによって、これらの命令を有さない従来技術の汎用プロセッサより少ない命令で多数の機能を実行することができる。
パック・シフト
パック・シフト演算
本発明の一実施形態では、SRC1レジスタはシフトすべきデータ(ソース1)を含み、SRC2レジスタは、シフト・カウントを表すデータ(ソース2)を含み、DESTレジスタはシフトの結果(結果)を含む。すなわち、ソース1の各データ要素は独立にシフト・カウントだけシフトされる。一実施形態では、ソース2は符号なし64ビット・スカラとして解釈される。他の実施形態では、ソース2はパック・データであり、ソース1内の対応する各データ要素ごとのシフト・カウントを含む。
本発明の一実施形態では、演算シフトと論理シフトの両方がサポートされる。演算シフトは、各データ要素のビットを、指定された数だけシフトダウンし、各データ要素の上位ビットに符号ビットの初期値を充填する。シフト・カウントがパック・バイト・データに関して7より大きく、あるいはパック・ワード・データに関して15より大きく、あるいはパック・ダブルワードに関して31より大きい場合、各結果データ要素に符号ビットの初期値が充填される。論理シフトは、ビットをシフトアップまたはシフトダウンすることによって動作することができる。右シフト論理演算では、各データ要素の上位ビットに零が充填される。左シフト論理演算では、各データ要素の下位ビットに零が充填される。
本発明の一実施形態では、パック・バイトおよびバック・ワードに関して右シフト演算、右シフト論理演算、左シフト論理演算がサポートされる。本発明の他の実施形態では、パック・ダブルワードに関してもこれらの演算がサポートされる。
第16図は、本発明の一実施形態によってパック・データに対してパック・シフト演算を実行する方法を示す流れ図である。
ステップ1601で、デコーダ202は、プロセッサ109が受け取った制御信号207を復号する。したがって、デコーダ202は、適切なシフト演算に関する命令コード、レジスタ209内のSRC1 602アドレス、SRC2 603アドレス、DEST605アドレス、パック・データ内のデータ要素の飽和/非飽和(必ずしもシフト演算に必要ではない)、符号付き/符号なし(これも必ずしも必要ではない)、長さを復号する。
ステップ1602で、デコーダ202は、SRC1 602アドレスおよびSRC2 603アドレスが与えられた場合、内部バス170を介してレジスタ・ファイル150内のレジスタ209にアクセスする。レジスタ209はSRC1 602レジスタ(ソース1)に記憶されているパック・データと、SRC2 603レジスタ(ソース2)に記憶されているスケーラ・シフト・カウントを実行装置130に与える。すなわち、レジスタ209は内部バス170を介して実行装置130にパック・データを伝達する。
ステップ1603で、デコーダ202は実行装置130が適切なパック・シフト演算を実行できるようにする。デコーダ202はさらに、内部バス170を介してデータ要素のサイズ、シフト演算のタイプ、(論理シフトの場合の)シフトの方向を伝達する。
ステップ1610で、データ要素のサイズによって、次にどのステップを実行するかが決定される。データ要素のサイズが8ビット(バイト・データ)である場合、実行装置130はステップ1612を実行する。しかし、パック・データ内のデータ要素のサイズが16ビット(ワード・データ)である場合、実行装置130はステップ1614を実行する。一実施形態では、8ビット・データ要素サイズ・パック・シフトおよび16ビット・データ要素サイズ・パック・シフトしかサポートされない。しかし、他の実施形態では、32ビット・データ要素サイズもサポートされる。
データ要素のサイズが8ビットであると仮定すると、ステップ1612が実行される。ステップ1612で、下記のことが実行される。ソース1ビット7ないし0がシフト・カウントだけシフトされ(ソース2ビット63ないし0)、結果ビット7ないし0が生成される。ソース1ビット15ないし8がシフト・カウントだけシフトされ、結果ビット15ないし8が生成される。ソース1ビット23ないし16がシフト・カウントだけシフトされ、結果ビット23ないし16が生成される。ソース1ビット31ないし24がシフト・カウントだけシフトされ、結果ビット31ないし24が生成される。ソース1ビット39ないし32がシフト・カウントだけシフトされ、結果ビット39ないし32が生成される。ソース1ビット47ないし40がシフト・カウントだけシフトされ、結果ビット47ないし40が生成される。ソース1ビット55ないし48がシフト・カウントだけシフトされ、結果ビット55ないし48が生成される。ソース1ビット63ないし56がシフト・カウントだけシフトされ、結果ビット63ないし56が生成される。
データ要素のサイズが16ビットであると仮定すると、ステップ1614が実行される。ステップ1614で、下記のことが実行される。ソース1ビット15ないし0がシフト・カウントだけシフトされ、結果ビット15ないし0が生成される。ソース1ビット31ないし16がシフト・カウントだけシフトされ、結果ビット31ないし16が生成される。ソース1ビット47ないし32がシフト・カウントだけシフトされ、結果ビット47ないし32が生成される。ソース1ビット63ないし48がシフト・カウントだけシフトされ、結果ビット63ないし48が生成される。
一実施形態では、ステップ1612の各シフトが同時に実行される。しかし、他の実施形態では、これらのシフトが順次実行される。他の実施形態では、これらのシフトのうちのいくつかが同時に実行され、いくつかが順次実行される。この議論はステップ1614のシフトにも当てはまる。
ステップ1620で、結果がDESTレジスタに記憶される。
表19はバイト・パック右シフト演算のレジスタ内表現を示す。第1のビット行はソース1のパック・データ表現である。第2のビット行はソース2のデータ表現である。第3のビット行は結果の表現である。各データ要素ビットの下方の数はデータ要素番号である。たとえば、ソース1データ要素3は100000002である。
表20は、パック・バイト・データに対するパック右シフト論理演算のレジスタ内表現を示す。
表21は、パック・バイト・データに対するパック左シフト論理演算のレジスタ内表現を示す。
パック・データ・シフト回路
一実施形態では、非パック・データに対する単一のシフト演算と同じクロック・サイクル数で、複数のデータ要素に対してシフト演算が行われる。同じクロック・サイクル数で実行するために、並行処理が使用される。すなわち、各レジスタは、データ要素に対してシフト演算を実行するよう同時に命令される。これについて下記で詳しく論じる。
第17図は、本発明の一実施形態によってパック・データの個別のバイトに対してパック・シフトを実行する回路を示す。第17図は、修正バイト・スライス・シフト回路、すなわちバイト・スライス段i1799の使用法を示す。各バイト・スライスは、最上位データ要素バイト・スライスを除いて、シフト装置とビット制御回路とを含む。最上位データ要素バイト・スライスに必要なのはシフト装置だけである。
シフト装置i1711およびシフト装置i+11771はそれぞれ、ソース1の8ビットをシフト・カウントだけシフトできるようにする。一実施形態では、各シフト装置は既知の8ビット・シフト回路と同様に動作する。各シフト装置はソース1入力と、ソース2入力と、制御入力と、次段信号と、前段信号と、結果出力とを有する。したがって、シフト装置i1771はソース1i1731入力と、ソース2[63:0]1733入力と、制御i1701入力と、次段i1713信号と、前段i1712入力と、結果レジスタi1751に記憶されている結果とを有する。したがって、シフト装置i+11711はソース1i+11732入力と、ソース2[63:0]1733入力と、制御i+11702入力と、次段i+11773信号と、前段i+11772入力と、結果レジスタi+11752に記憶されている結果とを有する。
ソース1入力は通常、ソース1の8ビット部分である。この8ビットは最小データ要素タイプ、すなわち1パック・バイト・データ要素を表す。ソース2入力はシフト・カウントを表す。一実施形態では、各シフト装置はソース2[63:0]1733から同じシフト・カウントを受け取る。演算制御回路1700は各シフト装置が必要なシフトを実行できるようにする制御信号を伝送する。制御信号はシフトのタイプ(演算/論理)およびシフトの方向から決定される。次段信号は、そのシフト装置のビット制御回路から受け取られる。シフト装置は、シフトの方向(左右)に応じて次段信号上の最上位ビット出力/入力をシフトする。同様に、各シフト装置は、シフトの方向(右左)に応じて前段信号上の最下位ビット出力/入力をシフトする。前段信号は、前段のビット制御装置から受け取られる。結果出力は、シフト装置が作用しているソース1の部分に対するシフト演算の結果を表す。
ビット制御回路i1720は、パック・データイネーブル回路i1706を介して演算制御回路1700からイネーブルされる。ビット制御回路i1720は次段i1713および前段i+11772を制御する。たとえば、シフト装置i1711はソース1の下位8ビットに責任を負い、シフト装置i+11771はソース1の次の8ビットに責任を負う。パック・データに対するシフトを実行する場合、ビット制御回路i1720では、シフト装置i+11771の下位ビットをシフト装置i1711の上位ビットへ移すことはできない。しかし、パック・ワードに対するシフトを実行する場合、ビット制御回路i1720によって、シフト装置i+11771の最下位ビットをシフト装置i1711の最上位ビットへ移すことができる。
たとえば、表22で、パック・データ右シフト演算が実行される。シフト装置i+11771がデータ要素1に作用し、シフト装置i1711がデータ要素0に作用すると仮定する。シフト装置i+11771はその最下位ビット出力をシフトアウトする。しかし、演算制御回路1700はビット制御回路i1720に、前段i+11721から受け取ったそのビットの次段i1713への伝搬を停止させる。その代わりに、シフト装置i1711は上位ビットに符号ビット、すなわちソース1[7]を充填する。
しかし、パック・ワードシフト演算を実行する場合、シフト装置i+11771の最下位ビットはシフト装置i1711の最上位ビットへ移される。表23はこの結果を示している。この処理はパック・ダブルワード・シフトでも行うことができる。
各シフト装置は任意選択で結果レジスタに結合される。結果レジスタは完全結果信号、すなわち結果[63:0]1760をDESTレジスタへ伝送できるようになるまでシフト演算の結果を一時的に記憶する。
完全64ビット・パック・シフト回路では、8つのシフト装置および7つのビット制御装置が使用される。そのような回路を使用して64ビット非パック・データに対するシフトを実行し、それによって、同じ回路を使用して非パック・シフト演算とパック・シフト演算を実行することもできる。
前述のシフト演算を命令セットに含めることの利点
前述のパック・シフト命令では、ソース1の各要素が、指示されたシフト・カウントだけシフトされる。この命令を命令セットに含めることによって、単一の命令を使用してパック・データの各要素をシフトすることができる。これに対して、そのような演算をサポートしない従来技術の汎用プロセッサは多数の命令を実行してソース1をアンパックし、各アンパック・データ要素を個別にシフトし、次いで、結果をさらにパック処理できるようにパック・データ・フォーマットにパックしなければならない。
移動演算
移動演算では、レジスタ209との間でデータが転送される。一実施形態では、SRC2 603は、ソース・データを含むアドレスであり、DEST605は、データが転送されるアドレスである。この実施形態では、SRC1 602は使用されない。他の実施形態では、SRC1 602はDEST605に等しい。
移動演算の説明のために、レジスタとメモリ位置を区別する。レジスタはレジスタ・ファイル150内に存在するものであり、それに対してメモリはたとえば、キャッシュ160、メイン・メモリ104、ROM106、データ記憶装置107でよい。
移動演算では、メモリからレジスタ209へ、レジスタ209からメモリへ、レジスタ209内のあるレジスタからレジスタ209内の第2のレジスタへデータを移動させることができる。一実施形態では、パック・データが、整数データを記憶するために使用されるレジスタとは異なるレジスタに記憶される。この実施形態では、移動演算で整数レジスタ201からレジスタ209にデータを移動することができる。たとえば、プロセッサ109では、パック・データをレジスタ209に記憶し、整数データを整数レジスタ201に記憶する場合、移動命令を使用してデータを整数レジスタ201からレジスタ209へ移動させることができ、逆もまた同様である。
一実施形態では、メモリ・アドレスを移動の対象として示すと、そのメモリ位置(下位バイトを含むメモリ位置)にある8バイト・データがレジスタ209内のレジスタにロードされ、あるいはそのレジスタから格納される。レジスタ209内のあるレジスタを指示すると、そのレジスタの内容がレジスタ209内の第2のレジスタへ移動され、あるいはそのレジスタからロードされる。整数レジスタ201の長さが64ビットであり、整数レジスタを指定した場合、その整数レジスタ内の8バイト・データがレジスタ209内のあるレジスタにロードされ、あるいはそのレジスタから格納される。
一実施形態では、整数は32ビットとして表される。レジスタ209から整数レジスタ201への移動演算を実行すると、パック・データの下位32ビットのみが、指定された整数レジスタへ移動される。一実施形態では、上位32ビットは零になる。同時に、整数レジスタ201からレジスタ209への移動を実行すると、レジスタ209内のレジスタの下位32ビットのみがロードされる。一実施形態では、プロセッサ109はレジスタ209内のレジスタとメモリとの間の32ビット移動演算をサポートする。他の実施形態では、パック・データの上位32ビットに対して32ビットのみの移動が実行される。
パック演算
本発明の一実施形態では、SRC1 602レジスタはデータ(ソース1)を含み、SRC2 603レジスタはデータ(ソース2)を含み、DEST605レジスタは演算の結果データ(結果)を含む。すなわち、ソース1の各部とソース2の各部がパックされ結果が生成される。
一実施形態では、パック演算により、ソース・パック・ワード(またはダブルワード)の下位バイト(またはワード)を結果のバイト(またはワード)としてパックすることによって、パック・ワード(またはダブルワード)がパック・バイト(またはワード)に変換される。一実施形態では、パック演算でカド・パック・ワードをパック・ダブルワードに変換する。この演算は任意選択で、符号付きデータを用いて実行することができる。さらに、この演算は任意選択で、飽和を用いて実行することができる。代替実施形態では、各データ要素の上位部分に作用する追加パック演算が含められる。
第18図は、本発明の一実施形態によってパック・データに対してパック演算を実行する方法を示す流れ図である。
ステップ1801で、デコーダ202は、プロセッサ109が受け取った制御信号207を復号する。したがって、デコーダ202は、適切なパック演算に関する命令コード、レジスタ209内のSRC1 602アドレス、SRC2 603アドレス、DEST605アドレス、パック・データ内のデータ要素の飽和/非飽和、符号付き/符号なし、長さを復号する。前述のように、SRC1 602(またはSRC2 603)をDEST605とみなすことができる。
ステップ1802で、デコーダ202は、SRC1 602アドレスおよびSRC2 603アドレスが与えられた場合、内部バス170を介してレジスタ・ファイル150内のレジスタ209にアクセスする。レジスタ209はSRC1 602レジスタ(ソース1)に記憶されているパック・データと、SRC2 603レジスタ(ソース2)に記憶されているパック・データを実行装置130に与える。すなわち、レジスタ209は内部バス170を介して実行装置130にパック・データを伝達する。
ステップ1803で、デコーダ202は実行装置130が適切なパック演算を実行できるようにする。デコーダ202はさらに、内部バス170を介してソース1およびソース2内のデータ要素の飽和およびサイズを伝達する。飽和は任意選択で、結果データ要素内のデータの値を最大にするために使用される。ソース1またはソース2内のデータ要素の値が、結果のデータ要素が表すことのできる値の範囲よりも大きく、あるいは小さい場合の、対応する結果データ要素はその最高値またはまたは最低値に設定される。たとえば、ソース1およびソース2のワード・データ要素内の符号付き値が0x80(あるいはダブルワードの場合は0x8000)より小さい場合、結果バイト(またはワード)データ要素は0x80(あるいはダブルワードの場合は0x8000)にクランプされる。ソース1およびソース2のワード・データ要素内の符号付き値が0x7F(あるいはダブルワードの場合は0x7FFF)より小さい場合、結果バイト(またはワード)データ要素は0x7F(あるいはダブルワードの場合は0x7FFF)にクランプされる。
ステップ1810で、データ要素のサイズによって、次にどのステップを実行するかが決定される。データ要素のサイズが16ビット(パック・ワード402データ)である場合、実行装置130はステップ1812を実行する。しかし、パック・データ内のデータ要素のサイズが32ビット(パック・ダブルワード403データ)である場合、実行装置130はステップ1814を実行する。
ソース・データ要素のサイズが16ビットであると仮定すると、ステップ1812が実行される。ステップ1812では下記のことが実行される。ソース1ビット7ないし0が結果ビット7ないし0になる。ソース1ビット23ないし16が結果ビット15ないし8になる。ソース1ビット39ないし32が結果ビット23ないし16になる。ソース1ビット63ないし56が結果ビット31ないし24になる。ソース2ビット7ないし0が結果ビット39ないし32になる。ソース2ビット23ないし16が結果ビット47ないし40になる。ソース2ビット39ないし32が結果ビット55ないし48になる。ソース2ビット63ないし56が結果ビット31ないし24になる。飽和がセットされている場合、各ワードの上位ビットが試験され、結果データ要素をクランプすべきかどうかが判定される。
ソース・データ要素のサイズが32ビットであると仮定すると、ステップ1814が実行される。ステップ1814では下記のことが実行される。ソース1ビット15ないし0が結果ビット15ないし0になる。ソース1ビット47ないし32が結果ビット31ないし16になる。ソース2ビット15ないし0が結果ビット47ないし32になる。ソース2ビット47ないし32が結果ビット63ないし48になる。飽和がセットされている場合、各ダブルワードの上位ビットが試験され、結果データ要素をクランプすべきかどうかが判定される。
一実施形態では、ステップ1812のパッキングが同時に実行される。しかし、他の実施形態では、このパッキングが順次実行される。他の実施形態では、いくつかのパッキングが同時に実行され、いくつかのパッキングが順次実行される。この議論はステップ1814のパッキングにも当てはまる。
ステップ1820で、結果がDEST605レジスタに記憶される。
表24はワード・パック演算のレジスタ内表現を示す。下付き文字付きのHsおよびLsはそれぞれ、ソース1およびソース2内の各16ビット・データ要素の上位ビットおよび下位ビットを表す。たとえば、ALはソース1内のデータ要素Aの下位8ビットを表す。
表25は、ダブルワード・パック演算のレジスタ内表現を示し、下付き文字付きのHsおよびLsはそれぞれ、ソース1およびソース2内の各32ビット・データ要素の上位ビットおよび下位ビットを表す。
パック回路
本発明の一実施形態では、パック演算を効率的に実行するために、並行処理が使用される。第19a図および第19b図は、本発明の一実施形態によってパック・データに対してパック演算を実行する回路を示す。この回路は任意選択で、飽和を用いてパック演算を実行する。
第19a図および第19b図は、演算制御回路1900と、結果レジスタ1952と、結果レジスタ1953と、8つの16ビット・8ビット試験飽和回路と、4つの32ビット・16ビット試験飽和回路とを含む。
演算制御回路1900は、パック演算をイネーブルする情報をデコーダ202から受け取る。演算制御回路1900は飽和値を使用して各試験飽和回路の飽和試験をイネーブルする。ソース・パック・データのサイズがワード・パック・データ503である場合、演算制御回路1900によって出力イネーブル信号1931がセットされる。これによって結果レジスタ1952の出力がイネーブルされる。ソース・パック・データのサイズがダブルワード・パック・データ504である場合、演算制御回路1900によって出力イネーブル信号1932がセットされる。これによって結果レジスタ1953の出力がイネーブルされる。
各試験飽和回路は選択的に飽和に関する試験を行うことができる。飽和に関する試験をディスエーブルした場合、各試験飽和回路は下位ビットを結果レジスタ内の対応する位置へ通過させるに過ぎない。飽和に関する試験をイネーブルした場合、各試験飽和回路は上位ビットを試験して、結果をクランプすべきかどうかを判定する。
試験飽和回路1910ないし試験飽和回路1917は16ビット入力と8ビット出力とを有する。8ビット出力は、入力の下位8ビットであり、あるいは任意選択でクランプ値(0×80、0×7F、または0×FF)である。試験飽和回路1910はソース1ビット15ないし0を受け取り、結果レジスタ1952のビット7ないし0を出力する。試験飽和回路1911はソース1ビット31ないし16を受け取り、結果レジスタ1952のビット15ないし8を出力する。試験飽和回路1912はソース1ビット47ないし32を受け取り、結果レジスタ1952のビット32ないし16を出力する。試験飽和回路1913はソース1ビット63ないし48を受け取り、結果レジスタ1952のビット31ないし24を出力する。試験飽和回路1914はソース2ビット15ないし0を受け取り、結果レジスタ1952のビット39ないし32を出力する。試験飽和回路1915はソース2ビット31ないし16を受け取り、結果レジスタ1952のビット47ないし40を出力する。試験飽和回路1916はソース2ビット47ないし32を受け取り、結果レジスタ1952のビット55ないし48を出力する。試験飽和回路1917はソース2ビット63ないし48を受け取り、結果レジスタ1952のビット63ないし56を出力する。
試験飽和回路1920ないし試験飽和回路1923は32ビット入力と16ビット出力とを有する。16ビット出力は、入力の下位16ビットであり、あるいは任意選択でクランプ値(0×8000、0×7FFF、または0×FFFF)である。試験飽和回路1920はソース1ビット31ないし0を受け取り、結果レジスタ1953のビット15ないし0を出力する。試験飽和回路1921はソース1ビット63ないし32を受け取り、結果レジスタ1953のビット31ないし16を出力する。試験飽和回路1922はソース2ビット31ないし0を受け取り、結果レジスタ1953のビット47ないし32を出力する。試験飽和回路1923はソース2ビット63ないし32を受け取り、結果レジスタ1953のビット63ないし48を出力する。
たとえば、表26では、飽和しない符号なしパック・ワードが実行される。演算制御回路1900は結果レジスタ1952が結果[63:0]1960を出力できるようにする。
しかし、飽和しない符号なしパック・ダブルワードを実行する場合、演算制御回路1900は結果レジスタ1953が結果[63:0]1960を出力できるようにする。
表27はこの結果を示す。
前述のパック演算を命令セットに含めることの利点
前述のパック命令では、ソース1およびソース2内の各データ要素から所定数のビットがパックされ、結果が生成される。このように、プロセッサ109は、従来技術の汎用プロセッサが必要とする命令の半分程度にデータをパックすることができる。たとえば、4つの16ビット要素を含む結果を4つの32ビットデータ要素から生成する場合、下記に示したように(2つの命令ではなく)1つの命令しか必要とされない。
典型的なマルチメディア・アプリケーションは大量のデータをパックする。したがって、このデータをパックするのに必要な命令の数を2分の1程度削減することによって、マルチメディア・アプリケーションの性能が向上する。
アンパック演算
アンパック演算
一実施形態では、アンパック演算によって、2つのソース・パック・データの下位パック・バイト、ワード、またはダブルワードがインタリーブされ、結果パック・バイト、ワード、またはダブルワードが生成される。この演算を本明細書では下位アンパック演算と呼ぶ。他の実施形態では、アンパック演算は上位要素をインタリーブすることもできる(上位アンパック演算と呼ぶ)。
第20図は、本発明の一実施形態によってパック・データに対するアンパック演算を実行する方法を示す流れ図である。
まずステップ2001およびステップ2002が実行される。ステップ2003で、デコーダ202は実行装置130がアンパック演算を実行できるようにする。デコーダ202は内部バス170を介して、ソース1およびソース2内のデータ要素のサイズを伝達する。
ステップ2010で、データ要素のサイズによって、次にどのステップを実行すべきかが決定される。データ要素のサイズが8ビットである場合(パック・バイト401データ)、実行装置130はステップ2012を実行する。しかし、パック・データ内のデータ要素のサイズが16ビットである場合(パック・ワード402データ)、実行装置130はステップ2014を実行する。しかし、パック・データ内のデータ要素のサイズが32ビットである場合(パック・ダブルワード503データ)、実行装置130はステップ2016を実行する。
ソース・データ要素のサイズが8ビットであると仮定すると、ステップ2012が実行される。ステップ2012では下記のことが実行される。ソース1ビット7ないし0が結果ビット7ないし0になる。ソース2ビット7ないし0が結果ビット15ないし8になる。ソース1ビット15ないし8が結果ビット23ないし16になる。ソース2ビット15ないし8が結果ビット31ないし24になる。ソース1ビット23ないし16が結果ビット39ないし32になる。ソース2ビット23ないし16が結果ビット47ないし40になる。ソース1ビット31ないし24が結果ビット55ないし48になる。ソース2ビット31ないし24が結果ビット63ないし56になる。
ソース・データ要素のサイズが16ビットであると仮定すると、ステップ2014が実行される。ステップ2014では下記のことが実行される。ソース1ビット15ないし0が結果ビット15ないし0になる。ソース2ビット15ないし0が結果ビット31ないし16になる。ソース1ビット31ないし16が結果ビット47ないし32になる。ソース2ビット31ないし16が結果ビット63ないし48になる。
ソース・データ要素のサイズが32ビットであると仮定すると、ステップ2016が実行される。ステップ2016では下記のことが実行される。ソース1ビット31ないし0が結果ビット31ないし0になる。ソース2ビット31ないし0が結果ビット63ないし32になる。
一実施形態では、ステップ2012のアンパッキングが同時に実行される。しかし、他の実施形態では、このアンパッキングが順次実行される。他の実施形態では、いくつかのアンパッキングが同時に実行され、いくつかのアンパッキングが順次実行される。この議論はステップ2014およびステップ2016のアンパッキングにも当てはまる。
ステップ2020で、結果がDEST605レジスタに記憶される。
表29はダブルワード・アンパック演算のレジスタ内表現を示す(データ要素A0ないし1およびB0ないし1はそれぞれ32ビットを含む。
表30は、ワード・アンパック演算のレジスタ内表現を示す(データ要素A0ないし3およびB0ないし3はそれぞれ16ビットを含む)。
表31は、バイト・アンパック演算のレジスタ内表現を示す(データ要素A0ないし7およびB0ないし7はそれぞれ8ビットを含む)。
アンパック回路
第21図は、本発明の一実施形態によってパック・データに対してアンパック演算を実行する回路を示す。第21図のこの回路は、演算制御回路2100と、結果レジスタ2152と、結果レジスタ2153と、結果レジスタ2154とを含む。
演算制御回路2100は、アンパック演算をイネーブルする情報をデコーダ302から受け取る。ソース・パック・データのサイズがバイト・パック・データ502である場合、演算制御回路2100によって出力イネーブル信号2132がセットされる。これによって結果レジスタ2152の出力がイネーブルされる。ソース・パック・データのサイズがワード・パック・データ503である場合、演算制御回路2100によって出力イネーブル信号2133がセットされる。これによって結果レジスタ2153の出力がイネーブルされる。ソース・パック・データのサイズがダブルワード・パック・データ504である場合、演算制御回路2100によって出力イネーブル信号2134がセットされる。これによって結果レジスタ2154の出力がイネーブルされる。
結果レジスタ2152は下記の入力を有する。ソース1ビット7ないし0は結果レジスタ2152のビット7ないし0である。ソース2ビット7ないし0は結果レジスタ2152のビット15ないし8である。ソース1ビット15ないし8は結果レジスタ2152のビット23ないし16である。ソース2ビット15ないし8は結果レジスタ2152のビット31ないし24である。ソース1ビット23ないし16は結果レジスタ2152のビット39ないし32である。ソース2ビット23ないし16は結果レジスタ2152のビット47ないし40である。ソース1ビット31ないし24は結果レジスタ2152のビット55ないし48である。ソース2ビット31ないし24は結果レジスタ2152のビット63ないし56である。
結果レジスタ2153は下記の入力を有する。ソース1ビット15ないし0は結果レジスタ2153のビット15ないし0である。ソース2ビット15ないし0は結果レジスタ2153のビット31ないし16である。ソース1ビット31ないし16は結果レジスタ2153のビット47ないし32である。ソース2ビット31ないし16は結果レジスタ1953のビット63ないし48である。
結果レジスタ2154は下記の入力を有する。ソース1ビット31ないし0は結果レジスタ2154のビット31ないし0である。ソース2ビット31ないし0は結果レジスタ2154のビット63ないし32である。
たとえば、表32では、ワード・アンパック演算が実行される。演算制御回路2100は結果レジスタ2153が結果[63:0]2160を出力できるようにする。
しかし、ダブルワード・アンパック演算を実行する場合、演算制御回路2100は結果レジスタ2154が結果[63:0]2160を出力できるようにする。
表33はこの結果を示す。
前述のアンパック命令を命令セットに含めることの利点
前述のアンパック命令を命令セットに含めることによって、パック・データをインタリーブまたはアンパックすることができる。このアンパック命令を使用し、ソース2内のすべてのデータ要素をすべて零にすることによってパック・データをアンパックすることができる。バイトのアンパックの例を下記の表34aに示す。
この同じアンパック命令を使用して、表34bに示したようにデータをインタリーブすることができる。インタリーブは、いくつかのマルチメディア・アルゴリズムで有用である。たとえば、インタリーブは行列を交差させ画素を補間する場合に有用である。
したがって、プロセッサ109によってサポートされる命令セットにこのアンパック命令を与えることによって、プロセッサ109はより融通が利くようになり、この機能を必要とするアルゴリズムをより高い性能レベルで実行することができる。
ポピュレーション・カウント
ポピュレーション・カウント
本発明の一実施形態では、パック・データに対してポピュレーション・カウント演算を実行することができる。すなわち、本発明は第1のパック・データの各データ要素ごとに結果データ要素を生成する。各結果データ要素は、第1のパック・データの対応する各データ要素内にセットされたビットの数を表す。一実施形態では、1にセットされたビットの総数がカウントされる。
表35aは、パック・データに対するポピュレーション・カウント演算のレジスタ内表現を示す。第1のビット行はソース1パック・データのパック・データ表現である。第2のビット行は結果パック・データのパック・データ表現である。各データ要素ビットの下方の数はデータ要素番号である。たとえば、ソース1データ要素0は10001111100010002である。したがって、データ要素の長さが16ビットであり(ワード・データ)、ポピュレーション・カウント演算を実行する場合、実行装置130は表のように結果パック・データを生成する。
他の実施形態では、8ビット・データ要素に対してポピュレーション・カウントが実行される。表35bは、8つの8ビット・パック・データ要素を有するパック・データに対するポピュレーション・カウントのレジスタ内表現を示す。
他の実施形態では、32ビット・データ要素に対してポピュレーション・カウントが実行される。表35cは、2つの32ビット・パック・データ要素を有するパック・データに対するポピュレーション・カウントのレジスタ内表現を示す。
ポピュレーション・カウントは64ビット整数データにも実行される。すなわち、64ビット・データにおける、1にセットされたビットの数が合計される。表35dは、64ビット整数データに対するポピュレーション・カウントのレジスタ内表現を示す。
ポピュレーション・カウントを実行する方法
第22図は、本発明の一実施形態によってパック・データに対してポピュレーション・カウントを実行する方法を示す流れ図である。ステップ2201で、デコーダ202が、制御信号207を受け取ったことに応答して、その制御信号207を復号する。一実施形態では、制御信号207はバス101を介して供給される。別の実施態様では、制御信号207はキャッシュ160から供給される。したがって、デコーダ202はポピュレーション・カウントに関する命令コードと、レジスタ209内のSRC1 602アドレスおよびDEST605を復号する。本発明のこの実施形態ではSRC2 603が使用されないことに留意されたい。同様に、この実施形態では、データ要素の飽和/非飽和、符号付き/符号なし、長さも使用されない。本発明のこの実施形態では、16ビット・データ要素長パック加算しかサポートされない。しかし、当業者には、8つのパック・バイト・データ要素または2つのパック・ダブルワード・データ要素を有するパック・データに対してポピュレーション・カウントを実行できることが理解されよう。
ステップ2202で、SRC1 602が与えられた場合、内部バス170を介してデコーダ202はレジスタ・ファイル150内のレジスタ209にアクセスする。レジスタ209は、レジスタのこのアドレスに記憶されているパック・データ、すなわちソース1を実行装置130に与える。すなわち、レジスタ209は内部バス170を介して実行装置130にパック・データを伝達する。
ステップ2130で、デコーダ202は実行装置130がポピュレーション・カウント演算を実行できるようにする。代替実施形態では、デコーダ202はさらに、内部バス170を介してパック・データ要素の長さを伝達する。
ステップ2205で、データ要素の長さが16ビットであると仮定すると、実行装置130はソース1のビット15ないしビット0のうちの、セットされているビットの数を合計し、結果パック・データのビット15ないしビット0を生成する。実行装置130は、この合計と並行して、ソース1のビット31ないしビット16を合計し、結果パック・データのビット31ないしビット16を生成する。実行装置130は、この合計と並行して、ソース1のビット47ないしビット32を合計し、結果パック・データのビット47ないしビット32を生成する。実行装置130は、この合計と並行して、ソース1のビット63ないしビット48を合計し、結果パック・データのビット63ないしビット48を生成する。
ステップ2206で、デコーダ202は、宛先レジスタのDEST605アドレスを有するレジスタ209内のレジスタをイネーブルする。したがって、結果パック・データは、DEST605によってアドレス指定されたレジスタに記憶される。
1つのデータ要素に対してポピュレーション・カウントを実行する方法
第23図は、パック・データの1つのデータ要素に対してポピュレーション・カウント演算を実行し、本発明の一実施形態によって結果パック・データの単一の結果データ要素を生成する方法を示す流れ図である。ステップ2310aで、ソース1ビット15、14、13、12から列和CSumlaおよび列桁上げCCarry1aが生成される。ステップ2310bで、ソース1ビット11、10、9、8から列和CSumlbおよび列桁上げCCarry1bが生成される。ステップ2310cで、ソース1ビット7、6、5、4から列和CSumlcおよび列桁上げCCarry1cが生成される。ステップ2310dで、ソース1ビット3、2、1、0から列和CSumldおよび列桁上げCCarry1dが生成される。本発明の一実施形態ではステップ2310aないしdは並行して実行される。ステップ2320aで、CSum1a、CCarry1a、CSum1b、CCarry1bから列和CSum2aおよび列桁上げCCarry2bが生成される。ステップ2320bで、CSum1c、CCarry1、CSum1d、CCarry1dから列和CSum2bおよび列桁上げCCarry2bが生成される。一実施形態では、ステップ2320aないしbは並行して実行される。ステップ2330で、CSum2a、CCarry2a、CSum2b、CCarry2bから列和CSum3および列桁上げCCarry3が生成される。ステップ2340で、CSum3およびCCarry3から結果が生成される。一実施形態では、結果は16ビットで表される。この実施形態では、ソース1内のセットされているビットの最大数を表すのにビット4ないしビット0しか必要ないので、ビット15ないし5は零にセットされる。ソース1の最大ビット数は16である。これは、ソース1が11111111111111112に等しいときに生じる。この結果は16であり、00000000000100002で表される。
したがって、64ビット・パック・データに対するポピュレーション・カウント演算の4つの結果データ要素を算出するために、パック・データ内の各データ要素ごとに第23図のステップが実行される。一実施形態では、4つの16ビット結果データ要素が並行して計算される。
ポピュレーション・カウントを実行する回路
第24図は、本発明の一実施形態によって4つのワード・データ要素を有するパック・データに対してポピュレーション・カウント演算を実行する回路を示す。第25図は、本発明の一実施形態によってパック・データの1つのワード・データ要素に対してポピュレーション・カウント演算を実行する詳細な回路を示す。
第24図は、ソース1バス2401がソース1IN2406aないしdを介してpopcnt回路2408aないしdへ信号を搬送する回路を示す。したがって、popcnt回路2408aはソース1のビット15ないしビット0のうちのセットされているビットの数を合計し、結果のビット15ないしビット0を生成する。popcnt回路2408bはソース1のビット31ないしビット16のうちセットされているビットの数を合計し、結果のビット31ないしビット16を生成する。popcnt回路2408cはソースの1ビット47ないしビット32のうちのセットされているビットの数を合計し、結果のビット47ないしビット32を生成する。popcnt回路2408dはソース1のビット63ないしビット49のうちのセットされているビットの数を合計し、結果のビット63ないしビット48を生成する。イネーブル入力2404aないしdは、popcnt回路2408aないしdがポピュレーション・カウント演算を実行し、結果を結果バス2409上に置くことができるようにする制御信号を制御回路2403を介して演算制御回路2410から受け取る。当業者なら、上記の説明および第1図ないし第6b図および第23図ないし第25図の例示が与えられれば、そのような回路を製作することができる。
popcnt回路2408aないしdはパック・ポピュレーション・カウント演算の結果情報を結果出力2407aないしdを介して結果バス2409上に伝達する。この結果情報は次いで、DEST605レジスタ・アドレスで指定された整数レジスタに記憶される。
1つのデータ要素に対してポピュレーション・カウントを実行する回路
第25図は、パック・データ要素の1つのワード・データ要素に対してポピュレーション・カウント演算を実行する詳細な回路を示す。特に、第25図はpopcnt回路2408aの一部を示す。ポピュレーション・カウント演算を使用するアプリケーションの最大性能を達成するには、演算を1クロック・サイクル内に完了すべきである。したがって、レジスタにアクセスし結果を記憶するのに1クロック・サイクルのうちのある割合が必要である場合、第24図の回路は1クロック周期の約80%内に演算を完了する。この回路は、プロセッサ109が4つの16ビット・データ要素に対するポピュレーション・カウント演算を1クロック・サイクルで実行できるようにするという利点を有する。
popcnt回路2408aは4−>2桁上げ−保存加算器(特に明示しないかぎり、CSAは4−>2桁上げ−保存加算器を指す)を使用する。4−>2桁上げ−保存加算器は、popcnt回路2408aないしdで使用することができ、当技術分野で良く知られている。4−>2桁上げ−保存加算器とは、4つのオペランドを加算し2つの和を得る加算器である。popcnt回路2408aでのポピュレーション・カウント演算では16ビットが使用されるので、第1のレベルには4つの4−>2桁上げ−保存加算器が含まれる。この4つの4−>2桁上げ−保存加算器は16個の1ビット・オペランドを8つの2ビット和に変換する。第2のレベルは4つの3ビット和を2つの4ビット和に変換する。次いで、4ビット全加算器が2つの4ビット和を加算し最終結果を生成する。
4−>2桁上げ−保存加算器が使用されるが、代替実施形態では3−>2桁上げ−保存加算器を使用することができる。別法として、いくつかの全加算器を使用することができる。しかし、この構成は、第25図に示した実施形態ほど迅速に結果を与えるわけではない。
ソース1IN15-0 2406aはソース1のビット15ないしビット0を桁上げする。最初の4ビットは4−>2桁上げ−保存加算器(CSA2510a)の入力に結合される。次の4ビットはCSA2510bに結合される。次の4ビットはCSA2510cに結合される。最後の4ビットはCSA2510dの入力に結合される。各CSA2510aないしdは2つの2ビット出力を生成する。CSA2510aの2つの2ビット出力はCSA2520aの2つの入力に結合される。CSA2510bの2つの2ビット出力はCSA2520aの他の2つの入力に結合される。CSA2510cの2つの2ビット出力はCSA2520bの2つの入力に結合される。CSA2510dの2つの2ビット出力はCSA2520bの他の2つの入力に結合される。各CSA2520aないしbは2つの3ビット出力を生成する。2520aの2つの3ビット出力はCSA2530の2つの入力に結合される。2520bの2つの3ビット出力はCSA2530の他の2つの入力に結合される。CSA2530は2つの4ビット出力を生成する。
この2つの4ビット出力は全加算器(FA2550)の2つの入力に結合される。FA2550は2つの4ビット入力を加算し、結果出力2407aのビット3ないしビット0を2つの4ビット入力の加算結果として伝達する。FA2550は桁上げ(CO2552)を通じて結果出力2407aのビット4を生成する。代替実施形態では、5ビット全加算器を使用して結果出力2407aのビット4ないしビット0が生成される。いずれの場合も、結果出力2407aのビット15ないしビット5は零に結合される。同様に、全加算器への桁上げ入力も零に結合される。
第25図には示していないが、当業者なら、結果出力2407aを結果バス2409上に多重化またはバッファできることが理解されよう。マルチプレクサはイネーブル入力2404aによって制御される。これによって、他の実行装置回路は結果バス2409にデータを書き込むことができる。
前述のポピュレーション・カウント演算を命令セットに含めることの利点
前述のポピュレーション・カウント命令は、ソース1などのパック・データの各データ要素内のセットされているビットの数を算出する。したがって、この命令を命令セットに含めることによって、単一の命令でパック・データに対してポピュレーション・カウント演算を実行することができる。これに対して、従来技術の汎用プロセッサは、多数の命令を実行してソース1をアンパックし、各アンパック・データ要素に対して個別に関数を実行し、次いで結果をさらにパック処理できるようにパックしなければならない。
したがって、プロセッサ109によってサポートされる命令セットにこのポピュレーション・カウント命令を与えることによって、この機能を必要とするアルゴリズムの性能が向上する。
論理演算
論理演算
本発明の一実施形態では、SRC1レジスタはパック・データ(ソース1)を含み、SRC2レジスタはパック・データ(ソース2)を含み、DESTレジスタは、選択された論理演算をソース1およびソース2に対して実行した結果(結果)を含む。たとえば、論理AND演算が選択された場合、ソース1がソース2と論理ANDされる。
本発明の一実施形態では、論理AND、論理ANDN、論理OR、論理XORの各論理演算がサポートされる。論理AND演算、論理OR演算、論理XOR演算は当技術分野で良く知られている。論理ANDN演算では、ソース2がソース1の論理逆数とANDされる。これらの論理演算に関連して本発明を説明するが、代替実施形態では他の論理演算を実施することができる。
第26図は、本発明の一実施形態によってパック・データに対していくつかの論理演算を実行する方法を示す流れ図である。
ステップ2601で、デコーダ202は、プロセッサ109が受け取った制御信号207を復号する。したがって、デコーダ202は適切な論理演算(すなわち、AND、ANDN、OR、またはXOR)に関する命令コードと、レジスタ209内のSRC1 602アドレス、SRC2 603アドレス、DEST605アドレスを復号する。
ステップ2602で、SRC1 602アドレスおよびSRC2 603アドレスが与えられた場合、デコーダ202は内部バス170を介してレジスタ・ファイル150内のレジスタ209にアクセスする。レジスタ209は、SRC1 602レジスタに記憶されているパック・データ(ソース1)およびSRC2 603に記憶されているパック・データ(ソース2)を実行装置130に与える。すなわち、レジスタ209は内部バス170を介して実行装置130にパック・データを伝達する。
ステップ2603で、デコーダ202は、実行装置130が、選択された1つのパック論理演算を実行できるようにする。
ステップ2610で、選択された1つのパック論理演算によって、次にどのステップを実行すべきかが決定される。実行装置130は、論理AND演算が選択された場合にはステップ2612を実行する。実行装置130は、論理ANDN演算が選択された場合にはステップ2613を実行する。実行装置130は、論理OR演算が選択された場合にはステップ2614を実行する。実行装置130は、論理XOR演算が選択された場合にはステップ2615を実行する。
論理AND演算が選択されたと仮定すると、ステップ2612が実行される。ステップ2612で、ソース1ビット63ないし0がソース2ビット63ないし0とANDされ、結果ビット63ないし0が生成される。
論理ANDN演算が選択されたと仮定すると、ステップ2613が実行される。ステップ2613で、ソース1ビット63ないし0がソース2ビット63ないし0とANDNされ、結果ビット63ないし0が生成される。
論理OR演算が選択されたと仮定すると、ステップ2614が実行される。ステップ2614で、ソース1ビット63ないし0がソース2ビット63ないし0とORされ、結果ビット63ないし0が生成される。
論理XOR演算が選択されたと仮定すると、ステップ2615が実行される。ステップ2615で、ソース1ビット63ないし0がソース2ビット63ないし0とXORされ、結果ビット63ないし0が生成される。
ステップ2620で、結果がDESTレジスタに記憶される。
表36は、パック・データに対する論理ANDN演算のレジスタ内表現を示す。第1のビット行はソース1のパック・データ表現である。表2のビット行はソース2のパック・データ表現である。第3のビット行は結果のパック・データ表現である。各データ要素の下方の数はデータ要素番号である。たとえば、ソース1データ要素は11111111000000002である。
ソース1およびソース2内の対応するデータ要素に対して同じ論理演算を実行することに関連して本発明を説明しているが、代替実施形態では、対応するデータ要素に対して実行される論理演算を要素ごとに選択できるようにする命令をサポートすることができる。
パック・データ論理回路
一実施形態では、アンパック・データに対する単一の論理演算と同じクロック・サイクル数で複数のデータ要素に対して前述の論理演算を行うことができる。同じクロック・サイクル数で実行するために、並行処理が使用される。
第27図は、本発明の一実施形態によってパック・データに対して論理演算を実行する回路を示す。演算制御回路2700は、論理演算を実行する回路を制御する。演算制御回路2700は制御信号を処理し、制御線2780上で選択信号を出力する。このような選択信号は、AND演算、ANDN演算、OR演算、XOR演算のうちの選択された演算を論理演算回路2701に伝達する。
論理演算回路2701はソース1[63:0]およびソース2[63:0]を受け取り、選択信号によって指示された論理演算を実行し結果を生成する。論理演算回路2701は結果レジスタ2731に結果[63:0]を伝達する。
前述の論理演算を命令セットに含めることの利点
前述の論理命令は論理AND、論理AND NOT、論理OR、論理OR NOTを実行する。これらの命令は、データの論理処理を必要とするアプリケーションで有用である。プロセッサ109によってサポートされる命令セットにこれらの命令を含めることによって、1つの命令でパック・データに対してこれらの演算を実行することができる。
パック比較
パック比較演算
本発明の一実施形態では、SRC1 602レジスタは、比較される一方のデータ(ソース1)を含み、SRC2 603レジスタは、比較される他方のデータ(ソース2を含み、DEST605は比較の結果(結果)を含む。すなわち、ソース1の各データ要素は、指示された関係に従って、ソース2の各データ要素と独立に比較される。
本発明の一実施形態では、「等しい」、「符号付きより大)」、「符号付き以上)」、「符号なしより大」、「符号なし以下」の各比較関係がサポートされる。この関係は、各対応データ要素対において試験される。たとえば、ソース1[7:0]はソース2[7:0]より大きく、結果は結果[7:0]になる。比較の結果がこの関係を満たす場合、一実施形態では、結果内の対応するデータ要素がすべて1にセットされる。比較の結果がこの関係を満たさない場合、結果内の対応するデータ要素はすべて零にセットされる。
第28図は、本発明の一実施形態によってパック・データに対してパック比較演算を実行する方法を示す流れ図である。
ステップ2801で、デコーダ202は、プロセッサ109が受け取った制御信号207を復号する。したがって、デコーダ202は適切な比較演算に関する命令コードと、レジスタ209内のSRC1 602アドレス、SRC2 603アドレス、DEST605アドレスと、パック・データ内のデータ要素の飽和/非飽和(必ずしも比較演算には必要ではない)、符号付き/符号なし、長さを復号する。前述のように、SRC1 602(またはSRC2 603)をDEST605として使用することができる。
ステップ2802で、SRC1 602アドレスおよびSRC2 603アドレスが与えられた場合、デコーダ202は内部バス170を介してレジスタ・ファイル150内のレジスタ209にアクセスする。レジスタ209は、SRC1 602レジスタに記憶されているパック・データ(ソース1)およびSRC2 603に記憶されているパック・データ(ソース2)を実行装置130に与える。すなわち、レジスタ209は内部バス170を介して実行装置130にパック・データを伝達する。
ステップ2803で、デコーダ202は、実行装置130が適切なパック比較演算を実行できるようにする。デコーダ202はさらに、データ要素のサイズおよび比較演算に関する関係を内部バス170を介して伝達する。
ステップ2810で、データ要素のサイズによって、次にどのステップを実行すべきかが決定される。データ要素のサイズが8ビットである場合(パック・バイト401データ)、実行装置130はステップ2812を実行する。しかし、パック・データ内のデータ要素のサイズが16ビットである場合(パック・ワード402データ)、実行装置130はステップ2814を実行する。一実施形態では、8ビット・データ要素サイズ・パック比較および16ビット・データ要素サイズ・パック比較しかサポートされない。しかし、他の実施形態では32ビット・データ要素サイズ・パック演算もサポートされる(パック・ダブルワード403)。
データ要素のサイズが8ビットであると仮定すると、ステップ2812が実行される。ステップ2812で、下記のことが実行される。ソース1ビット7ないし0がソース2ビット7ないし0と比較され、結果ビット7ないし0が生成される。ソース1ビット15ないし8がソース2ビット15ないし8と比較され、結果ビット15ないし8が生成される。ソース1ビット23ないし16がソース2ビット23ないし16と比較され、結果ビット23ないし16が生成される。ソース1ビット31ないし24がソース2ビット31ないし24と比較され、結果ビット31ないし24が生成される。ソース1ビット39ないし32がソース2ビット39ないし32と比較され、結果ビット39ないし32が生成される。ソース1ビット47ないし40がソース2ビット47ないし40と比較され、結果ビット47ないし40が生成される。ソース1ビット55ないし48がソース2ビット55ないし48と比較され、結果ビット55ないし48が生成される。ソース1ビット63ないし56がソース2ビット63ないし56と比較され、結果ビット63ないし56が生成される。
データ要素のサイズが16ビットであると仮定すると、ステップ2814が実行される。ステップ2814で、下記のことが実行される。ソース1ビット15ないし0がソース2ビット15ないし0と比較され、結果ビット15ないし0が生成される。ソース1ビット31ないし16がソース2ビット31ないし16と比較され、結果ビット31ないし16が生成される。ソース1ビット47ないし32がソース2ビット47ないし32と比較され、結果ビット47ないし32が生成される。ソース1ビット63ないし48がソース2ビット63ないし48と比較され、結果ビット63ないし48が生成される。
一実施形態では、ステップ2812の各比較が同時に実行される。しかし、他の実施形態では、これらの比較が順次実行される。他の実施形態では、これらの比較のうちのいくつかが同時に実行され、いくつかが順次実行される。この議論はステップ2814の比較にも当てはまる。
ステップ2820で、結果がDEST605レジスタに記憶される。
表37はパック比較符号なしより大演算のレジスタ内表現である。第1のビット行はソース1のパック・データ表現である。第2のビット行はソース2のパック・データ表現である。第3のビット行は結果のパック・データ表現である。各データ要素ビットの下方の数はデータ要素番号である。たとえば、ソース1データ要素3は100000002である。
表38はパック・バイト・データに対するパック比較符号付き以上演算のレジスタ内表現を示す。
パック・データ比較回路
一実施形態では、アンパック・データに対する単一の比較演算と同じクロック・サイクル数で複数のデータ要素に対して比較演算を行うことができる。同じクロック・サイクル数で実行するために、並行処理が使用される。すなわち、各レジスタは、データ要素に対して比較演算を実行するよう同時に命令される。このことについて下記で詳しく説明する。
第29図は、本発明の一実施形態によってパック・データの個別のバイトに対してパック比較演算を実行する回路を示す。第29図は、修正バイト・スライス比較回路、すなわちバイト・スライス段i2999の使用法を示す。各バイト・スライスは、最上位データ要素バイト・スライスを除いて、比較装置とビット制御装置とを含む。最上位データ要素バイト・スライスに必要なのは比較装置だけである。
比較装置i2911および比較装置i+12971はそれぞれ、ソース1の8ビットをソース2の対応する8ビットと比較できるようにする。一実施形態では、各比較装置は既知の8ビット比較回路と同様に動作する。そのような既知の8ビット比較回路は、ソース1からソース2を減算できるようにするバイト・スライス回路を含む。減算の結果は、比較演算の結果を求めるように処理される。一実施形態では、減算の結果にオーバフロー情報が含まれる。このオーバフロー情報が試験され、比較演算の結果が真であるかどうかが判定される。
各比較装置はソース1入力と、ソース2入力と、制御入力と、次段信号と、前段信号と、結果出力とを有する。したがって、比較装置i2911はソース1i2931入力と、ソース2i2933入力と、制御i2901入力と、次段i2913信号と、前段i2912入力と、結果レジスタi2951に記憶されている結果とを有する。したがって、比較装置i+12971はソース1i+12932入力と、ソース2i+12934入力と、制御i+12902入力と、次段i+12973信号と、前記i+12972入力と、結果レジスタi+12952に記憶されている結果とを有する。
ソース1n入力は通常、ソース1の8ビット部分である。この8ビットは、最小のデータ要素タイプ、すなわち1パック・バイト401データ要素を表す。ソース2入力は、ソース2の対応する8ビット部分である。演算制御回路2900は、各比較装置が必要な比較を実行できるようにする制御信号を伝送する。この制御信号は、比較に関する関係(たとえば、符号付きより大)とデータ要素のサイズ(たとえば、バイトまたはワード)から決定される。次段信号は、その比較装置のビット制御装置から与えられる。比較装置は、バイトより大きなサイズのデータ要素が使用されるときにはビット制御装置によって有効に組み合わされる。たとえば、ワード・パック・データを比較する際、第1の比較装置と第2の比較装置との間のビット制御装置によって、この2つの比較装置は1つの16ビット比較装置として働く。同様に、第3の比較装置と第4の比較装置との間のビット制御装置によって、この2つの比較装置は1つの比較装置として働く。これは4つのパック・ワード・データ要素に対して同様に行われる。
比較装置は、ソース1とソース2の所望の関係および値に応じて、上位の比較装置の結果を下位の比較装置へ伝搬させ、あるいはその逆を同様に行うことによって比較を実行する。すなわち、各比較装置は、ビット制御装置i2920から伝達される情報を使用して比較の結果を与える。ダブルワード・パック・データを使用する場合、4つの比較装置は協働して各データ要素ごとに1つの32ビット長比較装置を形成する。各比較装置の結果出力は、その比較装置が作用しているソース1およびソース2の部分に対する比較演算の結果を表す。
ビット制御装置i2920はパック・データ・イネーブル信号i2906を介して演算制御回路2900からイネーブルされる。ビット制御装置i2920は次段i2913および前段i+12972を制御する。たとえば、制御装置i2911がソース1およびソース2の最下位8ビットに責任を負い、比較装置i+12971がソース1およびソース2の次の8ビットに責任を負うと仮定する。パック・バイト・データに対する比較を実行する場合、ビット制御装置i2920は比較装置i+12971からの結果情報を比較装置i2911に伝達することを許容せず、逆もまた同様である。しかし、パック・ワードに対する比較を実行する場合、ビット制御装置i2920は比較装置i2911からの結果(一実施形態ではオーバフロー)情報を比較装置i+1に伝達することを許容し、かつ比較装置i+12971からの結果(一実施形態ではオーバフロー)情報を比較装置i2911に伝達することを許容する。
たとえば表39では、符号付きパック・バイトの比較が実行される。比較装置i+12971がデータ要素1に作用し、比較装置i2911がデータ要素0に作用すると仮定する。比較装置i+12971はワードの上位8ビットを比較し、前段i+12972を介して結果情報を伝達する。比較装置i2911はワードの下位8ビットを比較し、次段i2913を介して結果情報を伝達する。しかし、演算制御回路2900はビット制御装置i2920に、前段i+12972および次段i2913から受け取った結果情報の、比較装置間での伝搬を停止させる。
しかし、符号付きパック・ワードの比較を実行する場合は、比較装置i+12971の結果が比較装置i2911に伝達され、逆もまた同様である。表40はこの結果を示す。この種の伝達はパック・ダブルワードでも可能である。
各比較装置は任意選択で結果レジスタに結合される。結果レジスタは、完全結果信号、すなわち結果[63:0]2960をDEST605レジスタへ伝送できるようになるまで比較演算の結果を一時的に記憶する。
完全64ビット・パック比較回路では、8つの比較回路および7つのビット制御装置が使用される。そのような回路を使用して、64ビット・アンパック・データに対して比較を実行し、それによって、同じ回路を使用してアンパック比較演算とパック比較演算を実行することができる。
前述のパック比較演算を命令セットに含めることの利点
前述のパック比較命令では、ソース1とソース2を比較した結果がパック・マスクとして記憶される。前述のように、データに関する条件付き分岐は予測不能であり、したがって、分岐予測アルゴリズムを破壊するためプロセッサ性能に影響を及ぼす。しかし、パック・マスクを生成することによって、この比較命令はデータに基づいて必要な条件付き分岐の数を減少させる。たとえば、下記の表41に示すようにパック・データに対して関数(if Y>A then X=X+B;else X=X)を実行することができる(表41に示した値は16進表記で示されている)。
上記の例から分かるように、条件付き分岐はもはや必要とされない。分岐命令が必要とされないので、分岐をスペキュラティブに予想するプロセッサは、この比較命令を使用してこのおよび他の同様な演算を実行しても性能が低下することがない。したがって、プロセッサ109によってサポートされる命令セットにこの比較命令を与えることによって、プロセッサ109は、この機能を必要とするアルゴリズムをより高い性能レベルで実行することができる。
マルチメディア・アルゴリズムの例
開示した命令セットの融通性を示すために、いくつかのマルチメディア・アルゴリズムの例について下記で説明する。いくつかのケースでは、同様なパック・データ命令を使用してこのようなアルゴリズムにおけるあるステップを実行することができる。下記の例では、データ移動、ルーピング、条件付き分岐を管理する場合に汎用プロセッサ命令を使用する必要があるいくつかのステップを省略した。
1)複素数の乗算
開示した乗算−加算命令を使用して、表42aに示したように、単一の命令で2つの複素数を乗算することができる。2つの複素数(たとえばr1i1およびr2i2)の乗算は下記の数式に従って実行される。
実成分=r1・r2−i1・i2
虚成分=r1・i2+r2・i1
この命令をあらゆるクロック・サイクルで完了するように実施する場合、本発明はあらゆるクロック・サイクルで2つの複素数を乗算することができる。
他の例として、表42bは、3つの複素数を乗算するために使用される命令を示す。
2)乗算累算演算
開示した命令を使用して値を乗算し累算することもできる。たとえば、下記の表43に示したように2組の4つのデータ要素(A1-4およびB1-4)を乗算し累算することができる。一実施形態では、表43に示した命令のそれぞれが実施され各クロック・サイクルが完了する。
各組のデータ要素の数が8よりも多く、かつ4の倍数である場合に、これらの組の乗算および累算を下記の表44に示したように実行する場合、必要な命令の数が少なくなる。
他の例として、表45はセットAおよびBならびにセットCおよびDの別々の乗算および累算を示す。これらのセットはそれぞれ、2つのデータ要素を含む。
他の例として、表46はセットAおよびBならびにセットCおよびDの別々の乗算および累算を示す。これらのセットはそれぞれ、4つのデータ要素を含む。
3)ドット積アルゴリズム
ドット積(内積とも呼ぶ)は信号処理および行列演算に使用される。たとえば、ドット積は、行列の積を算出する際や、ディジタル・フィルタリング演算(FIRフィルタリングやIIRフィルタリングなど)を行う際や、相関シーケンスを算出する際に使用される。多数の音声圧縮アルゴリズム(たとえば、GSMや、G.728や、CELPや、VSELP)およびハイファイ圧縮アルゴリズム(たとえば、MPEGや副バンド・コーディング)でディジタル・フィルタリング演算および相関演算が広く使用されているので、ドット積の性能が向上することによってこれらのアルゴリズムの性能が向上する。
2つの長さNシーケンスAおよびBのドット積は次式のように定義される。
ドット積演算の実行では、各シーケンスの対応する要素が互いに乗算され結果が累算されドット積結果が形成される乗算累算演算が広く使用されている。
本発明では、移動演算、パック加算、乗算加算演算、パック・シフト演算を含めることによって、パック・データを使用してドット積演算を実行することができる。たとえば、4つの16ビット要素を含むパック・データ・タイプを使用する場合、
1)移動命令を用いて、Aシーケンスの4つの16ビット値にアクセスしてソース1を生成し、
2)移動命令を用いて、Bシーケンスの4つの16ビット値にアクセスしてソース2を生成し、
3)乗算−加算命令、パック加算命令、シフト命令を使用して、前述のように乗算および累算を行うことによって、それぞれ、4つの値を含む、2つのシーケンスに対してドット積演算を実行することができる。
多数の要素を含むベクトルに関しては、表46に示した方法が使用され、最後に最終結果どうしが合計される。他のサポート命令には、累算器レジスタを初期設定するパックOR命令およびパックXOR命令と、計算の最後の段階で不要な値をシフトオフするパック・シフト命令が含まれる。ループ制御演算は、プロセッサ109の命令セットにすでに存在する命令を使用して行われる。
4)二次元ループ・フィルタ
ある種のマルチメディア・アルゴリズムでは二次元ループ・フィルタが使用される。たとえば、下記の表47に示したフィルタ係数をビデオ会議アルゴリズムで使用して、画素データに対して低域フィルタを実行することができる。
位置(x,y)にある画素の新しい値を算出するために、下記の数式が使用される。
結果ピクセル=(x−1,y−1)+2(x,y−1)+(x+1,y−1)+2(x−1,y)+4(x,y)+2(x+1,y)+(x−1,y+1)+2(x,y+1)+(x+1,y+1)
結果的に得られる画素
本発明では、パック、アンパック、移動、パック・シフト、パック加算を含めることによって、パック・データを使用して二次元ループ・フィルタを実施することができる。前述のループ・フィルタの一実施形態によれば、このループ・フィルタは2つの簡単な一次元フィルタとして適用され、すなわち上記の二次元フィルタを2つの121フィルタとして適用することができる。第1のフィルタは水平方向にあり、それに対して第2のフィルタは垂直方向にある。
表48は、8×8ブロックの画素データの表現を示す。
この8×8ブロックの画素データに対してフィルタの水平パスを実行するときは、下記のステップが実行される。
1)移動命令を使用して8つの8ビット画素値にパック・データとしてアクセスし、
2)累算時の精度を維持するために、8つの8ビット画素を、4つの8ビット画素を含む16ビット・パック・データとしてアンパックし(ソース1)、
3)ソース1を2倍してソース2およびソース3を生成し、
4)ソース1に対してアンパック16ビット右シフトを実行し、
5)ソース3に対してアンパック16ビット左シフトを実行し、
6)a)ソース1=ソース1+ソース2
b)ソース1=ソース1+ソース2
c)ソース1=ソース1+ソース3
の各パック加算を実行することによって(ソース1+2*ソース2+ソース3)を生成し、
7)結果的に得られたパック・ワード・データを8×8中間結果アレイとして記憶し、
8)下記の表49に示したように8×8中間結果アレイ全体が生成されるまで(たとえば、1A0は表49のA0の中間結果を表す)これらのステップを繰り返す。
この8×8中間結果アレイに対してフィルタの垂直パスを実行するときは、下記のステップが実行される。
1)移動命令を用いて、中間結果アレイの4×4データ・ブロックにパック・データとしてアクセスしてソース1、ソース2、ソース3を生成し(一例として表50を参照されたい)、
2)a)ソース1=ソース1+ソース2
b)ソース1=ソース1+ソース2
c)ソース1=ソース1+ソース3
の各パック加算を実行することによって(ソース1+2*ソース2+ソース3)を生成し、
3)結果的に得られたソース1に対してパック4ビット右シフトを実行して加重の和を生成し(これは実際上、16で除算される)、
4)結果的に得られたソース1を飽和を用いてパックして16ビット値を8ビット画素値に変換し、
6)結果的に得られたパック・ワード・データを8×8結果アレイとして記憶し(表50に示した例に関しては、この4バイトはB0、B1、B2、B3の新しい画素値を表す)、
7)8×8結果アレイ全体が生成されるまでこれらのステップを繰り返す。
8×8結果アレイの1番上の行および1番下の行が、本発明を曖昧にしないように本明細書には記載していない異なるアルゴリズムを使用して求められることに留意されたい。
したがって、本発明は、パック命令、アンパック命令、移動命令、パック・シフト命令、パック加算命令をプロセッサ109上に与えることによって、そのようなフィルタが必要とする演算を一度に1データ要素ずつ実行しなければならない従来技術の汎用プロセッサと比べて性能を著しく向上させることができる。
5)運動推定
いくつかのマルチメディアアプリケーション(たとえば、ビデオ会議やMPEG(高品質ビデオ再生))で運動推定が使用されている。ビデオ会議に関しては、運動推定を使用して、端末間で伝送しなければならないデータの量が低減される。運動推定は、ビデオ・フレームを固定サイズのビデオ・ブロックに分割することによって行われる。フレーム1内の各ブロックごとに、フレーム2に同様な画像を含むブロックがあるかどうかが判定される。フレーム2にそのようなブロックが含まれる場合、運動ベクトル基準を用いてそのブロックをフレーム1に記述することができる。したがって、そのブロックを表すすべてのデータを伝送するのではなく、運動ベクトルを受信側端末へ伝送するだけでよい。たとえば、フレーム1内のあるブロックがフレーム2内のあるブロックに類似しており、後者のブロックと同じ画面座標にある場合、そのブロックへ送る必要があるのは運動ベクトル0だけである。しかし、フレーム1内のあるブロックがフレーム2内のあるブロックに類似しているが後者のブロックとは異なる画面座標にある場合、そのブロックの新しい位置を示す運動ベクトルを送るだけでよい。一実施形態によれば、フレーム1内のあるブロックAがフレーム2内のあるブロックBに類似しているかどうかを判定するために、画素値間の絶対差の和が求められる。この和が小さければ小さいほど、ブロックAはブロックBに類似している(すなわち、この和が零である場合、ブロックAはブロックBと同一である)。
本発明では、飽和演算および論理演算を含む移動、アンパック、パック加算、パック減算を含めることによって、パック・データを使用して運動推定を実行することができる。たとえば、2つの16×16ビデオ・ブロックを、パック・データとして記憶されている2つの8ビット画素値アレイとして表す場合、これらのブロック内の画素値は、
1)移動命令を用いて、ブロックAの8つの8ビット値にアクセスしてソース1を生成し、
2)移動命令を用いて、ブロックBの8つの8ビット値にアクセスしてソース2を生成し、
3)パック減算を飽和と共に実行し、ソース2からソース1を減算してソース3を生成し(飽和を用いて減算することによって、ソース3にはこの減算の正の結果しか含まれない(すなわち、負の結果は零になる))、
4)パック減算を飽和と共に実行し、ソース1からソース2を減算してソース4を生成し(飽和を用いて減算することによって、ソース4にはこの減算の正の結果しか含まれない(すなわち、負の結果は零になる))、
5)ソース3およびソース4に対してパックOR演算を実行してソース5を生成し(このOR演算を実行することによって、ソース5にはソース1およびソース2の絶対値が含まれる)、
6)16×16ブロックが処理されるまでこれらのステップを繰り返すことによって算出することができる。
結果的に得られた8ビット絶対値は、16ビット精度が得られるように16ビット・データ要素としてアンパックされ、次いでパック加算を使用して加算される。
したがって、本発明は、飽和を含む移動、アンパック、パック加算、パック減算をプロセッサ109上に与えることによって、運動推定演算の加算および絶対差を一度に1データ要素ずつ実行しなければならない従来技術の汎用プロセッサと比べて性能を著しく向上させることができる。
6)離散余弦変換
離散余弦変換(DCT)は、多数の信号処理アルゴリズムで使用されている周知の機能である。特に、ビデオ圧縮アルゴリズムおよび画像圧縮アルゴリズムではこの変換が広く使用されている。
画像圧縮アルゴリズムおよびビデオ圧縮アルゴリズムでは、DCTを使用して画素のブロックが空間表現から周波数表現に変換される。周波数変換では、画像情報が周波数成分に分割され、このうちのいくつかの成分は他の成分よりも重要である。圧縮アルゴリズムは、再構築された画像内容に悪影響を与えない周波数成分を選択的に量子化または破棄する。このように、圧縮が行われる。
DCTの多数の実施形態があり、そのうちで最も広く使用されているのは、高速フーリエ変換(FFT)計算フローに基づいてモデル化されたある種の高速変換方法である。この高速変換では、オーダーN変換がオーダーN/2変換の組合せに分解され、結果が再び組み合わされる。この分解は、最小のオーダー2変換に達するまで行うことができる。この基本2変換カーネルはしばしば、蝶形演算と呼ばれる。蝶形演算は次式のように表される。
X=a*X+b*y
Y=c*x−d*y
上式で、a、b、c、dは係数と呼ばれ、xおよびyは入力データであり、XおよびYは変換出力である。
本発明では、移動演算、乗算−加算演算、パック・シフト演算、アンパック演算を含めることによって、パック・データを使用して下記のようにDCT演算を実行することができる。
1)移動命令およびアンパック命令を用いて、xおよびyを表す2つの16ビット値にアクセスしてソース1を生成し(下記の表51を参照されたい)、
2)下記の表51に示したようにソース2を生成し(いくつかの蝶形演算にわたってソース2を再使用できることに留意されたい)、
3)ソース1およびソース2を用いて演算−加算命令を実行して結果を生成する(下記の表51を参照されたい)。
いくつかの状況では、蝶形演算の係数は1である。この場合、蝶形演算は、パック加算命令およびパック減算命令を使用して実行できる加算および減算のみに縮退する。
IEEE文書において、ビデオ会議に関して逆DCTを実行する場合の精度が指定されている(IEEE Circuits and Systems Society、「IEEE Standard Specifications for the Implementations of 8×8 Inverse Discrete Cosine Transform」(IEEE Std.1180年−1990年、IEEE Inc.345 East 47th St.、NY、NY10017、米国、1991年3月18日)を参照されたい)。必要な精度は、開示した演算−加算命令によって満たされる。なぜなら、この命令が16ビット入力を使用して32ビット出力を生成するからである。
したがって、本発明は、移動演算、乗算−加算演算、パック・シフト演算をプロセッサ109上に与えることによって、DCT演算の加算および乗算を一度に1データ要素ずつ実行しなければならない従来技術の汎用プロセッサと比べて性能を著しく向上させることができる。
代替実施形態
それぞれの異なる演算が別々の回路を有するものとして本発明を説明したが、ある回路がいくつかの異なる演算によって共用されるように代替実施形態を実施することができる。たとえば、一実施形態では、1)パック加算、パック減算、パック比較演算、パック論理演算を実行する単一の論理演算装置(ALU)、2)パック演算、アンパック演算、パック・シフト演算を実行する回路装置、3)パック乗算演算および乗算−加算演算を実行する回路装置、4)ポピュレーション・カウント演算を実行する回路装置の各回路が使用される。
「対応する」および「それぞれの」の語は本明細書では、2つ以上のパック・データに記憶されているデータ要素間の所定の関係を指すために使用される。一実施形態では、この関係はパック・データ内のデータ要素のビット位置に基づくものである。たとえば、第1のパック・データの(たとえば、パック・バイト・フォーマットでビット位置0ないし7に記憶された)データ要素0は、第2のパック・データの(たとえば、パック・バイト・フォーマットでビット位置0ないし7に記憶された)データ要素0に対応する。しかし、この関係は代替実施形態では異なる。たとえば、第1のパック・データおよび第2のパック・データ内の対応するデータ要素はそれぞれの異なるサイズのものでよい。他の例として、第1のパック・データの最下位データ要素が第2のパック・データの最下位データ要素に対応する(以下同様)のではなく、第1および第2のパック・データ内のデータ要素が他の何らかのオーダーで互いに対応することができる。他の例として、第1および第2のパック・データ内のデータ要素は、1対1で対応するのではなく異なる比で対応することができる(たとえば、第1のパック・データは、第2のパック・データ内の2つ以上の異なるデータ要素に対応する1つまたは複数のデータ要素を有することができる)。
本発明をいくつかの実施形態に関して説明したが、当業者には、本発明が前述の実施形態に限らないことが認識されよう。本発明の方法および装置は、添付の請求の範囲の趣旨および範囲内で修正および変更を加えて実施することができる。したがって、この説明は本発明を制限するものではなく例示的なものとみなされる。
Claims (34)
- 複数のデータ要素をそれぞれ有するパック・データを含むデータの記憶用の記憶域を備え;
汎用プロセッサの実行装置であって、第1のソース・データおよび第2のソース・データを識別できるフォーマットのパック・データ命令セットによって指定された演算を実行する実行装置を備え、この実行装置で実行できる前記パック・データ命令セットには、少なくとも、
アンパックの結果パック・データの生成、すなわち、前記第1のソース・データにおける全データ要素よりも少ない数のデータ要素に、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、インタリーブさせて得られる結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、1または複数のアンパック・タイプの演算と;
パックの結果パック・データの生成、すなわち、前記第1のソース・データおよび前記第2のソース・データにおける各データ要素から導出した複数ビット部分を含んで構成される結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、1または複数のパック・タイプの演算と;
パック乗算の結果パック・データの生成、すなわち、個々の結果要素として、前記第1のソース・データの各データ要素に、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、乗算して得られたものの上位ビットまたは下位ビットを含んでいる、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、1または複数のパック乗算タイプの演算と;
パック加算の結果パック・データの生成、すなわち、個々の結果要素として、前記第1のソース・データの各データ要素に、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、加算して得られたものを含んでいる、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、1または複数のパック加算タイプの演算と;
パック減算の結果パック・データの生成、すなわち、個々の結果要素として、前記第1のソース・データの各データ要素から、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、減算して得られたものを含んでいる、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、1または複数のパック減算タイプの演算と;
パック比較の結果パック・データの生成、すなわち、個々の結果要素が、前記第1のソース・データの各データ要素と、当該データ要素に対応する、前記第2のソース・データ中のデータ要素との比較結果を表すマスクを含み、各マスクにおいて、対応する比較が真であったときは全てのビットが第1の所定値であり、対応する比較が偽であったときは全てのビットが第2の所定値であるようにされている結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、1または複数のパック比較タイプの演算と;
乗算−加算の結果パック・データの生成、すなわち、第1および第2の結果要素を相互に加算せずに個別に格納できるように含み、前記第1の結果要素は、前記第1および第2のソース・データそれぞれからの相互に対応している対のデータ要素の2対について、対ごとに乗算をして加算したものを表し、かつ、前記第2の結果要素は、前記第1および第2のソース・データそれぞれからの相互に対応している対のデータ要素の、他の2対について、対ごとに乗算をして加算したものを表しており、前記第1および第2の結果要素はそれらの生成に用いた対のデータ要素に比べて高精度であるようにされている結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、1または複数の乗算−加算・タイプの演算と;
パック・シフトの結果パック・データの生成、すなわち、個々の結果要素として、前記第1のソース・データの各データ要素を、前記第2のソース・データにより指定されたビット数だけシフトさせたものであって、必要があれば前記ビット数のビットに充填がされている、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、1または複数のパック・シフト・タイプの演算と
が含まれている、ことを特徴とする装置。 - パック加算、乗算−加算及びアンパックのタイプの演算は、乗算累算の効率的演算に有用であり、
乗算−加算、パック・シフト、パックのタイプの演算は、複素数の乗算の効率的演算に有用であり、
パック加算、乗算−加算、パック・シフトのタイプの演算は、ドット積の効率的演算に有用であり、
パック、アンパック、パック・シフト、パック加算のタイプの演算は、二次元ループ・フィルタの効率的演算に有用であり、
乗算−加算、パック・シフト、アンパックのタイプの演算は、離散余弦変換の効率的演算に有用である
ことを特徴とする請求項1に記載の装置。 - 複数のデータ要素をそれぞれ有するパック・データを含むデータの記憶用の記憶域を備え;
汎用プロセッサの実行装置であって、パック・データ命令によって指定された演算を実行するため、
1または複数のアンパック・タイプの演算を実行する手段であって、第1のソース・データおよび第2のソース・データを識別できるフォーマットのアンパック命令に応じて、(a)前記第1のソース・データにおける全データ要素よりも少ない数のデータ要素に、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、インタリーブさせて、アンパック命令の結果パック・データを生成し、(b)生成されたアンパック命令の結果パック・データを前記記憶域へ記憶させる、アンパック・タイプ演算の実行手段と、
1または複数のパック・タイプの演算を実行する手段であって、第1のソース・データおよび第2のソース・データを識別できるフォーマットのパック命令に応じて、(a)前記第1のソース・データおよび前記第2のソース・データにおける各データ要素から複数ビット部分を導出し、その複数ビット部分を含んで構成される、パック命令の結果パック・データを生成し、(b)生成されたパック命令の結果パック・データを前記記憶域へ記憶させる、パック・タイプ演算の実行手段と、
1または複数のパック乗算タイプの演算を実行する手段であって、第1のソース・データおよび第2のソース・データを識別できるフォーマットのパック乗算命令に応じて、(a)前記第1のソース・データの各データ要素に、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、乗算して得られたものの上位ビットまたは下位ビットを、個々の結果要素に含めて成る、パック乗算命令の結果パック・データを生成し、(b)生成されたパック乗算命令の結果パック・データを前記記憶域へ記憶させる、パック乗算タイプ演算の実行手段と、
1または複数のパック加算タイプの演算を実行する手段であって、第1のソース・データおよび第2のソース・データを識別できるフォーマットのパック加算命令に応じて、(a)前記第1のソース・データの各データ要素に、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、加算して得られたものを、個々の結果要素に含めて成る、パック加算命令の結果パック・データを生成し、(b)生成されたパック加算命令の結果パック・データを前記記憶域へ記憶させる、パック加算タイプ演算の実行手段と、
1または複数のパック減算タイプの演算を実行する手段であって、第1のソース・データおよび第2のソース・データを識別できるフォーマットのパック減算命令に応じて、(a)前記第1のソース・データの各データ要素から、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、減算して得られたものを、個々の結果要素に含めて成る、パック命令の結果パック・データを生成し、(b)生成されたパック減算命令の結果パック・データを前記記憶域へ記憶させる、パック減算タイプ演算の実行手段と、
1または複数のパック比較タイプの演算を実行する手段であって、第1のソース・データおよび第2のソース・データを識別できるフォーマットのパック比較命令に応じて、(a)前記第1のソース・データの各データ要素と、当該データ要素に対応する、前記第2のソース・データ中のデータ要素との比較結果を表すマスクを、個々の結果要素に含めて成り、各マスクにおいて、対応する比較が真であったときは全てのビットが第1の所定値であり、対応する比較が偽であったときは全てのビットが第2の所定値であるようにされている、パック比較命令の結果パック・データを生成し、(b)生成されたパック比較命令の結果パック・データを前記記憶域へ記憶させる、パック比較タイプ演算の実行手段と、
1または複数の乗算−加算タイプの演算を実行する手段であって、第1のソース・データおよび第2のソース・データを識別できるフォーマットの乗算−加算命令に応じて、(a)乗算−加算命令の結果パック・データの生成、すなわち、第1および第2の結果要素を相互に加算せずに個別に格納できるように含み、前記第1の結果要素は、前記第1および第2のソース・データそれぞれからの相互に対応している対のデータ要素の2対について、対ごとに乗算をして加算したものを表し、かつ、前記第2の結果要素は、前記第1および第2のソース・データそれぞれからの相互に対応している対のデータ要素の、他の2対について、対ごとに乗算をして加算したものを表しており、前記第1および第2の結果要素はそれらの生成に用いた対のデータ要素に比べて高精度であるようにされている、乗算−加算命令の結果パック・データの生成を行い、(b)生成をされた乗算−加算命令の結果パック・データを前記記憶域へ記憶させる、乗算−加算タイプ演算の実行手段と、
1または複数のパック・シフト・タイプの演算を実行する手段であって、第1のソース・データおよび第2のソース・データを識別できるフォーマットのパック・シフト命令に応じて、(a)前記第1のソース・データの各データ要素を、前記第2のソース・データにより指定されたビット数だけシフトさせたものであって、必要により前記ビット数のビットに充填がされたものを、個々の結果要素に含めて構成される、パック・シフト命令の結果パック・データを生成し、(b)生成されたパック・シフト命令の結果パック・データを前記記憶域へ記憶させる、パック・シフト・タイプ演算の実行手段と、
を有している実行装置を備える、ことを特徴とする装置。 - パック加算タイプ演算の実行手段、乗算−加算タイプ演算の実行手段及びアンパックタイプ演算の実行手段は、乗算累算の効率的演算に有用であり、
乗算−加算タイプ演算の実行手段、パック・シフト・タイプ演算の実行手段、パック・タイプ演算の実行手段は、複素数の乗算の効率的演算に有用であり、
パック加算タイプ演算の実行手段、乗算−加算タイプ演算の実行手段、パック・シフト・タイプ演算の実行手段は、ドット積の効率的演算に有用であり、
パック・タイプ演算の実行手段、アンパック・タイプ演算の実行手段、パック・シフト・タイプ演算の実行手段、パック加算タイプ演算の実行手段は、二次元ループ・フィルタの効率的演算に有用であり、
乗算−加算タイプ演算の実行手段、パック・シフト・タイプ演算の実行手段、アンパック・タイプ演算の実行手段は、離散余弦変換の効率的演算に有用である実行装置を備えている、ことを特徴とする請求項3に記載の装置。 - 前記1または複数のアンパック・タイプの演算の少なくとも1つにおいて、結果パック・データが前記第1のソース・データおよび前記第2のソース・データの両方の上半分または下半分を含むことを特徴とする請求項1〜4の何れか1項に記載の装置。
- 前記1または複数のパック・タイプの演算の少なくとも1つにおいて、前記第1および第2のソース・データの各データ要素がNビットのデータ要素であり、前記複数ビット部分それぞれがN/2ビットの結果要素であることを特徴とする請求項1〜4の何れか1項に記載の装置。
- 前記1または複数の乗算−加算タイプの演算の少なくとも1つにおいて、前記第1および第2のソース・データの各データ要素がNビットのデータ要素を含み、前記第1の結果要素と第2の結果要素のそれぞれが2Nビットの結果要素であることを特徴とする請求項1〜6の何れか1項に記載の装置。
- 前記記憶域が1つまたは複数のレジスタの集合であることを特徴とする請求項1〜7のいずれか1項に記載の装置。
- 前記フォーマットが、第1の記憶位置をソース−宛先オペランドとして指定し、第2の記憶位置をソース・オペランドとして指定することを含むことを特徴とする請求項1〜8の何れか1項に記載の装置。
- 前記ソース・オペランドと前記ソース−宛先オペランドのそれぞれがレジスタ番号として指定され、前記ソース・オペランドは演算コード・バイトの0から2のビットによって指定され、前記ソース−宛先オペランドは前記演算コード・バイトの3から5のビットによって指定されることを特徴とする請求項9に記載の装置。
- 前記1または複数のパック・シフト・タイプの演算には:
個々の結果要素が、前記第1のソース・データの各データ要素を、前記第2のソース・データにより指定されたビット数だけ右シフトさせたものであって、必要があれば前記ビット数の上位ビットに符号値の充填がされて構成される、結果パック・データを生成する、パック右シフト演算タイプの演算と、
個々の結果要素が、前記第1のソース・データの各データ要素を、前記第2のソース・データにより指定されたビット数だけ左シフトさせたものであって、必要があれば前記ビット数の下位ビットにゼロ充填がされて構成される、結果パック・データを生成する、パック左シフト・タイプの演算と、
個々の結果要素が、前記第1のソース・データの各データ要素を、前記第2のソース・データにより指定されたビット数だけ右シフトさせたものであって、必要があれば前記ビット数の上位ビットにゼロ充填がされて構成される、結果パック・データを生成する、パック右シフト論理タイプの演算と、
が含まれることを特徴とする請求項1〜10の何れか1項に記載の装置。 - 複数の命令シーケンスを記憶する記憶装置と;
表示装置と;
音声再生装置と;
前記記憶装置、前記表示装置、および前記音声再生装置に結合されたプロセッサと
を備えたシステムであって、前記プロセッサが、
複数のデータ要素をそれぞれ有するパック・データを含むデータの記憶用の記憶域と;
汎用プロセッサの実行装置であって、第1のソース・データおよび第2のソース・データを識別できるフォーマットのパック・データ命令セットによって指定された演算を実行する実行装置と
を備え、この実行装置で実行できる前記パック・データ命令セットには、少なくとも、
アンパックの結果パック・データの生成、すなわち、前記第1のソース・データにおける全データ要素よりも少ない数のデータ要素に、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、インタリーブさせて得られる結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、1または複数のアンパック・タイプの演算と;
パックの結果パック・データの生成、すなわち、前記第1のソース・データおよび前記第2のソース・データにおける各データ要素から導出した複数ビット部分を含んで構成される結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、1または複数のパック・タイプの演算と;
パック乗算の結果パック・データの生成、すなわち、個々の結果要素として、前記第1のソース・データの各データ要素に、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、乗算して得られたものの上位ビットまたは下位ビットを含んでいる、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、1または複数のパック乗算タイプの演算と;
パック加算の結果パック・データの生成、すなわち、個々の結果要素として、前記第1のソース・データの各データ要素に、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、加算して得られたものを含んでいる、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、1または複数のパック加算タイプの演算と;
パック減算の結果パック・データの生成、すなわち、個々の結果要素として、前記第1のソース・データの各データ要素から、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、減算して得られたものを含んでいる、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、1または複数のパック減算タイプの演算と;
パック比較の結果パック・データの生成、すなわち、個々の結果要素が、前記第1のソース・データの各データ要素と、当該データ要素に対応する、前記第2のソース・データ中のデータ要素との比較結果を表すマスクを含み、各マスクにおいて、対応する比較が真であったときは全てのビットが第1の所定値であり、対応する比較が偽であったときは全てのビットが第2の所定値であるようにされている、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、1または複数のパック比較タイプの演算と;
乗算−加算の結果パック・データの生成、すなわち、第1および第2の結果要素を相互に加算せずに個別に格納して含み、前記第1の結果要素は、前記第1および第2のソース・データそれぞれからの相互に対応している対のデータ要素の2対について、対ごとに乗算をして加算したものを表し、かつ、前記第2の結果要素は、前記第1および第2のソース・データそれぞれからの相互に対応している対のデータ要素の、他の2対について、対ごとに乗算をして加算したものを表しており、前記第1および第2の結果要素はそれらの生成に用いた対のデータ要素に比べて高精度であるようにされている、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、1または複数の乗算−加算・タイプの演算と;
パック・シフトの結果パック・データの生成、すなわち、個々の結果要素として、前記第1のソース・データの各データ要素を、前記第2のソース・データにより指定されたビット数だけシフトさせたものであって、必要があれば前記ビット数のビットに充填がされて構成される、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、1または複数のパック・シフト・タイプの演算と;
が含まれている、ことを特徴とするシステム。 - パック加算、乗算−加算及びアンパックのタイプの演算は、乗算累算の効率的演算に有用であり、
乗算−加算、パック・シフト、パックのタイプの演算は、複素数の乗算の効率的演算に有用であり、
パック加算、乗算−加算、パック・シフトのタイプの演算は、ドット積の効率的演算に有用であり、
パック、アンパック、パック・シフト、パック加算のタイプの演算は、二次元ループ・フィルタの効率的演算に有用であり、
乗算−加算、パック・シフト、アンパックのタイプの演算は、離散余弦変換の効率的演算に有用である
ことを特徴とする請求項12に記載のシステム。 - 前記1または複数のアンパック・タイプの演算の少なくとも1つにおいて、結果パック・データが前記第1のソース・データおよび前記第2のソース・データの両方の上半分または下半分を含み;
前記1または複数のパック・タイプの演算の少なくとも1つにおいて、前記第1および第2のソース・データの各データ要素がNビットのデータ要素であり、前記複数ビット部分のそれぞれがN/2ビットの結果要素であり;
前記1または複数の乗算−加算タイプの演算の少なくとも1つにおいて、前記第1および第2のソース・データの各データ要素がNビットのデータ要素を含み、前記第1の結果要素と第2の結果要素のそれぞれが2Nビットの結果要素であることを特徴とする請求項12または13に記載のシステム。 - 前記記憶域が1つまたは複数のレジスタの集合であることを特徴とする請求項12〜14のいずれか1項に記載のシステム。
- 前記フォーマットが、第1の記憶位置をソース−宛先オペランドとして指定し、第2の記憶位置をソース・オペランドとして指定することを含むことを特徴とする請求項12〜15のいずれか1項に記載のシステム。
- 前記ソース・オペランドと前記ソース−宛先オペランドのそれぞれがレジスタ番号として指定され、前記ソース・オペランドは演算コード・バイトの0から2のビットによって指定され、前記ソース−宛先オペランドは前記演算コード・バイトの3から5のビットによって指定されることを特徴とする請求項16に記載の装置。
- 前記1または複数のパック・シフト・タイプの演算には:
個々の結果要素が、前記第1のソース・データの各データ要素を、前記第2のソース・データにより指定されたビット数だけ右シフトさせたものであって、必要があれば前記ビット数の上位ビットに符号値の充填がされて構成される、結果パック・データを生成する、パック右シフト演算タイプの演算と、
個々の結果要素が、前記第1のソース・データの各データ要素を、前記第2のソース・データにより指定されたビット数だけ左シフトさせたものであって、必要があれば前記ビット数の下位ビットにゼロ充填がされて構成される、結果パック・データを生成する、パック左シフト・タイプの演算と、
個々の結果要素が、前記第1のソース・データの各データ要素を、前記第2のソース・データにより指定されたビット数だけ右シフトさせたものであって、必要があれば前記ビット数の上位ビットにゼロ充填がされて構成される結果パック・データを、生成するパック右シフト論理タイプの演算と、
が含まれることを特徴とする請求項12〜17のいずれか1項に記載の装置。 - 前記記憶装置が複素数乗算のルーチンを記憶し、その複素数乗算のルーチンには、少なくとも2つの複素数を乗算するために前記1つまたは複数の乗算−加算タイプの演算の1つを指定する命令を含まれることを特徴とする請求項18に記載のシステム。
- 前記記憶装置が乗算累算ルーチンを記憶し、その乗算累算ルーチンには、前記アンパック・タイプの演算および乗算−加算タイプの演算それぞれから少なくとも1つのタイプを指定する命令が含まれることを特徴とする請求項18に記載のシステム。
- 前記記憶装置がドット積ルーチンを記憶し、そのドット積ルーチンには、前記乗算−加算、パック・シフト、およびパック加算タイプの演算それぞれから少なくとも1つのタイプを指定する命令が含まれることを特徴とする請求項18に記載のシステム。
- 前記記憶装置がループ・フィルタ・ルーチンを記憶し、そのループ・フィルタ・ルーチンには、前記アンパック、パック・シフト、およびパック加算タイプの演算それぞれから少なくとも1つのタイプを指定する命令が含まれることを特徴とする請求項18に記載のシステム。
- 前記記憶装置が動き推定ルーチンを記憶し、その動き推定ルーチンは、前記アンパック、飽和のパック減算、およびパック加算タイプの演算並びにパック論理タイプの演算それぞれから少なくとも1つのタイプを指定する命令を含み、前記表示装置上に表示可能なデータを処理することを特徴とする請求項18に記載のシステム。
- 前記記憶装置が離散余弦変換ルーチンを記憶し、その離散余弦変換ルーチンは、前記パック・シフトタイプの演算および乗算−加算タイプの演算それぞれから少なくとも1つのタイプを指定する命令を含み、前記表示装置上に表示可能なデータを処理することを特徴とする請求項18に記載のシステム。
- 複数のパック・データ命令であって、第1のソース・データおよび第2のソース・データと、それらについて実行すべき演算とをそれぞれ指定する複数のパック・データ命令を受信するステップを備え、前記複数のパック・データ命令が指定する演算には、少なくとも、
アンパック・タイプの演算にして、(a)その結果パック・データの生成をし、その生成において、前記第1のソース・データにおける全データ要素よりも少ない数のデータ要素に、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、インタリーブさせ、そして、(b)生成をした結果パック・データを前記記憶域へ記憶させる、1または複数のアンパック・タイプの演算と、
パック・タイプの演算にして、(a)その結果パック・データの生成をし、その生成において、前記第1のソース・データおよび前記第2のソース・データにおける各データ要素から複数ビット部分を導出し、そして、(b)生成をした結果パック・データを前記記憶域へ記憶させる、1または複数のパック・タイプの演算と、
パック乗算タイプの演算にして、(a)その結果パック・データの生成をし、その生成において、個々の結果要素として、前記第1のソース・データの各データ要素に、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、乗算して得られたものの上位ビットまたは下位ビットを発生させ、そして、(b)生成をした結果パック・データを前記記憶域へ記憶させる、1または複数のパック乗算タイプの演算と、
パック加算タイプの演算にして、(a)その結果パック・データの生成をし、その生成において、個々の結果要素を、前記第1のソース・データの各データ要素に、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、加算して得られたものでもって構成し、そして、(b)生成をした結果パック・データを前記記憶域へ記憶させる、1または複数のパック加算タイプの演算と、
パック減算タイプの演算にして、(a)その結果パック・データの生成をし、その生成において、個々の結果要素を、前記第1のソース・データの各データ要素から、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、減算して得られたものでもって構成し、そして、(b)生成をした結果パック・データを前記記憶域へ記憶させる、1または複数のパック減算タイプの演算と、
パック比較タイプの演算にして、(a)その結果パック・データの生成をし、その生成において、個々の結果要素として、前記第1のソース・データの各データ要素と、当該データ要素に対応する、前記第2のソース・データ中のデータ要素との比較結果を表すマスクを発生させ、各マスクにおいては、対応する比較が真であったときは全てのビットが第1の所定値であり、対応する比較が偽であったときは全てのビットが第2の所定値であるようにされており、そして、(b)生成をした結果パック・データを前記記憶域へ記憶させる、1または複数のパック比較タイプの演算と、
乗算−加算タイプの演算にして、(a)その結果パック・データの生成をし、その生成において、前記第1および第2のソース・データそれぞれからの相互に対応している対のデータ要素の2対について、対ごとに乗算をして加算して得られる第1の結果要素を発生し、前記第1および第2のソース・データそれぞれからの相互に対応している対のデータ要素の、他の2対について、対ごとに乗算をして加算して得られる第2の結果要素を発生し、前記第1および第2の結果要素はそれらの生成に用いた対のデータ要素に比べて高精度であるようにされており、そして、(b)生成をした結果パック・データの前記記憶域への記憶をさせ、その記憶において、前記第1および第2の結果要素を相互に加算せずに個別に格納する、1または複数の乗算−加算タイプの演算と、
パック・シフト・タイプの演算にして、(a)その結果パック・データの生成をし、その生成において、前記第1のソース・データの各データ要素を、前記第2のソース・データにより指定されたビット数だけシフトさせたものであって、必要があれば前記ビット数のビットに充填がされて構成される個々の結果要素を発生させ、そして、(b)生成をした結果パック・データを前記記憶域へ記憶させる、1または複数のパック・シフト・タイプの演算と
が含まれており;
前記複数のパック・データ命令の受信に応答して、前記複数のパック・データ命令のそれぞれが指定した演算を実行するステップを備える、
ことを特徴とする方法。 - 前記1または複数のアンパック・タイプの演算の少なくとも1つにおいて、結果パック・データが前記第1のソース・データおよび前記第2のソース・データの両方の上半分または下半分を含むことを特徴とする請求項25に記載の方法。
- 前記1または複数のパック・タイプの演算の少なくとも1つにおいて、前記第1および第2のソース・データの各データ要素がNビットのデータ要素であり、前記複数ビット部分それぞれがN/2ビットの結果要素であることを特徴とする請求項25に記載の方法。
- 前記1または複数の乗算−加算タイプの演算の少なくとも1つにおいて、前記第1および第2のソース・データの各データ要素がNビットのデータ要素を含み、前記第1の結果要素と第2の結果要素のそれぞれが2Nビットの結果要素であることを特徴とする請求項25〜27の何れか1項に記載の方法。
- 前記記憶域が1つまたは複数のレジスタの集合であることを特徴とする請求項25〜28のいずれかに記載の方法。
- 前記複数のパック・データ命令のそれぞれが、ある記憶位置をソース−宛先オペランドとして指定し、他の記憶位置をソース・オペランドとして指定することを特徴とする請求項25〜29の何れか1項に記載の方法。
- 前記ソース・オペランドおよび前記ソース−宛先オペランドのそれぞれがレジスタ番号として指定され、前記ソース・オペランドは演算コード・バイトの0から2のビットによって指定され、前記ソース−宛先オペランドは前記演算コード・バイトの3から5のビットによって指定されることを特徴とする請求項30に記載の方法。
- 前記1または複数のパック・シフト・タイプの演算には:
個々の結果要素が、前記第1のソース・データの各データ要素を、前記第2のソース・データにより指定されたビット数だけ右シフトさせたものであって、必要があれば前記ビット数の上位ビットに符号値の充填がされて構成される、結果パック・データを生成する、パック右シフト演算タイプの演算と、
個々の結果要素が、前記第1のソース・データの各データ要素を、前記第2のソース・データにより指定されたビット数だけ左シフトさせたものであって、必要があれば前記ビット数の下位ビットにゼロ充填がされて構成される、結果パック・データを生成する、パック左シフト・タイプの演算と、
個々の結果要素が、前記第1のソース・データの各データ要素を、前記第2のソース・データにより指定されたビット数だけ右シフトさせたものであって、必要があれば前記ビット数の上位ビットにゼロ充填がされて構成される、結果パック・データを生成する、パック右シフト論理タイプの演算と、
が含まれることを特徴とする請求項25〜31のいずれか1項に記載の方法。 - 複数のデータ要素をそれぞれ有するパック・データを含むデータの記憶用の記憶域と;
第1のソース・データおよび第2のソース・データを識別できるフォーマットのアンパック命令を受け、前記第1のソース・データにおける全データ要素よりも少ない数のデータ要素に、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、インタリーブさせて得られる結果パック・データを生成し、そして、その結果パック・データを前記記憶域へ記憶させる、第1の回路と、
第1のソース・データおよび第2のソース・データを識別できるフォーマットのパック命令を受け、前記第1のソース・データおよび前記第2のソース・データにおける各データ要素から導出した複数ビット部分を含んで構成される結果パック・データを生成させ、そして、その結果パック・データを前記記憶域へ記憶させる、第2の回路と、
第1のソース・データおよび第2のソース・データを識別できるフォーマットのパック乗算命令を受け、前記第1のソース・データの各データ要素に、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、乗算して得られたものの上位ビットまたは下位ビットを、個々の結果要素に含めて成る結果パック・データを生成させ、そして、その結果パック・データを前記記憶域へ記憶させる、第3の回路と、
第1のソース・データおよび第2のソース・データを識別できるフォーマットのパック加算命令を受け、前記第1のソース・データの各データ要素に、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、加算して得られたものを、個々の結果要素に含めて成る結果パック・データを生成させ、そして、その結果パック・データを前記記憶域へ記憶させる、第4の回路と、
第1のソース・データおよび第2のソース・データを識別できるフォーマットのパック減算命令を受け、前記第1のソース・データの各データ要素から、当該データ要素に対応する、前記第2のソース・データ中のデータ要素を、減算して得られたものを、個々の結果要素に含めて成る結果パック・データを生成させ、そして、その結果パック・データを前記記憶域へ記憶させる、第5の回路と、
第1のソース・データおよび第2のソース・データを識別できるフォーマットのパック比較命令を受け、前記第1のソース・データの各データ要素と、当該データ要素に対応する、前記第2のソース・データ中のデータ要素との比較結果を表すマスクを個々の結果要素に含めて成り、各マスクにおいて、対応する比較が真であったときは全てのビットが第1の所定値であり、対応する比較が偽であったときは全てのビットが第2の所定値であるようにされている結果パック・データ生成させ、そして、その結果パック・データを前記記憶域へ記憶させる、第6の回路と、
第1のソース・データおよび第2のソース・データを識別できるフォーマットの乗算−加算命令を受け、その結果パック・データの生成、すなわち、第1および第2の結果要素を相互に加算せずに個別に格納できるように含み、前記第1の結果要素は、前記第1および第2のソース・データそれぞれからの相互に対応している対のデータ要素の2対について、対ごとに乗算をして加算したものを表し、かつ、前記第2の結果要素は、前記第1および第2のソース・データそれぞれからの相互に対応している対のデータ要素の、他の2対について、対ごとに乗算をして加算したものを表しており、前記第1および第2の結果要素はそれらの生成に用いた対のデータ要素に比べて高精度であるようにされている結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、第7の回路と、
第1のソース・データおよび第2のソース・データを識別できるフォーマットのパック・シフト命令を受け、前記第1のソース・データの各データ要素を、前記第2のソース・データにより指定されたビット数だけシフトさせたものであって、必要により前記ビット数のビットに充填がされたものを、個々の結果要素に含めて構成される結果パック・データを生成させ、そして、その結果パック・データを前記記憶域へ記憶させる、第8の回路と
を含む装置。 - 第1の回路〜第8の回路が個別の回路であることを特徴とする請求項33に記載の装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US52136095A | 1995-08-31 | 1995-08-31 | |
US08/521,360 | 1995-08-31 | ||
PCT/US1996/011893 WO1997008608A1 (en) | 1995-08-31 | 1996-07-17 | A set of instructions for operating on packed data |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH11511575A JPH11511575A (ja) | 1999-10-05 |
JP3711147B2 true JP3711147B2 (ja) | 2005-10-26 |
Family
ID=24076444
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP51025297A Expired - Lifetime JP3711147B2 (ja) | 1995-08-31 | 1996-07-17 | パック・データを処理する1組の命令 |
Country Status (9)
Country | Link |
---|---|
EP (2) | EP0847551B1 (ja) |
JP (1) | JP3711147B2 (ja) |
KR (1) | KR19990044304A (ja) |
CN (23) | CN101794212B (ja) |
AU (1) | AU6677896A (ja) |
BR (2) | BR9612911B1 (ja) |
HK (2) | HK1099095A1 (ja) |
TW (1) | TW310406B (ja) |
WO (1) | WO1997008608A1 (ja) |
Families Citing this family (76)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6738793B2 (en) | 1994-12-01 | 2004-05-18 | Intel Corporation | Processor capable of executing packed shift operations |
CN101794212B (zh) * | 1995-08-31 | 2015-01-07 | 英特尔公司 | 控制移位分组数据的位校正的装置 |
US6145068A (en) * | 1997-09-16 | 2000-11-07 | Phoenix Technologies Ltd. | Data transfer to a non-volatile storage medium |
US5864703A (en) | 1997-10-09 | 1999-01-26 | Mips Technologies, Inc. | Method for providing extended precision in SIMD vector arithmetic operations |
US7197625B1 (en) | 1997-10-09 | 2007-03-27 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
WO1999048025A2 (en) | 1998-03-18 | 1999-09-23 | Koninklijke Philips Electronics N.V. | Data processing device and method of computing the cosine transform of a matrix |
US7395302B2 (en) | 1998-03-31 | 2008-07-01 | Intel Corporation | Method and apparatus for performing horizontal addition and subtraction |
US6230257B1 (en) | 1998-03-31 | 2001-05-08 | Intel Corporation | Method and apparatus for staggering execution of a single packed data instruction using the same circuit |
US7392275B2 (en) | 1998-03-31 | 2008-06-24 | Intel Corporation | Method and apparatus for performing efficient transformations with horizontal addition and subtraction |
US6233671B1 (en) | 1998-03-31 | 2001-05-15 | Intel Corporation | Staggering execution of an instruction by dividing a full-width macro instruction into at least two partial-width micro instructions |
US6192467B1 (en) * | 1998-03-31 | 2001-02-20 | Intel Corporation | Executing partial-width packed data instructions |
US6230253B1 (en) | 1998-03-31 | 2001-05-08 | Intel Corporation | Executing partial-width packed data instructions |
US7114056B2 (en) | 1998-12-03 | 2006-09-26 | Sun Microsystems, Inc. | Local and global register partitioning in a VLIW processor |
US7117342B2 (en) | 1998-12-03 | 2006-10-03 | Sun Microsystems, Inc. | Implicitly derived register specifiers in a processor |
JP3336986B2 (ja) * | 1999-02-03 | 2002-10-21 | 日本電気株式会社 | 信号処理プロセッサ及びそれに用いる丸め機能付き積和演算器 |
EP2267896A3 (en) * | 1999-05-12 | 2013-02-20 | Analog Devices, Inc. | Method for implementing finite impulse response filters |
US6678810B1 (en) | 1999-12-30 | 2004-01-13 | Intel Corporation | MFENCE and LFENCE micro-architectural implementation method and system |
US6671795B1 (en) | 2000-01-21 | 2003-12-30 | Intel Corporation | Method and apparatus for pausing execution in a processor or the like |
US7039906B1 (en) * | 2000-09-29 | 2006-05-02 | International Business Machines Corporation | Compiler for enabling multiple signed independent data elements per register |
US7711763B2 (en) | 2001-02-21 | 2010-05-04 | Mips Technologies, Inc. | Microprocessor instructions for performing polynomial arithmetic operations |
US7162621B2 (en) | 2001-02-21 | 2007-01-09 | Mips Technologies, Inc. | Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration |
US7818356B2 (en) | 2001-10-29 | 2010-10-19 | Intel Corporation | Bitstream buffer manipulation with a SIMD merge instruction |
US20040054877A1 (en) | 2001-10-29 | 2004-03-18 | Macy William W. | Method and apparatus for shuffling data |
US7685212B2 (en) | 2001-10-29 | 2010-03-23 | Intel Corporation | Fast full search motion estimation with SIMD merge instruction |
US7739319B2 (en) | 2001-10-29 | 2010-06-15 | Intel Corporation | Method and apparatus for parallel table lookup using SIMD instructions |
JP3857614B2 (ja) | 2002-06-03 | 2006-12-13 | 松下電器産業株式会社 | プロセッサ |
WO2004015563A1 (en) | 2002-08-09 | 2004-02-19 | Intel Corporation | Multimedia coprocessor control mechanism including alignment or broadcast instructions |
US6986023B2 (en) * | 2002-08-09 | 2006-01-10 | Intel Corporation | Conditional execution of coprocessor instruction based on main processor arithmetic flags |
US7392368B2 (en) | 2002-08-09 | 2008-06-24 | Marvell International Ltd. | Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements |
US7293056B2 (en) * | 2002-12-18 | 2007-11-06 | Intel Corporation | Variable width, at least six-way addition/accumulation instructions |
US7139900B2 (en) | 2003-06-23 | 2006-11-21 | Intel Corporation | Data packet arithmetic logic devices and methods |
US7424501B2 (en) | 2003-06-30 | 2008-09-09 | Intel Corporation | Nonlinear filtering and deblocking applications utilizing SIMD sign and absolute value operations |
US7426749B2 (en) * | 2004-01-20 | 2008-09-16 | International Business Machines Corporation | Distributed computation in untrusted computing environments using distractive computational units |
US20060101244A1 (en) * | 2004-11-10 | 2006-05-11 | Nvidia Corporation | Multipurpose functional unit with combined integer and floating-point multiply-add pipeline |
US8024551B2 (en) * | 2005-10-26 | 2011-09-20 | Analog Devices, Inc. | Pipelined digital signal processor |
US8127117B2 (en) * | 2006-05-10 | 2012-02-28 | Qualcomm Incorporated | Method and system to combine corresponding half word units from multiple register units within a microprocessor |
US20080071851A1 (en) * | 2006-09-20 | 2008-03-20 | Ronen Zohar | Instruction and logic for performing a dot-product operation |
US7958181B2 (en) | 2006-09-21 | 2011-06-07 | Intel Corporation | Method and apparatus for performing logical compare operations |
US9069547B2 (en) | 2006-09-22 | 2015-06-30 | Intel Corporation | Instruction and logic for processing text strings |
CN100461095C (zh) * | 2007-11-20 | 2009-02-11 | 浙江大学 | 一种支持多模式的媒体增强流水线乘法单元设计方法 |
CN101685388B (zh) * | 2008-09-28 | 2013-08-07 | 北京大学深圳研究生院 | 执行比较运算的方法和装置 |
US9747105B2 (en) * | 2009-12-17 | 2017-08-29 | Intel Corporation | Method and apparatus for performing a shift and exclusive or operation in a single instruction |
US8504807B2 (en) | 2009-12-26 | 2013-08-06 | Intel Corporation | Rotate instructions that complete execution without reading carry flag |
US8604946B2 (en) * | 2011-04-08 | 2013-12-10 | Panasonic Corporation | Data processing device and data processing method |
CN104025024B (zh) * | 2011-12-22 | 2018-07-17 | 英特尔公司 | 打包数据操作掩码移位处理器、方法及系统 |
WO2013095610A1 (en) * | 2011-12-23 | 2013-06-27 | Intel Corporation | Apparatus and method for shuffling floating point or integer values |
WO2013095642A1 (en) * | 2011-12-23 | 2013-06-27 | Intel Corporation | Systems, apparatuses, and methods for setting an output mask in a destination writemask register from a source write mask register using an input writemask and immediate |
CN104011652B (zh) | 2011-12-30 | 2017-10-27 | 英特尔公司 | 打包选择处理器、方法、系统和指令 |
US9122475B2 (en) * | 2012-09-28 | 2015-09-01 | Intel Corporation | Instruction for shifting bits left with pulling ones into less significant bits |
US20140281418A1 (en) * | 2013-03-14 | 2014-09-18 | Shihjong J. Kuo | Multiple Data Element-To-Multiple Data Element Comparison Processors, Methods, Systems, and Instructions |
US9990202B2 (en) | 2013-06-28 | 2018-06-05 | Intel Corporation | Packed data element predication processors, methods, systems, and instructions |
US9405539B2 (en) * | 2013-07-31 | 2016-08-02 | Intel Corporation | Providing vector sub-byte decompression functionality |
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 |
US20150227366A1 (en) * | 2014-02-12 | 2015-08-13 | Imagination Technologies Limited | Processor with granular add immediates capability & methods |
US10068652B2 (en) * | 2014-09-03 | 2018-09-04 | Micron Technology, Inc. | Apparatuses and methods for determining population count |
US9891913B2 (en) * | 2014-12-23 | 2018-02-13 | Intel Corporation | Method and apparatus for performing conflict detection using vector comparison operations |
CN104778147B (zh) * | 2015-04-14 | 2017-06-06 | 飞天诚信科技股份有限公司 | 一种基于协处理器的数据处理方法 |
US11204764B2 (en) * | 2016-03-31 | 2021-12-21 | Intel Corporation | Processors, methods, systems, and instructions to Partition a source packed data into lanes |
CN107766079B (zh) * | 2016-08-19 | 2022-03-11 | 北京百度网讯科技有限公司 | 处理器以及用于在处理器上执行指令的方法 |
US10296292B2 (en) * | 2016-10-20 | 2019-05-21 | Advanced Micro Devices, Inc. | Dynamic variable precision computation |
US10409603B2 (en) * | 2016-12-30 | 2019-09-10 | Intel Corporation | Processors, methods, systems, and instructions to check and store indications of whether memory addresses are in persistent memory |
US10162633B2 (en) * | 2017-04-24 | 2018-12-25 | Arm Limited | Shift instruction |
CN107145334B (zh) * | 2017-04-26 | 2020-10-09 | 龙芯中科技术有限公司 | 常量获取方法、装置、处理器及计算机可读存储介质 |
CN109388427A (zh) * | 2017-08-11 | 2019-02-26 | 龙芯中科技术有限公司 | 向量处理方法、向量处理单元和微处理器 |
CN107861709B (zh) * | 2017-12-01 | 2021-04-02 | 中国兵器装备集团自动化研究所 | 适应前端高速处理的累加器和功率谱累加器及其累加方法 |
CN108595149B (zh) * | 2018-04-28 | 2021-05-04 | 天津芯海创科技有限公司 | 可重构乘加运算装置 |
CN110554886B (zh) * | 2018-05-30 | 2021-12-10 | 赛灵思公司 | 数据拆分结构、方法及其片上实现 |
JP7052874B2 (ja) * | 2018-08-22 | 2022-04-12 | 日本電気株式会社 | 情報処理装置、情報処理方法及びプログラム |
CN109783054B (zh) * | 2018-12-20 | 2021-03-09 | 中国科学院计算技术研究所 | 一种rsfq fft处理器的蝶形运算处理方法及系统 |
CN110221807B (zh) * | 2019-06-06 | 2021-08-03 | 龙芯中科(合肥)技术有限公司 | 数据移位方法、装置、设备及计算机可读存储介质 |
CN111258538B (zh) * | 2020-01-13 | 2023-07-21 | 电子科技大学 | 一种基于fpga的大位宽高性能加法器电路 |
CN112230886B (zh) * | 2020-09-11 | 2022-11-08 | 清华大学 | 免除Toom-Cook的处理装置和基于其的模乘获取方法 |
CN112181354B (zh) * | 2020-10-12 | 2021-08-10 | 上海芯旺微电子技术有限公司 | 一种移位饱和同步处理的方法及其应用 |
CN112181355B (zh) * | 2020-10-12 | 2021-08-06 | 上海芯旺微电子技术有限公司 | 一种移位饱和处理方法及其应用 |
US20230297371A1 (en) * | 2022-03-15 | 2023-09-21 | Intel Corporation | Fused multiple multiplication and addition-subtraction instruction set |
Family Cites Families (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
SE310008B (ja) * | 1965-06-30 | 1969-04-14 | Ericsson Telefon Ab L M | |
JPS5955546A (ja) * | 1982-09-24 | 1984-03-30 | Fujitsu Ltd | フア−ムウエア処理装置 |
JPS60134974A (ja) * | 1983-12-23 | 1985-07-18 | Hitachi Ltd | ベクトル処理装置 |
JPS6284335A (ja) * | 1985-10-09 | 1987-04-17 | Hitachi Ltd | 乗算回路 |
JPS6297060A (ja) * | 1985-10-23 | 1987-05-06 | Mitsubishi Electric Corp | デイジタルシグナルプロセツサ |
JP2634609B2 (ja) * | 1987-10-16 | 1997-07-30 | 富士通テン株式会社 | データ転送装置 |
US4985848A (en) * | 1987-09-14 | 1991-01-15 | Visual Information Technologies, Inc. | High speed image processing system using separate data processor and address generator |
US4933847A (en) * | 1987-11-17 | 1990-06-12 | International Business Machines Corporation | Microcode branch based upon operand length and alignment |
US5126964A (en) * | 1988-04-01 | 1992-06-30 | Digital Equipment Corporation | High performance bit-sliced multiplier circuit |
DE3886739D1 (de) * | 1988-06-02 | 1994-02-10 | Itt Ind Gmbh Deutsche | Einrichtung zur digitalen Signalverarbeitung. |
US5073969A (en) * | 1988-08-01 | 1991-12-17 | Intel Corporation | Microprocessor bus interface unit which changes scheduled data transfer indications upon sensing change in enable signals before receiving ready signal |
CA1311063C (en) * | 1988-12-16 | 1992-12-01 | Tokumichi Murakami | Digital signal processor |
US5047973A (en) * | 1989-04-26 | 1991-09-10 | Texas Instruments Incorporated | High speed numerical processor for performing a plurality of numeric functions |
US5001662A (en) * | 1989-04-28 | 1991-03-19 | Apple Computer, Inc. | Method and apparatus for multi-gauge computation |
JP2984463B2 (ja) * | 1991-06-24 | 1999-11-29 | 株式会社日立製作所 | マイクロコンピュータ |
CA2073516A1 (en) * | 1991-11-27 | 1993-05-28 | Peter Michael Kogge | Dynamic multi-mode parallel processor array architecture computer system |
US5257214A (en) * | 1992-06-16 | 1993-10-26 | Hewlett-Packard Company | Qualification of register file write enables using self-timed floating point exception flags |
US5263125A (en) * | 1992-06-17 | 1993-11-16 | Motorola, Inc. | Circuit and method for evaluating fuzzy logic rules |
US5295229A (en) * | 1992-06-17 | 1994-03-15 | Motorola, Inc. | Circuit and method for determining membership in a set during a fuzzy logic operation |
EP0581986A1 (de) * | 1992-08-04 | 1994-02-09 | Siemens Nixdorf Informationssysteme Aktiengesellschaft | Datenverarbeitungsanlage mit Verarbeitung von Aufbereitungsbefehlen |
JPH0682269A (ja) * | 1992-09-03 | 1994-03-22 | Matsushita Electric Ind Co Ltd | エンコーダ信号逓倍回路 |
US5268855A (en) * | 1992-09-14 | 1993-12-07 | Hewlett-Packard Company | Common format for encoding both single and double precision floating point numbers |
US5375080A (en) * | 1992-12-18 | 1994-12-20 | Xerox Corporation | Performing arithmetic on composite operands to obtain a binary outcome for each multi-bit component |
US5717616A (en) * | 1993-02-19 | 1998-02-10 | Hewlett-Packard Company | Computer hardware instruction and method for computing population counts |
US5717947A (en) * | 1993-03-31 | 1998-02-10 | Motorola, Inc. | Data processing system and method thereof |
EP0654733B1 (en) * | 1993-11-23 | 2000-05-24 | Hewlett-Packard Company | Parallel data processing in a single processor |
US5442581A (en) * | 1993-11-30 | 1995-08-15 | Texas Instruments Incorporated | Iterative division apparatus, system and method forming plural quotient bits per iteration |
CN1099081C (zh) * | 1994-01-29 | 2003-01-15 | 世嘉企业股份有限公司 | 信息处理装置 |
GB2287333B (en) * | 1994-03-11 | 1998-02-11 | Advanced Risc Mach Ltd | Data processing multiplier |
US5557734A (en) * | 1994-06-17 | 1996-09-17 | Applied Intelligent Systems, Inc. | Cache burst architecture for parallel processing, such as for image processing |
JP3579087B2 (ja) * | 1994-07-08 | 2004-10-20 | 株式会社日立製作所 | 演算器およびマイクロプロセッサ |
CN101794212B (zh) * | 1995-08-31 | 2015-01-07 | 英特尔公司 | 控制移位分组数据的位校正的装置 |
-
1996
- 1996-07-17 CN CN200910171170.5A patent/CN101794212B/zh not_active Expired - Lifetime
- 1996-07-17 CN CN201210574889.5A patent/CN103092562B/zh not_active Expired - Lifetime
- 1996-07-17 CN CN201310066953.3A patent/CN103383639B/zh not_active Expired - Lifetime
- 1996-07-17 CN CNB961978392A patent/CN1149469C/zh not_active Expired - Lifetime
- 1996-07-17 CN CNB031224288A patent/CN1252587C/zh not_active Expired - Lifetime
- 1996-07-17 CN CN201210059426.5A patent/CN102707922B/zh not_active Expired - Lifetime
- 1996-07-17 CN CN03132844XA patent/CN1534458B/zh not_active Expired - Lifetime
- 1996-07-17 CN CN2006101014596A patent/CN1892589B/zh not_active Expired - Lifetime
- 1996-07-17 CN CNB031328458A patent/CN100380312C/zh not_active Expired - Lifetime
- 1996-07-17 CN CN201210576549.6A patent/CN103092564B/zh not_active Expired - Lifetime
- 1996-07-17 BR BRPI9612911-5A patent/BR9612911B1/pt not_active IP Right Cessation
- 1996-07-17 CN CNB031522289A patent/CN1264085C/zh not_active Expired - Lifetime
- 1996-07-17 CN CN201210574863.0A patent/CN103064651B/zh not_active Expired - Lifetime
- 1996-07-17 CN CN201210575024.0A patent/CN103064652B/zh not_active Expired - Lifetime
- 1996-07-17 CN CN201210574965.2A patent/CN103092563B/zh not_active Expired - Lifetime
- 1996-07-17 EP EP96926742A patent/EP0847551B1/en not_active Expired - Lifetime
- 1996-07-17 CN CN201210574820.2A patent/CN103064650B/zh not_active Expired - Lifetime
- 1996-07-17 CN CN201010623140.6A patent/CN102073475B/zh not_active Expired - Lifetime
- 1996-07-17 EP EP06011060A patent/EP1693742A3/en not_active Withdrawn
- 1996-07-17 WO PCT/US1996/011893 patent/WO1997008608A1/en not_active Application Discontinuation
- 1996-07-17 BR BR9610095A patent/BR9610095A/pt not_active Application Discontinuation
- 1996-07-17 CN CN201310087232.0A patent/CN103455304B/zh not_active Expired - Lifetime
- 1996-07-17 CN CN201210548871.8A patent/CN103345380B/zh not_active Expired - Lifetime
- 1996-07-17 CN CN200910265998.7A patent/CN101794213B/zh not_active Expired - Lifetime
- 1996-07-17 CN CN201210576603.7A patent/CN103064653B/zh not_active Expired - Lifetime
- 1996-07-17 CN CN201210548546.1A patent/CN103064649B/zh not_active Expired - Lifetime
- 1996-07-17 KR KR1019980701541A patent/KR19990044304A/ko not_active Application Discontinuation
- 1996-07-17 JP JP51025297A patent/JP3711147B2/ja not_active Expired - Lifetime
- 1996-07-17 AU AU66778/96A patent/AU6677896A/en not_active Abandoned
- 1996-07-17 CN CN201010194848.4A patent/CN101930352B/zh not_active Expired - Lifetime
- 1996-10-21 TW TW085112876A patent/TW310406B/zh not_active IP Right Cessation
-
2002
- 2002-12-16 CN CNB021593795A patent/CN1225688C/zh not_active Expired - Lifetime
-
2007
- 2007-05-18 HK HK07105278.5A patent/HK1099095A1/xx not_active IP Right Cessation
-
2010
- 2010-12-13 HK HK10111583.8A patent/HK1144974A1/xx not_active IP Right Cessation
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3711147B2 (ja) | パック・データを処理する1組の命令 | |
JP4064989B2 (ja) | パック・データの乗加算演算を実行する装置 | |
US8725787B2 (en) | Processor for performing multiply-add operations on packed data | |
US5859997A (en) | Method for performing multiply-substrate operations on packed data | |
US7395298B2 (en) | Method and apparatus for performing multiply-add operations on packed data | |
US7430578B2 (en) | Method and apparatus for performing multiply-add operations on packed byte data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20041130 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20050228 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20050411 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050530 |
|
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: 20050712 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050812 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090819 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100819 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110819 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110819 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120819 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130819 Year of fee payment: 8 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |