JP2015524978A - 独立したデータに対する再帰演算のベクトル化のための読み出し及び書き込みマスク更新命令 - Google Patents

独立したデータに対する再帰演算のベクトル化のための読み出し及び書き込みマスク更新命令 Download PDF

Info

Publication number
JP2015524978A
JP2015524978A JP2015527454A JP2015527454A JP2015524978A JP 2015524978 A JP2015524978 A JP 2015524978A JP 2015527454 A JP2015527454 A JP 2015527454A JP 2015527454 A JP2015527454 A JP 2015527454A JP 2015524978 A JP2015524978 A JP 2015524978A
Authority
JP
Japan
Prior art keywords
mask
register
bits
bit value
vector
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
Application number
JP2015527454A
Other languages
English (en)
Other versions
JP5987233B2 (ja
Inventor
プロトニコフ、ミカイル
ナライキン、アンドレー
ヒューズ、クリストファー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2015524978A publication Critical patent/JP2015524978A/ja
Application granted granted Critical
Publication of JP5987233B2 publication Critical patent/JP5987233B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers

Abstract

プロセッサは、第1のマスクレジスタ及び第2のマスクレジスタに対する更新を実行するべく、マスク更新命令を実行する。プロセッサ内のレジスタファイルは、第1のマスクレジスタ及び第2のマスクレジスタを含む。プロセッサは、マスク更新命令を実行する実行回路を含む。マスク更新命令に応答して、実行回路は、第1のマスクレジスタ内の所定数のマスクビットを反転させ、第2のマスクレジスタ内の所定数のマスクビットを反転させる。

Description

本開示は、プロセッサ又は他の処理ロジックによって実行された場合に、論理的、数学的又は他の機能的な複数の演算を実行する処理ロジック、複数のマイクロプロセッサ及び関連する命令セットアーキテクチャの分野に関する。
命令セット、すなわち命令セットアーキテクチャ(ISA)は、プログラミングに関するコンピュータアーキテクチャの一部であり、複数のネイティブデータ型、複数の命令、レジスタアーキテクチャ、複数のアドレッシングモード、メモリアーキテクチャ、割り込み及び例外処理ならびに外部入力及び出力(I/O)を含んでもよい。命令という用語は、本明細書では概して、複数のマクロ命令、すなわち、プロセッサのデコーダが複数のマクロ命令を復号した結果である複数マイクロ命令又は複数のマイクロ演算(micro−op)と対照的に、プロセッサ(又は、命令を、プロセッサに処理される1または複数の他の命令に、(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)変換、モーフィング、エミュレート又は他の方法で変換する命令変換部)に実行のために提供される複数の命令をいう。
ISAは、命令セットを実装するプロセッサの内部設計であるマイクロアーキテクチャから区別される。複数の異なるマイクロアーキテクチャを有する複数のプロセッサは、共通の命令セットを共有することができる。例えば、複数のIntel(登録商標)Core(商標)プロセッサ及びカリフォルニア州サニーベールのアドバンスドマイクロデバイス社(Advanced Micro Devices, Inc.)の複数のプロセッサは、ほぼ理想的な複数のバージョンのx86命令セット(複数のより新しいバージョンにはいくつかの拡張が追加されている)を実装するが、いくつかの内部設計は異なる。例えば、同じISAレジスタアーキテクチャが、専用の複数の物理レジスタ、レジスタリネーミングメカニズム等を用いた1または複数の動的割り当て物理レジスタを含む複数の周知技術を用いて、異なる複数のマイクロアーキテクチャにおいて異なる態様で実装されてもよい。
近年のISAの多くは、単一命令複数データ(SIMD)の複数の演算をサポートする。1つ又は2つだけの複数のデータエレメント上で動作するスカラ命令の代わりに、ベクトル命令(パックドデータ命令又はSIMD命令とも称される)は、複数のデータエレメント又は複数のデータエレメントの複数のペア上で、同時に又は並列に動作してもよい。プロセッサは、複数の演算を同時に又は並列に実行するべく、ベクトル命令に応答する並列実行ハードウェアを有してもよい。SIMD演算は、1の演算において、1のベクトルレジスタ又はメモリ位置内にパックされた複数のデータエレメント上で動作する。これらのデータエレメントは、パックドデータ又はベクトルデータと称される。複数のベクトルエレメントのそれぞれは、複数の他のデータとは別々に又は独立して演算され得る個別のデータ(例えば、ピクセルの色等)を表してもよい。
いくつかのシナリオにおいて、SIMD演算は、独立した複数のベクトルデータエレメントに対して再帰的な態様で、複数の異なるデータエレメントに対する反復回数が異なるように、演算を行ってもよい。したがって、いくつかのデータエレメントの演算は終了してもよいが、いくつかの他の複数のデータエレメントはさらにより多くの反復を必要とする。再帰演算の一例は、WHILEループ演算である。この例では、N個のエレメントのデータアレイX[i](i=0、…、N−1)は、条件(X[i])が真の(満たされる)の場合に、再帰演算される。X[i]に対する演算は、条件(X[i])が偽になった場合に終了する。条件の例は、X[i]>0であってもよい。
for (i=0; i<N; i++){
while (condition(X[i])){
X[i]=computation(X[i]); } }
上記の演算は、WHILEループ反復回数が複数の異なるデータエレメントX[i]に対して異なる場合には、容易にベクトル化することができない。1つの適用可能なアプローチは、条件を満たさないこのような複数のエレメントに対する演算をプロセッサが実行し、次に、このような複数のエレメントから導出された結果を破棄することである。しかしながら、プロセッサは、このような複数のエレメントに対する不要な演算を実行するのみならず、このような複数のエレメントによって占められる複数のベクトルレジスタスロットを利用することができないため、このアプローチは効率性が低い。
複数の実施形態は、添付の図面において例として示されるが、限定ではない。
図1は、一実施形態に係る複数のベクトルレジスタ及び複数のマスクレジスタを含む命令処理装置のブロック図である。 図2は、一実施形態に係るレジスタアーキテクチャのブロック図である。 図3は、一実施形態に係るベクトル演算シーケンスの例を示す。 図4Aは、一実施形態に係る複数のベクトルレジスタ及び複数のマスクレジスタに対する複数の演算をプロセッサに実行させる複数の命令のための疑似コードの例を示す。 図4Bは、一実施形態に係る図4Aの複数の命令を用いるためのコードセグメントの例を示す。 図5Aは、一実施形態に係るマスク更新命令及びベクトル移動命令を用いるコードセグメントに応答して実行される複数の演算を例示するフロー図である。 図5Bは、一実施形態に係るマスク更新命令に応答して実行される複数の演算を例示するフロー図である。 図5Cは、一実施形態に係るベクトル移動命令に応答して実行される複数の演算を例示するフロー図である。 図6は、一実施形態に係るソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令変換器の利用を例示するブロック図である。 図7Aは、一実施形態に係るインオーダ及びアウトオブオーダパイプラインのブロック図である。 図7Bは、一実施形態に係るインオーダ及びアウトオブオーダコアのブロック図である。 図8Aは、一実施形態に係るより具体的な、例示的なインオーダコアアーキテクチャのブロック図である。 図8Bは、一実施形態に係るより具体的な、例示的なインオーダコアアーキテクチャのブロック図である。 図9は、一実施形態に係るプロセッサのブロック図である。 図10は、一実施形態に係るシステムのブロック図である。 図11は、一実施形態に係る第2のシステムのブロック図である。 図12は、本発明の実施形態に係る第3のシステムのブロック図である。 図13は、一実施形態に係るシステムオンチップ(SoC)のブロック図である。
以下の説明では、数々の具体的な詳細が記載される。しかしながら、本発明の複数の実施形態は、これらの具体的な詳細がなくとも実施可能であることが理解されよう。他の例において、周知の複数の回路、複数の構造及び複数の技術は、この説明に対する理解の妨げとならないよう、詳細には示されていない。
本明細書に記載された複数の実施形態は、複数の独立したデータエレメントに対する再帰ベクトル演算の効率性を改善するための複数の命令を提供する。複数の命令は、複数のベクトルレジスタのペア及び複数のマスクレジスタのペアを用いて再帰ベクトル演算を実行し、ここで、第1のベクトルレジスタは、複数のベクトル演算結果を蓄積するアキュムレータとして機能し、第2のベクトルレジスタは、第1のベクトルレジスタの複数の不使用スロット(未使用の又は使用が終了した複数のデータエレメント位置)を充填する複数の新たなデータエレメントを提供する。複数のマスクレジスタは、対応する複数のベクトルレジスタの中で、さらなる演算を必要とする複数のデータエレメントを示すために用いられる。
一実施形態では、第1のベクトルレジスタ(すなわち、アキュムレータ)は、レジスタがベクトルで満杯に充填されるまで、複数の入力データエレメントを蓄積する。プロセッサは次に、複数の非マスク(すなわち、密な)ベクトル演算を用いて、これらのデータエレメントに対する演算を実行する。演算の後、アキュムレータ内の(演算が終了した)いくつかのエレメントは、メモリ又は他の複数のストレージ位置に戻すことができ、(演算が終了していない)他の複数のエレメントは、さらなる回数の反復のためにアキュムレータ内に保持することができる。アキュムレータ内の演算が終了した複数のデータエレメント位置は、同じ再帰演算をさらに必要とする複数の新たなデータエレメントによって用いられることができる。
2つの命令、RWMASKUPDATE及びSPARSEMOVが、本明細書で説明される。これらの命令は、多くのシナリオでベクトル化の効率性を改善する。例えば、1つのシナリオでは、複数の入力データエレメントは、それぞれはアキュムレータ(すなわち、第1のベクトルレジスタ)全体を充填するほど多くのエレメントを有さない1または複数の疎ベクトルデータセットから取ってもよい。さらに、異なる複数のデータセットからの複数の入力データエレメントは、異なる回数の演算の反復を必要としてもよい。したがって、これ以上の演算を必要としないこのような複数のデータエレメントからの複数の不使用スロットが、アキュムレータ内に残される。本明細書に記載された複数の命令によれば、これらの不使用スロットを有効複数のエレメントで充填することができ、したがって、満杯のベクトルに対する再帰演算が可能となる。さらに詳細に後述するように、SPARSEMOV命令は、複数の有効データエレメント(すなわち、演算が必要な複数のデータエレメント)を第2のベクトルレジスタからアキュムレータへと移動させるベクトル移動命令である。RWMASKUPDATE命令は、(第2のベクトルレジスタに関連する)読み出しマスクレジスタ及び(アキュムレータに関連する)書き込みマスクレジスタの両方を、これらの2つのベクトルレジスタにおいて複数の有効データエレメントの位置を特定するべく、更新する。
SPARSEMOVと組み合わせてRWMASKUPDATEを用いることにより、再帰演算の中で必要な命令の総数が低減されるとともに、オーバーフロー及びアンダーフロー、すなわち第2のベクトルレジスタ内の有効データエレメント(すなわち、ソースデータエレメント)の数が第1のベクトルレジスタ内の不使用スロット(すなわち、目標位置)の数と一致しないケースを単純化することができる。更新された読み出し及び書き込みマスクは、2つのベクトルレジスタ間でのデータの移動を制御するために用いられ、具体的には、複数のゼロの書き込みマスクビットは、アキュムレータ内の複数の目標位置を特定するために用いられ、複数の1の読み出しマスクビットは、第2のベクトルレジスタ内の複数のソースデータエレメントを特定するために用いられる。複数の目標位置を特定するために反転された書き込みマスクビットを用いることにより、疎な再帰演算のベクトル化におけるデータ蓄積が単純化される。
図1は、RWMASKUPDATE及びSPARSEMOV命令を含む複数の命令を実行するべく動作可能な回路を含む実行ユニット140を有する命令処理装置115の実施形態のブロック図である。いくつかの実施形態では、命令処理装置115は、プロセッサ、マルチコアプロセッサのプロセッサコア又は電子システム内の処理エレメントであってもよい。
デコーダ130は、複数の高水準機械命令又は複数のマクロ命令という形式で入力された複数の命令を受信し、これらを復号化して、複数の低水準マイクロ演算、複数のマイクロコードエントリポイント、複数のマイクロ命令、もしくは元の高水準命令を反映し、及び/又は元の高水準命令から導出される他の複数の低水準命令又は複数の制御信号を生成する。複数の低水準命令又は複数の制御信号は、複数の低水準(例えば、回路レベル又はハードウェアレベル)演算を介した高水準命令の演算を実装してもよい。デコーダ130は、様々な異なるメカニズムを用いて実装されてもよい。適したメカニズムの例は、限定されるものではないが、マイクロコード、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラム可能ロジックアレイ(PLA)、当技術分野で公知の複数のデコーダを実装するために用いられる他の複数のメカニズム等を含む。
デコーダ130は、キャッシュ110、メモリ120又は他の複数のソースに対する、入力された複数の命令を受信してもよい。復号化された複数の命令は、実行ユニット140に送信される。実行ユニット140は、1または複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、もしくは受信された複数の命令を反映した、又は受信された命令から導出された他の制御信号を、デコーダ130から受信してもよい。実行ユニット140は、レジスタファイル170、キャッシュ110及び/又はメモリ120からのデータ入力を受信し、これらに対するデータ出力を生成する。
一実施形態では、レジスタファイル170は、レジスタとも称される複数のアーキテクチャレジスタを含む。他に規定又は明らかに示さない限り、複数のアーキテクチャレジスタ、レジスタファイル及び複数のレジスタという文言は、本明細書では、ソフトウェア及び/又はプログラマに可視(例えば、ソフトウェア可視)の複数のレジスタ及び/又は複数のマクロ命令により規定されて複数のオペランドを特定する複数のレジスタを指すために用いられる。これらのレジスタは、所与のマイクロアーキテクチャ(例えば、複数の一時レジスタ、複数のリオーダバッファ、複数のリタイアメントレジスタ等)における他の複数の非アーキテクチャレジスタと対照をなす。
説明を分かりにくくしないよう、比較的単純な命令処理装置115を示し、記載した。複数の他の実施形態は、1より多くの実行ユニットを有してもよいことが理解されよう。例えば、装置115は、例えば、複数の演算ユニット、複数の演算ロジックユニット(ALU)、複数の整数ユニット、浮動小数点ユニット等の、複数の異なる型の実行ユニットを含んでもよい。命令処理装置又は複数のプロセッサのさらに複数の他の実施形態は、複数のコア、複数の論理プロセッサ又は複数の実行エンジンを有してもよい。命令処理装置115の多数の実施形態が、以下において、図7−13に関して提供される。
一実施形態によれば、レジスタファイル170は、複数のベクトルレジスタ175のセット及び複数のマスクレジスタ185のセットを含み、これらは両方とも、RWMASKUPDATE及びSPARSEMOV命令のオペランドを記憶する。各ベクトルレジスタ175は、512ビット、256ビット又は128ビット幅とすることができ、あるいは異なるベクトル幅を用いてもよい。各マスクレジスタ185は、多数のマスクビットを含み、各マスクビットは、複数のベクトルレジスタ175の中の1つのデータエレメントの1つに対応する。各マスクビットは、ベクトルレジスタのデータエレメントをマスクするために用いられるので、64ビットのマスクレジスタは、512ビットレジスタの中の64個の8ビットデータエレメントをマスクするために用いられることができる。異なる幅のベクトルレジスタ(例えば、256ビット又は128ビット)及び異なるサイズの複数のデータエレメント(例えば、16ビット、32ビット又は64ビット)に対し、ベクトル演算に関して、異なる数のマスクビットが用いられてもよい。
図2は、本明細書に記載される複数の命令をサポートする基礎のレジスタアーキテクチャ200の実施形態を示す。レジスタアーキテクチャ200は、x86、MMX(商標)、ストリーミングSIMD拡張命令(SSE)、SSE2、SSE3、SSE4.1及びSSE4.2の複数の命令、同様にSIMD拡張命令のさらなるセットであるAdvanced Vector Extensions(AVX)(AVX1及びAVX2)を含む命令セットを実装する複数のIntel(登録商標)Core(商標)プロセッサに基づく。しかしながら、異なるレジスタ長、異なるレジスタ型及び/又は異なる数のレジスタをサポートする異なるレジスタアーキテクチャを用いられることができることが理解されよう。
例示された実施形態では、512ビット幅の32本のベクトルレジスタ210が存在し、これらのレジスタは、zmm0−zmm31と称される。下位16本のzmmレジスタの下位256ビットは、複数のレジスタymm0−16上に重ねられる。下位16本のzmmレジスタの下位128ビット(複数のymmレジスタの下位128ビット)は、複数のレジスタxmm0−15上に重ねられる。例示された実施形態では、8本のマスクレジスタ220(k0−k7)が存在し、各々は64ビット長である。代替的な実施形態では、マスクレジスタ220は、16ビット幅である。
例示された実施形態では、レジスタアーキテクチャ200は、16本の64ビット汎用(GP)レジスタ230をさらに含む。実施形態において、16本の64ビット汎用(GP)レジスタ230は、既存の複数のx86アドレッシングモードと共に用いられて、複数のメモリオペランドのアドレスを指定する。実施形態は、複数のRFLAGSレジスタ260、複数のRIPレジスタ270及び複数のMXCSRレジスタ280をさらに示す。
実施形態は、スカラ浮動小数点(FP)スタックレジスタファイル(x87スタック)240をさらに示し、ここで、MMXパック型整数フラットレジスタファイル250がエイリアスされる。例示された実施形態では、x87スタックは、x87命令セット拡張を用いて32/64/80ビット浮動小数点データに対して複数のスカラ浮動小数点の演算を実行するために用いられる8エレメントスタックであるが、複数のMMXレジスタは、MMX及びxmmレジスタ間で実行されるいくつかの演算のための複数のオペランドを保持しつつ、64ビットパック型整数データに対して複数の演算を実行するために用いられる。
本発明の代替的な複数の実施形態は、より広い又はより狭い複数のレジスタを用いてもよい。
さらに、本発明の代替的な複数の実施形態は、より多くの、より少ない、又は異なる複数のレジスタファイル及び複数のレジスタを用いてもよい。
図3は、複数の独立したデータエレメントに対する演算を効率的にベクトル化するべく、プロセッサ(例えば、命令処理装置115)によって実行される複数の演算の例を示す図である。例を単純化するべく、この例の各ベクトルレジスタは、8個のデータエレメントのみを有するものとして示される。代替的な複数の実施形態は、複数のベクトルレジスタにおいて異なる数の複数のデータエレメントを有してもよい。複数のベクトルレジスタは、128ビット、256ビット又は512ビット幅(例えば、図2のxmm、ymm又はzmmレジスタ)とすることができ、あるいは、異なる幅が用いられてもよい。各ベクトルレジスタに8個のデータエレメントが存在するため、各ベクトルレジスタに関して、8マスクビットのみが用いられる。
この例では、ベクトルレジスタV1がアキュムレータとして用いられ、ベクトルレジスタV2が複数の新たなデータエレメントをV1に提供するために用いられる。マスクレジスタK1(書き込みマスク)及びK2(読出しマスク)は、V1及びV2の複数のデータエレメントをそれぞれマスクするために用いられる。この例では、ゼロのマスクビットは、対応するデータエレメントが演算からマスクされている(すなわち、さらなる演算が不要である)ことを示し、1のマスクビットは、対応するデータエレメントがさらなる演算を必要とすることを示す。代替的な実施形態では、マスクビット値の意味が逆転してもよく、例えば、1のマスクビットが、対応するデータエレメントがさらなる演算を必要としないことを示すために用いられてもよく、ゼロのマスクビットが、対応するデータエレメントがさらなる演算を必要とすることを示すために用いられてもよい。
最初に、アキュムレータV1は、2セットのデータを入力ベクトルA及びBとして記憶し、入力ベクトルA及びBのそれぞれは、疎データアレイの一部であってもよいと仮定する。A及びBの下付き文字jは、データエレメントに対して実行された反復回数を示し、例えば、Aは反復実行前のエレメントAであり、Aは第1の反復310後のエレメントAである。例を単純化するべく、同じ反復において、同じデータセットからの複数の異なるデータエレメントが、同じ識別子を有するように示されており、例えば、入力ベクトルの位置0のA及び位置2のAは、2つの異なるエレメントであるとともに、同一または異なる値を有してもよく、入力ベクトルの位置1のB及び位置3のBは、2つの異なるエレメントであるとともに、同一または異なる値を有してもよい。マスクレジスタK1において、複数のマスクビットの初期値は、全て1であり、V1の初期入力ベクトルがベクトルで満杯であるとともに、V1の各エレメントに対してベクトル演算の第1の反復310を実行することができることを示す。
この例では、各反復は、再帰ベクトル演算が実行されるWHILEループの反復を表す。第1の反復310後、アキュムレータV1は、Aの複数のエレメント及びBの複数のエレメントのセットを含み、ここで、下付き文字は、これらのエレメントが第1の反復を終了したことを示す。Aの複数のエレメントはWHILEループの反復を1回だけ必要とし、複数のBのエレメントは2回の反復を必要とすると想定する。したがって、WHILEループの1回の反復後、Aの複数のエレメントに対する演算は終了したが、複数のBのエレメントに対してはもう1回反復が必要である。ここで、Aの複数のエレメントのそれぞれに対する条件は、偽であり(さらなる演算のための条件を満たさないため)、複数のBのエレメントのそれぞれに対する条件は、真である(さらなる演算のための条件を満たすため)。したがって、K1の複数のマスクビット値は、Aの複数のエレメントに対応するこのような複数のマスクビットはゼロに設定され、Bの複数のエレメントに対応するこのような複数のマスクビットは1に設定される。
一実施形態では、ゼロのマスクビットは、対応するエレメント位置の結果が、ベクトルレジスタ全体(この場合、V1)に対するベクトル演算の後で破棄されることを示す。複数の代替的な実施形態では、ゼロのマスクビットは、対応するエレメント位置に対する演算が実行されないことによって、エレメント位置が使用されていないことを示す。いずれのシナリオにおいても、Aの複数のエレメントをアキュムレータV1内に保持することは、ベクトルリソースの浪費であり、ベクトル演算の効率性を低下させる。よって、本発明一実施形態によれば、第2のベクトルレジスタV2は、Aの複数のエレメントによって残された複数の不使用スロット(すなわち、複数のデータエレメント位置)を充填するべく、複数の新たなデータエレメントをV1に提供するために用いられる。Aの複数のデータエレメントは、メモリ、キャッシュ又は他のデータストレージに保存されることができる。
図3の例では、ベクトルレジスタV2は、他の疎ベクトルアレイの一部たり得るデータセットCの複数のエレメントを記憶する。V2内で「*」でマーク付けされた複数の位置は、「無視」を表す、つまり、再帰ベクトル演算のための複数の有効データエレメントを含まないことを意味する。Cの各データエレメントに対して、WHILEループの反復が3回必要であると想定する。Cの複数のエレメントの代わりに、又は加えて、V2は、WHILEループの1または複数回の反復(よって、さらなる演算)を必要とするA及び/又はBの複数の新たなデータエレメント(例えば、Aの複数のエレメント、Bの複数のエレメント及び/又はBの複数のエレメント)を提供してもよい。さらなる演算が必要なV2内のこれらのデータエレメントは、「ソースデータエレメント」と称される。V2内のこれらのソースデータエレメントは、Aの複数のエレメント(「対象データエレメント」と称される)によってV1内に残された複数の不使用スロットを充填することができる。説明を簡単にするために、V1及び/又はV2内でさらなる演算が必要な複数のデータエレメントは、「有効データエレメント」と称される。したがって、V2内の複数のソースデータエレメントがV1内の複数の対象データエレメントによって占められた複数の位置に移動し、V1内のさらなる複数の有効データエレメントによって再帰演算が第2の反復330に進むことができるように、V1及びV2内の複数の有効データエレメントを併合するべく、併合演算320が実行される。
3つのシナリオ、すなわちオーバーフロー、アンダーフロー及び完全一致が、そのような併合演算の中で生じてもよい。完全一致は、V1に残された不使用スロットの数と同じ数の有効データエレメントが、V2に存在することを示す。したがって、完全一致の場合、V2内の全てのソースデータエレメントが、V1に残された複数の不使用スロットに移動(すなわち、置換)する。結果として、V1は、ベクトルで満杯となることにより次の反復を開始し、K1は、全て1を含むように更新される。V2にはこれ以上のソースデータエレメントは残されておらず、K2は、全てゼロを含むように更新される。
併合演算320は、新たなデータエレメント(C)の数が、K1内で値がゼロのマスクビットの数(すなわち、Aの数)より大きいという、オーバーフローのシナリオを示す。したがって、V2内の全ての新たなデータエレメントが、V1に移動する訳ではない。この例では、V2の位置7の丸で囲まれたCがV2に残されるが、位置2、4及び6の他のCの複数のエレメントは、V1に移された。本実施形態では、V2の下位の複数のエレメントはV1に移されるが、代替的な実施形態では、V2の上位の複数のエレメントが、V1に移されてもよい。併合演算320は、K1及びK2の対応するマスクビットを、さらに更新する。
併合演算320の後、V1は、8個のエレメントの満杯のベクトルを含むことにより、第2の反復330を開始し、V2は、位置7に残された1個のCのみを有する。対応するマスクレジスタK1は、ここで(併合演算320の後)、全て1を含み、K2は、位置7に1の値を有する1個のマスクビットのみを含む。
第2の反復330の後、アキュムレータV1は、Bの複数のエレメント及びCの複数のエレメントの組み合わせを含む。この反復後に、複数のBのエレメントに対する演算が終了したため、このようなBの複数のエレメントは、メモリ、キャッシュ又は他のデータストレージに保存されることができる。したがって、複数のBのエレメントのそれぞれに対する条件は偽(さらなる演算のための条件を満たさないため)であり、複数のCのエレメントのそれぞれに対する条件は真である(さらなる演算のための条件を満たすため)。したがって、K1内の複数のマスクビット値は、Bの複数のエレメントに対応するこのようなマスクビットに対してはゼロに設定され、Cの複数のエレメントに対応するこのようなマスクビットに対しては1に設定される。
の複数のエレメントによって残された複数の不使用スロットは、V2内に残る複数のソースデータエレメント、この場合、V2の位置7のCによって充填されることができる。しかしながら、Cのエレメントの数はBのエレメントの数より小さいため、続く併合演算340でアンダーフローが生じる。図3に示すアンダーフローのシナリオでは、V1内で最も下位のBがCに置換されるが、代替的な実施形態では、V1内で最も上位のBがCに置換されてもよく、併合演算340は、K1及びK2内の対応するマスクビットをさらに更新する。
併合演算340の後、アキュムレータV1は完全には充填されておらず、V2は、V1に移動可能な有効データエレメントをこれ以上有さない。マスクレジスタK1は、ここで(併合演算340の後)、複数のCのエレメントに対応する位置に1を含み、K2は、全てゼロを含む。V2は、V1に移動させるための追加的な複数の有効データエレメントを読み込んでもよく、全ての有効データエレメントが処理されて、これ以上のソースデータエレメントがV2内に残されなくなるまで、併合演算320及び/又は340を繰り返すことができる。ここで、V1内の全てのエレメントが必要な反復回数に達するまで、V1に対して、多数のさらなる反復が実行されてもよい。
ゼロ及び1の複数のマスクビット値の意味は、図3の例に示すものの逆とすることができ、例えば、ゼロのマスクビット値は、条件が満たされることを意味するために用いられることができ、1のマスクビット値は、条件が満たされないことを意味するために用いられることができることが理解されよう。いくつかの実施形態では、K1の複数のマスクビット値の意味は、K2の複数のマスクビット値の意味の逆とすることができ、例えば、1のK1のマスクビット値は、条件が満たされないことを意味するために用いられることができ、1のK2のマスクビット値は、条件が満たされることを意味するために用いられることができる。したがって、異なる複数のマスクビット値は、図3の例では、各マスクレジスタ内の各マスクビットの意味が、一貫性のある解釈が可能となるように一貫して定義される限り、同じシナリオに対して用いられることができる。
本発明の一実施形態によれば、図3に関して記載された複数の演算は、RWMASKUPDATE及びSPARSEMOV命令を含む複数のベクトル命令に応答して、プロセッサ(例えば、命令処理装置115)によって実行される。SPARSEMOV命令は、複数のソースデータエレメントをベクトルレジスタV2からベクトルレジスタV1へと移動させて、V1内における条件を満たさない複数の対象エレメント(例えば、これ以上の演算を必要としない複数のエレメント)を置換するために用いられることができる。RWMASKUPDATE命令は、マスクレジスタK1及びK2を更新することによって、V1及びV2内において、条件を満たす複数のデータエレメント(例えば、さらなる演算が必要な複数のエレメント)の位置をそれぞれ特定するために用いられることができる。一実施形態では、RWMASKUPDATEは、2つのオペランドK1及びK2を有し、SPARSEMOVは、4つのオペランドK1、V1、K2及びV2を有する。複数の代替的な実施形態では、RWMASKUPDATE及び/又はSPARSEMOVのいくつかのオペランドは、黙示的であってもよい。
図4Aは、一実施形態に係るRWMASKUPDATE及びSPARSEMOV命令のための疑似コード401および402の例を示す。疑似コード401および402では、KLは、各ベクトルレジスタ(例えば、V1及びV2のそれぞれ)内のデータエレメントの総数であるベクトル長を表す。zmmレジスタが複数の8ビットのデータエレメントを有するアキュムレータとして用いられる場合、KL=512/8=64である。疑似コード401は、RWMASKUPDATE命令を記述し、疑似コード402は、SPARSEMOV命令を記述する。なお、プロセッサは、疑似コード401および402に示すものとは異なる複数の演算又はロジックを有するRWMASKUPDATE及びSPARSEMOV命令を実装してもよい。
RWMASKUPDATE及びSPARSEMOV命令は、複数のマスクレジスタを更新し、複数のベクトルレジスタ間で、複数のデータエレメントをそれぞれ移動させる。さらなる複数の命令が、これらの命令の結果を利用することによって再帰ベクトル演算をより効率的に実行するべく、実行されることができる。図4Bは、一実施形態に係るRWMASKUPDATE及びSPARSEMOV命令を用いるコードセグメント400の例を示す。コードセグメント400は、プロセッサによって実行された場合、アレイXの複数の独立したデータエレメントに対する再帰ベクトル演算を、プロセッサに実行させる。アレイXは、メモリ、キャッシュ又は他の複数のデータストレージ位置に記憶されてもよい。コードセグメント400は、初期化セクション410、初期併合セクション420、後続併合セクション430、演算セクション440及び残余セクション450を含む。セクション410−450のそれぞれにおける演算について、プロセッサ(例えば、図1の命令処理装置115)によって実行される方法500の実施形態を示す図5Aのフロー図を参照しながら後述する。
初期化セクション410では、マスクレジスタK1及びK2の両方がゼロに初期化され、これらの対応する複数のベクトルレジスタV1及びV2内に有効データエレメントが存在しないことを示す。用語「有効データエレメント」は、演算が必要な複数のデータエレメントを意味する。複数の反復が、初期併合セクション420において開始するが、ここで第一にK2は、複数の有効データエレメントがV2に残されているか否かを判断するべく、チェックされる(ブロック531)。V2内に有効データが存在しない場合、複数の入力データエレメントが、アレイXからV2に読み込まれ(ブロック532)、その結果、K2内におけるこれらに対応するマスクビットが設定される。
後続併合セクション430は、V2が複数の有効データエレメントを含むというシナリオを処理する。複数の有効データエレメントは、前のオーバーフローからV2内に残されていてもよく、又はブロック532でV2に読み込まれていてもよい。SPARSEMOV命令431に応答して、V2内のこれらの有効データエレメントは、K1及びK2内のマスクビットに従い、V1に移される(ブロック533)。
RWMASKUPDATE命令433に応答して、マスクレジスタK1及びK2は、ブロック533での移動後、複数の有効データエレメントのV1及びV2内での現在位置をそれぞれ特定するべく、更新される(ブロック534)。
後続併合セクション430では、第2のSPARSEMOV命令432は、複数の演算結果がアレイXにおけるこれらの元の位置に戻って記憶されることができるように、V2からV1に移されたアレイXの複数のデータエレメントのインデックス(位置)を記憶するべく実行される。
演算セクション440は、(対応するマスクが全て1であることによって示されるように、すなわち、IsFullMask(K1)が真の場合に)満杯のベクトルのベクトル演算を処理する。V1が有効データエレメントで満杯ではない場合(ブロック535)、及びV1に読み込まれていない複数の入力データエレメントが存在する場合は(ブロック538)、さらなる複数の入力データエレメントが、V2を介してV1に読み込まれることができることが示される(ブロック532―534)。V1がベクトルで満杯ではなく、V1に読み込まれる入力データエレメントがこれ以上存在しない場合(ブロック538)、それは、複数の演算が残余セクション450に進むことを示し、ここでは、演算が終了して複数の結果がアレイXに再保存される(ブロック539)まで、V1内に残った複数のデータエレメントに対する演算が実行される。
V1が複数の有効データエレメントのベクトルで満杯の場合(ブロック535)、V1に対するベクトル演算を実行することができる(ブロック536)。マスクレジスタK1は、V1内に演算をこれ以上必要としないデータエレメントが存在する場合に、更新される。V1内の1または複数のデータエレメントが(K1内の、対応する値がゼロのマスクビットによって示されるように)これ以上の演算を必要としなくなるまで、ベクトル演算は継続し、ここで、そのような複数のデータエレメントは、アレイXに再保存される(ブロック537)。示された実施形態では、複数のデータエレメントは、SCATTER命令により保存されることができ、K1内における複数の値がゼロのマスクビットは、関数knot(K1)を用いて特定されることができる。RWMASKUPDATE及びSPARSEMOV命令を除いて、コードセグメント400で用いられるSCATTER、knot、IsFullMask等の具体的な複数の命令及び複数の関数は、代替的な複数の命令シーケンスによってエミュレートされることができる。
ブロック531―537の演算は、これ以上V2を介してV1に読み込まれる入力データエレメントが存在しなくなる(ブロック538)、すなわち、アレイX内の全ての入力データエレメントがV2に読み込まれ、かつ、V2内の全ての有効データエレメントがV1に移されるときまで、繰り返される。この場合に、残余セクション450が開始する。ここで、V1は、複数の有効データエレメントのベクトルで満杯でなくてもよいが、V1内のそのような複数のデータエレメントは、さらなる演算を必要とする。V1内に残った全てのデータエレメントが必要な反復回数に達するまで、ベクトル演算は継続する(ブロック539)。ここで、V1における複数の演算結果は、(例えば、SCATTER命令を用いて)アレイXに再保存されることができる(ブロック539)。
図5Bは、一実施形態に係るRWMASKUPDATE命令を実行するための方法510のブロックフロー図である。方法510は、プロセッサ(例えば、図1の命令処理装置115)が第1のマスクレジスタ及び第2のマスクレジスタを規定するマスク更新命令を受信する(ブロック511)ことにより開始する。プロセッサは、マスク更新命令を復号化する(ブロック512)。復号化されたマスク更新命令に応答して、プロセッサは、例えば、これらのマスクビットを第1のビット値(例えば、ゼロ)から第2のビット値(例えば、1)に設定することにより(ブロック513)、第1のマスクレジスタ内の所定数のマスクビットを反転させることと、例えば、これらのマスクビットを第2のビット値(例えば、1)から第1のビット値(例えば、ゼロ)に設定することにより(ブロック514)、第2のマスクレジスタ内の所定数のマスクビットを反転させることとを含む複数の演算を実行する。所定数は、第1のマスクレジスタ内で第1のビット値を有するマスクビットの数と、第2のマスクレジスタ内で第2のビット値を有するマスクビットの数との中で、より小さい数である。代替的な実施形態では、第1のビット値は、1であってもよく、第2のビット値は、ゼロであってもよい。
図5Cは、一実施形態に係るSPARSEMOV命令を実行するための方法520のブロックフロー図である。方法520は、プロセッサ(例えば、図1の命令処理装置115)が、第1のマスクレジスタ、第2のマスクレジスタ、第1のベクトルレジスタ及び第2のベクトルレジスタを規定するベクトル移動命令を受信することにより開始する(ブロック521)。プロセッサは、ベクトル移動演算を復号化する(ブロック522)。復号化されたベクトル移動命令に応答して、かつ、第1及び第2のマスクレジスタ内の複数のマスクビット値に基づいて、プロセッサは、第1のベクトルレジスタ内の所定数の対象データエレメントを、第2のベクトルレジスタ内の所定数のソースデータエレメントと置換する(ブロック523)。一実施形態では、各ソースデータエレメントは、第2のマスクレジスタ内で第2のビット値(例えば、1)を有するマスクビットに対応し、各対象データエレメントは、第1のマスクレジスタ内で第1のビット値(例えば、ゼロ)を有するマスクビットに対応する。代替的な実施形態では、第1のビット値は、1であってもよく、第2のビット値は、ゼロであってもよい。所定数は、第1のマスクレジスタ内で第1のビット値を有するマスクビットの数と、第2のマスクレジスタ内で第2のビット値を有するマスクビットの数との中で、より小さい数である。
複数の様々な実施形態において、図5A−Cの方法は、汎用プロセッサ、特殊用途プロセッサ(例えば、グラフィクスプロセッサ又はデジタルシグナルプロセッサ)もしくは他のタイプのデジタルロジックデバイス又は命令処理装置によって実行されてもよい。いくつかの実施形態では、図5A−Cの方法は、図1の命令処理装置115もしくは図7−13に示す複数の実施形態などの、同様のプロセッサ、装置又はシステムによって実行されてもよい。さらに、図1の命令処理装置115は、図7−13に示すプロセッサ、装置又はシステムと同様に、図5A−Cの方法と同じ、同様の又は異なる複数の演算及び方法の実施形態を実行してもよい。
いくつかの実施形態では、図1の命令処理装置115は、ソース命令セットからターゲット命令セットに命令を変換する命令変換部と連携して、動作してもよい。例えば、命令変換部は、命令を、コアによって処理される1または複数の他の命令に、(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)変換、モーフィング、エミュレート又は他の方法で変換してもよい。命令変換部は、ソフトウェア、ハードウェア、ファームウェア又はこれらの組み合わせで実装されてもよい。命令変換部は、プロセッサ上にあってもよく、プロセッサ外にあってもよく、又は部分的にプロセッサ上かつ部分的にプロセッサ外にあってもよい。
図6は、本発明の複数の実施形態に係るソフトウェア命令変換器の利用を対比するブロック図である。示された実施形態では、命令変換部は、ソフトウェア命令変換器であるが、代替的に、命令変換部は、ソフトウェア、ファームウェア、ハードウェア又はこれらの様々な複数の組み合わせで実装されてもよい。図6は、少なくとも1つのx86命令セットコアを有するプロセッサ616によってネイティブで実行され得るx86バイナリコード606を生成するべく、x86コンパイラ604を用いてコンパイルされ得る高水準言語602のプログラムを示す。少なくとも1つのx86命令セットコアを有するプロセッサ616は、少なくとも1つのx86命令セットコアを有するインテル社製プロセッサと実質的に同じ結果を達成するべく、(1)インテル社製x86命令セットコアの命令セットの大部分、もしくは(2)複数のアプリケーションのオブジェクトコードバージョン又は少なくとも1つのx86命令セットコアを有するインテル社製プロセッサ上で実行されることが想定された他のソフトウェアを互換可能に実行又は他の方法で処理することにより、インテル社製プロセッサと実質的に同じ複数の機能を実行可能であるとともに、少なくとも1つのx86命令セットコアを有する任意のプロセッサを表す。x86コンパイラ604は、さらなるリンク処理の有無に関わらず、少なくとも1つのx86命令セットコアを有するプロセッサ616上で実行可能なx86バイナリコード606(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。
同様に、図6は、少なくとも1つのx86命令セットコアを有さないプロセッサ614(例えば、カリフォルニア州サニーベールのMIPSテクノロジーズ(MIPS Technologies)のMIPS命令セットを実行する、及び/又はカリフォルニア州サニーベールのARMホールディングス(ARM Holdings)のARM命令セットを実行する複数のコアを有するプロセッサ)によってネイティブで実行され得る、代替的な命令セットバイナリコード610を生成するべく、代替的な命令セットコンパイラ608を用いてコンパイルされ得る高水準言語602のプログラムを示す。命令変換部612は、x86バイナリコード606を、x86命令セットコアを有さないプロセッサ614によってネイティブで実行され得るコードに変換するために用いられる。この変換されたコードは、このような変換が可能な命令変換部の製造が困難であるため、代替的な命令セットバイナリコード610と同じとなる可能性は低いが、変換されたコードは、全般的な演算を達成し、代替的な命令セットからの複数の命令により補完される。したがって、命令変換部612は、エミュレート、シミュレーション又は任意の他の処理を介して、プロセッサもしくはx86命令セットプロセッサ又はコアを有さない他の電子デバイスにx86バイナリコード606を実行させるソフトウェア、ファームウェア、ハードウェア又はこれらの組み合わせを表す。
[複数の例示的なコアアーキテクチャ]
[インオーダ及びアウトオブオーダコアのブロック図]
図7Aは、本発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を例示するブロック図である。図7Bは、本発明の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を例示するブロック図である。図7A及び7Bにおける複数の実線のボックスは、インオーダパイプライン及びインオーダコアを示し、選択的に追加される複数の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行/実行パイプライン及びコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであることから、アウトオブオーダ態様について説明する。
図7Aでは、プロセッサパイプライン700は、フェッチステージ702、長さ復号ステージ704、復号ステージ706、配分ステージ708、リネームステージ710、スケジューリング(ディスパッチ又は発行としても知られる)ステージ712、レジスタ読み出し/メモリ読み出しステージ714、実行ステージ716、ライトバック/メモリ書込みステージ718、例外処理ステージ722及びコミットステージ724を含む。
図7Bは、実行エンジンユニット750に結合されたフロントエンドユニット730を含むプロセッサコア790を示し、両方ともメモリユニット770に結合される。コア790は、縮小命令セットコンピュータ(RISC)コア、複合命令セットコンピュータ(CISC)コア、超長命令語(VLIW)コアもしくはハイブリッド又は代替的なコアタイプであってもよい。さらに他のオプションとして、コア790は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用演算画像処理ユニット(GPGPU)コア、グラフィックコアなどのような特殊用途コアであってもよい。
フロントエンドユニット730は、命令キャッシュユニット734に結合された分岐予測ユニット732を含み、命令キャッシュユニット734は、命令トランスレーションルックアサイドバッファ(TLB)736に結合され、TLB736は、命令フェッチユニット738に結合され、命令フェッチユニット738は、復号ユニット740に結合される。復号ユニット740(又はデコーダ)は、複数の命令を復号化し、出力として、1または複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令もしくは元の複数の命令から復号化された、又は他の方法で反映する、又は導出された他の制御信号を生成してもよい。復号ユニット740は、複数の様々な異なるメカニズムを用いて実装されてもよい。適した複数のメカニズムの例は、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ(PLA)、マイクロコード読み出し専用メモリ(ROM)等を含む。一実施形態では、コア790は、マイクロコードROM又は(例えば、復号ユニット740、さもなければフロントエンドユニット730内で)特定の複数のマクロ命令に対するマイクロコードを記憶する他のメディアを含む。復号ユニット740は、実行エンジンユニット750内のリネーム/配分ユニット752に結合される。
実行エンジンユニット750は、リタイアメントユニット754及び1または複数のスケジューラユニット756のセットに結合されたリネーム/配分ユニット752を含む。スケジューラユニット756は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット756は、物理レジスタファイルユニット758に結合される。物理レジスタファイルユニット758のそれぞれは、1または複数の物理レジスタファイルを表し、異なる物理レジスタファイルが、スカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、次に実行されるべき命令のアドレスである命令ポインタ)などの、1または複数の異なるデータ型を記憶する。一実施形態では、物理レジスタファイルユニット758は、ベクトルレジスタユニット、書き込みマスクレジスタユニット及びスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、複数のベクトルマスクレジスタ及び複数の汎用レジスタを提供してもよい。物理レジスタファイルユニット758は、リタイアメントユニット754と重複することにより、レジスタリネーミング及びアウトオブオーダ実行が実装され得る様々な複数の態様(例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いて、フューチャファイル、ヒストリバッファ及びリタイアメントレジスタファイルを用いて、レジスタマップ及び複数のレジスタのプールを用いて、等)を示す。リタイアメントユニット754及び物理レジスタファイルユニット758は、実行クラスタ760に結合される。実行クラスタ760は、1または複数の実行ユニット762のセット及び1または複数のメモリアクセスユニット764のセットを含む。実行ユニット762は、複数の様々な型のデータ(例えば、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して、様々な複数の演算(例えば、複数のシフト、加算、減算、乗算)を実行してもよい。いくつかの実施形態は、具体的な複数の機能又は複数の機能の複数のセット専用の多数の実行ユニットを含んでもよく、複数の他の実施形態は、1つだけの実行ユニット又は全ての機能を全てが実行する複数の実行ユニットを含んでもよい。スケジューラユニット756、物理レジスタファイルユニット758及び実行クラスタ760は、場合によっては複数として示されるが、その理由は、特定の複数の実施形態は、特定の複数のデータ型/複数の演算(例えば、各々が自己のスケジューラユニット、物理レジスタファイルユニット及び/又は実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点/パック型整数/パック型浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン及び/又はメモリアクセスパイプライン、及び、個別のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット764を有する特定の複数の実施形態が実装される)に対して個別の複数のパイプラインを形成するからである。個別の複数のパイプラインが用いられる場合、これらのパイプラインのうちの1または複数がアウトオブオーダ発行/実行であり、残りがインオーダであってもよいことも理解されたい。
メモリアクセスユニット764のセットは、データTLBユニット772を含むメモリユニット770に結合され、データTLBユニット772は、データキャッシュユニット774に結合され、データキャッシュユニット774は、二次(L2)キャッシュユニット776に結合される。例示的な一実施形態では、メモリアクセスユニット764は、読み込みユニット、記憶アドレスユニット及び記憶データユニットを含んでもよく、これらのそれぞれは、メモリユニット770内のデータTLBユニット772に結合される。命令キャッシュユニット734は、メモリユニット770内の二次(L2)キャッシュユニット776にさらに結合される。L2キャッシュユニット776は、1または複数の他のレベルのキャッシュ、及び最終的にはメインメモリに結合される。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン700を以下のとおり実装してもよい。1)命令フェッチ738が、フェッチステージ702及び長さ復号ステージ704を実行し、2)復号ユニット740が、復号ステージ706を実行し、3)リネーム/配分ユニット752が、配分ステージ708及びリネームステージ710を実行し、4)スケジューラユニット756が、スケジューリングステージ712を実行し、5)物理レジスタファイルユニット758及びメモリユニット770が、レジスタ読み出し/メモリ読み出しステージ714を実行し、実行クラスタ760が、実行ステージ716を実行し、6)メモリユニット770及び物理レジスタファイルユニット758が、ライトバック/メモリ書込みステージ718を実行し、7)様々な複数のユニットが、例外処理ステージ722に関与してもよく、かつ8)リタイアメントユニット754及び物理レジスタファイルユニット758が、コミットステージ724を実行する。
コア790は、本明細書に記載された命令を含む1または複数の命令セット(例えば、x86命令セット(複数のより新しいバージョンに追加されたいくつかの拡張を有する)、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスのARM命令セット(NEONなどの複数の選択的なさらなる拡張を有する))をサポートしてもよい。一実施形態では、コア790は、パックドデータ命令セット拡張(例えば、SSE、AVX1、AVX2等)をサポートするロジックを含むことによって、多くのマルチメディアアプリケーションによって用いられる複数の演算が、パックドデータを用いて実行される。
理解するべきことは、コアは、マルチスレッディング(複数の演算又は複数のスレッドの2またはそれより多くの並列セットを実行すること)をサポートしてもよく、時分割マルチスレッディング、同時マルチスレッディング(単一の物理的コアが複数のスレッドのそれぞれに対して論理的コアを提供することにより、物理的コアが同時マルチスレッディングを実行すること)又はこれらの組み合わせ(例えば、時分割フェッチ及び復号化、その後、インテル(登録商標)ハイパースレッディング・テクノロジーなどでの同時マルチスレッディング)を含む数々の態様で、マルチスレッディングを実行してもよい。
レジスタリネーミングについて、アウトオブオーダ実行との関連で説明しているが、理解するべきことは、 インオーダアーキテクチャにおいて、レジスタリネーミングが用いられてもよい。示されたプロセッサの実施形態は、個別の命令キャッシュユニット734及びデータキャッシュユニット774と共有のL2キャッシュユニット776とをさらに含むが、代替的な複数の実施形態は、命令及びデータの両方のための、例えば、一次(L1)内部キャッシュ又は複数のレベルの内部キャッシュなどの単一の内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュと、コア及び/又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでもよい。
代替的に、全てのキャッシュは、コア及び/又はプロセッサの外部にあってもよい。
[具体的な例示的なインオーダコアアーキテクチャ]
図8A−Bは、より具体的な、例示的なインオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかのロジックブロック(同じ型及び/又は異なる型の他の複数のコアを含む)の中の1つであってもよい。複数のロジックブロックは、用途に応じて、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を介して、いくつかの固定機能ロジック、メモリI/Oインターフェース及び他の必要なI/Oロジックと通信を行う。
図8Aは、本発明の複数の実施形態に係る単一のプロセッサコアのブロック図であり、オンダイの相互接続ネットワーク802との接続及び二次(L2)キャッシュローカルサブセット804と共に示される。一実施形態では、命令デコーダ800は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ806によれば、スカラ及びベクトルユニットに対して、キャッシュメモリへの低レイテンシアクセスが可能である。一実施形態では(設計の単純化のために)、スカラユニット808及びベクトルユニット810は、個別のレジスタセット(それぞれ、複数のスカラレジスタ812及び複数のベクトルレジスタ814)を用い、これらの間で転送されるデータは、一次(L1)キャッシュ806のメモリに書き込まれてから再読み出しされるが、本発明の代替的な複数の実施形態は、異なるアプローチ(例えば、単一のレジスタセットを用いる、又は書き込み及び再読み出しを行うことなく、2つのレジスタファイル間でデータを転送させる通信パスを含む)を用いてもよい。
L2キャッシュローカルサブセット804は、プロセッサコアあたり1つの個別のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、自己のL2キャッシュローカルサブセット804に対するダイレクトアクセスパスを有する。プロセッサコアに読み出されたデータは、自己のL2キャッシュサブセット804に記憶され、迅速かつ、自己の複数のローカルL2キャッシュサブセットにアクセスする他の複数のプロセッサコアと並行に、アクセスすることができる。プロセッサコアに書き込まれたデータは、自己のL2キャッシュサブセット804に記憶され、必要な場合には、他の複数のサブセットからフラッシュされる。リングネットワークは、共有のデータに対するコヒーレンシを保証する。リングネットワークが双方向であることにより、複数のプロセッサコア、複数のL2キャッシュ及び他の複数のロジックブロックなどのエージェントは、チップ内で互いに通信を行うことができる。各リングデータパスは、各方向1012ビット幅である。
図8Bは、本発明の複数の実施形態に係る図8Aのプロセッサコアの一部の拡大図である。図8Bは、L1キャッシュ806の一部であるL1データキャッシュ806Aと、併せて、ベクトルユニット810及び複数のベクトルレジスタ814に関するさらなる詳細とを含む。
具体的には、ベクトルユニット810は、整数、単精度浮動及び倍精度浮動命令のうちの1または複数を実行する16幅ベクトル処理ユニット(VPU)(16幅ALU828を参照)である。VPUは、再構成ユニット820による複数のレジスタ入力の再構成、数字変換ユニット822A−Bによる数字変換、及び複製ユニット824によるメモリ入力に対する複製をサポートする。複数の書き込みマスクレジスタ826により、複数の得られたベクトルの書き込みを記述することができる。
[集積メモリコントローラ及びグラフィックを有するプロセッサ]
図9は、本発明の複数の実施形態に係るプロセッサ900のブロック図であり、プロセッサ900は、1より多くのコアを有してもよく、集積メモリコントローラを有してもよく、集中画像表示を有してもよい。図9の複数の実線のボックスは、単一のコア902A、システムエージェント910、1または複数のバスコントローラユニット916のセットを有するプロセッサ900を示し、選択的に追加された複数の破線のボックスは、複数のコア902A−Nを有する代替的なプロセッサ900、システムエージェントユニット910内の1または複数の集積メモリコントローラユニット914のセット及び特殊用途ロジック908を示す。
したがって、プロセッサ900の異なる複数の実装は、1)集中画像表示及び/又は科学的(スループット)ロジック(1または複数のコアを含んでもよい)である特殊用途ロジック908を有するCPU、及び1または複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、この2つの組み合わせ)であるコア902A−N、2)主にグラフィック及び/又は科学的(スループット)用として意図された多数の特殊用途コアであるコア902A−Nを有するコプロセッサ、及び3)多数の汎用インオーダコアであるコア902A−Nを有するコプロセッサを含んでもよい。したがって、プロセッサ900は、汎用プロセッサ、コプロセッサ又は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(汎用画像処理ユニット)、ハイスループット多集積コア(MIC)コプロセッサ(30またはそれより多くのコアを含む)、組込みプロセッサなどのような特殊用途プロセッサであってもよい。プロセッサは、1または複数のチップ上に実装されてもよい。プロセッサ900は、例えば、BiCMOS、CMOS又はNMOSなどの多数の処理技術のいずれかを用いて、1または複数の基板の一部であってもよく、及び/又はその上に実装されてもよい。
メモリ階層は、複数のコア、1または複数の共有キャッシュユニット906又はそのセット、及び複数の集積メモリコントローラユニット914のセットに結合される外部メモリ(不図示)内に、1または複数のレベルのキャッシュを含む。複数の共有キャッシュユニット906のセットは、二次(L2)、三次(L3)、四次(L4)又は他の複数のレベルのキャッシュなどの1または複数の中レベルキャッシュ、ラストレベルキャッシュ(LLC)及び/又はこれらの組み合わせを含んでもよい。一実施形態では、リングベースの相互接続ユニット912が、集中画像表示ロジック908、複数の共有キャッシュユニット906のセット及びシステムエージェントユニット910/集積メモリコントローラユニット914を相互接続するが、代替的な複数の実施形態は、そのような複数のユニットを相互接続するための任意の数の周知技術を用いてもよい。一実施形態では、1または複数のキャッシュユニット906と複数のコア902A−Nとの間で、コヒーレンシが保持される。
いくつかの実施形態では、コア902A−Nのうちの1または複数は、マルチスレッディングが可能である。システムエージェント910は、コア902A−Nの調整及び操作を行うこれらのコンポーネントを含む。システムエージェントユニット910は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを含んでもよい。PCUは、コア902A−N及び集中画像表示ロジック908の電力状態を調整するために必要なロジック及び複数のコンポーネントであってもよく、又はこれらを含んでもよい。ディスプレイユニットは、1または複数の外部接続ディスプレイを駆動するためのものである。
コア902A−Nは、アーキテクチャ命令セットに関してホモジニアス又はヘテロジニアスであってもよく、すなわち、コア902A−Nのうちの2またはそれより多くは、同じ命令セットを実行可能であってもよいが、他は、その命令セット又は異なる命令セットのサブセットのみを実行可能であってもよい。
[例示的な複数のコンピュータアーキテクチャ]
図10−13は、例示的な複数のコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型PC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組込みプロセッサ、デジタルシグナルプロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス及び様々な他の電子デバイス用の当技術分野で公知の他の複数のシステム設計及び複数の構成も、適している。概して、本明細書で開示されるように、プロセッサ及び/又は他の実行ロジックを組み込み可能な多様なシステム又は電子デバイスが、概して適している。
ここで、図10を参照すると、本発明の一実施形態に係るシステム1000のブロック図が示される。システム1000は、コントローラハブ1020に結合される1または複数のプロセッサ1010、1015を含んでもよい。一実施形態では、コントローラハブ1020は、(個別のチップ上にあってもよい)グラフィックメモリコントローラハブ(GMCH)1090及び入出力ハブ(IOH)1050を含み、GMCH1090は、メモリ1040及びコプロセッサ1045が結合されるメモリ及び複数のグラフィクスコントローラを含み、IOH1050は、複数の入出力(I/O)デバイス1060をGMCH1090に結合する。代替的に、メモリ及び複数のグラフィクスコントローラの一方又は両方は、プロセッサ内に集積され(本明細書に記載されたように)、メモリ1040及びコプロセッサ1045は、プロセッサ1010に直接結合され、コントローラハブ1020は、単一のチップにIOH1050を有する。
さらなるプロセッサ1015の選択的な性質を、図10に複数の破線で示す。各プロセッサ1010、1015は、本明細書に記載された複数のプロセッサコアのうちの1または複数を含んでもよく、いくつかのバージョンのプロセッサ900であってもよい。
メモリ1040は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、位相変化メモリ(PCM)又はこれら2つの組み合わせであってもよい。少なくとも1つの実施形態について、コントローラハブ1020は、フロントサイドバス(FSB)のようなマルチドロップバス、クイックパス相互接続(QPI)のようなポイントツーポイントインターフェース又は同様の接続1095を介して、プロセッサ1010、1015と通信を行う。
一実施形態では、コプロセッサ1045は、例えば、ハイスループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組込みプロセッサなどのような特殊用途プロセッサである。一実施形態では、コントローラハブ1020は、集中画像表示アクセラレータを含んでもよい。
物理的リソース1010、1015の間には、アーキテクチャ、マイクロアーキテクチャ、温度、電力消費特性等を含む様々な利益の基準に関して、数々の違いが存在しうる。
一実施形態では、プロセッサ1010は、一般的なタイプの複数のデータ処理動作を制御する複数の命令を実行する。複数の命令内に、複数のコプロセッサ命令が組み込まれていてもよい。プロセッサ1010は、これらの複数のコプロセッサ命令を、付属のコプロセッサ1045によって実行されるべきタイプのものと認識する。従って、プロセッサ1010は、これらの複数のコプロセッサ命令(又は複数のコプロセッサ命令を表す複数の制御信号)を、コプロセッサバス又は他の相互接続上で、コプロセッサ1045に対して発行する。コプロセッサ1045は、受信された複数のコプロセッサ命令を受け付けて実行する。
ここで、図11を参照すると、本発明の実施形態に係る第1のより具体的な例示的なシステム1100のブロック図が示される。図11に示されるように、マルチプロセッサシステム1100は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1150を介して結合される第1のプロセッサ1170及び第2のプロセッサ1180を含む。プロセッサ1170および1180のそれぞれは、いくつかのバージョンのプロセッサ900であってもよい。本発明の一実施形態では、プロセッサ1170および1180は、それぞれプロセッサ1010および1015であり、コプロセッサ1138は、コプロセッサ1045である。他の実施形態では、プロセッサ1170および1180は、それぞれプロセッサ1010、コプロセッサ1045である。
プロセッサ1170および1180は、集積メモリコントローラ(IMC)ユニット1172および1182をそれぞれ含むものとして示される。プロセッサ1170は、自己のバスコントローラユニットの一部として、ポイントツーポイント(P−P)インターフェース1176および1178をさらに含み、同様に、第2のプロセッサ1180は、P−Pインターフェース1186および1188を含む。プロセッサ1170、1180は、複数のP−Pインターフェース回路1178、1188を用いたポイントツーポイント(P−P)インターフェース1150を介して、情報を交換してもよい。図11に示されるように、IMC1172および1182は、複数のプロセッサを個別のメモリ、すなわち、個別のプロセッサにローカルに付属するメインメモリの一部となり得るメモリ1132及びメモリ1134に結合する。
プロセッサ1170、1180は、複数のポイントツーポイントインターフェース回路1176、1194、1186、1198を用いる個々のP−Pインターフェース1152、1154を介して、チップセット1190と情報を交換してもよい。チップセット1190は、高性能インターフェース1139を介して、コプロセッサ1138と任意選択的に情報を交換してもよい。一実施形態では、コプロセッサ1138は、例えば、ハイスループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組込みプロセッサなどのような特殊用途プロセッサである。
共有キャッシュ(不図示)は、いずれかのプロセッサ内に含まれ、又は両方のプロセッサの外部にあってもよいが、プロセッサが低電力モードであっても、いずれか又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに記憶され得るように、ポイントツーポイント相互接続を介して複数のプロセッサに接続される。
チップセット1190は、インターフェース1196を介して、第1のバス1116に結合されてもよい。一実施形態では、第1のバス1116は、ペリフェラルコンポーネントインターコネクト(PCI)バスもしくはPCI Expressバス又は他の第3世代I/O相互接続バスなどのバスであってもよいが、本発明の範囲はこれに限定されない。
図11に示されるように、様々なI/Oデバイス1114が、第1のバス1116を第2のバス1120に結合するバスブリッジ1118と共に、第1のバス1116に結合されてもよい。一実施形態では、コプロセッサ、ハイスループットMICプロセッサ、GPGPUのアクセラレータ(例えば、グラフィックアクセラレータ又はデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイもしくは任意の他のプロセッサなどの1または複数の追加的なプロセッサ1115が、第1のバス1116に結合される。一実施形態では、第2のバス1120は、ローピンカウント(LPC)バスであってもよい。
例えば、キーボード及び/又はマウス1122、通信デバイス1127、及びディスクドライブ、又は複数の命令/コード及びデータ1130を含みうる他の大容量ストレージデバイスなどの記憶ユニット1128を含む様々な複数のデバイスが、一実施形態では、第2のバス1120に結合されてもよい。
さらに、オーディオI/O1124が、第2のバス1120に結合されてもよい。なお、他の複数のアーキテクチャが、適用可能である。例えば、図11のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は他のそのようなアーキテクチャを実装してもよい。
ここで、図12を参照すると、本発明の実施形態に係る第2のより具体的な、例示的なシステム1200のブロック図が示される。図11及び12における同様の複数のエレメントには、同様の参照番号が付され、図11の複数の特定の態様は、図12の他の複数の態様を分かりにくくしないために、図12では省略されている。
図12は、プロセッサ1170、1180は、それぞれ集積メモリ及びI/O制御ロジック(「CL」)1172及び1182を含んでもよいことを示す。したがって、CL1172、1182は、複数の集積メモリコントローラユニットを含み、かつ、I/O制御ロジックを含む。図12は、メモリ1132、1134のみがCL1172、1182に結合されるのではなく、複数のI/Oデバイス1214も、制御ロジック1172、1182に結合されることを示す。複数のレガシーI/Oデバイス1215は、チップセット1190に結合される。
ここで、図13を参照すると、本発明の実施形態に係るSoC1300のブロック図が示される。図9における同様の複数のエレメントには、同様の参照番号が付される。また、複数の破線のボックスは、より進化したSoC上のオプションの機能である。図13では、相互接続ユニット1302は、1または複数のコア202A―N及び共有キャッシュユニット906のセットを含むアプリケーションプロセッサ1310、システムエージェントユニット910、バスコントローラユニット916、集積メモリコントローラユニット914、集中画像表示ロジック、画像プロセッサ、オーディオプロセッサ及びビデオプロセッサを含み得る1または複数のコプロセッサ1320またはそのセット、スタティックランダムアクセスメモリ(SRAM)ユニット1330、ダイレクトメモリアクセス(DMA)ユニット1332及び1または複数の外部ディスプレイに結合するためのディスプレイユニット1340に結合される。一実施形態では、コプロセッサ1320は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、GPGPU、ハイスループットMICプロセッサ、組込みプロセッサなどのような特殊用途プロセッサを含む。
本明細書に開示される複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア又はそのような複数の実装アプローチの組み合わせに実装されてもよい。本発明の複数の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性及び不揮発性メモリ及び/又は複数のストレージエレメントを含む)、少なくとも1つの入力デバイスおよび少なくとも1つの出力デバイスを備えるプログラム可能な複数のシステム上で実行する複数のコンピュータプログラム又はプログラムコードとして実装されてもよい。
図11に示すコード1130などのプログラムコードは、本明細書に記載された複数の機能を実行し、出力情報を生成するべく、複数の入力命令に適用されてもよい。出力情報は、1または複数の出力デバイスに、公知の態様で適用されてもよい。この適用のために、処理システムは、例えば、デジタルシグナルプロセッサ(DSP)、マイクロコントローラ、特殊用途集積回路(ASIC)又はマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信を行うべく、高水準の手順型またはオブジェクト指向プログラミング言語で実装されてもよい。プログラムコードは、必要に応じて、アセンブリ言語又は機械言語でさらに実装されてもよい。実際には、本明細書に記載された複数のメカニズムは、その範囲において、任意の特定のプログラム言語に限定されるものではない。いずれの場合であっても、言語は、コンパイル言語またはインタプリタ型言語であってもよい。
少なくとも1つの実施形態のうち1または複数の態様は、機械可読媒体に記憶された、プロセッサ内の様々なロジックを表す複数の表現命令によって実装されてもよく、このような命令は、機械に読み出された場合に、本明細書に記載される複数の技術を実行するべく、機械にロジックを組み立てさせる。「IPコア」として知られるそのような複数の表現は、有形の機械可読媒体上に記憶されるとともに、様々な顧客又は製造工場に供給されて、実際にロジック又はプロセッサを作り出す製造機械に読み込まれてもよい。
そのような機械可読記憶媒体は、限定的ではないが、機械又はデバイスによって製造又は形成される、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、書き換え可能コンパクトディスク(CD−RW)及び磁気光ディスクを含む任意の他のタイプのディスク、リードオンリメモリ(ROM)などの半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブルROM(EPROM)、フラッシュメモリ、消去可能プログラマブルROM(EEPROM)、位相変化メモリ(PCM)、磁気又は光カードなどのランダムアクセスメモリ(RAM)、もしくは複数の電子的命令を記憶するために適した任意の他のタイプのメディアなどの記憶媒体を含む、複数の物品の非一時的かつ有形の構成を含んでもよい。
従って、本発明の複数の実施形態は、複数の命令を含む、又は本明細書に記載される複数の構造、複数の回路、複数の装置、複数のプロセッサ及び/又は複数のシステム機能を定義するハードウェア記述言語(HDL)などの設計データを含む非一時かつ有形の機械可読媒体をさらに含む。そのような複数の実施形態は、プログラム製品と称されてもよい。
特定の例示的な複数の実施形態が、添付の図面において記載及び示されたが、理解すべきことは、そのような複数の実施形態は、幅広い発明の単なる例示であって、これを制限するものではなく、当業者が本開示を参照することにより、様々な他の複数の変更がされ得ることから、本発明は、示されかつ記載された具体的な複数の構造及び複数の構成に限定されるものではない。成長が速く、さらなる進歩が容易に予見できないこのような技術領域では、開示された複数の実施形態は、技術的進歩を可能とすることによって促進されるように、本開示又は添付された特許請求の範囲の原理を逸脱することなく、容易に構成及び詳細が変更され得る。

Claims (24)

  1. 第1のマスクレジスタ及び第2のマスクレジスタを含むレジスタファイルと、
    前記レジスタファイルに結合され、マスク更新命令を実行する実行回路とを備え、
    前記マスク更新命令に応答して、前記実行回路は、前記第1のマスクレジスタ内の所定数のマスクビットを反転させ、前記第2のマスクレジスタ内の前記所定数のマスクビットを反転させる、装置。
  2. 前記所定数は、前記第1のマスクレジスタ内の第1のビット値を有するマスクビットの数と、前記第2のマスクレジスタ内の第2のビット値を有するマスクビットの数との中で、より小さい数である、請求項1に記載の装置。
  3. 前記第1のビット値は、前記第2のビット値と同じである、請求項2に記載の装置。
  4. 前記第1のビット値は、前記第2のビット値の反転である、請求項2に記載の装置。
  5. 前記第1のマスクレジスタ内の前記所定数のマスクビットは、前記第1のマスクレジスタ内の複数の下位のマスクビット又は複数の上位のマスクビットのいずれかである、請求項1から4のいずれか1項に記載の装置。
  6. 前記第2のマスクレジスタ内の前記所定数のマスクビットは、前記第2のマスクレジスタ内の複数の下位のマスクビット又は複数の上位のマスクビットのいずれかである、請求項1から5のいずれか1項に記載の装置。
  7. 前記第1のマスクレジスタに関連する第1のベクトルレジスタであって、前記第1のマスクレジスタの各マスクビットは、前記第1のベクトルレジスタ内の対応するデータエレメントに対する条件が満たされているか否かを示す、第1のベクトルレジスタと、
    前記第2のマスクレジスタに関連する第2のベクトルレジスタであって、前記第2のマスクレジスタの各マスクビットは、前記第2のベクトルレジスタ内の対応するデータエレメントに対する前記条件が満たされているか否かを示す、第2のベクトルレジスタとをさらに備える、請求項1から6のいずれか1項に記載の装置。
  8. 所定データエレメントに対する前記条件が満たされる場合、前記所定データエレメントに対するさらなる演算が必要である、請求項7に記載の装置。
  9. プロセッサによって、第1のマスクレジスタ及び第2のマスクレジスタを規定するマスク更新命令を受信する段階と、
    前記マスク更新命令に応答して、
    前記第1のマスクレジスタ内の所定数のマスクビットを反転させる段階と、
    前記第2のマスクレジスタ内の前記所定数のマスクビットを反転させる段階とを含む複数の演算を実行する段階とを備える、方法。
  10. 前記所定数は、前記第1のマスクレジスタ内の第1のビット値を有するマスクビットの数と、前記第2のマスクレジスタ内の第2のビット値を有するマスクビットの数との中で、より小さい数である、請求項9に記載の方法。
  11. 前記第1のビット値は、前記第2のビット値と同じである、請求項10に記載の方法。
  12. 前記第1のビット値は、前記第2のビット値の反転である、請求項10に記載の方法。
  13. 前記第1のマスクレジスタ内の前記所定数のマスクビットは、前記第1のマスクレジスタ内の複数の下位のマスクビット又は複数の上位のマスクビットのいずれかである、請求項9から12のいずれか1項に記載の方法。
  14. 前記第2のマスクレジスタ内の前記所定数のマスクビットは、前記第2のマスクレジスタ内の複数の下位のマスクビット又は複数の上位のマスクビットのいずれかである、請求項9から13のいずれか1項に記載の方法。
  15. 前記第1のマスクレジスタの各マスクビットは、第1のベクトルレジスタ内の対応するデータエレメントに対する条件が満たされているか否かを示し、
    前記第2のマスクレジスタの各マスクビットは、第2のベクトルレジスタ内の対応するデータエレメントに対する前記条件が満たされているか否かを示す、請求項9から14のいずれか1項に記載の方法。
  16. 所定データエレメントに対する前記条件が満たされる場合、前記所定データエレメントに対するさらなる演算が必要である、請求項15に記載の方法。
  17. 入力データアレイを記憶するメモリと、
    マスク更新命令の複数のオペランドを記憶する第1のマスクレジスタ及び第2のマスクレジスタと、前記第1のマスクレジスタ及び前記第2のマスクレジスタにそれぞれ関連し、ベクトル演算のために前記入力データアレイを読み込む第1のベクトルレジスタ及び第2のベクトルレジスタとを含むレジスタファイルと、
    前記レジスタファイルに結合され、前記マスク更新命令を実行する実行回路とを備え、
    前記マスク更新命令に応答して、前記実行回路は、前記第1のマスクレジスタ内の所定数のマスクビットを、第1のビット値から第2のビット値に設定し、前記第2のマスクレジスタ内の前記所定数のマスクビットを、前記第2のビット値から前記第1のビット値に設定する、システム。
  18. 前記所定数は、前記第1のマスクレジスタ内の第1のビット値を有するマスクビットの数と、前記第2のマスクレジスタ内の第2のビット値を有するマスクビットの数との中で、より小さい数である、請求項17に記載のシステム。
  19. 前記第1のビット値は、前記第2のビット値と同じである、請求項17または18に記載のシステム。
  20. 前記第1のビット値は、前記第2のビット値の反転である、請求項17または18に記載のシステム。
  21. 前記第1のマスクレジスタ内の前記所定数のマスクビットは、前記第1のマスクレジスタ内の複数の下位のマスクビット又は複数の上位のマスクビットのいずれかである、請求項17から20のいずれか1項に記載のシステム。
  22. 前記第2のマスクレジスタ内の前記所定数のマスクビットは、前記第2のマスクレジスタ内の複数の下位のマスクビット又は複数の上位のマスクビットのいずれかである、請求項17から21のいずれか1項に記載のシステム。
  23. 前記第1のマスクレジスタの前記第1のビット値の各マスクビットは、前記第1のベクトルレジスタ内の対応するデータエレメントに対する条件が満たされていないことを示し、
    前記第2のマスクレジスタの前記第2のビット値の各マスクビットは、前記第2のベクトルレジスタ内の対応するデータエレメントに対する前記条件が満たされていることを示す、請求項17から22のいずれか1項に記載のシステム。
  24. 所定データエレメントに対する前記条件が満たされる場合、前記所定データエレメントに対するさらなる演算が必要である、請求項23に記載のシステム。
JP2015527454A 2012-09-28 2013-06-12 装置、方法、およびシステム Expired - Fee Related JP5987233B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/630,247 US9400650B2 (en) 2012-09-28 2012-09-28 Read and write masks update instruction for vectorization of recursive computations over interdependent data
US13/630,247 2012-09-28
PCT/US2013/045505 WO2014051737A1 (en) 2012-09-28 2013-06-12 Read and write masks update instruction for vectorization of recursive computations over independent data

Publications (2)

Publication Number Publication Date
JP2015524978A true JP2015524978A (ja) 2015-08-27
JP5987233B2 JP5987233B2 (ja) 2016-09-07

Family

ID=50386386

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015527454A Expired - Fee Related JP5987233B2 (ja) 2012-09-28 2013-06-12 装置、方法、およびシステム

Country Status (7)

Country Link
US (3) US9400650B2 (ja)
JP (1) JP5987233B2 (ja)
KR (1) KR101744031B1 (ja)
CN (2) CN104603745B (ja)
DE (1) DE112013004770T5 (ja)
GB (2) GB2583415B (ja)
WO (1) WO2014051737A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015528610A (ja) * 2012-09-28 2015-09-28 インテル・コーポレーション リードマスク及びライトマスクにより制御されるベクトル移動命令
JP2015534189A (ja) * 2012-09-28 2015-11-26 インテル・コーポレーション 複数のビットを左にシフトし、複数の1を複数の下位ビットにプルインするための命令

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2528115B (en) * 2014-07-11 2021-05-19 Advanced Risc Mach Ltd Dynamic saving of registers in transactions
US10296489B2 (en) * 2014-12-27 2019-05-21 Intel Corporation Method and apparatus for performing a vector bit shuffle
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US10768936B2 (en) 2015-09-19 2020-09-08 Microsoft Technology Licensing, Llc Block-based processor including topology and control registers to indicate resource sharing and size of logical processor
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
GB2549737B (en) * 2016-04-26 2019-05-08 Advanced Risc Mach Ltd An apparatus and method for managing address collisions when performing vector operations
CN106209347B (zh) * 2016-07-22 2019-03-19 武汉大学 一种复杂度可变的任意阶掩码防护方法
US11531552B2 (en) 2017-02-06 2022-12-20 Microsoft Technology Licensing, Llc Executing multiple programs simultaneously on a processor core
US11789734B2 (en) * 2018-08-30 2023-10-17 Advanced Micro Devices, Inc. Padded vectorization with compile time known masks
JPWO2020066375A1 (ja) * 2018-09-25 2021-08-30 日本電気株式会社 情報処理装置、情報処理方法、プログラム

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6059469A (ja) * 1983-09-09 1985-04-05 Nec Corp ベクトル処理装置
JPH0644292A (ja) * 1992-06-18 1994-02-18 Nec Corp ベクトル処理装置
JPH11126200A (ja) * 1997-10-23 1999-05-11 Nec Kofu Ltd ベクトル処理装置
JP2015528610A (ja) * 2012-09-28 2015-09-28 インテル・コーポレーション リードマスク及びライトマスクにより制御されるベクトル移動命令

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS56127266A (en) * 1980-03-10 1981-10-05 Ibm Method of executing and controlling command stream
US5142631A (en) * 1989-02-03 1992-08-25 Digital Equipment Corporation System for queuing individual read or write mask and generating respective composite mask for controlling access to general purpose register
KR100262438B1 (ko) * 1991-05-08 2000-08-01 가나이 쓰도무 연산장치 및 이것을 사용한 비트필드조작 연산방법
US6711665B1 (en) 1993-12-12 2004-03-23 Neomagic Israel Ltd. Associative processor
US5781789A (en) * 1995-08-31 1998-07-14 Advanced Micro Devices, Inc. Superscaler microprocessor employing a parallel mask decoder
JP2904099B2 (ja) * 1996-02-19 1999-06-14 日本電気株式会社 コンパイル装置およびコンパイル方法
JPH10117144A (ja) 1996-10-08 1998-05-06 Nec Ic Microcomput Syst Ltd A/dコンバータ
US5903769A (en) * 1997-03-31 1999-05-11 Sun Microsystems, Inc. Conditional vector processing
US6122728A (en) 1998-02-02 2000-09-19 Compaq Computer Corporation Technique for ordering internal processor register accesses
US6532533B1 (en) * 1999-11-29 2003-03-11 Texas Instruments Incorporated Input/output system with mask register bit control of memory mapped access to individual input/output pins
US7058794B2 (en) 2001-10-23 2006-06-06 Col Gerard M Apparatus and method for masked move to and from flags register in a processor
US7000226B2 (en) * 2002-01-02 2006-02-14 Intel Corporation Exception masking in binary translation
US20040230626A1 (en) * 2003-05-12 2004-11-18 International Business Machines Corporation Computer system method for a one cycle implementation of test under mask instructions
GB2409062C (en) * 2003-12-09 2007-12-11 Advanced Risc Mach Ltd Aliasing data processing registers
GB2411745B (en) * 2004-03-02 2006-08-02 Imagination Tech Ltd Method and apparatus for management of control flow in a simd device
US7706023B2 (en) * 2005-06-30 2010-04-27 Canon Kabushiki Kaisha Data processing method, printing apparatus, host apparatus, and printing system
US7889530B2 (en) * 2007-09-14 2011-02-15 Agate Logic Inc. Reconfigurable content-addressable memory
KR20100108509A (ko) * 2007-11-05 2010-10-07 샌드브리지 테크놀로지스, 인코포레이티드 레지스터 명령 필드를 인코딩하는 방법
US9513905B2 (en) * 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
US7898842B2 (en) * 2008-04-21 2011-03-01 Infineon Technologies Ag Memory for storing a binary state
US20110314263A1 (en) * 2010-06-22 2011-12-22 International Business Machines Corporation Instructions for performing an operation on two operands and subsequently storing an original value of operand

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6059469A (ja) * 1983-09-09 1985-04-05 Nec Corp ベクトル処理装置
JPH0644292A (ja) * 1992-06-18 1994-02-18 Nec Corp ベクトル処理装置
JPH11126200A (ja) * 1997-10-23 1999-05-11 Nec Kofu Ltd ベクトル処理装置
JP2015528610A (ja) * 2012-09-28 2015-09-28 インテル・コーポレーション リードマスク及びライトマスクにより制御されるベクトル移動命令

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015528610A (ja) * 2012-09-28 2015-09-28 インテル・コーポレーション リードマスク及びライトマスクにより制御されるベクトル移動命令
JP2015534189A (ja) * 2012-09-28 2015-11-26 インテル・コーポレーション 複数のビットを左にシフトし、複数の1を複数の下位ビットにプルインするための命令
JP2017107579A (ja) * 2012-09-28 2017-06-15 インテル・コーポレーション リードマスク及びライトマスクにより制御されるベクトル移動命令
JP2017107587A (ja) * 2012-09-28 2017-06-15 インテル・コーポレーション 複数のビットを左にシフトし、複数の1を複数の下位ビットにプルインするための命令

Also Published As

Publication number Publication date
US10503505B2 (en) 2019-12-10
GB202007409D0 (en) 2020-07-01
GB201500822D0 (en) 2015-03-04
GB2583415B (en) 2021-06-23
US20190012171A1 (en) 2019-01-10
US9400650B2 (en) 2016-07-26
JP5987233B2 (ja) 2016-09-07
KR101744031B1 (ko) 2017-06-07
WO2014051737A1 (en) 2014-04-03
KR20150038376A (ko) 2015-04-08
DE112013004770T5 (de) 2015-07-09
GB2520853A (en) 2015-06-03
GB2583415A (en) 2020-10-28
US9934031B2 (en) 2018-04-03
US20160335086A1 (en) 2016-11-17
GB2520853B (en) 2020-07-08
CN104603745A (zh) 2015-05-06
CN109062608B (zh) 2023-09-22
CN104603745B (zh) 2018-09-11
US20140095837A1 (en) 2014-04-03
CN109062608A (zh) 2018-12-21

Similar Documents

Publication Publication Date Title
JP5987233B2 (ja) 装置、方法、およびシステム
JP6340097B2 (ja) リードマスク及びライトマスクにより制御されるベクトル移動命令
JP6351682B2 (ja) 装置および方法
JP6373425B2 (ja) 複数のビットを左にシフトし、複数の1を複数の下位ビットにプルインするための命令
KR101851439B1 (ko) 충돌 검출을 수행하고, 레지스터의 콘텐츠를 다른 레지스터의 데이터 구성요소 위치들로 브로드캐스트하기 위한 시스템들, 장치들 및 방법들
KR102592056B1 (ko) 패킹된 데이터 정렬 플러스 계산 명령어, 프로세서,방법, 및 시스템
US9921832B2 (en) Instruction to reduce elements in a vector register with strided access pattern
KR101966713B1 (ko) 마스크 레지스터에서의 비트들을 반전 및 치환하기 위한 장치 및 방법
JP5985526B2 (ja) システムコールのためのロバスト且つ高性能な命令
JP2018500659A (ja) 高速ベクトルによる動的なメモリ競合検出

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150217

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151228

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160105

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160404

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160524

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160614

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160713

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160720

R150 Certificate of patent or registration of utility model

Ref document number: 5987233

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees