本明細書では、プロセッサに、複数の連続ソースエレメントを複数のマスクされていない結果エレメントにストアさせると共に、複数のマスクされた結果エレメントに伝搬させる複数のマスクされた連続ソースエレメントのストア及び伝搬命令と、複数の命令を実行するプロセッサと、複数の命令を処理又は実行する場合にプロセッサによって実行される方法と、複数の命令を処理又は実行する1つ又は複数のプロセッサを組み込むシステムとが開示される。以下の説明において、多くの具体的な詳細が示される(例えば、具体的な命令オペレーション、データフォーマット、プロセッサ構成、マイクロアーキテクチャの詳細、オペレーションのシーケンス等)。しかしながら、複数の実施形態は、これらの具体的な詳細がなくても実施可能である。複数の他の例において、周知の回路、構造及び技術は、説明の理解に対する妨げとなることを回避すべく、詳細には示されていない。
図1は、マスクされた連続ソースエレメントのストア及び伝搬命令102の実施形態を実行するように動作可能なプロセッサ100の実施形態のブロック図である。いくつかの実施形態において、プロセッサは、(例えば、デスクトップ、ラップトップ、又は他のコンピュータにおいて多く用いられるタイプの)汎用プロセッサであってよい。あるいは、プロセッサは、特定用途向けプロセッサであってよい。好適な特定用途向けプロセッサの例は、限定されるものではないが、いくつか例を挙げると、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックプロセッサ、コプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、及びコントローラ(例えばマイクロコントローラ)を含む。プロセッサは、様々な複合命令セットコンピューティング(CISC)プロセッサ、様々な縮小命令セットコンピューティング(RISC)プロセッサ、様々な超長命令語(VLIW)プロセッサ、これらの様々なハイブリッドのいずれかであってよく、又はこのような命令セットの(例えば、異なるコアにおける)組み合わせを実装してよい。
オペレーションの間、プロセッサ100は、マスクされた連続ソースエレメントのストア及び伝搬命令102の実施形態を受信してよい。例えば、命令は、命令フェッチユニット、命令キュー等から受信されてよい。命令は、マクロ命令、アセンブリ言語命令、機械コード命令、又はプロセッサの命令セットの他の命令もしくは制御信号を表してよい。いくつかの実施形態において、命令は、複数の(例えば、少なくとも4つの)データエレメントを有する第1のソースパックドデータオペランド110を(例えば、1つ又は複数のフィールド又は複数のビットのセットを介して)明示的に指定し又は他の方法で示し(例えば、黙示的に示し)てよく、又は、複数の(例えば少なくとも4つの)マスクエレメントを含むソースマスク116(例えばパックドデータオペレーションマスクレジスタ118)を指定し又は他の方法で示してよく、結果パックドデータオペランド114がストアされ得るデスティネーションストア位置を指定し又は他の方法で示してよい。いくつかの実施形態において、命令は、任意に、1つ又は複数の極値(例えば、最上位又は最下位の)マスクされた結果データエレメントのために用いられる少なくとも1つの値(例えば、図4−6参照)を有する第2のソース(例えばパックドデータ)オペランド112をさらに指定し又は他の方法で示してよいが、これは必須ではない。
再び図1を参照すると、プロセッサは、デコードユニット又はデコーダ104を含む。デコードユニットは、マスクされた連続ソースエレメントのストア及び伝搬命令102を受信及びデコードしてよい。デコードユニットは、1つ又は複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、デコードされた命令又は制御信号、又は命令102を反映し、表し、及び/又はこれから得られる相対的に下位レベルの他の命令又は制御信号を出力してよい。1つ又は複数の下位レベル命令又は制御信号は、1つ又は複数の下位(例えば回路レベル又はハードウェアレベル)オペレーションを介して、上位命令102を実装してよい。デコードユニットは、限定されるものではないが、マイクロコードリードオンリメモリ(ROM)、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、及び当技術分野において公知の他のメカニズムを含む様々な異なるメカニズムを用いて実装されてよい。
いくつかの実施形態において、直接デコードユニットに提供される命令102の代わりに、命令エミュレータ、トランスレータ、モーファ、インタプリタ、又は他の命令変換モジュールが任意に用いられてよい。様々な異なるタイプの命令変換モジュールが当技術分野において公知であり、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせにおいて実装されてよい。いくつかの実施形態において、命令変換モジュールは、例えば、別個のダイ上及び/又はメモリ(例えば、スタティック、ダイナミック、又はランタイム命令エミュレートモジュール)内のような、命令処理プロセッサの外部に配置されてよい。例として、命令変換モジュールは、第1の命令セットに含まれ得る命令102を受信してよく、命令102をエミュレート、トランスレート、モーフィング、解釈、又は他の方法で変換し、第2の異なる命令セットに含まれ得る1つ又は複数の対応もしくは派生中間命令又は制御信号にしてよい。第2の命令セットの1つ又は複数の中間命令又は制御信号は、デコードユニット(例えばデコードユニット104)に提供されてよい。デコードユニットは、受信された第2の命令セットの1つ又は複数の命令又は制御信号を、プロセッサ(例えば1つ又は複数の実行ユニット)のネイティブハードウェアによって実行可能な1つ又は複数の下位レベル命令又は制御信号にデコードしてよい。
プロセッサは、パックドデータレジスタ108のセットをさらに含む。複数のパックドデータレジスタの各々は、パックドデータ、ベクトルデータ、又はSIMDデータをストアするように動作可能なオンダイのストア位置を表してよい。パックドデータレジスタは、アーキテクチャ的に可視なレジスタ(例えばアーキテクチャレジスタファイル)を表してよい。アーキテクチャ的に可視なアーキテクチャレジスタは、ソフトウェア及び/又はプログラマに可視であり、及び/又は、複数のオペランドを特定するプロセッサの命令セットの複数の命令によって示される、複数のレジスタである。これらのアーキテクチャレジスタは、所与のマイクロアーキテクチャ(例えば、一時的レジスタ、リオーダバッファ、リタイアメントレジスタ等)において、他のアーキテクチャ的ではない又はアーキテクチャ的に不可視なレジスタと対比される。パックドデータレジスタは、周知技術を用いて、異なる態様で、異なるマイクロアーキテクチャにおいて実装されてよく、いかなる特定のタイプの回路に限定されるものではない。様々な異なるタイプのレジスタが適している。レジスタの好適なタイプの例は、限定されるものではないが、専用物理レジスタ、レジスタリネーミングを用いる動的割り当て物理レジスタ、及びこれらの組み合わせを含む。
いくつかの実施形態において、第1のソースパックドデータオペランド110は、任意に、第1のパックドデータレジスタにストアされてよく、任意の第2のソースパックドデータオペランド112は、第2のパックドデータレジスタにストアされてよい。あるいは、複数のメモリ位置、又は複数の他のストア位置が、これらのオペランドの1つ又は複数のために用いられてよい。いくつかの実施形態において、デスティネーションストア位置は、パックドデータレジスタであってもよい。いくつかの場合において、デスティネーションストア位置として用いられるパックドデータレジスタは、第1のソースパックドデータオペランド及び第2のソースオペランドのために用いられる複数のパックドデータレジスタと異なってよい。複数の他の場合には、複数のソースパックドデータオペランドの1つのために用いられるパックドデータレジスタは、デスティネーションストア位置として再利用されてよい(例えば、結果パックドデータオペランド114は、ソースパックドデータオペランド110又は112の1つに書き込まれてよい)。あるいは、メモリ又は複数の他のストア位置は、任意に、デスティネーションストア位置のために用いられてよい。
再び図1を参照すると、実行ユニット106は、デコードユニット104、第1のソースパックドデータオペランド110、(用いられる場合には)任意の第2のソースオペランド112、及びソースマスク116に結合される。例えば、実行ユニットは、パックドデータレジスタ108及びパックドデータオペレーションマスクレジスタ118に結合されてよい。例として、実行ユニットは、論理又はデータ操作オペレーション等を実行する算術ロジックユニット、ロジックユニット、デジタル回路を含んでよい。実行ユニットは、1つ又は複数のデコードされた又は他の方法で変換された命令又は制御信号を受信してよく、これらは、マスクされた連続ソースエレメントのストア及び伝搬命令102を表す、及び/又はこれらから得られる。実行ユニットは、第1のソースパックドデータオペランド110、ソースマスク116をさらに受信してよく、いくつかの実施形態において、全てが命令102によって指定され又は他の方法で示される任意の第2のソースオペランド112もさらに受信してよい。
いくつかの実施形態において、実行ユニットは、ソースマスク116をマスク又は制御オペランドとして用いて、どのようにデータエレメントが第1のソースパックドデータオペランド110から結果パックドデータオペランド114にストアされるかをマスク又は制御してよい。ソースマスクは、複数のマスクエレメント又は制御エレメントを含んでよい。いくつかの実施形態において、複数のマスクエレメントは、結果パックドデータオペランドの複数の対応結果データエレメントと1対1対応で含まれてよく、これにより、マスク又は制御が、各結果データエレメントに対して別個に及び/又は他とは独立して提供されてよい。いくつかの実施形態において、各マスクエレメントは、単一のマスクビットであってよいが、本発明の範囲はこれに限定されない。このような場合、ソースマスクは、各結果データエレメントに対してマスクビットを有してよい。いくつかの実施形態において、各マスクビット又は他のマスクエレメントの値は、第1のソースパックドデータオペランド110からの次の連続データエレメントが結果パックドデータオペランド114における対応結果データエレメントにストアされるか否かをマスク又は制御してよい。例えば、各マスクビット又はエレメントは、マスクされていない値(例えば、バイナリの1(すなわち、1)にセットされる)を有し、第1のソースパックドデータオペランド110における次の連続ソースデータエレメントを、対応するマスクされていない結果データエレメントにストアさせてよい。又は、各マスクビットは、マスクされた値(例えば、バイナリのゼロ(すなわち、0)にクリアされる)を有し、(例えば、最も近いマスクされていない結果データエレメントの)他の値が対応するマスクされた結果データエレメントに伝搬又は他の方法でストアされるようにしてよい。他の実施形態において、2つ又はそれより多くのビットは、任意に、各マスクエレメントのために用いられてよい。例えば、各マスクエレメントは、各対応ソースデータエレメントと同数のビットを有してよく、最下位ビット又は最上位ビットは、単一のマスクビットとして用いられてよい。
実行ユニットは、命令102に応答して及び/又はその結果として(例えば、当該命令からデコードされた1つ又は複数の命令又は制御信号に応答して)、結果パックドデータオペランド114を当該命令によって示されるデスティネーションストア位置にストアするように動作可能であってよい。いくつかの実施形態において、結果パックドデータオペランドは、少なくとも2つのマスクされていない結果データエレメントの組を含んでよい。複数のマスクされていない結果データエレメントの組は、結果パックドデータオペランドの第1のエンド(例えば、最下位又は最も有意性の低いエンド又はビット位置)と第2のエンド(例えば、最上位又は最も有意性の高いエンド又はビット位置)との間にあってよい。複数のマスクされていない結果データエレメントの各々は、ソースマスク116の(例えば、マスクされたマスクエレメントと対照的に)異なる対応するマスクされていないマスクエレメントに対応してよい。当該組の少なくとも2つのマスクされていない結果データエレメントの各々は、第1のソースパックドデータオペランド110の少なくとも2つの連続データエレメントの異なるものの値を、同じ相対的順序でストアしてよい。いくつかの実施形態において、第1のソースパックドデータオペランドの複数の連続又は近接データエレメントは、ソースマスクの複数のマスクされていないエレメントに対応する結果パックドデータオペランドにおける複数の非連続又は潜在的に疎なマスクされていないデータエレメント位置の組に拡張されてよい。ソースマスクの複数のマスクされていないエレメントは、第1のソースパックドデータオペランドの昇順の連続データエレメントによって置換される複数の対応するマスクされていない結果データエレメント位置を選択してよい。複数の連続ソースデータエレメントにおける複数の値の相対的順序(例えば、同じ順序又は反転順序)は、複数のマスクされていない結果データエレメントの組において維持されてよい。例えば、当該組の最下位のマスクされていない結果データエレメントは、少なくとも2つの連続データエレメントの最下位データエレメントの値をストアしてよく、当該組の次の最下位のマスクされていない結果データエレメントは、少なくとも2つの連続データエレメントの次の最下位データエレメントの値をストアしてよい、等である。いくつかの例において、このようなマスクされていない結果データエレメントの少なくとも3つ、又は3つより多くが存在してよいが、これは必須ではない。
いくつかの実施形態において、結果パックドデータオペランドは、少なくとも1つの、又は複数のマスクされた結果データエレメントをさらに含んでよい。複数のマスクされた結果データエレメントは、ソースマスクの(例えば、マスクされていないマスクエレメントと対照的に)マスクされたマスクエレメントに対応してよい。いくつかの実施形態において、複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントは、対応ペアの複数のマスクされていない結果データエレメントの1つと同じ値を有してよい。いくつかの実施形態において、複数の最も近いマスクされていない結果データエレメントのペアの間にある全てのマスクされた結果データエレメントは、結果パックドデータオペランドの第1のエンド(例えば、最下位又は最も有意性の低いビット位置又はエンド)に最も近いペアのマスクされていない結果データエレメントと同じ値を有してよい。いくつかの実施形態において、マスクされていない結果データエレメントの値は、それ自体と次の連続するマスクされていない結果データエレメントとの間にある、これらの隣接するマスクされた結果データエレメントの全てに伝搬され、又は他の方法でストアされてよい。有利には、複数のマスクされた結果データエレメントをゼロにする又は変化しない状態で残すことは、必須ではない。いくつかの実施形態において、結果パックドデータオペランドは、任意に、図3−6のいずれかについて図示及び説明されるもののいずれであってよいが、本発明の範囲はこれに限定されない。
いくつかの実施形態において、前述された結果パックドデータオペランドの特性(例えばマスクされていない結果データエレメントの値を隣接するマスクされたデータエレメントに伝播又は他の方法でストアする)は、命令に固定的又は黙示的であってよい(例えば、命令のオペコード及び/又は命令のタイプに対して固定的又は黙示的であってよい)。すなわち、このような特性は、例えば、このような特性を固定又は黙示しないタイプ又はオペコードのフルシャッフル又は再配列命令のような非常に柔軟な命令と共に、明示的な仕様又は制御を介することによって(例えば、制御オペランドを形成することによって)実現される必要はない。
有利には、いくつかの実施形態において、マスクされた連続ソースエレメントのストア及び伝搬命令は、プロセッサに、複数の連続ソースデータエレメントを複数のマスクされていない結果データエレメントの組にストアさせ、複数のソースデータエレメントを、複数のマスクされていない結果データエレメントの間にある複数の隣接するマスクされた結果データエレメントに伝搬又は他の方法でストアさせるように動作してよい。複数のソースデータエレメントを複数のマスクされた結果データエレメントに伝搬又は他の方法でストアする能力は、特定の実装において有用及び/又は有益であってよい。例えば、これは、命令が、ある条件下でインクリメントされるスカラ値に対する複数のループ及び計算を実装するために用いられる場合に該当してよい。他の例として、これは、複数の条件が満たされない場合であって、なおかつ変数の値が同じ状態を保つ場合、及び次の条件が満たされる場合であって、なおかつ次の連続データエレメントの値にのみ変更される場合に該当してよい。
実行ユニット及び/又はプロセッサは、命令102に応答して及び/又はその結果として、命令102を実行する及び/又は結果をストアするように動作可能な、固有又は特定のロジック(例えば、トランジスタ、集積回路、又はファームウェア(例えば、不揮発性メモリにストアされた命令)及び/又はソフトウェアと潜在的に組み合わせられる他のハードウェア)を含んでよい。
説明の妨げとなることを回避すべく、相対的に簡単なプロセッサが図示及び説明されている。複数の他の実施形態において、プロセッサは、任意に、複数の他の周知のプロセッサコンポーネントを含んでよい。複数の実施形態は、複数のコアを有するプロセッサ、論理プロセッサ、又は実行エンジンに含まれてよく、これらの少なくとも1つは、本明細書で開示される命令の実施形態を実行するデコードユニット及び実行ユニットを有する。
図2は、マスクされた連続ソースエレメントのストア及び伝搬命令の実施形態を実行する方法220の実施形態のブロックフロー図である。様々な実施形態において、方法は、プロセッサ、命令処理装置、又は他のデジタルロジック装置によって実行されてよい。いくつかの実施形態において、図2の方法は、図1のプロセッサによって及び/又はその内部で実行されてよい。図1のプロセッサについて本明細書で説明される複数のコンポーネント、特徴、及び具体的かつ任意の詳細は、任意に、図2の方法にさらに適用される。あるいは、図2の方法は、同様の又は異なるプロセッサ又は装置によって及び/又はその内部で実行されてよい。さらに、図1のプロセッサは、図2のものと同じ、同様の、又は異なる複数の方法を実行してよい。
方法は、ブロック221において、マスクされた連続ソースエレメントのストア及び伝搬命令を受信する段階を含む。様々な態様において、命令は、プロセッサ又はその一部(例えば、命令フェッチユニット、デコードユニット、バスインタフェースユニット等)において受信されてよい。様々な態様において、命令は、オフダイソースから(例えば、メモリ、相互接続等から)、又はオンダイソースから(例えば、命令キャッシュ、命令キュー等から)受信されてよい。命令は、第1の複数の(例えば、少なくとも4つの)データエレメントを含む第1のソースパックドデータオペランドを指定し又は他の方法で示してよく、複数の(例えば、少なくとも4つの)マスクエレメントを含むソースマスクを指定し又は他の方法で示してよく、デスティネーションストア位置を指定し又は他の方法で示してよい。
方法は、ブロック222において、命令に応答して及び/又はその結果として、デスティネーションストア位置に結果パックドデータオペランドをストアする段階を含む。典型的には、実行ユニットは、命令を実行し、結果をストアしてよい。いくつかの実施形態において、結果パックドデータオペランドは、少なくとも2つのマスクされていない結果データエレメントの組を含んでよい。複数のマスクされていない結果データエレメントの各々は、第1のソースパックドデータオペランドの少なくとも2つの連続データエレメントの異なるものの値を、相対的順序(例えば、同じ順序又は反転順序)でストアしてよい。いくつかの実施形態において、結果パックドデータオペランドは、複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントをさらに含んでよく、これらは、対応ペアのマスクされていない結果データエレメントのうち、結果パックドデータオペランドの第1のエンドに最も近いものと同じ値を有する。複数のマスクされた結果データエレメントは、ソースマスクの複数のマスクされたマスクエレメントに対応してよい。いくつかの実施形態において、結果パックドデータオペランドは、図3−6のいずれかについて図示及び説明される複数の特性のいずれかを有してよいが、本発明の範囲はこれに限定されない。
図示された方法は、複数のアーキテクチャオペレーション(例えば、ソフトウェアの観点から可視なもの)を含む。複数の他の実施形態において、方法は、任意に、1つ又は複数のマイクロアーキテクチャオペレーションを含んでよい。例えば、命令は、アウトオブオーダでフェッチ、デコード、スケジューリングされてよく、複数のソースオペランドは、アクセスされてよく、実行ユニットは、命令を実装する複数のマイクロアーキテクチャオペレーションを実行してよい、等である。いくつかの実施形態において、命令を実装する複数のマイクロアーキテクチャオペレーションは、任意に、マスクビットの値を評価することと、複数の連続ソースデータエレメントを、複数のマスクされていない結果データエレメントの組に多重化する又は他の方法で移動させる又は再構成すること、複数のソースデータエレメントを1つ又は複数のマスクされた結果データエレメントに伝播すること等を含んでよい。
図3は、命令の実施形態に応答して実行可能なマスクされた連続ソースエレメントのストア及び伝搬オペレーション330の、複数の最下位のマスクされたエレメントが変化しない実施形態を示すブロック図である。本実施形態において、最も有意性の低いマスクされていない結果データエレメント(例えば、図示された例においては位置3のA0)に先行するゼロ又はそれより多く(例えば、図示された例においては3つ)の最下位のマスクされた結果データエレメント332のセットは、変化しない状態にされる(例えば、デスティネーションストア位置における初期値又は開始値が変更されなくてよい)。図において、結果パックドデータオペランドの最も有意性の低い又は最下位エンドもしくはビット位置331は、向かって右に示され、最も有意性の高い又は最上位エンドもしくはビット位置333は、向かって左に示される。
命令は、第1の複数の(例えば、少なくとも4つの)パックドデータエレメントを有し得る第1のソースパックドデータオペランド310を指定し(例えば、明示的に指定し)又は他の方法で示し(例えば、黙示的に示し)てよい。図示された実施形態において、第1のソースパックドオペランドデータは、8つのデータエレメントA0からA7を有するが、本発明の範囲はこれに限定されない。複数の他の実施形態において、第1のソースパックドデータオペランドは、異なる数のデータエレメント、例えば、第1のソースパックドデータオペランドのビットサイズを各データエレメントのビットサイズで除算したものに等しい数を有してよい。図示された実施形態において、連続データエレメント335の最下位セットは、最下位データエレメント(A0)を位置0に含み、次の最下位データエレメント(A1)を位置1に含む。様々な実施形態において、第1のソースパックドデータオペランドの幅は、64ビット、128ビット、256ビット、512ビット、又は1024ビットであってよいが、本発明の範囲はこれに限定されない。様々な実施形態において、各パックドデータエレメントの幅は、8ビット、16ビット、32ビット、又は64ビットであってよいが、本発明の範囲はこれに限定されない。いくつかの実施形態において、第1のソースパックドデータオペランドは、パックドデータレジスタにストアされてよい。複数の他の実施形態において、第1のソースパックドデータオペランドは、任意に、メモリ位置にストアされてよく、これは、複数のソースデータエレメントが、最初にこれらをパックドデータレジスタにロードする必要なく、メモリ位置から結果パックドデータオペランドに直接ストアされることを可能にしてよい。
命令は、ソースマスク316を指定し又は他の方法で示してもよい。ソースマスクは、複数のマスクエレメントを含んでよい。例えば、ソースマスクは、結果パックドデータオペランド314における結果データエレメントの数と同数のマスクエレメントを含んでよい。図示された実施形態において、ソースマスクは、8つのマスクエレメントを有する。各マスクエレメントは、複数のオペランド内の同じ相対的位置にある結果パックドデータオペランドの複数の結果データエレメントの1つに対応してよい。示されるように、いくつかの実施形態において、各マスクエレメントは、単一のマスクビットであってよいが、本発明の範囲はこれに限定されない。図示された実施形態において用いられる指定に従って、バイナリのゼロ値(すなわち、0)にクリアされたマスクエレメントは、マスクアウト又はマスクされたマスクエレメントを表し、バイナリの1値(すなわち、1)にセットされたマスクエレメントは、マスクされていないマスクエレメントを表す。逆の指定も可能である。特定の図示された例において、8つのマスクビットは、(左の)最上位位置から(右の)最下位ビット位置に向かって、バイナリ値0、1、0、0、1、0、0、0を有する。これらは、値の例に過ぎない。いくつかの実施形態において、ソースマスクは、パックドデータオペレーションマスクレジスタにストアされてよい。いくつかの実施形態において、命令セットの複数の他の命令は、マスクレジスタを示し(例えば、指定する複数のビット又はフィールドを有し)てよく、マスクレジスタ及び/又は内部にストアされたマスクをプレディケートオペランドとして用い、及び/又はパックドデータオペレーションをプレディケートしてよい。
結果パックドデータオペランド314は、命令の実施形態に応答して及び/又はその結果として、デスティネーションストア位置において(例えば、実行ユニット306によって)生成及びストアされてよい。様々な実施形態において、デスティネーションストア位置は、パックドデータレジスタ、メモリ位置、又は他のストア位置であってよい。結果パックドデータオペランドは、複数の(例えば、任意に少なくとも4つの)結果データエレメントを含んでよい。例えば、結果パックドデータは、第1のソースパックドデータオペランドのデータエレメントの数と同数の結果データエレメント、及び/又はソースマスクの同数のマスクエレメントを含んでよい。図示された実施形態において、結果パックドデータは、8つの結果データエレメントを有するが、本発明の範囲はこれに限定されない。各結果データエレメントは、複数のオペランド内の同じ相対的位置にあるソースマスクの異なるマスクエレメントに対応してよい。
8つの結果データエレメントは、(右の)最下位エンド又はビット位置331から(左の)最上位エンド又はビット位置333へと移動する場合に、データエレメント位置0から7を占める。図示された例において、位置3の結果データエレメント(A0)は、マスクされていないマスクエレメントに対応する(例えば、位置3の対応するマスクエレメントは、バイナリの1値を有する)。また、位置3の結果データエレメント(A0)は、最下位のマスクされていない結果データエレメントであり、及び/又は、最下位エンド又はビット位置331に最も近いマスクされていない結果データエレメントである。図示された例において、位置0から2にある最下位3つ(最も右)の結果データエレメントは、各々、マスクアウトされたマスクエレメントに対応する(例えば、位置0から2の対応するマスクエレメントは、バイナリのゼロ値を有する)。位置0から2にある最下位3つのマスクされた結果データエレメントのこのセットは、最下位エンド又はビット位置331と、位置3にある最下位のマスクされていない結果データエレメント(A0)との間にある。332において示されるように、本実施形態において、最も有意性の低いマスクされていない結果データエレメントに先行する複数の最下位のマスクされた結果データエレメントのこのセットにおける結果データエレメントの全ては、変化しない状態にされてよい。例えば、デスティネーションストア位置(例えばレジスタ)の初期又は開始データエレメントは、オペレーション/命令によって変化しない状態にされ、及び/又は更新されない状態にされてよい。例として、デスティネーションストア位置は、最初に、データエレメントR0からR2を最下位3つのデータエレメント位置にストアしてよい。オペレーション/命令の後で、データエレメントR0からR2は、デスティネーションストア位置及び/又は結果パックドデータオペランドの最下位3つのデータエレメント位置にストアされた状態を保ってよい。
いくつかの実施形態において、第1のソースパックドデータオペランドの連続データエレメント335のセットの最下位データエレメントは、最下位のマスクされていない結果データエレメントにストアされてよい。例えば、位置0からのデータエレメント(A0)の値は、結果パックドデータオペランドにおいて、位置3のマスクされていない結果データエレメントにストアされてよい。ソースマスクの位置3にある最下位のマスクされていないマスクエレメントは、結果パックドデータオペランドの位置3にある対応最下位のマスクされていない結果データエレメントを、第1のソースパックドデータオペランドからの最下位ソースデータエレメント(例えばA0)に適したストア位置として選択してよい。
位置4及び5にある結果データエレメントは、(例えば、値0を有する)マスクアウトされたマスクエレメントに対応するマスクされた結果データエレメントである。いくつかの実施形態において、334において示されるように、最も近い下位のマスクされていない結果データエレメントの値(この場合、位置3のデータエレメントA0)は、これを含まないが、次に上位のマスクされていない結果データエレメント(例えば、位置6のデータエレメントA1)まで、位置4及び5にあるこれらの上位のマスクされた結果データエレメントの各々に伝搬され、又は他の方法でストアされてよい。すなわち、いくつかの実施形態において、最も近い下位のマスクされていない結果データエレメントの値は、ゼロ又はそれより多くの上位のマスクされた結果データエレメントのセットにストアされてよい。矢印337は、ストア又は伝搬の方向が、ビットの有意性又は順序が上昇する方向であってよいことを示す。
位置6の結果データエレメントは、マスクされていない結果データエレメントである。いくつかの実施形態において、第1のソースパックドデータオペランドの連続データエレメント335のセットの次に上位のデータエレメントは、位置6のマスクされていない結果データエレメントにストアされてよい。例えば、示されるように、第1のソースパックドデータオペランドの位置1にあるデータエレメント(A1)の値は、位置6のマスクされていない結果データエレメントにストアされてよい。位置1のソースデータエレメント(A1)は、位置0のソースデータエレメント(A0)の後、次に上位の連続ソースデータエレメントである。ソースマスクの位置6にあるマスクされていないマスクエレメントは、位置6の対応するマスクされていない結果データエレメントを次の連続ソースデータエレメント(例えばA1)のストア位置として選択してよい。
位置7にある次の最上位結果データエレメントは、マスクされた結果データエレメントである。いくつかの実施形態において、336において示されるように、最も近い下位のマスクされていない結果データエレメント(この例では、位置6のデータエレメントA1)の値は、位置7にある最上位のマスクされた結果データエレメントに伝搬され又は他の方法でストアされてよい。位置7のマスクされた結果データエレメントは、最上位エンド又はビット位置333と、最上位エンド又はビット位置に最も近いマスクされていない結果データエレメント(例えば位置6のA1)との間にある、ゼロ又はそれより多くのマスクされた結果データエレメント(例えばこの例では、単一のマスクされた結果データエレメント)のセットを表す。示されるように、いくつかの実施形態において、第1のソースパックドデータオペランド310の複数の連続又は近接データエレメント335のセットは、ソースマスク316の複数の対応するマスクされていないエレメントによって選択される結果パックドデータオペランド314の潜在的に非連続又は疎なマスクされていない結果データエレメントの組に「拡張」されてよい。ソースマスク316の複数のマスクされていないエレメントは、第1のソースパックドデータオペランド310の近接する昇順の連続データエレメント335によって置換される複数の対応するマスクされていない結果データエレメントを選択してよい。さらに、複数の最も近い下位のマスクされていない結果データエレメントの値は、複数の隣接上位のマスクされた結果データエレメントに伝搬され、又は他の方法でストアされてよい。有利には、オペレーション及び/又は命令は、これらのマスクされた結果データエレメントをゼロにすること、又はこれらを変化しない状態のままにすることに限定されるものではなく、むしろ、先行する複数のマスクされていない結果データエレメントの値は、内部に伝搬され、又は他の方法でストアされてよい。
命令は、複数の連続又は近接ソースデータエレメントを、同じサイズの結果パックドデータオペランドの潜在的に非連続な複数のマスクされていない結果データエレメントの組にストアするので、全てのソースデータエレメントは、結果パックドデータオペランド以下の大きさの単一のソースパックドデータオペランド内に含まれてよいことに留意されたい。これは、複数のソースデータエレメントの全てがメモリからの単一ロードオペレーションでロードされることを可能としてよい。対照的に、集合タイプのオペレーションは、潜在的に異なるセグメント、メモリページ等にあり得る複数の非連続メモリ位置から、複数のデータエレメントを集める。
このような集合タイプのオペレーションにより、ページフォルトが発生する傾向又はリスクがより大きく、これらのフォルトを処理する実装オーバヘッドを伴う傾向がある。しかしながら、いくつかの実施形態において、全てのソースデータエレメントは単一ソースパックドデータオペランド内に含まれてよいので、このようなページフォルトは、本明細書において開示される複数の命令の実施形態にとっては問題とはならないことがある。
マスクされた連続ソースエレメントのストア及び伝搬命令の特定の実施形態の例のためのVEXPANDPROPという名称の疑似コードが、以下列挙される。疑似コードにおいて、MASKはソースマスク(例えばソースマスク316)である。SRCは、デスティネーションにストア又は伝搬される複数の連続エレメントを有するソースパックドデータオペランド(例えばオペランド310)である。DSTは、結果パックドデータオペランド(例えばオペランド314)をストア可能なデスティネーションである。様々な実施形態において、SRC及びDSTの各々は、128ビット(例えばxmmレジスタ)、256ビット(例えばymmレジスタ)、又は512ビット(例えばzmmレジスタ)であってよいが、本発明の範囲はこれに限定されない。複数の代替的な実施形態において、他のサイズのレジスタが用いられてよく、及び/又は、複数のソースオペランドの1つ又は複数は、パックドデータレジスタの代わりに、メモリ位置又は他のストア位置からとられてよい。さらに、他の実施形態において、ソースオペランドは、任意にかつ黙示的に、デスティネーションオペランドとして再利用されてよい。疑似コードにおいて、「i」は、複数のオペランド内の位置カウンタであり、「i++」は、「i」のインクリメント(すなわち、i=i+1)を意味し、「n」は、インクリメントされる変数であり、「n++」は、「n」のインクリメント(すなわち、n=n+1)を意味し、VLは、SRC内のデータエレメントの数である。データは、いくつかの例を挙げると、バイト、ワード、ダブルワード、クワッドワード、単精度又は倍精度であってよい。
この疑似コードは、本実施形態の命令について、第1のマスクされていないエレメントに先行するDSTにおける複数のマスクされた結果データエレメントの最下位セットが、DSTにおいて変化しない状態にされてよいことを示す。また、パラメータnはゼロで始まり、マスクされていないマスクエレメントに直面する度に1だけインクリメントされるので、パラメータnは、複数のマスクされていない結果データエレメントの組にストアされる連続最下位データエレメントを、SRC(例えばSRC[n])から選択する。また、nの値は複数のマスクされたマスクエレメントに対してインクリメントされないので、複数の下位のマスクされていない結果エレメントの値は、複数の上位のマスクされた結果エレメントにストアされてよい。
図4は、命令の実施形態に応答して実行可能なマスクされた連続ソースエレメントのストア及び伝搬オペレーション440の、複数の最下位のマスクされたエレメントが最上位エレメントからストアされる実施形態を示すブロック図である。本実施形態において、オペレーションは、第2のソースパックドデータオペランド412の最上位データエレメントの値(例えばX7)を、結果パックドデータオペランド414のゼロ又はそれより多くの(例えば、図示された例においては、任意に3つの)最下位のマスクされた結果データエレメント432のセットにストアする。図において、結果パックドデータオペランドの最も有意性の低いもしくは最下位エンド又はビット位置431は、向かって右に示され、結果パックドデータオペランドの最も有意性の高いもしくは最上位エンド又はビット位置433は、向かって左に示される。
命令は、第1のソースパックドデータオペランド410を指定し又は他の方法で示してよく、ソースマスク416を指定し又は他の方法で示してよい。第1のソースパックドデータオペランド及びソースマスクは、任意に、(例えば図3で)前述された特性及びバリエーションのいずれかを有してよい。
命令は、第2のソースパックドデータオペランド412を指定し又は他の方法で示してよい。本実施形態において、第2のソースパックドデータオペランドは、単一の最上位データエレメント(例えばX7)を提供し、その値は、結果パックドデータオペランド414のゼロ又はそれより多くの(例えば、図示された例においては3つの)最下位のマスクされた結果データエレメント432のために(例えば、そこにストアされるために)用いられてよい。さらに後述されるように、第2のソースパックドデータオペランドの最上位位置に単一のデータエレメント(例えばX7)を提供することは、特定の実装(例えば、インクリメントループをベクトル化する場合)に対するアルゴリズムの観点から、利点を提供することができる。例えば、最上位データエレメント(例えばX7)は、ループ(例えばベクトル量)の複数の前のイテレーションのセットのうち、直前のイテレーションの値を表してよく、複数のイテレーションのセットのうち次のイテレーションに対する入力値として用いられてよい。これは、複数のループイテレーションの次のセットを準備するためのオーバヘッド低減の助けとなり得る。しかしながら、本発明の範囲は、このような実装又は利点に限定されるものではない。
結果パックドデータオペランド414は、命令の実施形態に応答して及び/又はその結果として、デスティネーションストア位置において(例えば、実行ユニット406によって)生成及びストアされてよい。デスティネーションストア位置は、任意に、(例えば図3で)前述された特性及びバリエーションのいずれかを有してよい。後述される違いの他に、結果パックドデータオペランド414は、(例えば図3で)前述された特性及びバリエーションのいずれかをさらに有してよい。
図示された実施形態の例において、位置0から2にある最下位3つ(最も右)の結果データエレメントは、各々、マスクアウトされたマスクエレメントに対応する(例えば、位置0から2のマスクエレメントは、バイナリのゼロ値を有する)。432において示されるように、位置0から2にあるこれら最下位3つのマスクされた結果データエレメントは、最下位エンド又はビット位置431と、位置3にある最下位のマスクされていない結果データエレメント(A0)との間にある。本実施形態において、第2のソースパックドデータオペランド412の単一の最上位データエレメント(X7)の値は、結果パックドデータの最下位のマスクされていない結果データエレメント(例えばこの場合、位置3のA0)に先行する全ての最下位3つのマスクアウト結果データエレメント432にストアされる。示されるように、結果パックドデータオペランド414の残りは、図3の結果パックドデータオペランド314と同様又は同じであってよい。
上位ソースエレメントから開始するマスクされた連続ソースエレメントのストア及び伝搬命令の特定の実施形態の例のための、名称をVEXPANDPROPHIGHとする疑似コードが、以下列挙される。SRC1は、DSTにおける結果パックドデータオペランドのゼロ又はそれより多くの最下位のマスクされたエレメントのセットにストアされる、(例えば位置VL−1において)単一の最上位データエレメントを有するソースパックドデータオペランド(例えばオペランド412)である。SRC2は、デスティネーションにストア又は伝搬される複数の連続エレメントを有するソースパックドデータオペランド(例えばオペランド410)である。tmp_valは、一時的な値又は変数である。
この疑似コードは、本実施形態の命令に対して、DSTにおけるゼロ又はそれより多くのマスクされた結果データエレメントの最下位セットが、SRC1の最上位データエレメントをストアしてよいことを示す。また、nは、満たされたマスクされていないマスクエレメントに直面する度にインクリメントされ、かつ、nは、SRC2(例えばSRC2[n])から次のデータエレメントを選択するために用いられるので、組の各マスクされていない結果データエレメントは、SRC2からそれぞれの連続ソースデータエレメントをストアしてよい。また、nの値は、複数のマスクされたマスクエレメントに直面した場合にはインクリメントされないので、複数の下位のマスクされていない結果エレメントの値は、次のマスクされていない結果データエレメントまで(これを含まないが)、複数の上位のマスクされた結果エレメントに伝搬又はストアされてよい。
図5は、命令の実施形態に応答して実行可能なマスクされた連続ソースエレメント反転及び後方ストア及び伝搬オペレーション550の、複数の最上位のマスクされたエレメントが最下位エレメントからストアされる実施形態を示すブロック図である。本実施形態において、第2のソースパックドデータオペランド512の最下位データエレメント(例えばX0)の値は、最上位のマスクされていない結果データエレメント(例えば、図示された例においては、位置6のA0)に先行するゼロ又はそれより多くの(例えば、図示された例においては、任意に1つの)最上位のマスクされた結果データエレメント554のセットの値にストアされてよい。本実施形態において、伝搬は、ビットの有意性又は順序の降順となる「反転」方向である。また、本実施形態は、第1のソースパックドデータオペランド510の複数のデータエレメントのビットの有意性又は順序が結果パックドデータオペランド514と逆又は後方であるという点で「後方」である。図において、結果パックドデータオペランドの最も有意性の低いもしくは最下位エンド又はビット位置531は、向かって右に示され、結果パックドデータオペランドの最も有意性の高いもしくは最上位エンド又はビット位置533は、向かって左に示される。
命令は、第1のソースパックドデータオペランド510及びソースマスク516を指定し又は他の方法で示してよい。第1のソースパックドデータオペランド及びソースマスクは、任意に、(例えば図3−4で)前述された特性及びバリエーションのいずれかを有してよい。
命令は、第2のソースパックドデータオペランド512をさらに指定又は他の方法で示してよい。本実施形態において、第2のソースパックドデータオペランドは、単一の最下位データエレメント(例えばX0)を提供する。最下位データエレメント(X0)の値は、結果パックドデータオペランド514におけるゼロ又はそれより多くの(例えば、図示された例においては1つの)最上位のマスクされた結果データエレメント554のセットのために(例えば、これにストアされるために)用いられてよい。さらに後述されるように、パックドデータオペランドの最下位位置に単一のデータエレメント(例えばX0)を提供することは、特定の実装(例えば、デクリメント又は後方カウントループをベクトル化する場合)に対するアルゴリズムの観点から、利点を提供することができる。例えば、最下位データエレメント(例えばX0)は、複数のデクリメントイテレーションの前のセットの間に生成された最後の値を表してよく、これは、複数のデクリメントイテレーションの新たなセットに対する入力値として用いられてよい。しかしながら、本発明の範囲は、このような実装又は利点に限定されるものではない。他に、第2のソースパックドデータオペランドは、任意に、前述された特性及びバリエーションのいずれかを有してよい。
結果パックドデータオペランド514は、命令の実施形態に応答して及び/又はその結果として、デスティネーションストア位置において(例えば、実行ユニット506によって)生成及びストアされてよい。デスティネーションストア位置は、任意に、(例えば図3−4で)前述された特性及びバリエーションのいずれかを有してよい。第2のソースパックドデータオペランドの最下位データエレメント(例えばX0)を用いること及び反転順序態様のような、後述される違いの他に、結果パックドデータオペランド514は、任意に、(例えば図3−4で)前述された特性及びバリエーションのいずれかを有してよい。
図示された実施形態の例において、位置7の最上位結果データエレメントは、マスクされた結果データエレメントである。この最上位のマスクされた結果データエレメントは、最上位エンド又はビット位置533と最上位のマスクされていない結果データエレメント(例えばこの例では、位置6のA0)との間にある。本実施形態において、最上位のマスクされた結果データエレメントは、第2のソースパックドデータオペランドの最下位データエレメント(例えばX0)の値をストアする。
位置6にある次の最上位結果データエレメントは、最上位のマスクされていない結果データエレメントである。示されるように、位置6にある最上位のマスクされていない結果データエレメントは第1のソースパックドデータオペランド510の複数の連続最下位データエレメント535のセットの最下位ソースデータエレメント(例えば、位置0のA0)の値をストアしてよい。ソース及び結果データエレメントのビット順序又は有意性は、本実施形態において、後方に向かう又は反転される。一例として、これは、インクリメント位置n(すなわちn=n+1)によるデクリメントループカウンタ(すなわち、i=i−1)を伴う実装(例えば、ループのベクトル化)において用いられてよい。この場合、連続ソースデータエレメント(例えばSRC[n])の読み出しは、昇順又は順方向順序で進み、結果パックドデータオペランド(例えばDST[i])への複数の結果エレメントのストアは、後方逆順序で進む。図示された例において、位置4及び5にある次に下位の2つの結果データエレメントは、マスクされた結果データエレメントである。示されるように、いくつかの実施形態において、最も近い上位のマスクされていない結果データエレメント(例えばこの例では、位置6のA0)の値は、位置4及び5にあるこれらの下位のマスクされた結果データエレメントに伝搬され又は他の方法でストアされてよい。本実施形態において、伝搬は、上位のマスクされていない結果データエレメントから1つ又は複数の(例えばこの例では、任意に2つの)下位のマスクされた結果データエレメントに行われる。矢印537は、伝搬又はストアの方向が、降順のビットの有意性又は順序であることを示す。方向は、図3−4の実施形態に対して反転又は逆であることに留意されたい。
位置3にある次に下位の結果データエレメントは、マスクされていない結果データエレメントである。位置3のマスクされていない結果データエレメントは、第1のソースパックドデータオペランドの複数の連続最下位データエレメント535のセットの次に上位の連続ソースデータエレメント(例えば、位置1のA1)をストアする。位置1のデータエレメントA1は、第1のソースパックドデータオペランドにわたって下位から上位位置へと移動する場合に、位置0にあるデータエレメントA0の後の次の連続データエレメントである。ソースマスクの位置3のマスクされていないマスクエレメントは、結果パックドデータオペランドの位置3にある対応するマスクされていない結果データエレメントを、次の連続ソースデータエレメント(例えばA1)の適したストア位置として、有効に選択してよい。図示された例において、位置0から2にある最下位3つの結果データエレメントは、マスクされた結果データエレメントのセットである。示されるように、位置0から2にある最下位のマスクされた結果データエレメントは、各々、最も近い上位のマスクされていない結果データエレメント(例えば、位置3のA1)の値をストアする。
名称をVEXPANDPROPREVBWLOWとする下位エレメント命令から開始するマスクされた連続ソースエレメントの反転及び後方ストア及び伝搬の特定の実施形態の例の疑似コードが、以下列挙される。SRC1は、結果パックドデータオペランドのゼロ又はそれより多くの最上位のマスクされたエレメントのセットにストアされる単一の最下位データエレメントを有するソースパックドデータオペランド(例えばオペランド512)である。SRC2は、デスティネーションにストア又は伝搬される複数の連続エレメントを有するソースパックドデータオペランド(例えばオペランド510)である。コードにおいて、「i−−」は、デクリメント(例えば、i=i−1)を意味し、i>=0条件は、「i」がゼロより大きい又はこれに等しいことである。
この疑似コードは、本実施形態の命令がSRC1の最下位データエレメントをゼロ又はそれより多くの最上位のマスクされた結果データエレメントのセットにストアすることを示す。SRC2の最下位の連続データエレメントのセットの最下位データエレメントは、最上位のマスクされていない結果データエレメントにストアされる。複数の上位のマスクされていない結果データエレメントは、複数の下位のマスクされた結果データエレメントに伝搬又はストアされる。
図6は、命令の実施形態に応答して実行可能なマスクされた連続ソースエレメント反転ストア及び伝搬オペレーション660の、複数の最上位のマスクされたエレメントが最下位エレメントからストアされる実施形態を示すブロック図である。本実施形態において、第2のソースパックドデータオペランド612の最下位データエレメント(例えばX0)の値は、最上位のマスクされていない結果データエレメント(例えば、図示された例においては、位置6のA7)に先行するゼロ又はそれより多くの(例えば、図示された例においては、任意に1つの)最上位のマスクされた結果データエレメント654のセットの値にストアされてよい。図において、結果パックドデータオペランドの最も有意性の低いもしくは最下位エンド又はビット位置631は、向かって右に示され、結果パックドデータオペランドの最も有意性の高いもしくは最上位エンド又はビット位置633は、向かって左に示される。
命令は、第1のソースパックドデータオペランド610及びソースマスク616を指定し又は他の方法で示してよい。第1のソースパックドデータオペランド及びソースマスクは、任意に、(例えば図3−5で)前述された特性及びバリエーションのいずれかを有してよい。
命令は、第2のソースパックドデータオペランド612をさらに指定又は他の方法で示してよい。本実施形態において、第2のソースパックドデータオペランドは、単一の最下位データエレメント(例えばX0)を提供する。最下位データエレメント(X0)の値は、結果パックドデータオペランド614におけるゼロ又はそれより多くの(例えば、図示された例においては1つの)最上位のマスクされた結果データエレメント654のセットのために(例えば、これにストアされるために)用いられてよい。第2のソースパックドデータオペランドは、他の方法で任意に、(例えば図4−5で)前述された特性及びバリエーションのいずれかを有してよい。
結果パックドデータオペランド614は、命令の実施形態に応答して及び/又はその結果として、デスティネーションストア位置において(例えば、実行ユニット606によって)生成及びストアされてよい。デスティネーションストア位置は、任意に、(例えば図3−5で)前述された特性及びバリエーションのいずれかを有してよい。第2のソースパックドデータオペランドの最下位データエレメント(X0)を用いること及び反転順序態様のような、後述される違いの他に、結果パックドデータオペランド614は、(例えば図3−5で)前述された特性及びバリエーションのいずれかをさらに有してよい。
図示された実施形態の例において、位置7の最上位結果データエレメントは、最上位エンド又はビット位置633と最上位のマスクされていない結果データエレメント(例えばこの例では、位置6のA7)との間にあるマスクされた結果データエレメントである。本実施形態において、最上位のマスクされた結果データエレメントは、第2のソースパックドデータオペランド612の最下位データエレメント(例えばX0)の値をストアする。位置6にある次に上位の結果データエレメントは、マスクされていない結果データエレメントである。示されるように、位置6のマスクされていない結果データエレメントは、第1のソースパックドデータオペランド610の複数の連続最上位データエレメント652のセットの最上位データエレメント(例えば、位置7のA7)の値をストアしてよい。図示された例において、位置4及び5にある次に下位の2つの結果データエレメントは、マスクされた結果データエレメントである。示されるように、いくつかの実施形態において、最も近い上位のマスクされていない結果データエレメント(例えばこの例では、位置6のA7)の値は、これらの下位のマスクされた結果データエレメントに伝搬又は他の方法でストアされてよい。本実施形態において、伝搬は、上位のマスクされていない結果データエレメントから1つ又は複数の(例えばこの例では、任意に2つの)下位のマスクされた結果データエレメントに行われる。矢印637は、伝搬又はストアの方向を示す。方向は、図3−4の実施形態の方向から反転していることに留意されたい。
位置3にある次に下位の結果データエレメントは、マスクされていない結果データエレメントである。位置3のマスクされていない結果データエレメントは、第1のソースパックドデータオペランドの複数の連続最上位データエレメント652のセットの次に下位の連続ソースデータエレメント(例えば、位置6のA6)をストアする。図示された例において、位置0から2にある最下位3つの結果データエレメント658は、マスクされた結果データエレメントのセットである。示されるように、位置0から2にある最下位のマスクされた結果データエレメントは、各々、最も近い上位のマスクされていない結果データエレメント(例えば、位置3のA6)の値をストアしてよい。
名称をVEXPANDPROPREVLOWとする下位エレメント命令から開始するマスクされた連続ソースエレメントの反転ストア及び伝搬の特定の実施形態の例の疑似コードが、以下列挙される。SRC1は、結果パックドデータオペランドのゼロ又はそれより多くの最上位のマスクされたエレメントのセットにストアされる単一の最下位データエレメントを有するソースパックドデータオペランド(例えばオペランド612)である。SRC2は、デスティネーションにストア又は伝搬される複数の連続エレメントを有するソースパックドデータオペランド(例えばオペランド610)である。「n−−」は、「n」のデクリメント(すなわち、n=n−1)を意味する。
図4−6の実施形態を考慮すると、いくつかの実施形態において、複数の命令は、任意に、第2のソースパックドデータオペランド(例えば、412、512、612)のために用いられるレジスタがデスティネーションストア位置としても用いられることを、明示的に指定してはいないものの黙示的に示してよいが、これは必須ではない。例として、さらに後述されるように、いくつかの実施形態において、これらの命令は、複数のループのベクトル化に用いられてよい。ループのイテレーションの最初のセットをベクトル化するために用いられる命令の結果は、ループのイテレーションの後のセットをベクトル化するために用いられる命令に対して、連続性を目的に、入力又は開始値として生成及び利用されてよい。レジスタをソースとして、かつ黙示的にデスティネーションとして用いることは、他の別個のレジスタを指定又は利用する必要を回避する助けとなり得る。しかしながら、これは任意であって、必須ではない。
図3−6は、いくつかの例示的な実施形態の例を示す。しかしながら、本発明の範囲はこれらの実施形態のみに限定されるものではない。他の複数の実施形態は、異なる数のデータエレメント、マルチビットマスクエレメントを含んでよく、ソースパックドデータオペランドは、同数のデータエレメントを結果パックドデータオペランド等として有する必要がない。さらに、図4−6は、複数の最下位又は最上位のマスクされた結果データエレメントの値のために用いられる単一のデータエレメント又は値(例えば、X0又はX7)を提供するためのアプローチの例を示す。しかしながら、様々な他の複数の実施形態において、単一のデータエレメント又は値は、パックドデータの中間位置において、汎用レジスタにおいて、メモリ位置において、又は他のストア位置において提供されてよい。単一のデータエレメント又は値が、特定の実装の命令長を過度に増加させないよう十分に小さい場合(例えば、8ビットバイトエレメント又は16ビットワードエレメント)、これは、命令の即値に任意に提供されてよい。
本明細書において開示される複数の命令は、汎用的な命令である。当業者及び本開示の恩恵を有する者であれば、当該命令を用いる様々な異なる態様及び目的を企図しよう。いくつかの実施形態において、複数の命令は、任意に、例えば、スカラ値が条件下でインクリメント又はデクリメントされる計算ループのようなループのベクトル化を容易にするために用いられてよいが、本発明の範囲はこれに限定されない。条件下でインクリメントされるこのようなループの1つの説明例が、以下の疑似コードに示される。
この疑似コードにおいて、xはスカラ値であり、「i」はイテレーションの回数である。記号「i++」は、「i」が1だけインクリメントされる(すなわち、i=i+1)ことを意味する。同様に、記号「n++」は、「n」が1だけインクリメントされる(すなわち、n=n+1)ことを意味する。A[n]は、ベクトル又はアレイのn番目のエレメントである。この例では、計算は、値n、xの値又はA[n]に従属し、特定の実装に応じて、潜在的に/任意に、イテレーションの回数「i」に従属してよい。ループのイテレーションの間、xの値は、これらのイテレーションに対してのみ変更され、当該イテレーションの条件が満たされ、nがインクリメントされることに留意されたい。条件が満たされない場合に、xの値は変更されない。これは、データエレメントの値を結果パックドデータオペランドの1つの位置から他の位置に伝播又はストアすることによって、実装されてよい。
このような特性の適用可能な用途の1つの説明例は、経時的なマルチ状態トリガである。例えば、トリガが起動される(例えば、ボタンが押される)各回が、条件が満たされたことを表してよい。条件が満たされたことは、ソースマスクのマスクされていないビットとして表されてよい。このような場合に、トリガは、その現在状態を新たな状態に変更してよい。これは、次の連続ソースデータエレメントをソースパックドデータオペランドから選択することによって、表されてよい。トリガが再度起動されない(例えば、ボタンが押されない)場合に、条件は再度満たされない(例えば、新たなマスクされていないマスクエレメントによって表されない)。これは、データエレメントの値をマスクされた結果データエレメントに伝播することによって、表されてよい。
1つの課題は、現在、大部分はn及びxの値における複数のイテレーションの間のデータ従属性に起因して、ベクトル化が少しでも可能である場合に、このようなループのベクトル化が、概して困難となる傾向があることである。例えば、データ従属性を解消可能となるように十分に短い命令シーケンスが存在しないことがあり、これは、このようなループをベクトル化するコンパイラによって利用可能である。有利には、本明細書で開示される複数の命令の実施形態は、例えば、上述された疑似コードにおいて示されたループのような複数のループのベクトル化を容易にするために用いられてよい。例えば、複数のイテレーションの条件は、評価されて、vexpandprophigh命令によって示され得るソースマスクを生成するために用いられてよい。例えば、複数のマスクエレメントは、正しいと評価された条件に対してはマスクされず、又は、複数のマスクエレメントは、誤りと評価された条件に対してはマスクされてよい。次に、vexpandprophigh命令は、x値ベクトルを生成するために用いられてよい。これらのx値は、後の計算において用いられてよい。SIMD、ベクトル、又はパックドデータ処理は、x値ベクトルを並列処理するために用いられてよい。
特定の概念をさらに示すべく、どのように上述されたループの例がベクトル化され得るかという疑似コードの以下の例を考慮する。この例では、zmm*は、512ビットのパックドデータレジスタを表し、KLは、ベクトル長をデータエレメントの数で表す。
上述された内容において、第1のvexpandprophigh命令は、zmm3の複数のKLイテレーションのこのセットに対して、「n」値のベクトルを生成するために用いられる。これは、vexpandprophigh命令をベクトル{n0+KL:n0+KL−1:…:n0+2:n0+1}に適用することによってなされる。ここで、n0は、現在のKLイテレーションのセットに先行するKLイテレーションのセットのうち、最後のイテレーションにおけるnの結果値である。vexpandprophigh命令の第2の例は、ソースデータエレメントを拡張し、x値のベクトルを生成するために用いられる。この例では、複数のソースデータエレメントは、メモリ(例えばA[n+1])にある。
さらに例示すべく、ベクトルがループの8回のイテレーション(イテレーション0から7)に用いられる、上述されたループの実装例を考慮する。最初に、複数の条件が評価され、ソースマスク(k1)を生成してよく、開始データが、vexpandprophigh命令によって示され得るソースオペランドにおいて確立されてよい。
次に、8つの条件の他のセットが評価され、イテレーション8から15に対する新たなソースマスク(k1)を生成してよい。次の8回のイテレーションに対する開始データの新たなセットは、新たなソースオペランド(zmm2)にストアされてよい。
この処理は、概して、後のループのイテレーションで繰り返されてよい。
図7は、複数のパックドデータレジスタ708の好適なセットの実施形態の例のブロック図である。複数のパックドデータレジスタは、ZMM0からZMM31とラベリングされる32の512ビットパックドデータレジスタを含む。図示された実施形態において、下位16レジスタの下位256ビット、すなわちZMM0−ZMM15は、YMM0−YMM15とラベリングされたそれぞれの256ビットパックドデータレジスタにおいてエイリアス又はオーバレイされるが、これは必須ではない。同様に、図示された実施形態において、レジスタYMM0−YMM15の下位128ビットは、XMM0−XMM15とラベリングされたそれぞれの128ビットパックドデータレジスタにおいてエイリアス又はオーバレイされるが、これも必須ではない。512ビットレジスタZMM0からZMM31は、512ビットパックドデータ、256ビットパックドデータ、又は128ビットパックドデータを保持するように動作可能である。256ビットレジスタYMM0−YMM15は、256ビットパックドデータ又は128ビットパックドデータを保持するように動作可能である。128ビットレジスタXMM0−XMM15は、128ビットパックドデータを保持するように動作可能である。いくつかの実施形態において、複数のレジスタの各々は、パックド浮動小数点データ又はパックド整数データのいずれかをストアするために用いられてよい。少なくとも8ビットバイトデータ、16ビットワードデータ、32ビットダブルワード、32ビット単精度浮動小数点データ、64ビットクワッドワード、及び64ビット倍精度浮動小数点データを含む、異なるデータエレメントのサイズがサポートされる。複数の代替的な実施形態において、異なる数のレジスタ及び/又は異なるサイズのレジスタが、用いられてよい。さらに他の複数の実施形態において、複数のレジスタは、より小さいレジスタにおけるより大きいレジスタのエイリアスを用いてよく、又は用いなくてよく、及び/又は、浮動小数点データをストアするために用いられてよく、又は用いられなくてよい。
図8は、マスクビットの数がパックドデータ幅及びパックドデータエレメント幅に従うことを示す表890である。128ビット、256ビット、及び512ビットのパックドデータ幅が示されるが、複数の他の幅も適用可能である。8ビットバイト、16ビットワード、32ビットダブルワード(dword)もしくは単精度浮動小数点、及び64ビットクワッドワード(Qword)もしくは倍精度浮動小数点のパックドデータエレメント幅が考慮されるが、複数の他の幅も適用可能である。
図9は、パックドデータオペレーションマスクレジスタ908の好適なセットの実施形態の例のブロック図である。複数のパックドデータオペレーションマスクレジスタの各々は、パックドデータオペレーションマスクをストアするために用いられてよい。図示された実施形態において、セットは、k0からk7とラベリングされた8つのレジスタを含む。複数の代替的な実施形態は、8つより少ないレジスタ(例えば、2、4、6等)、又は8つより多くのレジスタ(例えば、16、32等)のいずれかを含んでよい。図示された実施形態において、複数のレジスタの各々は、64ビットである。複数の代替的な実施形態において、複数のレジスタの幅は、64ビットより広い(例えば、80ビット、128ビット等)、又は64ビットより狭い(例えば、8ビット、16ビット、32ビット等)のいずれかであってよい。複数のレジスタは、複数の周知技術を用いる異なる態様で実装されてよく、いかなる公知の特定のタイプの回路にも限定されるものではない。好適なレジスタの例は、限定されるものではないが、専用物理レジスタ、レジスタリネーミングを用いる動的割り当て物理レジスタ、及びこれらの組み合わせを含む。例として、命令は、3ビット(例えば、3ビットフィールド)を用いて、8つのパックドデータオペレーションマスクレジスタk0からk7のいずれか1つをエンコード又は指定してよい。複数の代替的な実施形態において、より少ない又はより多くのビットのいずれかが、それぞれ、より少ない又はより多くのパックドデータオペレーションマスクレジスタが存在する場合に用いられてよい。いくつかの実施形態において、マスクは、これらレジスタの複数の最下位ビットにストアされてよいが、これは必須ではない。
命令セットは、1つ又は複数の命令フォーマットを含む。所与の命令フォーマットは、様々なフィールド(ビットの数、ビットの位置)を定義し、とりわけ、実行されるオペレーション(オペコード)及びオペレーションが実行されるオペランドを指定する。いくつかの命令フォーマットは、複数の命令テンプレート(又はサブフォーマット)の定義を通して、さらに分解される。例えば、所与の命令フォーマットの複数の命令テンプレートは、命令フォーマットフィールドの複数の異なるサブセットを有するように定義されてよく(含まれる複数のフィールドは、典型的には同じ順序だが、含まれるフィールドがより少ないので、少なくともいくつかは異なるビット位置を有する)、及び/又は、異なるように解釈される所与のフィールドを有するように定義されてよい。そこで、ISAの各命令は、所与の命令フォーマットを用いて(かつ、定義された場合には、命令フォーマットの命令テンプレートの所与の1つで)表され、オペレーション及び複数のオペランドを指定する複数のフィールドを含む。例えば、例示的なADD命令は、具体的なオペコードと、当該オペコードを指定するオペコードフィールド及び複数のオペランド(ソース1/デスティネーション及びソース2)を選択する複数のオペランドフィールドを含む命令フォーマットとを有し、このADD命令の命令ストリームにおける発生は、具体的な複数のオペランドを選択する複数のオペランドフィールドにおいて具体的なコンテンツを有する。高度ベクトル拡張(AVX)(AVX1及びAVX2)と称され、複数のベクトル拡張(VEX)コーディングスキームを用いる複数のSIMD拡張のセットが、リリース及び/又は公開されている(例えば、2011年10月版インテル(登録商標)64及びIA−32アーキテクチャソフトウェア開発者マニュアル、2011年6月版インテル(登録商標)高度ベクトル拡張プログラミングリファレンスを参照)。
[例示的な命令フォーマット]
本明細書で説明される命令の複数の実施形態は、複数の異なるフォーマットで具現化されてよい。さらに、例示的なシステム、アーキテクチャ、及びパイプラインが、以下詳述される。命令の複数の実施形態は、このようなシステム、アーキテクチャ、及びパイプライン上で実行されてよいが、詳述された内容に限定されるものではない。
[汎用ベクトル向け命令フォーマット]
ベクトル向け命令フォーマットは、(例えば、ベクトルオペレーションに固有の特定のフィールドが存在する)ベクトル命令に適した命令フォーマットである。ベクトル向け命令フォーマットを通してベクトル及びスカラオペレーションの両方がサポートされる複数の実施形態が説明されるが、複数の代替的な実施形態は、ベクトルオペレーションのベクトル向け命令フォーマットのみを用いる。
図10A−10Bは、本発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びその命令テンプレートを示すブロック図である。図10Aは、本発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びそのクラスA命令テンプレートを示すブロック図である。図10Bは、本発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びそのクラスB命令テンプレートを示すブロック図である。具体的には、汎用ベクトル向け命令フォーマット1000に対してクラスA及びクラスB命令テンプレートが定義され、その両方が非メモリアクセス1005命令テンプレート及びメモリアクセス1020命令テンプレートを含む。ベクトル向け命令フォーマットに関して汎用という用語は、あらゆる具体的な命令セットに拘束されない命令フォーマットを指す。
ベクトル向け命令フォーマットが、以下の32ビット(4バイト)もしくは64ビット(8バイト)データエレメント幅(又はサイズ)(そこで、64バイトベクトルは、16ダブルワードサイズエレメントあるいは8クワッドワードサイズエレメントのいずれかから構成される)を有する64バイトベクトルオペランド長(又はサイズ)、16ビット(2バイト)もしくは8ビット(1バイト)データエレメント幅(又はサイズ)を有する64バイトベクトルオペランド長(又はサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、もしくは8ビット(1バイト)データエレメント幅(又はサイズ)を有する32バイトベクトルオペランド長(又はサイズ)、及び32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、もしくは8ビット(1バイト)データエレメント幅(又はサイズ)を有する16バイトベクトルオペランド長(又はサイズ)をサポートする本発明の複数の実施形態が説明されるが、複数の代替的な実施形態は、より大きい、より小さい、又は異なるデータエレメント幅(例えば、128ビット(16バイト)データエレメント幅)を有する、より大きい、より小さい及び/又は異なるベクトルオペランドサイズ(例えば、256バイトベクトルオペランド)をサポートしてよい。
図10AのクラスA命令テンプレートは、1)非メモリアクセス1005命令テンプレート内に、非メモリアクセス、フルラウンド制御タイプオペレーション1010命令テンプレートと、非メモリアクセス、データ変換タイプオペレーション1015命令テンプレートとが示されるもの、2)メモリアクセス1020命令テンプレート内に、メモリアクセス、一時的1025命令テンプレートと、メモリアクセス、非一時的1030命令テンプレートとが示されるものを含む。図10BのクラスB命令テンプレートは、1)非メモリアクセス1005命令テンプレート内に、非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション1012命令テンプレートと、非メモリアクセス、ライトマスク制御、vsizeタイプオペレーション1017命令テンプレートとが示されるもの、2)メモリアクセス1020命令テンプレート内に、メモリアクセス、ライトマスク制御1027命令テンプレートが示されるものを含む。
汎用ベクトル向け命令フォーマット1000は、図10A−10Bに示される順序で以下列挙される以下のフィールドを含む。
フォーマットフィールド1040−このフィールドの特定値(命令フォーマット識別値)は、ベクトル向け命令フォーマットを一意に特定し、そこで、複数の命令ストリームにおいて、ベクトル向け命令フォーマットで命令が発生する。このように、このフィールドは、汎用ベクトル向け命令フォーマットのみを有する命令セットには必要とされないという意味で任意である。
ベースオペレーションフィールド1042−そのコンテンツは、複数の異なるベースオペレーションを区別する。
レジスタインデックスフィールド1044−そのコンテンツは、ソース及びデスティネーションオペランドがレジスタ又はメモリにある場合に、直接又はアドレス生成を通して、これらの位置を指定する。これらは、N個のレジスタをPxQ(例えば32x512、16x128、32x1024、64x1024)個のレジスタファイルから選択するのに十分なビットの数を含む。一実施形態において、Nは最大で3つのソース及び1つのデスティネーションレジスタであってよいが、複数の代替的な実施形態は、より多くの又はより少ないソース及びデスティネーションレジスタをサポートしてよい(例えば、最大で2つのソースであって、これらのソースの1つがデスティネーションとしても動作するソースをサポートしてよく、最大で3つのソースであって、これらのソースの1つがデスティネーションとしても動作するソースをサポートしてよく、最大で2つのソース及び1つのデスティネーションをサポートしてよい)。
修飾子フィールド1046−このコンテンツは、メモリアクセスをそうでないものから、すなわち、非メモリアクセス1005命令テンプレートとメモリアクセス1020命令テンプレートとの間で指定する汎用ベクトル命令フォーマットでの命令の発生を区別する。複数のメモリアクセスオペレーションは、メモリ階層への読み出し及び/又は書き込みを行う(いくつかの場合において、複数のレジスタにおける値を用いてソース及び/又はデスティネーションアドレスを指定する)が、非メモリアクセスオペレーションは、これを行わない(例えば、ソース及びデスティネーションはレジスタである)。一実施形態において、このフィールドは3つの異なる態様の間でさらに選択を行い、メモリアドレス算出を実行するが、複数の代替的な実施形態は、メモリアドレス算出を実行すべく、より多くの、より少ない、又は異なる態様をサポートしてよい。
増加オペレーションフィールド1050−このコンテンツは、様々な異なるオペレーションのどの1つがベースオペレーションに加えて実行されるかを区別する。このフィールドは、コンテキスト固有ではない。本発明の一実施形態において、このフィールドは、クラスフィールド1068、アルファフィールド1052、及びベータフィールド1054に分割される。増加オペレーションフィールド1050は、複数のオペレーションの複数の共通グループが、2つ、3つ、又は4つの命令ではなく、単一の命令で実行されることを可能とする。
スケールフィールド1060−このコンテンツは、メモリアドレス生成のための(例えば、2scale*index+baseを用いるアドレス生成のための)インデックスフィールドのコンテンツをスケーリングすることを可能とする。
変位フィールド1062A−このコンテンツは、(例えば、2scale*index+base+displacementを用いるアドレス生成のための)メモリアドレス生成の一部として用いられる。
変位係数フィールド1062B(なお、変位フィールド1062Aを変位係数フィールド1062Bに直接並置することは、一方又は他方が用いられることを示す)−このコンテンツは、アドレス生成の一部として用いられる。これは、メモリアクセスのサイズ(N)によってスケーリングされる変位係数を指定する。ここで、Nは、(例えば、2scale*index+base+scaled displacementを用いるアドレス生成のための)メモリアクセスにおけるバイト数である。複数の冗長下位ビットは無視され、従って、変位係数フィールドのコンテンツは、有効アドレス算出に用いられる最終的な変位を生成すべく、メモリオペランドの合計サイズ(N)によって乗算される。nの値は、フルオペコードフィールド1074(本明細書において後述)及びデータ操作フィールド1054Cに基づいて、ランタイムにおいて、プロセッサハードウェアによって決定される。変位フィールド1062A及び変位係数フィールド1062Bは、これらが非メモリアクセス1005命令テンプレートに用いられず、及び/又は、複数の異なる実施形態が1つだけを実装してよく、又は2つのうち1つも実装しなくてよいという意味で任意である。
データエレメント幅フィールド1064−このコンテンツは、(いくつかの実施形態においては全ての命令に対して、複数の他の実施形態においては、のいくつかの命令のみに対して)多数のデータエレメント幅のどの1つが用いられるかを区別する。このフィールドは、オペコードのいくつかの態様を用いて1つだけのデータエレメント幅がサポートされる及び/又は複数のデータエレメント幅がサポートされる場合には必要とされないという意味で任意である。
ライトマスクフィールド1070−このコンテンツは、データエレメント位置毎に、デスティネーションベクトルオペランドのデータエレメント位置がベースオペレーション及び増加オペレーションの結果を反映しているか否かを制御する。複数のクラスA命令テンプレートは、マージライトマスクをサポートし、複数のクラスB命令テンプレートは、マージライトマスク及びゼロライトマスクの両方をサポートする。マージの場合、複数のベクトルマスクは、デスティネーションにおける複数のエレメントの任意のセットが、(ベースオペレーション及び増加オペレーションによって指定される)任意のオペレーションの実行中の更新から保護されることを可能とし、他の一実施形態においては、対応マスクビットが0を有するデスティネーションの各エレメントの古い値を保持する。対照的に、ゼロにする場合、複数のベクトルマスクは、デスティネーションにおける複数のエレメントの任意のセットが(ベースオペレーション及び増加オペレーションによって指定される)任意のオペレーションの実行中にゼロにされることを可能とし、一実施形態において、デスティネーションのエレメントは、対応マスクビットが0値を有する場合に0にセットされる。この機能のサブセットは、実行されているオペレーションのベクトル長を制御する能力である(すなわち、複数のエレメントのスパンが、最初から最後のものに変化する)。しかしながら、変化させられる複数のエレメントは、連続的であることを必要としない。そこで、ライトマスクフィールド1070は、ロード、ストア、算術、論理等を含む部分的なベクトルオペレーションを可能とする。ライトマスクフィールド1070のコンテンツが用いられるライトマスクを含む多数のライトマスクレジスタの1つを選択する(かつ、そこで、ライトマスクフィールド1070のコンテンツが実行されるマスクを間接的に特定する)本発明の複数の実施形態が説明されるが、複数の代替的な実施形態は、ライトマスクフィールド1070のコンテンツが、代わりに又は追加的に、実行されるマスクを直接指定することを可能とする。
即値フィールド1072−このコンテンツは、即値の仕様を可能とする。このフィールドは、即値をサポートしない汎用ベクトル向けフォーマットの実装には存在せず、即値を用いない命令には存在しないという意味で任意である。
クラスフィールド1068−このコンテンツは、複数の命令の異なるクラスの間で区別する。図10A−Bを参照すると、このフィールドのコンテンツは、クラスA命令とクラスB命令との間で選択する。図10A−Bにおいて、複数の角が丸い四角は、特定値がフィールドに存在することを示すために用いられる(例えば、図10A−Bのそれぞれのクラスフィールド1068に対して、クラスA1068A及びクラスB1068B)。
[クラスA命令テンプレート]
クラスA非メモリアクセス1005命令テンプレートの場合、アルファフィールド1052は、RSフィールド1052Aと解釈され、そのコンテンツは、異なる増加オペレーションタイプのどの1つが実行されるかを区別し(例えば、ラウンド1052A.1及びデータ変換1052A.2は、非メモリアクセスラウンドタイプオペレーション1010及び非メモリアクセスデータ変換タイプオペレーション1015命令テンプレートにそれぞれ指定され)、ベータフィールド1054は、指定されるタイプの複数のオペレーションのいずれが実行されるかを区別する。非メモリアクセス1005命令テンプレートにおいて、スケールフィールド1060、変位フィールド1062A、及び変位スケールフィールド1062Bは、存在しない。
[非メモリアクセス命令テンプレート−フルラウンド制御タイプオペレーション]
非メモリアクセスフルラウンド制御タイプオペレーション1010命令テンプレートにおいて、ベータフィールド1054は、ラウンド制御フィールド1054Aと解釈され、そのコンテンツは、静的なラウンドを提供する。説明される本発明の複数の実施形態において、ラウンド制御フィールド1054Aは抑制全浮動小数点例外(SAE)フィールド1056及びラウンドオペレーション制御フィールド1058を含むが、複数の代替的な実施形態は、これらの概念の両方を同じフィールドにエンコードすること、又はこれらの概念/フィールドの一方又は他方のみを有することをサポートしてよい(例えば、ラウンドオペレーション制御フィールド1058のみを有してよい)。
SAEフィールド1056−このコンテンツは、例外イベント報告を無効化するか否かを区別する。SAEフィールド1056のコンテンツが、抑制が可能であることを示す場合、所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外処理部も起動しない。
ラウンドオペレーション制御フィールド1058−このコンテンツは、複数のラウンドオペレーションのグループ(例えば、切り上げ、切り捨て、0へのラウンド及び近似値へのラウンド)のどの1つが実行されるかを区別する。そこで、ラウンドオペレーション制御フィールド1058は、命令毎に、ラウンドモードの変更を可能とする。プロセッサが複数のラウンドモードを指定する制御レジスタを含む本発明の一実施形態において、ラウンドオペレーション制御フィールド1050のコンテンツは、当該レジスタ値をオーバライドする。
[非メモリアクセス命令テンプレート−データ変換タイプオペレーション]
非メモリアクセスデータ変換タイプオペレーション1015命令テンプレートにおいて、ベータフィールド1054は、データ変換フィールド1054Bと解釈され、そのコンテンツは、多数のデータ変換(例えば、データ変換、再構成、ブロードキャスト)のどの1つが実行されるかを区別する。
クラスAメモリアクセス1020命令テンプレートの場合、アルファフィールド1052は、追い出し示唆フィールド1052Bと解釈され、そのコンテンツは、複数の追い出し示唆のどの1つが用いられるかを区別する(図10Aにおいて、一時的1052B.1及び非一時的1052B.2はそれぞれ、メモリアクセス、一時的1025命令テンプレート及びメモリアクセス、非一時的1030命令テンプレートに指定される)。ベータフィールド1054は、データ操作フィールド1054Cと解釈され、そのコンテンツは、多数のデータ操作オペレーション(プリミティブとしても知られる)のどの1つが実行されるかを区別する(例えば、操作なし、ブロードキャスト、ソースのアップコンバート、デスティネーションのダウンコンバート)。メモリアクセス1020命令テンプレートは、スケールフィールド1060、及び任意に、変位フィールド1062A又は変位スケールフィールド1062Bを含む。
ベクトルメモリ命令は、変換サポートにより、メモリからのベクトルロード及びメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、複数のベクトルメモリ命令は、ライトマスクとして選択されるベクトルマスクのコンテンツに命令される、実際に転送される複数のエレメントと共に、データエレメント単位の態様で、メモリから/へデータを転送する。
[メモリアクセス命令テンプレート−一時的]
一時的データは、キャッシュから恩恵を享受し得るほどすぐに再利用される可能性が高いデータである。しかしながら、これは示唆であり、異なるプロセッサは、示唆を完全に無視することを含む異なる態様で、これを実装してよい。
[メモリアクセス命令テンプレート−非一時的]
非一時的データは、一次キャッシュにおいてキャッシュからの恩恵を享受するほどすぐに再利用される可能性は低いデータであり、追い出しのプライオリティを付与されなければならない。しかしながら、これは示唆であり、異なるプロセッサは、示唆を完全に無視することを含む異なる態様で、これを実装してよい。
[クラスB命令テンプレート]
クラスB命令テンプレートの場合、アルファフィールド1052は、ライトマスク制御(Z)フィールド1052Cと解釈され、そのコンテンツは、ライトマスクフィールド1070によって制御されるライトマスクがマージ又はゼロにすべきか否かを区別する。
クラスB非メモリアクセス1005命令テンプレートの場合、ベータフィールド1054の一部は、RLフィールド1057Aと解釈され、そのコンテンツは、異なる増加オペレーションタイプのどの1つが実行されるかを区別する(例えば、ラウンド1057A.1及びベクトル長(VSIZE)1057A.2は、それぞれ、非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション1012命令テンプレート及び非メモリアクセス、ライトマスク制御、VSIZEタイプオペレーション1017命令テンプレートに対して指定される)。ベータフィールド1054の残りは、指定されるタイプの複数のオペレーションのいずれが実行されるかを区別する。非メモリアクセス1005命令テンプレートにおいて、スケールフィールド1060、変位フィールド1062A、及び変位スケールフィールド1062Bは、存在しない。
非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション1010命令テンプレートにおいて、ベータフィールド1054の残りはラウンドオペレーションフィールド1059Aと解釈され、例外イベント報告は無効化される(所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外処理部も起動しない)。
ラウンドオペレーション制御フィールド1059A−単にラウンドオペレーション制御フィールド1058として、このコンテンツは、複数のラウンドオペレーションのグループ(例えば、切り上げ、切り捨て、0へのラウンド及び近似値へのラウンド)のどの1つが実行されるかを区別する。そこで、ラウンドオペレーション制御フィールド1059Aは、命令毎に、ラウンドモードの変更を可能とする。プロセッサが複数のラウンドモードを指定する制御レジスタを含む本発明の一実施形態において、ラウンドオペレーション制御フィールド1050のコンテンツは、当該レジスタ値をオーバライドする。
非メモリアクセス、ライトマスク制御、VSIZEタイプオペレーション1017命令テンプレートにおいて、ベータフィールド1054の残りはベクトル長フィールド1059Bと解釈され、そのコンテンツは、多数のデータベクトル長のどの1つが実行されるかを区別する(例えば、128、256又は512バイト)。
クラスBメモリアクセス1020命令テンプレートの場合、ベータフィールド1054の一部はブロードキャストフィールド1057Bと解釈され、そのコンテンツは、ブロードキャストタイプデータ操作オペレーションが実行されるか否かを区別し、ベータフィールド1054の残りは、ベクトル長フィールド1059Bと解釈される。メモリアクセス1020命令テンプレートは、スケールフィールド1060、及び任意に、変位フィールド1062A又は変位スケールフィールド1062Bを含む。
汎用ベクトル向け命令フォーマット1000に関して、フォーマットフィールド1040、ベースオペレーションフィールド1042、及びデータエレメント幅フィールド1064を含むフルオペコードフィールド1074が示される。フルオペコードフィールド1074がこれらのフィールドの全てを含む一実施形態が示されるが、これらの全てをサポートしない複数の実施形態において、フルオペコードフィールド1074は、これらのフィールドの一部のみを含む。フルオペコードフィールド1074は、オペレーションコード(オペコード)を提供する。
増加オペレーションフィールド1050、データエレメント幅フィールド1064、及びライトマスクフィールド1070は、汎用ベクトル向け命令フォーマットにおいて、これらの機能が命令毎に指定されることを可能とする。
ライトマスクフィールド及びデータエレメント幅フィールドの組み合わせは、タイプ別の複数の命令を形成し、これらによれば、マスクは複数の異なるデータエレメント幅に基づいて適用されることが可能となる。
クラスA及びクラスB内で見られる様々な命令テンプレートは、複数の異なる状況において有益である。本発明のいくつかの実施形態において、複数の異なるプロセッサ又はプロセッサ内の複数の異なるコアは、クラスAのみ、クラスBのみ、又は両方のクラスをサポートしてよい。例えば、汎用コンピューティング向けの高性能汎用アウトオブオーダコアは、クラスBのみをサポートしてよく、主にグラフィック及び/又は科学的(スループット)コンピューティング向けのコアは、クラスAのみをサポートしてよく、両方向けのコアは、両方をサポートしてよい(勿論、コアは、両方のクラスからの複数のテンプレート及び命令の何らかの組み合わせを有するが、両方のクラスからの複数のテンプレート及び命令の全てが本発明の範囲内にある訳ではない)。また、単一のプロセッサは、複数のコアを含んでよく、その全ては、同じクラスをサポートし、又はその複数の異なるコアは、異なるクラスをサポートする。例えば、別個のグラフィック及び汎用コアを有するプロセッサにおいて、主にグラフィック及び/又は科学的コンピューティング向けの複数のグラフィックコアの1つは、クラスAのみをサポートしてよく、複数の汎用コアのうちの1つ又は複数は、クラスBのみをサポートする汎用コンピューティング向けのアウトオブオーダ実行及びレジスタリネーミングを伴う高性能汎用コアであってよい。別個のグラフィックコアを有さない他のプロセッサは、クラスA及びクラスBの両方をサポートするもう1つの汎用インオーダ又はアウトオブオーダコアを含んでよい。勿論、1つのクラスからの機能は、本発明の複数の異なる実施形態において、他のクラスに実装されてもよい。高水準言語で記述される複数のプログラムは、1)実行のためにターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、又は2)全クラスの複数の命令の異なる組み合わせを用いて記述される代替的な複数のルーチンを有し、コードを現在実行しているプロセッサによってサポートされる複数の命令に基づいて実行する、複数のルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能な形式にされる(例えば、ジャストインタイムでコンパイルされ、又は静的にコンパイルされる)。
[例示的な特定ベクトル向け命令フォーマット]
図11A−Dは、本発明の複数の実施形態に係る例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図11A−Dは、特定ベクトル向け命令フォーマット1100を示し、これは、複数のフィールドの位置、サイズ、解釈、及び順序、ならびにこれらのフィールドのいくつかの値を指定するという意味で特定的である。特定ベクトル向け命令フォーマット1100は、x86命令セットを拡張するために用いられてよく、そこで、複数のフィールドのいくつかは、既存のx86命令セット及びその拡張(例えばAVX)で用いられたものと同様の又は同じものとなる。このフォーマットは、拡張された既存のx86命令セットのプレフィクスエンコードフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド及び複数の即値フィールドと整合性のある状態を保つ。図11A−Dからの複数のフィールドがマップされる図10A−Bからの複数のフィールドが示される。
本発明の複数の実施形態が、例示目的のため、汎用ベクトル向け命令フォーマット1000に関して特定ベクトル向け命令フォーマット1100を参照して説明されるが、本発明は、特許請求の範囲に記載されたものを除き、特定ベクトル向け命令フォーマット1100に限定されるものではないことを理解されたい。例えば、汎用ベクトル向け命令フォーマット1000は、様々なフィールドに適用可能な様々なサイズを企図し、特定ベクトル向け命令フォーマット1100は、具体的な複数のサイズの複数のフィールドを有するものとして示される。具体例として、データエレメント幅フィールド1064は、特定ベクトル向け命令フォーマット1100の1ビットフィールドとして示されるが、本発明は、これに限定されるものではない(すなわち、汎用ベクトル向け命令フォーマット1000は、データエレメント幅フィールド1064の複数の他のサイズを企図する)。
汎用ベクトル向け命令フォーマット1000は、図11Aに示される順序で、以下に列挙される複数の以下のフィールドを含む。
EVEXプレフィクス(バイト0−3)1102−これは、4バイト形式でエンコードされる。
フォーマットフィールド1040(EVEXバイト0、ビット[7:0])−第1のバイト(EVEXバイト0)は、フォーマットフィールド1040であり、これは、0x62(本発明の一実施形態において、ベクトル向け命令フォーマットを区別するために用いられる固有値)を含む。
第2−第4のバイト(EVEXバイト1−3)は、具体的な機能を提供する多数のビットフィールドを含む。
REXフィールド1105(EVEXバイト1、ビット[7−5])−これは、EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、及び1057BEXバイト1、ビット[5]−B)から構成される。EVEX.R、EVEX.X、及びEVEX.Bビットフィールドは、対応する複数のVEXビットフィールドと同じ機能を提供し、1の補数形式を用いてエンコードされ、すなわち、ZMM0は1111Bとしてエンコードされ、ZMM15は0000Bとしてエンコードされる。当技術分野において公知なように、複数の命令の複数の他のフィールドが複数のレジスタインデックスの下位3ビット(rrr、xxx、及びbbb)をエンコードし、これにより、Rrrr、Xxxx、及びBbbbは、EVEX.R、EVEX.X及びEVEX.Bを加算することによって形成されてよい。
REX'フィールド1010−これは、REX'フィールド1010の第1の部分であり、拡張された32個のレジスタセットの上位16又は下位16のいずれかをエンコードするために用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。本発明の一実施形態において、このビットは、以下に示されるように他の複数のビットと共に、ビット反転フォーマットでストアされることにより、リアルオペコードバイトは62であるが、(後述の)MOD R/MフィールドにおいてMODフィールドの値11を受け付けない(周知のx86の32ビットモードにおける)BOUND命令から区別するが、本発明の複数の代替的な実施形態は、これ及び以下に示される反転フォーマットの他のビットをストアしない。1の値は、下位16個のレジスタをエンコードするために用いられる。換言すると、R'Rrrrは、複数の他のフィールドからのEVEX.R'、EVEX.R、及び他のRRRを組み合わせることによって形成される。
オペコードマップフィールド1115(EVEXバイト1、ビット[3:0]−mmmm)−このコンテンツは、黙示された先頭オペコードバイト(OF、OF38、又はOF3)をエンコードする。
データエレメント幅フィールド1064(EVEXバイト2、ビット[7]−W)−これは、EVEX.Wという表記によって表される。EVEX.Wは、データタイプの粒度(サイズ)を定義するために用いられる(32ビットデータエレメント又は複数の64ビットデータエレメントのいずれか)。
EVEX.vvvv1120(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割は、以下の、1)EVEX.vvvvは、反転(1の補数)形式で指定される第1のソースレジスタオペランドをエンコードし、2つ又はそれより多くのソースオペランドを有する複数の命令に対して有効であり、2)EVEX.vvvvは、特定の複数のベクトルシフトに対して1の補数形式で指定されるデスティネーションレジスタオペランドをエンコードし、又は3)EVEX.vvvvは、いずれのオペランドもエンコードせず、フィールドは予約されて1111bを含まなくてはならないということを含んでよい。そこで、EVEX.vvvvフィールド1120は、反転(1の補数)形式でストアされる第1のソースレジスタ指定子の下位4ビットをエンコードする。命令に応じて、追加の異なるEVEXビットフィールドは、指定子サイズを32個のレジスタに拡張するために用いられる。
EVEX.U1068クラスフィールド(EVEXバイト2、ビット[2]−U)−EVEX.U=0の場合、これは、クラスA又はEVEX.U0を示す。EVEX.U=1の場合、これは、クラスB又はEVEX.U1を示す。
プレフィクスエンコードフィールド1125(EVEXバイト2、ビット[1:0]−pp)−これは、ベースオペレーションフィールドに複数の追加ビットを提供する。EVEXプレフィクスフォーマットの複数のレガシSSE命令に対するサポートを提供することに加えて、これは、SIMDプレフィクスを圧縮するという利益をさらに有する(SIMDプレフィクスを表すためのバイトを必要とするのではなく、EVEXプレフィクスは、2ビットのみを必要とする)。一実施形態において、レガシフォーマット及びEVEXプレフィクスフォーマットの両方のSIMDプレフィクス(66H、F2H、F3H)を用いる複数のレガシSSE命令をサポートするために、これらの複数のレガシSIMDプレフィクスは、SIMDプレフィクスエンコードフィールドにエンコードされ、デコーダのPLAに提供される前に、ランタイムにおいて、レガシSIMDプレフィクスに拡張される(そのためPLAは、これらの複数のレガシ命令のレガシ及びEVEXフォーマットの両方を、変更することなく実行してよい)。より新たな複数の命令は、EVEXプレフィクスエンコードフィールドのコンテンツを、オペコード拡張として直接用いることができたが、複数の特定の実施形態は、整合性に関して同様の態様で拡張するが、これらのレガシSIMDプレフィクスによって指定される異なる複数の意味を可能とする。代替的な実施形態は、2ビットSIMDプレフィクスの複数のエンコードをサポートするPLAを再設計し、そこで、拡張を必要としない。
アルファフィールド1052(EVEXバイト3、ビット[7]−EH。EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask control、及びEVEX.Nとしても知られ、さらにαにより示される)−前述されたように、このフィールドは、コンテキスト固有である。
ベータフィールド1054(EVEXバイト3、ビット[6:4]−SSS。EVEX.s2−0、EVEX.r2−0、EVEX.rrl、EVEX.LL0、EVEX.LLBとしても知られ、さらにβββにより示される)−前述されたように、このフィールドは、コンテキスト固有である。
REX'フィールド1010−これは、REX'フィールドの残りであり、拡張された32個のレジスタセットの上位16又は下位16のいずれかをエンコードするために利用可能なEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]−V')である。このビットは、ビット反転フォーマットでストアされる。1の値は、下位16個のレジスタをエンコードするために用いられる。換言すると、V'VVVVは、EVEX.V、EVEX.vvvvを組み合わせることによって形成される。
ライトマスクフィールド1070(EVEXバイト3、ビット[2:0]−kkk)−このコンテンツは、前述されたように、複数のライトマスクレジスタにおいてレジスタのインデックスを指定する。本発明の一実施形態において、特定値EVEX.kkk=000は、特定の命令のために用いられるライトマスクがないことを示唆する特別な動作を有する(これは、ハードウェアに組み込まれた全てのライトマスク又はマスキングハードウェアを回避するハードウェアを用いることを含む、様々な態様で実装されてよい)。
リアルオペコードフィールド1130(バイト4)−これは、オペコードバイトとしても知られる。オペコードの一部は、このフィールドで指定される。
MOD R/Mフィールド1140(バイト5)は、MODフィールド1142、Regフィールド1144、及びR/Mフィールド1146を含む。前述されたように、MODフィールド1142のコンテンツは、メモリアクセス及び非メモリアクセスオペレーションの間で区別する。Regフィールド1144の役割は、デスティネーションレジスタオペランド又はソースレジスタオペランドのいずれかをエンコードする、もしくはオペコード拡張として扱われ、いずれの命令オペランドをエンコードするためにも用いられないという、2つの状況に要約されてよい。R/Mフィールド1146の役割は、以下のものを含んでよい。すなわち、メモリアドレスを参照する命令オペランドをエンコードする、又はデスティネーションレジスタオペランド又はソースレジスタオペランドのいずれかをエンコードすることである。
スケール、インデックス、ベース(SIB)バイト(バイト6)−前述されたように、スケールフィールド1050のコンテンツは、メモリアドレス生成のために用いられる。SIB.xxx1154及びSIB.bbb1156−これらの複数のフィールドのコンテンツは、複数のレジスタインデックスXxxx及びBbbbに関して前述されている。
変位フィールド1062A(バイト7―10)−MODフィールド1142が10を含む場合、バイト7−10は変位フィールド1062Aであり、これは、レガシ32ビット変位(disp32)と同じように機能し、バイト粒度で機能する。
変位係数フィールド1062B(バイト7)−MODフィールド1142が01を含む場合、バイト7は、変位係数フィールド1062Bである。このフィールドの位置は、バイト粒度で機能するレガシx86命令セットの8ビット変位(disp8)と同じである。disp8は拡張されるサインであるため、これは、−128から127バイトまでの間のオフセットにのみアドレスしてよく、64バイトの複数のキャッシュラインに関して、disp8は、実に有用な4つの値−128、−64、0及び64にのみセット可能な8ビットを用い、多くの場合はより広範囲が必要となるのでdisp32が用いられる。しかしながら、disp32は4バイトを必要とする。disp8及びdisp32と対照的に、変位係数フィールド1062Bは、disp8の再解釈であり、変位係数フィールド1062Bを用いる場合、実際の変位は、メモリオペランドアクセス(N)のサイズによって乗算された変位係数フィールドのコンテンツによって決定される。このタイプの変位は、disp8*Nと称される。これにより、平均命令長(変位のために用いられる単一のバイトであるが、はるかにより広範囲を有する)が減少する。このような圧縮された変位は、有効変位がメモリアクセスの粒度の倍数であるという前提に基づいており、従って、アドレスオフセットの複数の冗長下位ビットは、エンコードされる必要がない。換言すると、変位係数フィールド1062Bは、レガシx86命令セットの8ビット変位を置換する。そこで、変位係数フィールド1062Bは、disp8がdisp8*Nに対して過負荷になるという場合のみを例外として、x86命令セットの8ビット変位と同じ態様でエンコードされる(そのため、ModRM/SIBエンコードルールは変更されない)。換言すると、(バイト単位のアドレスオフセットを得るために、メモリオペランドのサイズで変位をスケーリングする必要がある)ハードウェアによる変位値の解釈のみを除き、エンコードルール又はエンコード長さは変更されない。即値フィールド1072は、前述されたように動作する。
[フルオペコードフィールド]
図11Bは、本発明の一実施形態に係るフルオペコードフィールド1074を構成する特定ベクトル向け命令フォーマット1100の複数のフィールドを示すブロック図である。具体的には、フルオペコードフィールド1074は、フォーマットフィールド1040、ベースオペレーションフィールド1042、及びデータエレメント幅(W)フィールド1064を含む。ベースオペレーションフィールド1042は、プレフィクスエンコードフィールド1125、オペコードマップフィールド1115、及びリアルオペコードフィールド1130を含む。
[レジスタインデックスフィールド]
図11Cは、本発明の一実施形態に係るレジスタインデックスフィールド1044を構成する特定ベクトル向け命令フォーマット1100の複数のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド1044は、REXフィールド1105、REX'フィールド1110、MODR/M.Regフィールド1144、MODR/M.r/mフィールド1146、WWフィールド1120、xxxフィールド1154、及びbbbフィールド1156を含む。
[増加オペレーションフィールド]
図11Dは、本発明の一実施形態に係る増加オペレーションフィールド1050を構成する特定ベクトル向け命令フォーマット1100の複数のフィールドを示すブロック図である。クラス(U)フィールド1068が0を含む場合、これはEVEX.U0(クラスA1068A)を示し、これが1を含む場合、これはEVEX.U1(クラスB1068B)を示す。
U=0、かつMODフィールド1142が11を含む(メモリアクセスオペレーションなしを示す)場合、アルファフィールド1052(EVEXバイト3、ビット[7]−EH)は、rsフィールド1052Aと解釈される。RSフィールド1052Aが1(ラウンド1052A.1)を含む場合、ベータフィールド1054(EVEXバイト3、ビット[6:4]−SSS)は、ラウンド制御フィールド1054Aと解釈される。ラウンド制御フィールド1054Aは、1ビットのSAEフィールド1056及び2ビットのラウンドオペレーションフィールド1058を含む。rsフィールド1052Aが0(データ変換1052A.2)を含む場合、ベータフィールド1054(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ変換フィールド1054Bと解釈される。U=0、かつMODフィールド1142が00、01又は10を含む(メモリアクセスオペレーションを示す)場合、アルファフィールド1052(EVEXバイト3、ビット[7]−EH)は、追い出し示唆(EH)フィールド1052Bと解釈され、ベータフィールド1054(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ操作フィールド1054Cと解釈される。
U=1の場合、アルファフィールド1052(EVEXバイト3、ビット[7]−EH)は、ライトマスク制御(Z)フィールド1052Cと解釈される。U=1、かつMODフィールド1142が11を含む(非メモリアクセスオペレーションを示す)場合、ベータフィールド1054(EVEXバイト3、ビット[4]−S0)の一部はRLフィールド1057Aと解釈される。これが1(ラウンド1057A.1)を含む場合、ベータフィールド1054(EVEXバイト3、ビット[6−5]−S2−1)の残りはラウンドオペレーションフィールド1059Aと解釈され、RLフィールド1057Aが0(VSIZE1057.A2)を含む場合、ベータフィールド1054(EVEXバイト3、ビット[6−5]−S2−1)の残りはベクトル長フィールド1059B(EVEXバイト3、ビット[6−5]−L1−0)と解釈される。U=1、かつMODフィールド1142が00、01又は10を含む(メモリアクセスオペレーションを示す)場合、ベータフィールド1054(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド1059B(EVEXバイト3、ビット[6−5]−L1−0)及びブロードキャストフィールド1057B(EVEXバイト3、ビット[4]−B)と解釈される。
[例示的なレジスタアーキテクチャ]
図12は、本発明の一実施形態に係るレジスタアーキテクチャ1200のブロック図である。図示された実施形態において、32個の512ビット幅ベクトルレジスタ1210が存在し、これらのレジスタは、zmm0からzmm31と称される。下位16個のzmmレジスタの下位256ビットは、レジスタymm0−16にオーバレイされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0−15にオーバレイされる。特定ベクトル向け命令フォーマット1100は、これらのオーバレイされたレジスタファイルに対して、以下の表に示されるように動作する。
換言すると、ベクトル長フィールド1059Bは、最大長さと1つ又は複数の他のより短い長さとの間で選択し、ここで、このようなより短い長さの各々は、先行の長さの半分の長さであり、ベクトル長フィールド1059Bを有さない複数の命令のテンプレートは、最大ベクトル長において動作する。さらに、一実施形態において、特定ベクトル向け命令フォーマット1100の複数のクラスB命令テンプレートは、パックド又はスカラ単/倍精度浮動小数点データ及びパックド又はスカラ整数データに対して動作する。複数のスカラオペレーションは、zmm/ymm/xmmレジスタの最下位データエレメント位置において実行されるオペレーションであり、より上位の複数のデータエレメント位置は、実施形態に応じて、命令前と同じ状態で残されるか又はゼロにされるかのいずれかである。
ライトマスクレジスタ1215−図示された実施形態において、8個のライトマスクレジスタ(k0からk7)が存在し、各サイズは64ビットである。代替的な実施形態において、複数のライトマスクレジスタ1215は、16ビットのサイズである。前述されたように、本発明の一実施形態において、ベクトルマスクレジスタk0は、ライトマスクとして用いられることができず、k0を標準的に示すエンコードがライトマスクに用いられる場合、これは、ハードウェアに組み込まれるライトマスク0xFFFFを選択し、当該命令に対し、有効にライトマスクを無効化する。
汎用レジスタ1225−図示された実施形態において、複数のメモリオペランドにアドレスする既存の複数のx86アドレッシングモードと共に用いられる16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及びR8からR15という名称で参照される。
MMXパックド整数フラットレジスタファイル1250がエイリアスされるスカラ浮動小数点スタックレジスタファイル(x87スタック)1245−図示された実施形態において、x87スタックは、x87命令セット拡張を用いて32/64/80ビット浮動小数点データに対してスカラ浮動小数点の複数のオペレーションを実行するために用いられる8エレメントスタックであり、複数のMMXレジスタは、64ビットパックド整数データに対して複数のオペレーションを実行し、MMX及びXMMレジスタの間で実行されるいくつかのオペレーションのための複数のオペランドを保持するために用いられる。本発明の複数の代替的な実施形態は、より広い又はより狭いレジスタを用いてよい。
さらに、本発明の複数の代替的な実施形態は、より多くの、より少ない、又は異なるレジスタファイル及びレジスタを用いてよい。
[例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ]
複数のプロセッサコアは、複数の異なる態様で、複数の異なる目的のために、複数の異なるプロセッサにおいて実装されてよい。例えば、このようなコアの実装は、以下の、1)汎用コンピューティング向けの汎用インオーダコア、2)汎用コンピューティング向けの高性能汎用アウトオブオーダコア、3)主にグラフィック及び/又は科学的(スループット)コンピューティング向けの特定用途向けコアを含んでよい。異なるプロセッサの実装は、1)汎用コンピューティング向けの1つ又は複数の汎用インオーダコア及び/又は汎用コンピューティング向けの1つ又は複数の汎用アウトオブオーダコアを含むCPU、及び2)主にグラフィック及び/又は科学的(スループット)向けの1つ又は複数の特定用途向けコアを含むコプロセッサを含んでよい。このような異なるプロセッサは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同じパッケージ内で別個のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、このようなコプロセッサは、場合によっては統合グラフィック及び/又は科学的(スループット)ロジックのような特定用途向けロジック、又は複数の特定用途向けコアと称される)、及び4)同じダイ上で、説明されたCPU(場合によってはアプリケーションコア又はアプリケーションプロセッサと称される)、上述されたコプロセッサ及び追加的な機能を含み得るシステムオンチップを含んでよい複数の異なるコンピュータシステムアーキテクチャをもたらす。次に、複数の例示的なコアアーキテクチャが説明され、その次に、例示的な複数のプロセッサ及びコンピュータアーキテクチャが説明される。
[例示的なコアアーキテクチャ]
[インオーダ及びアウトオブオーダコアのブロック図]
図13Aは、本発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図13Bは、本発明の複数の実施形態に係るプロセッサに含まれるインオーダアーキテクチャコアの例示的な実施形態、及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図13A−Bにおける複数の実線のボックスは、インオーダパイプライン及びインオーダコアを示し、任意に追加された複数の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行/実行パイプライン及びコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであることを前提に、アウトオブオーダ態様が説明される。
図13Aにおいて、プロセッサパイプライン1300が、フェッチステージ1302、長さデコードステージ1304、デコードステージ1306、割り当てステージ1308、リネーミングステージ1310、スケジューリング(ディスパッチ又は発行としても知られる)ステージ1312、レジスタ読み出し/メモリ読み出しステージ1314、実行ステージ1316、ライトバック/メモリ書き込みステージ1318、例外処理ステージ1322、及びコミットステージ1324を含む。
図13Bは、実行エンジンユニット1350に結合されるフロントエンドユニット1330を含むプロセッサコア1390を示し、両方ともメモリユニット1370に結合されている。コア1390は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、又はハイブリッドもしくは代替的なコアタイプであってよい。さらに他の選択肢において、コア1390は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィック処理ユニット(GPGPU)コア、グラフィックコア等のような特定用途向けコアであってよい。
フロントエンドユニット1330は、命令キャッシュユニット1334に結合される分岐予測ユニット1332を含み、命令キャッシュユニット1334は命令トランスレーションルックアサイドバッファ(TLB)13336に結合され、命令トランスレーションルックアサイドバッファ1336は命令フェッチユニット1338に結合され、命令フェッチユニット1338はデコードユニット1340に結合される。デコードユニット1340(又はデコーダ)は、複数の命令をデコードし、出力として、1つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は元の複数の命令からデコードされた、もしくはこれらを他の方法で反映する、もしくはこれらから得られた他の制御信号を生成してよい。デコードユニット1340は、様々な異なるメカニズムを用いて実装されてよい。好適なメカニズムの例は、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等を含む。一実施形態において、コア1390は、マイクロコードROM又は(例えば、デコードユニット1340、さもなければフロントエンドユニット1330内で)特定の複数のマクロ命令に対するマイクロコードをストアする他の媒体を含む。デコードユニット1340は、実行エンジンユニット1350においてリネーム/アロケータユニット1352に結合される。
実行エンジンユニット1350は、リタイアメントユニット1354及び1つ又は複数のスケジューラユニット1356のセットに結合されるリネーム/アロケータユニット1352を含む。スケジューラユニット1356は、複数の予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット1356は、物理レジスタファイルユニット1358に結合される。複数の物理レジスタファイルユニット1358の各々は、1つ又は複数の物理レジスタファイルを表し、その中の異なるものが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、次に実行される命令のアドレスである命令ポインタ)等のような1つ又は複数の異なるデータタイプをストアする。一実施形態において、物理レジスタファイルユニット1358は、ベクトルレジスタユニット、ライトマスクレジスタユニット、及びスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ及び汎用レジスタを提供してよい。物理レジスタファイルユニット1358は、リタイアメントユニット1354によってオーバラップされ、レジスタリネーミング及びアウトオブオーダ実行が実装され得る様々な態様(例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いて、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いて、ならびにレジスタマップ及び複数のレジスタのプールを用いて、等)を示す。リタイアメントユニット1354及び物理レジスタファイルユニット1358は、実行クラスタ1360に結合される。実行クラスタ1360は、1つ又は複数の実行ユニット1362のセット及び1つ又は複数のメモリアクセスユニット1364のセットを含む。複数の実行ユニット1362は、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して、様々なオペレーション(例えば、複数のシフト、加算、減算、乗算)を実行してよい。いくつかの実施形態は、具体的な複数の機能又は複数の機能の複数のセット専用の多数の実行ユニットを含んでよく、他の複数の実施形態は、1つだけの実行ユニット又は全ての機能を全てで実行する複数の実行ユニットを含んでよい。複数の特定の実施形態は、複数の特定のタイプのデータ/オペレーションに対して別個のパイプラインを形成するので、スケジューラユニット1356、物理レジスタファイルユニット1358、及び実行クラスタ1360は、複数として示される可能性がある(例えば、各々がこれら自体のスケジューラユニット、物理レジスタファイルユニット、及び/又は実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又はメモリアクセスパイプラインは、及び別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット1364を有する複数の特定の実施形態が実装される)。複数の別個のパイプラインが用いられる場合、これらのパイプラインの1つ又は複数はアウトオブオーダ発行/実行で、残りはインオーダであってよいことも理解されたい。
複数のメモリアクセスユニット1364のセットは、メモリユニット1370に結合され、メモリユニット1370は、二次(L2)キャッシュユニット1376に結合されるデータキャッシュユニット1374に結合されるデータTLBユニット1372を含む。例示的な一実施形態において、メモリアクセスユニット1364は、ロードユニット、ストアアドレスユニット、及びストアデータユニットを含んでよく、これらの各々は、メモリユニット1370のデータTLBユニット1372に結合される。命令キャッシュユニット1334は、メモリユニット1370における二次(L2)キャッシュユニット1376にさらに結合される。L2キャッシュユニット1376は、1つ又は複数の他のレベルのキャッシュに、最終的にはメインメモリに結合される。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン1300を以下のように実装してよい。1)命令フェッチ1338が、フェッチステージ1302及び長さデコードステージ1304を実行し、2)デコードユニット1340が、デコードステージ1306を実行し、3)リネーム/アロケータユニット1352が、割り当てステージ1308及びリネーミングステージ1310を実行し、4)スケジューラユニット1356が、スケジューリングステージ1312を実行し、5)物理レジスタファイルユニット1358及びメモリユニット1370が、レジスタ読み出し/メモリ読み出しステージ1314を実行し、実行クラスタ1360が、実行ステージ1316を実行し、6)メモリユニット1370及び物理レジスタファイルユニット1358が、ライトバック/メモリ書き込みステージ1318を実行し、7)様々な複数のユニットが、例外処理ステージ1322に関与してよく、8)リタイアメントユニット1354及び物理レジスタファイルユニット1358が、コミットステージ1324を実行する。
コア1390は、本明細書において説明される命令を含む1つ又は複数の命令セット(例えば、x86命令セット(複数のより新たなバージョンと共に追加された、いくつかの拡張を有する)カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスの(NEONのような任意で追加的な拡張を有する)ARM命令セット)をサポートしてよい。一実施形態において、コア1390は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、これによって、多くのマルチメディアアプリケーションによって用いられる複数のオペレーションがパックドデータを用いて実行されることを可能にする。
コアは、マルチスレッディング(複数のオペレーション又は複数のスレッドの2つ又はそれより多くの並列セットを実行すること)をサポートしてよく、時分割マルチスレッディング、同時マルチスレッディング(単一の物理コアが複数のスレッドの各々に対して論理コアを提供することにより、物理コアが同時マルチスレッディングを実行すること)又はこれらの組み合わせ(例えば、時分割フェッチ及びデコード、その後、インテル(登録商標)ハイパースレッディング技術におけるもののような同時マルチスレッディング)を含む様々な態様で、マルチスレッディングを実行してよいことを理解されたい。
アウトオブオーダ実行に関してレジスタリネーミングを説明するが、レジスタリネーミングは、インオーダアーキテクチャで用いられてよいことを理解されたい。プロセッサの図示された実施形態は、別個の命令及びデータキャッシュユニット1334/1374、及び共有のL2キャッシュユニット1376をさらに含むが、複数の代替的な実施形態は、複数の命令及びデータの両方のために、例えば、一次(L1)内部キャッシュ、又は複数のレベルの内部キャッシュのような単一の内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュと、コア及び/又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。あるいは、キャッシュの全ては、コア及び/又はプロセッサの外部にあってよい。
[詳細な例示的インオーダコアアーキテクチャ]
図14A−Bは、より詳細な例示的インオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック(同じタイプ及び/又は異なるタイプの他の複数のコアを含む)の中の1つであってよい。複数の論理ブロックは、用途に応じて、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を介して、いくつかの固定機能ロジック、メモリI/Oインタフェース及び他の必要なI/Oロジックと通信を行う。
図14Aは、本発明の複数の実施形態に係る、単一のプロセッサコアのブロック図であって、そのオンダイ相互接続ネットワーク1402への接続、及びその二次(L2)キャッシュのローカルサブセット1404と共に示す。一実施形態において、命令デコーダ1400は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ1406によれば、キャッシュメモリ、さらにはスカラ及びベクトルユニットへの低レイテンシアクセスが可能である。一実施形態において、(設計の単純化のために)スカラユニット1408及びベクトルユニット1410は、別個のレジスタセット(それぞれ、複数のスカラレジスタ1412及び複数のベクトルレジスタ1414)を用い、これらの間で転送されるデータは、一次(L1)キャッシュ1406のメモリに書き込まれてから再読み出しされるが、本発明の複数の代替的な実施形態は、異なるアプローチ(例えば、単一のレジスタセットを用いる、又は書き込み及び再読み出しを行うことなく、2つのレジスタファイル間でのデータ転送を可能にする通信パスを含む)を用いてよい。
L2キャッシュのローカルサブセット1404は、プロセッサコア毎に1つの別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ自体のローカルサブセット1404への直接アクセスパスを有する。プロセッサコアによって読み出されたデータは、そのL2キャッシュサブセット1404にストアされ、他の複数のプロセッサコアがこれら自体の複数のローカルL2キャッシュサブセットにアクセスするのと並列に、迅速にアクセスされることができる。プロセッサコアによって書き込まれたデータは、それ自体のL2キャッシュサブセット1404にストアされ、他の複数のサブセットから、必要に応じてフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークが双方向であることにより、複数のプロセッサコア、L2キャッシュ及び他の論理ブロックのようなエージェントは、チップ内で互いに通信を行うことが可能となる。各リングデータパスは、方向毎に1012ビット幅である。
図14Bは、本発明の複数の実施形態に係る図14Aのプロセッサコアの一部の拡大図である。図14Bは、L1キャッシュ1404の一部であるL1データキャッシュ1406Aを含むとともに、ベクトルユニット1410及びベクトルレジスタ1414に関してより詳細に示す。具体的には、ベクトルユニット1410は、整数、単精度浮動及び倍精度浮動命令のうちの1つ又は複数を実行する16幅ベクトル処理ユニット(VPU)(16幅ALU1428を参照)である。VPUは、再構成ユニット1420による複数のレジスタ入力の再構成、数値変換ユニット1422A−Bによる数値変換、及び複製ユニット1424によるメモリ入力に対する複製をサポートする。複数のライトマスクレジスタ1426は、結果的な複数のベクトル書き込みのプレディケートを可能とする。
[統合メモリコントローラ及びグラフィックを有するプロセッサ]
図15は、本発明の複数の実施形態に係るプロセッサ1500のブロック図であり、これは、1つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックを有してよい。図15の複数の実線のボックスは、単一のコア1502Aを有するプロセッサ1500、システムエージェント1510、1つ又は複数のバスコントローラユニット1516のセットを示し、任意に追加された複数の破線のボックスは、複数のコア1502A−Nを有する代替的なプロセッサ1500、システムエージェントユニット1510における1つ又は複数の統合メモリコントローラユニット1514のセット、及び特定用途向けロジック1508を示す。
そこで、プロセッサ1500の複数の異なる実装は、1)(1つ又は複数のコアを含み得る)統合グラフィック及び/又は科学的(スループット)ロジックである特定用途向けロジック1508、及び1つ又は複数の汎用コア(例えば、複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、これら2つの組み合わせ)である複数のコア1502A−Nを有するCPU、2)主にグラフィック及び/又は科学的(スループット)向けの多数の特定用途向けコアである複数のコア1502A−Nを有するコプロセッサ、及び3)多数の汎用インオーダコアである複数のコア1502A−Nを有するコプロセッサを含んでよい。そこで、プロセッサ1500は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU(汎用グラフィック処理ユニット)、ハイスループット多集積コア(MIC)コプロセッサ(30個又はそれより多くのコアを含む)、組み込みプロセッサ等のような、汎用プロセッサ、コプロセッサ又は特定用途プロセッサであってよい。プロセッサは、1つ又は複数のチップ上に実装されてよい。
プロセッサ1500は、例えば、BiCMOS、CMOS、又はNMOSのような、多数の処理技術のいずれかを用いた1つ又は複数の基板の一部であってよく、及び/又はその上に実装されてよい。
メモリ階層は、複数のコア内の1つ又は複数のレベルのキャッシュ、複数の共有キャッシュユニット1506のセット又はこれらの1つ又は複数、及び複数の統合メモリコントローラユニット1514のセットに結合された外部メモリ(不図示)を含む。複数の共有キャッシュユニットのセット1506のセットは、二次(L2)、三次(L3)、四次(L4)又は他の複数のレベルのキャッシュのような1つ又は複数の中レベルキャッシュ、ラストレベルキャッシュ(LLC)及び/又はこれらの複数の組み合わせを含んでよい。一実施形態において、リングベースの相互接続ユニット1512が、統合グラフィックロジック1508、複数の共有キャッシュユニット1506のセット及びシステムエージェントユニット1510/統合メモリコントローラユニット1514を相互接続するが、複数の代替的な実施形態は、このような複数のユニットを相互接続するための任意の数の周知技術を用いてよい。一実施形態において、1つ又は複数のキャッシュユニット1506とコア1502−A−Nとの間で、コヒーレンシが維持される。
いくつかの実施形態において、コア1502A−Nの1つ又は複数は、マルチスレッディング可能である。システムエージェント1510は、コア1502A−Nを調整及びオペレーションするこれらのコンポーネントを含む。システムエージェントユニット1510は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを含んでよい。PCUは、コア1502A−N及び統合グラフィックロジック1508の電力状態を調整するために必要なロジック及び複数のコンポーネントであってよく、又はこれらを含んでよい。ディスプレイユニットは、1つ又は複数の外部接続されたディスプレイを駆動するためのものである。
コア1502A−Nは、アーキテクチャ命令セットに関してホモジニアス又はヘテロジニアスであってよく、すなわち、コア1502A−Nの2つ又はそれより多くは、同じ命令セットを実行可能であってよく、他のものは、当該命令セット又は異なる命令セットのサブセットのみを実行可能であってよい。
[例示的なコンピュータアーキテクチャ]
図16−19は、複数の例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型PC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス及び様々な他の電子デバイス用の当技術分野において公知の複数の他のシステム設計及び構成も適している。概して、本明細書で開示されるように、プロセッサ及び/又は他の実行ロジックを組み込み可能な多様なシステム又は電子デバイスが、概して適している。
ここで図16を参照すると、本発明の一実施形態に係るシステム1600のブロック図が示される。システム1600は、コントローラハブ1620に結合される1つ又は複数のプロセッサ1610、1615を含んでよい。一実施形態において、コントローラハブ1620は、グラフィックメモリコントローラハブ(GMCH)1690及び入力/出力ハブ(IOH)1650を含み(これらは別個のチップ上にあってよい)、GMCH1690は、メモリ1640及びコプロセッサ1645が結合されるメモリ及びグラフィックコントローラを含み、IOH1650は、複数の入力/出力(I/O)デバイス1660をGMCH1690に結合する。あるいは、メモリ及びグラフィックコントローラの一方又は両方は、(本明細書で説明されたように)プロセッサ内で統合され、メモリ1640及びコプロセッサ1645は、プロセッサ1610及びIOH1650と共に単一のチップにあるコントローラハブ1620と、直接的に結合される。
複数の追加のプロセッサ1615の任意の性質が、図16において、破線で示される。各プロセッサ1610、1615は、本明細書で説明される複数の処理コアのうちの1つ又は複数を含んでよく、プロセッサ1500の何らかのバージョンであってよい。
メモリ1640は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)又はこれら2つの組み合わせであってよい。少なくとも一実施形態では、コントローラハブ1620は、フロントサイドバス(FSB)のようなマルチドロップバス、QuickPath相互接続(QPI)のようなポイントツーポイントインタフェース、又は同様の接続1695を介して、プロセッサ1610、1615と通信を行う。
一実施形態において、コプロセッサ1645は、例えば、ハイスループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU、組み込みプロセッサ等のような特定用途向けプロセッサである。一実施形態において、コントローラハブ1620は、統合グラフィックアクセラレータを含んでよい。
物理リソース1610、1615の間には、アーキテクチャ上、マイクロアーキテクチャ上、熱的、電力消費等の特性を含む利点の様々な基準に関して、様々な違いが存在し得る。
一実施形態において、プロセッサ1610は、一般的なタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数の命令内に、複数のコプロセッサ命令が組み込まれてよい。プロセッサ1610は、取り付けられたコプロセッサ1645によって実行されるべきタイプとして、これらの複数のコプロセッサ命令を認識する。従って、プロセッサ1610は、コプロセッサバス又は他の相互接続に対し、コプロセッサ1645へのこれらの複数のコプロセッサ命令(又は複数のコプロセッサ命令を表す複数の制御信号)を発行する。コプロセッサ1645は、複数のコプロセッサ命令を受け付け、受信された複数のコプロセッサ命令を実行する。
ここで図17を参照すると、本発明の実施形態に係る、第1のより詳細な例示的システム1700のブロック図が示される。図17に示されるように、マルチプロセッサシステム1700は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1750を介して結合される第1のプロセッサ1770及び第2のプロセッサ1780を含む。プロセッサ1770及び1780の各々は、プロセッサ1500の何らかのバージョンであってよい。本発明の一実施形態において、プロセッサ1770及び1780は、それぞれプロセッサ1610及び1615であり、コプロセッサ1738は、コプロセッサ1645である。他の実施形態において、プロセッサ1770及び1780は、それぞれプロセッサ1610、コプロセッサ1645である。
プロセッサ1770及び1780は、それぞれ、統合メモリコントローラ(IMC)ユニット1772及び1782を含むものとして示される。プロセッサ1770は、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース1776及び1778をさらに含む。同様に、第2のプロセッサ1780は、P−Pインタフェース1786及び1788を含む。プロセッサ1770、1780は、P−Pインタフェース回路1778、1788を用いるポイントツーポイント(P−P)インタフェース1750を介して、情報を交換してよい。図17に示されるように、IMC1772及び1782は、複数のプロセッサをそれぞれの複数のメモリ、すなわち、それぞれの複数のプロセッサにローカルに取り付けられたメインメモリの一部であり得る、メモリ1732及びメモリ1734に結合する。
プロセッサ1770、1780は、各々、ポイントツーポイントインタフェース回路1776、1794、1786、1798を用いる個々のP−Pインタフェース1752、1754を介して、チップセット1790と情報を交換してよい。チップセット1790は、任意に、高性能インタフェース1739を介して、コプロセッサ1738と情報を交換してよい。一実施形態において、コプロセッサ1738は、例えば、ハイスループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU、組み込みプロセッサ等のような特定用途向けプロセッサである。
共有キャッシュ(不図示)は、プロセッサが低電力モードに置かれている場合に、複数のプロセッサのいずれか又は両方のローカルキャッシュ情報が共有キャッシュにストアされ得るように、プロセッサに含まれるか、又は、両方のプロセッサの外部にあってP−P相互接続を介して複数のプロセッサに接続されるかのいずれかであってよい。
チップセット1790は、インタフェース1796を介して第1のバス1716に結合されてよい。一実施形態において、第1のバス1716は、周辺コンポーネント相互接続(PCI)バス、又はPCIエクスプレスバスもしくは他の第3世代I/O相互接続バスのようなバスであってよいが、本発明の範囲はこれに限定されない。
図17に示されるように、様々なI/Oデバイス1714は、第1のバス1716を第2のバス1720に結合するバスブリッジ1718と共に、第1のバス1716に結合されてよい。一実施形態において、コプロセッサ、ハイスループットMICプロセッサ、GPGPU、(例えば、グラフィックアクセラレータもしくはデジタル信号処理(DSP)ユニットのような)アクセラレータ、フィールドプログラマブルゲートアレイ、又は任意の他のプロセッサのような1つ又は複数の追加のプロセッサ1715が、第1のバス1716に結合される。一実施形態において、第2のバス1720は、ローピンカウント(LPC)バスであってよい。様々なデバイスは、一実施形態において、例えば、キーボード及び/又はマウス1722、複数の通信デバイス1727及び複数の命令/コード及びデータ1730を含み得るディスクドライブ又は他の大容量ストレージデバイスのようなストレージユニット1728を含む第2のバス1720に結合されてよい。さらに、オーディオI/O1724は、第2のバス1720に結合されてよい。なお、他のアーキテクチャが適応可能である。例えば、図17のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は他のこのようなアーキテクチャを実装してよい。
ここで図18を参照すると、本発明の実施形態に係る、第2のより詳細な例示的システム1800のブロック図が示される。図17及び18における同様の複数のエレメントには、同様の参照番号が付され、図17の複数の特定の態様は、図18の他の複数の態様の妨げとることを回避すべく、図18から省略されている。
図18は、プロセッサ1770、1780がそれぞれ、統合メモリ及びI/O制御ロジック(「CL」)1772及び1782を含んでよいことを示す。そこで、CL1772、1782は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。図18は、メモリ1732、1734がCL1772、1782に結合されるのみならず、複数のI/Oデバイス1814も制御ロジック1772、1782に結合されることを示す。複数のレガシI/Oデバイス1815は、チップセット1790に結合される。
ここで図19を参照すると、本発明の実施形態に係るSoC1900のブロック図が示される。図15における同様の複数のエレメントは、複数の同様の参照番号が付される。また、複数の破線のボックスは、より高度な複数のSoCにおける複数の任意の機能である。図19において、相互接続ユニット1902は、1つ又は複数のコア202A―N及び共有キャッシュユニット1506のセットを含むアプリケーションプロセッサ1910、システムエージェントユニット1510、バスコントローラユニット1516、統合メモリコントローラユニット1514、統合グラフィックロジック、画像プロセッサ、オーディオプロセッサ及びビデオプロセッサを含み得る1つ又は複数のコプロセッサ1920又はそのセット、スタティックランダムアクセスメモリ(SRAM)ユニット1930、ダイレクトメモリアクセス(DMA)ユニット1932及び1つ又は複数の外部ディスプレイに結合するためのディスプレイユニット1940に結合される。一実施形態において、コプロセッサ1920は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、GPGPU、ハイスループットMICプロセッサ、組み込みプロセッサ等のような特定用途向けプロセッサを含む。
本明細書において開示される複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はこのような複数の実装アプローチの組み合わせにより実装されてよい。本発明の複数の実施形態は、少なくとも1つのプロセッサ、(揮発性及び不揮発性メモリ及び/又は複数のストレージエレメントを含む)ストレージシステム、少なくとも1つの入力デバイス及び少なくとも1つの出力デバイスを備える複数のプログラマブルシステム上で実行する複数のコンピュータプログラム又はプログラムコードとして実装されてよい。
本明細書において説明される複数の機能を実行し、出力情報を生成する複数の命令を入力すべく、図17に示されるコード1730のようなプログラムコードが適用されてよい。出力情報は、公知の態様で、1つ又は複数の出力デバイスに適用されてよい。この適用の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、又はマイクロプロセッサのようなプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信を行う高水準の手順型又はオブジェクト指向のプログラミング言語で実装されてよい。プログラムコードは、望ましい場合には、アセンブリ又は機械言語で実装されてもよい。実際に、本明細書において説明される複数のメカニズムは、その範囲において、いかなる特定のプログラミング言語にも限定されるものではない。いずれの場合も、言語は、コンパイラ型又はインタプリタ型言語であってよい。
少なくとも一実施形態の1つ又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体にストアされた代表的な複数の命令によって実装されてよく、これらは、機械によって読み出された場合に、本明細書において説明される複数の技術を実行するロジックを、機械に製造させる。「IPコア」として公知のこのような表現は、有形の機械可読媒体にストアされてよく、様々な顧客又は製造施設に供給され、実際にロジック又はプロセッサを作り出す製造機械にロードされてよい。
このような機械可読記憶媒体は、限定されるものではないが、ハードディスク、フロッピ(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)及び磁気光ディスクを含む任意の他のタイプのディスク、リードオンリメモリ(ROM)のような半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)、磁気又は光カードのようなランダムアクセスメモリ(RAM)、又は複数の電子的命令をストアすることに適した任意の他のタイプのメディアのような記憶媒体を含む、機械又はデバイスによって製造又は形成される複数の物品の非一時的かつ有形の構成を含んでよい。
従って、本発明の複数の実施形態は、本明細書において説明される複数の構造、回路、装置、複数のプロセッサ、及び/又はシステム機能を定義するハードウェア記述言語(HDL)のような複数の命令又は設計データを含む、有形の非一時的機械可読媒体をさらに含む。このような複数の実施形態は、プログラム製品と称されてもよい。
[エミュレート(バイナリトランスレーション、コードモーフィング等を含む)]
いくつかの場合において、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換するために用いられてよい。例えば、命令コンバータは、コアによって処理されるべき1つ又は複数の他の命令に、命令をトランスレート(例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて)、モーフィング、エミュレート、又は他の方法で変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせにおいて実装されてよい。命令コンバータは、プロセッサ上にあってよく、プロセッサ外にあってよく、又は、一部がプロセッサ上かつ一部がプロセッサ外にあってよい。
図20は、本発明の複数の実施形態に係る、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比させるブロック図である。図示された実施形態において、命令コンバータは、ソフトウェア命令コンバータであるが、あるいは、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせにおいて実装されてよい。図20は、高水準言語2002のプログラムが、少なくとも1つのx86命令セットコアを有するプロセッサ2016によってネイティブで実行され得るx86バイナリコード2006を生成するために、x86コンパイラ2004を用いてコンパイルされてよいことを示す。少なくとも1つのx86命令セットコアを有するプロセッサ2016は、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと実質的に同じ結果を実現すべく、(1)インテル(登録商標)x86命令セットコアの命令セットの大部分又は(2)複数のアプリケーションのオブジェクトコードバージョン又は少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサ上で実行することを目的とする他のソフトウェアを、互換的に実行又は他の方法で処理することにより、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと実質的に同じ複数の機能を実行することができる任意のプロセッサを表す。x86コンパイラ2004は、追加のリンク処理を用いて、又はこれ用いることなく、少なくとも1つのx86命令セットコアを備えるプロセッサ2016上で実行可能なx86バイナリコード2006(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図20は、少なくとも1つのx86命令セットコアを有さないプロセッサ2014(例えば、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セットを実行する、及び/又はカリフォルニア州サニーベールのARMホールディングスのARM命令セットを実行する複数のコアを有するプロセッサ)によってネイティブで実行され得る代替的な命令セットバイナリコード2010を生成するために、代替的な命令セットコンパイラ2008を用いて、高水準言語2002のプログラムがコンパイルされてよいことを示す。命令コンバータ2012は、x86バイナリコード2006を、x86命令セットコアを有さないプロセッサ2014によってネイティブで実行可能なコードに変換するために用いられる。この変換されたコードは、これが可能な命令コンバータの作成が難しいので、代替的な命令セットバイナリコード2010と同じである可能性は低いが、しかしながら、変換されたコードは、一般的なオペレーションを達成し、代替的な命令セットからの複数の命令で構成される。そこで、命令コンバータ2012は、エミュレート、シミュレーション又は任意の他の処理により、プロセッサ又はx86命令セットプロセッサもしくはコアを有さない他の電子デバイスにx86バイナリコード2006を実行させることが可能なソフトウェア、ファームウェア、ハードウェア又はこれらの組み合わせを表す。
図3−9のいずれかで説明されたコンポーネント、機能、及び詳細は、任意に、図1−2のいずれにもさらに用いられてよい。さらに、本明細書において説明される装置のいずれかについて、本明細書において説明されるコンポーネント、機能、及び詳細は、任意に、複数の実施形態においてこのような装置によって及び/又はこれらと共に実行可能な、本明細書において説明される複数の方法のいずれかにおいて用いられ、及び/又はこれらに適用されてもよい。本明細書において説明される複数のプロセッサのいずれも、本明細書で開示される複数のコンピュータシステム又は他のシステムのいずれかに含まれてよい。命令は、本明細書で開示される様々な命令フォーマットのいずれかを有してよい。
本明細書及び特許請求の範囲において、用語「結合」及び/又は「接続」は、これらの派生語と共に用いられていてよい。これらの用語は、互いにとっての同義語として意図されるものではない。むしろ、複数の実施形態において、「接続」は、2つ又はそれより多くの要素が互いに直接物理的及び/又は電気的に接触していることを示すために用いられてよい。「結合」は、2つ又はそれより多くの要素が互いに直接物理的及び/又は電気的に接触していることを意味してよい。しかしながら、「結合」は、また、2つ又はそれより多くの要素が互いに直接接触しないものの、なおも互いに協働又はインタラクトすることをさらに意味してよい。例えば、実行ユニットは、1つ又は複数の介在コンポーネントを介して、レジスタ及び/又はデコードユニットに結合されてよい。複数の図において、複数の矢印は、接続及び結合を示すために用いられる。
用語「及び/又は」が用いられていてよい。用語「及び/又は」は、本明細書において用いられるように、一方もしくは他方又は両方を意味する(例えば、A及び/又はBは、AもしくはB、又はA及びBの両方を意味する)。
上述の説明では、複数の実施形態の完全な理解を提供すべく、具体的な詳細が示されている。しかしながら、他の複数の実施形態は、これらの具体的な詳細のいくつかを用いることなく実施されてよい。本発明の範囲は、上述された具体例によって決定されるのではなく、以下に添付された特許請求の範囲によってのみ決定される。複数の他の例において、説明の理解に対する妨げとなることを回避すべく、周知の回路、構造、デバイス、及び/又はオペレーションは、ブロック図の形式で、又は詳細なく示されている。適切と考えられる場合には、参照番号、又は参照番号の末端部分は、別途指定されない限り又は明確に自明でない限り、任意に同様の又は同じ特性を有し得る対応又は類似の要素を示すために図中で繰り返されている。
複数の特定のオペレーションは、ハードウェアコンポーネントによって実行されてよく、又は機械実行可能もしくは回路実行可能命令で具現化されてよい。機械実行可能もしくは回路実行可能命令は、複数のオペレーションを実行する命令をプログラミングされた機械、回路、又はハードウェアコンポーネント(例えば、プロセッサ、プロセッサの一部、回路等)を生じさせ、及び/又はもたらすために用いられてよい。複数のオペレーションは、任意に、ハードウェア及びソフトウェアの組み合わせによって実行されてよい。プロセッサ、機械、回路、又はハードウェアは、命令を実行及び/又は処理し、命令に応答して結果をストアするように動作可能な固有又は特定の回路又は他のロジック(例えば、潜在的にはファームウェア及び/又はソフトウェアと組み合わせられるハードウェア)を含んでよい。
いくつかの実施形態は、機械可読媒体を含む製品(例えば、コンピュータプログラム製品)を含む。媒体は、機械によって可読な形式で情報を提供する、例えばストアするメカニズムを含んでよい。機械可読媒体は、機械によって実行される場合及び/又はそのときに、本明細書で開示される1つ又は複数のオペレーション、方法、又は技術を機械に実行させ、及び/又はこれらを実行する機械をもたらすように動作可能な命令又は複数の命令のシーケンスを提供するか、又はそれらをこれにストアさせてよい。機械可読媒体は、本明細書で開示される複数の命令の実施形態の1つ又は複数をストアしてよく、又は他の方法で提供してよい。
いくつかの実施形態において、機械可読媒体は、有形の及び/又は非一時的機械可読記憶媒体を含んでよい。例えば、有形の及び/又は非一時的機械可読記憶媒体は、フロッピ(登録商標)ディスケット、光記憶媒体、光ディスク、光学式データストレージデバイス、CD−ROM、磁気ディスク、磁気光ディスク、リードオンリメモリ(ROM)、プログラマブルROM(PROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データストレージ記憶材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイス等を含んでよい。非一時的機械可読記憶媒体は、一時的な伝搬信号から構成されるものではない。
好適な機械の例は、限定されるものではないが、汎用プロセッサ、特定用途向けプロセッサ、命令処理装置、デジタル論理回路、集積回路等を含む。好適な機械のさらに他の例は、プロセッサ、命令処理装置、デジタル論理回路、もしくは集積回路を含むコンピューティングデバイス又は他の電子デバイスを含む。このようなコンピューティングデバイス及び電子デバイスの例は、限定されるものではないが、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス(例えば、ルータ及びスイッチ)、モバイルインターネットデバイス(MID)、メディアプレイヤ、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラを含む。
本明細書の全体にわたって、「一実施形態」、「実施形態」、「1つ又は複数の実施形態」、「いくつかの実施形態」という記載は、例えば、特定の特徴が本発明の実施に含まれてよいが、必ず要求されるものではないことを示す。同様に、本明細書では、開示のストリームライン化及び様々な発明の態様の理解の助けを目的として、様々な特徴が場合によっては単一の実施形態、図、又はその説明において共にグループ化される。しかしながら、本開示のこの方法は、本発明が各請求項において明示的に記載されたものよりも多くの特徴を必要とするという意図を反映するものと解釈されるべきではない。むしろ、以下の特許請求の範囲が反映するように、複数の発明の態様は、単一の開示された実施形態の複数の特徴の一部のみに存する。そこで、詳細な説明に続く特許請求の範囲は、これにより、この詳細な説明に明示的に組み込まれ、各請求項は、本発明の別個の実施形態として独立している。
[実施形態の例]
複数の以下の例は、さらに複数の実施形態に関する。複数の例における具体的事柄は、1つ又は複数の実施形態のいずれかの箇所で用いられてよい。
例1は、命令をデコードするデコードユニットを備えるプロセッサを含む。命令は、少なくとも4つのデータエレメントを含む第1のソースパックドデータオペランドと、少なくとも4つのマスクエレメントを含むソースマスクと、デスティネーションストア位置とを示す。実行ユニットは、デコードユニットに結合される。実行ユニットは、命令に応答して、結果パックドデータオペランドをデスティネーションストア位置にストアする。結果パックドデータオペランドは、少なくとも2つのマスクされていない結果データエレメントの組を有する。複数のマスクされていない結果データエレメントの各々は、第1のソースパックドデータオペランドの少なくとも2つの連続データエレメントの異なるものの値を相対的順序でストアする。複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントは、対応ペアのマスクされていない結果データエレメントのうち、結果パックドデータオペランドの第1のエンドに最も近いものと同じ値を有する。複数のマスクされた結果データエレメントは、ソースマスクの複数のマスクされたマスクエレメントに対応する。
例2は、例1のプロセッサを含み、実行ユニットは、第1のエンドと、第1のエンドに最も近い組の第1のマスクされていない結果データエレメントとの間に、少なくとも1つのマスクされた結果データエレメントの第1のセットを含む結果パックドデータオペランドをストアする。
例3は、例2のプロセッサを含み、実行ユニットは、結果パックドデータオペランドをストアし、結果パックドデータオペランドにおいて、第1のセットの各マスクされた結果データエレメントは、結果パックドデータオペランドがストアされる前の、デスティネーションストア位置における最初の値と同じ値を有する。
例4は、例2のプロセッサを含み、デコードユニットは、最上位データエレメントを含む第2のソースパックドデータオペランドを示す命令をデコードし、実行ユニットは、結果パックドデータオペランドをストアし、結果パックドデータオペランドにおいて、第1のセットの各マスクされた結果データエレメントは、第2のソースパックドデータオペランドの最上位データエレメントと同じ値を有する。
例5は、例2のプロセッサを含み、デコードユニットは、最下位データエレメントを含む第2のソースパックドデータオペランドを示す命令をデコードし、実行ユニットは、結果パックドデータオペランドをストアし、結果パックドデータオペランドにおいて、第1のセットの各マスクされた結果データエレメントは、第2のソースパックドデータオペランドの最下位データエレメントと同じ値を有する。
例6は、例1のプロセッサを含み、実行ユニットは、結果パックドデータオペランドの第2のエンドと、第2のエンドに最も近い組の第2のマスクされていない結果データエレメントとの間に、少なくとも1つのマスクされた結果データエレメントの第2のセットを含む結果パックドデータオペランドをストアし、第2のセットの各マスクされた結果データエレメントは、第2のマスクされていない結果データエレメントと同じ値を有する。
例7は、例1のプロセッサを含み、実行ユニットは、結果パックドデータオペランドをストアし、結果パックドデータオペランドにおいて、第1のエンドは最下位エンドを含み、連続データエレメントは最下位の連続データエレメントである。
例8は、例1のプロセッサを含み、実行ユニットは、結果パックドデータオペランドをストアし、結果パックドデータオペランドにおいて、第1のエンドは最下位エンドを含み、連続データエレメントは最上位の連続データエレメントである。
例9は、例1のプロセッサを含み、実行ユニットは、結果パックドデータオペランドをストアし、結果パックドデータオペランドにおいて、第1のエンドは最上位エンドを含み、連続データエレメントは最下位の連続データエレメントである。
例10は、例1のプロセッサを含み、実行ユニットは、結果パックドデータオペランドをストアし、結果パックドデータオペランドにおいて、第1のエンドは最上位エンドを含み、連続データエレメントは最上位の連続データエレメントである。
例11は、例1から10のいずれか1つのプロセッサを含み、ソースマスクは、マスクレジスタにストアされ、命令は、マスクレジスタをプレディケートオペランドとして示す複数の他の命令を有する命令セットに含まれる。
例12は、例1から10のいずれか1つのプロセッサを含み、デコードユニットは、メモリの位置において第1のソースパックドデータオペランドを示す命令をデコードする。
例13は、例1から10のいずれか1つのプロセッサを含み、実行ユニットは、結果パックドデータオペランドをストアし、結果パックドデータオペランドにおいて、複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントが、対応ペアのマスクされていない結果データエレメントのうち、第1のエンドに最も近いものと同じ値を有するという特性は、命令のオペコードにおいて黙示される。
例14は、命令を受信する段階を備える、プロセッサにおける方法である。命令は、少なくとも4つのデータエレメントを含む第1のソースパックドデータオペランドと、少なくとも4つのマスクエレメントを含むソースマスクと、デスティネーションストア位置とを示す。命令に応答して、結果パックドデータオペランドをデスティネーションストア位置にストアする。結果パックドデータオペランドは、少なくとも2つのマスクされていない結果データエレメントの組を含む。複数のマスクされていない結果データエレメントの各々は、第1のソースパックドデータオペランドの少なくとも2つの連続データエレメントの異なるものの値を相対的順序でストアする。複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントは、対応ペアのマスクされていない結果データエレメントのうち、結果パックドデータオペランドの第1のエンドに最も近いものと同じ値を有する。複数のマスクされた結果データエレメントは、ソースマスクの複数のマスクされたマスクエレメントに対応する。
例15は、例14の方法を含み、ストアする段階は、第1のエンドと、第1のエンドに最も近い組の第1のマスクされていない結果データエレメントとの間に、少なくとも2つのマスクされた結果データエレメントの第1のセットを含む結果パックドデータオペランドをストアする段階を含む。また、結果パックドデータオペランドをストアする段階は、第1のセットの複数のマスクされた結果データエレメントの各々の値を変更しない段階を含む。
例16は、例14の方法を含み、ストアする段階は、第1のエンドと、第1のエンドに最も近い組の第1のマスクされていない結果データエレメントとの間に、少なくとも2つのマスクされた結果データエレメントの第1のセットを含む結果パックドデータオペランドをストアする段階を含む。また、第1のセットの複数のマスクされた結果データエレメントの各々は、命令によって示される第2のソースパックドデータオペランドの最上位データエレメントと同じ値を有する。例17は、例16の方法を含み、第1のエンドは、最下位エンドを含む。
例18は、例16の方法を含み、ストアする段階は、結果パックドデータオペランドの第2のエンドと、第2のエンドに最も近い組の第2のマスクされていない結果データエレメントとの間に、少なくとも1つのマスクされた結果データエレメントの第2のセットを含む結果パックドデータオペランドをストアする段階を含む。また、第2のセットの各マスクされた結果データエレメントは、第2のマスクされていない結果データエレメントと同じ値を有する。
例19は、例14の方法を含み、ストアする段階は、第1のエンドと、第1のエンドに最も近い組の第1のマスクされていない結果データエレメントとの間に、少なくとも2つのマスクされた結果データエレメントの第1のセットを含む結果パックドデータオペランドをストアする段階を含む。また、第1のセットの複数のマスクされた結果データエレメントの各々は、命令によって示される第2のソースパックドデータオペランドの最下位データエレメントと同じ値を有する。
例20は、例19の方法を含み、第1のエンドは、最上位エンドを含む。
例21は、例14の方法を含み、ストアする段階は、結果パックドデータをストアする段階を含み、結果パックドデータにおいて、複数のマスクされていない結果データエレメントの所与の最も近いペアの間に、少なくとも3つのマスクされた結果データエレメントが存在する。
例22は、複数の命令を処理するシステムであって、相互接続と、相互接続に結合されるプロセッサとを備える。プロセッサは、少なくとも4つのデータエレメントを含む第1のソースパックドデータオペランドと、少なくとも4つのマスクエレメントを含むソースマスクと、デスティネーションストア位置とを示す命令に応答して、結果パックドデータオペランドをデスティネーションストア位置にストアするように動作可能である。結果パックドデータオペランドは、少なくとも2つのマスクされていない結果データエレメントの組を含む。複数のマスクされていない結果データエレメントの各々は、第1のソースパックドデータオペランドの少なくとも2つの連続データエレメントの異なるものの値を、相対的順序でストアする。複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントは、対応ペアのマスクされていない結果データエレメントのうち、結果パックドデータオペランドの第1のエンドに最も近いものと同じ値を有する。複数のマスクされた結果データエレメントは、ソースマスクの複数のマスクされたマスクエレメントに対応する。システムは、相互接続に結合されるダイナミックランダムアクセスメモリ(DRAM)をさらに含む。DRAMは、複数の条件に基づいてインクリメントされるスカラ値に対して計算を実行するループをベクトル化する命令セットをストアする。命令セットは、プロセッサによって実行された場合に、プロセッサに複数のオペレーションを実行させるように動作可能であり、複数のオペレーションは、複数の条件を評価することと、正しいと評価された複数の条件に対して、ソースマスクの複数のエレメントをマスクされていない状態にすることと、誤りと評価された複数の条件に対して、ソースマスクの複数のエレメントをマスクされた状態にすることと、結果パックドデータオペランドに対して計算を並列に実行することと、を含む。
例23は、例22のシステムを含み、プロセッサは、第1のエンドと第1のエンドに最も近い組の第1のマスクされていない結果データエレメントとの間に、少なくとも2つのマスクされた結果データエレメントの第1のセットを含む結果パックドデータオペランドをストアする。第1のセットの複数のマスクされた結果データエレメントの各々は、命令によって示される第2のソースパックドデータオペランドの最上位データエレメントと同じ値を有する。
例24は、非一時的機械可読記憶媒体を備える製品を含む。非一時的機械可読記憶媒体は、命令をストアする。命令は、少なくとも4つのデータエレメントを含む第1のソースパックドデータオペランドと、少なくとも4つのマスクエレメントを含むソースマスクと、デスティネーションストア位置とを示す。命令は、機械によって実行された場合に、結果パックドデータオペランドをデスティネーションストア位置にストアすることを含む複数のオペレーションを、機械に実行させるように動作可能である。結果パックドデータオペランドは、少なくとも2つのマスクされていない結果データエレメントの組を含む。複数のマスクされていない結果データエレメントの各々は、第1のソースパックドデータオペランドの少なくとも2つの連続データエレメントの異なるものの値を、相対的順序でストアする。複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントは、対応ペアのマスクされていない結果データエレメントのうち、結果パックドデータオペランドの第1のエンドに最も近いものと同じ値を有する。複数のマスクされた結果データエレメントは、ソースマスクの複数のマスクされたマスクエレメントに対応する。
例25は、例24の製品を含み、結果パックドデータオペランドは、複数のマスクされていない結果データエレメントの対応する最も近いペアの間に少なくとも3つのマスクされた結果データエレメントを含む。任意に、各マスクエレメントは、単一のビットから構成されてよい。
例26は、例14−21のいずれかの方法を実行するように動作可能なプロセッサ又は他の装置を含む。
例27は、例14−21のいずれかの方法を実行する手段を含むプロセッサ又は他の装置を含む。
例28は、例14−21のいずれかの方法を実行するモジュール、複数のユニット、ロジック、回路、手段、又はこれらの任意の組み合わせを含むプロセッサを含む。
例29は、命令を任意にストア又は他の方法で提供する非一時的機械可読媒体を任意に含み、当該命令は、プロセッサ、コンピュータシステム、又は他の機械によって実行される場合及び/又はそのときに、例14−21のいずれかの方法を、機械に実行させるように動作可能である。
例30は、実質的に本明細書において説明される1つ又は複数のオペレーション又は任意の方法を実行するように動作可能なプロセッサ又は他の装置を含む。
例31は、実質的に本明細書において説明される1つ又は複数のオペレーション又は任意の方法を実行する手段を含むプロセッサ又は他の装置を含む。
例32は、実質的に本明細書において説明される複数の命令のいずれかを実行するように動作可能なプロセッサ又は他の装置を含む。
例33は、実質的に本明細書において説明される複数の命令のいずれかを実行する手段を含むプロセッサ又は他の装置を含む。
例34は、第1の命令セットの複数の命令をデコードするように動作可能なデコードユニットを含むプロセッサ又は他の装置を含む。デコードユニットは、第1の命令をエミュレートする1つ又は複数の命令を受信し、当該命令は、実質的に本明細書に開示される複数の命令のいずれかであってよく、かつ、第2の命令セットに含まれる。プロセッサ又は他の装置は、デコードユニットに結合され、かつ、第1の命令セットの1つ又は複数の命令を実行する1つ又は複数の実行ユニットをさらに含む。1つ又は複数の実行ユニットは、第1の命令セットの1つ又は複数の命令に応答して、結果をデスティネーションにストアするように動作可能である。結果は、第1の命令に対して、実質的に本明細書に開示される複数の結果のいずれかを含んでよい。
例35は、第1の命令セットの複数の命令をデコードするように動作可能なデコードユニットと、1つ又は複数の実行ユニットとを有するプロセッサを含むコンピュータシステム又は他の電子デバイスを含む。コンピュータシステムは、プロセッサに結合されるストレージデバイスをさらに含む。ストレージデバイスは、第1の命令をストアし、当該命令は、実質的に本明細書で開示される複数の命令のいずれかであってよく、かつ、第2の命令セットに含まれる。ストレージデバイスは、複数の命令をさらにストアし、第1の命令を第1の命令セットの1つ又は複数の命令に変換する。第1の命令セットの1つ又は複数の命令は、プロセッサによって実行された場合に、プロセッサに、結果をデスティネーションにストアさせるように動作可能である。結果は、第1の命令に対して、実質的に本明細書に開示される複数の結果のいずれかを含んでよい。