JP2004511051A - レジスタあたり複数の符号付き独立データ要素の処理を可能にする装置、方法、およびコンパイラ - Google Patents
レジスタあたり複数の符号付き独立データ要素の処理を可能にする装置、方法、およびコンパイラ Download PDFInfo
- Publication number
- JP2004511051A JP2004511051A JP2002533222A JP2002533222A JP2004511051A JP 2004511051 A JP2004511051 A JP 2004511051A JP 2002533222 A JP2002533222 A JP 2002533222A JP 2002533222 A JP2002533222 A JP 2002533222A JP 2004511051 A JP2004511051 A JP 2004511051A
- Authority
- JP
- Japan
- Prior art keywords
- register
- elements
- data
- processor
- compiler
- 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.)
- Granted
Links
- 238000012545 processing Methods 0.000 title claims abstract description 65
- 238000000034 method Methods 0.000 title claims abstract description 47
- 230000008569 process Effects 0.000 claims abstract description 21
- 238000012856 packing Methods 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 9
- 238000004422 calculation algorithm Methods 0.000 claims description 8
- 238000003860 storage Methods 0.000 claims description 5
- 238000010200 validation analysis Methods 0.000 claims 2
- 230000006378 damage Effects 0.000 claims 1
- 230000006798 recombination Effects 0.000 claims 1
- 238000005215 recombination Methods 0.000 claims 1
- 230000011664 signaling Effects 0.000 claims 1
- 238000010586 diagram Methods 0.000 abstract description 6
- 229910003460 diamond Inorganic materials 0.000 description 25
- 239000010432 diamond Substances 0.000 description 25
- 238000012360 testing method Methods 0.000 description 9
- 230000008901 benefit Effects 0.000 description 5
- 230000000295 complement effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 229910052799 carbon Inorganic materials 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000000873 masking effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
-
- 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
- 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
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/441—Register allocation; Assignment of physical memory space to logical memory space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- 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/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
- 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/3816—Accepting numbers of variable word length
-
- 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
Abstract
【解決手段】データ処理のシステムに、本明細書に記載の規則(44)を使用して、レジスタごとに複数の符号付きデータ要素をプロセッサのレジスタにパックすることと、同一のオペランドを使用して単一サイクルでレジスタ内の要素を同時に操作すること(36)が含まれる。要素は、コンパイラ・ディレクティブによる定義どおりに互いに独立にすることができ、レジスタ内の要素のサイズを、互いに異なるものとすることができる。比較的大きい要素を、複数のレジスタにまたがって分割することができる。2つのイメージを表すデータ・ストリームを、単一のイメージの処理に必要な数と同数のレジスタを使用して同時に処理することができる。単一のイメージを、N倍に近い速さで処理することもでき、このNは、レジスタあたりの要素の数である。
【選択図】図1
Description
【発明の属する技術分野】
本発明は、コンピュータ・レジスタ内でデータを並列に処理するシステム、方法、およびコンパイラに関する。
【0002】
【従来の技術】
コンピュータ・プロセッサは、コンピュータ・プログラムによって供給される命令に従って、さまざまなレジスタを介してデータ要素を処理することによって機能する。レジスタは、2のべきの容量を有する。たとえば、レジスタは、8ビットの容量を有することができ、単一の処理サイクルに、要素内に8ビットまでを有するデータ要素を処理することができる。1例として、8ビット・レジスタは、単一のサイクルで4ビット・データ要素を処理することができる。もちろん、レジスタは、通常は、8ビットより大きいサイズを有する、すなわち、レジスタは、16ビット、32ビット、または64ビットなどの容量を有することができる。レジスタによって行われる動作のタイプの非制限的な例示的な例には、定数による乗算、加算、減算、論理左シフト、論理右シフト、AND、およびOR演算が含まれる。
【0003】
データ要素を処理した後に、そのデータ要素を、さらなる処理のために別のレジスタに送ることができ、あるいは、保管するか出力することができる。例を示すと、プリンタの分野で、サーバ・マイクロプロセッサが、コンピュータ・プログラムに従って、そのさまざまなレジスタを介して入力データ・ストリームを処理し、いわゆるJPEGフォーマットの圧縮イメージ・データのデータ・ストリームをプリンタ・プロセッサに出力することができ、このプリンタ・プロセッサが、適当にデータを操作して、イメージを印刷する方法をプリンタ装置に指示する。
【0004】
プロセッサ自体は、機械語の形の命令を実行し、機械語は、どのレジスタを介してどのデータ要素を処理するかに関する低水準命令である。しかし、ほとんどのソフトウェアが、Cなどの高水準プログラミング・コードで記述され、高水準プログラミング・コードは、人間可読であり、比較的短いすばやく記述されるコマンドを使用して比較的複雑な処理動作を実施するという長所を有する。コンパイラは、高水準プログラミング・コードを受け取り、多数の選択肢の中から、それをアセンブリ言語にマッピングする最適の形を判断し、マッピングをアセンブラに渡し、アセンブラが、アセンブリ言語を、プロセッサによって可読のいわゆる機械語にマッピングする。高水準言語は、たとえば、拡張またはマクロを伴う、CまたはC++プログラミング言語とすることができ、低水準言語は、拡張またはマクロの一部を解釈され、除去されたCとすることができる。あるいは、低水準言語を、機械語またはアセンブリ言語とすることができる。時々、プログラマは、プログラムのうちで他の部分より頻繁に実行される部分を、低水準言語で直接に記述することを選択する場合がある。記述が面倒ではあるが、これらの、コードのいわゆる「手細工の」部分は、高水準言語コンパイラによって変換される必要がなく、したがって、ランタイムのより高速の処理が容易になる。
【0005】
しかし、プロセッサが、機械コードをコンパイラからまたは手細工のプログラムから直接に受け取るかに無関係に、本発明では、しばしばレジスタ空間が浪費されているというクリティカルな観察を行う。具体的に言うと、上で示したように、レジスタが、すべての処理サイクルにその全容量まで使用されない可能性がある。たとえば、16ビット容量のレジスタが、4ビット・データ要素の処理に使用される時に、1サイクルあたりレジスタの12ビットが浪費される。これによって、処理時間が遅くなり、追加のデータ・キャッシング要件(および付随するキャッシュ・ミスの問題)が生じ、一般に、プロセッサ機能を完全に活用することができない。したがって、本発明では、単一サイクルに1レジスタ内で複数のデータ要素が処理される場合に有効になるはずのプロセッサ性能の潜在的な改良が認識されている。
【0006】
本発明では、さらに、特に、正の値だけではなく、正と負の両方(すなわち「符号付き」)の値が処理される場合に、処理中にレジスタ容量を超えるかデータを破壊するかあるいはその両方の可能性のために、上の認識を実施することが自明ではないことが理解されている。言い換えると、本発明で使用される時の「符号付き」データ要素は、非負になるように制限されないデータ要素であり、複数の符号付きデータ要素を単一のレジスタを介して単一の処理サイクルに処理することが望ましい。さらに、本発明では、堅牢さのために、プロセッサが、レジスタごとに所定のビット・サイズだけの複数のデータ要素を受け入れるように製造業者によって制限されるのではなく、特定のアプリケーションで指示される可能性があるので、プログラマが、レジスタが受け入れることができるさまざまなデータ要素ビット・サイズを定義できる柔軟性を有することが望ましいことが理解されている。上に記した観察が行われたので、本発明では、本明細書に記載の解決策を提供する。
【0007】
さらに、本発明では、コンパイラを使用して上の認識を実施できることが理解されている。
【0008】
【発明が解決しようとする課題】
【0009】
【課題を解決するための手段】
本明細書の発明的ステップに従って汎用コンピュータをプログラムして、複数のマルチビット符号付きデータ要素の単一レジスタでの使用を可能にする。本発明は、コンピュータなどのディジタル処理装置によって使用され、本発明の論理を実行するためにディジタル処理装置によって実行可能な命令のプログラムを有形に実施する、製造品(機械構成要素)として実施することもできる。本発明は、ディジタル処理装置に本明細書の発明的方法ステップを実行させるクリティカルな機械構成要素で実現される。
【0010】
したがって、汎用コンピュータに、少なくとも第1レジスタ内で少なくとも第1および第2の符号付きマルチビット・データ要素を確立するために方法動作を行う論理が含まれる。この論理は、複数の要素を同時に処理する。
【0011】
望まれる場合に、要素を互いに独立にすることができる。第1要素を第1データ・セットから供給することができ、第2要素を第2データ・セットから供給することができ、あるいは、両方の要素を同一のデータ・セットの異なる部分から供給することができる。レジスタ自体は、加算器、乗算器、またはシフタを含むがこれに制限されない計算サブシステムに内容を渡すことができ、データ要素に対して同時に実行される動作は、定数または既知の精度の変数による乗算、加算、または論理左シフトとすることができるが、これに制限はされない。
【0012】
さらに、より大きいデータ要素をレジスタの間で分割し、処理の後に再結合することができる。すなわち、第1要素を、第2レジスタ内で確立される関連する第2部分要素を有する第1部分要素とすることができ、第1および第2の部分要素が、処理の後に結合される。
【0013】
以下でさらに示すように、データ要素によって表現できる最大の負の数が、それぞれの精度で表現できる最大の負の数より1つ大きくなるように、それぞれの精度が、単一サイクル中にレジスタ内で処理されるデータ要素ごとにレジスタ内で割り振られる。これには、[−2N−1+1]から[+2N−1−1]までに基づくデータ要素の精度限界の判定を含めることができ、このNは、データ要素のビット数である。
【0014】
さらに、好ましい実施形態では、実行の前に、論理によって、所望の精度を達成するために乗算定数に必要な正味のビット数が判定される。その後、正味のビット数および乗算定数を使用して、精度の正味のビット数が判定される。レジスタ内の空間が、精度判定に従って割り振られる。
【0015】
レジスタごとに複数の符号付きデータ要素の空間を割り振ることによってレジスタをセットアップしたならば、精度の正味のビット数に従って複数のデータ要素を個々のレジスタにパックすることによって、データ要素の処理を実行する。各レジスタのすべてのデータ要素が、同一のオペランドを使用して同時に操作される。その後、データ要素が、さらなる処理、保管、または出力のために渡される。
【0016】
1つのレジスタ内の第1および第2のデータ要素が、互いに独立にされる時に、この論理では、第1要素の符号ビットを第2要素の最下位ビットに加える。代替案では、この論理によって実施される方法に、第1および第2の要素の符号ビットをマスクすることと、符号ビットをレジスタに加算することと、各要素の符号ビットの位置の値を破棄することが含まれる。
【0017】
さらに、以下でさらに示すように、データ要素が0付近に含まれるかどうかを判定することができる。また、第1レジスタ内で、第2レジスタにパックされたデータ要素の符号ビットを保存し、その後、算術右シフトを行うことに従うデータ要素からシフト・アウトされる少なくとも1つの最下位ビットを0にすることによって、算術右シフトを実行することができる。第1レジスタ内の符号ビットが、第2レジスタ内のデータ要素に復元される。さらに、算術等価性を、単一の処理サイクル中に単一のレジスタ内の少なくとも2つのデータ要素に対して確認することができる。一般に、算術比較は、1要素ごとに1サイクルで行うことができる。
【0018】
もう1つの態様では、コンピュータ・プログラム装置に、ディジタル処理装置によって読み取ることができるコンピュータ・プログラム・ストレージ・デバイスが含まれる。プログラムは、プログラム・ストレージ・デバイス上にあり、プログラムには、マルチビット符号付きデータ要素を処理する方法動作を実行するためにディジタル処理装置によって実行可能な命令が含まれる。プログラムには、少なくとも第1および第2のデータ要素を単一のレジスタにパックするコンピュータ可読コード手段が含まれる。コンピュータ可読コード手段は、要素を同時に処理する。
【0019】
もう1つの態様では、プロセッサに、少なくとも第1および第2のレジスタが含まれる。少なくとも第1および第2の符号付きマルチビット・データ要素が、第1レジスタ内にあり、プロセッサが、1つのオペランドを使用して第1および第2のデータ要素に対して同時に動作する。
【0020】
もう1つの態様では、コンピュータ実施される方法に、第1プログラムに関して、それぞれの第1および第2の符号付きデータ要素を保持するために単一のレジスタ内で割り振られる第1および第2の精度を判定することが含まれる。要素は、レジスタにパックされ、その後、操作される。第2のプログラムに関して、それぞれの第3および第4の符号付きデータ要素を保持するために単一のレジスタ内で割り振られる第3および第4の精度が判定される。第1および第3の精度または第2および第4の精度もしくはその両方を、互いに異なるものとすることができる。第3および第4の要素は、レジスタにパックされ、操作される。
【0021】
したがって、汎用コンピュータに、高水準コードを受け取り、低水準コードを出力して、プロセッサが単一レジスタ内の複数のマルチビット・データ要素を同時に処理できるようにするコンパイラが含まれる。コンパイラによって出力される低水準コードの論理には、少なくとも第1レジスタ内で少なくとも第1および第2の符号付きマルチビット・データ要素を確立することと、要素を同時に処理することが含まれる。これらのパックされた要素の精度によって、そのパッキング構成が決定される。この開示では、「入力精度」が、同時演算の前の個々のデータ要素の初期精度を指すのに使用され、「出力精度」が、同時演算が完了する前の個々のデータ要素の最終的な最大精度を指すのに使用される。
【0022】
好ましい実施形態では、データをパックする命令および同時演算の命令を生成する前に、コンパイラが、フラグまたは構成状態にアクセスして、出力精度がプログラマまたはコンパイラのどちらによって入力精度から計算されるかを決定することができる。プログラマによって決定される場合に、出力精度を、コンパイラ・ディレクティブによって、変数定義によって、または構成ファイルによってコンパイラに指定することができる。対照的に、出力精度がコンパイラによって入力精度から決定される時には、コンパイラが、データに対して実行される演算の数およびタイプをカウントし、加算または減算のそれぞれについて1ビットだけ入力精度を増やし、乗算演算に対応するのに十分なビット数だけ入力精度を増やし、データ要素によって表現することができる最大の大きさの負の数が、出力精度で表現することができる最大の負の数より1つ大きいことを保証するのに必要な時に、1ビットだけ入力精度を増やす。
【0023】
コンパイラは、実行されるプログラムの必要によって要求される場合に、処理後に要素が互いに独立になるようにするための動作を行うコードも生成する。これを行うために、コンパイラは、コンパイラ・ディレクティブまたは特定の高水準言語(HLL)構文にアクセスして、要素を互いに独立にするかどうかすなわち、要素をアンパックする時を判断する。
【0024】
もう1つの態様では、コンピュータ・プログラム・デバイスに、ディジタル処理装置によって読み取ることができるコンピュータ・プログラム・ストレージ・デバイスが含まれる。コンパイラ・プログラムは、プログラム・ストレージ・デバイス上にある。コンパイラ・プログラムには、マルチビット符号付きデータ要素を処理するためにディジタル処理装置によって実行可能な低水準コードを生成する命令が含まれる。コンパイラ・プログラムには、少なくとも第1および第2のデータ要素を単一のレジスタにパックする低水準コードを出力するコンピュータ可読コード手段が含まれる。また、コンパイラ・プログラムに、要素を同時に処理する低水準コードを出力するコンピュータ可読コード手段が含まれる。
【0025】
もう1つの態様では、方法に、コンパイラ用の少なくとも1つのコンパイラ・ディレクティブを定義することが含まれる。このコンパイラ・ディレクティブによって、少なくとも、データ要素の初期精度、共通のレジスタにパックされ、互いに同時にアルゴリズムによって操作されるるそれぞれのデータ要素の複数のデータ・ソース、またはコンパイラによって読み取られるコードの所定の部分をコンパイルしない命令が含まれる。
【0026】
構造および動作に関する本発明の詳細は、添付図面を参照して最もよく理解することができ、図面では、類似する符号が類似する部分を指す。
【0027】
【発明の実施の形態】
まず図1から3を参照すると、全般的に符号10によって示される、プロセッサの単一レジスタごとに複数の符号付き独立マルチビット・データ要素の同時処理を可能にするシステムが示されている。図1から3には、本発明によって提供される処理効率を活用できるさまざまな非制限的な形が示されている。たとえば、図1では、ソフトウェア実施されるコンパイラ11にアクセスできるサーバ・マイクロプロセッサ12が、たとえばイメージを表す「TIFF」フォーマットで、単一ソース入力データ・ストリームを受け取り、このプロセッサが、本発明の利益なしの場合より「m」倍高速にデータ・ストリームを処理して、たとえばJPEGフォーマットの圧縮イメージ・データを出力するが、この「m」は、レジスタごとの毎秒のデータ要素に関して以下でさらに定義される。JPEGデータが、プリンタ・マイクロプロセッサ14に送られ、プリンタ・マイクロプロセッサ14は、プリンタ装置16に、イメージを印刷するように指示する。本発明が、イメージ・データだけではなくすべてのタイプのデータに全般的に適用されることと、本発明が、単一プロセッサ・システムまたは複数プロセッサ・システムに適用されることを理解されたい。たとえば、本発明は、データ通信および処理、音声圧縮、誤り訂正コーディング、複数チャネル分解などに適用される。以下で、より少数のプロセッサを使用して並列処理を実行することができるので、コスト/電力/サイズ/重量を減らすことができる。
【0028】
図1および2に、コンパイラ11にアクセスできるサーバ・マイクロプロセッサを示す。このコンパイラが、他の場所に存在することができ、最終的な機械でのみ、実行のためにマイクロプロセッサにコードをロードする必要があることを理解されたい。図2に、システム10の利点をさらに活用して、サーバ・マイクロプロセッサが、第1および第2のデータ・ソースからの2つの独立のデータ・ストリームを同時に処理して、それぞれの第1および第2の出力ストリームを単一のプリンタ・マイクロプロセッサ18またはそれぞれの第1および第2のプリンタ・マイクロプロセッサ18および20に出力できることを示す。各プリンタ・マイクロプロセッサ18および20が、それ自体のプリンタ装置(図2には装置22だけを図示)を制御することができ、あるいは、単一のプリンタ・マイクロプロセッサが、2つのプリンタ装置を制御することができる。どの場合でも、異なるイメージ(異なるデータ・ストリームの例)または同一イメージ(データ・ストリーム)の異なる部分を、システム10によって同時に処理でき、処理コードの核を未変更のままにすることができる。
【0029】
図3に、マイクロプロセッサ12Aおよび14Aの間のネットワーク・リンク上の帯域幅を節約するために、パックされたイメージ・データ出力1および2を、サーバ・マイクロプロセッサ12Aから、データをアンパックするようにプログラムされたプリンタ・マイクロプロセッサ14Aに送ることができることを示す。この場合に、たとえば、データ出力1および2は、それぞれのプリンタ装置16Aのそれぞれのカラー・エンジンに送られる2つの色成分とすることができる。
【0030】
1つの所期の実施形態では、プロセッサ12を、米国ニューヨーク州アーモンクのInternationalBusiness Machines Corporation(IBM)社によって製造されるパーソナル・コンピュータとすることができ、あるいは、プロセッサ12を、付随するIBM Network Stationsを伴うAS400などの商標の下で販売されるコンピュータを含む、任意のコンピュータとすることができる。あるいは、プロセッサ12を、Unix(R)サーバ、OS/2サーバ、Windows(R)NTサーバ、IBMワークステーション、またはIBMラップトップ・コンピュータとすることができる。さらに、本発明のレジスタを実施するプロセッサを、ディジタル信号プロセッサ(DSP)、特殊化されたハードウェア、処理サブシステムおよび演算論理装置(ALU)の標準ライブラリを中心として作られたチップとすることができる。用語「コンピュータ・レジスタ」は、本明細書では、これらのデータ処理ユニットのすべてのレジスタを指すのに使用される。
【0031】
本発明のアーキテクチャの上の概要を念頭において、本発明の論理が、以下で述べる流れ図に従って、図1に示されたアーキテクチャで実行されることを理解されたい。本明細書の流れ図は、コンピュータ・プログラム・ソフトウェアまたはプログラミング・ステップあるいはその両方で実施される本発明の論理の構造を示す。当業者は、これらの流れ図が、コンピュータ・プログラム・コード要素または電子論理回路など、本発明に従って機能する論理要素の構造を示すことを諒解するであろう。明らかに、本発明は、ディジタル処理装置(すなわちコンピュータ)に、示されるものに対応する機能ステップのシーケンスを実行するように指示する形の論理要素を翻訳する機械構成要素によってその本質的な実施形態で実行される。
【0032】
言い換えると、論理の諸部分を、一連のコンピュータ可読命令としてプロセッサ12によって実行されるコンパイラ・プログラム11によって実施することができる。これらの命令は、たとえば、プロセッサ12のRAM内、プロセッサ12のハード・ディスクまたは光ディスク・ドライブに常駐することができ、あるいは、命令を、DASDアレイ、磁気テープ、電子読取専用メモリ、または他の適当なデータ・ストレージ・デバイスに保管することができる。
【0033】
図4を参照すると、プロセッサ12のレジスタ24が、概略的に示されている。この例では、レジスタ24が、16ビット・レジスタであり、レジスタ24に、第1および第2のデータ要素26および28が含まれる。本明細書の図についてレジスタに関して使用される用語「左」および「右」は、図4の順序および表記と一致する形で使用される。最下位ビットおよび最上位ビットの代替レジスタ順序付けは、別の規則を必要とする。
【0034】
図4に示された例示的実施形態について、第1の(左端の)データ要素26に、2つのガード・ビットおよび8つのデータ・ビットが含まれ、したがって、データ要素26は、10の全体的な「精度」を有し、第2の(左から)データ要素28は、2つのガード・ビットと4つのデータ・ビットを有し、したがって、6の精度を有する。2の補数の計算を対象とする本発明によれば、左端のガード・ビットは、要素の符号を一意に記述するという点で、「符号ビット」である。
【0035】
本発明の原理によれば、レジスタ24を、「m」個のデータ要素を保持するのに十分に大きい任意のサイズとすることができ、データ要素は、同一サイズまたは異なるサイズとすることができることを理解されたい。したがって、本発明のレジスタは、2つの16ビット・データ要素を保持する32ビット・レジスタとすることができ、3つ以上のNビット要素を保持することができ、あるいは、4つの16ビット要素を保持する64ビット・レジスタとすることができる。どの場合でも、各データ要素26および28は、正または負のいずれかとすることができるマルチビット要素であり、したがって、「符号付き」要素であり、データ要素26および28のサイズは、プロセッサ12の製造中に単一の所定のサイズに制限されるのではなく、特定のアプリケーションに応じてプログラマによって定義可能である。さらに、レジスタ24が、要素をストアし、適当な時に、データ要素を、加算器、乗算器、またはシフタを含むがこれに制限されない計算サブシステムに送ることを理解されたい。
【0036】
図5に、開発の4段階が企図されていることを示す。本発明によれば、コンパイラ11は、論理を行うことができ、あるいは、原出願に開示されているように、論理の諸部分を人間のプログラマが行うことができる。第1ステップであるブロック30は、アルゴリズム設計であり、ここでは、検討中の特定のプロセスが、本発明に従うことができるかどうかを判定する。コンパイラ11によって行われる時に、以下で詳細に述べるブロック30のステップは、コンパイラ11が、Cなどの高水準コードを読み取り、それを低水準コードに変換する方法を決定することに対応する。
【0037】
ブロック32に示された第2段階は、プログラム初期設定であり、ここでは、レジスタでの本発明の実施の詳細が、コンパイラ11によって決定され、コンパイラ11が、適当な初期化コードを生成する。その後、レジスタ・セットアップが、ブロック33で行われ、ここで、コンパイラが、入力データをターゲット・プロセッサ・レジスタにパックするコードを生成する。第4段階は、ブロック34に示された実行であり、ここで、生成されたコードが、人間のオペレータ、自動スクリプト・プログラム、または生成されたコードを実行させる他の手段によって、ターゲット・プロセッサ上で実行される。これらの段階のすべてを、以下でさらに述べるが、ブロック32、33、および34は、本発明に従ってコンパイラ11が実際に高水準言語をアセンブリ言語にする方法を表す。上で注記したように、コンパイラは、代替案では、普通のコンパイラによってコンパイルできる普通の高水準言語命令を生成することができる。
【0038】
特に第1段階(アルゴリズム設計)に関して、図8を参照する。ブロック36から開始して、元のデータ要素のそれぞれによって指示される必要な精度に必要なビット数を判定する。その後、ブロック38で、操作されるデータ要素ごとに、その要素が受ける演算のそれぞれに必要になる可能性がある精度の追加ビット数を判定する。たとえば、2つの要素の加算によって、入力要素より1ビット大きい出力要素がもたらされる可能性がある。
【0039】
ブロック38から、論理は判断菱形40に移動し、ここで、ブロック38で割り振られた精度が最大の負の数の規則を満足するかどうかを判定する。「最大の負の数」は、最大の絶対値を有する負の数を意味する。具体的に言うと、判断菱形40で、データ要素によって表現できる最大の負の数が、それぞれの精度で表現できる最大の負の数、たとえばNビットによる2の補数表現で−2N−1より1つ大きいかどうかを判定する。そうでない場合には、ブロック42で、精度の追加ビットをその要素について割り振る。ブロック44で、要素の最適パックのために十分な空間が、レジスタ内で割り振られる、すなわち、最小量の未使用のレジスタ容量が達成されるように、他の要素と共にレジスタに同時に保持される使用可能なデータ要素を用いて、使用可能なレジスタを最も効率的に満たす方法を判定する。たとえば、最大で6つの追加演算を受ける8ビットの元のデータ要素について、その要素に割り当てられる精度は、(8+6)=14である。
【0040】
図7に、プログラム初期化論理を示す。判断菱形45.1で、等価性比較が行われるかどうかを判定する。そうである場合には、ブロック45.2で、等価性比較の項を要素位置合わせでパックする、すなわち、互いに比較される項が、それぞれのレジスタの同一のレジスタ位置にパックされる。図7の流れには、判断菱形45.3で、次に、範囲比較が行われるかどうかを判定し、そうである場合に、ブロック45.4でそのような比較のそれぞれの下限を判定することも示されている。その後、ブロック45.5で、下限項を、要素位置合わせでブロック45.5でパックする。ブロック45.5から、論理はブロック45.6に移って、比較の範囲をパックする。
【0041】
ブロック45.6から、またはテストが否定の時の判断菱形45.3から、論理は、判断菱形46.65に流れ、要素の符号位置を既知にする必要があるかどうかを判定する。そうである場合には、ブロック45.7で、以下でさらに述べるように符号ビット位置をマスクするためのマスクを生成する。ブロック45.7から、またはテストが否定の時の判断菱形46.65から、論理は判断菱形45.8にながれ、論理右シフト動作が事項されるかどうかを判定する。そうである場合には、ブロック45.9で、以下でさらに述べるようにシフトされたビット位置をクリアするマスクを生成する。
【0042】
特に第1段階(アルゴリズム設計)に関して、図6を参照すると、その最初の部分(ブロック39まで)は、人間のプログラマによって行われる論理を表す。ブロック35で開始して、コンパイルされるプログラムが、高水準言語で記述される。ブロック35.1で、プログラムのうちで、以下の開示によって「並列化」できる部分を識別する。ブロック35.2に移って、コンパイラ・ディレクティブをプログラムに挿入し、「並列化可能」部分を識別する。
【0043】
例として、以下で述べる図10から12に、たとえば複数の異なるイメージに対して同一のアルゴリズムを実行して並列に印刷するなど、複数の独立のデータ・ストリームに対する同時動作を提供するさまざまな実行論理を示す。そうである場合には、コンパイラ11は、アルゴリズム呼出し点およびアルゴリズム定義で、これが発生することを知らなければならず、コンパイラ・ディレクティブが、これをコンパイラ11に伝えるのに使用される。下記は、そのようなディレクティブの例である。
【0044】
インライン並列化可能計算は、同一の形で、たとえばコンパイラ・ディレクティブ内の指定によって、指定することができる。もう1つのコンパイラ・ディレクティブを定義して、コンパイラ11が、たとえばコードが既にプログラマによって「手細工」されている(機械語で)場合など、プログラマが最適化されないことを望むコードに対して並列化最適化論理を実行しないようにすることができる。ループに適用されるそのようなディレクティブの例を、下に示す。
【0045】
次に、ブロック36で、各元のデータ要素によって指示される必要な精度のために必要なビット数を判定する、すなわち、入力精度を、操作される要素ごとに判定する。判断菱形37で、コンパイラが出力精度を判定するかどうかを判定し、そうである場合に、ブロック38.4で、プログラマが、コンパイラ・ディレクティブを使用するか、適当な変数型を定義するか、構成ファイルを使用することによって、入力精度を指定する。以下に、例示的なコンパイラ・ディレクティブを示す。本明細書に示された例のすべてで、「C」プログラミング言語の構文が使用されるが、他のプログラミング言語への拡張は、当業者に明白であろう。拡張を行うことができる他のプログラミング言語には、FORTRAN、Pascal、Ada、およびJava(R)を含めることができるが、これに制限はされない。たとえば、コンパイラがサポートするディレクティブが、下に示された例示的構文を有する場合に、プログラマが、元の精度を定義するために次のようにコンパイラ・ディレクティブを記述して、9ビットの固定小数点変数を定義することができる。
あるいは、コンパイラが、次の例に示されるものなどの変数宣言構文をサポートする場合には、新しい整数型を「fixed (9)変数名」として定義することによって、同等に上のステップを行うことができる。上で述べたように、元の精度を定義する第3の形は、変数のスコープ、名前、および選択された値の精度を指定する構成ファイルをコンパイル時にインクルードすることである。
【0046】
その一方で、コンパイラ11が出力精度を判定しない場合には、プログラマがそれを行わなければならず、したがって、この場合には、論理が判断菱形37からブロック38に進む。ブロック38では、操作されるデータ要素ごとに、その要素が受ける演算のそれぞれに必要になる可能性がある精度の追加ビット数を判定する。たとえば、2つの要素を足し合わせることによって、入力要素より1ビット長い出力要素がもたらされる可能性がある。
【0047】
ブロック38から、論理は判断菱形38.1に移り、ブロック38で割り振られた精度が、最大の負の数の規則を満足するかどうかを判定する。「最大の負の数」は、最大の絶対値を有する負の数を意味する。具体的に言うと、判断菱形38.1で、データ要素によって表現できる最大の負の数が、それぞれの精度で表現できる最大の負の数、たとえばNビットの2の補数表現で−2N−1より1つ大きいかどうかを判定する。そうでない場合には、ブロック38.2で、その要素のために精度の追加のビットを割り振る。ブロック38.3で、結果の出力精度が、コンパイラ・ディレクティブ、変数型、または構成ファイルの形で指定される。
【0048】
出力精度がコンパイラによって決定される時に、このシステムは、プログラマが出力精度を決定する時よりプログラマ・エラーに対して堅牢であることをここで注記することが適当である。しかし、出力精度がプログラマによって決定される時に、コンパイラ11は、2つの選択肢を有する。まず、コンパイラは、精度のランタイム検査を実行する命令を生成して、アンダーフロー(おそらくは最大の大きさの負の数の出現を含む)およびオーバーフローが発生せず、発生した場合にはラップまたは飽和をもたらすことを保証することができる。その代わりに、コンパイラ11が、プログラマが十分な精度を正しく提供したと仮定することができ、これは、ランタイム検査より少ない実行サイクルを消費するという利点を有するが、レジスタ全体の内容を破壊する可能性がある、オーバーフローおよびアンダーフローを潜在的に許容するという短所を有する。したがって、本明細書で想像されるように、プログラマは、コンパイラに、実装を検証するためにランタイム検査を実行する命令を生成させるというより低速だがより堅牢な方法を使用することができ、その後、実行検証後の後続のコンパイル中にランタイム検査を無効にして、実行を高速化することができる。
【0049】
どの場合でも、ブロック38.3からの出力精度またはブロック38.4からの入力精度が、コンパイラ11に送られ、図5の残りは、コンパイラ11の論理を表す。ブロック39で、コンパイラ11が、上で述べたファイルを読み取る。ブロック39.1で、より上位のコードを分析するか、コンパイラ・ディレクティブを読み取ることによって、すべての並列化ディレクティブを識別する。判断菱形40に進んで、コンパイラ11は、出力精度を判定する(たとえば演算をカウントすることによって)必要があるかどうかを判定する。コンパイラは、コンパイラ・ディレクティブ、フラグ、または構成ファイルにアクセスすることによって、この判定を行う。テストが肯定である場合には、ブロック41.1で、並列に操作される要素の入力精度を読み取り、ブロック41.2で、コンパイラ11が、本質的に、状態38.1、38.2、および38.3に関して上で述べた論理を繰り返して、出力精度を生成する。逆に、コンパイラ11が要素の出力精度を判定しない場合には、これは、ブロック38.3からの出力精度が、ブロック41.3で読み取られることを意味する。
【0050】
ブロック42に進んで、並列に処理される変数をグループ化する。次に、ブロック43で、コンパイラ11が、要素の最適パックのためにレジスタ内で十分な空間を割り振る、すなわち、最小の量の未使用レジスタ容量が達成されるように、他の要素と共に1レジスタに同時に保持される使用可能なデータ要素を用いてターゲット・プロセッサの使用可能なレジスタを最も効率的に満たす方法を判定する。たとえば、最大6つの追加の演算を受ける8ビットの元のデータ要素の密なパックについて、その要素に割り振られる精度は、(8+6)=14になる。ブロック44.1で、以下で説明する「並列化」方法を実施する生成された命令にアクセスし、ブロック44.2で、プログラムの非並列化可能部分をコンパイル/変換する。ブロック44.3で、結果の低水準コードを、以下で説明するように要素を並列に処理するためのプロセッサでの実行のために出力する。
【0051】
図7に、コンパイラによって実行され、コンパイラ11によって出力される低水準コードで実施されるプログラム初期化論理を示す。判断菱形45.1で、コンパイラが、等価性比較が行われるかどうかを判定する。そうである場合には、コンパイラは、ブロック45.2で、要素位置合わせで等価性比較項をパックするコードを生成する、すなわち、互いに比較される項が、同一のレジスタ位置で、それぞれのレジスタ、定数、または変数にパックされる。図6の流れには、判断菱形45.3で、範囲比較が行われるかどうかをコンパイラが判定することも示されており、そうである場合には、コンパイラが、そのような比較のそれぞれの下限を判定するか、コンパイラが、そのような比較のそれぞれの下限を判定するコードを生成するかのいずれかが行われ、これは、ブロック45.4によって判定される。その後、ブロック45.5で、コンパイラが、下限項を要素位置合わせでパックするコードを生成する。ブロック45.5から、論理はブロック45.6に移り、コンパイラが、比較の範囲をパックするコードを生成する。
【0052】
ブロック45.6から、またはテストが否定である時の判断菱形45.3から、論理は、判断菱形45.65にながれ、要素の符号位置を既知にする必要があるかどうかを判定する。そうである場合には、ブロック45.7で、コンパイラが、以下でさらに説明する、符号ビット位置をマスクするマスクを生成する。ブロック45.7から、またはテストが否定である時の判断菱形45.65から、論理は判断菱形45.8に流れ、論理右シフト演算が実行されるかどうかを判定する。そうである場合には、ブロック45.9で、コンパイラが、以下でさらに述べるように、シフトされたビット位置をクリアするマスクを生成する。
【0053】
図9に、コンパイラ11の出力コードによって行われるレジスタ・セットアップ論理を示す。具体的に言うと、残りの図の論理は、コンパイラ11によって生成されるコードによって行われることを理解されたい。ブロック46で開始して、「m」個の値を有するレジスタについて、m番目の値を、その右の値の幅すなわち1、…、(m−1)個の値の幅だけ左にシフトする(やはり、図4に示された方向に関して)。ブロック48で、ブロック46でシフトされた値を含む要素を、指定されたレジスタに加算する。ブロック50は、ブロック46および48の処理が、レジスタにパックされるすべての要素がレジスタに加算されるまでループすることを示す。この論理は、状態55で終了する。元の要素を、本来、自然に要素として異なるレジスタ内で処理される副要素に分割し、その後、処理の後に再結合できることを理解されたい。たとえば、特定のプロセスが必要とする可能性がある、2つの完全なデータ要素と2組の余分な精度が、1つのレジスタにおさまらない場合に、1つの完全な要素と部分的要素を2組の余分な精度と共に1つのレジスタを介して処理することができ、残りの副要素をターゲット・プロセッサの別のレジスタを介して処理することができる。入力データ要素のすべてが、正であることが既知であり、既にガード・ビットなしでパックされている時に、パック処理を、より単純にすることができ、1つおきの要素を選択し、データ要素の入力精度と等しいガード・ビットを有する2つのレジスタに結果を残す、シフト演算およびマスク演算からなるものとすることができる。
【0054】
本発明によって処理されるすべてのデータ要素について上の条件が満たされる時に、前に借りが発生しなかった、左に(図4に示された例示的レジスタ24に関して)伝播する繰上りは、絶対に発生することができない。これは望ましい。というのは、前の借りがない左に伝搬する繰上りが、そうでなければ、隣接する要素への要素オーバーフローを示すからである。さらに、最大の負のテストを満足することによって、借りが、アンダーフロー状態での借りに続くことだけができることが保証される。というのは、影響される要素のすぐ右の要素からの符号反転に必要な借りが提供されるからである。どの処理サイクルにも、多くとも1つの借りがレジスタ内の各要素から発生し、借りが、隣接する(右に)要素の符号ビット(符号ビットは要素の最上位ビットである)での「1」ビットの存在によって示されることになる。
【0055】
レジスタ・セットアップ処理が完了したならば、図10に示された論理を実行することによって入力データ・ストリームを処理することができ、図10の論理では、コンパイラが、本明細書に示された論理の低水準コードを生成する。ブロック56で、データ要素が、上で述べた空間割振りに従ってプロセッサ12のレジスタにパックされる。具体的に言うと、複数のマルチビット符号付きデータ要素が、ブロック56で、プロセッサ12の少なくとも1つのレジスタにパックされる。その後、各処理サイクルに、複数のデータ要素を保持するレジスタのそれぞれで、データ要素が、同一の演算すなわち、プログラムによって実施される演算によって、同時に処理される。1サイクル演算には、2つのレジスタの加算/減算、即値の加算/減算、論理左シフト、単一の値または既知の精度の変数による正または負の乗算、等価性演算、符号ビットとのAND演算、および符号ビットとのOR演算が含まれる。また、レジスタの最上位(左端)ビット内の要素の算術比較を、単一サイクル内に所定の数に対して実行することができ、レジスタ内の下位要素のような比較は、比較の後に最上位ビットを破棄することができる場合に、別のレジスタまたは同一のレジスタ内でそれらをコピーし、最上位ビットにシフトするための余分なサイクルを必要とする。算術右シフト、論理右シフト、いくつかの比較、および否定のすべてが、余分のサイクルを必要とするが、すべての要素について複数サイクルで達成することができる。互いに比較されるか、互いに加算されるか、互いから減算される、別々のレジスタ内の要素について、対応する要素が、位置合せされなければならない、すなわち、第2レジスタ内の第2要素と比較、加算、または減算される、第1レジスタ内の第1要素は、第1レジスタ内で、第2レジスタ内で第2要素が占めるのと同一のレジスタ位置を占めなければならない。
【0056】
同時演算の後に、論理は、判断菱形59にながれ、要素を分割しなければならないかどうかを判定する。具体的に言うと、同時に操作される、単一レジスタ内の要素を、上で述べたコンパイラ・ディレクティブによる定義通りに、または並列実行ブロックの終りに、互いに独立にする必要がある場合がある。コンパイラが生成したコードでは、同時演算を実行するコードの後に、要素を分割する必要がある場合に、コンパイラが、分割を実行する低水準コードを挿入しなければならない。この論理は、判断菱形59に反映され、これは、単一レジスタ内のパックされた独立の要素を同時に操作する命令が生成された後に、以下で述べる図11または12の論理に従ってそれらの要素を互いに分離する命令が生成される。一般に、独立の要素について、論理はブロック62に移り、1レジスタ内の処理されたデータ要素を、分割し、別のレジスタまたはストレージに送る。ブロック64で、大きい要素の副要素であったすべての要素を、互いに再結合する。ブロック64から、またはレジスタ内のパックされた要素が互いに独立である必要がない場合の判断菱形59から、ブロック66で、要素が、保管、出力、またはさらなる処理のために送られる。
【0057】
図11から15に、コンパイラ11の出力で実施される本発明のさまざまな好ましい詳細を示す。図11を参照すると、レジスタ内の要素を互いに独立にする第1の論理フローを見ることができる。ブロック68で開始されて、図10のブロック58で要素を操作した後に、左端要素(やはり図4の例示的レジスタ24に関して)の符号ビットを、左に直接隣接する要素の最下位ビットに加算する。ブロック70は、1レジスタに3つ以上の要素が含まれる時に、ブロック68のステップを再帰的に行い、効果的に要素の間のすべての借りを除去することを示す。
【0058】
代替案では、図12の論理を呼び出して、要素を独立にすることができる。図12のブロック72から開始して、レジスタ内の要素を処理の後に互いに完全に独立にしなければならず、要素の符号ビットの次のビットが符号ビットと同一である(符号ビットを犠牲にすることができることを意味する)時には、レジスタ内の符号ビットのすべてを選択するマスクを、レジスタのコピーに適用し、ブロック74でレジスタに加算する。これによって、繰上りまたは借りが来るまですべての符号ビットがクリアされ、ある要素のクリアされた符号ビット位置に、右に隣接する近傍から繰上りおよび借りが取り込まれる。「符号ビットをマスクする」は、レジスタと、符号ビットの位置に「1」、それ以外の位置に「0」を有するパターンとのビット単位のANDを実行することを意味する。左端の要素の符号ビットのマスクおよび破棄は、左端の要素が、その左に相互作用すべき他の要素を有しないので、行うことも行わないこともできる。
【0059】
その後、ブロック76で、要素を渡す前に、各要素の左端(または前の符号ビット)の値を破棄または無視する。上の動作は、データ要素ごとの精度の減少をもたらすが、これによって、図11に示された再帰的方法より少ないサイクルで要素が互いに独立になり、符号ビット位置の壊されたデータが破棄される。破棄は、比較のためのレジスタ内の左位置調整の一部としての余分な左シフトによって、または各破壊されたビットを選択的に除くマスクによって、行うことができる。
【0060】
図13を参照すると、データ要素が0付近に含まれるかどうかを判定する(たとえば0へのJPEG量子化のため)、コンパイラが生成した低水準コードで実施される論理が示されている。ブロック80で、範囲のパックされた下限を、1サイクルでレジスタから減算する。判断菱形82に移って、テストされる要素(すなわち、比較される要素)の符号ビットを、上で述べた原理に従って犠牲にすることができるかどうかを判定する。そうである場合には、ブロック84で、上で述べた符号ビット・マスクを加算して、符号ビットをマスクする。その後、ブロック88で、テストされている要素を、単一の論理テストでそれぞれの範囲と比較する。精度の余分な未使用のビットが、データ要素のために提供されたので、符号ビットは、各要素の左端から2番目の位置に存在する。処理は、すべての要素が比較されるまで、ブロック88からブロック84にループする。
【0061】
対照的に、判断菱形82でのテストが否定の時には、ブロック86で、符号ビットを隣接する要素に加算する。その後、ブロック88で、テストされている要素を単一の論理テストで上限と比較し、すべての要素が比較されるまで、ブロック86および88の処理がループする。
【0062】
図13の議論に関連して、ブロック88の比較の後に、要素を、0にマスクするか1時に1つ左にシフトし、その結果、比較が必ずレジスタ内の左端のマスクされない要素について境界に対して行われるようにする。
【0063】
図14に、算術右シフトの、コンパイラが生成する低水準コードで実施される論理を示す。ブロック92で開始して、各要素の符号ビットを、別のレジスタに保存する。ブロック94に移って、上で図11および12を使用して開示したように、要素を独立にし、ブロック96で、1位置の算術右シフトを行う。次に、ブロック97で、レジスタ内の要素の符号ビット位置を、1サイクルでクリアする。ブロック98で、各要素の符号ビットを、レジスタとORをとり、ブロック96および98のステップを、ブロック99に示されているようにシフトが完了するまで繰り返す。判断菱形99の判定で、さらに演算が実行される場合には、新しい符号ビットを右から左へ1つずつ減算し、レジスタ全体に波及させることによって、パックされたフォーマットを復元することができる。これは、図14に示されているように、ブロック99.2で符号ビットをそれ自体に加算し、ブロック99.3で符号ビットと要素のORをとることによって行われる。
【0064】
図15に、算術比較を行うための精度の余分なビットを使用する方法を示す。ブロック100で開始して、本発明は、4ビット要素xxx0の値を、正しい値として定義し、xxxx1の値を、右調整値の符号ビットが値から借りられたことを示すように定義する。ブロック102で、値を精度の余分なビットと比較する。
【0065】
本発明の上で説明した目的を完全に達成することができる特定のシステム、方法、およびコンパイラ技術を図示し、説明したが、それが本発明の現在の好ましい実施形態であり、したがって、本発明によって広義に意図される主題の表現であることと、本発明の範囲が、当業者に明白になる他の実施形態を完全に含むことと、本発明の範囲が、単数形の要素への言及が「少なくとも1つの」を意味する請求項以外の何物によっても制限されないことを理解されたい。当業者に既知であるか後に既知になる、上で説明した好ましい実施形態の要素の構造的同等物および機能的同等物のすべてが、参照によって本明細書に明白に組み込まれ、請求項によって含まれることが意図されている。さらに、装置または方法が、本発明によって解決が求められる各すべての問題に対処する必要はなく、それが請求項に含まれる必要はない。さらに、この開示の要素、構成要素、または方法ステップのどれもが、要素、構成要素、または方法ステップが請求項に明示的に記載されているかどうかに無関係に、公共に供することを意図されていない。
【図面の簡単な説明】
【図1】
本発明のシステムを示す概略図である。
【図2】
代替システムを示す概略図である。
【図3】
もう1つの代替システムを示す概略図である。
【図4】
データ・レジスタ内の複数の独立のビットを表す概略図である。
【図5】
本発明の全体的な論理を示す流れ図である。
【図6】
現在の規則をあるプロセスについて満たすことができることを検証するプログラマ/コンパイラ論理を示す流れ図である。
【図7】
プログラム初期化論理を示す流れ図である。
【図8】
現在の規則をあるプロセスについて満たすことができることを検証する論理を示す流れ図である。
【図9】
レジスタ・セットアップ論理を示す流れ図である。
【図10】
全体的な実行論理を示す流れ図である。
【図11】
単一のレジスタ内で独立の要素を実施する代替論理フローを示す流れ図である。
【図12】
単一のレジスタ内で独立の要素を実施する代替論理フローを示す流れ図である。
【図13】
要素が0付近に含まれるかどうかを判定する論理を示す流れ図である。
【図14】
算術右シフトの論理を示す流れ図である。
【図15】
算術比較の論理を示す流れ図である。
Claims (43)
- 装置であって、
レジスタと、
前記レジスタに結合されたプロセッサと、
前記プロセッサからアクセス可能に保管されたプログラムであって、前記プロセッサ上で実行される時に、前記レジスタ内の複数のマルチビット・データ要素の同時処理において前記プロセッサと協力し、前記同時処理は、前記レジスタ内の少なくとも第1および第2の符号付きマルチビット・データ要素を確立することと、前記要素を同時に処理することとを含む、プログラムと
を含む装置。 - 前記データ要素は、互いに独立である、請求項1に記載の装置。
- 前記プログラムは、前記プロセッサ上で実行される時に、前記レジスタから少なくとも1つの計算サブシステムに複数のデータ要素を同時にディスパッチするように前記プロセッサと協力する、請求項1または2のいずれか一項に記載の装置。
- 前記プログラムは、前記プロセッサ上で実行される時に、(a)定数によるまたは既知の精度の変数による乗算、(b)加算、(c)論理左シフト、(d)減算、(e)ビット単位のAND、または(f)ビット単位のORの選択された1つによる前記データ要素の操作において前記プロセッサと協力する、請求項1ないし3のいずれか一項に記載の装置。
- 前記第1要素は、第1部分要素および関連する第2部分要素を含み、前記第2部分要素は、第2レジスタ内で確立され、前記プログラムは、前記プロセッサ上で実行される時に、処理後に前記第1および第2の部分要素を組み合わせるように前記プロセッサと協力する、請求項1ないし4のいずれか一項に記載の装置。
- 複数のレジスタを含み、さらに、前記プログラムは、前記プロセッサ上で実行される時に、前記レジスタの単一の1つでの複数のマルチビット・データ要素の同時処理において前記プロセッサと協力する、請求項1ないし5のいずれか一項に記載の装置。
- 前記プログラムは、前記プロセッサ上で実行される時に、前記複数のレジスタの複数のそれぞれでの複数のマルチビット・データ要素の同時処理において前記プロセッサと協力する、請求項6に記載の装置。
- 前記プログラムは、前記プロセッサ上で実行される時に、データ要素によって表現できる最大の負の数が、それぞれの精度で表現できる最大の負の数より1つ大きくなるように、単一サイクル中に前記レジスタ内で処理されるデータ要素ごとにレジスタ内で前記それぞれの精度を割り振ることにおいて前記プロセッサと協力する、請求項1ないし3のいずれか一項に記載の装置。
- 前記プログラムは、前記プロセッサ上で実行される時に、[−2N−1+1]から[2N−1−1]までに基づいて精度限界を判定することにおいて前記プロセッサと協力し、Nは、前記データ要素内のビット数である、請求項8に記載の装置。
- 前記プログラムは、前記プロセッサ上で実行される時に、少なくとも1つの単一レジスタに複数のデータ要素をパックすることと、前記単一レジスタ内のすべての要素を同時に操作することと、前記操作動作の後にさらなる処理、保管、または出力のために前記データ要素を渡すこととにおいて前記プロセッサと協力する、請求項1ないし3のいずれか一項に記載の装置。
- 前記プログラムは、前記プロセッサ上で実行される時に、互いに独立である単一レジスタ内の少なくとも第1および第2のデータ要素について、前記第1要素の符号ビットを前記第2要素の最下位ビットに加算することにおいて前記プロセッサと協力する、請求項10に記載の装置。
- 前記プログラムは、前記プロセッサ上で実行される時に、少なくとも1つの比較的大きいデータ要素を複数の副要素に分割し、前記副要素を別々のそれぞれのレジスタにパックすることと、処理の後に前記副要素を再結合することとにおいて前記プロセッサと協力する、請求項10に記載の装置。
- 前記プログラムは、前記プロセッサ上で実行される時に、単一の処理サイクル中の単一のレジスタ内の少なくとも2つのデータ要素の少なくとも1つの等価性確認を行うことにおいて前記プロセッサと協力する、請求項1ないし12のいずれか一項に記載の装置。
- プロセッサと、前記プロセッサと協力するコンパイラとを含む装置であって、前記コンパイラは、高水準コードを受け取り、プロセッサが単一レジスタ内の複数のマルチビット・データ要素を同時に処理できるようにする低水準コードを出力し、前記低水準コードの論理は、少なくとも第1レジスタ内で少なくとも第1および第2の符号付きマルチビット・データ要素を確立することと、前記要素を同時に処理することとを含む、装置。
- 前記コンパイラは、要素を互いに独立にする時を判断するために、コンパイラ・ディレクティブ、フラグ、または構成ファイルの少なくとも1つにアクセスする、請求項14に記載の装置。
- 前記第1要素は、第1データ・セットから供給され、前記第2要素は、前記第1データ・セットと異なる第2データ・セットから供給される、請求項14および15のいずれか一項に記載の装置。
- 前記コンパイラは、単一サイクル中にレジスタ内で処理されるデータ要素ごとに前記レジスタ内でそれぞれの出力精度を割り振る、請求項14ないし16のいずれか一項に記載の装置。
- 前記コンパイラは、少なくとも部分的に入力精度に基づいて、前記出力精度を決定する、請求項17に記載の装置。
- 前記コンパイラは、入力として前記出力精度を受け取る、請求項17に記載の装置。
- 前記コンパイラは、少なくとも部分的にデータ要素に対する演算に基づいて、精度の少なくとも1ビットを加算する、請求項18に記載の装置。
- 出力精度または入力精度は、コンパイラ・ディレクティブ、構成ファイル、または変数定義によって定義される、請求項14ないし17のいずれか一項に記載の装置。
- 前記コンパイラは、それぞれのデータ・ソースからの複数のデータ要素を、互いに同時にアルゴリズムによって操作される共通レジスタにパックする命令を生成する、請求項14に記載の装置。
- 装置であって、
ディジタル処理装置によって可読のコンピュータ・プログラム・ストレージ・デバイスと、
前記プログラム・ストレージ・デバイスに保管され、マルチビット符号付きデータ要素の処理を指示するために前記プログラムにアクセスするディジタル処理装置によって実行可能な命令を含むプログラムであって、
少なくとも第1および第2のデータ要素の単一レジスタへのパックを指示する第1コンピュータ可読コード・モジュールと、
前記要素の同時処理を指示する第2コンピュータ可読コード・モジュールと
を含むプログラムと
を含む装置。 - 前記プログラムは、データ要素によって表現できる最大の負の数が、それぞれの精度で表現できる最大の負の数より1つ大きくなるように、単一サイクル中にレジスタ内で処理されるデータ要素ごとに前記レジスタ内で前記それぞれの精度を割り振るように指示する第3コンピュータ可読コード・モジュールを含む、請求項23に記載の装置。
- 精度のビットの正味の数に従って少なくとも1つの単一レジスタに複数のデータ要素をパックするパッキング・コンピュータ可読コード・モジュールをさらに含み、さらに、前記第2コンピュータ可読コード・モジュールは、前記単一レジスタ内のすべてのデータ要素に対する同時演算を指示し、前記演算動作の後にさらなる処理、保管、または出力のために前記データ要素を渡す、請求項23または24のいずれか一項に記載の装置。
- 少なくとも1つの比較的大きいデータ要素を複数の副要素に分割し、前記副要素を別々のそれぞれのレジスタにパックする分割コンピュータ可読コード・モジュールと、処理の後に前記副要素を再結合する再結合コンピュータ可読コード・モジュールとをさらに含む、請求項23ないし25のいずれか一項に記載の装置。
- 単一処理サイクル中に単一レジスタ内の少なくとも2つのデータ要素に対する少なくとも1つの等価性確認を行う確認コンピュータ可読コード・モジュールをさらに含む、請求項23ないし26のいずれか一項に記載の装置。
- 装置であって、
ディジタル処理装置によって可読のコンピュータ・プログラム・ストレージ・デバイスと、
前記プログラム・ストレージ・デバイス上の、マルチビット符号付きデータ要素を処理するための出力低水準コードを生成するために前記ディジタル処理装置によって実行可能な命令を含むコンパイラ・プログラムであって、前記低水準コードは、
少なくとも第1および第2のデータ要素を単一レジスタにパックするコンピュータ可読コード・モジュールと、
前記要素を同時に処理するコンピュータ可読コード・モジュールと
を含む、コンパイラ・プログラムと
を含む装置。 - 少なくとも1サイクルで精度を検査しなければならないかどうかを示すフラグをさらに含む、請求項28に記載の装置。
- 入力精度を定義するコンパイラ・ディレクティブをさらに含む、請求項28に記載の装置。
- 共通レジスタにパックされ、互いに同時にアルゴリズムによって操作されるそれぞれのデータ要素の複数のデータ・ソースを定義するコンパイラ・ディレクティブをさらに含む、請求項28に記載の装置。
- 精度を検査しなければならないかどうかを示す手段と、
前記パックされた要素が、オーバーフローせず、アンダーフローせず、前記精度で表現可能な最大の大きさの負の数を達成しないことを検査する、示す前記手段に応答する手段と、
パックされた要素が1サイクルでオーバーフローするかアンダーフローするか前記精度で表現可能な最大の大きさの負の数を達成する時に、レジスタ内の他のデータ要素の破壊を防ぐために前記要素のラップまたは飽和を行うか、前記プログラム内のエラー処理ルーチンによって処理されるエラーをシグナルする手段と
をさらに含む、請求項28に記載の装置。 - プロセッサと、前記プロセッサに結合された少なくとも第1および第2のレジスタと、前記第1レジスタ内の第1および第2の符号付きマルチビット・データ要素とを含む装置であって、前記プロセッサは、オペランドを使用して前記第1および第2のデータ要素を同時に操作する、装置。
- 前記第2レジスタ内の第3データ要素をさらに含み、前記第1および第3のデータ要素は、第4データ要素の副要素である、請求項33に記載の装置。
- 前記第1および第2のデータ要素は、互いに独立である、請求項33および34のいずれか一項に記載の装置。
- 前記第1データ要素は、第1サイズを有し、前記第2データ要素は、前記第1サイズと異なる第2サイズを有する、請求項33ないし35のいずれか一項に記載の装置。
- 前記第1データ要素は、第1イメージ・データ・ストリームからであり、前記第2データ要素は、第2イメージ・データ・ストリームからである、請求項33ないし36のいずれか一項に記載の装置。
- 前記第1および第2のデータ要素は、同一のイメージ・データ・ストリームの異なる部分からである、請求項33ないし36のいずれか一項に記載の装置。
- 方法であって、
それぞれの第1および第2の符号付きデータ要素を保持するために単一レジスタ内で割り振られる第1および第2の精度を判定するステップと、
前記要素を前記レジスタにパックするステップと、
前記要素を操作するステップと、
第1および第3の精度が互いに異なること、および第2および第4の精度が互いに異なることの少なくもと1つで、それぞれの第3および第4の符号付きデータ要素を保持するために前記単一レジスタ内で割り振られる前記第3および第4の精度を判定するステップと、
前記第3および第4の要素を前記レジスタにパックするステップと、
前記第3および第4の要素を操作するステップと
を含む方法。 - 前記レジスタは、少なくとも1つの計算サブシステムに複数のデータ要素を同時に送る、請求項39に記載の方法。
- 前記操作は、定数によるまたは既知の精度の変数による乗算、加算、論理左シフト、減算、ビット単位のAND、あるいはビット単位のORである、請求項39および40のいずれか一項に記載の方法。
- 前記第1要素は、第1データ・セットから供給され、前記第2要素は、前記第1データ・セットと異なる第2データ・セットから供給される、請求項39ないし41のいずれか一項に記載の方法。
- 前記第1要素は、第1データ・セットから供給され、前記第2要素は、前記第1データ・セットから供給される、請求項39ないし41のいずれか一項に記載の方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/675,779 US6834337B1 (en) | 2000-09-29 | 2000-09-29 | System and method for enabling multiple signed independent data elements per register |
US09/693,090 US7039906B1 (en) | 2000-09-29 | 2000-10-20 | Compiler for enabling multiple signed independent data elements per register |
PCT/US2001/027733 WO2002029725A1 (en) | 2000-09-29 | 2001-09-26 | Apparatus, methods, and compilers enabling processing of multiple signed independent data elements per register |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004511051A true JP2004511051A (ja) | 2004-04-08 |
JP4677172B2 JP4677172B2 (ja) | 2011-04-27 |
Family
ID=27101408
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002533222A Expired - Fee Related JP4677172B2 (ja) | 2000-09-29 | 2001-09-26 | レジスタあたり複数の符号付き独立データ要素の処理を可能にする装置、方法、およびコンパイラ |
Country Status (6)
Country | Link |
---|---|
US (1) | US7039906B1 (ja) |
EP (1) | EP1330788A4 (ja) |
JP (1) | JP4677172B2 (ja) |
KR (1) | KR100588034B1 (ja) |
CN (1) | CN1257462C (ja) |
WO (1) | WO2002029725A1 (ja) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004054680A (ja) * | 2002-07-22 | 2004-02-19 | Fujitsu Ltd | 並列効率計算方法 |
JP4487479B2 (ja) * | 2002-11-12 | 2010-06-23 | 日本電気株式会社 | Simd命令シーケンス生成方法および装置ならびにsimd命令シーケンス生成用プログラム |
US7310594B1 (en) * | 2002-11-15 | 2007-12-18 | Xilinx, Inc. | Method and system for designing a multiprocessor |
US7668897B2 (en) * | 2003-06-16 | 2010-02-23 | Arm Limited | Result partitioning within SIMD data processing systems |
CA2443049A1 (en) | 2003-09-26 | 2005-03-26 | Ali I. Sheikh | Method for computer program optimization in a dynamic compiling environment |
JP4157016B2 (ja) * | 2003-11-05 | 2008-09-24 | 株式会社東芝 | コンパイラ装置及びコンパイル方法 |
GB2411974C (en) * | 2003-12-09 | 2009-09-23 | Advanced Risc Mach Ltd | Data shift operations |
US7653674B2 (en) * | 2004-10-07 | 2010-01-26 | Infoprint Solutions Company Llc | Parallel operations on multiple signed elements in a register |
US8255886B2 (en) * | 2008-06-30 | 2012-08-28 | Intel Corporation | Methods and apparatus for analyzing SIMD code |
US20130113809A1 (en) * | 2011-11-07 | 2013-05-09 | Nvidia Corporation | Technique for inter-procedural memory address space optimization in gpu computing compiler |
US9557993B2 (en) | 2012-10-23 | 2017-01-31 | Analog Devices Global | Processor architecture and method for simplifying programming single instruction, multiple data within a register |
CN108229668B (zh) * | 2017-09-29 | 2020-07-07 | 北京市商汤科技开发有限公司 | 基于深度学习的运算实现方法、装置和电子设备 |
Family Cites Families (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3816734A (en) * | 1973-03-12 | 1974-06-11 | Bell Telephone Labor Inc | Apparatus and method for 2{40 s complement subtraction |
US4338675A (en) * | 1980-02-13 | 1982-07-06 | Intel Corporation | Numeric data processor |
US5341506A (en) * | 1984-12-10 | 1994-08-23 | Nec Corporation | Data flow processor with a full-to-half word convertor |
JPH0762823B2 (ja) | 1985-05-22 | 1995-07-05 | 株式会社日立製作所 | デ−タ処理装置 |
US5021945A (en) | 1985-10-31 | 1991-06-04 | Mcc Development, Ltd. | Parallel processor system for processing natural concurrencies and method therefor |
DE3855524T2 (de) | 1987-06-19 | 1997-02-06 | Hitachi Ltd | Arithmetik-Parallelverarbeitungseinheit und zugehöriger Kompilator |
DE68920388T2 (de) | 1988-09-19 | 1995-05-11 | Fujitsu Ltd | Paralleles Rechnersystem mit Verwendung eines SIMD-Verfahrens. |
JPH03257579A (ja) | 1990-03-07 | 1991-11-18 | Nec Corp | コンパイラの並列化方式 |
US5418915A (en) | 1990-08-08 | 1995-05-23 | Sumitomo Metal Industries, Ltd. | Arithmetic unit for SIMD type parallel computer |
JP2834292B2 (ja) | 1990-08-15 | 1998-12-09 | 株式会社日立製作所 | データ・プロセッサ |
JP3032031B2 (ja) | 1991-04-05 | 2000-04-10 | 株式会社東芝 | ループ最適化方法及び装置 |
US5218564A (en) | 1991-06-07 | 1993-06-08 | National Semiconductor Corporation | Layout efficient 32-bit shifter/register with 16-bit interface |
US5774727A (en) | 1991-06-27 | 1998-06-30 | Digital Equipment Corporation | Parallel processing system for virtual processor implementation of machine-language instructions |
US5293631A (en) | 1991-08-06 | 1994-03-08 | Hewlett-Packard Company | Analysis and optimization of array variables in compiler for instruction level parallel processor |
US5274818A (en) | 1992-02-03 | 1993-12-28 | Thinking Machines Corporation | System and method for compiling a fine-grained array based source program onto a course-grained hardware |
US5669010A (en) | 1992-05-18 | 1997-09-16 | Silicon Engines | Cascaded two-stage computational SIMD engine having multi-port memory and multiple arithmetic units |
US5408670A (en) | 1992-12-18 | 1995-04-18 | Xerox Corporation | Performing arithmetic in parallel on composite operands with packed multi-bit components |
US5410721A (en) * | 1992-12-24 | 1995-04-25 | Motorola, Inc. | System and method for incrementing a program counter |
JP3546437B2 (ja) | 1993-03-31 | 2004-07-28 | ソニー株式会社 | 適応形ビデオ信号演算処理装置 |
US5606650A (en) * | 1993-04-22 | 1997-02-25 | Apple Computer, Inc. | Method and apparatus for storage and retrieval of a texture map in a graphics display system |
WO1994027216A1 (en) | 1993-05-14 | 1994-11-24 | Massachusetts Institute Of Technology | Multiprocessor coupling system with integrated compile and run time scheduling for parallelism |
US5390135A (en) | 1993-11-29 | 1995-02-14 | Hewlett-Packard | Parallel shift and add circuit and method |
CA2115464C (en) | 1994-02-11 | 1998-12-15 | William G. O'farrell | Concurrent processing in object oriented parallel and near parallel systems |
JP3458518B2 (ja) | 1994-08-30 | 2003-10-20 | ソニー株式会社 | 並列プロセッサ |
US5692207A (en) | 1994-12-14 | 1997-11-25 | International Business Machines Corporation | Digital signal processing system with dual memory structures for performing simplex operations in parallel |
US5689702A (en) * | 1995-06-07 | 1997-11-18 | Microtec Research, Inc. | Flexible data structure layout for data structure including bit-field data members |
US5696985A (en) * | 1995-06-07 | 1997-12-09 | International Business Machines Corporation | Video processor |
US5602769A (en) * | 1995-07-05 | 1997-02-11 | Sun Microsystems, Inc. | Method and apparatus for partially supporting subnormal operands in floating point multiplication |
EP0847551B1 (en) * | 1995-08-31 | 2012-12-05 | Intel Corporation | A set of instructions for operating on packed data |
JPH0997178A (ja) | 1995-09-29 | 1997-04-08 | Matsushita Electric Ind Co Ltd | 飽和演算処理装置および方法 |
JP3546980B2 (ja) | 1996-03-29 | 2004-07-28 | 松下電器産業株式会社 | データ処理装置 |
US5818364A (en) | 1996-06-19 | 1998-10-06 | Hewlett-Packard Company | High bit-rate huffman decoding |
US5770894A (en) | 1996-07-10 | 1998-06-23 | International Business Machines Corporation | Parallel processing method having arithmetical conditions code based instructions substituted for conventional branches |
GB2317467B (en) | 1996-09-23 | 2000-11-01 | Advanced Risc Mach Ltd | Input operand control in data processing systems |
US5864703A (en) * | 1997-10-09 | 1999-01-26 | Mips Technologies, Inc. | Method for providing extended precision in SIMD vector arithmetic operations |
US6080204A (en) | 1997-10-27 | 2000-06-27 | Altera Corporation | Method and apparatus for contemporaneously compiling an electronic circuit design by contemporaneously bipartitioning the electronic circuit design using parallel processing |
US5958038A (en) | 1997-11-07 | 1999-09-28 | S3 Incorporated | Computer processor with two addressable memories and two stream registers and method of data streaming of ALU operation |
US6112299A (en) | 1997-12-31 | 2000-08-29 | International Business Machines Corporation | Method and apparatus to select the next instruction in a superscalar or a very long instruction word computer having N-way branching |
US6243803B1 (en) * | 1998-03-31 | 2001-06-05 | Intel Corporation | Method and apparatus for computing a packed absolute differences with plurality of sign bits using SIMD add circuitry |
JP3615399B2 (ja) * | 1998-09-22 | 2005-02-02 | 株式会社リコー | 画像処理装置および画像処理方法 |
US6038652A (en) | 1998-09-30 | 2000-03-14 | Intel Corporation | Exception reporting on function generation in an SIMD processor |
-
2000
- 2000-10-20 US US09/693,090 patent/US7039906B1/en not_active Expired - Fee Related
-
2001
- 2001-09-26 WO PCT/US2001/027733 patent/WO2002029725A1/en not_active Application Discontinuation
- 2001-09-26 EP EP01972951A patent/EP1330788A4/en not_active Withdrawn
- 2001-09-26 JP JP2002533222A patent/JP4677172B2/ja not_active Expired - Fee Related
- 2001-09-26 CN CNB018195857A patent/CN1257462C/zh not_active Expired - Fee Related
- 2001-09-26 KR KR1020037004305A patent/KR100588034B1/ko not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
KR100588034B1 (ko) | 2006-06-09 |
US7039906B1 (en) | 2006-05-02 |
EP1330788A1 (en) | 2003-07-30 |
KR20030034213A (ko) | 2003-05-01 |
WO2002029725A1 (en) | 2002-04-11 |
EP1330788A4 (en) | 2006-04-26 |
CN1478257A (zh) | 2004-02-25 |
CN1257462C (zh) | 2006-05-24 |
JP4677172B2 (ja) | 2011-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7698696B2 (en) | Compiler apparatus with flexible optimization | |
JP3547139B2 (ja) | プロセッサ | |
US20070011441A1 (en) | Method and system for data-driven runtime alignment operation | |
US20030105793A1 (en) | Long instruction word controlling plural independent processor operations | |
JPH09282179A (ja) | オーバーヘッド命令を最小限にする最適化コンパイラにおける命令スケジューリングの方法および装置 | |
JP4677172B2 (ja) | レジスタあたり複数の符号付き独立データ要素の処理を可能にする装置、方法、およびコンパイラ | |
US20190310847A1 (en) | Complex multiply instruction | |
KR20050010800A (ko) | 확장가능한 프로세서 아키텍처에 진보된 명령어들을부가하는 방법 및 장치 | |
US9740488B2 (en) | Processors operable to allow flexible instruction alignment | |
Huber et al. | Effective vectorization with OpenMP 4.5 | |
US6834337B1 (en) | System and method for enabling multiple signed independent data elements per register | |
US7647368B2 (en) | Data processing apparatus and method for performing data processing operations on floating point data elements | |
CN110073332B (zh) | 数据处理装置和方法 | |
JP3763516B2 (ja) | 変換プログラム、コンパイラ、コンピュータ装置およびプログラム変換方法 | |
US7107435B2 (en) | System and method for using hardware assist functions to process multiple arbitrary sized data elements in a register | |
Linders | Compiler Vectorization for Coarse-Grained Reconfigurable Architectures | |
Bertin et al. | A floating-point library for integer processors | |
van Groningen | Implementing the ABC-machine on MC680X0 based architectures | |
JP4879589B2 (ja) | コンパイラ装置 | |
Zhu et al. | Overflow controlled SIMD arithmetic | |
Richards | The BCPL Cintsys and Cintpos User Guide | |
Cockshott | The Glasgow Pascal Compiler | |
Catthoor et al. | Exploiting Word-Width Information During Mapping | |
Leupers et al. | Code Selection for Multimedia Processors | |
von Ronne et al. | ICS |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060822 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061117 |
|
RD12 | Notification of acceptance of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7432 Effective date: 20061117 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20061117 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070227 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20070326 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20070326 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20070402 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070822 |
|
RD12 | Notification of acceptance of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7432 Effective date: 20070822 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20070822 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20071106 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080130 |
|
A911 | Transfer of reconsideration by examiner before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20080306 |
|
A912 | Removal of reconsideration by examiner before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20080328 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20101112 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20101221 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20110121 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110131 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140204 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |