JP2017520873A - 拡張可能Wideオペランド命令のためのシステムおよび方法 - Google Patents
拡張可能Wideオペランド命令のためのシステムおよび方法 Download PDFInfo
- Publication number
- JP2017520873A JP2017520873A JP2017520759A JP2017520759A JP2017520873A JP 2017520873 A JP2017520873 A JP 2017520873A JP 2017520759 A JP2017520759 A JP 2017520759A JP 2017520759 A JP2017520759 A JP 2017520759A JP 2017520873 A JP2017520873 A JP 2017520873A
- Authority
- JP
- Japan
- Prior art keywords
- data
- processor
- memory
- field
- instruction
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title description 7
- 230000015654 memory Effects 0.000 claims abstract description 165
- 230000006870 function Effects 0.000 claims description 76
- 239000011159 matrix material Substances 0.000 claims description 25
- 238000012545 processing Methods 0.000 claims description 8
- 238000012546 transfer Methods 0.000 claims description 6
- 238000006243 chemical reaction Methods 0.000 claims 1
- 238000013461 design Methods 0.000 abstract description 8
- 230000000694 effects Effects 0.000 abstract description 2
- 239000013598 vector Substances 0.000 description 12
- 230000008901 benefit Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 238000013459 approach Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 230000017105 transposition Effects 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- 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
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- 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/30181—Instruction operation extension or modification
-
- 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/30181—Instruction operation extension or modification
- G06F9/30192—Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
- G06F9/3895—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
命令を実行する際にプロセッサとメモリとの間のデータパスより幅広いオペランドが用いられる拡張可能Wide演算が開示される。拡張可能Wideオペランドは、レジスタファイルの幅、プロセッサのクロック速度、プロセッサの例外サブシステム、ならびにワイド・キャッシュ・メモリにおけるオペランドのロードおよび使用の際の演算の順序を含む、計算を行う機能ユニットの設計における関連付けられるプロセッサの特性の影響を低減する。
Description
[01]本発明はコンピュータプロセッサに関し、詳細には、プロセッサとメモリとの間のデータパス幅より大幅に広いオペランドを有するコンピュータプロセッサに関する。
[02]本発明者らは先に、プロセッサの内部データパス幅より大きいオペランドの使用を可能にすることによりプログラマブルプロセッサの性能を改善するためのプログラマブルプロセッサおよび方法について述べた。参照により本明細書に組み入れられる、「Processor Architecture for Executing Wide Transform Slice Instructions」という名称の、米国特許第8269784号を参照されたい。この先行発明では、汎用レジスタの内容を用いてプロセッサの内部データパスより幅広いメモリに記憶されたオペランドを指定する。オペランドは通常、データパスより何倍も幅広く、好ましくはメモリの隣接行に記憶される。レジスタは複数の幅のデータを読み出す(または書き込む)ためのメモリアドレスも指定する。
[03]図1に、本発明者らの先の特許から引用された、5つのフィールド‘wminor’、‘*data’、‘*twiddl’、‘fftpar’、および‘wfftslic’を有するFFTスライス命令のサンプルを示す。この命令はプロセッサに、十分な回数だけ反復されると高速フーリエ変換(FFT)を算出する演算を行わせる。命令が実行される都度、FFTの1「スライス」が算出される。レジスタフィールド*dataはデータを含むメモリ内の領域のアドレスを指定し、レジスタフィールド*twiddlは「回転因子」係数(1の複素根)を含むメモリ内の別の領域のアドレスを指定する。
[04]最初にこの演算が実行されるときに、回転因子が、利用可能なプロセッサ・メモリ・バスの速度で、実行ユニットに組み込まれた「係数RAM」へロードされ(または、一代替実施形態では、組み込みROMにすでに存在しており)、データが組み込み「ワイドキャッシュ」メモリへロードされる。連続した演算が回転因子を再利用して、組み込みキャッシュにバッファされたデータに対してFFTの連続したスライスを実行する。
[05]図1にはこの演算を行うための例示的ハードウェアも示されている。図1のハードウェアは、例えば、16サイクルで256点基数4の複素FFTの単一スライスを実行することのできる、16個の複素乗算器と4個の基数4の「バタフライ/MUXストリップ」を含む。レジスタフィールドfftpar(「FFTパラメータ」)は、次のFFTスライスの実行時のオーバフローを回避するのに必要な倍率変更やシフト量といった状況情報と共に、データおよび回転因子オペランドのサイズおよび形状、実行されるFFTスライスの特質を指定するプロセッサレジスタを指定する。4つの連続したWFFTSLICE演算が64サイクルで全256点の複素FFTを算出し、結果を、メモリマップド・ワイド・キャッシュに置く。
[06]以下で説明する発明は、本発明者らの先行技術より広範囲のアルゴリズムに関して改善された効率での拡張可能Wide演算を可能にするための追加機能を提供するものである。
[07]本発明で開示する拡張可能Wide演算は、(1)1つまたは複数のレジスタファイルの幅、(2)プロセッサのクロック速度、(3)プロセッサの例外・割込みサブシステム、ならびに(4)ワイド・キャッシュ・オペランドのロードおよびワイドキャッシュの内容の使用、例えば、オペランドのストリーミングや演算の連鎖を伴う演算の順序を含む、計算を行う機能ユニットの設計における関連付けられるプロセッサの特性の影響を低減する。
[08]さらに、拡張可能Wide演算の指定は、機能ユニットがこれらの演算を実行するための並列度が、命令自体の定義またはこれらの命令を用いるソフトウェアを変更することなく、実行ごとに異なりうるように設計される。よって、後の方の実行では、初期実行のために設計されたソフトウェアへの変更を必要とせずに、初期実行より大きな並列性を有する機能ユニットを用いることができる。一代替実施形態においては、可変の並列度を有する機能ユニットが、やはりアプリケーションソフトウェアを変更する必要なしに、有効電力目標および性能目標を達成するように並列度を制御することができる。そうした可変並列性を有する機能ユニットは、任意選択で機能ユニットの一部分および関連付けられるWideオペランド・メモリ・ブロックの電源を落とす(それらの有効電力を除去する)ことによって並列度を変えることができる。
[09]一実施形態において、拡張可能Wideオペランドを必要とする命令を実行するためのプロセッサは、演算がプロセッサとメモリとの間のデータパスより幅広いオペランドを必要とする、プロセッサによって行われるべき演算を定義する演算コードフィールドを含む命令を実行する。命令は、行われるべき演算のために入力されるべきデータを含むメモリ内のデータ入力領域のアドレスを指定するデータ入力フィールド、およびプロセッサによって行われるべき関数に関する情報を含むメモリ内の関数領域のアドレスを指定する関数フィールドも含む。命令は、命令の実行の状態、例えば、実行が中断されるかどうかに関する情報を記憶するのに用いることができる状態フィールドも指定する。演算コードフィールド、データ入力フィールド、および関数フィールドのうちの少なくとも1つが行われるべき演算によって必要とされるデータブロックのメモリ内のアドレスを提供し、このデータブロックはプロセッサとメモリとの間の最も幅広いデータパスより幅広い。
[10]別の実施形態において、拡張可能Wideオペランドを必要とする命令を実行するためのプロセッサは、プロセッサによって行われるべき演算を定義する演算コードフィールドを含み、演算はプロセッサとメモリとの間の最も幅広いデータパスより幅広いオペランドを必要とする。拡張可能Wide命令内のフィールドがメモリ内のデータブロックのアドレスを指定する。データブロック内のデータは、当該ブロック内の、少なくとも、プロセッサによって行われるべき演算において用いられるべき入力データと入力データに対する演算を行う際に用いられるべき関数データとの位置を指定する記述子フィールドを含む。入力データと関数データの少なくとも一方はプロセッサとメモリとの間の最も幅広いデータパスより幅広い。必要な場合には、メモリブロック内の状態データと出力データとの位置も記述子フィールドに含めることができる。
[11]本発明の他の目的、特徴、および利点は、以下の詳細な説明および添付の図面を考察すれば明らかになるであろう。図面において、類似した参照符号は全図にわたって類似した特徴を表すものである。
[12]
米国特許第8269784号からの先行技術の図である。 [13]
拡張可能Wide命令および当該命令内の各フィールドの図である。 [14]
記述子ブロックを用いた拡張可能Wide命令の図である。 [15]
記述子ブロックを用いた拡張可能Wide命令の連鎖を示す図である。 [16]
フィールドを用いた拡張可能Wide命令の連鎖を示す図である。 [17]
拡張可能Wide演算の単一命令セットを様々な幅のコアを有するプロセッサ上で正しく実行することができることを示す図である。 [18]
拡張可能Wide演算を実行するためのプロセッサのアーキテクチャの一実施形態の図である。
[19]本発明は、プロセッサ・メモリ間データパスより大幅に広い命令およびオペランドがプロセッサによって用いられうる拡張可能Wide演算を可能にする。プロセッサはコンピュータシステムにおけるメインプロセッサであってもよく、あるいは、直接接続でまたは分散させて単一のメモリシステムを共用するコンピュータシステム内の複数のプロセッサのうちの1つであってもよい。図2には、拡張可能Wide命令20が示されている。本例示的実施形態には、5つのフィールドを有する32ビット命令が示されているが、本発明は他の固定長、または可変長でさえもの命令にも適用することができる。
[20]命令は複数のフィールド22〜26を用いる。フィールド22は演算コード(‘opcode’)を提供する。命令によって実行される演算の例については表1に関連して、また別の箇所で後述する。これらの例示的演算については以下で論じる。その他のレジスタフィールド23、24、25、および26は、その内容が、後述する命令オペランドのためのプロセッサのメモリシステムへ、仮想アドレスまたは実アドレスとすることのできるアドレスを提供するレジスタを指定する。ここでいうメモリシステムは、プロセッサのメイン・メモリ・システムまたは複数のプロセッサのメモリシステムのうちの1つ、例えばキャッシュメモリとすることができる。このメモリシステムは、様々な代替実施形態において、メモリ密度および平均アクセス時間の性能目標を達成するために様々な階層として命令キャッシュおよび/またはデータキャッシュを含むことができる。
[21]拡張可能Wide命令において、フィールド*in23およびフィールド*out26は、(1つまたは複数の)実行ユニット30に入力されるべきデータを含むメモリ内の位置および(1つまたは複数の)実行ユニット30からの結果として得られる出力データを記憶するための位置のアドレスを指定する。(本明細書の表記法として、アステリスク‘*’はC言語のアドレス変数の宣言を示す。) レジスタフィールド*function24は命令によって実行される関数を提供するメモリ内のアドレスを指定する。レジスタフィールド*state25は演算の状態の記述を含むアドレスを指定する。例えば、拡張可能Wide高速フーリエ変換(EXWIDEFFT)演算の例示的実施形態において、関数領域は、回転因子係数ならびに/またはFFTが算出される型および方式の記述、例えば、基数2、基数4、分割基数2/4、基数8もしくは他のバタフライ方式の指定、ならびに/または実行すべき精度、シフト、丸め、およびオーバフロー戦略を含む。この命令では、状態領域は、中間FFT計算の丸めおよび倍率変更を最適化することを目的として、制御および状況情報、例えば、そうした演算が割り込まれうるときの進行中のFFTの中間経過の内訳を、何回のバタフライ計算が行われたかのカウントとして、またはそれまでに生じた最大値の近似値として含む。フィールドによって提供されるメモリ領域のアドレスは、メモリブロックによって対応するフィールドの下に示されており、例えば、*inフィールド23はメモリブロック23aのアドレスを提供し、*outフィールドはメモリブロック26aのアドレス提供し、以下同様である。
[22]一代替実施形態においては、(別々のフィールド*inおよびフィールド*outではなく)単一の*in/outフィールドで、入力と出力両方に用いられるメモリブロックを指定することができる。加えて、単一の*functionフィールドで、関数と状況の両方に用いられるメモリブロックを指定することもできる。これらのフィールドのうちの1つまたは複数を、命令が複数の入力オペランドを有しうるようなときに複製することもでき、あるいは省略することもできる。例えば、*stateフィールドは、命令演算があまりにも短く、演算が割り込まれてもよいかどうかが重要ではない場合には省略されてもよい。状態領域25aの別の用法は、そうした命令が命令自体の内部で生じる、または入出力イベントといった別の発生源からの条件から生じる例外条件を処理するために割り込まれるようなときに、演算が一部しか完了されない可能性があることを指示する状態情報を含むことである。この条件の状態を有する命令を再実行することにより演算が中断されたところから演算を続行することが可能になり、あたかも演算が全く割り込まれなかったかのように演算を終了することができる。*stateでアドレス指定されるメモリブロックは、個々の命令に応じて、任意のサイズのものとすることもでき、なしとすることもできる。*functionフィールドは、命令の1つまたは複数の演算コードフィールド以外の関数指定が不要である場合には省略されてもよい。
[23]図2には、メモリの様々な領域からの情報がどのように用いられるかが示されている。*inフィールドでアドレス指定されるデータ23aは1つまたは複数の実行ユニット30への入力として用いられ、1つまたは複数の実行ユニット30は*function情報24aで指定されるように当該データに対して関数を実行する。結果は出力として*outメモリブロック26aに提供される。状態領域25aは、命令の入力オペランドと出力オペランドの両方を提供するのに用いられてもよく、演算の中間状態を保存するのに用いられてもよい。この状態情報は、汎用レジスタ内に含まれるのではなく、メモリアドレスによって指定されるため、プロセッサのレジスタ幅によって課される制限を越える追加情報を含むことができる。さらに、この状態の更新に際しての(例えば、100サイクルを超える)長い遅延に、プロセッサ・データ・パスのパイプライン制御、レジスタバイパスおよび例外処理論理を複雑にすることなく、メモリ階層において待ち時間を処理するための既存の機構によって対処することができる。
[24]一例示的実施形態において、メモリブロックのアドレスは、プロセッサのメモリシステムと、23a、24a、25a、および26aとして指示されているこれらの相対的に小さいメモリブロックとの間のメモリデータの転送を制御するのに用いられる。これらのメモリブロックをプロセッサのメモリシステム内のデータのキャッシュコピーとして管理することにより、命令の初期実行によって、これらのメモリブロックへのデータのコピーが、命令の演算の初期実行の前に、または命令の演算の初期実行とほぼ同時に開始される。同じ命令または同じメモリアドレスを用いる他の命令の後続の実行は、コピーが依然として有効である限り、データのコピーを繰り返さずに開始されうる。プロセッサ書き込みまたはコンピュータシステム内の他のプロセッサもしくは他のデバイスによって開始される書き込みを、これらの書き込みによりメモリブロックがこれらの演算に関して最新の状態に保持されるように、または一代替実施形態においては、無効もしくは有効でなくなったと表示されて、後続の命令実行がプロセッサのメモリデータを再コピーするように、追跡することができる。
[25]プロセッサのメモリシステムとこれらのメモリブロックとの間でデータがコピーされなければならない回数を減らすために、これらのメモリブロック(またはメモリブロックの各部分)にラベル付けする際に例示的実施形態では、M、O、E、S、I、または類似したコヒーレンシ方式で一般に指定されるキャッシュコヒーレンシ状態が用いられる。これらのメモリブロックの物理設計は、プロセッサのメモリシステムの設計によって決定される速度でのそうした転送を受け入れると同時に、機能ユニットによるアクセスを実質的により高い帯域幅とし、これらのオペランドがプロセッサのメモリシステムから直接転送された場合よりも広い帯域幅で機能ユニットが動作しうるようにするためのものである。
[26]図3に、命令内のフィールド30が、*in、*function、*state、および*outデータのうちのただ1つだけより多くの情報を記憶するメモリブロック33のアドレスを提供する拡張可能Wide命令の一実施形態を示す。ブロック33自体は、*in、*function、*state、および*outデータのうちの1つまたは複数を含むブロック33内の各領域までのオフセットを提供する記述子フィールド34を含む。ブロックは、任意の特定の関数の必要に応じて「その他」情報も含むことができる。記述子フィールドおよびオフセットの使用は様々なフィールドについての異なるサイズ(またはサイズなしさえも)を可能にするという利点を提供する。効率の便宜を得るために、これらの領域のうちの1つまたは複数が、好都合な境界に位置合わせされてもよく、かつ/または定義された領域間の未使用のパディング領域を含んでいてもよい。ブロックおよび記述子フィールドの使用の別の利点は、命令指定の柔軟性を可能にすることである。記述子フィールドは、例えば、命令指定の追加部分が提供される関数フィールド35までのオフセットを提供することができ、opcode22が任意の長さを有すること、および異なる命令が異なる有効長を有することを可能にする。実質上、opcode自体は拡張可能Wideオペランドとみなされうる。
[27]一実施形態において、ブロック33は、別々のフィールドからの情報を含む連続したメモリブロックである。一代替実施形態において、このブロックは、実行ユニット30が指定された演算を実行するのに必要な値を提供する、メモリの、または異なるメモリでさえもの、仮想アドレスまたは異なるエリアまでのオフセットも含むことができる。本手法の柔軟性は、例えば、メモリの他のエリアまでのオフセットを提供する情報を記述子34に追加することによる、将来の拡張を可能にする。「その他」フィールド36はこれを表している。一代替実施形態においては、小さいメモリブロックまたは専用レジスタが記述子情報を含むように設計されており、機能ユニットに合わせて適切な帯域幅で設計された物理的に別個のメモリブロックが、本明細書に記載されるキャッシュコヒーレントなコピー法によって埋められることになる、*in、*out、*function、および*stateデータを格納するのに用いられる。このように、物理設計は依然図2の物理設計に類似したものである。
[28]メモリブロック33は好ましくは、*in、*function、*state、および*outのすべての情報を含むが、それらのフィールドのうちの1つまたは複数が特定の命令に不要である場合、そのフィールドはブロック内に含まれなくてよい。よって、図2に示すようにメモリ23a、24a、25a、および26aの別々の領域を用いるのではなく、メモリの1つの領域33が*in、*function、*state、および*outの各フィールドのうちの適切なフィールドの必要な情報を含む。
[29]*in、*function、*state、および*outの各フィールドのうちの1つまたは複数のメモリ内の(1つまたは複数の)位置が特定された後で、プロセッサのメモリシステムからのオペランドデータが、プロセッサの関連実行ユニットの近くの、またはそれと関連付けられたキャッシュ・メモリ・ブロックへロードされる。キャッシュ・メモリ・ブロックは、プロセッサがその実行ユニットで用いることができる最も幅広いオペランドを記憶するのに十分な大きさであり、プロセッサのメモリシステムのアクセス帯域幅だけに制限されない。情報がキャッシュに入れられた後で、プロセッサの実行ユニットは次いで、当該演算に必要な*in、*function、*state、および*outデータを取得する(または記憶する)ことができる。ワイド・キャッシュ・メモリは、図2において、命令フィールドからの矢印が指し示す四角23a、24a、25a、および26aで示されている。そうした機能を果たすための例示的ハードウェアが、以下で論じる図7に示されている。
[30]メモリへ、またはメモリから転送されるべきデータは、プロセッサとメモリとの間のデータパスより大幅に「幅広い」ため、プロセッサとメモリとの間で当該データを移動するには複数のサイクルが用いられる。例えば、プロセッサ・メモリ間データパスが128ビット幅である場合には、2048ビットのオペランドの移動は、当該演算の実行に用いられる機能ユニットと関連付けられたキャッシュメモリに2048ビットのオペランドを配置するのにプロセッサ・メモリ間データパス上で16回の転送を必要とする。
[31]記述子を有するメモリブロックの使用は1命令につきただ1つのメモリブロックだけに制限されない。図3に示すように、命令内の他のフィールド37、38、および39が、各々任意選択で独自の記述子を有する他のメモリブロックにアドレスを提供することもできる。言い換えると、1つまたは複数のフィールドがより多くのメモリブロックを指定することができ、各メモリブロックは1つまたは複数の含まれるメモリブロックを指定する記述子を含むことができる。よって、代替実施形態においては、類似した命令が、単一のメモリブロックを指定するわずか1つのフィールドで符号化されてもよく、あるいは、各々様々なメモリブロックを指定する複数のフィールドを有していてもよい。記述子の使用は、単一の命令フィールドが、各々*in、*out、*function、または*stateの各タイプのうちの1つである複数のサブセット・メモリ・ブロックを指定することを可能にする。一例示的実施形態において、1つまたは複数のメモリブロックのための記述子の使用は任意選択であり、(1つまたは複数の)命令のopcodeフィールド内のビットまたは指定コードによって制御され、あるいは、1つまたは複数の命令フィールドによって指定されるアドレス内のビットまたは指定コードによって制御される。
[32]例えば、メモリブロックが2のべき乗サイズに揃えられたアドレスによって指定されるときには、アドレスの最下位端のところは1つまたは複数のゼロビットになる。この特性を用いて、メモリブロックの2のべき乗サイズの半分を加えることによって、アドレスはアドレスの符号化と、さらにメモリブロックのサイズの指定の両方を行うことができる。メモリブロックの最小サイズを指定のサイズに制限することによって、ゼロになる1つまたは複数の最下位アドレスビットが必ず生じるようにすることができる。例えば、拡張可能Wideオペランドの最小サイズが4バイトである場合、アドレスにメモリ・ブロック・サイズの半分(この場合は2)を加えた後で、アドレスとサイズの組み合わせはゼロである1つの最下位ビットを有することになる。例えば、最下位ビットを設定することにより記述子の存在を指定することができる。最下位ビットがクリアされている場合には、記述子をないものとみなすことができる。あるいは、この規則を逆にすることもでき、最下位ビットは設定されると記述子なしを指定し、クリアされると記述子を指定する。記述子フィールドの内容は、一般に、個々のサブメモリブロック自体が含まれるメモリブロック内のオフセットおよびサイズを含むことになる。オフセットおよびサイズは各々あるバイト数の項目として指定することができ、メモリブロックの残りの部分は依然として様々なサブメモリブロックに利用することができる。
[33]一代替実施形態においては、サブブロックを含むメモリブロックの全体サイズをメモリブロック自体の内部の固定フィールドにおいて符号化することができ、そのため、全体サイズは前述の2のべき乗だけに制限されない。サブブロックサイズは、オフセットフィールドにサイズの半分を加えることによって指定することもでき、これはコンパクトな表現を提供するが、サブブロック整列および2のべき乗のサブブロックサイズを必要とし、あるいは、サブブロックサイズおよびオフセットは別々に指定される項目とすることもでき、これはサブブロックの整列およびサイズの制限を取り除く。メモリブロックの全体サイズより大きいオフセットを指定するセキュリティ上の影響を回避するために、オフセットおよびサイズはそれらが許容できないほど大きい場合に例外をトリガすることができる。あるいは、オフセットおよびサイズは、全体サイズ−1の値(1のビットが許容される各位置には1のビットを有し、1のビットが許容されない各位置にはゼロのビットを有する値)を含むビットフィールドによってマスクされてもよい。これにより全体ブロック内にないサブブロックの参照が回避される。
[34]図4に、複数の拡張可能Wide命令を相互に連鎖させるための記述子の別の使用を示す。図4では、第1の拡張可能Wide命令はopcode22と、メモリブロック32のアドレスを提供するフィールド30とを含む。命令内の別のフィールド40は別のメモリブロック50のアドレスを提供する。ブロック32内の記述子フィールドはブロック内の様々なフィールドのオフセットを提供し、ブロック50内の類似した記述子フィールドは演算22からのオフセットを提供する。よって、演算22からの出力データを、演算60を実行する後続命令のための入力データとして用いることができる。このように例示のように拡張可能Wide命令を連鎖させることができることにより、複雑な演算を先行技術の手法より簡単なやり方で行うための柔軟性が提供される。例えば、順変換を行うEXWIDE−FFT演算を、変換された値を変換されたフィルタ係数で乗算するEXWIDE−MATRIX−MULTIPLYに連鎖させることができ、これをさらに、逆変換を行うEX−WIDE−FFT演算に連鎖させて、ディジタルフィルタ演算を行うことができる。
[35]図5に命令フィールド自体がop code22、*in23、*function24、*state25、および*outデータのアドレスを提供する複数の拡張可能Wide命令の連鎖を示す。第1の命令20の*outアドレスが、結果として得られる出力データが第2の命令の演算60の入力データとして用いられるバッファ21をどのように指定するかに留意されたい。
[36]以下の表1に拡張可能Wideオペランドを用いたいくつかの例示的命令を記載する。
表1 例示的拡張可能Wide演算
[37]図2、図3、図4、および図5に記載されている手法は、拡張可能Wide命令および/またはオペランドを用いた多数の演算の実行を可能にする。上記の表にはいくつかの例示的拡張可能Wide演算が記載されている。これらは、EXWIDEMATRIX(関数領域が入力ベクトルまたは行列で乗算されて出力ベクトルまたは行列を生じる行列要素を含む)、EXWIDEFILTER(関数がFIRまたはIIRフィルタの係数を含む)、EXWIDEMOTIONEST(関数が動きの最善の推定値を探索するためのオフセットの範囲を含む)、EXWIDERAKE(関数がレーキフィルタのパラメータを含む)、EXWIDEHUFFMAN(関数が変換記号および長さの表を含む)、EXWIDEHASH(関数がパラメータ、およびハッシュアルゴリズムに入力すべき初期値を含む)、EXWIDENEURALNET(関数が多層ニューラルネットワークの記述を含む)、ならびにEXWIDEFPGA(関数がフィールド・プログラマブル・ゲート・アレイの構成データを含む)を含む。
[38]他の拡張可能Wide命令は、分散関数または収集関数を実行する命令を含むことができる。例えば、EXWIDESCATTERまたはEXWIDEGATHERによって呼び出される演算は、関数領域によって指定されるアドレスのリストへデータを分散させ、または関数領域によって指定されるアドレスのリストからデータを収集することができる。加えて、入力および/または出力データをある型から別の型へ、例えば固定小数点から浮動小数点へ、またはその逆へ、また所望の精度間またはサイズ間で変換するEXWIDE命令を実行することもできる。
[39]いずれの場合にも、状態領域は入力、出力および関数オペランドのサイズおよび形状、ならびに、内部状態および進捗状況を含む、行われるべき演算の詳細を記述する。前述のように、いくつかの演算では、*in、*out、*function、および*stateの各パラメータのすべてが必要であるとは限らない。例えば、EXWIDE−MATRIX−MULTIPLY命令では、乗算されるべき2つの行列またはベクトルの各々について別々の*inパラメータがあってよく、*functionパラメータは省略されてもよい。*inパラメータは、行列オペランドのサイズおよび形状、ならびにオペランドの精度を指定する記述子を含むことができる。あるいは、*functionパラメータは、特に、他の行列演算ではなく行列乗算が行われるべきであること、ならびにオペランドの精度および乗算すべき行列の形状を指定することもできる。
[40]先の特許、例えば、上記の本発明者らの先行特許において、本発明者らはメモリからのWideオペランドの取得を可能にするWideオペランド指定子について記述した。この場合の指定子は、メモリの2のべき乗整列領域を指し示すポインタを、Wideオペランドのサイズおよび/または形状を指定する追加情報と共に含む。追加情報は、整列によりゼロになるように保証される下位ビットへと符号化される。前述のように、オペランドの最小サイズを指定することによって通常はゼロになるように保証されうる追加の下位ビットは、例えば、記述子ブロックがWideオペランドについて存在するかどうか指定するために配置されてもよい。
[41]本明細書に記載される拡張可能Wideオペランドはより柔軟であり、追加のフォーマットと共に、Wideオペランド自体の異なるフォーマットも用い、オペランドのサイズおよび形状の追加オプションを提供する。例えば、本発明のWideオペランド記述子は、整列の要件が少ない、または特定の整列を全く有しないメモリの領域を指し示すことができる。そうした場合には、オペランドのサイズおよび形状といった追加情報を含む下位ビットのより小さいセットが生じうる。これは、例えば、複数のWideオペランドがあり、1つのWideオペランドのサイズおよび/または形状を他のWideオペランドのサイズおよび/または形状から推測することができる場合、例えば、フィルタベクトルまたは行列が、整列Wideオペランドにおいて、非整列Wideオペランドに対して畳み込まれるようなときに生じうる。
[42]加えて、関連オペランドを含むWideオペランドの部分をさらに叙述する情報もメモリ領域内に含めることができる。例えば、様々な代替実施形態において、Wideオペランドメモリ領域内の記述子ブロックは、開始オフセットおよび終了オフセット、または開始オフセットおよび長さ、または長さおよび終了オフセットを含むことができる。長さおよびオフセットは、バイト数、要素サイズの倍数、またはそれ以外の単位で計ることができる。記述子ブロックは、指定メモリ領域の先頭や指定メモリ領域の末尾といった固定されたオフセットのところに含まれていてもよく、あるいは、固定されたオフセットのところで指示されるオフセットまたは長さ自体によって位置決めされてもよい。拡張可能Wideオペランド記述子によって指定されるメモリ領域内に記述子ブロックを組み込むことによって、Wideオペランドのソースまたはデスティネーションがもはや2のべき乗の全体サイズだけに制限されなくなる。
[43]様々な代替実施形態においては、例えば図3に示すように、通常はレジスタフィールドで指定されたはずの追加のサイズおよび/または形状情報は記述子ブロック32内に位置する。他の実施形態においては、オペランドサイズ指定も記述子ブロック内に位置しうる。オペランドのサイズおよび形状を指定する際に、この情報は、2を底とする対数の形の2のべき乗値として、または(サイズが要素数ではなくバイト数単位の全体サイズとして表されるようなときには)追加のオフセットを有するそうした値として表すことができる。あるいは、サイズ、形状またはオペランドサイズの値のいずれかを、バイト数、ビット数、または要素数の単純な2進数として表すこともできる。
[44]形状データは、要素の2次元配列の行または列サイズを特定することができ、次元数の指定に一般化することができ、この次元数は2に限定されず、1、2、3、または任意の最大数の次元とすることができ、各次元でのバイト数、ビット数、または要素数単位のサイズを伴う。一代替実施形態においては、次元を関連拡張可能Wideオペランドの全体サイズの知識によって暗黙的に示すこともでき、または全体サイズを配列の各次元のサイズの知識から推測することもできる。
[45]さらに、関連オペランドは拡張可能Wideオペランドメモリ領域の一部分だけを用いることができる。残りの領域は、プロセッサが、例えばEXWIDE命令の後に続く演算のための領域を、EXWIDE命令自体の演算を中断せずに用意するために書き込むことができる追加バッファ空間を含むことができる。例えば、EXWIDEHUFFMAN命令は、指定オフセットのところから開始し、結果オペランド空間が使い果たされ、入力ストリームが使い果たされ、または演算がそれ以外に打ち切られるまで続くストリームを復号することができる。
[46]本発明の別の利点は、プロセッサが、動作中の命令、例えばEXWIDEHUFFMAN命令を中断せずに入力ストリームに追加記号を付加する書き込み演算を行うことができることである。例えば、入力ストリームは、循環バッファの境界を記す記述子ブロック内のオフセット値を伴う循環バッファとして表すことができる。入力ストリームに有効記号を追加するように記述子ブロックに書き込むことにより、EXWIDEHUFFMANに、入力ストリームの記述子ブロックが変更されなかった場合には停止したはずの境界を越えて続行させることができる。同様に、一代替実施形態においては、結果オペランドから出力記号を除去し、それによって結果オペランド内の領域を空けるために記述子ブロックに書き込むことにより、EXWIDEHUFFMANに、入力ストリームの記述子ブロックが変更されなかった場合には停止したはずの境界を越えて続行させることができる。加えて、入力ストリームがどの程度まで消費され、出力ストリームが命令の完了時にどの程度まで埋まったかを表すように、入力ストリームと出力ストリーム両方の記述子ブロックをEXWIDEHUFFMAN命令によって更新することもできる。あるいは、記述子ブロックは、命令が進行するに従って入力ストリームが埋まり、または出力ストリームが空くことを同時に可能にするように、中間段階で更新されてもよい。一代替実施形態においては、入力ストリームおよび/もしくは出力ストリームの記述子ブロック、または別個の「*state」メモリ領域の記述子ブロックがそうした中間更新の頻度を制御する。EXWIDEHUFFMAN命令は、他の同様のストリーム動作命令をどのように用いることができるかを例示するものである。
[47]記述子ブロックでこれらの次元、サイズ、および要素サイズを指定することによって、拡張可能Wideオペランド内の情報は本質的に自己記述的となり、そのため、この情報は、命令自体で指定されるにせよ、命令によって指定される(1つまたは複数の)レジスタの値内で指定されるにせよ、もはや命令によって指定される必要がなくなる。また、次元、サイズ、および要素サイズの値は、結果オペランドの次元、サイズ、および要素サイズの値も暗黙的に指示しうる。Wideオペランドを用いた命令は、これらの値を結果オペランドのメモリ領域に書き込むこともでき、あるいは、一代替実施形態においては、これらの値を記述子領域に、または関数もしくは状態を表す領域に書き込むこともできる。
[48]拡張可能Wide命令、例えばEXWIDEHUFFMAN命令の一代替実施形態においては、第1のキャッシュコヒーレンス維持戦略として、入力ストリームおよび/または出力ストリームの記述子ブロックは、機能ユニットが命令を実行している間は機能ユニットだけに限られるキャッシュコヒーレンス状態で維持される。プロセッサ、すなわち命令を開始したプロセッサ、または任意の他のプロセッサもしくは入出力装置が記述子ブロックを読み出そうとする場合、機能ユニットは入力ストリームおよび出力ストリームの処理の現在の中間状態を反映するコピーを提供することができる。あるいは、記述子ブロックの要素が、機能ユニットがストリームをアクティブに処理しているか否か、言い換えると、命令が完了したかどうかを指示してもよい。新しく更新された記述子ブロックが有効になるはずであると指示する値の出力ストリームの読み出しまたは入力ストリームへの書き込みは、関連記述子ブロックが読み出された後で安全に行うことができる。
[49]さらに代替のキャッシュコヒーレンス維持戦略として、キャッシュ・コヒーレンス・システムに関する記述子ブロックの処理は、最終値を確立することができるまで命令によって変更されうる出力ストリームのいかなる部分の読み出しも中止し、ブロックし、または遅延させることである。その最終値が存在する出力メモリ空間の部分の出力ストリームの読み出しは正常に行うことができる。入力ストリームへの書き込みは、命令によってアクティブに使用されていない入力ストリームの領域に対してのみ許容される。このように、メモリのアーキテクチャ状態が維持され、しかも、入力Wideオペランドおよび出力Wideオペランドへのいくつかの演算は命令の演算と並行して行うことができる。言い換えると、メモリ内のWideオペランドの状態は、いかなる中間状態も見えずに、あたかも命令が一挙に完了するかのように維持される。とは言え、そうした演算を開始した後で、前の演算からの結果を出力ストリームから読み出すことができ、命令の後続の呼び出しの新しい値を入力ストリームに書き込むことができ、これらはすべて演算が進行している間に行われる。記述子に作用したときに初めて、あたかも演算が一挙に行われたかのように値を維持するために演算が直列化される。
[50]プログラマは、例えば、命令のうちの1つまたは複数における制御フィールド、命令によって参照されるレジスタ、または入力記述子もしくは出力記述子もしくは*function Wideオペランドもしくは*state Wideオペランドによって、適切なキャッシュコヒーレンス維持戦略を選択することができる。この手法は、高度に逐次的に進行する他の演算において、例えば、有限インパルス応答(FIR)フィルタや無限インパルス応答(IIR)フィルタにおいても用いることができる。
[51]行列を乗算するときには、数学規則は、行列は、左右のオペランド配列の指定された次元、多くの場合、左の最後の次元および右の最初の次元に沿った積の和によって結合されるというものである。しかし、乗算される行列は、転置され、またはそうした規則に適応するように何らかの他のやり方で再構築されることが必要となりうることも一般的である。例えば、EXWIDEMATRIX命令は、オペランドの記述子ブロック、またはレジスタオペランド、または命令内に、配列が乗算される際に、乗算されるべき配列の有効な転置または再構築に導く情報を含むことができる。別の例として、EXWIDEMATRIX−MULTIPLYは、従来の行列乗算でオペランドを結合する前に左オペランドを転置するように構成されうる。あるいは、EXWIDEMATRIX命令は、数学規則とは異なりうる積の和と結合するように、左オペランド配列および/または右オペランド配列のどちらかまたは両方を指定してもよく、これは、左オペランド配列および/または右オペランド配列のどちらかまたは両方を転置するのと類似した結果を有しうる。
[52]拡張可能Wide命令の別の例は、配列オペランドを転置し、またはそれ以外に再構築し、ソース・オペランド・データを新しい結果オペランドにコピーし、またはソースオペランドの代わりの結果オペランドを同じメモリ領域に配置する、EXWIDERESHAPE命令である。別のEXWIDEEXTRACT命令は、パラメータレジスタによって指定されるパラメータ、またはWideオペランドもしくはWideオペランドの記述子ブロックで指定されるパラメータを用いてWideオペランドからより小さい要素サイズ結果を抽出する。EXWIDERESHAPE命令の関数は、配列オペランドを転置し、または他のやり方で再構築すると共に、ソース配列から要素を抽出するために、EXWIDEEXTRACT命令と組み合わせることができる。一代替実施形態においては、EXWIDERESHAPE命令とEXWIDEEXTRACT命令のどちらかまたは両方の関数を、EXWIDEMATRIX−MULTIPLY、EXWIDEMATRIX−MULTIPLY−ADD、EXWIDEMATRIX−ADDといった他のEXWIDE命令と結合することができる。
[53]次元、サイズ、形状、および/または要素サイズの各パラメータは、各値を埋めるEXWIDE命令の実行前に結果拡張可能Wideオペランドに書き込まれる記述子によって指定することができる。そうした一実施形態においては、記述子ブロックの先の値は、パラメータ値と整合性のある値を生成するように演算に影響を及ぼす。必要に応じて、記述子ブロックは、転置もしくはそれ以外の再構築、抽出、または積の和との指定された配列次元に沿った結合の演算を制御することができる。記述子ブロック値の中にはオペランドに影響を及ぼすものもあり、有効な結果を生み出すように入力オペランドと整合性を有する値になるよう強いられるものもある。
[54]EXWIDE命令によって書き込まれた記述子ブロック値は、記述子ブロックと記述子ブロックが記述するデータとの組み合わせが一緒に収集されて、自己完結的、自己記述的なデータ構造として扱うことのできる単一の拡張可能Wideメモリブロックになるという点で、結果を自己記述的にする。加えて、全拡張可能Wideオペランドメモリ領域の値を、第2のEXWIDE命令のソースとして直接用いることもできる。一代替実施形態において、EXWIDE命令の演算は、結果オペランドの記述子ブロックを可能な限り早く、しかし少なくともすべての結果値の生成の完了の前に埋めるように優先的に進行する。これは、先のWideオペランド結果をWideオペランドソースとして用いる第2のEXWIDE命令が、第1のEXWIDE命令の完了の前に引き続いて計算処理を開始することを可能にする。一代替実施形態においては、第2の演算が制御されたやり方でWideオペランドソース値を獲得することを可能にするために、MOESIまたは類似したキャッシュ・コヒーレンス・プロトコルが用いられる。
[55]レジスタ関連の厄介な問題から切り離されるため、EXWIDEFFT演算を、(ただ1つの単一スライスではなく)全256点の複素FFT、あるいは1024点や4096点のFFTといった、より強力なFFT計算ブロックへと拡張することができる。これらの同じEXWIDEFFT演算を、単一の乗算器まで縮小した実装、あるいは16乗算器もしくは64乗算器の設計まで、または全FFT段ほども、もしくは全FFTを一度にさえも可能なより大規模な設計まで拡大した実装で行うことができる。大規模では、乗算器は固定回転因子値を組み込むことができ、そのため、乗算器は、より一般的でおおむねより大型の2オペランド乗算器ではなく定数乗算ハードウェアとして実装されうる。一代替実施形態においては、大量の並列性を有する実施形態との整合性を維持しつつ電力消費を最小化するために、同じ演算がわずか1つの単一整数乗算加算器を含む機能ユニットで行われうる。
[56]拡張可能Wide演算の1つの重要な利点は、計算におけるより大きな精度に適応するようにソースオペランドと結果オペランドとのサイズおよび形状が異なりうることである。例えば、EXWIDEMATRIXでは、結果オペランドはソースオペランドと比べて2倍、または4倍でさえものサイズとすることができるはずであり、ソースオペランドは同じサイズでなくてもよく、例えば、8ビット行列と16ビット行列との乗算が、丸めなし、オーバフローなしで32ビットの結果を有しうる。
[57]EXWIDEMATRIX命令はEXWIDEMATRIX−MULTIPLY命令として実行することができ、EXWIDEMATRIX−MULTIPLY命令は、Wideオペランド記述子または*functionパラメータもしくは*stateパラメータから取得されたサイズおよび形状パラメータを用い、*functionパラメータもしくは*stateパラメータから、または命令のサブフィールドから指定された制度および丸めパラメータを用いて、行列・ベクトル乗算または行列・行列乗算を行う。一代替実施形態において、EXWIDEMATRIX命令は、行列・ベクトルの場合と行列・行列の場合とについて別々のEXWIDEMATRIX−MULTIPLY−MATRIX−VECTOR命令およびEXWIDEMATRIX−MULTIPLY−MATRIX−MATRIXとして実行されうる。別の代替実施形態において、EXWIDEMATRIX命令は、要素ごとのベクトル乗算を行うEXWIDEMATRIX−MULTIPLY−VECTOR−VECTOR命令として実行されてもよく、またはEXWIDEMATRIX命令は、EXWIDEMATRIX−MULTIPLYと類似したパラメータを用いて行列対行列の加算またはベクトル対ベクトルの加算を行う、EXWIDEMATRIX−ADD命令として実行されてもよい。
[58]別の実施形態においては、EXWIDEMATRIX命令は、乗算演算と加算演算との間で中間精度または範囲を失うおそれなしで、単一の命令において行列・ベクトル乗算または行列・行列乗算を行列対行列の加算と組み合わせる、EXWIDEMATRIX−MULTIPLY−ADD命令として実行されうる。さらに、EXWIDEMATRIX命令は、要素ごとの乗算をすべての積の水平和と組み合わせる、乗算・加算演算を行うEXWIDEMATRIX−MULTIPLY−SUM命令として実行されてもよく、または上記の場合の組み合わせを単一の命令として行い、レジスタまたは拡張Wideオペランドパラメータを用いて各場合を区別する命令として詳述されてもよい。
[59]EXWIDE演算でアドレス指定された各メモリ領域は、対応するEXWIDE実行ユニットに組み込まれたワイドキャッシュへ転送される。入力キャッシュおよび出力キャッシュは、高度な局所性があるときに利益を得る。すなわち、キャッシュライン内の単一のデータ項目が作用を受けると、その他の項目も作用されることになる。関数キャッシュおよび状態キャッシュは高度の再利用から利益を得る。すなわち、関数データおよび状態データがメモリ階層からキャッシュへフェッチされた後で、これらは何度も再利用される。典型的なキャッシュはシングルポートもしくはデュアルポートのメモリセル(または、1のFFT根、いわゆる回転因子の場合のように、ROMセルさえも)を含み、必要とされるキャッシュエントリの数は少なめ(例えば1〜8エントリ)であり、そのため、エリアおよび電力損失は、同じオペランド帯域幅についてマルチポートのレジスタ・ファイル・アクセスが消費するはずのものよりも低い。
[60]拡張可能Wide演算ハードウェアは、汎用ホストプロセッサとの統合を簡素化しつつ、ASICの低いエリアおよび電力に接近することができる。例えば、EXWIDEHUFFMAN実行ユニットは、ハフマン復号に特化された狭い(例えば、32ビットの整数以下の)データパスを備えることができ、アイドル状態のときには電力がオフにゲート制御される。単一のEXWIDEHUFFMAN命令を発することにより、ホストプロセッサは自律的にハフマンユニット内で記号の長いストリーム(例えば何千も)の符号化に着手し、同時にホストは他の命令を進める。ホストは、状態メモリ領域またはメモリマップド・イベント・レジスタを読み出すことによってハフマン状況を問い合わせることができる。あるいは、イベントレジスタは、ホストに合図するための割込みを可能にする関連付けられたメモリマップドマスクを備えることもできる。
[61]多数の実行ユニットが特定の拡張可能Wide演算を実行することができる。例えば、高圧縮(伸張)性能を必要とするサーバアプリケーションでは、各々が単一のEXWIDEHUFFMAN命令を有する複数の小型のシリアル・ハフマン・ユニットが各々開始され、次いで、記号の複数の長いストリームを並列に独立して処理することができるはずである。
[62]拡張可能Wide実行ユニットは、メモリ階層における非同期性に適応する同じ機構を用いて、ホストプロセッサとは異なるクロック速度で非同期的に動作することができる。例えば、EXWIDEFILTER実行ユニットは、外部の混合信号インターフェースに同期されたクロック速度でメモリの循環バッファ領域に置かれたデータに対してIIRフィルタまたはFIRフィルタを行うことにより、インターフェースの確実なロッキングのための高精度のリアルタイムフィードバック信号を提供することができる。
[63]図6に、チップ上の大規模システムが、(例えば、パケットストリームのスカラ処理に適した)狭い低電力コアから、(例えば、4G無線チャネルまたはオーディオチャネルのベクトル処理に適した)中程度の幅のコア、(例えば、HDビデオおよび3Dグラフィックスの行列処理に適した)きわめて幅広いコアにまで及ぶ多くのコアをどのように含みうるかを示す。拡張可能Wide演算の単一の命令セットがきわめて広範囲の幅のコア上で正確に実行される。したがって、ホスト・オペレーティング・システムのハイパーバイザは、性能および電力損失を最適化するために最善の幅のコアにタスクを割り振ることができる。アプリケーション開発者らはこの割り振りを事前に適合させることができる。あるいは、コア・モニタリング・ハードウェアを用いて、たとえアプリケーション開発者らがコア割り振りを事前に予想するための情報またはリソースを欠いているときでさえも、最適な性能および電力を得るようタスクを動的に割り振るためにハイパーバイザによって利用される性能統計(例えば、実行ユニット利用、キャッシュミスなど)のデータベースを維持することもできる。
[64]図7に、前述の拡張可能Wide命令を実行するのに用いられうるプロセッサの一例としてブロック図形式で汎用プロセッサを示す。図には、(Aユニットとラベル付けされた)アクセスユニット102の4つのコピーが示されている。各アクセスユニット102は、レジスタファイルおよび機能ユニット(不図示)に結合されたアクセス命令フェッチ待ち行列を含む。典型的な実施形態において、プロセッサの各スレッドはおおよそ64個程度の汎用レジスタを有しうる。アクセスユニットは4つの同時実行スレッドについて独立して機能し、算術命令および分岐命令を実行することによってプログラム制御フローを各々算出し、ロード命令および記憶命令を実行することによってメモリにアクセスする。アクセスユニット102は上述の拡張可能Wideオペランド命令のためのWideオペランド記述子を提供する。図7において、メモリシステムは、キャッシュメモリ104、外部バスインターフェース106、およびメイン・メモリ・システム108を入出力装置110と共に含む。必要に応じて、追加のキャッシュメモリ、例えばセカンダリキャッシュも設けることができる。アクセスユニット102は、アクセス・レジスタ・ファイルのための結果を生成し、共用メモリシステム104、106、および108にメモリアドレスを提供する。メモリ階層は、オンチップ命令およびデータメモリ、命令およびデータキャッシュ、仮想メモリ設備、および外部デバイスへのインターフェースを含むことができる。
[65]メモリシステムからフェッチされたメモリの内容は、アクセスユニットによって実行されない実行命令と組み合わされ、(「Eユニット」とラベル付けされた)4つの実行命令ユニット105へ入力される。拡張可能Wide命令について、メモリシステムからフェッチされたメモリの内容は、バス120によって拡張可能Wideオペランドキャッシュ116にも提供される。Eユニット115内で、命令およびメモリデータは、実行レジスタ・ファイル・ソース・オペランドをフェッチする実行レジスタファイルに提示される。それらの命令は、4つのスレッドからのどの命令が利用可能な実行機能ユニット130、132、134、136、および138へ経路制御されるべきか選択するアービトレーションユニット124に結合される。各実行機能ユニットは、拡張可能Wideオペランドを保持するためのキャッシュメモリ116を含む 実行機能ユニット130〜138は、拡張可能Wideオペランドを用いて様々な演算を行うように最適化された算術論理演算装置である。例えば、行列実行機能ユニットは、行列に対する演算を行うように設計されたユニットである。opcode内のフィールドが、特定の命令に用いられる実行機能ユニットを指定することができる。
[66]実行機能ユニット130〜138は、各々、前述の拡張可能Wideオペランドを含むソースオペランドの記憶を可能にするために専用記憶116を含む。これらのキャッシュメモリは典型的には、プロセッサとメモリとの間のデータパス140の幅の倍数である幅を有する。よって、データパス140の幅が128ビットである場合、専用記憶116は好ましくは、その128but幅の倍数の幅、例えば、256ビット、512ビット、1024ビット、または2048ビットの幅を有する。当然ながら、実行されるべき個々の関数および関数と関連付けられたデータに応じて、オペランドの中には専用記憶の全幅を利用するものもあり、そうでないものもあるであろう。前述のように、メモリ108から個々の機能ユニットと関連付けられた記憶116へのこれらの拡張可能Wideオペランドの転送は、拡張可能Wideオペランドの各部分が専用記憶116へ順次にロードされる複数サイクルを必要とすることになる。しかし、ロードされた後には、各拡張可能Wideオペランドはほぼ同時に用いられうる。
[67]本発明のこの記述は例示と説明を目的として提示したものである。網羅的であることも、本発明を記述したとおりの形態だけに限定することも意図されておらず、上記の教示に照らして多くの改変および変形が可能である。実施形態は、本発明の原理および本発明の実際の適用を説明するために選択し、記述したものである。この記述は、当業者が様々な実施形態において、個々の用途に適した様々な改変を伴って本発明を最適に利用、実施することを可能にするであろう。本発明の範囲は添付の特許請求の範囲によって定義される。
Claims (20)
- 幅を有するデータパスによってプロセッサに結合されたメモリに記憶されたオペランドを必要とする命令を実行するための前記プロセッサであって、第1の拡張可能Wide命令が、
前記プロセッサによって行われるべき第1の演算を定義する第1の演算コードフィールドであって、前記第1の演算は前記データパスの前記幅より広い第1のオペランドを必要とする、第1の演算コードフィールドと、
前記メモリ内の第1のデータブロックの第1のアドレスを指定する前記第1の拡張可能Wide命令内のフィールドと、
を含み、前記メモリ内の前記第1のデータブロックは、前記第1のデータブロック内の、少なくとも(i)前記プロセッサによって行われるべき前記演算において用いられるべき第1の入力データと(ii)前記第1の入力データに対する前記演算を行う際に用いられるべき第1の関数データの位置を指定する第1の記述子フィールドを含み、
前記第1の入力データおよび前記第1の関数データのうちの少なくとも1つは前記データパスより幅広い、プロセッサ。 - 前記プロセッサによって行われるべき前記第1の演算の実行を完了する前に、前記メモリと前記プロセッサとの間で前記第1のデータブロックを前記プロセッサと関連付けられたキャッシュメモリへ転送するための複数の転送が必要とされる、請求項1に記載のプロセッサ。
- 前記第1の記述子フィールドは、前記第1のデータブロック内の、前記プロセッサによって行われるべき前記第1の演算からの第1の出力データを記憶するのに用いられるべき第1の出力フィールドの位置をさらに指定する、請求項1に記載のプロセッサ。
- 前記第1の記述子フィールドは、前記第1のブロック内の、前記プロセッサによって行われるべき前記第1の演算からの第1の状態データを記憶するのに用いられるべき第1の状態フィールドの位置をさらに指定する、請求項1に記載のプロセッサ。
- 前記第1の拡張可能Wide命令は少なくとも1つの行列に対して行われるべき算術演算を指定する行列命令を含み、前記第1の関数データは前記少なくとも1つの行列の各々の少なくとも次元を含む、請求項1に記載のプロセッサ。
- 前記第1の拡張可能Wide命令は復号演算を指定するハフマン命令を含み、前記第1の関数データは少なくとも変換記号を記述する情報を含む、請求項1に記載のプロセッサ。
- 前記第1の拡張可能Wide命令は変換演算を指定する高速フーリエ変換命令を含み、前記第1の関数データは少なくともバタフライの基数を記述する情報を含む、請求項1に記載のプロセッサ。
- 前記第1の拡張可能Wide命令はデータを分散させるためのデータ処理演算を指定する分散命令を含み、前記第1の関数データは少なくとも前記データの分散先である位置のオフセットを記述する情報を含む、請求項1に記載のプロセッサ。
- 前記第1の拡張可能Wide命令はデータを収集するためのデータ処理演算を指定する収集命令を含み、前記第1の関数データは少なくとも前記データの収集元である位置のオフセットを記述する情報を含む、請求項1に記載のプロセッサ。
- 第2の拡張可能Wide命令を実行するための請求項2に記載のプロセッサであって、前記第2の拡張可能Wide命令は、
前記プロセッサによって行われるべき第2の演算を定義する第2の演算コードフィールドであって、前記第2の演算は前記データパスの前記幅より広い第2のオペランドを必要とする、第2の演算コードフィールドと、
前記メモリ内の第2のデータブロックの第2のアドレスを指定する前記第2の拡張可能Wide命令内のフィールドと、
を含み、前記メモリ内の前記第2のデータブロックは、前記第2のデータブロック内の、少なくとも(i)前記プロセッサによって行われるべき前記演算において用いられるべき第2の入力データと(ii)前記第2の入力データに対する前記演算を行う際に用いられるべき第2の関数データの位置を指定する第2の記述子フィールドを含み、
前記第2の入力データおよび前記第2の関数データの少なくとも一方は前記データパスより幅広く、前記第2の入力データは前記第1の出力データの少なくとも一部を含む、
請求項2に記載のプロセッサ。 - 前記第1の記述子フィールドは、
前記第1の入力データの開始オフセットおよび終了オフセット、
前記第1の入力データの開始オフセットおよび長さ、ならびに
前記第1の入力データの前記長さおよび終了オフセット
のうちの少なくとも1つを含む、請求項2に記載のプロセッサ。 - 前記第1の演算コードフィールドは前記第1の記述子フィールドの有無を示すビットを含む、請求項2に記載のプロセッサ。
- 前記第1の演算コードフィールドは前記第1の演算を行う際に用いられるべき実行ユニットを指定する情報を含む、請求項2に記載のプロセッサ。
- 前記第1のデータブロックは前記第1のデータブロックの内容を記述する情報を含む、請求項13に記載のプロセッサ。
- 前記第1の記述子フィールドは、前記演算において用いられるべき前記第1の入力データの前記位置を、少なくとも、前記メモリ内の前記第1のデータブロックの前記アドレスと前記第1の入力データが記憶されている前記第1のデータブロック内の位置との間のオフセットを指定することによって指定する、請求項2に記載のプロセッサ。
- 前記第1の記述子フィールドは、前記演算を行う際に用いられるべき前記第1の関数データの前記位置を、少なくとも、前記メモリ内の前記第1のデータブロックの前記アドレスと前記第1の関数データが記憶されている前記第1のデータブロック内の位置との間のオフセットを指定することによって指定する、請求項15に記載のプロセッサ。
- 幅を有するデータパスによってプロセッサに結合されたメモリに記憶されたオペランドを必要とする命令を実行するための前記プロセッサであって、第1の拡張可能Wide命令が、
前記プロセッサによって行われるべき第1の演算を定義する第1の演算コードフィールドであって、前記第1の演算は前記データパスの前記幅より広い第1のオペランドを必要とする、第1の演算コードフィールドと、
行われるべき前記第1の演算のために入力されるべきデータを含むメモリ内の第1のデータ入力領域のアドレスを指定する第1のデータ入力フィールドと、
前記プロセッサによって行われるべき第1の関数に関する情報を含む前記メモリ内の第1の関数領域のアドレスを指定する第1の関数フィールドと、
前記プロセッサによって行われるべき前記演算の状態に関する情報を記憶するための前記メモリ内の状態領域のアドレスを指定する状態フィールドと、
を含み、前記第1の演算コードフィールド、前記第1のデータ入力フィールド、前記第1の関数フィールド、および前記状態フィールドのうちの少なくとも1つが、行われるべき前記演算によって必要とされる前記メモリ内の第1のデータブロックのアドレスを提供し、前記第1のデータブロックは前記データパスの前記幅より広い、プロセッサ。 - 前記プロセッサによって行われるべき前記第1の演算の実行を完了する前に、前記メモリと前記プロセッサとの間で前記第1のデータブロックを前記プロセッサと関連付けられたキャッシュメモリへ転送するための複数の転送が必要とされる、請求項17に記載のプロセッサ。
- 前記第1の演算コードフィールドは前記第1の演算を行う際に用いられるべき実行ユニットを指定する情報を含む、請求項18に記載のプロセッサ。
- 第2の拡張可能Wide命令を実行するための請求項17に記載のプロセッサであって、前記第2の拡張可能Wide命令は、
前記プロセッサによって行われるべき第2の演算を定義する第2の演算コードフィールドであって、前記第2の演算は前記データパスの前記幅より広い第2のオペランドを必要とする、第2の演算コードフィールドと、
行われるべき前記第2の演算のために入力されるべきデータを含むメモリ内の第2のデータ入力領域のアドレスを指定する第2のデータ入力フィールドと、
前記プロセッサによって行われるべき第2の関数に関する情報を含む前記メモリ内の第2の関数領域のアドレスを指定する第2の関数フィールドと、
を含み、前記第2の演算コードフィールド、前記第2のデータ入力フィールド、および前記第2の関数フィールドのうちの少なくとも1つが、行われるべき前記演算によって必要とされる前記メモリ内の第2のデータブロックのアドレスを提供し、前記第2のデータブロックは前記データパスの前記幅より広い、請求項17に記載のプロセッサ。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462019101P | 2014-06-30 | 2014-06-30 | |
US62/019,101 | 2014-06-30 | ||
US14/749,955 US9785565B2 (en) | 2014-06-30 | 2015-06-25 | System and methods for expandably wide processor instructions |
US14/749,955 | 2015-06-25 | ||
PCT/US2015/038078 WO2016003820A2 (en) | 2014-06-30 | 2015-06-26 | System and methods for expandably wide operand instructions |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2017520873A true JP2017520873A (ja) | 2017-07-27 |
Family
ID=54930563
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017520759A Pending JP2017520873A (ja) | 2014-06-30 | 2015-06-26 | 拡張可能Wideオペランド命令のためのシステムおよび方法 |
Country Status (5)
Country | Link |
---|---|
US (2) | US9785565B2 (ja) |
EP (1) | EP3161616A4 (ja) |
JP (1) | JP2017520873A (ja) |
CN (1) | CN107077327A (ja) |
WO (1) | WO2016003820A2 (ja) |
Families Citing this family (48)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9378560B2 (en) * | 2011-06-17 | 2016-06-28 | Advanced Micro Devices, Inc. | Real time on-chip texture decompression using shader processors |
US9785565B2 (en) | 2014-06-30 | 2017-10-10 | Microunity Systems Engineering, Inc. | System and methods for expandably wide processor instructions |
US9886418B2 (en) * | 2015-04-28 | 2018-02-06 | Intel Corporation | Matrix operands for linear algebra operations |
US9886377B2 (en) * | 2015-10-05 | 2018-02-06 | Intel Corporation | Pipelined convolutional operations for processing clusters |
CN105488565A (zh) * | 2015-11-17 | 2016-04-13 | 中国科学院计算技术研究所 | 加速深度神经网络算法的加速芯片的运算装置及方法 |
GB2548908B (en) * | 2016-04-01 | 2019-01-30 | Advanced Risc Mach Ltd | Complex multiply instruction |
CN111651203B (zh) * | 2016-04-26 | 2024-05-07 | 中科寒武纪科技股份有限公司 | 一种用于执行向量四则运算的装置和方法 |
EP3563307B1 (en) | 2017-02-23 | 2023-04-12 | Cerebras Systems Inc. | Accelerated deep learning |
CN110337635B (zh) | 2017-03-20 | 2023-09-19 | 英特尔公司 | 用于点积操作的系统、方法和装置 |
WO2018193361A1 (en) | 2017-04-17 | 2018-10-25 | Cerebras Systems Inc. | Microthreading for accelerated deep learning |
US11488004B2 (en) | 2017-04-17 | 2022-11-01 | Cerebras Systems Inc. | Neuron smearing for accelerated deep learning |
WO2018193354A1 (en) | 2017-04-17 | 2018-10-25 | Cerebras Systems Inc. | Wavelet representation for accelerated deep learning |
US10776699B2 (en) * | 2017-05-05 | 2020-09-15 | Intel Corporation | Optimized compute hardware for machine learning operations |
TWI769810B (zh) * | 2017-05-17 | 2022-07-01 | 美商谷歌有限責任公司 | 特殊用途神經網路訓練晶片 |
WO2019009870A1 (en) | 2017-07-01 | 2019-01-10 | Intel Corporation | SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE |
CN108427573B (zh) * | 2018-03-01 | 2020-11-03 | 中国科学院计算技术研究所 | 用于处理器的适于短操作数的扩展指令执行方法及装置 |
US11340936B2 (en) | 2018-05-04 | 2022-05-24 | Apple Inc. | Compiling and scheduling transactions in neural network processor |
US11048509B2 (en) | 2018-06-05 | 2021-06-29 | Qualcomm Incorporated | Providing multi-element multi-vector (MEMV) register file access in vector-processor-based devices |
US20190392287A1 (en) | 2018-06-22 | 2019-12-26 | Samsung Electronics Co., Ltd. | Neural processor |
US10678548B2 (en) | 2018-08-24 | 2020-06-09 | Apple Inc. | Pipelined allocation for operand cache |
US11328207B2 (en) | 2018-08-28 | 2022-05-10 | Cerebras Systems Inc. | Scaled compute fabric for accelerated deep learning |
WO2020044208A1 (en) | 2018-08-29 | 2020-03-05 | Cerebras Systems Inc. | Isa enhancements for accelerated deep learning |
WO2020044238A1 (en) | 2018-08-29 | 2020-03-05 | Cerebras Systems Inc. | Processor element redundancy for accelerated deep learning |
US11764940B2 (en) | 2019-01-10 | 2023-09-19 | Duality Technologies, Inc. | Secure search of secret data in a semi-trusted environment using homomorphic encryption |
CN112347186B (zh) * | 2019-08-09 | 2023-02-28 | 安徽寒武纪信息科技有限公司 | 数据同步方法及装置以及相关产品 |
KR102611169B1 (ko) | 2019-04-04 | 2023-12-06 | 캠브리콘 테크놀로지스 코퍼레이션 리미티드 | 데이터 처리 장치 및 관련 제품 |
CN112347185A (zh) * | 2019-08-09 | 2021-02-09 | 安徽寒武纪信息科技有限公司 | 数据同步方法及装置以及相关产品 |
CN111831337B (zh) | 2019-04-19 | 2022-11-29 | 安徽寒武纪信息科技有限公司 | 数据同步方法及装置以及相关产品 |
CN112347026B (zh) * | 2019-08-09 | 2023-03-31 | 安徽寒武纪信息科技有限公司 | 数据同步方法及装置以及相关产品 |
CN112306945B (zh) * | 2019-07-30 | 2023-05-12 | 安徽寒武纪信息科技有限公司 | 数据同步方法及装置以及相关产品 |
CN111783992A (zh) * | 2019-04-04 | 2020-10-16 | 安徽寒武纪信息科技有限公司 | 数据处理装置及相关产品 |
CN111831722A (zh) * | 2019-04-19 | 2020-10-27 | 安徽寒武纪信息科技有限公司 | 数据同步方法及装置以及相关产品 |
CN111782577B (zh) * | 2019-04-04 | 2023-03-24 | 安徽寒武纪信息科技有限公司 | 数据处理装置及方法以及相关产品 |
CN111782133A (zh) * | 2019-04-04 | 2020-10-16 | 安徽寒武纪信息科技有限公司 | 数据处理方法及装置以及相关产品 |
CN112347027A (zh) * | 2019-08-09 | 2021-02-09 | 安徽寒武纪信息科技有限公司 | 数据同步方法及装置以及相关产品 |
CN111782274B (zh) * | 2019-04-04 | 2023-03-31 | 安徽寒武纪信息科技有限公司 | 数据处理装置及相关产品 |
CN111831329B (zh) * | 2019-04-19 | 2022-12-09 | 安徽寒武纪信息科技有限公司 | 数据处理方法及装置以及相关产品 |
US11211944B2 (en) | 2019-04-17 | 2021-12-28 | Samsung Electronics Co., Ltd. | Mixed-precision compression with random access |
US11671111B2 (en) | 2019-04-17 | 2023-06-06 | Samsung Electronics Co., Ltd. | Hardware channel-parallel data compression/decompression |
CN111061510B (zh) * | 2019-12-12 | 2021-01-05 | 湖南毂梁微电子有限公司 | 一种可扩展的asip结构平台及指令处理方法 |
US11593454B2 (en) * | 2020-06-02 | 2023-02-28 | Intel Corporation | Matrix operation optimization mechanism |
CN113807507A (zh) * | 2020-06-16 | 2021-12-17 | 安徽寒武纪信息科技有限公司 | 数据处理方法及装置以及相关产品 |
CN113806246A (zh) * | 2020-06-16 | 2021-12-17 | 安徽寒武纪信息科技有限公司 | 数据处理装置及方法以及相关产品 |
US11972230B2 (en) * | 2020-06-27 | 2024-04-30 | Intel Corporation | Matrix transpose and multiply |
CN113867800A (zh) * | 2020-06-30 | 2021-12-31 | 上海寒武纪信息科技有限公司 | 计算装置、集成电路芯片、板卡、电子设备和计算方法 |
US11669331B2 (en) * | 2021-06-17 | 2023-06-06 | International Business Machines Corporation | Neural network processing assist instruction |
CN116932181A (zh) * | 2022-03-30 | 2023-10-24 | 华为技术有限公司 | 一种能力调用方法、系统及电子设备 |
CN116775544B (zh) * | 2023-08-23 | 2023-11-28 | 上海芯联芯智能科技有限公司 | 一种协处理器和计算机设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6355635A (ja) * | 1986-08-27 | 1988-03-10 | Hitachi Ltd | デ−タ処理システム |
JP2007531072A (ja) * | 2003-12-19 | 2007-11-01 | マイクロユニティ システムズ エンジニアリング インコーポレイテッド | プログラム可能なプロセッサ及び拡張演算を伴う方法 |
US20140095891A1 (en) * | 2012-09-28 | 2014-04-03 | Gilbert M. Wolrich | Instruction set for sha1 round processing on 128-bit data paths |
Family Cites Families (118)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3581279A (en) | 1969-06-09 | 1971-05-25 | Computer Modem Corp | Signal transmission method and system |
US3833889A (en) | 1973-03-08 | 1974-09-03 | Control Data Corp | Multi-mode data processing system |
FR111574A (ja) * | 1973-12-13 | 1900-01-01 | ||
US4251875A (en) | 1979-02-12 | 1981-02-17 | Sperry Corporation | Sequential Galois multiplication in GF(2n) with GF(2m) Galois multiplication gates |
US4353119A (en) | 1980-06-13 | 1982-10-05 | Motorola Inc. | Adaptive antenna array including batch covariance relaxation apparatus and method |
JPS5717049A (en) | 1980-07-04 | 1982-01-28 | Hitachi Ltd | Direct memory access controlling circuit and data processing system |
US4393468A (en) | 1981-03-26 | 1983-07-12 | Advanced Micro Devices, Inc. | Bit slice microprogrammable processor for signal processing applications |
FI72025C (fi) | 1982-11-04 | 1987-04-13 | Valmet Oy | Regleringssystem foer en traktor. |
US4823259A (en) | 1984-06-29 | 1989-04-18 | International Business Machines Corporation | High speed buffer store arrangement for quick wide transfer of data |
US4785393A (en) | 1984-07-09 | 1988-11-15 | Advanced Micro Devices, Inc. | 32-Bit extended function arithmetic-logic unit on a single chip |
US4748579A (en) | 1985-08-14 | 1988-05-31 | Gte Laboratories Incorporated | Method and circuit for performing discrete transforms |
US4930106A (en) | 1988-08-29 | 1990-05-29 | Unisys Corporation | Dual cache RAM for rapid invalidation |
US5031135A (en) | 1989-05-19 | 1991-07-09 | Hitachi Micro Systems, Inc. | Device for multi-precision and block arithmetic support in digital processors |
US5283886A (en) | 1989-08-11 | 1994-02-01 | Hitachi, Ltd. | Multiprocessor cache system having three states for generating invalidating signals upon write accesses |
US5170399A (en) | 1989-08-30 | 1992-12-08 | Idaho Research Foundation, Inc. | Reed-Solomon Euclid algorithm decoder having a process configurable Euclid stack |
JPH0398145A (ja) | 1989-09-11 | 1991-04-23 | Hitachi Ltd | マイクロプロセッサ |
US5471593A (en) | 1989-12-11 | 1995-11-28 | Branigin; Michael H. | Computer processor with an efficient means of executing many instructions simultaneously |
JPH04219859A (ja) | 1990-03-12 | 1992-08-10 | Hewlett Packard Co <Hp> | 並列プロセッサに直列命令ストリームデータを分散するハードウェアディストリビュータ |
DE69132675T2 (de) | 1990-04-06 | 2002-06-13 | Nec Corp., Tokio/Tokyo | Parallelfliessband-Befehlsverarbeitungssystem für sehr lange Befehlswörter |
JPH0484253A (ja) | 1990-07-26 | 1992-03-17 | Mitsubishi Electric Corp | バス幅制御回路 |
JP3144794B2 (ja) | 1990-11-09 | 2001-03-12 | 株式会社日立製作所 | マルチプロセッサシステム |
JP2678527B2 (ja) | 1991-01-08 | 1997-11-17 | 三菱電機株式会社 | キャッシュメモリ装置 |
JP2816624B2 (ja) | 1991-04-01 | 1998-10-27 | モトローラ・インコーポレイテッド | 2乗演算を実行する速度改良型データ処理システム及びその方法 |
US5636363A (en) | 1991-06-14 | 1997-06-03 | Integrated Device Technology, Inc. | Hardware control structure and method for off-chip monitoring entries of an on-chip cache |
US5185861A (en) | 1991-08-19 | 1993-02-09 | Sequent Computer Systems, Inc. | Cache affinity scheduler |
JP3369227B2 (ja) | 1992-11-09 | 2003-01-20 | 株式会社東芝 | プロセッサ |
IE922813A1 (en) | 1992-11-12 | 1994-05-18 | Digital Equipment Internat Ltd | Digital data storage system |
JP3069455B2 (ja) | 1992-12-22 | 2000-07-24 | 富士写真フイルム株式会社 | 画像データ圧縮伸張装置における量子化・逆量子化回路 |
US5671170A (en) | 1993-05-05 | 1997-09-23 | Hewlett-Packard Company | Method and apparatus for correctly rounding results of division and square root computations |
WO1994027216A1 (en) | 1993-05-14 | 1994-11-24 | Massachusetts Institute Of Technology | Multiprocessor coupling system with integrated compile and run time scheduling for parallelism |
JP3203401B2 (ja) | 1993-05-21 | 2001-08-27 | 三菱電機株式会社 | データ処理装置 |
US5535225A (en) | 1993-10-12 | 1996-07-09 | Hughes Aircraft Company | Time domain algebraic encoder/decoder |
JPH07114469A (ja) | 1993-10-18 | 1995-05-02 | Mitsubishi Electric Corp | データ処理装置 |
JPH07114496A (ja) | 1993-10-20 | 1995-05-02 | Toshiba Corp | 共有メモリ制御回路 |
US5448185A (en) | 1993-10-27 | 1995-09-05 | Actel Corporation | Programmable dedicated FPGA functional blocks for multiple wide-input functions |
JP2932963B2 (ja) | 1994-01-21 | 1999-08-09 | モトローラ・インコーポレイテッド | 効率的なビット移動能力を有するデータ・プロセッサとその方法 |
US5745778A (en) | 1994-01-26 | 1998-04-28 | Data General Corporation | Apparatus and method for improved CPU affinity in a multiprocessor system |
US5551005A (en) | 1994-02-25 | 1996-08-27 | Intel Corporation | Apparatus and method of handling race conditions in mesi-based multiprocessor system with private caches |
US5550988A (en) | 1994-03-01 | 1996-08-27 | Intel Corporation | Apparatus and method for performing error correction in a multi-processor system |
US6006299A (en) | 1994-03-01 | 1999-12-21 | Intel Corporation | Apparatus and method for caching lock conditions in a multi-processor system |
WO1995031767A1 (en) | 1994-05-11 | 1995-11-23 | Vlsi Technology, Inc. | Floating-point processor with apparent-precision based selection of execution-precision |
JP2757777B2 (ja) | 1994-05-26 | 1998-05-25 | 住友金属工業株式会社 | メモリの不正アクセス検出方法及びシステム |
US5559975A (en) | 1994-06-01 | 1996-09-24 | Advanced Micro Devices, Inc. | Program counter update mechanism |
US5426379A (en) | 1994-07-29 | 1995-06-20 | Xilinx, Inc. | Field programmable gate array with built-in bitstream data expansion |
US5579253A (en) | 1994-09-02 | 1996-11-26 | Lee; Ruby B. | Computer multiply instruction with a subresult selection option |
EP1302848B1 (en) | 1994-12-01 | 2006-11-02 | Intel Corporation | A microprocessor having a multiply operation |
US6275834B1 (en) | 1994-12-01 | 2001-08-14 | Intel Corporation | Apparatus for performing packed shift operations |
CN1326033C (zh) | 1994-12-02 | 2007-07-11 | 英特尔公司 | 可以对复合操作数进行压缩操作的微处理器 |
US5598362A (en) | 1994-12-22 | 1997-01-28 | Motorola Inc. | Apparatus and method for performing both 24 bit and 16 bit arithmetic |
US5745729A (en) | 1995-02-16 | 1998-04-28 | Sun Microsystems, Inc. | Methods and apparatuses for servicing load instructions |
US5752264A (en) | 1995-03-31 | 1998-05-12 | International Business Machines Corporation | Computer architecture incorporating processor clusters and hierarchical cache memories |
US5752001A (en) | 1995-06-01 | 1998-05-12 | Intel Corporation | Method and apparatus employing Viterbi scoring using SIMD instructions for data recognition |
US6105053A (en) | 1995-06-23 | 2000-08-15 | Emc Corporation | Operating system for a non-uniform memory access multiprocessor system |
US6633897B1 (en) | 1995-06-30 | 2003-10-14 | International Business Machines Corporation | Method and system for scheduling threads within a multiprocessor data processing system using an affinity scheduler |
US6295599B1 (en) | 1995-08-16 | 2001-09-25 | Microunity Systems Engineering | System and method for providing a wide operand architecture |
US5742840A (en) | 1995-08-16 | 1998-04-21 | Microunity Systems Engineering, Inc. | General purpose, multiple precision parallel operation, programmable media processor |
US5721892A (en) | 1995-08-31 | 1998-02-24 | Intel Corporation | Method and apparatus for performing multiply-subtract operations on packed data |
US6385634B1 (en) | 1995-08-31 | 2002-05-07 | Intel Corporation | Method for performing multiply-add operations on packed data |
WO1997009679A1 (en) | 1995-09-01 | 1997-03-13 | Philips Electronics North America Corporation | Method and apparatus for custom processor operations |
US6470370B2 (en) | 1995-09-05 | 2002-10-22 | Intel Corporation | Method and apparatus for multiplying and accumulating complex numbers in a digital filter |
US6237016B1 (en) | 1995-09-05 | 2001-05-22 | Intel Corporation | Method and apparatus for multiplying and accumulating data samples and complex coefficients |
US6058408A (en) | 1995-09-05 | 2000-05-02 | Intel Corporation | Method and apparatus for multiplying and accumulating complex numbers in a digital filter |
US5778412A (en) | 1995-09-29 | 1998-07-07 | Intel Corporation | Method and apparatus for interfacing a data bus to a plurality of memory devices |
US5799165A (en) | 1996-01-26 | 1998-08-25 | Advanced Micro Devices, Inc. | Out-of-order processing that removes an issued operation from an execution pipeline upon determining that the operation would cause a lengthy pipeline delay |
US6292879B1 (en) * | 1995-10-25 | 2001-09-18 | Anthony S. Fong | Method and apparatus to specify access control list and cache enabling and cache coherency requirement enabling on individual operands of an instruction of a computer |
JP3717212B2 (ja) | 1995-10-27 | 2005-11-16 | 株式会社日立製作所 | 情報処理装置及び情報処理ユニット |
US5835744A (en) | 1995-11-20 | 1998-11-10 | Advanced Micro Devices, Inc. | Microprocessor configured to swap operands in order to minimize dependency checking logic |
US5935240A (en) | 1995-12-15 | 1999-08-10 | Intel Corporation | Computer implemented method for transferring packed data between register files and memory |
US5940859A (en) | 1995-12-19 | 1999-08-17 | Intel Corporation | Emptying packed data state during execution of packed data instructions |
US5740093A (en) | 1995-12-20 | 1998-04-14 | Intel Corporation | 128-bit register file and 128-bit floating point load and store for quadruple precision compatibility |
KR0157924B1 (ko) * | 1995-12-23 | 1998-12-15 | 문정환 | 데이타 전송 시스템 및 그 방법 |
US5646626A (en) | 1996-01-30 | 1997-07-08 | Motorola, Inc. | Method and apparatus for digital correlation in pseudorandom noise coded systems |
US5835782A (en) | 1996-03-04 | 1998-11-10 | Intel Corporation | Packed/add and packed subtract operations |
US5802116A (en) | 1996-04-04 | 1998-09-01 | Lucent Technologies Inc. | Soft decision Viterbi decoding with large constraint lengths |
US5835968A (en) | 1996-04-17 | 1998-11-10 | Advanced Micro Devices, Inc. | Apparatus for providing memory and register operands concurrently to functional units |
US5826081A (en) | 1996-05-06 | 1998-10-20 | Sun Microsystems, Inc. | Real time thread dispatcher for multiprocessor applications |
US5933627A (en) | 1996-07-01 | 1999-08-03 | Sun Microsystems | Thread switch on blocked load or store using instruction thread field |
US5872972A (en) | 1996-07-05 | 1999-02-16 | Ncr Corporation | Method for load balancing a per processor affinity scheduler wherein processes are strictly affinitized to processors and the migration of a process from an affinitized processor to another available processor is limited |
US5826079A (en) | 1996-07-05 | 1998-10-20 | Ncr Corporation | Method for improving the execution efficiency of frequently communicating processes utilizing affinity process scheduling by identifying and assigning the frequently communicating processes to the same processor |
JPH10143365A (ja) | 1996-11-15 | 1998-05-29 | Toshiba Corp | 並列処理装置及びその命令発行方式 |
US6269390B1 (en) | 1996-12-17 | 2001-07-31 | Ncr Corporation | Affinity scheduling of data within multi-processor computer systems |
US5889983A (en) | 1997-01-21 | 1999-03-30 | Intel Corporation | Compare and exchange operation in a processing system |
US6061780A (en) | 1997-01-24 | 2000-05-09 | Texas Instruments Incorporated | Execution unit chaining for single cycle extract instruction having one serial shift left and one serial shift right execution units |
US6141384A (en) | 1997-02-14 | 2000-10-31 | Philips Electronics North America Corporation | Decoder for trellis encoded interleaved data stream and HDTV receiver including such a decoder |
US6766515B1 (en) | 1997-02-18 | 2004-07-20 | Silicon Graphics, Inc. | Distributed scheduling of parallel jobs with no kernel-to-kernel communication |
US5991531A (en) | 1997-02-24 | 1999-11-23 | Samsung Electronics Co., Ltd. | Scalable width vector processor architecture for efficient emulation |
GB2323187B (en) | 1997-03-14 | 2001-09-19 | Nokia Mobile Phones Ltd | Data processing circuit using both edges of a clock signal |
US6014684A (en) | 1997-03-24 | 2000-01-11 | Intel Corporation | Method and apparatus for performing N bit by 2*N-1 bit signed multiplication |
JP3602293B2 (ja) | 1997-04-22 | 2004-12-15 | 株式会社ソニー・コンピュータエンタテインメント | データ転送方法及び装置 |
US6272257B1 (en) * | 1997-04-30 | 2001-08-07 | Canon Kabushiki Kaisha | Decoder of variable length codes |
JP3570855B2 (ja) | 1997-05-29 | 2004-09-29 | 株式会社日立製作所 | 分岐予測装置 |
US6170051B1 (en) | 1997-08-01 | 2001-01-02 | Micron Technology, Inc. | Apparatus and method for program level parallelism in a VLIW processor |
US5933650A (en) | 1997-10-09 | 1999-08-03 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
US6804766B1 (en) | 1997-11-12 | 2004-10-12 | Hewlett-Packard Development Company, L.P. | Method for managing pages of a designated memory object according to selected memory management policies |
US6438660B1 (en) | 1997-12-09 | 2002-08-20 | Intel Corporation | Method and apparatus for collapsing writebacks to a memory for resource efficiency |
US6134635A (en) | 1997-12-09 | 2000-10-17 | Intel Corporation | Method and apparatus of resolving a deadlock by collapsing writebacks to a memory |
US5999959A (en) | 1998-02-18 | 1999-12-07 | Quantum Corporation | Galois field multiplier |
US20010049780A1 (en) | 1998-03-27 | 2001-12-06 | Shreekant Thakkar | Method and apparatus for performing integer operations in response to a result of a floating point operation |
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 |
US6041404A (en) | 1998-03-31 | 2000-03-21 | Intel Corporation | Dual function system and method for shuffling packed data elements |
US6377970B1 (en) | 1998-03-31 | 2002-04-23 | Intel Corporation | Method and apparatus for computing a sum of packed data elements using SIMD multiply circuitry |
US6426746B2 (en) | 1998-03-31 | 2002-07-30 | Intel Corporation | Optimization for 3-D graphic transformation using SIMD computations |
US6418529B1 (en) | 1998-03-31 | 2002-07-09 | Intel Corporation | Apparatus and method for performing intra-add operation |
US6211892B1 (en) | 1998-03-31 | 2001-04-03 | Intel Corporation | System and method for performing an intra-add operation |
US6212618B1 (en) | 1998-03-31 | 2001-04-03 | Intel Corporation | Apparatus and method for performing multi-dimensional computations based on intra-add operation |
US6292815B1 (en) | 1998-04-30 | 2001-09-18 | Intel Corporation | Data conversion between floating point packed format and integer scalar format |
US6408325B1 (en) | 1998-05-06 | 2002-06-18 | Sun Microsystems, Inc. | Context switching technique for processors with large register files |
JP3803196B2 (ja) | 1998-07-03 | 2006-08-02 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置、情報処理方法および記録媒体 |
ATE467171T1 (de) * | 1998-08-24 | 2010-05-15 | Microunity Systems Eng | System mit breiter operandenarchitektur und verfahren |
US6378060B1 (en) | 1998-08-24 | 2002-04-23 | Microunity Systems Engineering, Inc. | System to implement a cross-bar switch of a broadband processor |
JP2000224054A (ja) | 1999-01-27 | 2000-08-11 | Texas Instr Inc <Ti> | ビタビデコ―ディングの速度を増大させる方法と装置 |
US6463525B1 (en) | 1999-08-16 | 2002-10-08 | Sun Microsystems, Inc. | Merging single precision floating point operands |
EP1102161A2 (en) | 1999-11-15 | 2001-05-23 | Texas Instruments Incorporated | Data processor with flexible multiply unit |
US7200735B2 (en) * | 2002-04-10 | 2007-04-03 | Tensilica, Inc. | High-performance hybrid processor with configurable execution units |
WO2010112970A1 (en) * | 2009-03-31 | 2010-10-07 | Freescale Semiconductor, Inc. | Data processing with variable operand size |
US8438208B2 (en) * | 2009-06-19 | 2013-05-07 | Oracle America, Inc. | Processor and method for implementing instruction support for multiplication of large operands |
CN104011644B (zh) | 2011-12-22 | 2017-12-08 | 英特尔公司 | 用于产生按照数值顺序的相差恒定跨度的整数的序列的处理器、方法、系统和指令 |
US9785565B2 (en) | 2014-06-30 | 2017-10-10 | Microunity Systems Engineering, Inc. | System and methods for expandably wide processor instructions |
-
2015
- 2015-06-25 US US14/749,955 patent/US9785565B2/en not_active Expired - Fee Related
- 2015-06-26 EP EP15815691.9A patent/EP3161616A4/en not_active Withdrawn
- 2015-06-26 JP JP2017520759A patent/JP2017520873A/ja active Pending
- 2015-06-26 CN CN201580036141.1A patent/CN107077327A/zh active Pending
- 2015-06-26 WO PCT/US2015/038078 patent/WO2016003820A2/en active Application Filing
-
2017
- 2017-09-07 US US15/698,180 patent/US10204055B2/en not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6355635A (ja) * | 1986-08-27 | 1988-03-10 | Hitachi Ltd | デ−タ処理システム |
JP2007531072A (ja) * | 2003-12-19 | 2007-11-01 | マイクロユニティ システムズ エンジニアリング インコーポレイテッド | プログラム可能なプロセッサ及び拡張演算を伴う方法 |
US20140095891A1 (en) * | 2012-09-28 | 2014-04-03 | Gilbert M. Wolrich | Instruction set for sha1 round processing on 128-bit data paths |
Also Published As
Publication number | Publication date |
---|---|
US20150378734A1 (en) | 2015-12-31 |
WO2016003820A3 (en) | 2016-03-17 |
WO2016003820A9 (en) | 2017-02-16 |
CN107077327A (zh) | 2017-08-18 |
EP3161616A2 (en) | 2017-05-03 |
WO2016003820A2 (en) | 2016-01-07 |
US20180173635A1 (en) | 2018-06-21 |
EP3161616A4 (en) | 2017-12-27 |
US10204055B2 (en) | 2019-02-12 |
US9785565B2 (en) | 2017-10-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10204055B2 (en) | System and methods for expandably wide processor instructions | |
CN108133267B (zh) | 具有可作为最后级高速缓存片或神经网络单元存储器操作的存储器阵列的处理器 | |
CN108133268B (zh) | 具有存储器阵列的处理器 | |
CN108268423B (zh) | 实现用于具有写到读依赖关系的稀疏线性代数运算的增强的并行性的微架构 | |
TWI803030B (zh) | 可中斷及可重啟矩陣乘法指令、處理器、方法和系統 | |
US8904152B2 (en) | Efficient complex multiplication and fast fourier transform (FFT) implementation on the ManArray architecture | |
US10049061B2 (en) | Active memory device gather, scatter, and filter | |
US20180189110A1 (en) | Compute engine architecture to support data-parallel loops with reduction operations | |
KR20170110688A (ko) | 비순차적 실행을 통해 가변 길이 벡터들에 대해 동작하도록 구성된 벡터 프로세서 | |
CN108804139A (zh) | 可编程设备及其操作方法和计算机可用介质 | |
KR102279200B1 (ko) | 에뮬레이티드 공유 메모리 아키텍쳐를 위한 부동-소수점 지원가능한 파이프라인 | |
CN108805275A (zh) | 可编程设备及其操作方法和计算机可用介质 | |
US9575756B2 (en) | Predication in a vector processor | |
US9535694B2 (en) | Vector processing in an active memory device | |
CN111859277B (zh) | 一种稀疏矩阵向量乘法向量化实现方法 | |
Hishinuma et al. | pzqd: PEZY-SC2 acceleration of double-double precision arithmetic library for high-precision BLAS | |
Titopoulos et al. | IndexMAC: A Custom RISC-V Vector Instruction to Accelerate Structured-Sparse Matrix Multiplications | |
Derby et al. | VICTORIA: VMX indirect compute technology oriented towards in-line acceleration | |
Karlsson et al. | ePUMA: A unique memory access based parallel DSP processor for SDR and CR | |
Ambuluri | Implementations of the FFT algorithm on GPU | |
Taylor et al. | Three-dimensional finite-element analyses: implications for computer architectures | |
Hamilton | Implementation and Performance Evaluation of Polyphase Filter Banks on the Cell Broadband Engine Architecture | |
Unrolling | Lookahead Memory Prefetching for CGRAs Using Partial Loop Unrolling | |
Li et al. | Heterogeneous multi-core parallel SGEMM performance testing and analysis on Cell/BE processor | |
Williams et al. | Dense and sparse matrix operations on the Cell processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20180625 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20190318 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20190507 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20191217 |