インデックス付きベクトルメモリアクセス及び算術及び/または論理(A/L)演算命令、そのような命令を実行するプロセッサ、そのような命令を処理または実行する場合に当該プロセッサにより実行される方法、及びそのような命令を処理または実行する1つまたは複数のプロセッサを組み込むシステムが本明細書に開示される。以下の説明において、多数の具体的な詳細(例えば、複数の具体的な命令オペレーション、複数のデータフォーマット、複数のプロセッサ構成、複数のマイクロアーキテクチャの詳細、複数のシステム構成、複数の命令フォーマット、複数の演算の複数のシーケンスなど)が記載される。しかしながら、複数の実施形態は、これら具体的な詳細をなしに実施され得る。複数の他の例において、複数の周知回路、複数の構造及び複数の技術は、説明の理解を不明瞭にすることを回避するために詳細に示されていない。
図1は、1つまたは複数のインデックス付きベクトルメモリアクセス及び算術及び/または論理(A/L)演算命令104を行うまたは実行するように動作可能なプロセッサ100の実施形態のブロック図である。プロセッサは、任意的な外部メモリ126(例えば、ダイナミックランダムアクセスメモリ(DRAM)、フラッシュメモリ、他のシステムメモリなど)に連結される。いくつかの実施形態はメモリ126を有しないプロセッサ100に関するものであるため、メモリ126は、任意的なものとして示されている。
いくつかの実施形態において、プロセッサは、(例えば、デスクトップ、ラップトップ、タブレット、ハンドヘルド、携帯電話、及び同様のコンピューティングデバイスに用いられる種類の)汎用プロセッサであり得る。代替的には、プロセッサは、特定用途向けプロセッサであり得る。適した特定用途向けプロセッサの複数の例は、複数のグラフィックスプロセッサ、複数のネットワークプロセッサ、複数の通信プロセッサ、複数の暗号プロセッサ、複数のコプロセッサ、及び複数のデジタルシグナルプロセッサ(DSP)を含むが、単にいくつかの例を挙げるため、それらに限定されない。プロセッサは、様々な複合命令セットコンピュータ(CISC)プロセッサ、様々な縮小命令セットコンピュータ(RISC)プロセッサ、様々な超長命令語(VLIW)プロセッサ、それらの様々なハイブリッド、または完全に他の種類のプロセッサのうちのいずれかであってもよい。
プロセッサは、アーキテクチャ的に可視またはアーキテクチャレジスタ110を含む。アーキテクチャレジスタという用語は、多くの場合、当技術分野において、ソフトウェア(例えば、プログラマ)に可視のレジスタ、及び/または複数のオペランドを識別する命令セットの複数の命令により特定されるレジスタを指すのに用いられる。これらアーキテクチャレジスタは、所与のマイクロアーキテクチャにおいて、複数の他の非アーキテクチャのレジスタまたは非アーキテクチャ的に可視のレジスタ(例えば、複数の命令によって用いられる複数のテンポラリレジスタなど)とは対照的である。簡潔さのために、これらアーキテクチャレジスタは、本明細書において、多くの場合、単にレジスタとして称される。レジスタは概して、オンダイプロセッサ記憶位置を表す。レジスタは、複数の異なる態様で複数の周知技術を用いて複数の異なるマイクロアーキテクチャに実装され得、任意の特定の種類の回路に限定されない。適した種類のレジスタの複数の例は、複数の専用物理レジスタ、レジスタリネーミングを用いる複数の動的割り当て物理レジスタ、及びそれらの複数の組み合わせを含むが、それらに限定されない。
示されているレジスタは、各々がベクトルまたはパックドデータを記憶するように動作可能な、ベクトルまたはパックドデータレジスタ112のセットを含む。いくつかの実施形態において、必要とされないが、レジスタはまた、パックドデータオペレーションマスクレジスタ118を任意選択的に含み得る。いくつかの実施形態において、レジスタはまた、必要とされないが、汎用レジスタ120を含み得る。
プロセッサは、命令セット102を有する。命令セットは、プロセッサによりサポートされる命令のセットを含む。命令セットの複数の命令は、複数のマイクロ命令、複数のマイクロオペレーション、または複数のマクロ命令を復号化する復号ユニットに起因して実行のために実行ユニットへ提供される複数の命令とは対照的に、複数のアセンブリ言語命令、複数の機械レベル命令、複数のマクロ命令、または実行するためにプロセッサへ提供される複数の命令を表す。命令セットは、1つまたは複数のインデックス付きベクトルメモリアクセス及び算術及び/または論理(A/L)演算命令104を含む。1つまたは複数のインデックス付きベクトルメモリアクセス及びA/L演算命令の各々は、プロセッサにベクトルA/L演算と組み合わせたインデックス付きベクトルメモリアクセスオペレーションを実行させるように、動作可能である。
いくつかの実施形態において、1つまたは複数のインデックス付きベクトルメモリアクセス及びA/L演算命令104は、1つまたは複数のインデックス付きベクトルロードとA/L演算とストア命令106(例えば、1つまたは複数のギャザーとA/L演算とスキャッタ命令)を任意選択的に含み得る。例として、いくつかの実施形態において、インデックス付きベクトルロードとA/L演算とストア命令106(例えば、ギャザーとA/L演算とスキャッタ命令)は、プロセッサに、ソース・パックドメモリインデックス・オペランド114により示された外部メモリ126の複数のメモリ位置から複数のデータ要素をギャザーさせ、ギャザーされた複数のデータ要素及びソース・パックドデータ・オペランド116の複数のデータ要素に対してA/L演算を実行させ、及びソース・パックドメモリインデックス・オペランド114により示された外部メモリ126の複数のメモリ位置に複数の結果データ要素をスキャッタさせるように、動作可能であり得る。
いくつかの実施形態において、1つまたは複数のインデックス付きベクトルメモリアクセス及びA/L演算命令104は、1つまたは複数のインデックス付きベクトルロード及びA/L演算命令108(例えば、1つまたは複数のギャザー及びA/L演算命令)を任意選択的に含み得る。例として、いくつかの実施形態において、インデックス付きベクトルロード及びA/L演算命令108(例えば、ギャザー及びA/L演算命令)は、プロセッサに、ソース・パックドメモリインデックス・オペランド114により示された外部メモリ126の複数のメモリ位置から複数のデータ要素をギャザーさせ、ギャザーされた複数のデータ要素及びソース・パックドデータ・オペランド116の複数のデータ要素に対してA/L演算を実行させ、及び複数の結果データ要素を結果パックドデータとしてオンプロセッサ記憶位置に(例えば、1つまたは複数のパックドデータレジスタに)記憶させるように、動作可能であり得る。
様々な異なる種類のベクトルA/L演算は、複数の命令104に適する。適したA/L演算のいくつかの例は、複数のベクトルまたはパックド加算演算、複数の減算演算、複数の乗算演算、複数の除算演算、複数の積和演算、複数のシフト演算、複数の回転演算、複数の論理積演算、複数の論理和演算、複数の論理否定演算、複数の否定論理積演算、複数の平均値演算、複数の最大値演算、複数の最小値演算、及び複数の比較演算を含むが、単にいくつか可能な例を挙げており、それらに限定されない。様々な実施形態において、単一のインデックス付きベクトルメモリアクセス及びA/L演算命令104から多くのそのような異なる命令までのいずれかがあり得る。例えば、異なる種類のA/L演算(例えば、加算、乗算、シフトなど)のための複数または多くのギャザーと演算とスキャッタ命令、及び/または異なる種類のA/L演算のための複数または多くのギャザー及び演算命令があり得る。
いくつかの実施形態において、複数の命令104は、必要とされないが、マスクレジスタ118のパックドデータ・オペレーション・マスクオペランドを任意選択的に示し得る。パックドデータ・オペレーション・マスクオペランド及びパックドデータ・オペレーション・マスクレジスタは、以下においてさらに説明される。いくつかの実施形態において、必要とされないが、複数の命令104は、汎用レジスタ120(例えば、ベースアドレスまたは他のメモリアドレス情報を有するもの)を任意選択的に示し(例えば、暗黙に示し)得る。代替的には、メモリアドレス情報は別の方法で提供されてもよい。
プロセッサはまた、1つまたは複数の実行ユニット124を含む。実行ユニットは、インデックス付きベクトルメモリアクセス及びA/L演算命令104を実行するまたは行うように動作可能である。複数の適した実行ユニットの複数の例は、複数のメモリアクセスユニット、複数のメモリ実行ユニット、複数のギャザーユニット、複数のスキャッタユニット、複数の算術及び/または論理ユニット(ALU)、同様のもの、及びそれらの複数の組み合わせを含むが、それらに限定されない。いくつかの実施形態において、メモリ実行ユニット(または、ギャザー、スキャッタ、または他のインデックス付きベクトルメモリアクセスオペレーションを実行することができる他のユニット)は、算術及び/または論理ユニットまたは回路を含むように変更され得る。他の実施形態において、メモリ実行ユニット(または、ギャザー、スキャッタ、または他のインデックス付きベクトルメモリアクセスオペレーションを実行することができる他のユニット)は、A/Lユニットまたは回路に連結され得る。いくつかの実施形態において、1つまたは複数の実行ユニット124は、外部メモリ126へアクセスするのに用いられるメモリサブシステム122に含まれ得る。
図2は、命令処理装置200の実施形態のブロック図である。いくつかの実施形態において、命令処理装置200は、図1のプロセッサ100であり得、またはそれに含まれ得る。上で説明されたプロセッサ100の複数の特徴及び複数の詳細はまた、命令処理装置200に任意選択的に適用し得る。代替的には、命令処理装置200は、プロセッサ100と同様または異なるプロセッサであり得、またはそれに含まれ得る。さらに、プロセッサ100は、命令処理装置200と同様または異なる命令処理装置を含み得る。
命令処理装置200は、(例えば、ダイナミックランダムアクセスメモリ(DRAM)、フラッシュメモリ、他のシステムメモリなどの)任意的な外部メモリ226に連結される。例として、命令処理装置及び外部メモリは、チップセットを通して、バスまたは他の相互接続により、または当技術分野において既知の他のアプローチにより、プリント回路基板上で連結され得る。外部メモリは、いくつかの実施形態が外部メモリを有しない命令処理装置(例えば、システム内にプロセッサをアセンブリする前)に関するため、任意的なものとして示される。
命令処理装置200は、インデックス付きベクトルロードとA/L演算とストア命令206を受信し得る。例えば、命令は、命令フェッチユニット、命令キュー、メモリなどから受信され得る。いくつかの実施形態において、命令206は、ギャザーとA/L演算とスキャッタ命令を表し得る。命令206は、複数のパックドメモリインデックスを有するソース・パックドメモリインデックス・オペランド214を(例えば、1つまたは複数のビットまたはフィールドを通して)明白に特定し得、またはそうでなければ、(例えば、暗黙に示し、エミュレーションレジスタマッピングを通して間接的に示すなど)示し得る。ソース・パックドメモリインデックス・オペランドの複数のメモリインデックスの各々は、外部メモリ226の対応するメモリ位置を示し得る。いくつかの実施形態において、複数のメモリインデックスは、16ビット、32ビット、または64ビットのメモリインデックスであり得るが、本願発明の範囲はそれらに限定されない。いくつかの実施形態において、命令206はまた、複数のパックドデータ要素を有するソース・パックドデータ・オペランド216を(例えば、1つまたは複数のビットまたはフィールドを通して)明白に特定し得、またはそうでなければ、(例えば、暗黙に示し、エミュレーションレジスタマッピングを通して間接的に示すなど)示し得る。
装置は、パックドデータレジスタ212のセットを含む。複数のパックドデータレジスタは、複数のアーキテクチャレジスタを表し得る。複数のレジスタは、複数の異なる態様で複数の周知技術を用いて複数の異なるマイクロアーキテクチャに実装され得、任意の特定の種類の回路に限定されない。複数の適した種類の複数のレジスタの複数の例は、複数の専用物理レジスタ、レジスタリネーミングを用いる複数の動的割り当て物理レジスタ、及びそれらの複数の組み合わせを含むが、それらに限定されない。示されたように、いくつかの実施形態において、ソース・パックドメモリインデックス・オペランド214及びソース・パックドデータ・オペランド216は、複数のパックドデータレジスタの複数のレジスタに記憶され得る。例として、命令206は、これらパックドデータレジスタをソースオペランドとして特定するように、1つまたは複数のフィールドまたはビットのセットを有し得る。代替的には、複数の他の記憶位置は、これらオペランドのうちの1つまたは複数のために任意選択的に用いられ得る。
命令処理装置200は、命令復号ユニットまたはデコーダ230を含む。いくつかの実施形態において、復号ユニットは、コアに配置され得る。
復号ユニットは、複数の上位レベルの機械命令またはマクロ命令(例えば、命令206)を受信及び復号化し得、1つまたは複数の下位レベルのマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、または他の下位レベルの命令もしくは元の上位レベルの命令を反映し及び/またはここから派生される複数の制御信号236を出力し得る。1つまたは複数の下位レベルの命令または制御信号は、1つまたは複数の下位レベル(例えば、回路レベルまたはハードウェアレベル)のオペレーションを通して、上位レベルの命令のオペレーションを実装し得る。復号ユニットは、限定されないが、複数のマイクロコードリードオンリメモリ(ROM)、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ(PLA)、及び複数の当技術分野において既知の他の機構を含む様々な異なる機構を用いて実装され得る。他の実施形態において、復号ユニットを有する代わりに、命令エミュレータ、トランスレータ、モルファ、インタープリタ、または(例えば、ソフトウェア、ハードウェア、ファームウェア、または組み合わせに実装された)他の命令変換ロジックが用いられ得る。さらに他の実施形態において、命令変換ロジック(例えば、エミュレーションモジュール)と復号ユニットとの組み合わせが用いられ得る。いくつかのまたはすべての命令変換ロジックは、別個のダイ上及び/またはメモリになど、命令処理装置の他の部分からオフダイで潜在的に配置され得る。
再び図2を参照すると、1つまたは複数の実行ユニット224は、復号ユニット230、複数のパックドデータレジスタ212、及び外部メモリ226に連結される。いくつかの実施形態において、1つまたは複数の実行ユニットはまた、複数のメモリインデックスを複数のメモリアドレスに変換するようにベースアドレス及び/または他のメモリアドレス情報を記憶するのに任意選択的に用いられ得る複数の汎用レジスタ220に任意選択的に連結され得る。代替的には、メモリアドレス情報は別の方法で提供されてもよい。
実行ユニットは、インデックス付きベクトルロードとA/L演算とストア命令206に応じて(例えば、復号化されたまたはそうでなければ命令206から変換された1つまたは複数の制御信号236に応じて、または、命令206をエミュレートするのに用いられる1つまたは複数の命令から復号化された1つまたは複数の制御信号236に応じて、)及び/またはその結果として、インデックス付きベクトルロードオペレーションとA/L演算とストアオペレーションを実行するように動作可能である。ロードオペレーション、A/L演算、及びストアオペレーションはすべて、ベクトル演算を表し得る。いくつかの実施形態において、オペレーションは、プロセッサが、ソース・パックドメモリインデックス・オペランド214の対応する複数のメモリインデックスにより示された外部メモリ226の潜在的に非隣接なメモリ位置から複数のデータ要素をギャザーまたはそうでなければロードし、ギャザーされまたはロードされた複数のデータ要素及びソース・パックドデータ・オペランド216の複数の関連データ要素に対してA/L演算を実行し、ソース・パックドメモリインデックス・オペランド214の対応する複数のメモリインデックスにより示された外部メモリ226の対応する複数のメモリ位置に複数の結果データ要素をスキャッタまたはそうでなければ記憶することを伴い得る。
示された例示的な実施形態において、第1のメモリ位置232は最初にデータ要素A1を含み、第2のメモリ位置233は最初にデータ要素A2を含み、第3のメモリ位置234は最初にデータ要素A3を含み、そして第4のメモリ位置235は最初にデータ要素A4を含む。これらメモリ位置の各々はそれぞれ、ソース・パックドメモリインデックス・オペランド214の第1から第4のメモリインデックスに対応し得る。ソース・パックドデータ・オペランド216は、それぞれの対応するデータ要素Bl、B2、B3、及びB4を含む。命令を実行した結果として、第1のメモリ位置232のデータ要素A1は、Al演算(OP)Blへ上書きされ得、第2のメモリ位置233のデータ要素A2は、A2 OP B2へ上書きされ得、第3のメモリ位置234のデータ要素A3は、A3 OP B3へ上書きされ得、そして第4のメモリ位置235のデータ要素A4は、A4 OP B4へ上書きされ得る。この例示的な実施形態において、演算(OP)は、例えば、パックド加算、パックド減算、パックド乗算、パックド除算、パックド積和、パックドシフト(例えば、B1によりA1をシフトさせる、B2によりA2をシフトさせるなど)、パックド回転(例えば、B1によりA1を回転させる、B2によりA2を回転させるなど)、パックド論理積、パックド論理和、パックド論理否定、パックド否定論理積、パックド平均値、パックド最大値、パックド最小値、パックド比較、または同様のもののような任意の適した「垂直」型のパックドデータオペレーションを表し得る。しかしながら、この例において、オペレーションが対応する複数のデータ要素の複数のペア(例えば、複数のオペランドの対応する複数のビット位置の複数のデータ要素)に対して実行される「垂直」型演算が用いられるが、そのような「垂直」型演算は必要とされない。他の実施形態において、例えば、「水平」型演算、一部「水平」/一部「垂直」型演算、単に1つより多くのデータ要素を伴う演算などのような、他の種類の演算は実行され得る。
複数の適した実行ユニットの複数の例は、複数のメモリアクセスユニット、複数のメモリ実行ユニット、複数のギャザーユニット、複数のスキャッタユニット、複数の算術及び/または論理ユニット(ALU)、同様のもの、及びそれらの複数の組み合わせを含むが、それらに限定されない。いくつかの実施形態において、メモリ実行ユニット(または、ギャザー及び/またはスキャッタ及び/または他のインデックス付きベクトルメモリアクセスオペレーションを実行することができる他のユニット)は、算術及び/または論理ユニットまたは回路を含むように変更され得る。複数の他の実施形態において、メモリ実行ユニット(または、ギャザー及び/またはスキャッタ及び/または他のインデックス付きベクトルメモリアクセスオペレーションを実行することができる他のユニット)は、算術及び/または論理ユニットまたは回路に連結され得る。1つまたは複数の実行ユニット及び/または装置は、命令206を実行及び/または処理するように動作可能な具体的または特定のロジック(例えば、回路、トランジスタ、または、ソフトウェア及び/またはファームウェアと潜在的に組み合わせた他のハードウェア)を含み得る。いくつかの実施形態において、1つまたは複数の実行ユニットは、少なくともいくつかのトランジスタ、集積回路、集積回路の部分、もしくは他の回路またはハードウェアを含み得る。
いくつかの実施形態において、1つまたは複数の実行ユニット224は、必要とされないが、外部メモリ226へアクセスするのに用いられるメモリサブシステム222に含まれ得る。以下でさら説明されるように、概して、当該1つまたは複数の実行ユニット224が外部メモリ226に近ければ近いほど、より良好な効率となる。例えば、これは、データを1つまたは複数の上位レベルのキャッシュに記憶する必要がないこと、及び/または、相互接続上で最上位レベルのキャッシュまで及び/またはコア内へデータを送信する必要がないことに部分的に起因し得る。
説明を不明瞭にすることを回避するために、簡単な命令処理装置200が説明されたが、命令処理装置は、1つまたは複数の他の従来の構成要素を任意選択的に含んでよい。そのような従来の構成要素の複数の例は、命令フェッチユニット、命令スケジューリングユニット、分岐予測ユニット、複数の命令及びデータキャッシュ、複数の命令及びデータトランスレーションルックアサイドバッファ(TLB)、複数のプリフェッチバッファ、複数のマイクロ命令キュー、複数のマイクロ命令シーケンサ、複数のバスインターフェースユニット、リタイアメント/コミットユニット、レジスタリネーミングユニット、及び従来からプロセッサに使用されている複数の他の構成要素を含むが、それらに限定されない。さらに、複数の実施形態は、複数のコア、複数の論理プロセッサ、または、同一あるいは異なる命令セット及び/またはISAを有する複数の実行エンジンを有し得る。複数のプロセッサの複数のそのような構成要素には、文字通りに多数の異なる組み合わせ及び構成があり、複数の実施形態は、いかなる特定のそのような組み合わせまたは構成にも限定されない。
いくつかの実施形態において、オペレーションは、複数のコアの外側に配置される実行ユニットにより(例えば、ラストレベルのキャッシュ、ラストレベルの次のレベルのキャッシュ、または複数のラストレベルのキャッシュのうちの1つと同じ場所に配置された及び/または近接する実行ユニットにより)実行され得る。いくつかの実施形態において、オペレーションは、ラストレベルのキャッシュ、ラストレベルの次のレベルのキャッシュ、または複数のラストレベルのキャッシュのうちの1つから提供されまたは取得されたデータに対して実行ユニットにより実行され得る。いくつかの実施形態において、1つまたは複数の実行ユニット224は、最上位レベルのキャッシュ(または複数の最上位レベルのキャッシュのうちの1つ)に1つまたは複数の実行ユニット224を論理的に配置することと対照的に、ラストレベルのキャッシュ(または複数の最下位レベルのキャッシュのうちの1つ)と同一のメモリ階層レベルに論理的に配置され得る。概して、最上位レベルのキャッシュと、1つまたは複数の実行ユニットが動作するメモリ階層レベルとの間にキャッシュのレベルが多ければ多いほど、より良好な効率となる。いくつかの実施形態において、オペレーションは、データを提供したキャッシュ(例えば、ラストレベルのキャッシュ)より上位のすべてまたは少なくとも1つまたは複数の上位レベルのキャッシュをバイパスする当該データに対して実行され得る。複数のそのような実施形態において、ギャザーされまたはそうでなければロードされたデータは、演算されて次にスキャッタされまたはそうでなければメモリに戻って記憶される前に、いかなるそのような上位レベルのキャッシュ内にも、及び/またはコア内にも送られる必要はない。有利には、上位レベルのキャッシュにそのようなデータを記憶する必要を回避することは、上位レベルのキャッシュのスペースを空けるのに役に立ち得る。この空きスペースは、他のデータを記憶するのに用いられ得、性能の改善に役に立ち得る。さらに、いくつかの実施形態において、オペレーションは、アーキテクチャレジスタと対照的に、テンポラリレジスタに保持されているデータに対して実行され得る。これは、アーキテクチャレジスタが他の命令により使用可能であるように、アーキテクチャレジスタを空けるのに役に立ち得る。これはまた、(例えば、データをレジスタの内外にスワッピングすることを減少するのに役に立つことによるなど)性能を改善するのに役に立ち得る。さらに、相互接続の帯域幅、及び/または、そうでなければ最上位または複数の上位レベルのキャッシュ内に及び/またはコア内にデータを送るのに必要とされるであろう複数の他のリソースもまた、減少され得る。そのような相互接続の帯域幅及び/または他のリソースは、他の目的のために使用され得、性能を改善するのにもまた役に立ち得る。図3は、プロセッサ300における実行ユニット324の位置の一実施形態を示すブロック図である。
プロセッサは、1つまたは複数のコア350を有する。図示において、プロセッサは、第1のコア350−1から任意選択的に第Nのコア350−Nまでを含み、Nは任意の適切なコアの数を表し得る。第1のコアは、復号ユニット330を含み、復号ユニット330は、本明細書の他の箇所で説明されている複数の復号ユニットと同様であってよく、インデックス付きベクトルメモリアクセス及びA/L演算命令の実施形態を復号化し得る。第1のコアはまた、実行ユニット351を含む。コアはまた、第1のコアによって実行される複数の命令によって示され得るアーキテクチャレジスタ310を含む。第1のコアは、第1レベル(L1)キャッシュ352をさらに含み、第2レベル(L2)キャッシュ353を任意選択的に含む。第Nのコアは、必要とされないが、第1のコアと任意選択的に同様、または同一であってよい。プロセッサはまた、複数のコアに連結されるラストレベルのキャッシュ(LLC)354を含む。プロセッサはまた、LLC及び複数のコアに連結されるメモリユニット355を含む。メモリユニットは、外部メモリ326に連結される。
いくつかの実施形態において、メモリユニットは、インデックス付きベクトルメモリアクセス及びA/L演算命令の実施形態を行うまたは実行するのに用いられる実行ユニットを含み得る。実行ユニットは、インデックス付きベクトルメモリアクセスオペレーション(例えば、ギャザーオペレーション及び/またはスキャッタオペレーション)を実行するように動作可能であり得るメモリアクセスユニット356を含む。実行ユニットはまた、メモリアクセスユニットに連結されるA/Lユニット357を含む。A/Lユニットは、アクセスされたデータ(例えば、複数のインデックスを用いてロードされたベクトルデータ)に対してA/L演算を実行するように動作可能であり得る。メモリアクセスユニット356及びA/Lユニット357は、インデックス付きベクトルメモリアクセス及びA/L演算命令の実施形態を実行するように連携または一緒に機能し得る。いくつかの実施形態において、実行ユニット324は、外部メモリ326からロードされたデータがLLCにロードされる前に、そのデータがLLCにロードされているように、そのデータに対して複数の演算を実行し得、または、LLCから取得されたデータがLLCにロードされている後にそのデータに対して複数の演算を実行し得る。いくつかの実施形態において、実行ユニット324は、コア350、L1キャッシュ352、またはL2キャッシュ353にロードされていないデータに対して複数のオペレーションを実行し得る。いくつかの実施形態において、実行ユニットは、これらの命令の実行をアシストする複数のテンポラリレジスタ358を含み得る。
例えば、複数のテンポラリレジスタは、ロードされたデータ及び/または命令を実行する間に生成された中間または一時性データを記憶するのに用いられ得る。そのようなテンポラリレジスタの使用は、アーキテクチャレジスタ310を占める必要がないようにするのに役に立つ。
図4は、インデックス付きベクトルロードとA/L演算とストア命令の実施形態を処理する方法460の実施形態のブロックフロー図である。様々な実施形態において、方法は、汎用プロセッサ、特定用途向けプロセッサ、または他の命令処理装置もしくはデジタルロジックデバイスによって実行され得る。いくつかの実施形態において、図4の複数のオペレーション及び/または方法は、図1−3のうちのいずれかの装置によって及び/またはその中で実行され得る。図1−3の装置について本明細書で説明されている複数の構成要素、特徴、及び複数の具体的な任意的詳細はまた、図4の複数のオペレーション及び/または方法に任意選択的に適用する。代替的には、図4の複数のオペレーション及び/または方法は、同様または異なるプロセッサまたは装置によって及び/またはその中に実行され得る。さらに、図1−3のうちのいずれかの装置は、図4の複数のオペレーション及び/または方法と同一、同様、または異なるものを実行し得る。
ブロック461では、方法は、インデックス付きベクトルロードとA/L演算とストア命令を受信する段階を備える。様々な態様において、命令は、プロセッサ、命令処理装置、またはそれらの一部分(例えば、命令フェッチユニット、復号ユニット、命令変換モジュールなど)において受信され得る。様々な態様において、命令は、オフダイソースから(例えば、DRAM、ディスク、相互接続などから)、またはオンダイソースから(例えば、命令キャッシュから、フェッチユニットからなど)受信され得る。いくつかの実施形態において、命令は、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを特定しまたはそうでなければ示し得る。いくつかの実施形態において、命令は、複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを特定しまたはそうでなければ示し得る。
ブロック462では、方法は、インデックス付きベクトルロードとA/L演算とストア命令を実行する段階を含む。いくつかの実施形態において、これは、ブロック463において複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードする段階と、ブロック464においてソース・パックドデータ・オペランドの複数のパックドデータ要素及びロードされた複数のデータ要素に対して複数のA/L演算を実行する段階と、ブロック465において複数のパックドメモリインデックスに対応する複数のメモリ位置に複数の結果データ要素を記憶する段階とを含んでよい。ロードオペレーションのために用いられる同一の複数のインデックスはまた、ストアオペレーションのために用いられ得る。
示された方法は、複数のアーキテクチャ的に可視のオペレーション(例えば、ソフトウェア及び/またはプログラマに可視のもの)を伴う。複数の他の実施形態において、方法は、1つまたは複数のマイクロアーキテクチャオペレーションを任意選択的に含み得る。例として、命令は、並び順に依らず(out of order)、フェッチされ得、復号化され得、予定され得て、複数のソースオペランドは、アクセスされ得、実行ユニットは、実行することが可能であってよくて命令の動作を実施するマイクロアーキテクチャオペレーションを実行し得る(例えば、パックドデータは、キャッシュからテンポラリレジスタに記憶され得、当該パックドデータは、当該テンポラリレジスタから動作され得、結果パックドデータは、当該テンポラリレジスタから戻ってキャッシュにまたはメモリに記憶され得るなど)、など。
図5は、インデックス付きベクトルロードとA/L演算とストア命令の実施形態に応じて実行され得るインデックス付きベクトルロードオペレーションとA/L演算とストアオペレーション566の実施形態を示すブロック図である。いくつかの実施形態において、命令は、ギャザーとA/L演算とスキャッタ命令を表し得る。
命令は、複数のパックドメモリインデックスを有するソース・パックドメモリインデックス・オペランド514を特定しまたはそうでなければ示し得る。例示された実施形態において、ソース・パックドメモリインデックス・オペランドは、512ビット幅であり、16の32ビットのメモリインデックスを含むが、本願発明の範囲はそう限定されない。示された例において、複数のメモリインデックスの値は、(左側の)最下位の位置から(右側の)最上位の位置の順で、ビット[31:0]においては134で、ビット[63:32]においては231で 、ビット[95:64]においては20で、及びビット[511:480]においては186である。これらの値は、複数の示された例にすぎないことが理解されるべきである。主要なポイントは、複数の異なるメモリ位置を示すまたはそれらに対応する複数の値があることである。代替的には、他のサイズのメモリインデックスは、例えば、16ビットのメモリインデックス、64ビットのメモリインデックス、または当技術分野において既知の他のサイズのメモリインデックスなど、任意選択的に用いられ得る。さらに、複数の他の実施形態において、ソース・パックドメモリインデックス・オペランドは、例えば、64ビット、128ビット、256ビット、または1024ビットなど、512ビットの他に別の適した幅を有し得る。
命令はまた、複数のパックドデータ要素を有するソース・パックドデータ・オペランド516を特定しまたはそうでなければ示し得る。例示された実施形態において、ソース・パックドデータ・オペランドはまた、512ビット幅であり、16の32ビットのデータ要素を含むが、本願発明の範囲はそう限定されない。示された例において、複数のデータ要素の値は、(左側の)最下位の位置から(右側の)最上位の位置の順で、ビット[31:0]においてはB1で、ビット[63:32]においてはB2で、ビット[95:64]においてはB3であり、ビット[511:480]においてはB16まで続く。代替的には、他のサイズのデータ要素は、例えば、8ビットのデータ要素、16ビットのデータ要素、64ビットのデータ要素、または当技術分野において既知の他のサイズのデータ要素など、任意選択的に用いられ得る。さらに、複数の他の実施形態において、ソース・パックドデータ・オペランドは、例えば、64ビット、128ビット、256ビット、または1024ビットなど、512ビットの他に別の適した幅を有し得る。複数のメモリインデックスのビット幅が複数のデータ要素のビット幅と同一であるというような要件は存在しない。多くの場合、データ要素の数は、メモリインデックスの数と同一であるが、このことは、特定の種類のオペレーションに依存して必要とされない。
インデックス付きベクトルロードオペレーション、A/L演算、及びストアオペレーションは、マスクされた命令の実施形態に応じて、及び/またはその結果として、実行され得る。オペレーションは、ソース・パックドメモリインデックス・オペランドの対応する複数のメモリインデックスにより示されたメモリの複数のメモリ位置から複数のデータ要素をギャザーまたはそうでなければロードし得る。各メモリインデックスは、対応するメモリ位置及び/またはそこに記憶されたデータ要素を指しまたは示し得る。例えば、例示された実施形態において、メモリインデックス134は、データ要素A1を記憶するメモリ位置を示し得、メモリインデックス231は、データ要素A2を記憶するメモリ位置を示し得、メモリインデックス20は、データ要素A3を記憶するメモリ位置を示し得、など、データ要素A16を記憶するメモリ位置を示し得るメモリインデックス186まで続く。A/L演算(OP)は、ギャザーされまたはそうでなければロードされた複数のデータ要素、及びソース・パックドデータ・オペランド516の複数のデータ要素に対して実行され得る。複数の結果データ要素(すなわち、オペレーションの実行に起因するもの)は次に、スキャッタされ得、またはそうでなければ、ソース・パックドメモリインデックス・オペランドの複数のメモリインデックスにより示された対応する複数のメモリ位置に戻って記憶され得る。いくつかの実施形態において、命令の特定のオペレーションに依存して、複数の結果データ要素は、ソース・パックドデータ・オペランドの複数のデータ要素(例えば、32ビットの複数のデータ要素)のサイズと同一であり得る。代替的には、複数の結果データ要素は、例えば、8ビット、16ビット、64ビットなどのように、ソース・パックドデータ・オペランドの複数のデータ要素より多くても少なくてもよい。
例示された実施形態において、説明の簡潔さのために、垂直型演算は、A1 OP B1に等しい第1の結果データ要素、A2 OP B2に等しい第2の結果データ要素、A3 OP B3に等しい第3の結果データ要素、及びA16 OP B16に等しい第4の結果データ要素を生成するように、実行される。「に等しい」という用語が用いられている際に、飽和は、値を最大または最小の代表値へと飽和させるように任意選択的に実行され得ることが理解されるべきである。本明細書の他の箇所で説明されている前述の垂直型演算(例えば、パックド加算、パックド減算、パックド乗算、パックドシフト、パックド回転、様々な異なる種類の論理演算(論理積、論理和、論理否定、否定論理積など)など)のうちのいずれかは適する。一例として、パックド加算である演算の場合において、複数の結果データ要素は、A1+B1から、A2+B2、A3+B3など、A16+B16までを含み得る。別の例として、パックドシフトである演算の場合において、複数の結果データ要素は、シフトカウントによりB1にシフトされたA1、シフトカウントによりB2にシフトされるA2、等などを含み得る。複数の他の実施形態において、例えば、複数の水平型演算、複数の一部垂直/一部水平型演算、2つより多くのデータ要素を伴う複数の演算、または同様のもののような、複数の他の種類の演算が、任意選択的に実行され得る。図示に示されているように、メモリインデックス134に対応するメモリ位置のAlの値は、Al OP Blの値に上書きされ得、メモリインデックス231に対応するメモリ位置のA2の値は、A2 OP B2の値に上書きされ得、メモリインデックス20に対応するメモリ位置のA3の値は、A3 OP B3の値に上書きされ得、そしてメモリインデックス186に対応するメモリ位置のA16の値は、A16 OP B16の値に上書きされ得る。
図6は、マスクされたインデックス付きベクトルロードとA/L演算とストア命令の実施形態に応じて実行され得る、マスクされたインデックス付きベクトルロードオペレーションとA/L演算とストアオペレーション668の実施形態を示すブロック図である。いくつかの実施形態において、命令は、マスクされたギャザーとA/L演算とスキャッタ命令を表し得る。図6のマスクされたオペレーション及びマスクされた命令は、図5のマスクされていないオペレーション及びマスクされていない命令とは一定の類似性を有する。説明の不明瞭を回避するために、図6のマスクされたオペレーション/命令の異なる及び/または更なる特性は、図5のマスクされていないオペレーション/命令に対してすべての同様のまたは共通の特性を繰り返すことなく主に説明されるであろう。しかしながら、図5のマスクされていないオペレーション/命令の前述された複数の特性もまた、特に明記しない限り、あるいは明らかな場合でない限り、図6に任意選択的に適用することが理解されるべきである。
命令は、複数のパックドメモリインデックスを有するソース・パックドメモリインデックス・オペランド614を特定しまたはそうでなければ示し得る。命令はまた、複数のパックドデータ要素を有するソース・パックドデータ・オペランド616を特定しまたはそうでなければ示し得る。これらの各々は、図5について前述されたものと同様、または同一であり得、同一の変更例及び代替例を有し得る。
いくつかの実施形態において、マスクされた命令はまた、ソース・パックドデータ・オペレーション・マスクオペランド618を特定しまたはそうでなければ示し得る。ソース・パックドデータ・オペレーション・マスクオペランドは、命令に関連付けられた対応するオペレーションのセットが実行されるべきか否か及び/または対応する結果が記憶されるべきか否かをマスクし、プレディケートし、または条件付き制御するように動作可能である、プレディケートオペランドまたは条件付き制御オペランドを表し得る。パックドデータ・オペレーションマスクはまた、本明細書においては、オペレーションマスク、プレディケートマスク、または単にマスクとして称され得る。いくつかの実施形態において、マスキングまたはプレディケーションは、複数の異なるデータ要素に対する複数のオペレーションが他のものとは別個に及び/または他のものとは無関係にプレディケートされまたは条件付き制御され得るように、データ要素単位の粒度とし得る。マスクは、複数のマスク要素、複数のプレディケート要素、または複数の条件付き制御要素を含んでよい。一態様において、マスクの複数の要素は、対応する複数のソースデータ要素及び/または複数の結果データ要素との一対一対応関係に含まれ得る。いくつかの実施形態において、各マスク要素は、単一マスクビットであり得る。
各単一マスクビットの値は、命令に関連付けされた対応するオペレーションのセットが対応する複数のデータ要素に対して実行されるべきか否か、及び/または、対応する結果が送信先記憶位置に記憶されるべきか否かを制御し得る。可能な一慣例によると、各マスクビットは、対応するオペレーションのセットが実行されることを可能にし、かつ対応する結果データ要素が対応する送信先記憶位置に記憶されることを可能にする(例えば、バイナリ1へと設定され得る)第1の値を有し得、または、対応するオペレーションのセットが実行されることをさせないで、及び/または対応する結果データ要素が対応する送信先記憶位置に記憶されることをさせない(例えば、バイナリ0へとクリアされ得る)第2の値を有し得る。
示されたように、512ビット幅であり、16の32ビットのメモリインデックスを有するソース・パックドメモリインデックス・オペランド614の場合において、ソース・パックドデータ・オペレーション・マスクオペランド618は、各ビットがマスクビットを表す16ビット幅であり得る。各マスクビットは、対応する位置のメモリインデックスに対応し得、及び/またはメモリインデックスによって指された関連メモリ位置に記憶されるべき結果データ要素に対応し得る。図示において、複数の対応する位置は、互いに対して垂直に整列される。複数の他の実施形態において、より多くのまたはより少ない結果データ要素がある場合、より多くのまたはより少ないマスクビットがあってよい。例えば、マスクは、ソース・パックドメモリインデックス614のメモリインデックスの数(例えば、4,8,32,64など)に等しいビット幅を有し得る。示された例において、マスクビットは、(左側の)最下位ビットから(右側の)最上位ビットの順では、1,0,1,・・・,0である。これは単に例示的な一例である。示された慣例によると、バイナリ0のマスクビット値は、マスクされた結果要素及び/または実行を必要とされないオペレーションのセットを表すが、他方、バイナリ1のマスクビット値は、マスクされていない結果要素及び/または実行されるべきオペレーションのセットを示す。各マスクされていない要素に対して、対応するインデックス付きベクトルロードオペレーション、A/L演算、及びストアオペレーションは、実行されるべきである。対照的に、各マスクされた要素に対して、対応するインデックス付きベクトルロードオペレーション、A/L演算、及びストアオペレーションが実行される必要はなく、または、仮にそれらが実行されたとしても、関連結果が関連メモリ位置に記憶される必要はない。多くの場合、マスクされたオペレーションを実行しくても、例えば、実行される必要がない複数のオペレーション上の複数のフォールト(例えば、複数のページフォールト)を回避する能力のように、利点がある。
マスクされたインデックス付きベクトルロードオペレーション、A/L演算、及びストアオペレーションは、マスクされた命令の実施形態に応じて、及び/またはその結果として、実行され得る。いくつかの実施形態において、オペレーションのセット(例えば、ロード、A/L、及びストアオペレーション)は、マスクビットの条件付き制御の対象である対応する複数のデータ要素に対して実行されてもされなくてもよい。いくつかの実施形態において、複数のデータ要素は、対応するマスクビットがマスクされていない(例えば、バイナリ1へ設定された)場合にのみ、対応する複数のメモリインデックスにより示された対応する複数のメモリ位置から選択的にギャザーされまたはそうでなければロードされ得る。
マスクされたパックドデータ・オペレーションマスクのビット(例えば、バイナリ0へクリアされたもの)に対応する複数のデータ要素は、ロードされなくてよい。次に、A/L演算(OP)は、ロードされた複数のデータ要素、及びソース・パックドデータ・オペランド616の適切な複数のデータ要素に対してのみ選択的に実行され得る。次に、複数の結果データ要素は、対応するマスクビットがマスクされていない(例えば、バイナリ1へと設定された)場合にのみ、複数のメモリインデックスにより示された対応する複数のメモリ位置に戻って選択的にスキャッタされまたはそうでなければ記憶され得る。
示された例において、ソース・パックドデータ・オペレーションマスクのビット位置[0]及び[2]にあるマスクビットがマスクされていない(例えば、バイナリ1へと設定された)ので、メモリインデックス134に対応するメモリ位置のA1の値は、Al OP B1の値に上書きされ得、メモリインデックス20に対応するメモリ位置のA3の値は、A3 OP B3の値に上書きされ得る。例示された実施形態において、説明の簡潔さのために、垂直型演算が実行される。前述された複数の垂直型演算のいずれもが適している。複数の他の実施形態において、複数の水平型演算、複数の一部垂直/一部水平型演算、2つより多くのデータ要素を伴う複数の演算、または同様のものが、代わりに実行され得る。
示された例において、マスクのビット位置[1]及び[15]にあるマスクビットがマスクされている(例えば、バイナリ0へクリアされた)ので、命令に関連付けられたオペレーションのセットの複数の結果は、対応する複数のメモリインデックスにより示された複数のメモリ位置に記憶されない。むしろ、いくつかの場合において、これらのメモリ位置は、これらの命令前から存在する値を維持しまたは保存し得る(例えば、命令により変更されなくてよい)。示されたように、メモリインデックス231に関連付けられたメモリ位置は、初期値A1を維持し得、メモリインデックス186に関連付けられたメモリ位置は、初期値A16を維持し得る。代替的には、複数のゼロまたは複数の他の予め定められ値は、マスクされた複数のメモリ位置に記憶され得る。
図7は、インデックス付きベクトルロード及びA/L演算命令の実施形態に応じて実行され得るインデックス付きベクトルロード及びA/L演算770の実施形態を示すブロック図である。いくつかの実施形態において、命令は、ギャザー及びA/L演算命令を表し得る。図7のオペレーション及び命令は、図5のオペレーション及び命令とは一定の類似性を有する。説明の不明瞭を回避するために、図7のオペレーション/命令に関する異なる及び/または追加の特性は、図5のオペレーション/命令に対してすべての同様のまたは共通の特性を繰り返されることなく主に説明されるであろう。しかしながら、記述されるかあるいは明らかでない限り、図5のオペレーション/命令の前述された複数の特性はまた、図7に任意選択的に適用することが理解されるべきである。
命令は、複数のパックドメモリインデックスを有するソース・パックドメモリインデックス・オペランド714を特定しまたはそうでなければ示し得る。命令はまた、複数のパックドデータ要素を有するソース・パックドデータ・オペランド716を特定しまたはそうでなければ示し得る。これらの各々は、図5について前述されたものと同様、または同一であってよく、同一の変更例及び代替例を有してよい。
インデックス付きベクトルロード及びA/L演算は、命令の実施形態に応じて、及び/またはその結果として実行され得る。オペレーションは、ソース・パックドメモリインデックス・オペランド714の対応する複数のメモリインデックスにより示された複数のメモリ位置から複数のデータ要素をギャザーしまたはそうでなければロードし得る。例えば、例示された実施形態において、データ要素A1は、メモリインデックス134により示されたメモリ位置からギャザーされ得、データ要素A2は、メモリインデックス231により示されたメモリ位置からギャザーされ得、データ要素A3は、メモリインデックス20により示されたメモリ位置からギャザーされ得、など、メモリインデックス186により示されたメモリ位置からギャザーされ得るデータ要素A16まで続く。次に、A/L演算(OP)は、ギャザーされたまたはそうでなければロードされた複数のデータ要素、及びソース・パックドデータ・オペランドの適切な複数のデータ要素に対して実行され得る。これは、複数の結果データ要素を生成し得る。
図5のオペレーション/命令とは対照的に、この実施形態において、複数の結果データ要素は、メモリ726に戻ってスキャッタされなくてよく、またはそうでなければ記憶されなくてよい。むしろ、複数の結果データ要素は、オンダイまたはオンプロセッサで配置される記憶位置の結果パックドデータ・オペランドに記憶され得る。例えば、いくつかの実施形態において、複数の結果データ要素は、プロセッサのパックドデータレジスタの結果パックドデータに記憶され得る。いくつかの実施形態において、命令は、パックドデータレジスタを明白に特定するフィールドまたはビットのセットを有し得る。代替的には、パックドデータレジスタは任意選択的に、命令により暗黙に示され得る。複数の他の実施形態において、複数のテンポラリレジスタは、結果パックドデータを記憶するのに用いられ得る。
例示された実施形態において、説明の簡潔さのために、垂直型演算は、A1 OP B1に等しい第1の結果データ要素、A2 OP B2に等しい第2の結果データ要素、A3 OP B3に等しい第3の結果データ要素、A16 OP B16に等しい第16の結果データ要素を生成するように、実行される。本明細書の他の箇所で説明されている前述の複数の垂直型演算のいずれもが適している。複数の他の実施形態において、例えば、複数の水平型演算、複数の一部垂直/一部水平型演算、2つより多くのデータ要素を伴う複数の演算、または同様のもののような、複数の他の種類の演算が、任意選択的に実行され得る。複数の結果データ要素は、結果パックドデータ・オペランド772に(例えば、パックドデータレジスタに)記憶される。示されたように、第1の結果データ要素は、ビット[31:0]に記憶され、第2の結果データ要素は、ビット[63:32]に記憶され、第3の結果データ要素は、ビット[95:64]に記憶され、など、ビット[511:480]に記憶されている第16の結果データ要素まで続く。複数の他の実施形態において、命令の複数の特定のオペレーションに依存して、複数の結果データ要素は、例えば、8ビット、16ビット、64ビットなどのように、ソース・パックドデータ・オペランドの複数のデータ要素より多くてよく、あるいはより少なくてよい。
図7はマスクされていないオペレーション/命令の実施形態を示す。複数の他の実施形態は、対応するマスクされたオペレーション/命令を含んでよい。複数のマスク及びマスキングは、複数の結果がメモリ726の代わりに結果パックドデータ・オペランド772に記憶されるかまたは記憶されないかという点を除き、図6と併せて上で説明されたように実質的に実行され得る。図6と併せて前述された複数のマスク及びマスキングの複数の特性はまた、この命令/オペレーションに適用してもよい。
様々な実施形態において、図5−7のうちのいずれによるオペレーションも、図1−3のうちのいずれによる装置によって及び/またはその中で実行され得る。図1−3のうちのいずれによる装置についての本明細書で説明された複数の構成要素、複数の特徴、及び複数の具体的な任意的詳細もまた、図5−7のうちのいずれによる複数のオペレーションに任意選択的に適用する。代替的には、図5−7のうちのいずれによる複数のオペレーションも、図1−3の装置と同様または異なるものによって及び/またはその中で実行され得る。さらに、図1−3のうちのいずれによる装置も、図5−7の複数のオペレーションと同一、同様、または異なるものを実行し得る。図5−7のうちのいずれによる複数のオペレーションもまた、図4の方法の一部分として実行され得る。代替的には、図4の方法は、図5−7のオペレーションと同様または異なるものを実行し得る。
本明細書に開示されている複数の命令は、汎用命令であり、様々な異なる目的のために用いられ得る。複数の特定の概念をさらに示すために、以下の詳細な例を考慮する。以下のループを考慮する。
FOR I=1,N
DATA[INDEX[I]]=DATA[INDEX[I]]+COUNT
本明細書に開示されている命令がなければ、そのようなループは、以下のように、x86命令に符号化され得る。
MOV ZMM2,[INDEX+RSI]
GATHERDPS ZMM1,[DATA+ZMM2*SCALE]
ADDPS ZMM1,ZMM1,ZMM3
SCATTERDPS[DATA+ZMM2*SCALE],ZMM1
しかしながら、ギャザーとパックド加算とスキャッタ命令の実施形態によると、そのようなループは、以下のようにより簡潔に符号化され得る。
MOV ZMM2,[INDEX+RSI]
GATADDSCATDPS[DATA+ZMM2*SCALE],ZMM3
有利には、この例は、ギャザーとパックド加算とスキャッタ命令がいくつかの命令を省きまたは減らすのに役に立ち得、そのことは符号密度を増加させて性能を向上させるのに役に立ち得ることを示す。さらに、性能向上はまた、アドレス生成におけるオーバヘッド及び各要素に対するロード/記憶処理の低減により得ることができる。上述のように、実際の性能向上は、命令がそのパイプラインで実装されているユニットまたは回路の位置に依存し得る。概して、命令がメモリにより近く実装されていればいるほど、または逆にシステムの最上位レベルのキャッシュからより遠く実装されていればいるほど、性能向上はより良好となるであろう。上述のように、これは、最上位または複数の上位レベルのキャッシュに命令の実行に関連付けられたデータを記憶する必要性を回避すること、最上位または複数の上位レベルのキャッシュに相互接続上でそのデータを送信する必要性を回避することなどに部分的に起因し得る。
図8は、インデックス付きベクトルロードとA/L演算とストア命令806のためのフォーマットの実施形態のブロック図である。命令は、オペレーションコードまたはオペコード880を含む。オペコードは、実行されるべき命令及び/またはオペレーションの種類を識別するように動作可能な複数のビットまたは1つまたは複数のフィールドを表し得る。命令はまた、ソース・パックドメモリインデックス・オペランドを特定するように動作可能なソース・パックドメモリインデックス・フィールド881を含む。命令はまた、ソース・パックドデータ・オペランドを特定するように動作可能なソース・パックドデータ・フィールド882を含む。いくつかの実施形態において、命令はまた、ソース・パックドデータ・オペレーションマスクを特定するように動作可能なソース・パックドデータ・オペレーション・マスクフィールド883を任意選択的に含み得る。いくつかの実施形態において、命令はまた、ベースアドレスまたは他のメモリアドレス情報を有するソース(例えば、汎用レジスタ)を特定するメモリアドレッシング情報フィールドのソース885を任意選択的に含み得る。代替的には、命令は、レジスタまたはそのようなメモリアドレッシング情報を有する他のソースを暗黙に示し得る。
図9は、インデックス付きベクトルロード及びA/L演算命令908のためのフォーマットの実施形態のブロック図である。命令は、オペレーションコードまたはオペコード980を含む。オペコードは、実行されるべき命令及び/またはオペレーションの種類を識別するのに動作可能な複数のビットまたは1つまたは複数のフィールドを表し得る。命令はまた、ソース・パックドメモリインデックス・オペランドを特定するのに動作可能なソース・パックドメモリインデックス・フィールド981を含む。命令はまた、ソース・パックドデータ・オペランドを特定するように動作可能なソース・パックドデータ・フィールド982を含む。いくつかの実施形態において、命令はまた、ソース・パックドデータ・オペレーション・マスクを特定するように動作可能なソース・パックドデータ・オペレーション・マスクフィールド983を任意選択的に含み得る。命令はまた、送信先パックドデータ記憶位置を特定するように動作可能な任意的な送信先パックドデータフィールド984を含み得る。いくつかの実施形態において、送信先パックドデータ記憶位置は、パックドデータレジスタまたは、他のオンダイもしくはオンプロセッサの記憶位置であり得る。いくつかの実施形態において、命令はまた、ベースアドレスまたは他のメモリアドレス情報を有するソース(例えば、汎用レジスタ)を特定するメモリアドレッシング情報フィールドのソース985を任意選択的に含み得る。代替的には、命令は、レジスタまたはそのようなメモリアドレッシング情報を有する他のソースを暗黙に示し得る。
図8−9において、様々なフィールドの各々は、レジスタのアドレスまたは複数のオペランドを有する他の記憶位置を特定するのに十分なビットのセットを含み得る。複数のフィールドのビットは、連続的であってよく、及び/または非連続的であってよい。複数の他の実施形態において、様々なフィールドのうちのいずれかの1つまたは複数は、フィールドを通して明白に特定される代わりに、(例えば、命令のオペコードにより暗黙に示されるなど)命令に対して暗黙であり得る。複数の代替的な実施形態は、更なるフィールドを追加し得、またはフィールドのうちのいくつかを省略し得る。さらに、示されたフィールドの順序/配置は必要とされない。むしろ、フィールドは、再配置され得、いくつかのフィールドは重複し得る、等など。
いくつかの実施形態において、命令フォーマットは、必要とされないが、EVEX符号化または命令フォーマットに従い得る。EVEX符号化は、以下でさらに説明されるであろう。一実施形態において、2つのレガシプレフィックスは、エスケープ62の動作を無効にするのに用いられ得る。例えば、プレフィックス F2は、ロードオペレーションフォーマット及びVSIBの使用を示唆し得る。一実施形態において、このプレフィックス F2は、本明細書の他の箇所に開示されているようなインデックス付きベクトルロード及びA/L演算命令のために用いられ得る。プレフィックス F3は、オペレーション記憶フォーマット及びVSIBの使用を示唆し得る。一実施形態において、このプレフィックス F3は、本明細書の他の箇所に開示されているようなインデックス付きベクトルロードとA/L演算とストア命令のために用いられ得る。
例として、VADDPS符号化に対しては以下となる。
EVEX.U1.NDS.512.0F.W0 58/r VADDPS zmm1,{k1},zmm2,[rax]
ギャザー及びパックド加算命令は、以下のように表され得る。
F2.EVEX.U1.NDS.512.0F.W0 58/r and VGATHERADDPS zmm1,{k1},zmm2,[rax+zmm3*scale]
ギャザーとパックド加算とスキャッタ命令は、以下のように表され得る。
F3.EVEX.U1.NDS.512.0F.W0 58/r and VGATSCATADDPS [rax+zmm3*scale]{k1},zmm1,zmm2
zmml、zmm2、及びzmm3は、512ビットのパックドデータレジスタを指す。{k1}は、64ビットのマスクレジスタを表す。raxは、メモリアドレッシング情報を保持するのに用いられる整数の汎用レジスタを表す。これらは、単に適した符号化の例示的な例である。本願発明の範囲は、これらの符号化に限定されない。
特定の概念をさらに示すために、適したパックドデータフォーマットのいくつかの例を考慮する。128ビットのパックドワードフォーマットは、128ビット幅であり、8つの16ビット幅のワードデータ要素を含む。128ビットのパックドダブルワードフォーマットは、128ビットであり、4つの32ビットのダブルワードデータ要素を含む。128ビットのパックドクワッドワードフォーマット846は、128ビットであり、2つの64ビットのクワッドワードデータ要素を含む。256ビットのパックドワードフォーマットは、256ビット幅であり、16の16ビット幅のワードデータ要素を含む。256ビットのパックドダブルワードフォーマット850は、256ビットであり、8つの32ビットのダブルワードデータ要素を含む。256ビットのパックドクワッドワードフォーマットは、256ビットであり、4つの64ビットのクワッドワードデータ要素を含む。512ビットのパックドワードフォーマットは、512ビット幅であり、32の16ビット幅のワードデータ要素を含む。512ビットのパックドダブルワードフォーマットは、512ビットであり、16の32ビットのダブルワードデータ要素を含む。512ビットのパックドクワッドワードフォーマットは、512ビットであり、8つの64ビットのクワッドワードデータ要素を含む。他のパックドデータフォーマットは、パックド32ビットの単精度浮動小数点フォーマットまたはパックド64ビットの倍精度浮動小数点フォーマットを含み得る。ギャザー及び/またはスキャッタ命令に適した(例えば、より広いまたはより狭い)任意の他のデータ要素サイズもまた適している。さらに、例えば、64ビットのパックドデータ、1024ビットのパックドデータなどのようなより広いまたはより狭いパックドデータ幅もまた適している。概して、パックドデータ要素の数は、パックドデータのビットサイズをパックドデータ要素のビットサイズで割った値に等しい。
図10は、パックドデータレジスタ1012の特定の適したセットの例示的な実施形態のブロック図である。示された複数のパックドデータレジスタは、32の512ビットのパックドデータまたはベクトルレジスタを含む。これら32の512ビットのレジスタはZMM0からZMM31にラベリングされる。例示された実施形態において、必要とされないが、これらのレジスタの下位16の下位256ビット、すなわち、ZMM0−ZMM15は、それぞれの256ビットのパックドデータまたは、YMM0−YMM15にラベリングされたベクトルレジスタ上にエイリアスされまたはオーバーレイされる。同様に、例示された実施形態において、下位128ビットのYMM0−YMM15は、それぞれの128ビットのパックドデータまたは、XMM0−XMM1にラベリングされたベクトルレジスタ上にエイリアスされまたはオーバーレイされるが、これもまた必要とされない。512ビットのレジスタであるZMM0からZMM31は、512ビットのパックドデータ、256ビットのパックドデータ、または128ビットのパックドデータを保持するように動作可能である。256ビットのレジスタであるYMM0−YMM15は、256ビットのパックドデータ、または128ビットのパックドデータを保持するように動作可能である。128ビットのレジスタであるXMM0−XMM1は、128ビットのパックドデータを保持するように動作可能である。レジスタの各々は、パックド浮動小数点データまたはパックド整数データのいずれかを記憶するのに用いられ得る。少なくとも8ビットのバイトデータ、16ビットのワードデータ、32ビットのダブルワード、単精度浮動小数点データ、64ビットのクワッドワード、及び倍精度浮動小数点データを含む異なるデータ要素のサイズがサポートされる。適したパックドデータレジスタの代替的な実施形態は、異なる数のレジスタ、異なるサイズのレジスタを含み得、より小さいレジスタ上でより大きいレジスタをエイリアスしてもしなくてもよく、また浮動小数点データのためにも用いられても用いられなくてもよい。
図11は、パックドデータ・オペレーション・マスクレジスタ1118の特定の適したセットの例示的な実施形態のブロック図である。パックドデータ・オペレーション・マスクレジスタの各々は、パックドデータ・オペレーション・マスクを記憶するのに用いられ得る。例示された実施形態において、セットは、k0からk7とラベリングされた8つのパックドデータ・オペレーション・マスクレジスタを含む。代替的な実施形態は、(例えば、2、4、6など)8より少ない、または(例えば、16、20、32など)8より多いパックドデータ・オペレーション・マスクレジスタのいずれかを含んでよい。例示された実施形態において、パックドデータ・オペレーション・マスクレジスタの各々は、64ビットである。代替的な実施形態において、パックドデータ・オペレーション・マスクレジスタの幅は、(例えば、80ビット、128ビットなど)64ビットより広くてよく、あるいは、(例えば、8ビット、16ビット、32ビットなど)64ビットより狭くてもよい。例として、命令は、k0からk7の8つのパックドデータ・オペレーション・マスクレジスタのうちの任意の1つを符号化または特定するように3ビット(例えば、3ビットのフィールド)を用い得る。代替的な実施形態において、より少ない、あるいはより多いパックドデータ・オペレーション・マスクレジスタがある場合、それぞれ、より少ない、あるいはより多いビットが用いられてよい。
図12は、特定の適した64ビットのパックドデータ・オペレーション・マスクレジスタ1218の例示的な実施形態を示し、パックドデータ・オペレーション・マスクとして、及び/または、マスキングするために用いられるビットの数はパックドデータ幅及びデータ要素幅に依存することを示す図である。上述のようにこれは必要とされないが、示されたマスクレジスタは64ビット幅である。概して、要素単位の単一マスキング制御ビットが用いられる場合、マスキングに用いられるビットの数は、パックドデータのビット幅をパックドデータ要素のビット幅で割った値に等しい。さらに示すために、いくつかの可能な例示的な実施形態を考慮する。8ビットのみ、例えば、下位の8ビットのみが、32ビットのデータ要素を有する256ビットのパックドデータに用いられ得る。16ビットのみ、例えば、下位の16ビットのみは、32ビットのデータ要素を有する512ビットのパックドデータのために用いられ得る。32ビットのみ、例えば、下位の32ビットのみが、32ビットのデータ要素を有する1024ビットのパックドデータに用いられ得る。すべての64ビットは、16ビットのデータ要素を有する1024ビットのパックドデータに用いられ得る。
上の説明において、垂直型ベクトル演算が図示及び説明を容易にするように強調されていたが、本願発明の範囲はそれに限定されない。垂直型のベクトル演算を使用して本明細書で説明されている実施形態のいずれもが、別の非垂直型のベクトル演算(例えば、一部垂直型及び一部水平型演算、垂直に整列された一組より多くの対応するデータ要素に対する演算など)を有するように変更され得る。
他の実施形態において、単一算術及び/または論理演算(例えば、パックド乗算またはパックド加算演算)を伴う命令の代わりに、命令の実施形態は、順次に実行されるべき複数の異なる算術及び/または論理演算を伴い得る。
例えば、インデックス付きベクトルロード後に、第1の算術及び/または論理演算は、本明細書の他の箇所で説明されたように実行され得、次に第2の算術及び/または論理演算は、第1の算術及び/または論理演算の結果及び潜在的に他のデータに対して任意選択的に実行され得、そして次に、第2の算術及び/または論理演算の結果は、メモリへ記憶され得る。
図3及び図5−12のうちのいずれかについて説明された複数の構成要素、複数の特徴、及び複数の詳細はまた、図1−2及び図4のうちのいずれにおいても任意選択的に用いられ得る。さらに、装置のうちのいずれについても本明細書で説明されている複数の構成要素、複数の特徴、及び複数の詳細はまた、本明細書で説明されている方法のうちのいずれにおいても任意選択的に用いられ得、その方法は、実施形態において、そのような装置により、及び/またはそのような装置と共に実行され得る。
命令セットは、1つまたは複数の命令フォーマットを含む。所与の命令フォーマットは、他のものの中から実行されるべきオペレーション(オペコード)及びオペレーションが実行されるべきオペランドを特定するように、様々なフィールド(ビットの数、ビットの位置)を定義する。いくつかの命令フォーマットは、複数の命令テンプレート(または複数のサブフォーマット)の定義により、さらに分割される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義され得(含まれたフィールドは通常同一の順序にあるが、含まれたフィールドがより少ないので、少なくともいくつかは異なるビット位置を有する)、及び/または異なる解釈をされる所与のフィールドを有するように定義され得る。したがって、ISAの各命令は、所与の命令フォーマットを用いて(及び、定義された場合、その命令フォーマットの命令テンプレートのうち所与の1つで)表され、オペレーション及び複数のオペランドを特定する複数のフィールドを含む。例えば、例示的なADD命令は、特定のオペコード及びオペランドフィールドを特定して複数のオペランド(ソース1/送信先及びソース2)を選択するために、特定のオペコード及びオペコードフィールドを含む命令フォーマットを有し、命令ストリームにおけるこのADD命令の発生は、特定の複数のオペランドを選択する複数のオペランドフィールド内の特定の複数のコンテンツを有するであろう。アドバンスト・ベクトル・エクステンション(AVX)(AVX1及びAVX2)と称され、ベクトル・エクステンション(VEX)符号化方式を用いるSIMD拡張命令のセットは、リリース及び/または公開されていた(例えば、2011年10月のインテル(登録商標)64及びIA−32アーキテクチャソフトウェアデベロッパマニュアルを参照、及び2011年6月のインテル(登録商標)アドバンスト・ベクトル・エクステンション・プログラミング・レファレンスを参照)。
[例示的命令フォーマット]
本明細書で説明されている命令の実施形態は、異なるフォーマットに具現化され得る。更に、例示的システム、アーキテクチャ、及びパイプラインは以下で詳細にされる。命令の実施形態は、そのようなシステム、アーキテクチャ、及びパイプライン上で実行され得るが、それらの詳細に限定されない。
[ジェネリックベクトル向け命令フォーマット]
ベクトル向け命令フォーマットは、ベクトル命令に適した命令フォーマットである(例えば、ベクトル演算に特有のいくつかのフィールドがある)。ベクトル向け命令フォーマットを通してベクトル及びスカラ演算の両方がサポートされる実施形態が説明されている一方で、代替的な実施形態は、ベクトル向け命令フォーマットのベクトル演算のみを用いる。
図13A−図13Bは、本願発明の複数の実施形態に係るジェネリックベクトル向け命令フォーマット及びそれらの命令テンプレートを示すブロック図である。図13Aは、本願発明の複数の実施形態に係るジェネリックベクトル向け命令フォーマット及びそれらのクラスAの命令テンプレートを示すブロック図である一方で、図13Bは、本願発明の複数の実施形態に係るジェネリックベクトル向け命令フォーマット及びそれらのクラスBの命令テンプレートを示すブロック図である。具体的には、クラスA及びクラスBの命令テンプレートが定義されたジェネリックベクトル向け命令フォーマット1300用に定義され、その両方は、ノーメモリアクセス1305の命令テンプレート及びメモリアクセス1320の命令テンプレートを含む。ジェネリックという用語は、ベクトル向け命令フォーマットとの関連では、いずれの具体的な命令セットにも紐づけされない命令フォーマットを指す。
ベクトル向け命令フォーマットが以下をサポートする本願発明の複数の実施形態が説明される。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バイトのベクトル・オペランド)をサポートしてよい。
図13AのクラスAの命令テンプレートは、1)ノーメモリアクセス1305の命令テンプレート内に示される、ノーメモリアクセス、フルラウンド制御型オペレーション1310の命令テンプレート及びノーメモリアクセスデータ変換型オペレーション1315の命令テンプレート、かつ2)メモリアクセス1320の命令テンプレート内に示される、メモリアクセス、一時的1325命令テンプレート及びメモリアクセス、非一時的1330命令テンプレートを含む。
図13BのクラスBの命令テンプレートは、1)ノーメモリアクセス1305の命令テンプレート内に示される、ノーメモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション1312の命令テンプレート及びノーメモリアクセス、書き込みマスク制御、vsize型オペレーション1317の命令テンプレート、かつ2)メモリアクセス1320命令テンプレート内に示される、メモリアクセス、書き込みマスク制御1327の命令テンプレートを含む。
ジェネリックベクトル向け命令フォーマット1300は、図13A−13Bに示されている順序において下で列挙される以下のフィールドを含む。
[フォーマットフィールド1340]このフィールドの特定の値(命令フォーマットの識別子値)がベクトル向け命令フォーマットを一意に識別し、これにより、複数の命令ストリームのベクトル向け命令フォーマットにおいて、複数の命令発生を識別する。このように、このフィールドは、ジェネリックベクトル向け命令フォーマットのみを有する命令セットにとっては必要とされないという意味で、任意的である。
[ベースオペレーションフィールド1342]当該コンテンツは、異なる複数のベースオペレーションを区別する。
[レジスタインデックスフィールド1344]当該コンテンツは、直接またはアドレス生成を通じて、ソース及び送信先オペランドの位置をそれがレジスタにあってもメモリにあっても特定する。これらは、PxQ(例えば、32x512、16x128、32x1024、64x1024)のレジスタファイルからN個のレジスタを選択するのに十分なビットの数を含む。一実施形態において、Nは最大で3つのソース及び1つの送信先レジスタであってもよく、代替的な実施形態は、より多くのまたはより少ないソース及び送信先レジスタをサポートしてもよい(例えば、最大で2つのソースをサポートしこれらのソースの1つが送信先として動作てもよく、最大で3つのソースをサポートしこれらのソースの1つが送信先として動作してもよく、最大で2つのソース及び1つの送信先をサポートしてもよい)。
[修飾子フィールド1346]当該コンテンツは、ジェネリックベクトル命令フォーマットにおけるメモリアクセスを特定する複数の命令の発生と、メモリアクセスを特定しない命令の発生とを区別する。すなわち、ノーメモリアクセス1305の命令テンプレートとメモリアクセス1320の命令テンプレートとを区別する。複数のメモリアクセスオペレーションは、メモリ階層に対して読み出し及び/または書き込みを行う(いくつかの場合において、レジスタ内の複数の値を用いてソース及び/または送信先アドレスを特定する)が、複数の非メモリアクセスオペレーションは、行わない(例えば、ソース及び複数の送信先は、複数のレジスタである)。一実施形態では、このフィールドはまた、複数のメモリアドレス算出を実行するために3つの異なる態様から選択するが、代替的な実施形態は、複数のメモリアドレス算出を実行するために、より多くの、より少ない、または複数の異なる態様をサポートしてもよい。
[増加オペレーションフィールド1350]当該コンテンツは、ベースオペレーションに加え、様々な異なる複数のオペレーションの中でどれが実行されるべきかを区別する。このフィールドは、状況に応じる。本願発明の一実施形態において、このフィールドは、クラスフィールド1368、アルファフィールド1352及びベータフィールド1354に分割される。増加オペレーションフィールド1350は、2つ、3つまたは4つの命令ではなく、単一の命令において、共通した複数の演算のグループが実行されることを可能にする。
[スケールフィールド1360]当該コンテンツは、メモリアドレス生成のために(例えば、2scale*index+baseを用いるアドレス生成のために)、インデックスフィールドのコンテンツをスケーリングすることを可能にする。
[変位フィールド1362A]当該コンテンツは、メモリアドレス生成の一部分として(例えば、2scale*index+base+displacementを用いるアドレス生成のために)、用いられる。
[変位ファクタフィールド1362B](変位ファクタフィールド1362Bの上方に直接に変位フィールド1362Aを並列させることは、一方または他方が用いられることを示すことを留意されたい)当該コンテンツは、アドレス生成の一部分として用いられ、メモリアクセスのサイズ(N)(Nは当該メモリアクセスのバイトの数である)によってスケーリングされるべき変位ファクタを特定する(例えば、2scale*index+base+scaled displacementを用いるアドレス生成のために)。複数の冗長下位ビットが無視されることによって、有効アドレスの算出で用いられるべき最終変位を生成すべく、変位ファクタフィールドのコンテンツに、複数のメモリオペランドの合計サイズ(N)が乗じられる。Nの値は、フルオペコードフィールド1374(本明細書で後述される)及びデータ操作フィールド1354Cに基づいて、プロセッサハードウェアによってランタイムに決定される。変位フィールド1362A及び変位ファクタフィールド1362Bは、これらがノーメモリアクセス1305の複数の命令テンプレートのために用いられなく、及び/または複数の異なる実施形態が、2つのうち1つのみを実装してもよく、または1つも実装しなくてもよいという意味で、任意的である。
[データ要素幅フィールド1364]当該コンテンツは、(いくつかの実施形態においては、すべての命令に対して、複数の他の実施形態においては、いくつかの命令のみに対して)多数のデータ要素幅の中でどれが用いられるべきかを区別する。このフィールドは、複数のオペコードのいくつかの態様を用いて、データ要素幅が1つのみサポートされ、及び/または複数のデータ要素幅がサポートされる場合には必要とされないという意味で、任意的である。
[書き込みマスクフィールド1370]当該コンテンツは、データ要素位置単位に基づいて、送信先ベクトルオペランドのデータ要素位置がベースオペレーション及び増加オペレーションの結果を反映するか否かを制御する。クラスAの命令テンプレートは、結合書き込みマスクをサポートする一方、複数のクラスBの命令テンプレートは、結合及びゼロ書き込みマスクの両方をサポートする。結合する場合、複数のベクトルマスクにより、送信先における複数の要素の任意のセットは、(ベースオペレーション及び増加オペレーションによって特定される)あらゆるオペレーションの実行中に、複数の更新から保護されることができ、他の一実施形態では、対応するマスクビットが0を有する場合、送信先の各要素の古い値を保存する。対照的に、ゼロを書き込む場合、複数のベクトルマスクにより、送信先における複数の要素の任意のセットは、(ベースオペレーション及び増加オペレーションによって特定される)あらゆるオペレーションの実行中に、ゼロを書き込まれることができ、一実施形態では、対応するマスクビットが0値を有する場合、送信先の要素は、0に設定される。この機能性のサブセットは、実行中のオペレーションのベクトル長(すなわち、修正中の複数の要素の最初の要素から最後の要素までの全長)を制御する能力であるが、しかしながら、変更される複数の要素が連続している必要はない。つまり、書き込みマスクフィールド1370は、ロード、記憶、算術、論理などを含む複数の部分的なベクトル演算を可能にする。本願発明の複数の実施形態が説明され、その中で用いられる書き込みマスクを含むいくつかの書き込みマスクレジスタの1つを書き込みマスクフィールド1370のコンテンツが選択する(したがって、書き込みマスクフィールド1370のコンテンツは間接的に、実行されるマスキングを識別する)。その一方で、複数の代替的な実施形態は、その代わりに、またはそれに追加して、マスク書き込みフィールド1370のコンテンツが実行されるマスキングを直接的に特定することを可能にする。
[即値フィールド1372]当該コンテンツは、即値の仕様を可能にする。このフィールドは、即値をサポートしないジェネリックベクトル向けフォーマットの実装に存在しないかつ即値を用いない命令には存在しないという意味で、任意的である。
[クラスフィールド1368]当該コンテンツは、複数の命令の異なる複数のクラスを区別する。図13A−Bを参照すると、このフィールドの当該コンテンツは、クラスA及びクラスBの命令から選択する。図13A−Bにおいて、複数の角丸四角形は、特定の値がフィールドに存在することを示すのに用いられる(例えば、図13A−Bのそれぞれにおいて、クラスフィールド1368に対するクラスAの1368A及びクラスBの1368B)。
[クラスAの命令テンプレート]非メモリアクセス1305のクラスAの複数の命令テンプレートの場合、アルファフィールド1352は、RSフィールド1352Aと解釈され、そのコンテンツは、複数の異なる増加オペレーション型のどれが実行されるべきかを区別し(例えば、ノーメモリアクセス、ラウンド型オペレーション1310及びノーメモリアクセス、データ変換型オペレーション1315の複数の命令テンプレートに対し、ラウンド1352A.1及びデータ変換1352A.2がそれぞれ特定される)、ベータフィールド1354は、特定される型の複数のオペレーションのどれが実行されるべきかを区別する。ノーメモリアクセス1305の命令テンプレートにおいてスケールフィールド1360、変位フィールド1362A、及び変位スケールフィールド1362Bは存在しない。
[ノーメモリアクセス命令テンプレート][フルラウンド制御型オペレーション]当該ノーメモリアクセスフルラウンド制御型オペレーション1310の命令テンプレートにおいて、ベータフィールド1354は、ラウンド制御フィールド1354Aとして解釈され、当該コンテンツは、スタティックラウンドを提供する。説明された本願発明の複数の実施形態では、ラウンド制御フィールド1354Aは、すべての浮動小数点例外抑制(SAE)フィールド1356及びラウンドオペレーション制御フィールド1358を含むが、代替的な実施形態は、これらの複数の概念の両方を同一のフィールドに符号化することをサポートしてもよく、またはこれらの概念/フィールドの一方または他方を有するのみでよい(例えば、ラウンドオペレーション制御フィールド1358のみを有してもよい)。
[SAEフィールド1356]当該コンテンツは、例外イベント報告を無効化するか否かを区別し、SAEフィールド1356のコンテンツが抑制が有効であることを示す場合、所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも立ち上げない。
[ラウンドオペレーション制御フィールド1358]当該コンテンツは、ラウンドオペレーションのグループのどれを実行すべきか(例えば、切り上げ、切り捨て、ゼロへの丸め、及び最近接丸め)を区別する。つまり、ラウンドオペレーション制御フィールド1358によれば、命令単位に基づいてラウンドモードの変更が可能となる。プロセッサが複数のラウンドモードを特定するための制御レジスタを含む本願発明の一実施形態において、ラウンドオペレーション制御フィールド1350のコンテンツは、そのレジスタ値を無効にする。
[ノーメモリアクセスの命令テンプレート][データ変換型オペレーション]ノーメモリアクセスデータ変換型オペレーション1315の命令テンプレートにおいて、ベータフィールド1354は、データ変換フィールド1354Bとして、解釈され、当該コンテンツは、多数のデータ変換の中で実行されるべき1つを区別する(例えば、非データ変換、スウィズル、ブロードキャスト)。
メモリアクセス1320のクラスAの命令テンプレートの場合、アルファフィールド1352は、追い出し示唆フィールド1352Bと解釈され、そのコンテンツは、複数の追い出し示唆のどれが用いられるべきかを区別し(図13Aでは、一時的1352B.1及び非一時的1352B.2が、メモリアクセス、一時的1325命令テンプレート及びメモリアクセス、非一時的1330命令テンプレートに対してそれぞれ特定される)、ベータフィールド1354は、データ操作フィールド1354Cと解釈され、そのコンテンツは、多数のデータ操作オペレーション(プリミティブとしてもまた既知)のうちどれが実行されるべきか(例えば、操作なし、ブロードキャスト、ソースのアップコンバート及び送信先のダウンコンバート)を区別する。メモリアクセス1320の複数の命令テンプレートは、スケールフィールド1360、及び任意選択的に、変位フィールド1362Aまたは変位スケールフィールド1362Bを含む。
複数のベクトルメモリ命令は、変換サポートにより、メモリからの複数のベクトルロード、及びメモリへの複数のベクトルストアを実行する。通常の複数のベクトル命令と同様に、実際に送られる複数の要素とともに、データ要素的な様式で、メモリとの間でやり取りする複数のベクトルメモリ命令の転送データは、書き込みマスクとして選択されるベクトルマスクの複数のコンテンツによって命令される。
[メモリアクセスの命令テンプレート][一時的]一時性データは、キャッシュによる利益を十分に受けられるほどすぐに再使用される可能性が高いデータである。これは、しかしながら、示唆であり、複数の異なるプロセッサは、示唆を完全に無視することを含む複数の異なる態様で、これを実装してもよい。
[メモリアクセスの命令テンプレート][非一時的]非一時性データは、第1のレベルのキャッシュでキャッシュによる利益を十分に受けられるほどすぐに再使用される可能性が低いデータであり、追い出しの優先が与えられるべきである。これは、しかしながら、示唆であり、複数の異なるプロセッサは、示唆を完全に無視することを含む複数の異なる態様で、これを実装してもよい。
[クラスBの命令テンプレート]クラスBの命令テンプレートの場合、アルファフィールド1352は、書き込みマスク制御(Z)フィールド1352Cとして解釈され、当該コンテンツは、書き込みマスクフィールド1370によって制御された書き込みマスキングが結合書き込みまたはゼロ書き込みであるべきかを区別する。
非メモリアクセス1305のクラスBの命令テンプレートの場合、ベータフィールド1354の一部分は、RLフィールド1357Aとして解釈され、そのコンテンツは、複数の異なる増加オペレーション型のどれが実行されるべきかを区別する(例えば、ラウンド1357A.1及びベクトル長(VSIZE)1357A.2は、ノーメモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション1312の命令テンプレート及びノーメモリアクセス、書き込みマスク制御、VSIZE型オペレーション1317の命令テンプレートに対してそれぞれ特定される)一方で、ベータフィールド1354の残りは、特定された種類の複数のオペレーションのどれが実行されるべきかを区別する。ノーメモリアクセス1305の命令テンプレートにおいて、スケールフィールド1360、変位フィールド1362A及び変位スケールフィールド1362Bは存在しない。
ノーメモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション1310の命令テンプレートにおいて、ベータフィールド1354の残りは、ラウンドオペレーションフィールド1359Aと解釈され、例外イベント報告は、無効化される(所与の命令は、任意の種類の浮動小数点例外フラグを報告せず、いずれの浮動小数点例外処理部もを立ち上げない)。
[ラウンドオペレーション制御フィールド1359A]単にラウンドオペレーション制御フィールド1358と同じように、当該コンテンツは、ラウンドオペレーションのグループの中のどれを実行すべきか(例えば、切り上げ、切り捨て、ゼロへの丸め、及び最近接丸め)を区別する。つまり、ラウンドオペレーション制御フィールド1359Aによれば、命令単位に基づいてラウンドモードの変更が可能となる。プロセッサが複数のラウンドモードを特定するための制御レジスタを含む本願発明の一実施形態において、ラウンドオペレーション制御フィールド1350のコンテンツは、そのレジスタ値を無効にする。
ノーメモリアクセス、書き込みマスク制御、VSIZE型オペレーション1317の命令テンプレートにおいて、残りのベータフィールド1354は、ベクトル長さフィールド1359Bとして解釈され、当該コンテンツは、多数のデータベクトル長さの中でどれが実行されるべきか(例えば、128、256、または512バイト)を区別する。
メモリアクセス1320のクラスBの命令テンプレートの場合、ベータフィールド1354の一部分は、ブロードキャストフィールド1357Bとして解釈され、当該コンテンツは、ブロードキャスト型データ操作オペレーションが実行されるべきか否かを区別する一方、残りのベータフィールド1354は、ベクトル長さフィールド1359Bとして解釈される。メモリアクセス1320の複数の命令テンプレートは、スケールフィールド1360、及び任意選択的に、変位フィールド1362Aまたは変位スケールフィールド1362Bを含む。
ジェネリックベクトル向け命令フォーマット1300に関して、フルオペコードフィールド1374は、フォーマットフィールド1340、ベースオペレーションフィールド1342、及びデータ要素幅フィールド1364を含むように示されている。フルオペコードフィールド1374がこれらのフィールドのすべてを含む一実施形態が示されるが、フルオペコードフィールド1374は、これらのすべてをサポートしていない複数の実施形態においてこれらの複数のフィールドの一部のみを含む。フルオペコードフィールド1374は、オペレーションコード(オペコード)を提供する。
増加オペレーションフィールド1350、データ要素幅フィールド1364、及び書き込みマスクフィールド1370は、これらの特徴が命令単位に基づいてジェネリックベクトル向け命令フォーマットにおいて特定されることを可能にする。
書き込みマスクフィールド及びデータ要素幅フィールドの組み合わせは、複数の異なるデータ要素幅に基づいてマスクが適用されることを可能にする分類された命令を生成する。
クラスA及びクラスB内で見られる様々な命令テンプレートは、異なる状況において有益である。本願発明のいくつかの実施形態において、複数の異なるプロセッサまたはプロセッサ内の複数の異なるコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートしてもよい。例えば、汎用コンピューティング向けの高性能汎用アウトオブオーダコアは、クラスBのみをサポートしてもよく、主にグラフィックス及び/または科学的(スループット)コンピューティング向けのコアは、クラスAのみをサポートしてもよく、両方向けのコアは、両方をサポートしてもよい(勿論、両方のクラスの複数のテンプレート及び複数の命令のいくつかの組み合わせを有するが、両方のクラスのすべてのテンプレート及び命令を有しないコアは本願発明の範囲内にある訳ではない)。また、単一のプロセッサは、複数のコアを含んでもよく、その複数のコアのすべては、同一のクラスをサポートし、または複数のコアの中で複数の異なるコアは、異なるクラスをサポートする。例えば、別個のグラフィックス及び汎用コアを有するプロセッサでは、主にグラフィックス及び/または科学的コンピューティング向けの複数のグラフィックスコアの1つは、クラスAのみをサポートしてもよく、複数の汎用コアのうちの1つまたは複数は、クラスBのみをサポートする汎用コンピューティング向けのアウトオブオーダ実行及びレジスタリネーミングを伴う高性能な複数の汎用コアであってもよい。別個のグラフィックスコアを有しない別のプロセッサは、クラスA及びクラスBの両方をサポートする汎用インオーダまたはアウトオブオーダコアをもう1つ含んでもよい。勿論、1つのクラスからの複数の特徴はまた、本願発明の複数の異なる実施形態における他のクラスで実装されてもよい。高水準言語で記述される複数のプログラムは、1)実行のために対象プロセッサによってサポートされるクラスの複数の命令のみを有する形式、または2)全クラスの複数の命令の複数の異なる組み合わせを用いて記述される代替的な複数のルーチンを有し、コードを現在実行しているプロセッサによりサポートされる複数の命令に基づいて実行する、複数のルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能な形式にされる(例えば、ジャストインタイムでコンパイルされ、または静的にコンパイルされる)。
[例示的特定ベクトル向け命令フォーマット]
図14Aは、本願発明の複数の実施形態に係る例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図14Aは、フィールドの位置、サイズ、解釈、順序、及びそれらのフィールドのうちのいくつかの値を特定するという意味において特定ベクトル向け命令フォーマット1400を示す。特定ベクトル向け命令フォーマット1400は、x86命令セットを拡張するために用いられてもよく、これにより、複数のフィールドのいくつかは、既存のx86命令セット及びその拡張(例えば、AVX)に用いられたものと同様のまたは同一となる。 このフォーマットは、拡張された既存のx86命令セットのプレフィックス符号化フィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド及び複数の即値フィールドと整合性のある状態を保つ。図13A−Bの複数のフィールド内にマッピングする図14A−Dの複数のフィールドが示されている。
理解されるべきことは、本願発明の複数の実施形態が、例示の目的のために、ジェネリックベクトル向け命令フォーマット1300との関連で特定ベクトル向け命令フォーマット1400を参照して説明されるが、本願発明は、特許請求された場合を除き、特定ベクトル向け命令フォーマット1400に限定されない。例えば、ジェネリックベクトル向け命令フォーマット1300は、様々な複数のフィールドに適用可能な様々な複数のサイズを検討し、特定ベクトル向け命令フォーマット1400は、複数の特定のサイズの様々なフィールドを有するものとして示される。具体的な例として、データ要素幅フィールド1364は、特定ベクトル向け命令フォーマット1400の1ビットフィールドとして示されるが、本願発明は、このように限定されるものではない(すなわち、ジェネリックベクトル向け命令フォーマット1300は、データ要素幅フィールド1364の複数の他のサイズを検討する)。
ジェネリックベクトル向け命令フォーマット1300は、図14Aに示される順序で、下で列挙される複数の以下のフィールドを含む。EVEXプレフィックス(バイト0−3)1402は、4バイト形式で符号化される。
[フォーマットフィールド1340(EVEX バイト0、ビット[7:0])]第1のバイト(EVEX バイト0)は、フォーマットフィールド1340であり、これは、0x62(本願発明の一実施形態において、ベクトル向け命令フォーマットを区別するために用いられる固有値)を含む。
第2−第4のバイト(EVEX バイト1−3)は、特定の性能を提供する多数のビットフィールドを含む。
REXフィールド1405(EVEX バイト1、ビット[7−5])は、EVEX.Rビットフィールド(EVEX バイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEX バイト1、ビット[6]−X)及び1357BEX バイト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'フィールド1310]これは、REX'フィールド1310の第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を組み合わせることによって形成される。
[オペコードマップフィールド1415(EVEX バイト1、ビット[3:0]−mmmm)]当該コンテンツは、暗示された先頭オペコードバイト(0F、0F 38または0F 3)を符号化する。
[データ要素幅フィールド1364(EVEX バイト2、ビット[7]−W)]表記EVEX.Wにより表される。EVEX.Wは、データタイプの粒度(サイズ)を定義するために用いられる(32ビットのデータ要素または64ビットのデータ要素のいずれか)。
[EVEX.vvvv1420(EVEX バイト2、ビット[6:3]−vvvv)]EVEX.vvvvの役割は、以下を含み得る。1)EVEX.vvvvは、反転(1の補数)形式で指定される第1のソースレジスタオペランドを符号化し、2つまたはそれより多くのソースオペランドを有する複数の命令に対して有効であり、2)EVEX.vvvvは、特定の複数のベクトルシフトに対して1の補数形式で特定される送信先レジスタオペランドを符号化し、または3)EVEX.vvvvは、いずれのオペランドも符号化せず、フィールドは保持されて1111bを含むべきである。つまり、EVEX.vvvvフィールド1420は、反転(1の補数)形式で記憶された第1のソースレジスタの特定子の下位4ビットを符号化する。命令に依存して、追加の異なるEVEXビットフィールドは、特定子サイズを32のレジスタに拡張するために用いられる。
[EVEX.U 1368クラスフィールド(EVEX バイト2、ビット[2]−U)]EVEX.U=0の場合、クラスAまたはEVEX.U0を示し、EVEX.U=1の場合、クラスBまたはEVEX.U1を示す。
[プレフィックス符号化フィールド1425(EVEX バイト2、ビット[l: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を再設計し得、したがって、拡張を必要としない。
[アルファフィールド1352(EVEX バイト3、ビット[7]−EH、また、EVEX.EH,EVEX.rs,EVEX.RL,EVEX.write mask control、及びEVEX.Nとしても知られており、またαで示される)]前述されたように、このフィールドは、状況に応じる。
[ベータフィールド1354(EVEX バイト3、ビット[6:4]−SSS、またEVEX.s2−0,EVEX.r2−0,EVEX.rrl,EVEX.LL0,EVEX.LLBとしても知られており、またβββで示される)]前述されたように、このフィールドは、状況に応じる。
[REX'フィールド1310]これは、REX'フィールドの残りであり、拡張された32のレジスタセットの上位16または下位16のいずれかを符号化するのに用いられ得るEVEX.V'ビットフィールド(EVEX バイト3、ビット[3]−V')である。このビットは、ビット反転フォーマットで記憶される。値1は、下位16のレジスタを符号化するために用いられる。言い換えると、V'VVVVは、EVEX.V'、EVEX.vvvvを組み合わせることによって形成される。
[書き込みマスクフィールド1370(EVEX バイト3、ビット[2:0]−kkk)]当該コンテンツは、前述されたように、書き込みマスクレジスタにおけるレジスタのインデックスを特定する。本願発明の一実施形態において、特定の値EVEX.kkk=000は、特定の命令のために用いられる書き込みマスクがないことを示唆する特別な動作を有する(これは、すべてハードワイヤードされた書き込みマスクまたはマスキングハードウェアを回避するハードウェアの使用を含む、様々な態様で実装されてもよい)。
リアルオペコードフィールド1430(バイト4)はまた、オペコードバイトとしても知られる。オペコードの一部分は、このフィールドで特定される。
MOD R/Mフィールド1440(バイト5)は、MODフィールド1442、Regフィールド1444及びR/Mフィールド1446を含む。前述されたように、MODフィールド1442のコンテンツは、メモリアクセスと非メモリアクセスオペレーションとを区別する。Regフィールド1444の役割は、送信先レジスタオペランドまたはソースレジスタオペランドのいずれかを符号化する、もしくはオペコード拡張として扱われ、いずれの命令オペランドを符号化するためにも用いられないという、2つの状況に要約されることができる。 R/Mフィールド1446の役割は、メモリアドレスを参照する命令オペランドの符号化、もしくは送信先レジスタオペランドまたはソースレジスタオペランドのいずれかの符号化を含んでもよい。
[スケール、インデックス、ベース(SIB)バイト(バイト6)]前述されたように、スケールフィールド1350のコンテンツは、メモリアドレス生成のために用いられる。[SIB.xxx1454及びSIB.bbb1456]これらの複数のフィールドの複数のコンテンツは、複数のレジスタインデックスXxxx及びBbbbに関して前で参照された。
[変位フィールド1362A(バイト7−10)]MODフィールド1442が10を含む場合、バイト7−10は、変位フィールド1362Aであり、これは、レガシ32ビット変位(disp32)と同じく機能し、バイト粒度において機能する。
[変位ファクタフィールド1362B(バイト7)]MODフィールド1442が01を含む場合、バイト7は、変位ファクタフィールド1362Bである。このフィールドの位置は、バイト粒度において機能するレガシx86命令セットの8ビット変位(disp8)と同一である。disp8は符号拡張であるため、これは、−128から127バイトまでの間の複数のオフセットにのみアドレスすることができ、64バイトの複数のキャッシュラインの観点から、disp8は、実に有用な4つの値−128、−64、0及び64にのみ設定可能な8ビットを用い、より広い範囲が必要となる場合が多いことからdisp32が用いられるが、しかしながら、disp32は4バイトを必要とする。disp8及びdisp32と対照的に、変位ファクタフィールド1362Bは、disp8の再解釈であり、変位ファクタフィールド1362Bを用いる場合、実際の変位は、メモリオペランドアクセス(N)のサイズによって乗じられた変位ファクタフィールドのコンテンツによって決定される。この種類の変位は、disp8*Nと称される。これにより、平均命令長さ(変位のために用いられる単一のバイトであるが、はるかにより広い範囲を有する)が減少する。このような圧縮された変位は、有効変位がメモリアクセスの粒度の倍数であるという前提に基づくことによって、アドレスオフセットの複数の冗長下位ビットは、符号化されることを必要としない。言い換えると、変位ファクタフィールド1362Bは、レガシx86命令セットの8ビット変位を代替する。つまり、変位ファクタフィールド1362Bは、disp8がdisp8*Nに対してオーバーロードされるという場合のみを除き、x86命令セットの8ビット変位と同一態様で符号化される(そのためModRM/SIB符号化の複数の規則は変更されない)。言い換えると、(バイト単位のアドレスオフセットを得るために、メモリオペランドのサイズで変位をスケーリングする必要がある)ハードウェアによる変位値の解釈のみを除き、符号化の複数の規則または符号化の複数の長さは変更されない。即値フィールド1372は前述されたように動作する。
[フルオペコードフィールド]
図14Bは、本願発明の一実施形態に係るフルオペコードフィールド1374を構成する特定ベクトル向け命令フォーマット1400の複数のフィールドを示すブロック図である。具体的には、フルオペコードフィールド1374は、フォーマットフィールド1340、ベースオペレーションフィールド1342及びデータ要素幅(W)フィールド1364を含む。ベースオペレーションフィールド1342は、プレフィックス符号化フィールド1425、オペコードマップフィールド1415及びリアルオペコードフィールド1430を含む。
[レジスタインデックスフィールド]
図14Cは、本願発明の一実施形態に係るレジスタインデックスフィールド1344を構成する特定ベクトル向け命令フォーマット1400の複数のフィールドを示すブロック図である。
具体的には、レジスタインデックスフィールド1344は、REXフィールド1405、REX' フィールド1410、MODR/M.regフィールド1444、MODR/M.r/mフィールド1446、vvvvフィールド1420、xxxフィールド1454、及びbbbフィールド1456を含む。
[増加オペレーションフィールド]
図14Dは、本願発明の一実施形態に係る増加オペレーションフィールド1350を構成する特定ベクトル向け命令フォーマット1400の複数のフィールドを示すブロック図である。クラス(U)フィールド1368が0を含む場合、これは、EVEX.U0(クラスAの1368A)を示し、これが1を含む場合、これは、EVEX.U1(クラスBの1368B)を示す。U=0、かつMODフィールド1442が11を含む(ノーメモリアクセスオペレーションを示す)場合、アルファフィールド1352(EVEX バイト3、ビット[7]−EH)は、RSフィールド1352Aとして解釈される。RSフィールド1352Aが1を含む場合(ラウンド1352A.1)、ベータフィールド1354(EVEX バイト3、ビット[6:4]−SSS)は、ラウンド制御フィールド1354Aとして解釈される。ラウンド制御フィールド1354Aは、1ビットのSAEフィールド1356及び2ビットのラウンドオペレーションフィールド1358を含む。RSフィールド1352Aが0を含む場合(データ変換1352A.2)、ベータフィールド1354(EVEX バイト3、ビット[6:4]−SSS)は、3ビットのデータ変換型フィールド1354Bとして解釈される。U=0、かつMODフィールド1442が00、01、または10を含む(メモリアクセスオペレーションを示す)場合、アルファフィールド1352(EVEX バイト3、ビット[7]−EH)は、追い出し示唆(EH)フィールド1352Bとして解釈され、ベータフィールド1354(EVEX バイト3、ビット[6:4]−SSS)は、3ビットのデータ操作フィールド1354Cとして解釈される。
U=1の場合、アルファフィールド1352(EVEX バイト3、ビット[7]−EH)は、書き込みマスク制御(Z)フィールド1352Cとして解釈される。U=1、かつMODフィールド1442が11を含む(ノーメモリアクセスオペレーションを示す)場合、ベータフィールド1354の一部分(EVEX バイト3、ビット[4]−S0)は、RLフィールド1357Aとして解釈され、これが1を含む(ラウンド1357A.1)場合、残りのベータフィールド1354(EVEX バイト3、ビット[6−5]−S2−1)は、ラウンドオペレーションフィールド1359Aとして解釈され、RLフィールド1357Aが0を含む(VSIZE1357.A2)場合、残りのベータフィールド1354(EVEX バイト3、ビット[6−5]−S2−1)は、ベクトル長さフィールド1359B(EVEXバイト3、ビット[6−5]−L1−0)として解釈される。U=1、MODフィールド1442が(メモリアクセスオペレーションを示す)00、01、または10を含む場合、ベータフィールド1354(EVEX バイト3、ビット[6:4]―SSS)は、ベクトル長さフィールド1359B(EVEX バイト3、ビット[6−5]−L1−0)及びブロードキャストフィールド1357B(EVEX バイト3、ビット[4]−B)として解釈される。
[例示的レジスタアーキテクチャ]
図15は、本願発明の一実施形態に係るレジスタアーキテクチャ1500のブロック図である。示された実施形態において、32の512ビット幅のベクトルレジスタ1510があり、これらのレジスタは、zmm0からzmm31として参照される。下位256ビット下位16のzmmレジスタは、レジスタymm0−16に対してオーバーレイされる。下位128ビットの下位16のzmmレジスタ(下位128ビットの複数のymmレジスタ)は、レジスタXMM0−15に対してオーバーレイされる。以下の表に示されているように、特定ベクトル向け命令フォーマット1400は、これらのオーバーレイされたレジスタファイル上で動作する。
言い換えると、ベクトル長さフィールド1359Bは、最大長さ及び1つまたは複数の他のより短い長さの間から選択を行う。ここでそのようなより短い長さの各々は先行する長さの半分であり、ベクトル長さフィールド1359Bを有しない複数の命令テンプレートは、最大ベクトル長さで動作する。さらに、一実施形態において、特定ベクトル向け命令フォーマット1400のクラスBの命令テンプレートは、パックドまたはスカラ単/倍精度浮動小数点データ及びパックドまたはスカラ整数データに対して動作する。複数のスカラ演算は、zmm/ymm/xmmレジスタの最下位データ要素位置に対して実行される複数の演算であり、上位の複数のデータ要素位置は、実施形態に依存して、命令前と同一の状態で残されるまたはゼロを書き込まれるのいずれかである。
[書き込みマスクレジスタ1515]示された実施形態では、8の書き込みマスクレジスタが存在し(k0からk7)、各々のサイズは64ビットである。代替的な実施形態では、複数の書き込みマスクレジスタ1515は、16ビットのサイズである。前述されたように、本願発明の一実施形態において、ベクトルマスクレジスタk0は、書き込みマスクとして用いられることができず、通常k0を示す符号化が書き込みマスクのために用いられる場合、0xFFFFのハードワイヤードされた書き込みマスクを選択し、効果的に命令のための書き込みマスキングを無効にする。
[複数の汎用レジスタ1525]示された実施形態では、複数のメモリオペランドにアドレスする既存の複数のx86アドレッシングモードと共に用いられる16の64ビット汎用レジスタが存在する。これらの複数のレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP及びR8からR15という名で称される。
[MMXパックド整数フラットレジスタファイル1550がエイリアスされるスカラ浮動小数点スタックレジスタファイル(x87スタック)1545]示された実施形態において、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(場合によってはアプリケーションコアまたはアプリケーションプロセッサと称される)、上で説明されたコプロセッサ及び追加的な機能性を含み得るシステムオンチップを含み得る、複数の異なるコンピュータシステムアーキテクチャをもたらす。複数の例示的なコアアーキテクチャが、次に説明され、次いで、例示的な複数のプロセッサ及び複数のコンピュータアーキテクチャが説明される。
[例示的なコアアーキテクチャ]
[インオーダ及びアウトオブオーダコアのブロック図]
図16Aは、本願発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図16Bは、本願発明の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図16A−Bの複数の実線のボックスは、インオーダパイプライン及びインオーダコアを示し、任意的追加の複数の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行/実行パイプライン及びコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様について説明する。
図16Aにおいて、プロセッサパイプライン1600は、フェッチステージ1602、長さ復号ステージ1604、復号ステージ1606、割り当てステージ1608、リネーミングステージ1610、スケジューリング(ディスパッチまたは発行としても知られる)ステージ1612、レジスタ読み出し/メモリ読み出しステージ1614、実行ステージ1616、ライトバック/メモリ書き込みステージ1618、例外処理ステージ1622、及びコミットステージ1624を含む。
図16Bは、実行エンジンユニット1650に連結されるフロントエンドユニット1630を含むプロセッサコア1690を示し、実行エンジンユニット1650とフロントエンドユニット1630の両方がメモリユニット1670に連結される。コア1690は、縮小命令セットコンピュータ(RISC)コア、複合命令セットコンピュータ(CISC)コア、超長命令語(VLIW)コアまたはハイブリッドもしくは代替的なコアタイプであってもよい。さらに他のオプションとして、コア1690は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックスプロセッシングユニット(GPGPU)コア、グラフィックスコア、または同様なものような特定用途向けコアであってもよい。
フロントエンドユニット1630は、命令キャッシュユニット1634に連結される分岐予測ユニット1632を含み、命令キャッシュユニット1634は命令トランスレーションルックアサイドバッファ(TLB)1636に連結され、TLB1636は、命令フェッチユニット1638に連結され、命令フェッチユニット1638は、復号ユニット1640に連結される。復号ユニット1640(またはデコーダ)は、複数の命令を復号化し、出力として、1つまたは複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または元の複数の命令から復号化された、もしくはこれらを他の方法で反映する、もしくはこれらから派生された他の制御信号を生成してもよい。復号ユニット1640は、複数の様々な異なる機構を用いて実装されてもよい。適切な複数の機構の例は、限定されないが、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ(PLA)、複数のマイクロコードリードオンリメモリ(ROM)などを含む。一実施形態において、コア1690は、マイクロコードROMまたは(例えば、復号ユニット1640、さもなければフロントエンドユニット1630内で)特定の複数のマクロ命令に対するマイクロコードを記憶する他の媒体を含む。復号ユニット1640は、実行エンジンユニット1650内のリネーミング/アロケータユニット1652に連結される。
実行エンジンユニット1650は、リタイアメントユニット1654及び1つまたは複数のスケジューラユニット1656のセットに連結されたリネーミング/アロケータユニット1652を含む。スケジューラユニット1656は、予約ステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット1656は、物理レジスタファイルユニット1658に連結される。物理レジスタファイルユニット1658の各々は、1つまたは複数の物理レジスタファイルを表し、そのうち複数の異なるものが、(例えば、実行されるべき次の命令のアドレスである命令ポインタなどの)スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、状態のような、1つまたは複数の異なるデータタイプを記憶する。
一実施形態において、物理レジスタファイルユニット1658は、ベクトルレジスタユニット、書き込みマスクレジスタユニット及びスカラレジスタユニットを備える。これらの複数のレジスタユニットは、複数のアーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ及び汎用レジスタを提供してもよい。物理レジスタファイルユニット1658は、リタイアメントユニット1654により重複され、(例えば、リオーダバッファ及びリタイアレジスタファイルを用いて、フューチャファイル、履歴バッファ、及びリタイアレジスタファイルを用いて、レジスタマップ及びレジスタのプールを用いるなど)レジスタリネーミング及びアウトオブオーダ実行が実施され得るという様々な態様を示す。リタイアメントユニット1654及び物理レジスタファイルユニット1658は、実行クラスタ1660に連結される。実行クラスタ1660は、1つまたは複数の実行ユニット1662のセット及び1つまたは複数のメモリアクセスユニット1664のセットを含む。複数の実行ユニット1662は、様々な種類のデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して、様々な演算(例えば、複数のシフト、加算、減算、乗算)を実行してもよい。いくつかの実施形態は、具体的な複数の関数または複数の関数の複数のセット専用の多数の実行ユニットを含んでもよく、複数の他の実施形態は、1つのみの実行ユニットまたはすべての関数をすべてが実行する複数の実行ユニットを含んでもよい。スケジューラユニット1656、物理レジスタファイルユニット1658及び実行クラスタ1660は、複数として示される可能性があるが、その理由は、複数の特定の実施形態は、データ/演算の複数の特定の種類に対して複数の別個のパイプラインを生成するからである(例えば、各々の自己のスケジューラユニット、物理レジスタファイルユニット及び/または実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/またはメモリアクセスパイプライン、及び、別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット1664を有する複数の特定の実施形態が実装される)。複数の別個のパイプラインが用いられる場合、これらのパイプラインのうちの1つまたは複数がアウトオブオーダ発行/実行であり、残りがインオーダであってもよいこともまた理解されるべきである。
メモリアクセスユニット1664のセットは、メモリユニット1670に連結され、メモリユニット1670は、データキャッシュユニット1674に連結されるデータTLBユニット1672を含み、データキャッシュユニット1674は、レベル2(L2)キャッシュユニット1676に連結される。一例示的な実施形態では、メモリアクセスユニット1664は、ロードユニット、ストアアドレスユニット及びストアデータユニットを含んでもよく、これらの各々は、メモリユニット1670内のデータTLBユニット1672に連結される。命令キャッシュユニット1634は、メモリユニット1670内のレベル2(L2)キャッシュユニット1676に、さらに連結される。L2キャッシュユニット1676は、1つまたは複数の他のレベルのキャッシュ、及び最終的にはメインメモリに連結される。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン1600を以下のように実装してもよい。
1)命令フェッチ1638が、フェッチステージ1602及び長さ復号化ステージ1604を実行し、2)復号ユニット1640が、復号ステージ1606を実行し、3)リネーミング/アロケータユニット1652が、割り当てステージ1608及びリネーミングステージ1610を実行し、4)スケジューラユニット1656が、スケジューリングステージ1612を実行し、5)物理レジスタファイルユニット1658及びメモリユニット1670が、レジスタ読み出し/メモリ読み出しステージ1614を実行し、実行クラスタ1660が、実行ステージ1616を実行し、6)メモリユニット1670及び物理レジスタファイルユニット1658が、ライトバック/メモリ書き込みステージ1618を実行し、7)様々な複数のユニットが、例外処理ステージ1622に関与してもよく、かつ8)リタイアメントユニット1654及び物理レジスタファイルユニット1658が、コミットステージ1624を実行する。
コア1690は、本明細書で説明される命令を含む1つまたは複数の命令セット(例えば、x86命令セット(複数のより新たなバージョンで追加されたいくつかの拡張を有する)カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARM ホールディンス(ARM Holdings)の(NEONのような任意的追加の拡張を有する)ARM命令セット)をサポートしてもよい。一実施形態において、コア1690は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートする論理を含み、それにより、パックドデータを用いて実行されるべき多くのマルチメディアアプリケーションにより用いられる複数のオペレーションを可能にする。
コアは、マルチスレッディング(複数のオペレーションまたはスレッドの2つまたはそれより多くの並列なセットを実行すること)をサポートしてもよく、時分割マルチスレッディング、同時マルチスレッディング(ここで、単一の物理コアは、物理コアが同時マルチスレッディングを実行する複数のスレッドの各々に、論理コアを提供する)、またはそれらの組み合わせ(例えば、時分割フェッチ及び復号化、その後、インテル(登録商標)ハイパースレッディングテクノロジでのような同時マルチスレッディング)を含む複数の様々な態様で、これを実行してもよいことを理解されるべきである。
レジスタリネーミングがアウトオブオーダ実行との関連で説明されている一方、インオーダアーキテクチャにおいて、レジスタリネーミングが用いられてもよいことを理解されるべきである。プロセッサの例示された実施形態は、別個の命令及びデータキャッシュユニット1634/1674、及び共有のL2キャッシュユニット1676をさらに含むが、複数の代替的な実施形態は、複数の命令及びデータの両方のために、例えば、レベル1(L1)内部キャッシュ、または複数のレベルの内部キャッシュのような単一の内部キャッシュを有してもよい。いくつかの実施形態において、システムは、内部キャッシュとコア及び/またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでもよい。代替的には、すべてのキャッシュは、コア及び/またはプロセッサの外部にあってもよい。
[例示的なインオーダコアアーキテクチャの詳細]
図17A−Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、当該コアは、チップ内の(同一種類及び/または異なる種類の他の複数のコアを含む)いくつかの論理ブロックのうちの1つであり得る。複数の論理ブロックは、用途に応じて、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を介して、いくつかの固定関数論理、メモリI/Oインターフェース及び他の必要なI/O論理と通信を行う。
図17Aは、本願発明の複数の実施形態に係るオンダイ相互接続ネットワーク1702との接続と共に、自己のレベル2(L2)キャッシュローカルサブセット1704を有する単一プロセッサコアのブロック図である。一実施形態において、命令デコーダ1700は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ1706によれば、キャッシュメモリによる、スカラ及びベクトルユニットへの低レイテンシアクセスが可能である。一実施形態において(設計の簡潔化のために)、スカラユニット1708及びベクトルユニット1710は、別個の複数のレジスタセット(それぞれ、複数のスカラレジスタ1712及び複数のベクトルレジスタ1714)を用い、これらの間で送られるデータは、メモリに書き込まれ、次にレベル1(L1)キャッシュ1706から再読み出しされるが、本願発明の複数の代替的な実施形態は、異なるアプローチ(例えば、単一のレジスタセットを用い、または、データが書き込み及び再読み出しされることなく2つのレジスタファイル間で送られることを可能にする通信パスを含む)を用いてもよい。
L2キャッシュローカルサブセット1704は、プロセッサコアあたり1つの別個のローカルサブセットに分割されるグローバルL2キャッシュの一部分である。各プロセッサコアは、自己のL2キャッシュローカルサブセット1704に対するダイレクトアクセスパスを有する。プロセッサコアに読み出されたデータは、自己のL2キャッシュサブセット1704に記憶され、迅速かつ、これらの自己の複数のローカルL2キャッシュサブセットにアクセスする複数の他のプロセッサコアと並列に、アクセスされることができる。プロセッサコアに書き込まれたデータは、自己のL2キャッシュサブセット1704に記憶され、必要な場合には、他の複数のサブセットからフラッシュされる。 リングネットワークは、共有のデータに対するコヒーレンシを保証する。リングネットワークが双方向であることにより、複数のプロセッサコア、複数のL2キャッシュ及び複数の他の論理ブロックなどのエージェントは、チップ内で互いに通信を行うことができる。各リングデータパスは、1方向あたり1012ビット幅である。
図17Bは、本願発明の複数の実施形態に係る図17Aのプロセッサコアの一部分の拡張図である。図17Bは、L1キャッシュ1706の一部分であり、ベクトルユニット1710及びベクトルレジスタ1714に関する更なる詳細となるL1データキャッシュ1706Aも含む。具体的には、ベクトルユニット1710は、16ワイドのベクトル処理ユニット(VPU)(16ワイドALU1728を参照)であり、1つまたは複数の整数、単精度浮動小数点及び倍精度浮動小数点命令を実行する。VPUは、スウィズルユニット1720による複数のレジスタ入力のスウィズル、数値変換ユニット1722A−Bによる数値変換、及び複製ユニット1724によるメモリ入力に対する複製をサポートする。 書き込みマスクレジスタ1726によれば、結果的な複数のベクトルの書き込みを叙述することが可能となる。
[統合メモリコントローラ及びグラフィックスを有するプロセッサ]
図18は、本願発明の複数の実施形態に係る、1つより多いコアを有し得、統合メモリコントローラを有し得、かつ、統合グラフィックスを有し得るプロセッサ1800のブロック図である。図18の複数の実線のボックスは、単一のコア1802A、システムエージェント1810、1つまたは複数のバスコントローラユニット1816のセットを有するプロセッサ1800を示し、任意的に追加の複数の破線のボックスは、複数のコア1802A−Nを有する代替的なプロセッサ1800、システムエージェントユニット1810内の1つまたは複数の統合メモリコントローラユニット1814のセット及び特定用途向けロジック1808を示す。
したがって、プロセッサ1800の異なる実装は、1)統合グラフィックス及び/または科学的(スループット)論理(1つまたは複数のコアを備えることができる)である特定用途向けロジック1808と、1つまたは複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、これらの2つの組み合わせ)であるコア1802A―Nとを有するCPUと、2)主にグラフィックス及び/または科学(スループット)向けの多数の特定用途向けコアであるコア1802A−Nを有するコプロセッサと、3)多数の汎用インオーダコアであるコア1802A−Nを有するコプロセッサを含み得る。したがって、プロセッサ1800は、汎用プロセッサ、コプロセッサまたは、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、(30またはそれより多くのコアを含む)高スループット多数集積コア(MIC)コプロセッサ、エンベデッドプロセッサなどのような特定用途向けプロセッサであってよい。プロセッサは、1つまたは複数のチップ上に実装されてもよい。プロセッサ1800は、例えば、BiCMOS、CMOSまたはNMOSなどの多数の処理技術のいずれかを用いて、1つまたは複数の基板の一部分であってもよく、及び/またはその上に実装されてもよい。
メモリ階層は、複数のコア、1つまたは複数の共有キャッシュユニット1806またはそのセット、及び複数の統合メモリコントローラユニット1814のセットに連結される外部メモリ(図示せず)内に、1つまたは複数のレベルのキャッシュを含む。複数の共有キャッシュユニット1806のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)または他の複数のレベルのキャッシュなどの1つまたは複数の中レベルキャッシュ、ラストレベルのキャッシュ(LLC)及び/またはそれらの組み合わせを含んでもよい。一実施形態において、リングベースの相互接続ユニット1812が、統合グラフィックスロジック1808、複数の共有キャッシュユニット1806のセット及びシステムエージェントユニット1810/統合メモリコントローラユニット1814を相互接続するが、複数の代替的な実施形態は、そのような複数のユニットを相互接続するための任意の数の周知技術を用いてもよい。一実施形態において、1つまたは複数のキャッシュユニット1806と複数のコア1802A−Nとの間で、コヒーレンシが維持される。
いくつかの実施形態において、1つまたは複数のコア1802A―Nは、マルチスレッディングに対応可能である。システムエージェント1810は、複数のコア1802A−Nの調整及び操作を行うこれらの構成要素を含む。システムエージェントユニット1810は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを含んでもよい。PCUは、複数のコア1802A−N及び統合グラフィックスロジック1808の電力状態を調整するために必要なロジック及び複数の構成要素であってもよく、またはこれらを含んでもよい。ディスプレイユニットは、1つまたは複数の外部接続ディスプレイを駆動するためのものである。
コア1802A−Nは、アーキテクチャ命令セットの観点から同種であっても異種であってもよく、すなわち、2つまたはそれより多くのコア1802A−Nは、同一の命令セットを実行することができてよい一方、他の複数のものは、命令セットのサブセットまたは異なる命令セットのみを実行することができる。
[例示的なコンピュータアーキテクチャ]
図19−22は、複数の例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型PC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタルシグナルプロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス及び様々な他の電子デバイス用の当技術分野で既知の他の複数のシステム設計及び複数の構成もまた、適切である。概して、本明細書で開示されるように、プロセッサ及び/または他の実行論理を組み込み可能な多様なシステムまたは電子デバイスが、概して適切である。
ここで、図19を参照すると、本願発明の一実施形態に係るコンピューティングシステム1900のブロック図が示されている。システム1900は、コントローラハブ1920に連結される1つまたは複数のプロセッサ1910、1915を含んでもよい。一実施形態において、コントローラハブ1920は、(別個のチップ上であってよい)グラフィックスメモリコントローラハブ(GMCH)1990及び入力/出力ハブ(IOH)1950を含み、GMCH1990は、メモリ1940及びコプロセッサ1945に連結されるメモリ及びグラフィックスコントローラを含み、IOH1950は、入力/出力(I/O)デバイス1960をGMCH1990に連結させる。代替的には、メモリ及びグラフィックスコントローラの一方または両方は、プロセッサ内に集積され(本明細書に説明されているように)、メモリ1940及びコプロセッサ1945は、プロセッサ1910及び単一のチップ内でIOH1950を有するコントローラハブ1920に直接連結される。
追加のプロセッサ1915の任意的という性質は、図19において破線によって示されている。各プロセッサ1910、1915は、本明細書で説明される複数の処理コアのうちの1つまたは複数を含んでもよく、プロセッサ1800のいくつかのバージョンであってもよい。
メモリ1940は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、位相変化メモリ(PCM)、またはそれら2つの組み合わせであってよい。少なくとも一実施形態について、コントローラハブ1920は、フロントサイドバス(FSB)のようなマルチドロップバス、クイックパスインターコネクト(QPI)のようなポイントツーポイントインターフェースまたは同様の接続1995を介して、プロセッサ1910、1915と通信を行う。
一実施形態において、コプロセッサ1945は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、エンベデッドプロセッサなどのような特定用途向けプロセッサである。一実施形態において、コントローラハブ1920は、統合グラフィックスアクセラレータを含んでもよい。
アーキテクチャ上の、マイクロアーキテクチャ上の、熱の、複数の電力消費特性等を含む様々な利益の基準の観点から、物理ソース1910、1915間には様々な違いがあり得る。
一実施形態において、プロセッサ1910は、一般的な種類の複数のデータ処理オペレーションを制御する複数の命令を実行する。複数の命令内に、複数のコプロセッサ命令が組み込まれていてもよい。プロセッサ1910は、これらの複数のコプロセッサ命令を、取り付けられたコプロセッサ1945によって実行されるべき種類のものと認識する。従って、プロセッサ1910は、これらの複数のコプロセッサ命令(または複数のコプロセッサ命令を表す複数の制御信号)を、コプロセッサバスまたは他の相互接続上で、コプロセッサ1945に対して発行する。コプロセッサ1945は、受信された複数のコプロセッサ命令を受け付けて実行する。
ここで、図20を参照すると、本願発明の実施形態に係る第1のより具体的な例示的コンピューティングシステム2000のブロック図が示されている。図20に示されるように、マルチプロセッサシステム2000は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続2050を介して連結される第1のプロセッサ2070及び第2のプロセッサ2080を含む。プロセッサ2070及び2080の各々は、いくつかのバージョンのプロセッサ1800であってもよい。本願発明の一実施形態において、プロセッサ2070及び2080は、それぞれプロセッサ1910及び1915である一方、コプロセッサ2038は、コプロセッサ1945である。別の実施形態において、プロセッサ2070及び2080は、それぞれ、プロセッサ1910及びコプロセッサ1945である。
プロセッサ2070及び2080は、統合メモリコントローラ(IMC)ユニット2072及び2082をそれぞれ含むものとして示される。プロセッサ2070はまた、自己のバスコントローラユニットの一部分として、複数のポイントツーポイント(P−P)インターフェース2076及び2078を含み、同様に、第2のプロセッサ2080は、複数のP−Pインターフェース2086及び2088を含む。複数のプロセッサ2070、2080は、複数のP−Pインターフェース回路2078、2088を用いたポイントツーポイント(P−P)インターフェース2050を介して、情報を交換してもよい。図20に示されるように、IMC2072及び2082は、複数のプロセッサをそれぞれのメモリ、すなわち、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部分となり得るメモリ2032及びメモリ2034に連結する。
プロセッサ2070、2080は各々、ポイントツーポイントインターフェース回路2076、2094、2086、2098を用いる個々のP−Pインターフェース2052、2054を介して、チップセット2090と情報を交換してもよい。チップセット2090は、高性能インターフェース2039を介して、コプロセッサ2038と任意選択的に情報を交換してもよい。一実施形態において、コプロセッサ2038は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、エンベデッドプロセッサ、または同様のもののような特定用途向けプロセッサである。
共有キャッシュ(図示せず)は、いずれかのプロセッサに含まれてもよく、あるいは両方のプロセッサの外側にあってもよいが、プロセッサが低電力モード内で配置されても、いずれかのまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに記憶され得るように、P−P相互接続を介して複数のプロセッサに接続される。
チップセット2090は、インターフェース2096を介して、第1のバス2016に連結されてもよい。一実施形態において、第1のバス2016は、周辺構成要素相互接続(PCI)バス、または、PCIエクスプレスバスもしくは別の第3の生成I/О相互接続バスのようなバスであり得るが、本願発明の範囲はそれに限定されない。
図20に示されるように、様々なI/Oデバイス2014が、第1のバス2016を第2のバス2020に連結するバスブリッジ2018と共に、第1のバス2016に連結されてもよい。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPUのアクセラレータ(例えば、グラフィックスアクセラレータもしくはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどの1つまたは複数の追加のプロセッサ2015が、第1のバス2016に連結される。一実施形態において、第2のバス2020は、ローピンカウント(LPC)バスであってもよい。例えば、キーボード及び/またはマウス2022、通信デバイス2027、及びディスクドライブ、または複数の命令/コード及びデータ2030を含み得る他の大容量ストレージデバイスなどのストレージユニット2028を含む様々な複数のデバイスが、一実施形態においては、第2のバス2020に連結されてもよい。さらに、オーディオI/O2024が、第2のバス2020に連結されてもよい。なお、他の複数のアーキテクチャが、適用可能であることが留意されたい。例えば、図20のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
ここで、図21を参照すると、本願発明の実施形態に係る第2のより具体的な例示的コンピューティングシステム2100のブロック図が示されている。図20及び21における同様の複数の要素には、同様の参照番号が付され、図20の複数の特定の態様は、図21の他の複数の態様の不明瞭を回避すべく、図21では省略されている。
図21は、プロセッサ2070、2080が、それぞれ統合メモリ及びI/O制御論理(「CL」)2072及び2082を含み得ることを示す。したがって、CL2072、2082は、複数の統合メモリコントローラユニットを含み、かつ、I/O制御論理を含む。図21は、メモリ2032、2034がCL2072、2082に連結されるのみならず、複数のI/Oデバイス2114も制御論理2072、2082に連結されることもまた示す。複数のレガシI/Oデバイス2115は、チップセット2090に連結される。
ここで、図22を参照すると、本願発明の実施形態に係るSoC2200のブロック図が示される。図18における同様の複数の要素には、同様の参照番号が付される。また、複数の破線のボックスは、より高度なSoC上の任意的な特徴である。図22では、相互接続ユニット2202は、1つまたは複数のコア202A―N及び共有キャッシュユニット1806のセットを含むアプリケーションプロセッサ2210、システムエージェントユニット1810、バスコントローラユニット1816、統合メモリコントローラユニット1814、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ及びビデオプロセッサを含み得る1つまたは複数のコプロセッサ2220またはそのセット、スタティックランダムアクセスメモリ(SRAM)ユニット2230、ダイレクトメモリアクセス(DMA)ユニット2232及び1つまたは複数の外部ディスプレイに連結するためのディスプレイユニット2240に連結される。一実施形態において、コプロセッサ2220は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、エンベデッドプロセッサなどのような特定用途向けプロセッサを含む。
本明細書に開示される複数の機構の複数の実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはそのような複数の実装アプローチの組み合わせで実装されてもよい。本願発明の複数の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性及び不揮発性メモリ及び/または複数のストレージ要素を含む)、少なくとも1つの入力デバイスおよび少なくとも1つの出力デバイスを備える複数のプログラマブルシステム上で実行する複数のコンピュータプログラムまたはプログラムコードとして実装されてもよい。
図20に示されるコード2030のようなプログラムコードは、本明細書で説明される複数の関数を実行し、出力情報を生成する複数の入力命令に適用されてもよい。出力情報は、1つまたは複数の出力デバイスに、既知の様式で適用されてもよい。この用途の目的のために、処理システムは、例えば、デジタルシグナルプロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信を行うために、高水準の手順型またはオブジェクト指向プログラミング言語で実装されてもよい。プログラムコードは、必要に応じて、アセンブリ言語または機械言語でさらに実装されてもよい。実際には、本明細書で説明されている複数の機構は、その範囲において、任意の特定のプログラミング言語に限定されない。いずれの場合であっても、言語は、コンパイラ型またはインタプリタ型言語であってもよい。
少なくとも一実施形態の1つまたは複数の態様は、プロセッサ内の様々な論理を表す機械可読媒体上に記憶された複数の代表的命令により実装されうる。複数の代表的命令は、機械により読み出された場合、機械に、本明細書で説明される複数の技術を実行する論理を作成させる。「IPコア」として知られるそのような複数の表現は、有形の機械可読媒体上に記憶され、様々な顧客または製造設備に供給されて、実際に論理またはプロセッサを作り出す製造機械にロードされてもよい。
そのような機械可読記憶媒体は、限定的ではないが、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、書き換え可能コンパクトディスク(CD−RW)及び光磁気ディスクを含む任意の他の種類のディスク、リードオンリメモリ(ROM)などの半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブルROM(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルROM(EEPROM)、位相変化メモリ(PCM)、磁気または光カードなどのランダムアクセスメモリ(RAM)、または複数の電子的命令を記憶するために適切な任意の他の種類の媒体などの記憶媒体を含む、機械またはデバイスによって製造もしくは形成される複数の物品の非一時的かつ有形の構成を含んでもよい。
従って、本願発明の複数の実施形態はまた、複数の命令を含み、または、本明細書で説明されている複数の構造、複数の回路、複数の装置、複数のプロセッサ及び/または複数のシステム特徴を定義するハードウェア記述言語(HDL)のような設計データを含む非一時的で有形機械可読媒体を含む。
複数のそのような実施形態はまた、プログラム製品と称されてもよい。
[エミュレーション(バイナリトランスレーション、コードモーフィングなどを含む)]
いくつかの場合によっては、命令コンバータは、ソース命令セットからターゲット命令セットへ命令を変換するために用いられてもよい。例えば、命令コンバータは、コアによって処理されるべき1つまたは複数の他の命令に、命令を(例えば、静的バイナリトランスレーション、動的コンパイレーションを含む動的バイナリトランスレーションを用いる)トランスレート、モーフィング、エミュレート、あるいは他の方法で変換してもよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェアまたはそれらの組み合わせで実装されてもよい。命令コンバータは、プロセッサ上にあってもよく、プロセッサ外にあってもよく、または一部分がプロセッサ上かつ一部分がプロセッサ外にあってもよい。
図23は、本願発明の複数の実施形態に係る、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの使用を対比させるブロック図である。例示された実施形態では、命令コンバータは、ソフトウェア命令コンバータであるが、代替的には、命令コンバータは、ソフトウェア、ファームウェア、ハードウェアまたはそれらの様々な組み合わせで実装されてもよい。図23は、少なくとも1つのx86命令セットコアを有するプロセッサ2316によってネイティブに実行され得るx86バイナリコード2306を生成するために、x86コンパイラ2304を用いてコンパイルされ得る高水準言語2302のプログラムを示す。少なくとも1つのx86命令セットコアを有するプロセッサ2316は、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと実質的に同一結果を達成すべく、(1)インテル(登録商標)x86命令セットコアの命令セットの大部分、または(2)複数のアプリケーションのオブジェクトコードバージョン、もしくは少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサ上で動作することが想定された他のソフトウェアを互換可能に実行または他の方法で処理することにより、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと実質的に複数の同一の関数を実行可能な任意のプロセッサを表す。x86コンパイラ2304は、追加のリンク処理の有無に関わらず、少なくとも1つのx86命令セットコアを有するプロセッサ2316上で実行可能なx86バイナリコード2306(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。
同様に、図23は、高水準言語2302のプログラムが少なくとも1つのx86命令セットコア2314を有しないプロセッサ(例えば、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セットを実行し及び/またはカリフォルニア州サニーベールのARM ホールディングス(ARM Holdings)のARM命令セットを実行する複数のコアを有するプロセッサ)により、ネイティブに実行され得る代替的な命令セットバイナリコード2310を生成すべく、代替的な命令セットコンパイラ2308を用いてコンパイルされ得ることを示す。命令コンバータ2312は、x86バイナリコード2306を、x86命令セットコアを有しないプロセッサ2314によりネイティブに実行され得るコードに変換するために用いられる。この変換済みコードは、このような変換が可能な命令コンバータの製造は難しいため、代替的な命令セットバイナリコード2310と同一となる可能性は低いが、しかしながら、変換済みコードは、一般的なオペレーションを実現し、代替的な命令セットからの複数の命令により補完される。したがって、命令コンバータ2312は、エミュレーション、シミュレーションまたは任意の他の処理を介して、プロセッサまたはx86命令セットプロセッサもしくはコアを有しない他の電子デバイスにx86バイナリコード2306を実行させるソフトウェア、ファームウェア、ハードウェアまたはそれらの組み合わせを表す。
また、説明及び特許請求の範囲で、「連結」及び/または「接続」という用語は、これらの複数の派生形とともに用いられてもよい。これらの用語は、互いの類義語として意図されていないことが理解されるべきである。むしろ、複数の特定の実施形態においては、「接続」は、2つまたはそれより多くの要素が、互いに直接物理的にまたは電気的に接触することを示すために用いられてもよい。「連結」は、2つまたはそれより多くの要素が、直接物理的にまたは電気的に接触することを意味してもよい。しかしながら、「連結」はまた、2つまたはそれより多くの要素が、互いに直接接触しないものの、互いに連動または連携することをさらに意味してもよい。例えば、復号ユニットは、1つまたは複数の介在する構成要素を通じて、実行ユニット及び/またはレジスタと連結され得る。複数の図面において、複数の矢印は、連結及び/または接続を示すのに用いられる。
説明及び/または特許請求の範囲では、「論理」という用語が用いられてもよい。本明細書で用いられる場合において、論理という用語は、ハードウェア、ファームウェア、ソフトウェアまたはそれらの様々な組み合わせを含んでよい。複数の論理の例は、集積回路、複数の特定用途向け集積回路、複数のアナログ回路、複数のデジタル回路、複数のプログラミングされたロジックデバイス、複数の命令を含む複数のメモリデバイス、同様のもの、及び複数のそれらの組み合わせを含む。いくつかの実施形態において、ハードウェア論理は、複数のトランジスタ及び/または複数のゲート、及び/または複数の他の回路部構成要素を潜在的に含んでよい。様々な実施形態において、論理はまた、モジュール、ユニット、構成要素、回路、ロジックデバイス、または同様のものを称され及び/または表す。
上の説明において、複数の実施形態への十分な理解を提供すべく、複数の具体的な詳細が記載されている。しかしながら、複数の他の実施形態は、これら複数の具体的な詳細のうちのいくつかをなしに実施され得る。本願発明の範囲は、上で提供された具体的な複数の例によって決定されるものではなく、以下の特許請求の範囲によってのみ決定される。複数の図面に示され、明細書で説明されたものへのすべての等しい関係は、複数の実施形態内に包含される。
複数の他の例において、複数の周知回路、複数の構造、複数のデバイス、及び複数のオペレーションは、説明の理解を不明瞭にすることを回避すべく、ブロック図形式で示されており、または詳細に示されていない。いくつかの場合において、複数の構成要素が示されており、説明されているところ、それらは代わりに単一構成要素に組み込まれ得る。いくつかの場合において、単一構成要素が示されており説明されているところ、2つまたはそれより多くの構成要素に分離されてよい。
特有のオペレーションは、ハードウェア構成要素により実行され得、または、命令を用いてプログラミングされた機械、回路、またはハードウェア構成要素(例えば、プロセッサ、プロセッサの一部分、回路など)が複数のオペレーションを実行するることをさせる及び/またはもたらすのに用いられ得る機械実行可能な命令または回路実行可能な命令で具現化され得る。複数のオペレーションはまた、ハードウェア及びソフトウェアの組み合わせにより任意選択的に実行されてもよい。プロセッサ、機械、回路、またはハードウェアはまた、命令を実行及び/または処理するように動作可能な具体的または特定の回路または他の論理(例えば、ファームウェア及び/またはソフトウェアと潜在的に組み合わせたハードウェア)を含み得る。
いくつかの実施形態は、機械可読媒体を含む製造品(例えば、コンピュータプログラム製品)を含む。当該媒体は、機械には可読な形式で情報を提供、例えば、記憶する機構を含み得る。機械可読媒体は、仮に機械に実行されたとき及び/またはその場合には機械に1つまたは複数のオペレーション、方法、または本明細書に開示されている技術を実行させ及び/または機械にそれを実行することにもたらすように動作可能な、そこに記憶されている命令または複数の命令のシーケンスを提供、または有し得る。機械可読媒体は、本明細書に開示されている複数の命令の1つまたは複数の実施形態を提供、例えば、記憶し得る。
いくつかの実施形態において、機械可読媒体は、有形及び/または非一時的機械可読記憶媒体を含んでよい。例えば、有形及び/または非一時的機械可読記憶媒体は、フロッピー(登録商標)ディスケット、光記憶媒体、光ディスク、光データストレージデバイス、CD−ROM、磁気ディスク、光磁気ディスク、リードオンリメモリ(ROM)、プログラマブルROM(PROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、フラッシュメモリ、位相変化メモリ、位相変化データ記憶材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイス等を含んでよい。非一時的機械可読記憶媒体は、一時的伝搬された信号(例えば、搬送波)を含まない。
適した機械の複数の例は、限定されないが、複数の汎用プロセッサ、複数の特定用途向けプロセッサ、命令処理装置、複数のデジタル論理回路、複数の集積回路、及び同様のものを含む。適した機械のさらに他の複数の例は、複数のコンピューティングデバイス、及びそのような複数のプロセッサ、命令処理装置、複数のデジタル論理回路、または複数の集積回路を組み込む複数の他の電子デバイスを含む。そのようなコンピューティングデバイス及び電子デバイスの例は、限定されないが、複数のデスクトップコンピュータ、複数のラップトップコンピュータ、複数のノートブックコンピュータ、複数のタブレットコンピュータ、複数のネットブック、複数のスマートフォン、複数の携帯電話、複数のサーバ、複数のネットワークデバイス(例えば、複数のルータ及び複数のスイッチ)、モバイルインターネットデバイス(MID)、複数のメディアプレイヤ、複数のスマートテレビ、複数のネットトップ、複数のセットトップボックス、及び複数のビデオゲームコントローラを含む。
本明細書を通して、「一実施形態」、「実施形態」、「1つまたは複数の実施形態」、「いくつかの実施形態」という言及は、例えば、特定の機能が、本願発明の実施に含まれてもよいが、必ずしも含まれていなくてもよいことを示す。同様に、説明において、様々な複数の特徴は、場合により、開示を簡潔化し、様々な進歩的な複数の態様に対する理解を助けることを目的として、単一の実施形態、図またはその説明の中で一緒にグループ化される。この開示方法は、しかしながら、本願発明が、各請求項で明確に記述されるよりも多くの特徴を必要とするという意図を反映すると解釈されるものではない。むしろ、以下の特許請求の範囲が反映するように、進歩的な複数の態様は単一の開示された実施形態の一部のみの特徴にある。したがって、詳細な説明に続く、各請求項が本願発明の別個の実施形態として独立する特許請求の範囲は、これにより、この詳細な説明に明確に組み込まれている。
[例示的な実施形態]
以下の複数の例は、さらなる実施形態に関する。複数の例における詳細が、1つまたは複数の実施形態における任意の場所で用いられ得る。
例1は、インデックス付きベクトルロードとA/L演算とストア命令を受信する復号ユニットを含むプロセッサである。インデックス付きベクトルロードとA/L演算とストア命令は、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示す。実行ユニットは、復号ユニットに連結される。実行ユニットは、インデックス付きベクトルロードとA/L演算とストア命令に応じて、複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードし、ソース・パックドデータ・オペランドの複数のパックドデータ要素及びロードされた複数のデータ要素に対して複数のA/L演算を実行し、複数のパックドメモリインデックスに対応する複数のメモリ位置に複数の結果データ要素を記憶する。
例2は、例1のプロセッサを含み、それにおいて任意選択的に、命令は、ギャザー、A/L演算、及びスキャッタ命令を含む。
例3は、任意の先行の例のプロセッサを含み、それにおいて任意選択的に、A/L演算は、複数のパックド加算演算、複数のパックド減算演算、複数のパックド乗算演算、複数のパックド除算演算、複数のパックド積和演算、複数のパックド演算、複数のパックド回転演算、複数のパックド論理積演算、複数のパックド論理和演算、複数のパックド論理否定演算、及び複数のパックド否定論理積演算のうち少なくとも1つを含む。
例4は、任意の先行の例のプロセッサを含み、それにおいて任意選択的に、A/L演算は、複数のパックド加算演算及び複数のパックド乗算演算のうち少なくとも1つを含む。
例5は、任意の先行の例のプロセッサを含み、それにおいて任意選択的に、プロセッサは、ロードされたデータ要素をコア内に送らずに、インデックス付きベクトルロードとA/L演算とストア命令を実行する。
例6は、任意の先行の例のプロセッサを含み、それにおいて任意選択的に、実行ユニットはメモリサブシステム内のプロセッサの非コアの部分にある。
例7は、任意の先行の例のプロセッサを含み、それにおいて任意選択的に、復号ユニットは、コア内にあり、実行ユニットは、復号ユニットを有するコアよりもラストレベルのキャッシュに近い。
例8は、任意の先行の例のプロセッサを含み、それにおいて任意選択的に、A/L演算を実行すべき実行ユニットの一部分は、ラストレベルのキャッシュ及びラストレベルの次のレベルのキャッシュのうちの1つからロードされたデータ要素を受信する。
例9は、任意の先行の例のプロセッサを含み、それにおいて任意選択的に、復号ユニットは、ソース・パックドデータ・オペレーション・マスクオペランドを示すマスクされたインデックス付きベクトルロードとA/L演算とストア命令であるインデックス付きベクトルロードとA/L演算とストア命令を復号化する。
例10は、任意の先行の例のプロセッサを含み、それにおいて任意選択的に、復号ユニットは、少なくとも512ビット幅のソース・パックドデータ・オペランドを示すべきインデックス付きベクトルロードとA/L演算とストア命令を復号化する。
例11は、インデックス付きベクトルロードとA/L演算とストア命令を受信する段階を含む、プロセッサにおける方法である。インデックス付きベクトルロードとA/L演算とストア命令は、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、かつ複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示す。インデックス付きベクトルロードとA/L演算とストア命令が実行される。これは、複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードする段階を含んでよい。A/L演算は、ソース・パックドデータ・オペランドの複数のパックドデータ要素及びロードされた複数のデータ要素に対して実行され得る。複数の結果データ要素は、複数のパックドメモリインデックスに対応する複数のメモリ位置に記憶され得る。
例12は、例11の方法を含み、それにおいて任意選択的に、受信する段階は、ギャザーとA/L演算とスキャッタ命令を受信する段階を含む。
例13は、任意の先行の例の方法を含み、それにおいて任意選択的に、複数のA/L演算を実行する段階は、複数のパックド加算演算、複数のパックド減算演算、複数のパックド除算演算、複数のパックド乗算演算、複数のパックド積和演算、複数のパックドシフト演算、複数のパックド回転演算、複数のパックド論理積演算、複数のパックド論理和演算、複数のパックド論理否定演算、複数のパックド否定論理積演算のうち少なくとも1つを実行する段階を含む。
例14は、任意の先行の例の方法を含み、それにおいて任意選択的に、複数のA/L演算を実行する段階は、複数のパックド加算演算及び複数のパックド乗算演算のうち少なくとも1つを実行する段階を含む。
例15は、任意の先行の例の方法を含み、それにおいて任意選択的に、インデックス付きベクトルロードとA/L演算とストア命令を実行する段階は、ロードされた複数のデータ要素をコア内に送らずに完了する。
例16は、任意の先行の例の方法を含み、それにおいて任意選択的に、複数のA/L演算を実行する段階は、メモリサブシステム内のプロセッサの非コアの部分のユニットにより実行され、当該ユニットは、命令が受信されたコアよりもラストレベルのキャッシュに近い。
例17は、任意の先行の例の方法を含み、それにおいて任意選択的に、受信する段階は、ソース・パックドデータ・オペレーション・マスクオペランドを示す、マスクされたインデックス付きベクトルロードとA/L演算とストア命令を受信する段階を含む。
例18は、任意の先行の例の方法を含み、それにおいて任意選択的に、受信する段階は、少なくとも512ビット幅のソース・パックドデータ・オペランドを示す命令を受信する段階を含む。
例19は、相互接続、当該相互接続に連結されるダイナミックランダムアクセスメモリ(DRAM)、及び当該相互接続に連結されるプロセッサを含む、命令を処理するシステムである。インデックス付きベクトルロードとA/L演算とストア命令を受信するプロセッサは、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、かつ複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示す。プロセッサは、インデックス付きベクトルロードとA/L演算とストア命令に応じて、複数のパックドメモリインデックスに対応するDRAMの複数のメモリ位置から複数のデータ要素をロードし、ソース・パックドデータ・オペランドの複数のパックドデータ要素及びロードされた複数のデータ要素に対して複数のA/L演算を実行し、複数の送信先記憶位置に複数の結果データ要素を記憶するように動作可能である。
例20は、例19のシステムを含み、それにおいて任意選択的に、複数の送信先記憶位置は、DRAMの複数のパックドメモリインデックスに対応する複数のメモリ位置を含む。
例21は、任意の先行の例のシステムを含み、それにおいて任意選択的に、命令はギャザーとA/L演算とスキャッタ命令を含む。
例22は、非一時的機械可読記憶媒体を含む製造品である。機械可読記憶媒体は、インデックス付きベクトルロードとA/L演算とストア命令を記憶する。インデックス付きベクトルロードとA/L演算とストア命令は、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、かつ複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示す。インデックス付きベクトルロードとA/L演算とストア命令は、機械により実行された場合には、当該機械に、複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードすること、ソース・パックドデータ・オペランドの複数のパックドデータ要素及びロードされた複数のデータ要素に対して複数のA/L演算を実行すること、及び複数の送信先記憶位置に複数の結果データ要素を記憶することを含む複数のオペレーションを実行させるように、動作可能である。
例23は、例22の製造品を含み、それにおいて任意選択的に、複数の送信先記憶位置に複数の結果データ要素を記憶することは、複数のパックドメモリインデックスに対応する複数のメモリ位置に複数の結果データ要素を記憶することを含む。
例24は、任意の先行の例の製造品を含み、それにおいて任意選択的に、命令は、ギャザーとA/L演算とスキャッタ命令を含む。
例25は、任意の先行の例の製造品を含み、それにおいて任意選択的に、複数のA/L演算を実行することは、複数のパックド加算演算及び複数のパックド乗算演算のうち少なくとも1つを実行することを含む。
例26は、任意の先行の例の製造品を含み、それにおいて任意選択的に、ロードされた複数のデータ要素をプロセッサのコア内に送らずに、インデックス付きベクトルロードとA/L演算とストア命令の実行を完了することをさらに含む。
例27は、例11−18のうちのいずれかの方法を実行するように構成され及び/または動作可能なプロセッサまたは他の装置を含む。
例28は、例11−18のうちのいずれかの方法を実行するための手段を含むプロセッサまたは他の装置を含む。
例29は、プロセッサを備え、かつダイナミックランダムアクセスメモリ(DRAM)、ネットワークプロセッサ、グラフィックスプロセッサ、無線通信チップのうち少なくとも1つを任意選択的に備えるコンピュータシステムを含み、当該プロセッサは、例11−18のいずれかの方法を実行するように構成され及び/または動作可能である。
例30は、仮に機械に実行されたとき及び/またはその場合に機械に例11−18のうちのいずれかの方法を実行させるように動作可能な命令を記憶する非一時的機械可読記憶媒体を含む。
例31は、1つまたは複数のオペレーションまたは実質的に本明細書で説明されているような任意の方法を実行するプロセッサまたは他の装置を含む。
例32は、1つまたは複数のオペレーションまたは実質的に本明細書で説明されている任意の方法を実行するための手段を含むプロセッサまたは他の装置を含む。
例33は、本明細書で説明されている命令のうちのいずれかを実行するプロセッサまたは他の装置を含む。
例34は、本明細書で説明されている複数の命令のいずれかを実行するための手段を含むプロセッサまたは他の装置を含む。
例35は、インデックス付きベクトルロード、算術及び/または論理(A/L)演算、及びストア命令を受信するための手段を有するプロセッサを備える。インデックス付きベクトルロードとA/L演算とストア命令は、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、かつ複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示す。プロセッサは、複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードするための手段、ソース・パックドデータ・オペランドの複数のパックドデータ要素及びロードされた複数のデータ要素に対して複数のA/L演算を実行するための手段、及び複数のパックドメモリインデックスに対応する複数のメモリ位置に複数の結果データ要素を記憶するための手段を含む、インデックス付きベクトルロードとA/L演算とストア命令を実行するための手段を含む。
例36は、例35のプロセッサを含み、受信するための手段は、ギャザーとA/L演算とスキャッタ命令を受信するための手段を含む。