(57)【特許請求の範囲】
【請求項１】
第１のマスクレジスタ及び第２のマスクレジスタを含むレジスタファイルと、
前記レジスタファイルに結合され、マスク更新命令を実行する実行回路とを備え、
前記マスク更新命令に応答して、前記実行回路は、前記第１のマスクレジスタ内の所定数のマスクビットを反転させ、前記第２のマスクレジスタ内の前記所定数のマスクビットを反転させる、装置。
【請求項２】
前記所定数は、前記第１のマスクレジスタ内の第１のビット値を有するマスクビットの数と、前記第２のマスクレジスタ内の第２のビット値を有するマスクビットの数との中で、より小さい数である、請求項１に記載の装置。
【請求項３】
前記第１のビット値は、前記第２のビット値と同じである、請求項２に記載の装置。
【請求項４】
前記第１のビット値は、前記第２のビット値の反転である、請求項２に記載の装置。
【請求項５】
前記第２のマスクレジスタ内の第２のビット値を有するマスクビットの数が、前記第１のマスクレジスタ内の第１のビット値を有するマスクビットの数より小さい場合に、前記第１のマスクレジスタ内の第１のビット値を有するマスクビットのうち、前記所定数のマスクビットとされるものは、前記第１のマスクレジスタ内における上位側の前記所定数のマスクビットか、または、前記第１のマスクレジスタ内における下位側の前記所定数のマスクビットである、請求項２から４のいずれか１項に記載の装置。
【請求項６】
前記第１のマスクレジスタ内の第１のビット値を有するマスクビットの数が、前記第２のマスクレジスタ内の第２のビット値を有するマスクビットの数より小さい場合に、前記第２のマスクレジスタ内の第２のビット値を有するマスクビットのうち、前記所定数のマスクビットとされるものは、前記第２のマスクレジスタ内における上位側の前記所定数のマスクビットか、または、前記第２のマスクレジスタ内における下位側の前記所定数のマスクビットである、請求項２から５のいずれか１項に記載の装置。
【請求項７】
前記第１のマスクレジスタに関連する第１のベクトルレジスタであって、前記第１のマスクレジスタの各マスクビットは、前記第１のベクトルレジスタ内の対応するデータエレメントに対する条件が満たされているか否かを示す、第１のベクトルレジスタと、
前記第２のマスクレジスタに関連する第２のベクトルレジスタであって、前記第２のマスクレジスタの各マスクビットは、前記第２のベクトルレジスタ内の対応するデータエレメントに対する前記条件が満たされているか否かを示す、第２のベクトルレジスタとをさらに備える、請求項１から６のいずれか１項に記載の装置。
【請求項８】
所定データエレメントに対する前記条件が満たされる場合、前記所定データエレメントに対するさらなる演算が必要である、請求項７に記載の装置。
【請求項９】
プロセッサによって、第１のマスクレジスタ及び第２のマスクレジスタを規定するマスク更新命令を受信する段階と、
前記マスク更新命令に応答して、
前記第１のマスクレジスタ内の所定数のマスクビットを反転させる段階と、
前記第２のマスクレジスタ内の前記所定数のマスクビットを反転させる段階とを含む複数の演算を実行する段階とを備える、方法。
【請求項１０】
前記所定数は、前記第１のマスクレジスタ内の第１のビット値を有するマスクビットの数と、前記第２のマスクレジスタ内の第２のビット値を有するマスクビットの数との中で、より小さい数である、請求項９に記載の方法。
【請求項１１】
前記第１のビット値は、前記第２のビット値と同じである、請求項１０に記載の方法。
【請求項１２】
前記第１のビット値は、前記第２のビット値の反転である、請求項１０に記載の方法。
【請求項１３】
前記第２のマスクレジスタ内の第２のビット値を有するマスクビットの数が、前記第１のマスクレジスタ内の第１のビット値を有するマスクビットの数より小さい場合に、前記第１のマスクレジスタ内の第１のビット値を有するマスクビットのうち、前記所定数のマスクビットとされるものは、前記第１のマスクレジスタ内における上位側の前記所定数のマスクビットか、または、前記第１のマスクレジスタ内における下位側の前記所定数のマスクビットである、請求項１０から１２のいずれか１項に記載の方法。
【請求項１４】
前記第１のマスクレジスタ内の第１のビット値を有するマスクビットの数が、前記第２のマスクレジスタ内の第２のビット値を有するマスクビットの数より小さい場合に、前記第２のマスクレジスタ内の第２のビット値を有するマスクビットのうち、前記所定数のマスクビットとされるものは、前記第２のマスクレジスタ内における上位側の前記所定数のマスクビットか、または、前記第２のマスクレジスタ内における下位側の前記所定数のマスクビットである、請求項１０から１３のいずれか１項に記載の方法。
【請求項１５】
前記第１のマスクレジスタの各マスクビットは、第１のベクトルレジスタ内の対応するデータエレメントに対する条件が満たされているか否かを示し、
前記第２のマスクレジスタの各マスクビットは、第２のベクトルレジスタ内の対応するデータエレメントに対する前記条件が満たされているか否かを示す、請求項９から１４のいずれか１項に記載の方法。
【請求項１６】
所定データエレメントに対する前記条件が満たされる場合、前記所定データエレメントに対するさらなる演算が必要である、請求項１５に記載の方法。
【請求項１７】
入力データアレイを記憶するメモリと、
マスク更新命令の複数のオペランドを記憶する第１のマスクレジスタ及び第２のマスクレジスタと、前記第１のマスクレジスタ及び前記第２のマスクレジスタにそれぞれ関連し、ベクトル演算のために前記入力データアレイを読み込む第１のベクトルレジスタ及び第２のベクトルレジスタとを含むレジスタファイルと、
前記レジスタファイルに結合され、前記マスク更新命令を実行する実行回路とを備え、
前記マスク更新命令に応答して、前記実行回路は、前記第１のマスクレジスタ内の所定数のマスクビットを、第１のビット値から第２のビット値に設定し、前記第２のマスクレジスタ内の前記所定数のマスクビットを、第３のビット値から第４のビット値に設定する、システム。
【請求項１８】
前記所定数は、前記第１のマスクレジスタ内の第１のビット値を有するマスクビットの数と、前記第２のマスクレジスタ内の第３のビット値を有するマスクビットの数との中で、より小さい数である、請求項１７に記載のシステム。
【請求項１９】
前記第１のビット値は、前記第３のビット値と同じであり、かつ、前記第２のビット値は、前記第４のビット値と同じである、請求項１８に記載のシステム。
【請求項２０】
前記第１のビット値は、前記第３のビット値の反転であり、かつ、前記第２のビット値は、前記第４のビット値の反転である、請求項１８に記載のシステム。
【請求項２１】
前記第２のマスクレジスタ内の第３のビット値を有するマスクビットの数が、前記第１のマスクレジスタ内の第１のビット値を有するマスクビットの数より小さい場合に、前記第１のマスクレジスタ内の第１のビット値を有するマスクビットのうち、前記所定数のマスクビットとされるものは、前記第１のマスクレジスタ内における上位側の前記所定数のマスクビットか、または、前記第１のマスクレジスタ内における下位側の前記所定数のマスクビットである、請求項１８から２０のいずれか１項に記載のシステム。
【請求項２２】
前記第１のマスクレジスタ内の第１のビット値を有するマスクビットの数が、前記第２のマスクレジスタ内の第３のビット値を有するマスクビットの数より小さい場合に、前記第２のマスクレジスタ内の第３のビット値を有するマスクビットのうち、前記所定数のマスクビットとされるものは、前記第２のマスクレジスタ内における上位側の前記所定数のマスクビットか、または、前記第２のマスクレジスタ内における下位側の前記所定数のマスクビットである、請求項１８から２１のいずれか１項に記載のシステム。
【請求項２３】
前記第１のマスクレジスタの前記第１のビット値の各マスクビットは、前記第１のベクトルレジスタ内の対応するデータエレメントに対する条件が満たされていないことを示し、
前記第２のマスクレジスタの前記第３のビット値の各マスクビットは、前記第２のベクトルレジスタ内の対応するデータエレメントに対する前記条件が満たされていることを示す、請求項１７から２２のいずれか１項に記載のシステム。
【請求項２４】
所定データエレメントに対する前記条件が満たされる場合、前記所定データエレメントに対するさらなる演算が必要である、請求項２３に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、プロセッサ又は他の処理ロジックによって実行された場合に、論理的、数学的又は他の機能的な複数の演算を実行する処理ロジック、複数のマイクロプロセッサ及び関連する命令セットアーキテクチャの分野に関する。
【背景技術】
【０００２】
命令セット、すなわち命令セットアーキテクチャ（ＩＳＡ）は、プログラミングに関するコンピュータアーキテクチャの一部であり、複数のネイティブデータ型、複数の命令、レジスタアーキテクチャ、複数のアドレッシングモード、メモリアーキテクチャ、割り込み及び例外処理ならびに外部入力及び出力（Ｉ／Ｏ）を含んでもよい。命令という用語は、本明細書では概して、複数のマクロ命令、すなわち、プロセッサのデコーダが複数のマクロ命令を復号した結果である複数マイクロ命令又は複数のマイクロ演算（ｍｉｃｒｏ−ｏｐ）と対照的に、プロセッサ（又は、命令を、プロセッサに処理される１または複数の他の命令に、（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて）変換、モーフィング、エミュレート又は他の方法で変換する命令変換部）に実行のために提供される複数の命令をいう。
【０００３】
ＩＳＡは、命令セットを実装するプロセッサの内部設計であるマイクロアーキテクチャから区別される。複数の異なるマイクロアーキテクチャを有する複数のプロセッサは、共通の命令セットを共有することができる。例えば、複数のＩｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサ及びカリフォルニア州サニーベールのアドバンスドマイクロデバイス社（Advanced Micro Devices, Inc.）の複数のプロセッサは、ほぼ理想的な複数のバージョンのｘ８６命令セット（複数のより新しいバージョンにはいくつかの拡張が追加されている）を実装するが、いくつかの内部設計は異なる。例えば、同じＩＳＡレジスタアーキテクチャが、専用の複数の物理レジスタ、レジスタリネーミングメカニズム等を用いた１または複数の動的割り当て物理レジスタを含む複数の周知技術を用いて、異なる複数のマイクロアーキテクチャにおいて異なる態様で実装されてもよい。
【０００４】
近年のＩＳＡの多くは、単一命令複数データ（ＳＩＭＤ）の複数の演算をサポートする。１つ又は２つだけの複数のデータエレメント上で動作するスカラ命令の代わりに、ベクトル命令（パックドデータ命令又はＳＩＭＤ命令とも称される）は、複数のデータエレメント又は複数のデータエレメントの複数のペア上で、同時に又は並列に動作してもよい。プロセッサは、複数の演算を同時に又は並列に実行するべく、ベクトル命令に応答する並列実行ハードウェアを有してもよい。ＳＩＭＤ演算は、１の演算において、１のベクトルレジスタ又はメモリ位置内にパックされた複数のデータエレメント上で動作する。これらのデータエレメントは、パックドデータ又はベクトルデータと称される。複数のベクトルエレメントのそれぞれは、複数の他のデータとは別々に又は独立して演算され得る個別のデータ（例えば、ピクセルの色等）を表してもよい。
【０００５】
いくつかのシナリオにおいて、ＳＩＭＤ演算は、独立した複数のベクトルデータエレメントに対して再帰的な態様で、複数の異なるデータエレメントに対する反復回数が異なるように、演算を行ってもよい。したがって、いくつかのデータエレメントの演算は終了してもよいが、いくつかの他の複数のデータエレメントはさらにより多くの反復を必要とする。再帰演算の一例は、ＷＨＩＬＥループ演算である。この例では、Ｎ個のエレメントのデータアレイＸ［ｉ］（ｉ＝０、…、Ｎ−１）は、条件（Ｘ［ｉ］）が真の（満たされる）の場合に、再帰演算される。Ｘ［ｉ］に対する演算は、条件（Ｘ［ｉ］）が偽になった場合に終了する。条件の例は、Ｘ［ｉ］＞０であってもよい。
【０００６】
for (i=0; i<N; i++){
while (condition(X[i])){
X[i]=computation(X[i]); } }
【０００７】
上記の演算は、ＷＨＩＬＥループ反復回数が複数の異なるデータエレメントＸ［ｉ］に対して異なる場合には、容易にベクトル化することができない。１つの適用可能なアプローチは、条件を満たさないこのような複数のエレメントに対する演算をプロセッサが実行し、次に、このような複数のエレメントから導出された結果を破棄することである。しかしながら、プロセッサは、このような複数のエレメントに対する不要な演算を実行するのみならず、このような複数のエレメントによって占められる複数のベクトルレジスタスロットを利用することができないため、このアプローチは効率性が低い。
【図面の簡単な説明】
【０００８】
複数の実施形態は、添付の図面において例として示されるが、限定ではない。
【図１】図１は、一実施形態に係る複数のベクトルレジスタ及び複数のマスクレジスタを含む命令処理装置のブロック図である。
【図２】図２は、一実施形態に係るレジスタアーキテクチャのブロック図である。
【図３】図３は、一実施形態に係るベクトル演算シーケンスの例を示す。
【図４Ａ】図４Ａは、一実施形態に係る複数のベクトルレジスタ及び複数のマスクレジスタに対する複数の演算をプロセッサに実行させる複数の命令のための疑似コードの例を示す。
【図４Ｂ】図４Ｂは、一実施形態に係る図４Ａの複数の命令を用いるためのコードセグメントの例を示す。
【図５Ａ】図５Ａは、一実施形態に係るマスク更新命令及びベクトル移動命令を用いるコードセグメントに応答して実行される複数の演算を例示するフロー図である。
【図５Ｂ】図５Ｂは、一実施形態に係るマスク更新命令に応答して実行される複数の演算を例示するフロー図である。
【図５Ｃ】図５Ｃは、一実施形態に係るベクトル移動命令に応答して実行される複数の演算を例示するフロー図である。
【図６】図６は、一実施形態に係るソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令変換器の利用を例示するブロック図である。
【図７Ａ】図７Ａは、一実施形態に係るインオーダ及びアウトオブオーダパイプラインのブロック図である。
【図７Ｂ】図７Ｂは、一実施形態に係るインオーダ及びアウトオブオーダコアのブロック図である。
【図８Ａ】図８Ａは、一実施形態に係るより具体的な、例示的なインオーダコアアーキテクチャのブロック図である。
【図８Ｂ】図８Ｂは、一実施形態に係るより具体的な、例示的なインオーダコアアーキテクチャのブロック図である。
【図９】図９は、一実施形態に係るプロセッサのブロック図である。
【図１０】図１０は、一実施形態に係るシステムのブロック図である。
【図１１】図１１は、一実施形態に係る第２のシステムのブロック図である。
【図１２】図１２は、本発明の実施形態に係る第３のシステムのブロック図である。
【図１３】図１３は、一実施形態に係るシステムオンチップ（ＳｏＣ）のブロック図である。
【発明を実施するための形態】
【０００９】
以下の説明では、数々の具体的な詳細が記載される。しかしながら、本発明の複数の実施形態は、これらの具体的な詳細がなくとも実施可能であることが理解されよう。他の例において、周知の複数の回路、複数の構造及び複数の技術は、この説明に対する理解の妨げとならないよう、詳細には示されていない。
【００１０】
本明細書に記載された複数の実施形態は、複数の独立したデータエレメントに対する再帰ベクトル演算の効率性を改善するための複数の命令を提供する。複数の命令は、複数のベクトルレジスタのペア及び複数のマスクレジスタのペアを用いて再帰ベクトル演算を実行し、ここで、第１のベクトルレジスタは、複数のベクトル演算結果を蓄積するアキュムレータとして機能し、第２のベクトルレジスタは、第１のベクトルレジスタの複数の不使用スロット（未使用の又は使用が終了した複数のデータエレメント位置）を充填する複数の新たなデータエレメントを提供する。複数のマスクレジスタは、対応する複数のベクトルレジスタの中で、さらなる演算を必要とする複数のデータエレメントを示すために用いられる。
【００１１】
一実施形態では、第１のベクトルレジスタ（すなわち、アキュムレータ）は、レジスタがベクトルで満杯に充填されるまで、複数の入力データエレメントを蓄積する。プロセッサは次に、複数の非マスク（すなわち、密な）ベクトル演算を用いて、これらのデータエレメントに対する演算を実行する。演算の後、アキュムレータ内の（演算が終了した）いくつかのエレメントは、メモリ又は他の複数のストレージ位置に戻すことができ、（演算が終了していない）他の複数のエレメントは、さらなる回数の反復のためにアキュムレータ内に保持することができる。アキュムレータ内の演算が終了した複数のデータエレメント位置は、同じ再帰演算をさらに必要とする複数の新たなデータエレメントによって用いられることができる。
【００１２】
２つの命令、ＲＷＭＡＳＫＵＰＤＡＴＥ及びＳＰＡＲＳＥＭＯＶが、本明細書で説明される。これらの命令は、多くのシナリオでベクトル化の効率性を改善する。例えば、１つのシナリオでは、複数の入力データエレメントは、それぞれはアキュムレータ（すなわち、第１のベクトルレジスタ）全体を充填するほど多くのエレメントを有さない１または複数の疎ベクトルデータセットから取ってもよい。さらに、異なる複数のデータセットからの複数の入力データエレメントは、異なる回数の演算の反復を必要としてもよい。したがって、これ以上の演算を必要としないこのような複数のデータエレメントからの複数の不使用スロットが、アキュムレータ内に残される。本明細書に記載された複数の命令によれば、これらの不使用スロットを有効複数のエレメントで充填することができ、したがって、満杯のベクトルに対する再帰演算が可能となる。さらに詳細に後述するように、ＳＰＡＲＳＥＭＯＶ命令は、複数の有効データエレメント（すなわち、演算が必要な複数のデータエレメント）を第２のベクトルレジスタからアキュムレータへと移動させるベクトル移動命令である。ＲＷＭＡＳＫＵＰＤＡＴＥ命令は、（第２のベクトルレジスタに関連する）読み出しマスクレジスタ及び（アキュムレータに関連する）書き込みマスクレジスタの両方を、これらの２つのベクトルレジスタにおいて複数の有効データエレメントの位置を特定するべく、更新する。
【００１３】
ＳＰＡＲＳＥＭＯＶと組み合わせてＲＷＭＡＳＫＵＰＤＡＴＥを用いることにより、再帰演算の中で必要な命令の総数が低減されるとともに、オーバーフロー及びアンダーフロー、すなわち第２のベクトルレジスタ内の有効データエレメント（すなわち、ソースデータエレメント）の数が第１のベクトルレジスタ内の不使用スロット（すなわち、目標位置）の数と一致しないケースを単純化することができる。更新された読み出し及び書き込みマスクは、２つのベクトルレジスタ間でのデータの移動を制御するために用いられ、具体的には、複数のゼロの書き込みマスクビットは、アキュムレータ内の複数の目標位置を特定するために用いられ、複数の１の読み出しマスクビットは、第２のベクトルレジスタ内の複数のソースデータエレメントを特定するために用いられる。複数の目標位置を特定するために反転された書き込みマスクビットを用いることにより、疎な再帰演算のベクトル化におけるデータ蓄積が単純化される。
【００１４】
図１は、ＲＷＭＡＳＫＵＰＤＡＴＥ及びＳＰＡＲＳＥＭＯＶ命令を含む複数の命令を実行するべく動作可能な回路を含む実行ユニット１４０を有する命令処理装置１１５の実施形態のブロック図である。いくつかの実施形態では、命令処理装置１１５は、プロセッサ、マルチコアプロセッサのプロセッサコア又は電子システム内の処理エレメントであってもよい。
【００１５】
デコーダ１３０は、複数の高水準機械命令又は複数のマクロ命令という形式で入力された複数の命令を受信し、これらを復号化して、複数の低水準マイクロ演算、複数のマイクロコードエントリポイント、複数のマイクロ命令、もしくは元の高水準命令を反映し、及び／又は元の高水準命令から導出される他の複数の低水準命令又は複数の制御信号を生成する。複数の低水準命令又は複数の制御信号は、複数の低水準（例えば、回路レベル又はハードウェアレベル）演算を介した高水準命令の演算を実装してもよい。デコーダ１３０は、様々な異なるメカニズムを用いて実装されてもよい。適したメカニズムの例は、限定されるものではないが、マイクロコード、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラム可能ロジックアレイ（ＰＬＡ）、当技術分野で公知の複数のデコーダを実装するために用いられる他の複数のメカニズム等を含む。
【００１６】
デコーダ１３０は、キャッシュ１１０、メモリ１２０又は他の複数のソースに対する、入力された複数の命令を受信してもよい。復号化された複数の命令は、実行ユニット１４０に送信される。実行ユニット１４０は、１または複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、もしくは受信された複数の命令を反映した、又は受信された命令から導出された他の制御信号を、デコーダ１３０から受信してもよい。実行ユニット１４０は、レジスタファイル１７０、キャッシュ１１０及び／又はメモリ１２０からのデータ入力を受信し、これらに対するデータ出力を生成する。
【００１７】
一実施形態では、レジスタファイル１７０は、レジスタとも称される複数のアーキテクチャレジスタを含む。他に規定又は明らかに示さない限り、複数のアーキテクチャレジスタ、レジスタファイル及び複数のレジスタという文言は、本明細書では、ソフトウェア及び／又はプログラマに可視（例えば、ソフトウェア可視）の複数のレジスタ及び／又は複数のマクロ命令により規定されて複数のオペランドを特定する複数のレジスタを指すために用いられる。これらのレジスタは、所与のマイクロアーキテクチャ（例えば、複数の一時レジスタ、複数のリオーダバッファ、複数のリタイアメントレジスタ等）における他の複数の非アーキテクチャレジスタと対照をなす。
【００１８】
説明を分かりにくくしないよう、比較的単純な命令処理装置１１５を示し、記載した。複数の他の実施形態は、１より多くの実行ユニットを有してもよいことが理解されよう。例えば、装置１１５は、例えば、複数の演算ユニット、複数の演算ロジックユニット（ＡＬＵ）、複数の整数ユニット、浮動小数点ユニット等の、複数の異なる型の実行ユニットを含んでもよい。命令処理装置又は複数のプロセッサのさらに複数の他の実施形態は、複数のコア、複数の論理プロセッサ又は複数の実行エンジンを有してもよい。命令処理装置１１５の多数の実施形態が、以下において、図７−１３に関して提供される。
【００１９】
一実施形態によれば、レジスタファイル１７０は、複数のベクトルレジスタ１７５のセット及び複数のマスクレジスタ１８５のセットを含み、これらは両方とも、ＲＷＭＡＳＫＵＰＤＡＴＥ及びＳＰＡＲＳＥＭＯＶ命令のオペランドを記憶する。各ベクトルレジスタ１７５は、５１２ビット、２５６ビット又は１２８ビット幅とすることができ、あるいは異なるベクトル幅を用いてもよい。各マスクレジスタ１８５は、多数のマスクビットを含み、各マスクビットは、複数のベクトルレジスタ１７５の中の１つのデータエレメントの１つに対応する。各マスクビットは、ベクトルレジスタのデータエレメントをマスクするために用いられるので、６４ビットのマスクレジスタは、５１２ビットレジスタの中の６４個の８ビットデータエレメントをマスクするために用いられることができる。異なる幅のベクトルレジスタ（例えば、２５６ビット又は１２８ビット）及び異なるサイズの複数のデータエレメント（例えば、１６ビット、３２ビット又は６４ビット）に対し、ベクトル演算に関して、異なる数のマスクビットが用いられてもよい。
【００２０】
図２は、本明細書に記載される複数の命令をサポートする基礎のレジスタアーキテクチャ２００の実施形態を示す。レジスタアーキテクチャ２００は、ｘ８６、ＭＭＸ（商標）、ストリーミングＳＩＭＤ拡張命令（ＳＳＥ）、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４．１及びＳＳＥ４．２の複数の命令、同様にＳＩＭＤ拡張命令のさらなるセットであるＡｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ（ＡＶＸ）（ＡＶＸ１及びＡＶＸ２）を含む命令セットを実装する複数のＩｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサに基づく。しかしながら、異なるレジスタ長、異なるレジスタ型及び／又は異なる数のレジスタをサポートする異なるレジスタアーキテクチャを用いられることができることが理解されよう。
【００２１】
例示された実施形態では、５１２ビット幅の３２本のベクトルレジスタ２１０が存在し、これらのレジスタは、ｚｍｍ０−ｚｍｍ３１と称される。下位１６本のｚｍｍレジスタの下位２５６ビットは、複数のレジスタｙｍｍ０−１６上に重ねられる。下位１６本のｚｍｍレジスタの下位１２８ビット（複数のｙｍｍレジスタの下位１２８ビット）は、複数のレジスタｘｍｍ０−１５上に重ねられる。例示された実施形態では、８本のマスクレジスタ２２０（ｋ０−ｋ７）が存在し、各々は６４ビット長である。代替的な実施形態では、マスクレジスタ２２０は、１６ビット幅である。
【００２２】
例示された実施形態では、レジスタアーキテクチャ２００は、１６本の６４ビット汎用（ＧＰ）レジスタ２３０をさらに含む。実施形態において、１６本の６４ビット汎用（ＧＰ）レジスタ２３０は、既存の複数のｘ８６アドレッシングモードと共に用いられて、複数のメモリオペランドのアドレスを指定する。実施形態は、複数のＲＦＬＡＧＳレジスタ２６０、複数のＲＩＰレジスタ２７０及び複数のＭＸＣＳＲレジスタ２８０をさらに示す。
【００２３】
実施形態は、スカラ浮動小数点（ＦＰ）スタックレジスタファイル（ｘ８７スタック）２４０をさらに示し、ここで、ＭＭＸパック型整数フラットレジスタファイル２５０がエイリアスされる。例示された実施形態では、ｘ８７スタックは、ｘ８７命令セット拡張を用いて３２／６４／８０ビット浮動小数点データに対して複数のスカラ浮動小数点の演算を実行するために用いられる８エレメントスタックであるが、複数のＭＭＸレジスタは、ＭＭＸ及びｘｍｍレジスタ間で実行されるいくつかの演算のための複数のオペランドを保持しつつ、６４ビットパック型整数データに対して複数の演算を実行するために用いられる。
【００２４】
本発明の代替的な複数の実施形態は、より広い又はより狭い複数のレジスタを用いてもよい。
【００２５】
さらに、本発明の代替的な複数の実施形態は、より多くの、より少ない、又は異なる複数のレジスタファイル及び複数のレジスタを用いてもよい。
【００２６】
図３は、複数の独立したデータエレメントに対する演算を効率的にベクトル化するべく、プロセッサ（例えば、命令処理装置１１５）によって実行される複数の演算の例を示す図である。例を単純化するべく、この例の各ベクトルレジスタは、８個のデータエレメントのみを有するものとして示される。代替的な複数の実施形態は、複数のベクトルレジスタにおいて異なる数の複数のデータエレメントを有してもよい。複数のベクトルレジスタは、１２８ビット、２５６ビット又は５１２ビット幅（例えば、図２のｘｍｍ、ｙｍｍ又はｚｍｍレジスタ）とすることができ、あるいは、異なる幅が用いられてもよい。各ベクトルレジスタに８個のデータエレメントが存在するため、各ベクトルレジスタに関して、８マスクビットのみが用いられる。
【００２７】
この例では、ベクトルレジスタＶ１がアキュムレータとして用いられ、ベクトルレジスタＶ２が複数の新たなデータエレメントをＶ１に提供するために用いられる。マスクレジスタＫ１（書き込みマスク）及びＫ２（読出しマスク）は、Ｖ１及びＶ２の複数のデータエレメントをそれぞれマスクするために用いられる。この例では、ゼロのマスクビットは、対応するデータエレメントが演算からマスクされている（すなわち、さらなる演算が不要である）ことを示し、１のマスクビットは、対応するデータエレメントがさらなる演算を必要とすることを示す。代替的な実施形態では、マスクビット値の意味が逆転してもよく、例えば、１のマスクビットが、対応するデータエレメントがさらなる演算を必要としないことを示すために用いられてもよく、ゼロのマスクビットが、対応するデータエレメントがさらなる演算を必要とすることを示すために用いられてもよい。
【００２８】
最初に、アキュムレータＶ１は、２セットのデータを入力ベクトルＡ及びＢとして記憶し、入力ベクトルＡ及びＢのそれぞれは、疎データアレイの一部であってもよいと仮定する。Ａｊ及びＢｊの下付き文字ｊは、データエレメントに対して実行された反復回数を示し、例えば、Ａ０は反復実行前のエレメントＡであり、Ａ１は第１の反復３１０後のエレメントＡである。例を単純化するべく、同じ反復において、同じデータセットからの複数の異なるデータエレメントが、同じ識別子を有するように示されており、例えば、入力ベクトルの位置０のＡ０及び位置２のＡ０は、２つの異なるエレメントであるとともに、同一または異なる値を有してもよく、入力ベクトルの位置１のＢ０及び位置３のＢ０は、２つの異なるエレメントであるとともに、同一または異なる値を有してもよい。マスクレジスタＫ１において、複数のマスクビットの初期値は、全て１であり、Ｖ１の初期入力ベクトルがベクトルで満杯であるとともに、Ｖ１の各エレメントに対してベクトル演算の第１の反復３１０を実行することができることを示す。
【００２９】
この例では、各反復は、再帰ベクトル演算が実行されるＷＨＩＬＥループの反復を表す。第１の反復３１０後、アキュムレータＶ１は、Ａ１の複数のエレメント及びＢ１の複数のエレメントのセットを含み、ここで、下付き文字は、これらのエレメントが第１の反復を終了したことを示す。Ａの複数のエレメントはＷＨＩＬＥループの反復を１回だけ必要とし、複数のＢのエレメントは２回の反復を必要とすると想定する。したがって、ＷＨＩＬＥループの１回の反復後、Ａの複数のエレメントに対する演算は終了したが、複数のＢのエレメントに対してはもう１回反復が必要である。ここで、Ａの複数のエレメントのそれぞれに対する条件は、偽であり（さらなる演算のための条件を満たさないため）、複数のＢのエレメントのそれぞれに対する条件は、真である（さらなる演算のための条件を満たすため）。したがって、Ｋ１の複数のマスクビット値は、Ａ１の複数のエレメントに対応するこのような複数のマスクビットはゼロに設定され、Ｂ１の複数のエレメントに対応するこのような複数のマスクビットは１に設定される。
【００３０】
一実施形態では、ゼロのマスクビットは、対応するエレメント位置の結果が、ベクトルレジスタ全体（この場合、Ｖ１）に対するベクトル演算の後で破棄されることを示す。複数の代替的な実施形態では、ゼロのマスクビットは、対応するエレメント位置に対する演算が実行されないことによって、エレメント位置が使用されていないことを示す。いずれのシナリオにおいても、Ａ１の複数のエレメントをアキュムレータＶ１内に保持することは、ベクトルリソースの浪費であり、ベクトル演算の効率性を低下させる。よって、本発明一実施形態によれば、第２のベクトルレジスタＶ２は、Ａ１の複数のエレメントによって残された複数の不使用スロット（すなわち、複数のデータエレメント位置）を充填するべく、複数の新たなデータエレメントをＶ１に提供するために用いられる。Ａ１の複数のデータエレメントは、メモリ、キャッシュ又は他のデータストレージに保存されることができる。
【００３１】
図３の例では、ベクトルレジスタＶ２は、他の疎ベクトルアレイの一部たり得るデータセットＣの複数のエレメントを記憶する。Ｖ２内で「＊」でマーク付けされた複数の位置は、「無視」を表す、つまり、再帰ベクトル演算のための複数の有効データエレメントを含まないことを意味する。Ｃの各データエレメントに対して、ＷＨＩＬＥループの反復が３回必要であると想定する。Ｃの複数のエレメントの代わりに、又は加えて、Ｖ２は、ＷＨＩＬＥループの１または複数回の反復（よって、さらなる演算）を必要とするＡ及び／又はＢの複数の新たなデータエレメント（例えば、Ａ０の複数のエレメント、Ｂ０の複数のエレメント及び／又はＢ１の複数のエレメント）を提供してもよい。さらなる演算が必要なＶ２内のこれらのデータエレメントは、「ソースデータエレメント」と称される。Ｖ２内のこれらのソースデータエレメントは、Ａ１の複数のエレメント（「対象データエレメント」と称される）によってＶ１内に残された複数の不使用スロットを充填することができる。説明を簡単にするために、Ｖ１及び／又はＶ２内でさらなる演算が必要な複数のデータエレメントは、「有効データエレメント」と称される。したがって、Ｖ２内の複数のソースデータエレメントがＶ１内の複数の対象データエレメントによって占められた複数の位置に移動し、Ｖ１内のさらなる複数の有効データエレメントによって再帰演算が第２の反復３３０に進むことができるように、Ｖ１及びＶ２内の複数の有効データエレメントを併合するべく、併合演算３２０が実行される。
【００３２】
３つのシナリオ、すなわちオーバーフロー、アンダーフロー及び完全一致が、そのような併合演算の中で生じてもよい。完全一致は、Ｖ１に残された不使用スロットの数と同じ数の有効データエレメントが、Ｖ２に存在することを示す。したがって、完全一致の場合、Ｖ２内の全てのソースデータエレメントが、Ｖ１に残された複数の不使用スロットに移動（すなわち、置換）する。結果として、Ｖ１は、ベクトルで満杯となることにより次の反復を開始し、Ｋ１は、全て１を含むように更新される。Ｖ２にはこれ以上のソースデータエレメントは残されておらず、Ｋ２は、全てゼロを含むように更新される。
【００３３】
併合演算３２０は、新たなデータエレメント（Ｃ０）の数が、Ｋ１内で値がゼロのマスクビットの数（すなわち、Ａ１の数）より大きいという、オーバーフローのシナリオを示す。したがって、Ｖ２内の全ての新たなデータエレメントが、Ｖ１に移動する訳ではない。この例では、Ｖ２の位置７の丸で囲まれたＣ０がＶ２に残されるが、位置２、４及び６の他のＣ０の複数のエレメントは、Ｖ１に移された。本実施形態では、Ｖ２の下位の複数のエレメントはＶ１に移されるが、代替的な実施形態では、Ｖ２の上位の複数のエレメントが、Ｖ１に移されてもよい。併合演算３２０は、Ｋ１及びＫ２の対応するマスクビットを、さらに更新する。
【００３４】
併合演算３２０の後、Ｖ１は、８個のエレメントの満杯のベクトルを含むことにより、第２の反復３３０を開始し、Ｖ２は、位置７に残された１個のＣ０のみを有する。対応するマスクレジスタＫ１は、ここで（併合演算３２０の後）、全て１を含み、Ｋ２は、位置７に１の値を有する１個のマスクビットのみを含む。
【００３５】
第２の反復３３０の後、アキュムレータＶ１は、Ｂ２の複数のエレメント及びＣ１の複数のエレメントの組み合わせを含む。この反復後に、複数のＢのエレメントに対する演算が終了したため、このようなＢ２の複数のエレメントは、メモリ、キャッシュ又は他のデータストレージに保存されることができる。したがって、複数のＢのエレメントのそれぞれに対する条件は偽（さらなる演算のための条件を満たさないため）であり、複数のＣのエレメントのそれぞれに対する条件は真である（さらなる演算のための条件を満たすため）。したがって、Ｋ１内の複数のマスクビット値は、Ｂ２の複数のエレメントに対応するこのようなマスクビットに対してはゼロに設定され、Ｃ１の複数のエレメントに対応するこのようなマスクビットに対しては１に設定される。
【００３６】
Ｂ２の複数のエレメントによって残された複数の不使用スロットは、Ｖ２内に残る複数のソースデータエレメント、この場合、Ｖ２の位置７のＣ０によって充填されることができる。しかしながら、Ｃ０のエレメントの数はＢ２のエレメントの数より小さいため、続く併合演算３４０でアンダーフローが生じる。図３に示すアンダーフローのシナリオでは、Ｖ１内で最も下位のＢ２がＣ０に置換されるが、代替的な実施形態では、Ｖ１内で最も上位のＢ２がＣ０に置換されてもよく、併合演算３４０は、Ｋ１及びＫ２内の対応するマスクビットをさらに更新する。
【００３７】
併合演算３４０の後、アキュムレータＶ１は完全には充填されておらず、Ｖ２は、Ｖ１に移動可能な有効データエレメントをこれ以上有さない。マスクレジスタＫ１は、ここで（併合演算３４０の後）、複数のＣのエレメントに対応する位置に１を含み、Ｋ２は、全てゼロを含む。Ｖ２は、Ｖ１に移動させるための追加的な複数の有効データエレメントを読み込んでもよく、全ての有効データエレメントが処理されて、これ以上のソースデータエレメントがＶ２内に残されなくなるまで、併合演算３２０及び／又は３４０を繰り返すことができる。ここで、Ｖ１内の全てのエレメントが必要な反復回数に達するまで、Ｖ１に対して、多数のさらなる反復が実行されてもよい。
【００３８】
ゼロ及び１の複数のマスクビット値の意味は、図３の例に示すものの逆とすることができ、例えば、ゼロのマスクビット値は、条件が満たされることを意味するために用いられることができ、１のマスクビット値は、条件が満たされないことを意味するために用いられることができることが理解されよう。いくつかの実施形態では、Ｋ１の複数のマスクビット値の意味は、Ｋ２の複数のマスクビット値の意味の逆とすることができ、例えば、１のＫ１のマスクビット値は、条件が満たされないことを意味するために用いられることができ、１のＫ２のマスクビット値は、条件が満たされることを意味するために用いられることができる。したがって、異なる複数のマスクビット値は、図３の例では、各マスクレジスタ内の各マスクビットの意味が、一貫性のある解釈が可能となるように一貫して定義される限り、同じシナリオに対して用いられることができる。
【００３９】
本発明の一実施形態によれば、図３に関して記載された複数の演算は、ＲＷＭＡＳＫＵＰＤＡＴＥ及びＳＰＡＲＳＥＭＯＶ命令を含む複数のベクトル命令に応答して、プロセッサ（例えば、命令処理装置１１５）によって実行される。ＳＰＡＲＳＥＭＯＶ命令は、複数のソースデータエレメントをベクトルレジスタＶ２からベクトルレジスタＶ１へと移動させて、Ｖ１内における条件を満たさない複数の対象エレメント（例えば、これ以上の演算を必要としない複数のエレメント）を置換するために用いられることができる。ＲＷＭＡＳＫＵＰＤＡＴＥ命令は、マスクレジスタＫ１及びＫ２を更新することによって、Ｖ１及びＶ２内において、条件を満たす複数のデータエレメント（例えば、さらなる演算が必要な複数のエレメント）の位置をそれぞれ特定するために用いられることができる。一実施形態では、ＲＷＭＡＳＫＵＰＤＡＴＥは、２つのオペランドＫ１及びＫ２を有し、ＳＰＡＲＳＥＭＯＶは、４つのオペランドＫ１、Ｖ１、Ｋ２及びＶ２を有する。複数の代替的な実施形態では、ＲＷＭＡＳＫＵＰＤＡＴＥ及び／又はＳＰＡＲＳＥＭＯＶのいくつかのオペランドは、黙示的であってもよい。
【００４０】
図４Ａは、一実施形態に係るＲＷＭＡＳＫＵＰＤＡＴＥ及びＳＰＡＲＳＥＭＯＶ命令のための疑似コード４０１および４０２の例を示す。疑似コード４０１および４０２では、ＫＬは、各ベクトルレジスタ（例えば、Ｖ１及びＶ２のそれぞれ）内のデータエレメントの総数であるベクトル長を表す。ｚｍｍレジスタが複数の８ビットのデータエレメントを有するアキュムレータとして用いられる場合、ＫＬ＝５１２／８＝６４である。疑似コード４０１は、ＲＷＭＡＳＫＵＰＤＡＴＥ命令を記述し、疑似コード４０２は、ＳＰＡＲＳＥＭＯＶ命令を記述する。なお、プロセッサは、疑似コード４０１および４０２に示すものとは異なる複数の演算又はロジックを有するＲＷＭＡＳＫＵＰＤＡＴＥ及びＳＰＡＲＳＥＭＯＶ命令を実装してもよい。
【００４１】
ＲＷＭＡＳＫＵＰＤＡＴＥ及びＳＰＡＲＳＥＭＯＶ命令は、複数のマスクレジスタを更新し、複数のベクトルレジスタ間で、複数のデータエレメントをそれぞれ移動させる。さらなる複数の命令が、これらの命令の結果を利用することによって再帰ベクトル演算をより効率的に実行するべく、実行されることができる。図４Ｂは、一実施形態に係るＲＷＭＡＳＫＵＰＤＡＴＥ及びＳＰＡＲＳＥＭＯＶ命令を用いるコードセグメント４００の例を示す。コードセグメント４００は、プロセッサによって実行された場合、アレイＸの複数の独立したデータエレメントに対する再帰ベクトル演算を、プロセッサに実行させる。アレイＸは、メモリ、キャッシュ又は他の複数のデータストレージ位置に記憶されてもよい。コードセグメント４００は、初期化セクション４１０、初期併合セクション４２０、後続併合セクション４３０、演算セクション４４０及び残余セクション４５０を含む。セクション４１０−４５０のそれぞれにおける演算について、プロセッサ（例えば、図１の命令処理装置１１５）によって実行される方法５００の実施形態を示す図５Ａのフロー図を参照しながら後述する。
【００４２】
初期化セクション４１０では、マスクレジスタＫ１及びＫ２の両方がゼロに初期化され、これらの対応する複数のベクトルレジスタＶ１及びＶ２内に有効データエレメントが存在しないことを示す。用語「有効データエレメント」は、演算が必要な複数のデータエレメントを意味する。複数の反復が、初期併合セクション４２０において開始するが、ここで第一にＫ２は、複数の有効データエレメントがＶ２に残されているか否かを判断するべく、チェックされる（ブロック５３１）。Ｖ２内に有効データが存在しない場合、複数の入力データエレメントが、アレイＸからＶ２に読み込まれ（ブロック５３２）、その結果、Ｋ２内におけるこれらに対応するマスクビットが設定される。
【００４３】
後続併合セクション４３０は、Ｖ２が複数の有効データエレメントを含むというシナリオを処理する。複数の有効データエレメントは、前のオーバーフローからＶ２内に残されていてもよく、又はブロック５３２でＶ２に読み込まれていてもよい。ＳＰＡＲＳＥＭＯＶ命令４３１に応答して、Ｖ２内のこれらの有効データエレメントは、Ｋ１及びＫ２内のマスクビットに従い、Ｖ１に移される（ブロック５３３）。
【００４４】
ＲＷＭＡＳＫＵＰＤＡＴＥ命令４３３に応答して、マスクレジスタＫ１及びＫ２は、ブロック５３３での移動後、複数の有効データエレメントのＶ１及びＶ２内での現在位置をそれぞれ特定するべく、更新される（ブロック５３４）。
【００４５】
後続併合セクション４３０では、第２のＳＰＡＲＳＥＭＯＶ命令４３２は、複数の演算結果がアレイＸにおけるこれらの元の位置に戻って記憶されることができるように、Ｖ２からＶ１に移されたアレイＸの複数のデータエレメントのインデックス（位置）を記憶するべく実行される。
【００４６】
演算セクション４４０は、（対応するマスクが全て１であることによって示されるように、すなわち、ＩｓＦｕｌｌＭａｓｋ（Ｋ１）が真の場合に）満杯のベクトルのベクトル演算を処理する。Ｖ１が有効データエレメントで満杯ではない場合（ブロック５３５）、及びＶ１に読み込まれていない複数の入力データエレメントが存在する場合は（ブロック５３８）、さらなる複数の入力データエレメントが、Ｖ２を介してＶ１に読み込まれることができることが示される（ブロック５３２―５３４）。Ｖ１がベクトルで満杯ではなく、Ｖ１に読み込まれる入力データエレメントがこれ以上存在しない場合（ブロック５３８）、それは、複数の演算が残余セクション４５０に進むことを示し、ここでは、演算が終了して複数の結果がアレイＸに再保存される（ブロック５３９）まで、Ｖ１内に残った複数のデータエレメントに対する演算が実行される。
【００４７】
Ｖ１が複数の有効データエレメントのベクトルで満杯の場合（ブロック５３５）、Ｖ１に対するベクトル演算を実行することができる（ブロック５３６）。マスクレジスタＫ１は、Ｖ１内に演算をこれ以上必要としないデータエレメントが存在する場合に、更新される。Ｖ１内の１または複数のデータエレメントが（Ｋ１内の、対応する値がゼロのマスクビットによって示されるように）これ以上の演算を必要としなくなるまで、ベクトル演算は継続し、ここで、そのような複数のデータエレメントは、アレイＸに再保存される（ブロック５３７）。示された実施形態では、複数のデータエレメントは、ＳＣＡＴＴＥＲ命令により保存されることができ、Ｋ１内における複数の値がゼロのマスクビットは、関数ｋｎｏｔ（Ｋ１）を用いて特定されることができる。ＲＷＭＡＳＫＵＰＤＡＴＥ及びＳＰＡＲＳＥＭＯＶ命令を除いて、コードセグメント４００で用いられるＳＣＡＴＴＥＲ、ｋｎｏｔ、ＩｓＦｕｌｌＭａｓｋ等の具体的な複数の命令及び複数の関数は、代替的な複数の命令シーケンスによってエミュレートされることができる。
【００４８】
ブロック５３１―５３７の演算は、これ以上Ｖ２を介してＶ１に読み込まれる入力データエレメントが存在しなくなる（ブロック５３８）、すなわち、アレイＸ内の全ての入力データエレメントがＶ２に読み込まれ、かつ、Ｖ２内の全ての有効データエレメントがＶ１に移されるときまで、繰り返される。この場合に、残余セクション４５０が開始する。ここで、Ｖ１は、複数の有効データエレメントのベクトルで満杯でなくてもよいが、Ｖ１内のそのような複数のデータエレメントは、さらなる演算を必要とする。Ｖ１内に残った全てのデータエレメントが必要な反復回数に達するまで、ベクトル演算は継続する（ブロック５３９）。ここで、Ｖ１における複数の演算結果は、（例えば、ＳＣＡＴＴＥＲ命令を用いて）アレイＸに再保存されることができる（ブロック５３９）。
【００４９】
図５Ｂは、一実施形態に係るＲＷＭＡＳＫＵＰＤＡＴＥ命令を実行するための方法５１０のブロックフロー図である。方法５１０は、プロセッサ（例えば、図１の命令処理装置１１５）が第１のマスクレジスタ及び第２のマスクレジスタを規定するマスク更新命令を受信する（ブロック５１１）ことにより開始する。プロセッサは、マスク更新命令を復号化する（ブロック５１２）。復号化されたマスク更新命令に応答して、プロセッサは、例えば、これらのマスクビットを第１のビット値（例えば、ゼロ）から第２のビット値（例えば、１）に設定することにより（ブロック５１３）、第１のマスクレジスタ内の所定数のマスクビットを反転させることと、例えば、これらのマスクビットを第２のビット値（例えば、１）から第１のビット値（例えば、ゼロ）に設定することにより（ブロック５１４）、第２のマスクレジスタ内の所定数のマスクビットを反転させることとを含む複数の演算を実行する。所定数は、第１のマスクレジスタ内で第１のビット値を有するマスクビットの数と、第２のマスクレジスタ内で第２のビット値を有するマスクビットの数との中で、より小さい数である。代替的な実施形態では、第１のビット値は、１であってもよく、第２のビット値は、ゼロであってもよい。
【００５０】
図５Ｃは、一実施形態に係るＳＰＡＲＳＥＭＯＶ命令を実行するための方法５２０のブロックフロー図である。方法５２０は、プロセッサ（例えば、図１の命令処理装置１１５）が、第１のマスクレジスタ、第２のマスクレジスタ、第１のベクトルレジスタ及び第２のベクトルレジスタを規定するベクトル移動命令を受信することにより開始する（ブロック５２１）。プロセッサは、ベクトル移動演算を復号化する（ブロック５２２）。復号化されたベクトル移動命令に応答して、かつ、第１及び第２のマスクレジスタ内の複数のマスクビット値に基づいて、プロセッサは、第１のベクトルレジスタ内の所定数の対象データエレメントを、第２のベクトルレジスタ内の所定数のソースデータエレメントと置換する（ブロック５２３）。一実施形態では、各ソースデータエレメントは、第２のマスクレジスタ内で第２のビット値（例えば、１）を有するマスクビットに対応し、各対象データエレメントは、第１のマスクレジスタ内で第１のビット値（例えば、ゼロ）を有するマスクビットに対応する。代替的な実施形態では、第１のビット値は、１であってもよく、第２のビット値は、ゼロであってもよい。所定数は、第１のマスクレジスタ内で第１のビット値を有するマスクビットの数と、第２のマスクレジスタ内で第２のビット値を有するマスクビットの数との中で、より小さい数である。
【００５１】
複数の様々な実施形態において、図５Ａ−Ｃの方法は、汎用プロセッサ、特殊用途プロセッサ（例えば、グラフィクスプロセッサ又はデジタルシグナルプロセッサ）もしくは他のタイプのデジタルロジックデバイス又は命令処理装置によって実行されてもよい。いくつかの実施形態では、図５Ａ−Ｃの方法は、図１の命令処理装置１１５もしくは図７−１３に示す複数の実施形態などの、同様のプロセッサ、装置又はシステムによって実行されてもよい。さらに、図１の命令処理装置１１５は、図７−１３に示すプロセッサ、装置又はシステムと同様に、図５Ａ−Ｃの方法と同じ、同様の又は異なる複数の演算及び方法の実施形態を実行してもよい。
【００５２】
いくつかの実施形態では、図１の命令処理装置１１５は、ソース命令セットからターゲット命令セットに命令を変換する命令変換部と連携して、動作してもよい。例えば、命令変換部は、命令を、コアによって処理される１または複数の他の命令に、（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて）変換、モーフィング、エミュレート又は他の方法で変換してもよい。命令変換部は、ソフトウェア、ハードウェア、ファームウェア又はこれらの組み合わせで実装されてもよい。命令変換部は、プロセッサ上にあってもよく、プロセッサ外にあってもよく、又は部分的にプロセッサ上かつ部分的にプロセッサ外にあってもよい。
【００５３】
図６は、本発明の複数の実施形態に係るソフトウェア命令変換器の利用を対比するブロック図である。示された実施形態では、命令変換部は、ソフトウェア命令変換器であるが、代替的に、命令変換部は、ソフトウェア、ファームウェア、ハードウェア又はこれらの様々な複数の組み合わせで実装されてもよい。図６は、少なくとも１つのｘ８６命令セットコアを有するプロセッサ６１６によってネイティブで実行され得るｘ８６バイナリコード６０６を生成するべく、ｘ８６コンパイラ６０４を用いてコンパイルされ得る高水準言語６０２のプログラムを示す。少なくとも１つのｘ８６命令セットコアを有するプロセッサ６１６は、少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサと実質的に同じ結果を達成するべく、（１）インテル社製ｘ８６命令セットコアの命令セットの大部分、もしくは（２）複数のアプリケーションのオブジェクトコードバージョン又は少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサ上で実行されることが想定された他のソフトウェアを互換可能に実行又は他の方法で処理することにより、インテル社製プロセッサと実質的に同じ複数の機能を実行可能であるとともに、少なくとも１つのｘ８６命令セットコアを有する任意のプロセッサを表す。ｘ８６コンパイラ６０４は、さらなるリンク処理の有無に関わらず、少なくとも１つのｘ８６命令セットコアを有するプロセッサ６１６上で実行可能なｘ８６バイナリコード６０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。
【００５４】
同様に、図６は、少なくとも１つのｘ８６命令セットコアを有さないプロセッサ６１４（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズ（MIPS Technologies）のＭＩＰＳ命令セットを実行する、及び／又はカリフォルニア州サニーベールのＡＲＭホールディングス（ARM Holdings）のＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）によってネイティブで実行され得る、代替的な命令セットバイナリコード６１０を生成するべく、代替的な命令セットコンパイラ６０８を用いてコンパイルされ得る高水準言語６０２のプログラムを示す。命令変換部６１２は、ｘ８６バイナリコード６０６を、ｘ８６命令セットコアを有さないプロセッサ６１４によってネイティブで実行され得るコードに変換するために用いられる。この変換されたコードは、このような変換が可能な命令変換部の製造が困難であるため、代替的な命令セットバイナリコード６１０と同じとなる可能性は低いが、変換されたコードは、全般的な演算を達成し、代替的な命令セットからの複数の命令により補完される。したがって、命令変換部６１２は、エミュレート、シミュレーション又は任意の他の処理を介して、プロセッサもしくはｘ８６命令セットプロセッサ又はコアを有さない他の電子デバイスにｘ８６バイナリコード６０６を実行させるソフトウェア、ファームウェア、ハードウェア又はこれらの組み合わせを表す。
【００５５】
［複数の例示的なコアアーキテクチャ］
［インオーダ及びアウトオブオーダコアのブロック図］
図７Ａは、本発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を例示するブロック図である。図７Ｂは、本発明の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を例示するブロック図である。図７Ａ及び７Ｂにおける複数の実線のボックスは、インオーダパイプライン及びインオーダコアを示し、選択的に追加される複数の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行／実行パイプライン及びコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであることから、アウトオブオーダ態様について説明する。
【００５６】
図７Ａでは、プロセッサパイプライン７００は、フェッチステージ７０２、長さ復号ステージ７０４、復号ステージ７０６、配分ステージ７０８、リネームステージ７１０、スケジューリング（ディスパッチ又は発行としても知られる）ステージ７１２、レジスタ読み出し／メモリ読み出しステージ７１４、実行ステージ７１６、ライトバック／メモリ書込みステージ７１８、例外処理ステージ７２２及びコミットステージ７２４を含む。
【００５７】
図７Ｂは、実行エンジンユニット７５０に結合されたフロントエンドユニット７３０を含むプロセッサコア７９０を示し、両方ともメモリユニット７７０に結合される。コア７９０は、縮小命令セットコンピュータ（ＲＩＳＣ）コア、複合命令セットコンピュータ（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コアもしくはハイブリッド又は代替的なコアタイプであってもよい。さらに他のオプションとして、コア７９０は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用演算画像処理ユニット（ＧＰＧＰＵ）コア、グラフィックコアなどのような特殊用途コアであってもよい。
【００５８】
フロントエンドユニット７３０は、命令キャッシュユニット７３４に結合された分岐予測ユニット７３２を含み、命令キャッシュユニット７３４は、命令トランスレーションルックアサイドバッファ（ＴＬＢ）７３６に結合され、ＴＬＢ７３６は、命令フェッチユニット７３８に結合され、命令フェッチユニット７３８は、復号ユニット７４０に結合される。復号ユニット７４０（又はデコーダ）は、複数の命令を復号化し、出力として、１または複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令もしくは元の複数の命令から復号化された、又は他の方法で反映する、又は導出された他の制御信号を生成してもよい。復号ユニット７４０は、複数の様々な異なるメカニズムを用いて実装されてもよい。適した複数のメカニズムの例は、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ（ＰＬＡ）、マイクロコード読み出し専用メモリ（ＲＯＭ）等を含む。一実施形態では、コア７９０は、マイクロコードＲＯＭ又は（例えば、復号ユニット７４０、さもなければフロントエンドユニット７３０内で）特定の複数のマクロ命令に対するマイクロコードを記憶する他のメディアを含む。復号ユニット７４０は、実行エンジンユニット７５０内のリネーム／配分ユニット７５２に結合される。
【００５９】
実行エンジンユニット７５０は、リタイアメントユニット７５４及び１または複数のスケジューラユニット７５６のセットに結合されたリネーム／配分ユニット７５２を含む。スケジューラユニット７５６は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット７５６は、物理レジスタファイルユニット７５８に結合される。物理レジスタファイルユニット７５８のそれぞれは、１または複数の物理レジスタファイルを表し、異なる物理レジスタファイルが、スカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、次に実行されるべき命令のアドレスである命令ポインタ）などの、１または複数の異なるデータ型を記憶する。一実施形態では、物理レジスタファイルユニット７５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット及びスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、複数のベクトルマスクレジスタ及び複数の汎用レジスタを提供してもよい。物理レジスタファイルユニット７５８は、リタイアメントユニット７５４と重複することにより、レジスタリネーミング及びアウトオブオーダ実行が実装され得る様々な複数の態様（例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いて、フューチャファイル、ヒストリバッファ及びリタイアメントレジスタファイルを用いて、レジスタマップ及び複数のレジスタのプールを用いて、等）を示す。リタイアメントユニット７５４及び物理レジスタファイルユニット７５８は、実行クラスタ７６０に結合される。実行クラスタ７６０は、１または複数の実行ユニット７６２のセット及び１または複数のメモリアクセスユニット７６４のセットを含む。実行ユニット７６２は、複数の様々な型のデータ（例えば、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して、様々な複数の演算（例えば、複数のシフト、加算、減算、乗算）を実行してもよい。いくつかの実施形態は、具体的な複数の機能又は複数の機能の複数のセット専用の多数の実行ユニットを含んでもよく、複数の他の実施形態は、１つだけの実行ユニット又は全ての機能を全てが実行する複数の実行ユニットを含んでもよい。スケジューラユニット７５６、物理レジスタファイルユニット７５８及び実行クラスタ７６０は、場合によっては複数として示されるが、その理由は、特定の複数の実施形態は、特定の複数のデータ型／複数の演算（例えば、各々が自己のスケジューラユニット、物理レジスタファイルユニット及び／又は実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点／パック型整数／パック型浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン及び／又はメモリアクセスパイプライン、及び、個別のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット７６４を有する特定の複数の実施形態が実装される）に対して個別の複数のパイプラインを形成するからである。個別の複数のパイプラインが用いられる場合、これらのパイプラインのうちの１または複数がアウトオブオーダ発行／実行であり、残りがインオーダであってもよいことも理解されたい。
【００６０】
メモリアクセスユニット７６４のセットは、データＴＬＢユニット７７２を含むメモリユニット７７０に結合され、データＴＬＢユニット７７２は、データキャッシュユニット７７４に結合され、データキャッシュユニット７７４は、二次（Ｌ２）キャッシュユニット７７６に結合される。例示的な一実施形態では、メモリアクセスユニット７６４は、読み込みユニット、記憶アドレスユニット及び記憶データユニットを含んでもよく、これらのそれぞれは、メモリユニット７７０内のデータＴＬＢユニット７７２に結合される。命令キャッシュユニット７３４は、メモリユニット７７０内の二次（Ｌ２）キャッシュユニット７７６にさらに結合される。Ｌ２キャッシュユニット７７６は、１または複数の他のレベルのキャッシュ、及び最終的にはメインメモリに結合される。
【００６１】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン７００を以下のとおり実装してもよい。１）命令フェッチ７３８が、フェッチステージ７０２及び長さ復号ステージ７０４を実行し、２）復号ユニット７４０が、復号ステージ７０６を実行し、３）リネーム／配分ユニット７５２が、配分ステージ７０８及びリネームステージ７１０を実行し、４）スケジューラユニット７５６が、スケジューリングステージ７１２を実行し、５）物理レジスタファイルユニット７５８及びメモリユニット７７０が、レジスタ読み出し／メモリ読み出しステージ７１４を実行し、実行クラスタ７６０が、実行ステージ７１６を実行し、６）メモリユニット７７０及び物理レジスタファイルユニット７５８が、ライトバック／メモリ書込みステージ７１８を実行し、７）様々な複数のユニットが、例外処理ステージ７２２に関与してもよく、かつ８）リタイアメントユニット７５４及び物理レジスタファイルユニット７５８が、コミットステージ７２４を実行する。
【００６２】
コア７９０は、本明細書に記載された命令を含む１または複数の命令セット（例えば、ｘ８６命令セット（複数のより新しいバージョンに追加されたいくつかの拡張を有する）、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セット（ＮＥＯＮなどの複数の選択的なさらなる拡張を有する））をサポートしてもよい。一実施形態では、コア７９０は、パックドデータ命令セット拡張（例えば、ＳＳＥ、ＡＶＸ１、ＡＶＸ２等）をサポートするロジックを含むことによって、多くのマルチメディアアプリケーションによって用いられる複数の演算が、パックドデータを用いて実行される。
【００６３】
理解するべきことは、コアは、マルチスレッディング（複数の演算又は複数のスレッドの２またはそれより多くの並列セットを実行すること）をサポートしてもよく、時分割マルチスレッディング、同時マルチスレッディング（単一の物理的コアが複数のスレッドのそれぞれに対して論理的コアを提供することにより、物理的コアが同時マルチスレッディングを実行すること）又はこれらの組み合わせ（例えば、時分割フェッチ及び復号化、その後、インテル（登録商標）ハイパースレッディング・テクノロジーなどでの同時マルチスレッディング）を含む数々の態様で、マルチスレッディングを実行してもよい。
【００６４】
レジスタリネーミングについて、アウトオブオーダ実行との関連で説明しているが、理解するべきことは、 インオーダアーキテクチャにおいて、レジスタリネーミングが用いられてもよい。示されたプロセッサの実施形態は、個別の命令キャッシュユニット７３４及びデータキャッシュユニット７７４と共有のＬ２キャッシュユニット７７６とをさらに含むが、代替的な複数の実施形態は、命令及びデータの両方のための、例えば、一次（Ｌ１）内部キャッシュ又は複数のレベルの内部キャッシュなどの単一の内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュと、コア及び／又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでもよい。
【００６５】
代替的に、全てのキャッシュは、コア及び／又はプロセッサの外部にあってもよい。
【００６６】
［具体的な例示的なインオーダコアアーキテクチャ］
図８Ａ−Ｂは、より具体的な、例示的なインオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかのロジックブロック（同じ型及び／又は異なる型の他の複数のコアを含む）の中の１つであってもよい。複数のロジックブロックは、用途に応じて、高帯域幅相互接続ネットワーク（例えば、リングネットワーク）を介して、いくつかの固定機能ロジック、メモリＩ／Ｏインターフェース及び他の必要なＩ／Ｏロジックと通信を行う。
【００６７】
図８Ａは、本発明の複数の実施形態に係る単一のプロセッサコアのブロック図であり、オンダイの相互接続ネットワーク８０２との接続及び二次（Ｌ２）キャッシュローカルサブセット８０４と共に示される。一実施形態では、命令デコーダ８００は、パックドデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ８０６によれば、スカラ及びベクトルユニットに対して、キャッシュメモリへの低レイテンシアクセスが可能である。一実施形態では（設計の単純化のために）、スカラユニット８０８及びベクトルユニット８１０は、個別のレジスタセット（それぞれ、複数のスカラレジスタ８１２及び複数のベクトルレジスタ８１４）を用い、これらの間で転送されるデータは、一次（Ｌ１）キャッシュ８０６のメモリに書き込まれてから再読み出しされるが、本発明の代替的な複数の実施形態は、異なるアプローチ（例えば、単一のレジスタセットを用いる、又は書き込み及び再読み出しを行うことなく、２つのレジスタファイル間でデータを転送させる通信パスを含む）を用いてもよい。
【００６８】
Ｌ２キャッシュローカルサブセット８０４は、プロセッサコアあたり１つの個別のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、自己のＬ２キャッシュローカルサブセット８０４に対するダイレクトアクセスパスを有する。プロセッサコアに読み出されたデータは、自己のＬ２キャッシュサブセット８０４に記憶され、迅速かつ、自己の複数のローカルＬ２キャッシュサブセットにアクセスする他の複数のプロセッサコアと並行に、アクセスすることができる。プロセッサコアに書き込まれたデータは、自己のＬ２キャッシュサブセット８０４に記憶され、必要な場合には、他の複数のサブセットからフラッシュされる。リングネットワークは、共有のデータに対するコヒーレンシを保証する。リングネットワークが双方向であることにより、複数のプロセッサコア、複数のＬ２キャッシュ及び他の複数のロジックブロックなどのエージェントは、チップ内で互いに通信を行うことができる。各リングデータパスは、各方向１０１２ビット幅である。
【００６９】
図８Ｂは、本発明の複数の実施形態に係る図８Ａのプロセッサコアの一部の拡大図である。図８Ｂは、Ｌ１キャッシュ８０６の一部であるＬ１データキャッシュ８０６Ａと、併せて、ベクトルユニット８１０及び複数のベクトルレジスタ８１４に関するさらなる詳細とを含む。
【００７０】
具体的には、ベクトルユニット８１０は、整数、単精度浮動及び倍精度浮動命令のうちの１または複数を実行する１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ８２８を参照）である。ＶＰＵは、再構成ユニット８２０による複数のレジスタ入力の再構成、数字変換ユニット８２２Ａ−Ｂによる数字変換、及び複製ユニット８２４によるメモリ入力に対する複製をサポートする。複数の書き込みマスクレジスタ８２６により、複数の得られたベクトルの書き込みを記述することができる。
【００７１】
［集積メモリコントローラ及びグラフィックを有するプロセッサ］
図９は、本発明の複数の実施形態に係るプロセッサ９００のブロック図であり、プロセッサ９００は、１より多くのコアを有してもよく、集積メモリコントローラを有してもよく、集中画像表示を有してもよい。図９の複数の実線のボックスは、単一のコア９０２Ａ、システムエージェント９１０、１または複数のバスコントローラユニット９１６のセットを有するプロセッサ９００を示し、選択的に追加された複数の破線のボックスは、複数のコア９０２Ａ−Ｎを有する代替的なプロセッサ９００、システムエージェントユニット９１０内の１または複数の集積メモリコントローラユニット９１４のセット及び特殊用途ロジック９０８を示す。
【００７２】
したがって、プロセッサ９００の異なる複数の実装は、１）集中画像表示及び／又は科学的（スループット）ロジック（１または複数のコアを含んでもよい）である特殊用途ロジック９０８を有するＣＰＵ、及び１または複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、この２つの組み合わせ）であるコア９０２Ａ−Ｎ、２）主にグラフィック及び／又は科学的（スループット）用として意図された多数の特殊用途コアであるコア９０２Ａ−Ｎを有するコプロセッサ、及び３）多数の汎用インオーダコアであるコア９０２Ａ−Ｎを有するコプロセッサを含んでもよい。したがって、プロセッサ９００は、汎用プロセッサ、コプロセッサ又は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用画像処理ユニット）、ハイスループット多集積コア（ＭＩＣ）コプロセッサ（３０またはそれより多くのコアを含む）、組込みプロセッサなどのような特殊用途プロセッサであってもよい。プロセッサは、１または複数のチップ上に実装されてもよい。プロセッサ９００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ又はＮＭＯＳなどの多数の処理技術のいずれかを用いて、１または複数の基板の一部であってもよく、及び／又はその上に実装されてもよい。
【００７３】
メモリ階層は、複数のコア、１または複数の共有キャッシュユニット９０６又はそのセット、及び複数の集積メモリコントローラユニット９１４のセットに結合される外部メモリ（不図示）内に、１または複数のレベルのキャッシュを含む。複数の共有キャッシュユニット９０６のセットは、二次（Ｌ２）、三次（Ｌ３）、四次（Ｌ４）又は他の複数のレベルのキャッシュなどの１または複数の中レベルキャッシュ、ラストレベルキャッシュ（ＬＬＣ）及び／又はこれらの組み合わせを含んでもよい。一実施形態では、リングベースの相互接続ユニット９１２が、集中画像表示ロジック９０８、複数の共有キャッシュユニット９０６のセット及びシステムエージェントユニット９１０／集積メモリコントローラユニット９１４を相互接続するが、代替的な複数の実施形態は、そのような複数のユニットを相互接続するための任意の数の周知技術を用いてもよい。一実施形態では、１または複数のキャッシュユニット９０６と複数のコア９０２Ａ−Ｎとの間で、コヒーレンシが保持される。
【００７４】
いくつかの実施形態では、コア９０２Ａ−Ｎのうちの１または複数は、マルチスレッディングが可能である。システムエージェント９１０は、コア９０２Ａ−Ｎの調整及び操作を行うこれらのコンポーネントを含む。システムエージェントユニット９１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを含んでもよい。ＰＣＵは、コア９０２Ａ−Ｎ及び集中画像表示ロジック９０８の電力状態を調整するために必要なロジック及び複数のコンポーネントであってもよく、又はこれらを含んでもよい。ディスプレイユニットは、１または複数の外部接続ディスプレイを駆動するためのものである。
【００７５】
コア９０２Ａ−Ｎは、アーキテクチャ命令セットに関してホモジニアス又はヘテロジニアスであってもよく、すなわち、コア９０２Ａ−Ｎのうちの２またはそれより多くは、同じ命令セットを実行可能であってもよいが、他は、その命令セット又は異なる命令セットのサブセットのみを実行可能であってもよい。
【００７６】
［例示的な複数のコンピュータアーキテクチャ］
図１０−１３は、例示的な複数のコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型ＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組込みプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス及び様々な他の電子デバイス用の当技術分野で公知の他の複数のシステム設計及び複数の構成も、適している。概して、本明細書で開示されるように、プロセッサ及び／又は他の実行ロジックを組み込み可能な多様なシステム又は電子デバイスが、概して適している。
【００７７】
ここで、図１０を参照すると、本発明の一実施形態に係るシステム１０００のブロック図が示される。システム１０００は、コントローラハブ１０２０に結合される１または複数のプロセッサ１０１０、１０１５を含んでもよい。一実施形態では、コントローラハブ１０２０は、（個別のチップ上にあってもよい）グラフィックメモリコントローラハブ（ＧＭＣＨ）１０９０及び入出力ハブ（ＩＯＨ）１０５０を含み、ＧＭＣＨ１０９０は、メモリ１０４０及びコプロセッサ１０４５が結合されるメモリ及び複数のグラフィクスコントローラを含み、ＩＯＨ１０５０は、複数の入出力（Ｉ／Ｏ）デバイス１０６０をＧＭＣＨ１０９０に結合する。代替的に、メモリ及び複数のグラフィクスコントローラの一方又は両方は、プロセッサ内に集積され（本明細書に記載されたように）、メモリ１０４０及びコプロセッサ１０４５は、プロセッサ１０１０に直接結合され、コントローラハブ１０２０は、単一のチップにＩＯＨ１０５０を有する。
【００７８】
さらなるプロセッサ１０１５の選択的な性質を、図１０に複数の破線で示す。各プロセッサ１０１０、１０１５は、本明細書に記載された複数のプロセッサコアのうちの１または複数を含んでもよく、いくつかのバージョンのプロセッサ９００であってもよい。
【００７９】
メモリ１０４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、位相変化メモリ（ＰＣＭ）又はこれら２つの組み合わせであってもよい。少なくとも１つの実施形態について、コントローラハブ１０２０は、フロントサイドバス（ＦＳＢ）のようなマルチドロップバス、クイックパス相互接続（ＱＰＩ）のようなポイントツーポイントインターフェース又は同様の接続１０９５を介して、プロセッサ１０１０、１０１５と通信を行う。
【００８０】
一実施形態では、コプロセッサ１０４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組込みプロセッサなどのような特殊用途プロセッサである。一実施形態では、コントローラハブ１０２０は、集中画像表示アクセラレータを含んでもよい。
【００８１】
物理的リソース１０１０、１０１５の間には、アーキテクチャ、マイクロアーキテクチャ、温度、電力消費特性等を含む様々な利益の基準に関して、数々の違いが存在しうる。
【００８２】
一実施形態では、プロセッサ１０１０は、一般的なタイプの複数のデータ処理動作を制御する複数の命令を実行する。複数の命令内に、複数のコプロセッサ命令が組み込まれていてもよい。プロセッサ１０１０は、これらの複数のコプロセッサ命令を、付属のコプロセッサ１０４５によって実行されるべきタイプのものと認識する。従って、プロセッサ１０１０は、これらの複数のコプロセッサ命令（又は複数のコプロセッサ命令を表す複数の制御信号）を、コプロセッサバス又は他の相互接続上で、コプロセッサ１０４５に対して発行する。コプロセッサ１０４５は、受信された複数のコプロセッサ命令を受け付けて実行する。
【００８３】
ここで、図１１を参照すると、本発明の実施形態に係る第１のより具体的な例示的なシステム１１００のブロック図が示される。図１１に示されるように、マルチプロセッサシステム１１００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１１５０を介して結合される第１のプロセッサ１１７０及び第２のプロセッサ１１８０を含む。プロセッサ１１７０および１１８０のそれぞれは、いくつかのバージョンのプロセッサ９００であってもよい。本発明の一実施形態では、プロセッサ１１７０および１１８０は、それぞれプロセッサ１０１０および１０１５であり、コプロセッサ１１３８は、コプロセッサ１０４５である。他の実施形態では、プロセッサ１１７０および１１８０は、それぞれプロセッサ１０１０、コプロセッサ１０４５である。
【００８４】
プロセッサ１１７０および１１８０は、集積メモリコントローラ（ＩＭＣ）ユニット１１７２および１１８２をそれぞれ含むものとして示される。プロセッサ１１７０は、自己のバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インターフェース１１７６および１１７８をさらに含み、同様に、第２のプロセッサ１１８０は、Ｐ−Ｐインターフェース１１８６および１１８８を含む。プロセッサ１１７０、１１８０は、複数のＰ−Ｐインターフェース回路１１７８、１１８８を用いたポイントツーポイント（Ｐ−Ｐ）インターフェース１１５０を介して、情報を交換してもよい。図１１に示されるように、ＩＭＣ１１７２および１１８２は、複数のプロセッサを個別のメモリ、すなわち、個別のプロセッサにローカルに付属するメインメモリの一部となり得るメモリ１１３２及びメモリ１１３４に結合する。
【００８５】
プロセッサ１１７０、１１８０は、複数のポイントツーポイントインターフェース回路１１７６、１１９４、１１８６、１１９８を用いる個々のＰ−Ｐインターフェース１１５２、１１５４を介して、チップセット１１９０と情報を交換してもよい。チップセット１１９０は、高性能インターフェース１１３９を介して、コプロセッサ１１３８と任意選択的に情報を交換してもよい。一実施形態では、コプロセッサ１１３８は、例えば、ハイスループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組込みプロセッサなどのような特殊用途プロセッサである。
【００８６】
共有キャッシュ（不図示）は、いずれかのプロセッサ内に含まれ、又は両方のプロセッサの外部にあってもよいが、プロセッサが低電力モードであっても、いずれか又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに記憶され得るように、ポイントツーポイント相互接続を介して複数のプロセッサに接続される。
【００８７】
チップセット１１９０は、インターフェース１１９６を介して、第１のバス１１１６に結合されてもよい。一実施形態では、第１のバス１１１６は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バスもしくはＰＣＩ  Ｅｘｐｒｅｓｓバス又は他の第３世代Ｉ／Ｏ相互接続バスなどのバスであってもよいが、本発明の範囲はこれに限定されない。
【００８８】
図１１に示されるように、様々なＩ／Ｏデバイス１１１４が、第１のバス１１１６を第２のバス１１２０に結合するバスブリッジ１１１８と共に、第１のバス１１１６に結合されてもよい。一実施形態では、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵのアクセラレータ（例えば、グラフィックアクセラレータ又はデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイもしくは任意の他のプロセッサなどの１または複数の追加的なプロセッサ１１１５が、第１のバス１１１６に結合される。一実施形態では、第２のバス１１２０は、ローピンカウント（ＬＰＣ）バスであってもよい。
【００８９】
例えば、キーボード及び／又はマウス１１２２、通信デバイス１１２７、及びディスクドライブ、又は複数の命令／コード及びデータ１１３０を含みうる他の大容量ストレージデバイスなどの記憶ユニット１１２８を含む様々な複数のデバイスが、一実施形態では、第２のバス１１２０に結合されてもよい。
【００９０】
さらに、オーディオＩ／Ｏ１１２４が、第２のバス１１２０に結合されてもよい。なお、他の複数のアーキテクチャが、適用可能である。例えば、図１１のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は他のそのようなアーキテクチャを実装してもよい。
【００９１】
ここで、図１２を参照すると、本発明の実施形態に係る第２のより具体的な、例示的なシステム１２００のブロック図が示される。図１１及び１２における同様の複数のエレメントには、同様の参照番号が付され、図１１の複数の特定の態様は、図１２の他の複数の態様を分かりにくくしないために、図１２では省略されている。
【００９２】
図１２は、プロセッサ１１７０、１１８０は、それぞれ集積メモリ及びＩ／Ｏ制御ロジック（「ＣＬ」）１１７２及び１１８２を含んでもよいことを示す。したがって、ＣＬ１１７２、１１８２は、複数の集積メモリコントローラユニットを含み、かつ、Ｉ／Ｏ制御ロジックを含む。図１２は、メモリ１１３２、１１３４のみがＣＬ１１７２、１１８２に結合されるのではなく、複数のＩ／Ｏデバイス１２１４も、制御ロジック１１７２、１１８２に結合されることを示す。複数のレガシーＩ／Ｏデバイス１２１５は、チップセット１１９０に結合される。
【００９３】
ここで、図１３を参照すると、本発明の実施形態に係るＳｏＣ１３００のブロック図が示される。図９における同様の複数のエレメントには、同様の参照番号が付される。また、複数の破線のボックスは、より進化したＳｏＣ上のオプションの機能である。図１３では、相互接続ユニット１３０２は、１または複数のコア２０２Ａ―Ｎ及び共有キャッシュユニット９０６のセットを含むアプリケーションプロセッサ１３１０、システムエージェントユニット９１０、バスコントローラユニット９１６、集積メモリコントローラユニット９１４、集中画像表示ロジック、画像プロセッサ、オーディオプロセッサ及びビデオプロセッサを含み得る１または複数のコプロセッサ１３２０またはそのセット、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１３３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット１３３２及び１または複数の外部ディスプレイに結合するためのディスプレイユニット１３４０に結合される。一実施形態では、コプロセッサ１３２０は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、組込みプロセッサなどのような特殊用途プロセッサを含む。
【００９４】
本明細書に開示される複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア又はそのような複数の実装アプローチの組み合わせに実装されてもよい。本発明の複数の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性及び不揮発性メモリ及び／又は複数のストレージエレメントを含む）、少なくとも１つの入力デバイスおよび少なくとも１つの出力デバイスを備えるプログラム可能な複数のシステム上で実行する複数のコンピュータプログラム又はプログラムコードとして実装されてもよい。
【００９５】
図１１に示すコード１１３０などのプログラムコードは、本明細書に記載された複数の機能を実行し、出力情報を生成するべく、複数の入力命令に適用されてもよい。出力情報は、１または複数の出力デバイスに、公知の態様で適用されてもよい。この適用のために、処理システムは、例えば、デジタルシグナルプロセッサ（ＤＳＰ）、マイクロコントローラ、特殊用途集積回路（ＡＳＩＣ）又はマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【００９６】
プログラムコードは、処理システムと通信を行うべく、高水準の手順型またはオブジェクト指向プログラミング言語で実装されてもよい。プログラムコードは、必要に応じて、アセンブリ言語又は機械言語でさらに実装されてもよい。実際には、本明細書に記載された複数のメカニズムは、その範囲において、任意の特定のプログラム言語に限定されるものではない。いずれの場合であっても、言語は、コンパイル言語またはインタプリタ型言語であってもよい。
【００９７】
少なくとも１つの実施形態のうち１または複数の態様は、機械可読媒体に記憶された、プロセッサ内の様々なロジックを表す複数の表現命令によって実装されてもよく、このような命令は、機械に読み出された場合に、本明細書に記載される複数の技術を実行するべく、機械にロジックを組み立てさせる。「ＩＰコア」として知られるそのような複数の表現は、有形の機械可読媒体上に記憶されるとともに、様々な顧客又は製造工場に供給されて、実際にロジック又はプロセッサを作り出す製造機械に読み込まれてもよい。
【００９８】
そのような機械可読記憶媒体は、限定的ではないが、機械又はデバイスによって製造又は形成される、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、書き換え可能コンパクトディスク（ＣＤ−ＲＷ）及び磁気光ディスクを含む任意の他のタイプのディスク、リードオンリメモリ（ＲＯＭ）などの半導体デバイス、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、フラッシュメモリ、消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、位相変化メモリ（ＰＣＭ）、磁気又は光カードなどのランダムアクセスメモリ（ＲＡＭ）、もしくは複数の電子的命令を記憶するために適した任意の他のタイプのメディアなどの記憶媒体を含む、複数の物品の非一時的かつ有形の構成を含んでもよい。
【００９９】
従って、本発明の複数の実施形態は、複数の命令を含む、又は本明細書に記載される複数の構造、複数の回路、複数の装置、複数のプロセッサ及び／又は複数のシステム機能を定義するハードウェア記述言語（ＨＤＬ）などの設計データを含む非一時かつ有形の機械可読媒体をさらに含む。そのような複数の実施形態は、プログラム製品と称されてもよい。
【０１００】
特定の例示的な複数の実施形態が、添付の図面において記載及び示されたが、理解すべきことは、そのような複数の実施形態は、幅広い発明の単なる例示であって、これを制限するものではなく、当業者が本開示を参照することにより、様々な他の複数の変更がされ得ることから、本発明は、示されかつ記載された具体的な複数の構造及び複数の構成に限定されるものではない。成長が速く、さらなる進歩が容易に予見できないこのような技術領域では、開示された複数の実施形態は、技術的進歩を可能とすることによって促進されるように、本開示又は添付された特許請求の範囲の原理を逸脱することなく、容易に構成及び詳細が変更され得る。
本実施形態の例を下記の各項目として示す。
［項目１］
第１のマスクレジスタ及び第２のマスクレジスタを含むレジスタファイルと、
前記レジスタファイルに結合され、マスク更新命令を実行する実行回路とを備え、
前記マスク更新命令に応答して、前記実行回路は、前記第１のマスクレジスタ内の所定数のマスクビットを反転させ、前記第２のマスクレジスタ内の前記所定数のマスクビットを反転させる、装置。
［項目２］
前記所定数は、前記第１のマスクレジスタ内の第１のビット値を有するマスクビットの数と、前記第２のマスクレジスタ内の第２のビット値を有するマスクビットの数との中で、より小さい数である、項目１に記載の装置。
［項目３］
前記第１のビット値は、前記第２のビット値と同じである、項目２に記載の装置。
［項目４］
前記第１のビット値は、前記第２のビット値の反転である、項目２に記載の装置。
［項目５］
前記第１のマスクレジスタ内の前記所定数のマスクビットは、前記第１のマスクレジスタ内の複数の下位のマスクビット又は複数の上位のマスクビットのいずれかである、項目１から４のいずれか１項に記載の装置。
［項目６］
前記第２のマスクレジスタ内の前記所定数のマスクビットは、前記第２のマスクレジスタ内の複数の下位のマスクビット又は複数の上位のマスクビットのいずれかである、項目１から５のいずれか１項に記載の装置。
［項目７］
前記第１のマスクレジスタに関連する第１のベクトルレジスタであって、前記第１のマスクレジスタの各マスクビットは、前記第１のベクトルレジスタ内の対応するデータエレメントに対する条件が満たされているか否かを示す、第１のベクトルレジスタと、
前記第２のマスクレジスタに関連する第２のベクトルレジスタであって、前記第２のマスクレジスタの各マスクビットは、前記第２のベクトルレジスタ内の対応するデータエレメントに対する前記条件が満たされているか否かを示す、第２のベクトルレジスタとをさらに備える、項目１から６のいずれか１項に記載の装置。
［項目８］
所定データエレメントに対する前記条件が満たされる場合、前記所定データエレメントに対するさらなる演算が必要である、項目７に記載の装置。
［項目９］
プロセッサによって、第１のマスクレジスタ及び第２のマスクレジスタを規定するマスク更新命令を受信する段階と、
前記マスク更新命令に応答して、
前記第１のマスクレジスタ内の所定数のマスクビットを反転させる段階と、
前記第２のマスクレジスタ内の前記所定数のマスクビットを反転させる段階とを含む複数の演算を実行する段階とを備える、方法。
［項目１０］
前記所定数は、前記第１のマスクレジスタ内の第１のビット値を有するマスクビットの数と、前記第２のマスクレジスタ内の第２のビット値を有するマスクビットの数との中で、より小さい数である、項目９に記載の方法。
［項目１１］
前記第１のビット値は、前記第２のビット値と同じである、項目１０に記載の方法。
［項目１２］
前記第１のビット値は、前記第２のビット値の反転である、項目１０に記載の方法。
［項目１３］
前記第１のマスクレジスタ内の前記所定数のマスクビットは、前記第１のマスクレジスタ内の複数の下位のマスクビット又は複数の上位のマスクビットのいずれかである、項目９から１２のいずれか１項に記載の方法。
［項目１４］
前記第２のマスクレジスタ内の前記所定数のマスクビットは、前記第２のマスクレジスタ内の複数の下位のマスクビット又は複数の上位のマスクビットのいずれかである、項目９から１３のいずれか１項に記載の方法。
［項目１５］
前記第１のマスクレジスタの各マスクビットは、第１のベクトルレジスタ内の対応するデータエレメントに対する条件が満たされているか否かを示し、
前記第２のマスクレジスタの各マスクビットは、第２のベクトルレジスタ内の対応するデータエレメントに対する前記条件が満たされているか否かを示す、項目９から１４のいずれか１項に記載の方法。
［項目１６］
所定データエレメントに対する前記条件が満たされる場合、前記所定データエレメントに対するさらなる演算が必要である、項目１５に記載の方法。
［項目１７］
入力データアレイを記憶するメモリと、
マスク更新命令の複数のオペランドを記憶する第１のマスクレジスタ及び第２のマスクレジスタと、前記第１のマスクレジスタ及び前記第２のマスクレジスタにそれぞれ関連し、ベクトル演算のために前記入力データアレイを読み込む第１のベクトルレジスタ及び第２のベクトルレジスタとを含むレジスタファイルと、
前記レジスタファイルに結合され、前記マスク更新命令を実行する実行回路とを備え、
前記マスク更新命令に応答して、前記実行回路は、前記第１のマスクレジスタ内の所定数のマスクビットを、第１のビット値から第２のビット値に設定し、前記第２のマスクレジスタ内の前記所定数のマスクビットを、前記第２のビット値から前記第１のビット値に設定する、システム。
［項目１８］
前記所定数は、前記第１のマスクレジスタ内の第１のビット値を有するマスクビットの数と、前記第２のマスクレジスタ内の第２のビット値を有するマスクビットの数との中で、より小さい数である、項目１７に記載のシステム。
［項目１９］
前記第１のビット値は、前記第２のビット値と同じである、項目１７または１８に記載のシステム。
［項目２０］
前記第１のビット値は、前記第２のビット値の反転である、項目１７または１８に記載のシステム。
［項目２１］
前記第１のマスクレジスタ内の前記所定数のマスクビットは、前記第１のマスクレジスタ内の複数の下位のマスクビット又は複数の上位のマスクビットのいずれかである、項目１７から２０のいずれか１項に記載のシステム。
［項目２２］
前記第２のマスクレジスタ内の前記所定数のマスクビットは、前記第２のマスクレジスタ内の複数の下位のマスクビット又は複数の上位のマスクビットのいずれかである、項目１７から２１のいずれか１項に記載のシステム。
［項目２３］
前記第１のマスクレジスタの前記第１のビット値の各マスクビットは、前記第１のベクトルレジスタ内の対応するデータエレメントに対する条件が満たされていないことを示し、
前記第２のマスクレジスタの前記第２のビット値の各マスクビットは、前記第２のベクトルレジスタ内の対応するデータエレメントに対する前記条件が満たされていることを示す、項目１７から２２のいずれか１項に記載のシステム。
［項目２４］
所定データエレメントに対する前記条件が満たされる場合、前記所定データエレメントに対するさらなる演算が必要である、項目２３に記載のシステム。
【図１】
0005987233.tif 000002
【図２】
0005987233.tif 000003
【図３】
0005987233.tif 000004
【図４Ａ】
0005987233.tif 000005
【図４Ｂ】
0005987233.tif 000006
【図５Ａ】
0005987233.tif 000007
【図５Ｂ】
0005987233.tif 000008
【図５Ｃ】
0005987233.tif 000009
【図６】
0005987233.tif 000010
【図７Ａ】
0005987233.tif 000011
【図７Ｂ】
0005987233.tif 000012
【図８Ａ】
0005987233.tif 000013
【図８Ｂ】
0005987233.tif 000014
【図９】
0005987233.tif 000015
【図１０】
0005987233.tif 000016
【図１１】
0005987233.tif 000017
【図１２】
0005987233.tif 000018
【図１３】
0005987233.tif 000019