(57)【要約】  インデックス付きベクトルロード、算術及び／または論理（Ａ／Ｌ）演算、及びストア命令を受信する復号ユニットを備えるプロセッサである。当該命令は、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示す。命令はまた、複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示す。プロセッサはまた、復号ユニットに連結される実行ユニットを備える。実行ユニットは、当該命令に応じて、複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードし、ソース・パックドデータ・オペランドの複数のパックドデータ要素、及びロードされた複数のデータ要素に対して複数のＡ／Ｌ演算を実行し、複数のパックドメモリインデックスに対応する複数のメモリ位置に、複数の結果データ要素を記憶する。
2016531377.tif 000002
【特許請求の範囲】
【請求項１】
複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、かつ複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示す、インデックス付きベクトルロード、算術及び論理の少なくとも一方の（Ａ／Ｌ）演算、及びストア命令を受信する復号ユニットと、
前記復号ユニットに連結され、前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令に応じて、前記複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードし、前記ソース・パックドデータ・オペランドの前記複数のパックドデータ要素、及びロードされた前記複数のデータ要素に対して複数のＡ／Ｌ演算を実行し、前記複数のパックドメモリインデックスに対応する前記複数のメモリ位置に複数の結果データ要素を記憶する実行ユニットと
を備える
プロセッサ。
【請求項２】
前記命令は、ギャザー、Ａ／Ｌ演算、及びスキャッタ命令を含む、
請求項１に記載のプロセッサ。
【請求項３】
前記複数のＡ／Ｌ演算は、複数のパックド加算演算、複数のパックド減算演算、複数のパックド乗算演算、複数のパックド除算演算、複数のパックド積和演算、複数のパックドシフト演算、複数のパックド回転演算、複数のパックド論理積演算、複数のパックド論理和演算、複数のパックド論理否定演算、及び複数のパックド否定論理積演算のうち少なくとも１つを含む、
請求項１または２に記載のプロセッサ。
【請求項４】
前記複数のＡ／Ｌ演算は、前記複数のパックド加算演算及び前記複数のパックド乗算演算のうち少なくとも１つを含む、
請求項３に記載のプロセッサ。
【請求項５】
前記プロセッサは、ロードされた前記複数のデータ要素をコア内に送らずに前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令を実行する、
請求項１から４のいずれか一項に記載のプロセッサ。
【請求項６】
前記実行ユニットは、メモリサブシステム内の前記プロセッサの非コアの部分にある、
請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
前記復号ユニットは、コア内にあり、前記実行ユニットは、前記復号ユニットを有するコアよりもラストレベルのキャッシュに近い、
請求項６に記載のプロセッサ。
【請求項８】
前記複数のＡ／Ｌ演算を実行すべき前記実行ユニットの部分は、ラストレベルのキャッシュ及び前記ラストレベルの次のレベルのキャッシュのうちの１つからロードされた前記複数のデータ要素を受信する、
請求項１から７のいずれか一項に記載のプロセッサ。
【請求項９】
前記復号ユニットは、ソース・パックドデータ・オペレーション・マスクオペランドを示す、マスクされたインデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令である前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令を復号化する、
請求項１から７のいずれか一項に記載のプロセッサ。
【請求項１０】
前記復号ユニットは、少なくとも５１２ビット幅の前記ソース・パックドデータ・オペランドを示すべき前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令を復号化する、
請求項１から７のいずれか一項に記載のプロセッサ。
【請求項１１】
プロセッサにおける方法であって、
複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、かつ複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示すインデックス付きベクトルロード、算術及び論理の少なくとも一方の（Ａ／Ｌ）演算、及びストア命令を受信する段階と、
前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令を実行する段階と
を備え、
前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令を実行する段階は、
前記複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードする段階と、
前記ソース・パックドデータ・オペランドの前記複数のパックドデータ要素、及びロードされた前記複数のデータ要素に対して複数のＡ／Ｌ演算を実行する段階と、
前記複数のパックドメモリインデックスに対応する前記複数のメモリ位置に複数の結果データ要素を記憶する段階とを含む、
方法。
【請求項１２】
前記受信する段階は、ギャザー、Ａ／Ｌ演算、及びスキャッタ命令を受信する段階を含む、
請求項１１に記載の方法。
【請求項１３】
前記複数のＡ／Ｌ演算を実行する段階は、複数のパックド加算演算、複数のパックド減算演算、複数のパックド乗算演算、複数のパックド除算演算、複数のパックド積和演算、複数のパックドシフト演算、複数のパックド回転演算、複数のパックド論理積演算、複数のパックド論理和演算、複数のパックド論理否定演算、及び複数のパックド否定論理積演算のうち少なくとも１つ実行する段階を含む、
請求項１１または１２に記載の方法。
【請求項１４】
前記複数のＡ／Ｌ演算を実行する段階は、前記複数のパックド加算演算及び前記複数のパックド乗算演算のうち少なくとも１つを実行する段階を含む、
請求項１３に記載の方法。
【請求項１５】
前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令を実行する段階は、ロードされた前記複数のデータ要素をコア内に送らずに完了する、
請求項１１から１４のいずれか一項に記載の方法。
【請求項１６】
前記複数のＡ／Ｌ演算を実行する段階は、メモリサブシステム内の前記プロセッサの非コアの部分のユニットにより実行され、
前記ユニットは、前記命令が受信されるコアよりもラストレベルのキャッシュに近い、
請求項１１から１５のいずれか一項に記載の方法。
【請求項１７】
前記受信する段階は、ソース・パックドデータ・オペレーション・マスクオペランドを示す、マスクされたインデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令を受信する段階を含む、
請求項１１から１６のいずれか一項に記載の方法。
【請求項１８】
前記受信する段階は、少なくとも５１２ビット幅の前記ソース・パックドデータ・オペランドを示す前記命令を受信する段階を含む、
請求項１１から１７のいずれか一項に記載の方法。
【請求項１９】
複数の命令を処理するシステムであって、
相互接続と、
前記相互接続に連結されるダイナミックランダムアクセスメモリ（ＤＲＡＭ）と、
前記相互接続に連結されるプロセッサと
を備え、
前記プロセッサは、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、かつ複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示す、インデックス付きベクトルロード、算術及び論理の少なくとも一方の（Ａ／Ｌ）演算、及びストア命令を受信し、
前記プロセッサは、前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令に応じて、前記複数のパックドメモリインデックスに対応する前記ＤＲＡＭの複数のメモリ位置から複数のデータ要素をロードし、前記ソース・パックドデータ・オペランドの前記複数のパックドデータ要素及びロードされた前記複数のデータ要素に対して複数のＡ／Ｌ演算を実行し、複数の送信先記憶位置に複数の結果データ要素を記憶するように、動作可能である、
システム。
【請求項２０】
前記複数の送信先記憶位置は、前記ＤＲＡＭの前記複数のパックドメモリインデックスに対応する前記複数のメモリ位置を含む、
請求項１９に記載のシステム。
【請求項２１】
前記命令は、ギャザー、Ａ／Ｌ演算、及びスキャッタ命令を含む、
請求項１９または２０に記載のシステム。
【請求項２２】
非一時的機械可読記憶媒体を備える製造品であって、
前記機械可読記憶媒体は、インデックス付きベクトルロード、算術及び論理の少なくとも一方の（Ａ／Ｌ）演算、及びストア命令を記憶し、
前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令は、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、かつ複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示し、
前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令は、機械に実行された場合に、前記機械に、
前記複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードすること、
前記ソース・パックドデータ・オペランドの前記複数のパックドデータ要素、及びロードされた前記複数のデータ要素に対して複数のＡ／Ｌ演算を実行すること、及び
複数の送信先記憶位置に複数の結果データ要素を記憶することを含む
複数のオペレーションを実行させるように動作可能である、
製造品。
【請求項２３】
前記複数の送信先記憶位置に前記複数の結果データ要素を記憶することは、前記複数のパックドメモリインデックスに対応する前記複数のメモリ位置に前記複数の結果データ要素を記憶することを含む、
請求項２２に記載の製造品。
【請求項２４】
前記命令は、ギャザー、Ａ／Ｌ演算、及びスキャッタ命令を含む、
請求項２２または２３に記載の製造品。
【請求項２５】
前記複数のＡ／Ｌ演算を実行することは、複数のパックド加算演算及び複数のパックド乗算演算のうち少なくとも１つを実行することを含む、
請求項２２から２４のいずれかに一項に記載の製造品。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で説明される実施形態は概して、マイクロプロセッサに関する。特に、本明細書で説明される実施形態は概して、命令に応じてマイクロプロセッサを用いてメモリへのアクセスに関する。
【背景技術】
【０００２】
プロセッサは一般に、システムメモリへアクセスする命令を実行するように動作可能である。例えば、プロセッサは、システムメモリからデータをロードまたは読み出しするロード命令、及び／またはシステムメモリへデータを記憶または書き込みするストア命令を実行し得る。
【０００３】
特定のプロセッサは、（例えば、複数のインデックスのベクトルを用いて複数の要素のベクトルをロードする）インデックス付きベクトルロード命令を実行するように動作可能である。これらインデックス付きベクトルロード命令はまた、当技術分野では、ベクトルギャザー命令または単にギャザー命令として称される。２０１１年６月に公開された、文書参照番号第３１９４３３―０１１号のインテル（登録商標）アドバンスト・ベクトル・エクステンション・プログラミング・レファレンスでは、いくつかのベクトルギャザー（ＶＧＡＴＨＥＲ）命令を説明している。複数の例は、ＶＧＡＴＨＥＲＤＰＤ、ＶＧＡＴＨＥＲＱＰＤ、ＶＧＡＴＨＥＲＤＰＳ、ＶＧＡＴＨＥＲＱＰＳ、ＶＰＧＡＴＨＥＲＤＤ、ＶＰＧＡＴＨＥＲＱＤ、ＶＰＧＡＴＨＥＲＤＱ、及びＶＰＧＡＴＨＥＲＱＱを含む。これらギャザー命令は、複数の対応するメモリインデックスを用いてメモリから複数のデータ要素をギャザーまたはロードするのに用いられ得る。特定のプロセッサは、（例えば、複数のインデックスのベクトルを用いて複数の要素のベクトルを記憶する）インデックス付きベクトルストア命令を実行するように動作可能である。これらインデックス付きベクトルストア命令はまた、当技術分野では、ベクトルスキャッタ命令または単にスキャッタ命令として称される。２０１３年７月に公開された、文書参照番号第３１９４３３―０１５号のインテル（登録商標）アーキテクチャ・インストラクション・セット・エクステンション・プログラミング・レファレンスでは、いくつかのベクトルスキャッタ（ＶＳＣＡＴＴＥＲ）命令を説明している。これらスキャッタ命令は、複数の対応するメモリインデックスを用いてソースオペランドから複数のデータ要素をシステムメモリにスキャッタまたは記憶するのに用いられ得る。
【図面の簡単な説明】
【０００４】
本願発明は、複数の実施形態を示すのに用いられる以下の説明及び添付の図面を参照することにより最良に理解され得る。図面は以下の通りである。
【図１】１つまたは複数のインデックス付きベクトルメモリアクセス及び算術及び／または論理演算命令を実行するように動作可能なプロセッサの実施形態のブロック図である。
【図２】１つまたは複数のインデックス付きベクトルメモリアクセス及び算術及び／または論理演算命令を実行するように動作可能な命令処理装置の実施形態のブロック図である。
【図３】プロセッサの実行ユニットの位置の一実施形態を示すブロック図である。
【図４】インデックス付きベクトルロード、算術及び／または論理演算、及びストア命令の実施形態を処理する方法の実施形態のブロックフロー図である。
【図５】インデックス付きベクトルロード、算術及び／または論理演算、及びストアオペレーションの実施形態を示すブロック図である。
【図６】マスクされたインデックス付きベクトルロード、算術及び／または論理演算、及びストアオペレーションの実施形態を示すブロック図である。
【図７】インデックス付きベクトルロード及び算術及び／または論理演算の実施形態を示すブロック図である。
【図８】インデックス付きベクトルロード、算術及び／または論理演算、及びストア命令のフォーマットの実施形態のブロック図である。
【図９】インデックス付きベクトルロード及び算術及び／または論理演算命令のフォーマットの実施形態のブロック図である。
【図１０】パックドデータレジスタの特定の適したセットの例示的な実施形態のブロック図である。
【図１１】パックドデータ・オペレーション・マスクレジスタの特定の適したセットの例示的な実施形態のブロック図である。
【図１２】特定の適した６４ビットのパックドデータ・オペレーション・マスクレジスタの例示的な実施形態を示す図である。
【図１３Ａ】本願発明の複数の実施形態に係るジェネリックベクトル向け命令フォーマット及びそれらのクラスＡの命令テンプレートを示すブロック図である。
【図１３Ｂ】本願発明の複数の実施形態に係るジェネリックベクトル向け命令フォーマット及びそれらのクラスＢの命令テンプレートを示すブロック図である。
【図１４Ａ】本願発明の複数の実施形態に係る例示的な特定ベクトル向け命令フォーマットを示すブロック図である。
【図１４Ｂ】本願発明の一実施形態に係るフルオペコードフィールドを構成する特定ベクトル向け命令フォーマットのフィールドを示すブロック図である。
【図１４Ｃ】本願発明の一実施形態に係るレジスタインデックスフィールドを構成する特定ベクトル向け命令フォーマットのフィールドを示すブロック図である。
【図１４Ｄ】本願発明の一実施形態に係る増加オペレーションフィールドを構成する特定ベクトル向け命令フォーマットのフィールドを示すブロック図である。
【図１５】本願発明の一実施形態に係るレジスタアーキテクチャのブロック図である。
【図１６Ａ】本願発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。
【図１６Ｂ】実行エンジンユニットに連結されるフロントエンドユニットを備えるプロセッサコアであって、実行エンジンユニット及びフロントエンドユニットの両方ともメモリユニットに連結されるプロセッサコアを示す。
【図１７Ａ】本願発明の複数の実施形態に係る、オンダイ相互接続ネットワークとの接続と共に、自己のレベル２（Ｌ２）キャッシュローカルサブセットを有する単一プロセッサコアのブロック図である。
【図１７Ｂ】本願発明の複数の実施形態に係る図１７Ａのプロセッサコアの一部分の拡張図である。
【図１８】本願発明の複数の実施形態に係る、１つより多いコアを有し得、統合メモリコントローラを有し得、統合グラフィックスを有し得るプロセッサのブロック図である。
【図１９】本願発明の一実施形態に係るシステムのブロック図を示す。
【図２０】本願発明の実施形態に係る第１のより具体的な例示的システムのブロック図である。
【図２１】本願発明の実施形態に係る第２のより具体的な例示的システムを示すブロック図である。
【図２２】本願発明の実施形態に係るＳｏＣのブロック図である。
【図２３】本願発明の複数の実施形態に係る、ソース命令セットにおけるバイナリ命令を、ターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令コンバータの使用を対比させるブロック図である。
【発明を実施するための形態】
【０００５】
インデックス付きベクトルメモリアクセス及び算術及び／または論理（Ａ／Ｌ）演算命令、そのような命令を実行するプロセッサ、そのような命令を処理または実行する場合に当該プロセッサにより実行される方法、及びそのような命令を処理または実行する１つまたは複数のプロセッサを組み込むシステムが本明細書に開示される。以下の説明において、多数の具体的な詳細（例えば、複数の具体的な命令オペレーション、複数のデータフォーマット、複数のプロセッサ構成、複数のマイクロアーキテクチャの詳細、複数のシステム構成、複数の命令フォーマット、複数の演算の複数のシーケンスなど）が記載される。しかしながら、複数の実施形態は、これら具体的な詳細をなしに実施され得る。複数の他の例において、複数の周知回路、複数の構造及び複数の技術は、説明の理解を不明瞭にすることを回避するために詳細に示されていない。
【０００６】
図１は、１つまたは複数のインデックス付きベクトルメモリアクセス及び算術及び／または論理（Ａ／Ｌ）演算命令１０４を行うまたは実行するように動作可能なプロセッサ１００の実施形態のブロック図である。プロセッサは、任意的な外部メモリ１２６（例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、フラッシュメモリ、他のシステムメモリなど）に連結される。いくつかの実施形態はメモリ１２６を有しないプロセッサ１００に関するものであるため、メモリ１２６は、任意的なものとして示されている。
【０００７】
いくつかの実施形態において、プロセッサは、（例えば、デスクトップ、ラップトップ、タブレット、ハンドヘルド、携帯電話、及び同様のコンピューティングデバイスに用いられる種類の）汎用プロセッサであり得る。代替的には、プロセッサは、特定用途向けプロセッサであり得る。適した特定用途向けプロセッサの複数の例は、複数のグラフィックスプロセッサ、複数のネットワークプロセッサ、複数の通信プロセッサ、複数の暗号プロセッサ、複数のコプロセッサ、及び複数のデジタルシグナルプロセッサ（ＤＳＰ）を含むが、単にいくつかの例を挙げるため、それらに限定されない。プロセッサは、様々な複合命令セットコンピュータ（ＣＩＳＣ）プロセッサ、様々な縮小命令セットコンピュータ（ＲＩＳＣ）プロセッサ、様々な超長命令語（ＶＬＩＷ）プロセッサ、それらの様々なハイブリッド、または完全に他の種類のプロセッサのうちのいずれかであってもよい。
【０００８】
プロセッサは、アーキテクチャ的に可視またはアーキテクチャレジスタ１１０を含む。アーキテクチャレジスタという用語は、多くの場合、当技術分野において、ソフトウェア（例えば、プログラマ）に可視のレジスタ、及び／または複数のオペランドを識別する命令セットの複数の命令により特定されるレジスタを指すのに用いられる。これらアーキテクチャレジスタは、所与のマイクロアーキテクチャにおいて、複数の他の非アーキテクチャのレジスタまたは非アーキテクチャ的に可視のレジスタ（例えば、複数の命令によって用いられる複数のテンポラリレジスタなど）とは対照的である。簡潔さのために、これらアーキテクチャレジスタは、本明細書において、多くの場合、単にレジスタとして称される。レジスタは概して、オンダイプロセッサ記憶位置を表す。レジスタは、複数の異なる態様で複数の周知技術を用いて複数の異なるマイクロアーキテクチャに実装され得、任意の特定の種類の回路に限定されない。適した種類のレジスタの複数の例は、複数の専用物理レジスタ、レジスタリネーミングを用いる複数の動的割り当て物理レジスタ、及びそれらの複数の組み合わせを含むが、それらに限定されない。
【０００９】
示されているレジスタは、各々がベクトルまたはパックドデータを記憶するように動作可能な、ベクトルまたはパックドデータレジスタ１１２のセットを含む。いくつかの実施形態において、必要とされないが、レジスタはまた、パックドデータオペレーションマスクレジスタ１１８を任意選択的に含み得る。いくつかの実施形態において、レジスタはまた、必要とされないが、汎用レジスタ１２０を含み得る。
【００１０】
プロセッサは、命令セット１０２を有する。命令セットは、プロセッサによりサポートされる命令のセットを含む。命令セットの複数の命令は、複数のマイクロ命令、複数のマイクロオペレーション、または複数のマクロ命令を復号化する復号ユニットに起因して実行のために実行ユニットへ提供される複数の命令とは対照的に、複数のアセンブリ言語命令、複数の機械レベル命令、複数のマクロ命令、または実行するためにプロセッサへ提供される複数の命令を表す。命令セットは、１つまたは複数のインデックス付きベクトルメモリアクセス及び算術及び／または論理（Ａ／Ｌ）演算命令１０４を含む。１つまたは複数のインデックス付きベクトルメモリアクセス及びＡ／Ｌ演算命令の各々は、プロセッサにベクトルＡ／Ｌ演算と組み合わせたインデックス付きベクトルメモリアクセスオペレーションを実行させるように、動作可能である。
【００１１】
いくつかの実施形態において、１つまたは複数のインデックス付きベクトルメモリアクセス及びＡ／Ｌ演算命令１０４は、１つまたは複数のインデックス付きベクトルロードとＡ／Ｌ演算とストア命令１０６（例えば、１つまたは複数のギャザーとＡ／Ｌ演算とスキャッタ命令）を任意選択的に含み得る。例として、いくつかの実施形態において、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令１０６（例えば、ギャザーとＡ／Ｌ演算とスキャッタ命令）は、プロセッサに、ソース・パックドメモリインデックス・オペランド１１４により示された外部メモリ１２６の複数のメモリ位置から複数のデータ要素をギャザーさせ、ギャザーされた複数のデータ要素及びソース・パックドデータ・オペランド１１６の複数のデータ要素に対してＡ／Ｌ演算を実行させ、及びソース・パックドメモリインデックス・オペランド１１４により示された外部メモリ１２６の複数のメモリ位置に複数の結果データ要素をスキャッタさせるように、動作可能であり得る。
【００１２】
いくつかの実施形態において、１つまたは複数のインデックス付きベクトルメモリアクセス及びＡ／Ｌ演算命令１０４は、１つまたは複数のインデックス付きベクトルロード及びＡ／Ｌ演算命令１０８（例えば、１つまたは複数のギャザー及びＡ／Ｌ演算命令）を任意選択的に含み得る。例として、いくつかの実施形態において、インデックス付きベクトルロード及びＡ／Ｌ演算命令１０８（例えば、ギャザー及びＡ／Ｌ演算命令）は、プロセッサに、ソース・パックドメモリインデックス・オペランド１１４により示された外部メモリ１２６の複数のメモリ位置から複数のデータ要素をギャザーさせ、ギャザーされた複数のデータ要素及びソース・パックドデータ・オペランド１１６の複数のデータ要素に対してＡ／Ｌ演算を実行させ、及び複数の結果データ要素を結果パックドデータとしてオンプロセッサ記憶位置に（例えば、１つまたは複数のパックドデータレジスタに）記憶させるように、動作可能であり得る。
【００１３】
様々な異なる種類のベクトルＡ／Ｌ演算は、複数の命令１０４に適する。適したＡ／Ｌ演算のいくつかの例は、複数のベクトルまたはパックド加算演算、複数の減算演算、複数の乗算演算、複数の除算演算、複数の積和演算、複数のシフト演算、複数の回転演算、複数の論理積演算、複数の論理和演算、複数の論理否定演算、複数の否定論理積演算、複数の平均値演算、複数の最大値演算、複数の最小値演算、及び複数の比較演算を含むが、単にいくつか可能な例を挙げており、それらに限定されない。様々な実施形態において、単一のインデックス付きベクトルメモリアクセス及びＡ／Ｌ演算命令１０４から多くのそのような異なる命令までのいずれかがあり得る。例えば、異なる種類のＡ／Ｌ演算（例えば、加算、乗算、シフトなど）のための複数または多くのギャザーと演算とスキャッタ命令、及び／または異なる種類のＡ／Ｌ演算のための複数または多くのギャザー及び演算命令があり得る。
【００１４】
いくつかの実施形態において、複数の命令１０４は、必要とされないが、マスクレジスタ１１８のパックドデータ・オペレーション・マスクオペランドを任意選択的に示し得る。パックドデータ・オペレーション・マスクオペランド及びパックドデータ・オペレーション・マスクレジスタは、以下においてさらに説明される。いくつかの実施形態において、必要とされないが、複数の命令１０４は、汎用レジスタ１２０（例えば、ベースアドレスまたは他のメモリアドレス情報を有するもの）を任意選択的に示し（例えば、暗黙に示し）得る。代替的には、メモリアドレス情報は別の方法で提供されてもよい。
【００１５】
プロセッサはまた、１つまたは複数の実行ユニット１２４を含む。実行ユニットは、インデックス付きベクトルメモリアクセス及びＡ／Ｌ演算命令１０４を実行するまたは行うように動作可能である。複数の適した実行ユニットの複数の例は、複数のメモリアクセスユニット、複数のメモリ実行ユニット、複数のギャザーユニット、複数のスキャッタユニット、複数の算術及び／または論理ユニット（ＡＬＵ）、同様のもの、及びそれらの複数の組み合わせを含むが、それらに限定されない。いくつかの実施形態において、メモリ実行ユニット（または、ギャザー、スキャッタ、または他のインデックス付きベクトルメモリアクセスオペレーションを実行することができる他のユニット）は、算術及び／または論理ユニットまたは回路を含むように変更され得る。他の実施形態において、メモリ実行ユニット（または、ギャザー、スキャッタ、または他のインデックス付きベクトルメモリアクセスオペレーションを実行することができる他のユニット）は、Ａ／Ｌユニットまたは回路に連結され得る。いくつかの実施形態において、１つまたは複数の実行ユニット１２４は、外部メモリ１２６へアクセスするのに用いられるメモリサブシステム１２２に含まれ得る。
【００１６】
図２は、命令処理装置２００の実施形態のブロック図である。いくつかの実施形態において、命令処理装置２００は、図1のプロセッサ１００であり得、またはそれに含まれ得る。上で説明されたプロセッサ１００の複数の特徴及び複数の詳細はまた、命令処理装置２００に任意選択的に適用し得る。代替的には、命令処理装置２００は、プロセッサ１００と同様または異なるプロセッサであり得、またはそれに含まれ得る。さらに、プロセッサ１００は、命令処理装置２００と同様または異なる命令処理装置を含み得る。
【００１７】
命令処理装置２００は、（例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、フラッシュメモリ、他のシステムメモリなどの）任意的な外部メモリ２２６に連結される。例として、命令処理装置及び外部メモリは、チップセットを通して、バスまたは他の相互接続により、または当技術分野において既知の他のアプローチにより、プリント回路基板上で連結され得る。外部メモリは、いくつかの実施形態が外部メモリを有しない命令処理装置（例えば、システム内にプロセッサをアセンブリする前）に関するため、任意的なものとして示される。
【００１８】
命令処理装置２００は、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令２０６を受信し得る。例えば、命令は、命令フェッチユニット、命令キュー、メモリなどから受信され得る。いくつかの実施形態において、命令２０６は、ギャザーとＡ／Ｌ演算とスキャッタ命令を表し得る。命令２０６は、複数のパックドメモリインデックスを有するソース・パックドメモリインデックス・オペランド２１４を（例えば、１つまたは複数のビットまたはフィールドを通して）明白に特定し得、またはそうでなければ、（例えば、暗黙に示し、エミュレーションレジスタマッピングを通して間接的に示すなど）示し得る。ソース・パックドメモリインデックス・オペランドの複数のメモリインデックスの各々は、外部メモリ２２６の対応するメモリ位置を示し得る。いくつかの実施形態において、複数のメモリインデックスは、１６ビット、３２ビット、または６４ビットのメモリインデックスであり得るが、本願発明の範囲はそれらに限定されない。いくつかの実施形態において、命令２０６はまた、複数のパックドデータ要素を有するソース・パックドデータ・オペランド２１６を（例えば、１つまたは複数のビットまたはフィールドを通して）明白に特定し得、またはそうでなければ、（例えば、暗黙に示し、エミュレーションレジスタマッピングを通して間接的に示すなど）示し得る。
【００１９】
装置は、パックドデータレジスタ２１２のセットを含む。複数のパックドデータレジスタは、複数のアーキテクチャレジスタを表し得る。複数のレジスタは、複数の異なる態様で複数の周知技術を用いて複数の異なるマイクロアーキテクチャに実装され得、任意の特定の種類の回路に限定されない。複数の適した種類の複数のレジスタの複数の例は、複数の専用物理レジスタ、レジスタリネーミングを用いる複数の動的割り当て物理レジスタ、及びそれらの複数の組み合わせを含むが、それらに限定されない。示されたように、いくつかの実施形態において、ソース・パックドメモリインデックス・オペランド２１４及びソース・パックドデータ・オペランド２１６は、複数のパックドデータレジスタの複数のレジスタに記憶され得る。例として、命令２０６は、これらパックドデータレジスタをソースオペランドとして特定するように、１つまたは複数のフィールドまたはビットのセットを有し得る。代替的には、複数の他の記憶位置は、これらオペランドのうちの１つまたは複数のために任意選択的に用いられ得る。
【００２０】
命令処理装置２００は、命令復号ユニットまたはデコーダ２３０を含む。いくつかの実施形態において、復号ユニットは、コアに配置され得る。
【００２１】
復号ユニットは、複数の上位レベルの機械命令またはマクロ命令（例えば、命令２０６）を受信及び復号化し得、１つまたは複数の下位レベルのマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、または他の下位レベルの命令もしくは元の上位レベルの命令を反映し及び／またはここから派生される複数の制御信号２３６を出力し得る。１つまたは複数の下位レベルの命令または制御信号は、１つまたは複数の下位レベル（例えば、回路レベルまたはハードウェアレベル）のオペレーションを通して、上位レベルの命令のオペレーションを実装し得る。復号ユニットは、限定されないが、複数のマイクロコードリードオンリメモリ（ＲＯＭ）、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ（ＰＬＡ）、及び複数の当技術分野において既知の他の機構を含む様々な異なる機構を用いて実装され得る。他の実施形態において、復号ユニットを有する代わりに、命令エミュレータ、トランスレータ、モルファ、インタープリタ、または（例えば、ソフトウェア、ハードウェア、ファームウェア、または組み合わせに実装された）他の命令変換ロジックが用いられ得る。さらに他の実施形態において、命令変換ロジック（例えば、エミュレーションモジュール）と復号ユニットとの組み合わせが用いられ得る。いくつかのまたはすべての命令変換ロジックは、別個のダイ上及び／またはメモリになど、命令処理装置の他の部分からオフダイで潜在的に配置され得る。
【００２２】
再び図２を参照すると、１つまたは複数の実行ユニット２２４は、復号ユニット２３０、複数のパックドデータレジスタ２１２、及び外部メモリ２２６に連結される。いくつかの実施形態において、１つまたは複数の実行ユニットはまた、複数のメモリインデックスを複数のメモリアドレスに変換するようにベースアドレス及び／または他のメモリアドレス情報を記憶するのに任意選択的に用いられ得る複数の汎用レジスタ２２０に任意選択的に連結され得る。代替的には、メモリアドレス情報は別の方法で提供されてもよい。
【００２３】
実行ユニットは、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令２０６に応じて（例えば、復号化されたまたはそうでなければ命令２０６から変換された１つまたは複数の制御信号２３６に応じて、または、命令２０６をエミュレートするのに用いられる１つまたは複数の命令から復号化された１つまたは複数の制御信号２３６に応じて、）及び／またはその結果として、インデックス付きベクトルロードオペレーションとＡ／Ｌ演算とストアオペレーションを実行するように動作可能である。ロードオペレーション、Ａ／Ｌ演算、及びストアオペレーションはすべて、ベクトル演算を表し得る。いくつかの実施形態において、オペレーションは、プロセッサが、ソース・パックドメモリインデックス・オペランド２１４の対応する複数のメモリインデックスにより示された外部メモリ２２６の潜在的に非隣接なメモリ位置から複数のデータ要素をギャザーまたはそうでなければロードし、ギャザーされまたはロードされた複数のデータ要素及びソース・パックドデータ・オペランド２１６の複数の関連データ要素に対してＡ／Ｌ演算を実行し、ソース・パックドメモリインデックス・オペランド２１４の対応する複数のメモリインデックスにより示された外部メモリ２２６の対応する複数のメモリ位置に複数の結果データ要素をスキャッタまたはそうでなければ記憶することを伴い得る。
【００２４】
示された例示的な実施形態において、第１のメモリ位置２３２は最初にデータ要素Ａ１を含み、第２のメモリ位置２３３は最初にデータ要素Ａ２を含み、第３のメモリ位置２３４は最初にデータ要素Ａ３を含み、そして第４のメモリ位置２３５は最初にデータ要素Ａ４を含む。これらメモリ位置の各々はそれぞれ、ソース・パックドメモリインデックス・オペランド２１４の第１から第４のメモリインデックスに対応し得る。ソース・パックドデータ・オペランド２１６は、それぞれの対応するデータ要素Ｂｌ、Ｂ２、Ｂ３、及びＢ４を含む。命令を実行した結果として、第１のメモリ位置２３２のデータ要素Ａ１は、Ａｌ演算（ＯＰ）Ｂｌへ上書きされ得、第２のメモリ位置２３３のデータ要素Ａ２は、Ａ２  ＯＰ  Ｂ２へ上書きされ得、第３のメモリ位置２３４のデータ要素Ａ３は、Ａ３  ＯＰ  Ｂ３へ上書きされ得、そして第４のメモリ位置２３５のデータ要素Ａ４は、Ａ４  ＯＰ  Ｂ４へ上書きされ得る。この例示的な実施形態において、演算（ＯＰ）は、例えば、パックド加算、パックド減算、パックド乗算、パックド除算、パックド積和、パックドシフト（例えば、Ｂ１によりＡ１をシフトさせる、Ｂ２によりＡ２をシフトさせるなど）、パックド回転（例えば、Ｂ１によりＡ１を回転させる、Ｂ２によりＡ２を回転させるなど）、パックド論理積、パックド論理和、パックド論理否定、パックド否定論理積、パックド平均値、パックド最大値、パックド最小値、パックド比較、または同様のもののような任意の適した「垂直」型のパックドデータオペレーションを表し得る。しかしながら、この例において、オペレーションが対応する複数のデータ要素の複数のペア（例えば、複数のオペランドの対応する複数のビット位置の複数のデータ要素）に対して実行される「垂直」型演算が用いられるが、そのような「垂直」型演算は必要とされない。他の実施形態において、例えば、「水平」型演算、一部「水平」／一部「垂直」型演算、単に１つより多くのデータ要素を伴う演算などのような、他の種類の演算は実行され得る。
【００２５】
複数の適した実行ユニットの複数の例は、複数のメモリアクセスユニット、複数のメモリ実行ユニット、複数のギャザーユニット、複数のスキャッタユニット、複数の算術及び／または論理ユニット（ＡＬＵ）、同様のもの、及びそれらの複数の組み合わせを含むが、それらに限定されない。いくつかの実施形態において、メモリ実行ユニット（または、ギャザー及び／またはスキャッタ及び／または他のインデックス付きベクトルメモリアクセスオペレーションを実行することができる他のユニット）は、算術及び／または論理ユニットまたは回路を含むように変更され得る。複数の他の実施形態において、メモリ実行ユニット（または、ギャザー及び／またはスキャッタ及び／または他のインデックス付きベクトルメモリアクセスオペレーションを実行することができる他のユニット）は、算術及び／または論理ユニットまたは回路に連結され得る。１つまたは複数の実行ユニット及び／または装置は、命令２０６を実行及び／または処理するように動作可能な具体的または特定のロジック（例えば、回路、トランジスタ、または、ソフトウェア及び／またはファームウェアと潜在的に組み合わせた他のハードウェア）を含み得る。いくつかの実施形態において、１つまたは複数の実行ユニットは、少なくともいくつかのトランジスタ、集積回路、集積回路の部分、もしくは他の回路またはハードウェアを含み得る。
【００２６】
いくつかの実施形態において、１つまたは複数の実行ユニット２２４は、必要とされないが、外部メモリ２２６へアクセスするのに用いられるメモリサブシステム２２２に含まれ得る。以下でさら説明されるように、概して、当該１つまたは複数の実行ユニット２２４が外部メモリ２２６に近ければ近いほど、より良好な効率となる。例えば、これは、データを１つまたは複数の上位レベルのキャッシュに記憶する必要がないこと、及び／または、相互接続上で最上位レベルのキャッシュまで及び／またはコア内へデータを送信する必要がないことに部分的に起因し得る。
【００２７】
説明を不明瞭にすることを回避するために、簡単な命令処理装置２００が説明されたが、命令処理装置は、１つまたは複数の他の従来の構成要素を任意選択的に含んでよい。そのような従来の構成要素の複数の例は、命令フェッチユニット、命令スケジューリングユニット、分岐予測ユニット、複数の命令及びデータキャッシュ、複数の命令及びデータトランスレーションルックアサイドバッファ（ＴＬＢ）、複数のプリフェッチバッファ、複数のマイクロ命令キュー、複数のマイクロ命令シーケンサ、複数のバスインターフェースユニット、リタイアメント／コミットユニット、レジスタリネーミングユニット、及び従来からプロセッサに使用されている複数の他の構成要素を含むが、それらに限定されない。さらに、複数の実施形態は、複数のコア、複数の論理プロセッサ、または、同一あるいは異なる命令セット及び／またはＩＳＡを有する複数の実行エンジンを有し得る。複数のプロセッサの複数のそのような構成要素には、文字通りに多数の異なる組み合わせ及び構成があり、複数の実施形態は、いかなる特定のそのような組み合わせまたは構成にも限定されない。
【００２８】
いくつかの実施形態において、オペレーションは、複数のコアの外側に配置される実行ユニットにより（例えば、ラストレベルのキャッシュ、ラストレベルの次のレベルのキャッシュ、または複数のラストレベルのキャッシュのうちの１つと同じ場所に配置された及び／または近接する実行ユニットにより）実行され得る。いくつかの実施形態において、オペレーションは、ラストレベルのキャッシュ、ラストレベルの次のレベルのキャッシュ、または複数のラストレベルのキャッシュのうちの１つから提供されまたは取得されたデータに対して実行ユニットにより実行され得る。いくつかの実施形態において、１つまたは複数の実行ユニット２２４は、最上位レベルのキャッシュ（または複数の最上位レベルのキャッシュのうちの１つ）に１つまたは複数の実行ユニット２２４を論理的に配置することと対照的に、ラストレベルのキャッシュ（または複数の最下位レベルのキャッシュのうちの１つ）と同一のメモリ階層レベルに論理的に配置され得る。概して、最上位レベルのキャッシュと、１つまたは複数の実行ユニットが動作するメモリ階層レベルとの間にキャッシュのレベルが多ければ多いほど、より良好な効率となる。いくつかの実施形態において、オペレーションは、データを提供したキャッシュ（例えば、ラストレベルのキャッシュ）より上位のすべてまたは少なくとも１つまたは複数の上位レベルのキャッシュをバイパスする当該データに対して実行され得る。複数のそのような実施形態において、ギャザーされまたはそうでなければロードされたデータは、演算されて次にスキャッタされまたはそうでなければメモリに戻って記憶される前に、いかなるそのような上位レベルのキャッシュ内にも、及び／またはコア内にも送られる必要はない。有利には、上位レベルのキャッシュにそのようなデータを記憶する必要を回避することは、上位レベルのキャッシュのスペースを空けるのに役に立ち得る。この空きスペースは、他のデータを記憶するのに用いられ得、性能の改善に役に立ち得る。さらに、いくつかの実施形態において、オペレーションは、アーキテクチャレジスタと対照的に、テンポラリレジスタに保持されているデータに対して実行され得る。これは、アーキテクチャレジスタが他の命令により使用可能であるように、アーキテクチャレジスタを空けるのに役に立ち得る。これはまた、（例えば、データをレジスタの内外にスワッピングすることを減少するのに役に立つことによるなど）性能を改善するのに役に立ち得る。さらに、相互接続の帯域幅、及び／または、そうでなければ最上位または複数の上位レベルのキャッシュ内に及び／またはコア内にデータを送るのに必要とされるであろう複数の他のリソースもまた、減少され得る。そのような相互接続の帯域幅及び／または他のリソースは、他の目的のために使用され得、性能を改善するのにもまた役に立ち得る。図３は、プロセッサ３００における実行ユニット３２４の位置の一実施形態を示すブロック図である。
【００２９】
プロセッサは、１つまたは複数のコア３５０を有する。図示において、プロセッサは、第１のコア３５０−１から任意選択的に第Ｎのコア３５０−Ｎまでを含み、Ｎは任意の適切なコアの数を表し得る。第１のコアは、復号ユニット３３０を含み、復号ユニット３３０は、本明細書の他の箇所で説明されている複数の復号ユニットと同様であってよく、インデックス付きベクトルメモリアクセス及びＡ／Ｌ演算命令の実施形態を復号化し得る。第１のコアはまた、実行ユニット３５１を含む。コアはまた、第１のコアによって実行される複数の命令によって示され得るアーキテクチャレジスタ３１０を含む。第１のコアは、第１レベル（Ｌ１）キャッシュ３５２をさらに含み、第２レベル（Ｌ２）キャッシュ３５３を任意選択的に含む。第Ｎのコアは、必要とされないが、第１のコアと任意選択的に同様、または同一であってよい。プロセッサはまた、複数のコアに連結されるラストレベルのキャッシュ（ＬＬＣ）３５４を含む。プロセッサはまた、ＬＬＣ及び複数のコアに連結されるメモリユニット３５５を含む。メモリユニットは、外部メモリ３２６に連結される。
【００３０】
いくつかの実施形態において、メモリユニットは、インデックス付きベクトルメモリアクセス及びＡ／Ｌ演算命令の実施形態を行うまたは実行するのに用いられる実行ユニットを含み得る。実行ユニットは、インデックス付きベクトルメモリアクセスオペレーション（例えば、ギャザーオペレーション及び／またはスキャッタオペレーション）を実行するように動作可能であり得るメモリアクセスユニット３５６を含む。実行ユニットはまた、メモリアクセスユニットに連結されるＡ／Ｌユニット３５７を含む。Ａ／Ｌユニットは、アクセスされたデータ（例えば、複数のインデックスを用いてロードされたベクトルデータ）に対してＡ／Ｌ演算を実行するように動作可能であり得る。メモリアクセスユニット３５６及びＡ／Ｌユニット３５７は、インデックス付きベクトルメモリアクセス及びＡ／Ｌ演算命令の実施形態を実行するように連携または一緒に機能し得る。いくつかの実施形態において、実行ユニット３２４は、外部メモリ３２６からロードされたデータがＬＬＣにロードされる前に、そのデータがＬＬＣにロードされているように、そのデータに対して複数の演算を実行し得、または、ＬＬＣから取得されたデータがＬＬＣにロードされている後にそのデータに対して複数の演算を実行し得る。いくつかの実施形態において、実行ユニット３２４は、コア３５０、Ｌ１キャッシュ３５２、またはＬ２キャッシュ３５３にロードされていないデータに対して複数のオペレーションを実行し得る。いくつかの実施形態において、実行ユニットは、これらの命令の実行をアシストする複数のテンポラリレジスタ３５８を含み得る。
【００３１】
例えば、複数のテンポラリレジスタは、ロードされたデータ及び／または命令を実行する間に生成された中間または一時性データを記憶するのに用いられ得る。そのようなテンポラリレジスタの使用は、アーキテクチャレジスタ３１０を占める必要がないようにするのに役に立つ。
【００３２】
図４は、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令の実施形態を処理する方法４６０の実施形態のブロックフロー図である。様々な実施形態において、方法は、汎用プロセッサ、特定用途向けプロセッサ、または他の命令処理装置もしくはデジタルロジックデバイスによって実行され得る。いくつかの実施形態において、図４の複数のオペレーション及び／または方法は、図１−３のうちのいずれかの装置によって及び／またはその中で実行され得る。図１−３の装置について本明細書で説明されている複数の構成要素、特徴、及び複数の具体的な任意的詳細はまた、図４の複数のオペレーション及び／または方法に任意選択的に適用する。代替的には、図４の複数のオペレーション及び／または方法は、同様または異なるプロセッサまたは装置によって及び／またはその中に実行され得る。さらに、図１−３のうちのいずれかの装置は、図４の複数のオペレーション及び／または方法と同一、同様、または異なるものを実行し得る。
【００３３】
ブロック４６１では、方法は、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令を受信する段階を備える。様々な態様において、命令は、プロセッサ、命令処理装置、またはそれらの一部分（例えば、命令フェッチユニット、復号ユニット、命令変換モジュールなど）において受信され得る。様々な態様において、命令は、オフダイソースから（例えば、ＤＲＡＭ、ディスク、相互接続などから）、またはオンダイソースから（例えば、命令キャッシュから、フェッチユニットからなど）受信され得る。いくつかの実施形態において、命令は、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを特定しまたはそうでなければ示し得る。いくつかの実施形態において、命令は、複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを特定しまたはそうでなければ示し得る。
【００３４】
ブロック４６２では、方法は、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令を実行する段階を含む。いくつかの実施形態において、これは、ブロック４６３において複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードする段階と、ブロック４６４においてソース・パックドデータ・オペランドの複数のパックドデータ要素及びロードされた複数のデータ要素に対して複数のＡ／Ｌ演算を実行する段階と、ブロック４６５において複数のパックドメモリインデックスに対応する複数のメモリ位置に複数の結果データ要素を記憶する段階とを含んでよい。ロードオペレーションのために用いられる同一の複数のインデックスはまた、ストアオペレーションのために用いられ得る。
【００３５】
示された方法は、複数のアーキテクチャ的に可視のオペレーション（例えば、ソフトウェア及び／またはプログラマに可視のもの）を伴う。複数の他の実施形態において、方法は、１つまたは複数のマイクロアーキテクチャオペレーションを任意選択的に含み得る。例として、命令は、並び順に依らず（ｏｕｔ  ｏｆ  ｏｒｄｅｒ）、フェッチされ得、復号化され得、予定され得て、複数のソースオペランドは、アクセスされ得、実行ユニットは、実行することが可能であってよくて命令の動作を実施するマイクロアーキテクチャオペレーションを実行し得る（例えば、パックドデータは、キャッシュからテンポラリレジスタに記憶され得、当該パックドデータは、当該テンポラリレジスタから動作され得、結果パックドデータは、当該テンポラリレジスタから戻ってキャッシュにまたはメモリに記憶され得るなど）、など。
【００３６】
図５は、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令の実施形態に応じて実行され得るインデックス付きベクトルロードオペレーションとＡ／Ｌ演算とストアオペレーション５６６の実施形態を示すブロック図である。いくつかの実施形態において、命令は、ギャザーとＡ／Ｌ演算とスキャッタ命令を表し得る。
【００３７】
命令は、複数のパックドメモリインデックスを有するソース・パックドメモリインデックス・オペランド５１４を特定しまたはそうでなければ示し得る。例示された実施形態において、ソース・パックドメモリインデックス・オペランドは、５１２ビット幅であり、１６の３２ビットのメモリインデックスを含むが、本願発明の範囲はそう限定されない。示された例において、複数のメモリインデックスの値は、（左側の）最下位の位置から（右側の）最上位の位置の順で、ビット［３１：０］においては１３４で、ビット［６３：３２］においては２３１で 、ビット［９５：６４］においては２０で、及びビット［５１１：４８０］においては１８６である。これらの値は、複数の示された例にすぎないことが理解されるべきである。主要なポイントは、複数の異なるメモリ位置を示すまたはそれらに対応する複数の値があることである。代替的には、他のサイズのメモリインデックスは、例えば、１６ビットのメモリインデックス、６４ビットのメモリインデックス、または当技術分野において既知の他のサイズのメモリインデックスなど、任意選択的に用いられ得る。さらに、複数の他の実施形態において、ソース・パックドメモリインデックス・オペランドは、例えば、６４ビット、１２８ビット、２５６ビット、または１０２４ビットなど、５１２ビットの他に別の適した幅を有し得る。
【００３８】
命令はまた、複数のパックドデータ要素を有するソース・パックドデータ・オペランド５１６を特定しまたはそうでなければ示し得る。例示された実施形態において、ソース・パックドデータ・オペランドはまた、５１２ビット幅であり、１６の３２ビットのデータ要素を含むが、本願発明の範囲はそう限定されない。示された例において、複数のデータ要素の値は、（左側の）最下位の位置から（右側の）最上位の位置の順で、ビット［３１：０］においてはＢ１で、ビット［６３：３２］においてはＢ２で、ビット［９５：６４］においてはＢ３であり、ビット［５１１：４８０］においてはＢ１６まで続く。代替的には、他のサイズのデータ要素は、例えば、８ビットのデータ要素、１６ビットのデータ要素、６４ビットのデータ要素、または当技術分野において既知の他のサイズのデータ要素など、任意選択的に用いられ得る。さらに、複数の他の実施形態において、ソース・パックドデータ・オペランドは、例えば、６４ビット、１２８ビット、２５６ビット、または１０２４ビットなど、５１２ビットの他に別の適した幅を有し得る。複数のメモリインデックスのビット幅が複数のデータ要素のビット幅と同一であるというような要件は存在しない。多くの場合、データ要素の数は、メモリインデックスの数と同一であるが、このことは、特定の種類のオペレーションに依存して必要とされない。
【００３９】
インデックス付きベクトルロードオペレーション、Ａ／Ｌ演算、及びストアオペレーションは、マスクされた命令の実施形態に応じて、及び／またはその結果として、実行され得る。オペレーションは、ソース・パックドメモリインデックス・オペランドの対応する複数のメモリインデックスにより示されたメモリの複数のメモリ位置から複数のデータ要素をギャザーまたはそうでなければロードし得る。各メモリインデックスは、対応するメモリ位置及び／またはそこに記憶されたデータ要素を指しまたは示し得る。例えば、例示された実施形態において、メモリインデックス１３４は、データ要素Ａ１を記憶するメモリ位置を示し得、メモリインデックス２３１は、データ要素Ａ２を記憶するメモリ位置を示し得、メモリインデックス２０は、データ要素Ａ３を記憶するメモリ位置を示し得、など、データ要素Ａ１６を記憶するメモリ位置を示し得るメモリインデックス１８６まで続く。Ａ／Ｌ演算（ＯＰ）は、ギャザーされまたはそうでなければロードされた複数のデータ要素、及びソース・パックドデータ・オペランド５１６の複数のデータ要素に対して実行され得る。複数の結果データ要素（すなわち、オペレーションの実行に起因するもの）は次に、スキャッタされ得、またはそうでなければ、ソース・パックドメモリインデックス・オペランドの複数のメモリインデックスにより示された対応する複数のメモリ位置に戻って記憶され得る。いくつかの実施形態において、命令の特定のオペレーションに依存して、複数の結果データ要素は、ソース・パックドデータ・オペランドの複数のデータ要素（例えば、３２ビットの複数のデータ要素）のサイズと同一であり得る。代替的には、複数の結果データ要素は、例えば、８ビット、１６ビット、６４ビットなどのように、ソース・パックドデータ・オペランドの複数のデータ要素より多くても少なくてもよい。
【００４０】
例示された実施形態において、説明の簡潔さのために、垂直型演算は、Ａ１  ＯＰ  Ｂ１に等しい第１の結果データ要素、Ａ２  ＯＰ  Ｂ２に等しい第２の結果データ要素、Ａ３  ＯＰ  Ｂ３に等しい第３の結果データ要素、及びＡ１６  ＯＰ  Ｂ１６に等しい第４の結果データ要素を生成するように、実行される。「に等しい」という用語が用いられている際に、飽和は、値を最大または最小の代表値へと飽和させるように任意選択的に実行され得ることが理解されるべきである。本明細書の他の箇所で説明されている前述の垂直型演算（例えば、パックド加算、パックド減算、パックド乗算、パックドシフト、パックド回転、様々な異なる種類の論理演算（論理積、論理和、論理否定、否定論理積など）など）のうちのいずれかは適する。一例として、パックド加算である演算の場合において、複数の結果データ要素は、Ａ１＋Ｂ１から、Ａ２＋Ｂ２、Ａ３＋Ｂ３など、Ａ１６＋Ｂ１６までを含み得る。別の例として、パックドシフトである演算の場合において、複数の結果データ要素は、シフトカウントによりＢ１にシフトされたＡ１、シフトカウントによりＢ２にシフトされるＡ２、等などを含み得る。複数の他の実施形態において、例えば、複数の水平型演算、複数の一部垂直／一部水平型演算、２つより多くのデータ要素を伴う複数の演算、または同様のもののような、複数の他の種類の演算が、任意選択的に実行され得る。図示に示されているように、メモリインデックス１３４に対応するメモリ位置のＡｌの値は、Ａｌ  ＯＰ  Ｂｌの値に上書きされ得、メモリインデックス２３１に対応するメモリ位置のＡ２の値は、Ａ２  ＯＰ  Ｂ２の値に上書きされ得、メモリインデックス２０に対応するメモリ位置のＡ３の値は、Ａ３  ＯＰ  Ｂ３の値に上書きされ得、そしてメモリインデックス１８６に対応するメモリ位置のＡ１６の値は、Ａ１６  ＯＰ  Ｂ１６の値に上書きされ得る。
【００４１】
図６は、マスクされたインデックス付きベクトルロードとＡ／Ｌ演算とストア命令の実施形態に応じて実行され得る、マスクされたインデックス付きベクトルロードオペレーションとＡ／Ｌ演算とストアオペレーション６６８の実施形態を示すブロック図である。いくつかの実施形態において、命令は、マスクされたギャザーとＡ／Ｌ演算とスキャッタ命令を表し得る。図6のマスクされたオペレーション及びマスクされた命令は、図５のマスクされていないオペレーション及びマスクされていない命令とは一定の類似性を有する。説明の不明瞭を回避するために、図6のマスクされたオペレーション／命令の異なる及び／または更なる特性は、図５のマスクされていないオペレーション／命令に対してすべての同様のまたは共通の特性を繰り返すことなく主に説明されるであろう。しかしながら、図５のマスクされていないオペレーション／命令の前述された複数の特性もまた、特に明記しない限り、あるいは明らかな場合でない限り、図６に任意選択的に適用することが理解されるべきである。
【００４２】
命令は、複数のパックドメモリインデックスを有するソース・パックドメモリインデックス・オペランド６１４を特定しまたはそうでなければ示し得る。命令はまた、複数のパックドデータ要素を有するソース・パックドデータ・オペランド６１６を特定しまたはそうでなければ示し得る。これらの各々は、図５について前述されたものと同様、または同一であり得、同一の変更例及び代替例を有し得る。
【００４３】
いくつかの実施形態において、マスクされた命令はまた、ソース・パックドデータ・オペレーション・マスクオペランド６１８を特定しまたはそうでなければ示し得る。ソース・パックドデータ・オペレーション・マスクオペランドは、命令に関連付けられた対応するオペレーションのセットが実行されるべきか否か及び／または対応する結果が記憶されるべきか否かをマスクし、プレディケートし、または条件付き制御するように動作可能である、プレディケートオペランドまたは条件付き制御オペランドを表し得る。パックドデータ・オペレーションマスクはまた、本明細書においては、オペレーションマスク、プレディケートマスク、または単にマスクとして称され得る。いくつかの実施形態において、マスキングまたはプレディケーションは、複数の異なるデータ要素に対する複数のオペレーションが他のものとは別個に及び／または他のものとは無関係にプレディケートされまたは条件付き制御され得るように、データ要素単位の粒度とし得る。マスクは、複数のマスク要素、複数のプレディケート要素、または複数の条件付き制御要素を含んでよい。一態様において、マスクの複数の要素は、対応する複数のソースデータ要素及び／または複数の結果データ要素との一対一対応関係に含まれ得る。いくつかの実施形態において、各マスク要素は、単一マスクビットであり得る。
【００４４】
各単一マスクビットの値は、命令に関連付けされた対応するオペレーションのセットが対応する複数のデータ要素に対して実行されるべきか否か、及び／または、対応する結果が送信先記憶位置に記憶されるべきか否かを制御し得る。可能な一慣例によると、各マスクビットは、対応するオペレーションのセットが実行されることを可能にし、かつ対応する結果データ要素が対応する送信先記憶位置に記憶されることを可能にする（例えば、バイナリ１へと設定され得る）第１の値を有し得、または、対応するオペレーションのセットが実行されることをさせないで、及び／または対応する結果データ要素が対応する送信先記憶位置に記憶されることをさせない（例えば、バイナリ０へとクリアされ得る）第２の値を有し得る。
【００４５】
示されたように、５１２ビット幅であり、１６の３２ビットのメモリインデックスを有するソース・パックドメモリインデックス・オペランド６１４の場合において、ソース・パックドデータ・オペレーション・マスクオペランド６１８は、各ビットがマスクビットを表す１６ビット幅であり得る。各マスクビットは、対応する位置のメモリインデックスに対応し得、及び／またはメモリインデックスによって指された関連メモリ位置に記憶されるべき結果データ要素に対応し得る。図示において、複数の対応する位置は、互いに対して垂直に整列される。複数の他の実施形態において、より多くのまたはより少ない結果データ要素がある場合、より多くのまたはより少ないマスクビットがあってよい。例えば、マスクは、ソース・パックドメモリインデックス６１４のメモリインデックスの数（例えば、４，８，３２，６４など）に等しいビット幅を有し得る。示された例において、マスクビットは、（左側の）最下位ビットから（右側の）最上位ビットの順では、１，０，１，・・・，０である。これは単に例示的な一例である。示された慣例によると、バイナリ０のマスクビット値は、マスクされた結果要素及び／または実行を必要とされないオペレーションのセットを表すが、他方、バイナリ１のマスクビット値は、マスクされていない結果要素及び／または実行されるべきオペレーションのセットを示す。各マスクされていない要素に対して、対応するインデックス付きベクトルロードオペレーション、Ａ／Ｌ演算、及びストアオペレーションは、実行されるべきである。対照的に、各マスクされた要素に対して、対応するインデックス付きベクトルロードオペレーション、Ａ／Ｌ演算、及びストアオペレーションが実行される必要はなく、または、仮にそれらが実行されたとしても、関連結果が関連メモリ位置に記憶される必要はない。多くの場合、マスクされたオペレーションを実行しくても、例えば、実行される必要がない複数のオペレーション上の複数のフォールト（例えば、複数のページフォールト）を回避する能力のように、利点がある。
【００４６】
マスクされたインデックス付きベクトルロードオペレーション、Ａ／Ｌ演算、及びストアオペレーションは、マスクされた命令の実施形態に応じて、及び／またはその結果として、実行され得る。いくつかの実施形態において、オペレーションのセット（例えば、ロード、Ａ／Ｌ、及びストアオペレーション）は、マスクビットの条件付き制御の対象である対応する複数のデータ要素に対して実行されてもされなくてもよい。いくつかの実施形態において、複数のデータ要素は、対応するマスクビットがマスクされていない（例えば、バイナリ１へ設定された）場合にのみ、対応する複数のメモリインデックスにより示された対応する複数のメモリ位置から選択的にギャザーされまたはそうでなければロードされ得る。
【００４７】
マスクされたパックドデータ・オペレーションマスクのビット（例えば、バイナリ０へクリアされたもの）に対応する複数のデータ要素は、ロードされなくてよい。次に、Ａ／Ｌ演算（ＯＰ）は、ロードされた複数のデータ要素、及びソース・パックドデータ・オペランド６１６の適切な複数のデータ要素に対してのみ選択的に実行され得る。次に、複数の結果データ要素は、対応するマスクビットがマスクされていない（例えば、バイナリ１へと設定された）場合にのみ、複数のメモリインデックスにより示された対応する複数のメモリ位置に戻って選択的にスキャッタされまたはそうでなければ記憶され得る。
【００４８】
示された例において、ソース・パックドデータ・オペレーションマスクのビット位置［０］及び［２］にあるマスクビットがマスクされていない（例えば、バイナリ１へと設定された）ので、メモリインデックス１３４に対応するメモリ位置のＡ１の値は、Ａｌ  ＯＰ  Ｂ１の値に上書きされ得、メモリインデックス２０に対応するメモリ位置のＡ３の値は、Ａ３  ＯＰ  Ｂ３の値に上書きされ得る。例示された実施形態において、説明の簡潔さのために、垂直型演算が実行される。前述された複数の垂直型演算のいずれもが適している。複数の他の実施形態において、複数の水平型演算、複数の一部垂直／一部水平型演算、２つより多くのデータ要素を伴う複数の演算、または同様のものが、代わりに実行され得る。
【００４９】
示された例において、マスクのビット位置［１］及び［１５］にあるマスクビットがマスクされている（例えば、バイナリ０へクリアされた）ので、命令に関連付けられたオペレーションのセットの複数の結果は、対応する複数のメモリインデックスにより示された複数のメモリ位置に記憶されない。むしろ、いくつかの場合において、これらのメモリ位置は、これらの命令前から存在する値を維持しまたは保存し得る（例えば、命令により変更されなくてよい）。示されたように、メモリインデックス２３１に関連付けられたメモリ位置は、初期値Ａ１を維持し得、メモリインデックス１８６に関連付けられたメモリ位置は、初期値Ａ１６を維持し得る。代替的には、複数のゼロまたは複数の他の予め定められ値は、マスクされた複数のメモリ位置に記憶され得る。
【００５０】
図７は、インデックス付きベクトルロード及びＡ／Ｌ演算命令の実施形態に応じて実行され得るインデックス付きベクトルロード及びＡ／Ｌ演算７７０の実施形態を示すブロック図である。いくつかの実施形態において、命令は、ギャザー及びＡ／Ｌ演算命令を表し得る。図７のオペレーション及び命令は、図５のオペレーション及び命令とは一定の類似性を有する。説明の不明瞭を回避するために、図７のオペレーション／命令に関する異なる及び／または追加の特性は、図５のオペレーション／命令に対してすべての同様のまたは共通の特性を繰り返されることなく主に説明されるであろう。しかしながら、記述されるかあるいは明らかでない限り、図５のオペレーション／命令の前述された複数の特性はまた、図７に任意選択的に適用することが理解されるべきである。
【００５１】
命令は、複数のパックドメモリインデックスを有するソース・パックドメモリインデックス・オペランド７１４を特定しまたはそうでなければ示し得る。命令はまた、複数のパックドデータ要素を有するソース・パックドデータ・オペランド７１６を特定しまたはそうでなければ示し得る。これらの各々は、図５について前述されたものと同様、または同一であってよく、同一の変更例及び代替例を有してよい。
【００５２】
インデックス付きベクトルロード及びＡ／Ｌ演算は、命令の実施形態に応じて、及び／またはその結果として実行され得る。オペレーションは、ソース・パックドメモリインデックス・オペランド７１４の対応する複数のメモリインデックスにより示された複数のメモリ位置から複数のデータ要素をギャザーしまたはそうでなければロードし得る。例えば、例示された実施形態において、データ要素Ａ１は、メモリインデックス１３４により示されたメモリ位置からギャザーされ得、データ要素Ａ２は、メモリインデックス２３１により示されたメモリ位置からギャザーされ得、データ要素Ａ３は、メモリインデックス２０により示されたメモリ位置からギャザーされ得、など、メモリインデックス１８６により示されたメモリ位置からギャザーされ得るデータ要素Ａ１６まで続く。次に、Ａ／Ｌ演算（ＯＰ）は、ギャザーされたまたはそうでなければロードされた複数のデータ要素、及びソース・パックドデータ・オペランドの適切な複数のデータ要素に対して実行され得る。これは、複数の結果データ要素を生成し得る。
【００５３】
図５のオペレーション／命令とは対照的に、この実施形態において、複数の結果データ要素は、メモリ７２６に戻ってスキャッタされなくてよく、またはそうでなければ記憶されなくてよい。むしろ、複数の結果データ要素は、オンダイまたはオンプロセッサで配置される記憶位置の結果パックドデータ・オペランドに記憶され得る。例えば、いくつかの実施形態において、複数の結果データ要素は、プロセッサのパックドデータレジスタの結果パックドデータに記憶され得る。いくつかの実施形態において、命令は、パックドデータレジスタを明白に特定するフィールドまたはビットのセットを有し得る。代替的には、パックドデータレジスタは任意選択的に、命令により暗黙に示され得る。複数の他の実施形態において、複数のテンポラリレジスタは、結果パックドデータを記憶するのに用いられ得る。
【００５４】
例示された実施形態において、説明の簡潔さのために、垂直型演算は、Ａ１  ＯＰ  Ｂ１に等しい第１の結果データ要素、Ａ２  ＯＰ  Ｂ２に等しい第２の結果データ要素、Ａ３  ＯＰ  Ｂ３に等しい第３の結果データ要素、Ａ１６  ＯＰ  Ｂ１６に等しい第１６の結果データ要素を生成するように、実行される。本明細書の他の箇所で説明されている前述の複数の垂直型演算のいずれもが適している。複数の他の実施形態において、例えば、複数の水平型演算、複数の一部垂直／一部水平型演算、２つより多くのデータ要素を伴う複数の演算、または同様のもののような、複数の他の種類の演算が、任意選択的に実行され得る。複数の結果データ要素は、結果パックドデータ・オペランド７７２に（例えば、パックドデータレジスタに）記憶される。示されたように、第１の結果データ要素は、ビット［３１：０］に記憶され、第２の結果データ要素は、ビット［６３：３２］に記憶され、第３の結果データ要素は、ビット［９５：６４］に記憶され、など、ビット［５１１：４８０］に記憶されている第１６の結果データ要素まで続く。複数の他の実施形態において、命令の複数の特定のオペレーションに依存して、複数の結果データ要素は、例えば、８ビット、１６ビット、６４ビットなどのように、ソース・パックドデータ・オペランドの複数のデータ要素より多くてよく、あるいはより少なくてよい。
【００５５】
図7はマスクされていないオペレーション／命令の実施形態を示す。複数の他の実施形態は、対応するマスクされたオペレーション／命令を含んでよい。複数のマスク及びマスキングは、複数の結果がメモリ７２６の代わりに結果パックドデータ・オペランド７７２に記憶されるかまたは記憶されないかという点を除き、図６と併せて上で説明されたように実質的に実行され得る。図６と併せて前述された複数のマスク及びマスキングの複数の特性はまた、この命令／オペレーションに適用してもよい。
【００５６】
様々な実施形態において、図５−７のうちのいずれによるオペレーションも、図１−３のうちのいずれによる装置によって及び／またはその中で実行され得る。図１−３のうちのいずれによる装置についての本明細書で説明された複数の構成要素、複数の特徴、及び複数の具体的な任意的詳細もまた、図５−７のうちのいずれによる複数のオペレーションに任意選択的に適用する。代替的には、図５−７のうちのいずれによる複数のオペレーションも、図１−３の装置と同様または異なるものによって及び／またはその中で実行され得る。さらに、図１−３のうちのいずれによる装置も、図５−７の複数のオペレーションと同一、同様、または異なるものを実行し得る。図５−７のうちのいずれによる複数のオペレーションもまた、図４の方法の一部分として実行され得る。代替的には、図４の方法は、図５−７のオペレーションと同様または異なるものを実行し得る。
【００５７】
本明細書に開示されている複数の命令は、汎用命令であり、様々な異なる目的のために用いられ得る。複数の特定の概念をさらに示すために、以下の詳細な例を考慮する。以下のループを考慮する。
ＦＯＲ  Ｉ＝１，Ｎ
ＤＡＴＡ［ＩＮＤＥＸ［Ｉ］］＝ＤＡＴＡ［ＩＮＤＥＸ［Ｉ］］＋ＣＯＵＮＴ
【００５８】
本明細書に開示されている命令がなければ、そのようなループは、以下のように、ｘ８６命令に符号化され得る。
ＭＯＶ  ＺＭＭ２，［ＩＮＤＥＸ＋ＲＳＩ］
ＧＡＴＨＥＲＤＰＳ  ＺＭＭ１，［ＤＡＴＡ＋ＺＭＭ２＊ＳＣＡＬＥ］
ＡＤＤＰＳ  ＺＭＭ１，ＺＭＭ１，ＺＭＭ３
ＳＣＡＴＴＥＲＤＰＳ［ＤＡＴＡ＋ＺＭＭ２＊ＳＣＡＬＥ］，ＺＭＭ１
【００５９】
しかしながら、ギャザーとパックド加算とスキャッタ命令の実施形態によると、そのようなループは、以下のようにより簡潔に符号化され得る。
ＭＯＶ  ＺＭＭ２，［ＩＮＤＥＸ＋ＲＳＩ］
ＧＡＴＡＤＤＳＣＡＴＤＰＳ［ＤＡＴＡ＋ＺＭＭ２＊ＳＣＡＬＥ］，ＺＭＭ３
【００６０】
有利には、この例は、ギャザーとパックド加算とスキャッタ命令がいくつかの命令を省きまたは減らすのに役に立ち得、そのことは符号密度を増加させて性能を向上させるのに役に立ち得ることを示す。さらに、性能向上はまた、アドレス生成におけるオーバヘッド及び各要素に対するロード／記憶処理の低減により得ることができる。上述のように、実際の性能向上は、命令がそのパイプラインで実装されているユニットまたは回路の位置に依存し得る。概して、命令がメモリにより近く実装されていればいるほど、または逆にシステムの最上位レベルのキャッシュからより遠く実装されていればいるほど、性能向上はより良好となるであろう。上述のように、これは、最上位または複数の上位レベルのキャッシュに命令の実行に関連付けられたデータを記憶する必要性を回避すること、最上位または複数の上位レベルのキャッシュに相互接続上でそのデータを送信する必要性を回避することなどに部分的に起因し得る。
【００６１】
図８は、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令８０６のためのフォーマットの実施形態のブロック図である。命令は、オペレーションコードまたはオペコード８８０を含む。オペコードは、実行されるべき命令及び／またはオペレーションの種類を識別するように動作可能な複数のビットまたは１つまたは複数のフィールドを表し得る。命令はまた、ソース・パックドメモリインデックス・オペランドを特定するように動作可能なソース・パックドメモリインデックス・フィールド８８１を含む。命令はまた、ソース・パックドデータ・オペランドを特定するように動作可能なソース・パックドデータ・フィールド８８２を含む。いくつかの実施形態において、命令はまた、ソース・パックドデータ・オペレーションマスクを特定するように動作可能なソース・パックドデータ・オペレーション・マスクフィールド８８３を任意選択的に含み得る。いくつかの実施形態において、命令はまた、ベースアドレスまたは他のメモリアドレス情報を有するソース（例えば、汎用レジスタ）を特定するメモリアドレッシング情報フィールドのソース８８５を任意選択的に含み得る。代替的には、命令は、レジスタまたはそのようなメモリアドレッシング情報を有する他のソースを暗黙に示し得る。
【００６２】
図９は、インデックス付きベクトルロード及びＡ／Ｌ演算命令９０８のためのフォーマットの実施形態のブロック図である。命令は、オペレーションコードまたはオペコード９８０を含む。オペコードは、実行されるべき命令及び／またはオペレーションの種類を識別するのに動作可能な複数のビットまたは１つまたは複数のフィールドを表し得る。命令はまた、ソース・パックドメモリインデックス・オペランドを特定するのに動作可能なソース・パックドメモリインデックス・フィールド９８１を含む。命令はまた、ソース・パックドデータ・オペランドを特定するように動作可能なソース・パックドデータ・フィールド９８２を含む。いくつかの実施形態において、命令はまた、ソース・パックドデータ・オペレーション・マスクを特定するように動作可能なソース・パックドデータ・オペレーション・マスクフィールド９８３を任意選択的に含み得る。命令はまた、送信先パックドデータ記憶位置を特定するように動作可能な任意的な送信先パックドデータフィールド９８４を含み得る。いくつかの実施形態において、送信先パックドデータ記憶位置は、パックドデータレジスタまたは、他のオンダイもしくはオンプロセッサの記憶位置であり得る。いくつかの実施形態において、命令はまた、ベースアドレスまたは他のメモリアドレス情報を有するソース（例えば、汎用レジスタ）を特定するメモリアドレッシング情報フィールドのソース９８５を任意選択的に含み得る。代替的には、命令は、レジスタまたはそのようなメモリアドレッシング情報を有する他のソースを暗黙に示し得る。
【００６３】
図８−９において、様々なフィールドの各々は、レジスタのアドレスまたは複数のオペランドを有する他の記憶位置を特定するのに十分なビットのセットを含み得る。複数のフィールドのビットは、連続的であってよく、及び／または非連続的であってよい。複数の他の実施形態において、様々なフィールドのうちのいずれかの１つまたは複数は、フィールドを通して明白に特定される代わりに、（例えば、命令のオペコードにより暗黙に示されるなど）命令に対して暗黙であり得る。複数の代替的な実施形態は、更なるフィールドを追加し得、またはフィールドのうちのいくつかを省略し得る。さらに、示されたフィールドの順序／配置は必要とされない。むしろ、フィールドは、再配置され得、いくつかのフィールドは重複し得る、等など。
【００６４】
いくつかの実施形態において、命令フォーマットは、必要とされないが、ＥＶＥＸ符号化または命令フォーマットに従い得る。ＥＶＥＸ符号化は、以下でさらに説明されるであろう。一実施形態において、２つのレガシプレフィックスは、エスケープ６２の動作を無効にするのに用いられ得る。例えば、プレフィックス  Ｆ２は、ロードオペレーションフォーマット及びＶＳＩＢの使用を示唆し得る。一実施形態において、このプレフィックス  Ｆ２は、本明細書の他の箇所に開示されているようなインデックス付きベクトルロード及びＡ／Ｌ演算命令のために用いられ得る。プレフィックス  Ｆ３は、オペレーション記憶フォーマット及びＶＳＩＢの使用を示唆し得る。一実施形態において、このプレフィックス  Ｆ３は、本明細書の他の箇所に開示されているようなインデックス付きベクトルロードとＡ／Ｌ演算とストア命令のために用いられ得る。
【００６５】
例として、ＶＡＤＤＰＳ符号化に対しては以下となる。
ＥＶＥＸ．Ｕ１．ＮＤＳ．５１２．０Ｆ．Ｗ０  ５８／ｒ  ＶＡＤＤＰＳ  ｚｍｍ１，｛ｋ１｝，ｚｍｍ２，［ｒａｘ］
ギャザー及びパックド加算命令は、以下のように表され得る。
Ｆ２．ＥＶＥＸ．Ｕ１．ＮＤＳ．５１２．０Ｆ．Ｗ０  ５８／ｒ  ａｎｄ  ＶＧＡＴＨＥＲＡＤＤＰＳ  ｚｍｍ１，｛ｋ１｝，ｚｍｍ２，［ｒａｘ＋ｚｍｍ３＊ｓｃａｌｅ］
【００６６】
ギャザーとパックド加算とスキャッタ命令は、以下のように表され得る。
Ｆ３．ＥＶＥＸ．Ｕ１．ＮＤＳ．５１２．０Ｆ．Ｗ０  ５８／ｒ  ａｎｄ  ＶＧＡＴＳＣＡＴＡＤＤＰＳ  ［ｒａｘ＋ｚｍｍ３＊ｓｃａｌｅ］｛ｋ１｝，ｚｍｍ１，ｚｍｍ２
【００６７】
ｚｍｍｌ、ｚｍｍ２、及びｚｍｍ３は、５１２ビットのパックドデータレジスタを指す。｛ｋ１｝は、６４ビットのマスクレジスタを表す。ｒａｘは、メモリアドレッシング情報を保持するのに用いられる整数の汎用レジスタを表す。これらは、単に適した符号化の例示的な例である。本願発明の範囲は、これらの符号化に限定されない。
【００６８】
特定の概念をさらに示すために、適したパックドデータフォーマットのいくつかの例を考慮する。１２８ビットのパックドワードフォーマットは、１２８ビット幅であり、８つの１６ビット幅のワードデータ要素を含む。１２８ビットのパックドダブルワードフォーマットは、１２８ビットであり、４つの３２ビットのダブルワードデータ要素を含む。１２８ビットのパックドクワッドワードフォーマット８４６は、１２８ビットであり、２つの６４ビットのクワッドワードデータ要素を含む。２５６ビットのパックドワードフォーマットは、２５６ビット幅であり、１６の１６ビット幅のワードデータ要素を含む。２５６ビットのパックドダブルワードフォーマット８５０は、２５６ビットであり、８つの３２ビットのダブルワードデータ要素を含む。２５６ビットのパックドクワッドワードフォーマットは、２５６ビットであり、４つの６４ビットのクワッドワードデータ要素を含む。５１２ビットのパックドワードフォーマットは、５１２ビット幅であり、３２の１６ビット幅のワードデータ要素を含む。５１２ビットのパックドダブルワードフォーマットは、５１２ビットであり、１６の３２ビットのダブルワードデータ要素を含む。５１２ビットのパックドクワッドワードフォーマットは、５１２ビットであり、８つの６４ビットのクワッドワードデータ要素を含む。他のパックドデータフォーマットは、パックド３２ビットの単精度浮動小数点フォーマットまたはパックド６４ビットの倍精度浮動小数点フォーマットを含み得る。ギャザー及び／またはスキャッタ命令に適した（例えば、より広いまたはより狭い）任意の他のデータ要素サイズもまた適している。さらに、例えば、６４ビットのパックドデータ、１０２４ビットのパックドデータなどのようなより広いまたはより狭いパックドデータ幅もまた適している。概して、パックドデータ要素の数は、パックドデータのビットサイズをパックドデータ要素のビットサイズで割った値に等しい。
【００６９】
図１０は、パックドデータレジスタ１０１２の特定の適したセットの例示的な実施形態のブロック図である。示された複数のパックドデータレジスタは、３２の５１２ビットのパックドデータまたはベクトルレジスタを含む。これら３２の５１２ビットのレジスタはＺＭＭ０からＺＭＭ３１にラベリングされる。例示された実施形態において、必要とされないが、これらのレジスタの下位１６の下位２５６ビット、すなわち、ＺＭＭ０−ＺＭＭ１５は、それぞれの２５６ビットのパックドデータまたは、ＹＭＭ０−ＹＭＭ１５にラベリングされたベクトルレジスタ上にエイリアスされまたはオーバーレイされる。同様に、例示された実施形態において、下位１２８ビットのＹＭＭ０−ＹＭＭ１５は、それぞれの１２８ビットのパックドデータまたは、ＸＭＭ０−ＸＭＭ１にラベリングされたベクトルレジスタ上にエイリアスされまたはオーバーレイされるが、これもまた必要とされない。５１２ビットのレジスタであるＺＭＭ０からＺＭＭ３１は、５１２ビットのパックドデータ、２５６ビットのパックドデータ、または１２８ビットのパックドデータを保持するように動作可能である。２５６ビットのレジスタであるＹＭＭ０−ＹＭＭ１５は、２５６ビットのパックドデータ、または１２８ビットのパックドデータを保持するように動作可能である。１２８ビットのレジスタであるＸＭＭ０−ＸＭＭ１は、１２８ビットのパックドデータを保持するように動作可能である。レジスタの各々は、パックド浮動小数点データまたはパックド整数データのいずれかを記憶するのに用いられ得る。少なくとも８ビットのバイトデータ、１６ビットのワードデータ、３２ビットのダブルワード、単精度浮動小数点データ、６４ビットのクワッドワード、及び倍精度浮動小数点データを含む異なるデータ要素のサイズがサポートされる。適したパックドデータレジスタの代替的な実施形態は、異なる数のレジスタ、異なるサイズのレジスタを含み得、より小さいレジスタ上でより大きいレジスタをエイリアスしてもしなくてもよく、また浮動小数点データのためにも用いられても用いられなくてもよい。
【００７０】
図１１は、パックドデータ・オペレーション・マスクレジスタ１１１８の特定の適したセットの例示的な実施形態のブロック図である。パックドデータ・オペレーション・マスクレジスタの各々は、パックドデータ・オペレーション・マスクを記憶するのに用いられ得る。例示された実施形態において、セットは、ｋ０からｋ７とラベリングされた８つのパックドデータ・オペレーション・マスクレジスタを含む。代替的な実施形態は、（例えば、２、４、６など）８より少ない、または（例えば、１６、２０、３２など）８より多いパックドデータ・オペレーション・マスクレジスタのいずれかを含んでよい。例示された実施形態において、パックドデータ・オペレーション・マスクレジスタの各々は、６４ビットである。代替的な実施形態において、パックドデータ・オペレーション・マスクレジスタの幅は、（例えば、８０ビット、１２８ビットなど）６４ビットより広くてよく、あるいは、（例えば、８ビット、１６ビット、３２ビットなど）６４ビットより狭くてもよい。例として、命令は、ｋ０からｋ７の８つのパックドデータ・オペレーション・マスクレジスタのうちの任意の１つを符号化または特定するように３ビット（例えば、３ビットのフィールド）を用い得る。代替的な実施形態において、より少ない、あるいはより多いパックドデータ・オペレーション・マスクレジスタがある場合、それぞれ、より少ない、あるいはより多いビットが用いられてよい。
【００７１】
図１２は、特定の適した６４ビットのパックドデータ・オペレーション・マスクレジスタ１２１８の例示的な実施形態を示し、パックドデータ・オペレーション・マスクとして、及び／または、マスキングするために用いられるビットの数はパックドデータ幅及びデータ要素幅に依存することを示す図である。上述のようにこれは必要とされないが、示されたマスクレジスタは６４ビット幅である。概して、要素単位の単一マスキング制御ビットが用いられる場合、マスキングに用いられるビットの数は、パックドデータのビット幅をパックドデータ要素のビット幅で割った値に等しい。さらに示すために、いくつかの可能な例示的な実施形態を考慮する。８ビットのみ、例えば、下位の８ビットのみが、３２ビットのデータ要素を有する２５６ビットのパックドデータに用いられ得る。１６ビットのみ、例えば、下位の１６ビットのみは、３２ビットのデータ要素を有する５１２ビットのパックドデータのために用いられ得る。３２ビットのみ、例えば、下位の３２ビットのみが、３２ビットのデータ要素を有する１０２４ビットのパックドデータに用いられ得る。すべての６４ビットは、１６ビットのデータ要素を有する１０２４ビットのパックドデータに用いられ得る。
【００７２】
上の説明において、垂直型ベクトル演算が図示及び説明を容易にするように強調されていたが、本願発明の範囲はそれに限定されない。垂直型のベクトル演算を使用して本明細書で説明されている実施形態のいずれもが、別の非垂直型のベクトル演算（例えば、一部垂直型及び一部水平型演算、垂直に整列された一組より多くの対応するデータ要素に対する演算など）を有するように変更され得る。
【００７３】
他の実施形態において、単一算術及び／または論理演算（例えば、パックド乗算またはパックド加算演算）を伴う命令の代わりに、命令の実施形態は、順次に実行されるべき複数の異なる算術及び／または論理演算を伴い得る。
【００７４】
例えば、インデックス付きベクトルロード後に、第１の算術及び／または論理演算は、本明細書の他の箇所で説明されたように実行され得、次に第２の算術及び／または論理演算は、第１の算術及び／または論理演算の結果及び潜在的に他のデータに対して任意選択的に実行され得、そして次に、第２の算術及び／または論理演算の結果は、メモリへ記憶され得る。
【００７５】
図３及び図５−１２のうちのいずれかについて説明された複数の構成要素、複数の特徴、及び複数の詳細はまた、図１−２及び図４のうちのいずれにおいても任意選択的に用いられ得る。さらに、装置のうちのいずれについても本明細書で説明されている複数の構成要素、複数の特徴、及び複数の詳細はまた、本明細書で説明されている方法のうちのいずれにおいても任意選択的に用いられ得、その方法は、実施形態において、そのような装置により、及び／またはそのような装置と共に実行され得る。
【００７６】
命令セットは、１つまたは複数の命令フォーマットを含む。所与の命令フォーマットは、他のものの中から実行されるべきオペレーション（オペコード）及びオペレーションが実行されるべきオペランドを特定するように、様々なフィールド（ビットの数、ビットの位置）を定義する。いくつかの命令フォーマットは、複数の命令テンプレート（または複数のサブフォーマット）の定義により、さらに分割される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義され得（含まれたフィールドは通常同一の順序にあるが、含まれたフィールドがより少ないので、少なくともいくつかは異なるビット位置を有する）、及び／または異なる解釈をされる所与のフィールドを有するように定義され得る。したがって、ＩＳＡの各命令は、所与の命令フォーマットを用いて（及び、定義された場合、その命令フォーマットの命令テンプレートのうち所与の１つで）表され、オペレーション及び複数のオペランドを特定する複数のフィールドを含む。例えば、例示的なＡＤＤ命令は、特定のオペコード及びオペランドフィールドを特定して複数のオペランド（ソース１／送信先及びソース２）を選択するために、特定のオペコード及びオペコードフィールドを含む命令フォーマットを有し、命令ストリームにおけるこのＡＤＤ命令の発生は、特定の複数のオペランドを選択する複数のオペランドフィールド内の特定の複数のコンテンツを有するであろう。アドバンスト・ベクトル・エクステンション（ＡＶＸ）（ＡＶＸ１及びＡＶＸ２）と称され、ベクトル・エクステンション（ＶＥＸ）符号化方式を用いるＳＩＭＤ拡張命令のセットは、リリース及び／または公開されていた（例えば、２０１１年１０月のインテル（登録商標）６４及びＩＡ−３２アーキテクチャソフトウェアデベロッパマニュアルを参照、及び２０１１年６月のインテル（登録商標）アドバンスト・ベクトル・エクステンション・プログラミング・レファレンスを参照）。
［例示的命令フォーマット］
【００７７】
本明細書で説明されている命令の実施形態は、異なるフォーマットに具現化され得る。更に、例示的システム、アーキテクチャ、及びパイプラインは以下で詳細にされる。命令の実施形態は、そのようなシステム、アーキテクチャ、及びパイプライン上で実行され得るが、それらの詳細に限定されない。
［ジェネリックベクトル向け命令フォーマット］
【００７８】
ベクトル向け命令フォーマットは、ベクトル命令に適した命令フォーマットである（例えば、ベクトル演算に特有のいくつかのフィールドがある）。ベクトル向け命令フォーマットを通してベクトル及びスカラ演算の両方がサポートされる実施形態が説明されている一方で、代替的な実施形態は、ベクトル向け命令フォーマットのベクトル演算のみを用いる。
【００７９】
図１３Ａ−図１３Ｂは、本願発明の複数の実施形態に係るジェネリックベクトル向け命令フォーマット及びそれらの命令テンプレートを示すブロック図である。図１３Ａは、本願発明の複数の実施形態に係るジェネリックベクトル向け命令フォーマット及びそれらのクラスＡの命令テンプレートを示すブロック図である一方で、図１３Ｂは、本願発明の複数の実施形態に係るジェネリックベクトル向け命令フォーマット及びそれらのクラスＢの命令テンプレートを示すブロック図である。具体的には、クラスＡ及びクラスＢの命令テンプレートが定義されたジェネリックベクトル向け命令フォーマット１３００用に定義され、その両方は、ノーメモリアクセス１３０５の命令テンプレート及びメモリアクセス１３２０の命令テンプレートを含む。ジェネリックという用語は、ベクトル向け命令フォーマットとの関連では、いずれの具体的な命令セットにも紐づけされない命令フォーマットを指す。
【００８０】
ベクトル向け命令フォーマットが以下をサポートする本願発明の複数の実施形態が説明される。３２ビット（４バイト）または６４ビット（８バイト）データ要素幅（またはサイズ）を有する６４バイトのベクトル・オペランド長（またはサイズ）（したがって、１６のダブルワードサイズ要素または代替的には８のクワッドワードサイズ要素のいずれからなる６４バイトのベクトル）、１６ビット（２バイト）または８ビット（１バイト）データ要素幅（またはサイズ）を有する６４バイトのベクトル・オペランド長（またはサイズ）、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）データ要素幅（またはサイズ）を有する３２バイトのベクトル・オペランド長（またはサイズ）、及び３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）データ要素幅（またはサイズ）を有する１６バイトのベクトル・オペランド長（またはサイズ）である。一方、複数の代替的な実施形態は、より多い、より少ない、または異なるデータ要素幅（例えば、１２８ビット（１６バイト）データ要素幅）を有するより多い、より少ない、及び／または異なるベクトルオペランドサイズ（例えば、２５６バイトのベクトル・オペランド）をサポートしてよい。
【００８１】
図１３ＡのクラスＡの命令テンプレートは、１）ノーメモリアクセス１３０５の命令テンプレート内に示される、ノーメモリアクセス、フルラウンド制御型オペレーション１３１０の命令テンプレート及びノーメモリアクセスデータ変換型オペレーション１３１５の命令テンプレート、かつ２）メモリアクセス１３２０の命令テンプレート内に示される、メモリアクセス、一時的１３２５命令テンプレート及びメモリアクセス、非一時的１３３０命令テンプレートを含む。
【００８２】
図１３ＢのクラスＢの命令テンプレートは、１）ノーメモリアクセス１３０５の命令テンプレート内に示される、ノーメモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション１３１２の命令テンプレート及びノーメモリアクセス、書き込みマスク制御、ｖｓｉｚｅ型オペレーション１３１７の命令テンプレート、かつ２）メモリアクセス１３２０命令テンプレート内に示される、メモリアクセス、書き込みマスク制御１３２７の命令テンプレートを含む。
【００８３】
ジェネリックベクトル向け命令フォーマット１３００は、図１３Ａ−１３Ｂに示されている順序において下で列挙される以下のフィールドを含む。
【００８４】
［フォーマットフィールド１３４０］このフィールドの特定の値（命令フォーマットの識別子値）がベクトル向け命令フォーマットを一意に識別し、これにより、複数の命令ストリームのベクトル向け命令フォーマットにおいて、複数の命令発生を識別する。このように、このフィールドは、ジェネリックベクトル向け命令フォーマットのみを有する命令セットにとっては必要とされないという意味で、任意的である。
［ベースオペレーションフィールド１３４２］当該コンテンツは、異なる複数のベースオペレーションを区別する。 
【００８５】
［レジスタインデックスフィールド１３４４］当該コンテンツは、直接またはアドレス生成を通じて、ソース及び送信先オペランドの位置をそれがレジスタにあってもメモリにあっても特定する。これらは、ＰｘＱ（例えば、３２ｘ５１２、１６ｘ１２８、３２ｘ１０２４、６４ｘ１０２４）のレジスタファイルからＮ個のレジスタを選択するのに十分なビットの数を含む。一実施形態において、Ｎは最大で３つのソース及び１つの送信先レジスタであってもよく、代替的な実施形態は、より多くのまたはより少ないソース及び送信先レジスタをサポートしてもよい（例えば、最大で２つのソースをサポートしこれらのソースの１つが送信先として動作てもよく、最大で３つのソースをサポートしこれらのソースの１つが送信先として動作してもよく、最大で２つのソース及び１つの送信先をサポートしてもよい）。
【００８６】
［修飾子フィールド１３４６］当該コンテンツは、ジェネリックベクトル命令フォーマットにおけるメモリアクセスを特定する複数の命令の発生と、メモリアクセスを特定しない命令の発生とを区別する。すなわち、ノーメモリアクセス１３０５の命令テンプレートとメモリアクセス１３２０の命令テンプレートとを区別する。複数のメモリアクセスオペレーションは、メモリ階層に対して読み出し及び／または書き込みを行う（いくつかの場合において、レジスタ内の複数の値を用いてソース及び／または送信先アドレスを特定する）が、複数の非メモリアクセスオペレーションは、行わない（例えば、ソース及び複数の送信先は、複数のレジスタである）。一実施形態では、このフィールドはまた、複数のメモリアドレス算出を実行するために３つの異なる態様から選択するが、代替的な実施形態は、複数のメモリアドレス算出を実行するために、より多くの、より少ない、または複数の異なる態様をサポートしてもよい。
【００８７】
［増加オペレーションフィールド１３５０］当該コンテンツは、ベースオペレーションに加え、様々な異なる複数のオペレーションの中でどれが実行されるべきかを区別する。このフィールドは、状況に応じる。本願発明の一実施形態において、このフィールドは、クラスフィールド１３６８、アルファフィールド１３５２及びベータフィールド１３５４に分割される。増加オペレーションフィールド１３５０は、２つ、３つまたは４つの命令ではなく、単一の命令において、共通した複数の演算のグループが実行されることを可能にする。
【００８８】
［スケールフィールド１３６０］当該コンテンツは、メモリアドレス生成のために（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅを用いるアドレス生成のために）、インデックスフィールドのコンテンツをスケーリングすることを可能にする。
【００８９】
［変位フィールド１３６２Ａ］当該コンテンツは、メモリアドレス生成の一部分として（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅ＋ｄｉｓｐｌａｃｅｍｅｎｔを用いるアドレス生成のために）、用いられる。
【００９０】
［変位ファクタフィールド１３６２Ｂ］（変位ファクタフィールド１３６２Ｂの上方に直接に変位フィールド１３６２Ａを並列させることは、一方または他方が用いられることを示すことを留意されたい）当該コンテンツは、アドレス生成の一部分として用いられ、メモリアクセスのサイズ（Ｎ）（Ｎは当該メモリアクセスのバイトの数である）によってスケーリングされるべき変位ファクタを特定する（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅ＋ｓｃａｌｅｄ  ｄｉｓｐｌａｃｅｍｅｎｔを用いるアドレス生成のために）。複数の冗長下位ビットが無視されることによって、有効アドレスの算出で用いられるべき最終変位を生成すべく、変位ファクタフィールドのコンテンツに、複数のメモリオペランドの合計サイズ（Ｎ）が乗じられる。Ｎの値は、フルオペコードフィールド１３７４（本明細書で後述される）及びデータ操作フィールド１３５４Ｃに基づいて、プロセッサハードウェアによってランタイムに決定される。変位フィールド１３６２Ａ及び変位ファクタフィールド１３６２Ｂは、これらがノーメモリアクセス１３０５の複数の命令テンプレートのために用いられなく、及び／または複数の異なる実施形態が、２つのうち１つのみを実装してもよく、または１つも実装しなくてもよいという意味で、任意的である。
【００９１】
［データ要素幅フィールド１３６４］当該コンテンツは、（いくつかの実施形態においては、すべての命令に対して、複数の他の実施形態においては、いくつかの命令のみに対して）多数のデータ要素幅の中でどれが用いられるべきかを区別する。このフィールドは、複数のオペコードのいくつかの態様を用いて、データ要素幅が１つのみサポートされ、及び／または複数のデータ要素幅がサポートされる場合には必要とされないという意味で、任意的である。
【００９２】
［書き込みマスクフィールド１３７０］当該コンテンツは、データ要素位置単位に基づいて、送信先ベクトルオペランドのデータ要素位置がベースオペレーション及び増加オペレーションの結果を反映するか否かを制御する。クラスＡの命令テンプレートは、結合書き込みマスクをサポートする一方、複数のクラスＢの命令テンプレートは、結合及びゼロ書き込みマスクの両方をサポートする。結合する場合、複数のベクトルマスクにより、送信先における複数の要素の任意のセットは、（ベースオペレーション及び増加オペレーションによって特定される）あらゆるオペレーションの実行中に、複数の更新から保護されることができ、他の一実施形態では、対応するマスクビットが０を有する場合、送信先の各要素の古い値を保存する。対照的に、ゼロを書き込む場合、複数のベクトルマスクにより、送信先における複数の要素の任意のセットは、（ベースオペレーション及び増加オペレーションによって特定される）あらゆるオペレーションの実行中に、ゼロを書き込まれることができ、一実施形態では、対応するマスクビットが０値を有する場合、送信先の要素は、０に設定される。この機能性のサブセットは、実行中のオペレーションのベクトル長（すなわち、修正中の複数の要素の最初の要素から最後の要素までの全長）を制御する能力であるが、しかしながら、変更される複数の要素が連続している必要はない。つまり、書き込みマスクフィールド１３７０は、ロード、記憶、算術、論理などを含む複数の部分的なベクトル演算を可能にする。本願発明の複数の実施形態が説明され、その中で用いられる書き込みマスクを含むいくつかの書き込みマスクレジスタの１つを書き込みマスクフィールド１３７０のコンテンツが選択する（したがって、書き込みマスクフィールド１３７０のコンテンツは間接的に、実行されるマスキングを識別する）。その一方で、複数の代替的な実施形態は、その代わりに、またはそれに追加して、マスク書き込みフィールド１３７０のコンテンツが実行されるマスキングを直接的に特定することを可能にする。
【００９３】
［即値フィールド１３７２］当該コンテンツは、即値の仕様を可能にする。このフィールドは、即値をサポートしないジェネリックベクトル向けフォーマットの実装に存在しないかつ即値を用いない命令には存在しないという意味で、任意的である。
【００９４】
［クラスフィールド１３６８］当該コンテンツは、複数の命令の異なる複数のクラスを区別する。図１３Ａ−Ｂを参照すると、このフィールドの当該コンテンツは、クラスＡ及びクラスＢの命令から選択する。図１３Ａ−Ｂにおいて、複数の角丸四角形は、特定の値がフィールドに存在することを示すのに用いられる（例えば、図１３Ａ−Ｂのそれぞれにおいて、クラスフィールド１３６８に対するクラスＡの１３６８Ａ及びクラスＢの１３６８Ｂ）。
【００９５】
［クラスＡの命令テンプレート］非メモリアクセス１３０５のクラスＡの複数の命令テンプレートの場合、アルファフィールド１３５２は、ＲＳフィールド１３５２Ａと解釈され、そのコンテンツは、複数の異なる増加オペレーション型のどれが実行されるべきかを区別し（例えば、ノーメモリアクセス、ラウンド型オペレーション１３１０及びノーメモリアクセス、データ変換型オペレーション１３１５の複数の命令テンプレートに対し、ラウンド１３５２Ａ．１及びデータ変換１３５２Ａ．２がそれぞれ特定される）、ベータフィールド１３５４は、特定される型の複数のオペレーションのどれが実行されるべきかを区別する。ノーメモリアクセス１３０５の命令テンプレートにおいてスケールフィールド１３６０、変位フィールド１３６２Ａ、及び変位スケールフィールド１３６２Ｂは存在しない。
【００９６】
［ノーメモリアクセス命令テンプレート］［フルラウンド制御型オペレーション］当該ノーメモリアクセスフルラウンド制御型オペレーション１３１０の命令テンプレートにおいて、ベータフィールド１３５４は、ラウンド制御フィールド１３５４Ａとして解釈され、当該コンテンツは、スタティックラウンドを提供する。説明された本願発明の複数の実施形態では、ラウンド制御フィールド１３５４Ａは、すべての浮動小数点例外抑制（ＳＡＥ）フィールド１３５６及びラウンドオペレーション制御フィールド１３５８を含むが、代替的な実施形態は、これらの複数の概念の両方を同一のフィールドに符号化することをサポートしてもよく、またはこれらの概念／フィールドの一方または他方を有するのみでよい（例えば、ラウンドオペレーション制御フィールド１３５８のみを有してもよい）。 
【００９７】
［ＳＡＥフィールド１３５６］当該コンテンツは、例外イベント報告を無効化するか否かを区別し、ＳＡＥフィールド１３５６のコンテンツが抑制が有効であることを示す場合、所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも立ち上げない。
【００９８】
［ラウンドオペレーション制御フィールド１３５８］当該コンテンツは、ラウンドオペレーションのグループのどれを実行すべきか（例えば、切り上げ、切り捨て、ゼロへの丸め、及び最近接丸め）を区別する。つまり、ラウンドオペレーション制御フィールド１３５８によれば、命令単位に基づいてラウンドモードの変更が可能となる。プロセッサが複数のラウンドモードを特定するための制御レジスタを含む本願発明の一実施形態において、ラウンドオペレーション制御フィールド１３５０のコンテンツは、そのレジスタ値を無効にする。
【００９９】
［ノーメモリアクセスの命令テンプレート］［データ変換型オペレーション］ノーメモリアクセスデータ変換型オペレーション１３１５の命令テンプレートにおいて、ベータフィールド１３５４は、データ変換フィールド１３５４Ｂとして、解釈され、当該コンテンツは、多数のデータ変換の中で実行されるべき１つを区別する（例えば、非データ変換、スウィズル、ブロードキャスト）。
【０１００】
メモリアクセス１３２０のクラスＡの命令テンプレートの場合、アルファフィールド１３５２は、追い出し示唆フィールド１３５２Ｂと解釈され、そのコンテンツは、複数の追い出し示唆のどれが用いられるべきかを区別し（図１３Ａでは、一時的１３５２Ｂ．１及び非一時的１３５２Ｂ．２が、メモリアクセス、一時的１３２５命令テンプレート及びメモリアクセス、非一時的１３３０命令テンプレートに対してそれぞれ特定される）、ベータフィールド１３５４は、データ操作フィールド１３５４Ｃと解釈され、そのコンテンツは、多数のデータ操作オペレーション（プリミティブとしてもまた既知）のうちどれが実行されるべきか（例えば、操作なし、ブロードキャスト、ソースのアップコンバート及び送信先のダウンコンバート）を区別する。メモリアクセス１３２０の複数の命令テンプレートは、スケールフィールド１３６０、及び任意選択的に、変位フィールド１３６２Ａまたは変位スケールフィールド１３６２Ｂを含む。
【０１０１】
複数のベクトルメモリ命令は、変換サポートにより、メモリからの複数のベクトルロード、及びメモリへの複数のベクトルストアを実行する。通常の複数のベクトル命令と同様に、実際に送られる複数の要素とともに、データ要素的な様式で、メモリとの間でやり取りする複数のベクトルメモリ命令の転送データは、書き込みマスクとして選択されるベクトルマスクの複数のコンテンツによって命令される。
【０１０２】
［メモリアクセスの命令テンプレート］［一時的］一時性データは、キャッシュによる利益を十分に受けられるほどすぐに再使用される可能性が高いデータである。これは、しかしながら、示唆であり、複数の異なるプロセッサは、示唆を完全に無視することを含む複数の異なる態様で、これを実装してもよい。
【０１０３】
［メモリアクセスの命令テンプレート］［非一時的］非一時性データは、第１のレベルのキャッシュでキャッシュによる利益を十分に受けられるほどすぐに再使用される可能性が低いデータであり、追い出しの優先が与えられるべきである。これは、しかしながら、示唆であり、複数の異なるプロセッサは、示唆を完全に無視することを含む複数の異なる態様で、これを実装してもよい。
【０１０４】
［クラスＢの命令テンプレート］クラスＢの命令テンプレートの場合、アルファフィールド１３５２は、書き込みマスク制御（Ｚ）フィールド１３５２Ｃとして解釈され、当該コンテンツは、書き込みマスクフィールド１３７０によって制御された書き込みマスキングが結合書き込みまたはゼロ書き込みであるべきかを区別する。
【０１０５】
非メモリアクセス１３０５のクラスＢの命令テンプレートの場合、ベータフィールド１３５４の一部分は、ＲＬフィールド１３５７Ａとして解釈され、そのコンテンツは、複数の異なる増加オペレーション型のどれが実行されるべきかを区別する（例えば、ラウンド１３５７Ａ．１及びベクトル長（ＶＳＩＺＥ）１３５７Ａ．２は、ノーメモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション１３１２の命令テンプレート及びノーメモリアクセス、書き込みマスク制御、ＶＳＩＺＥ型オペレーション１３１７の命令テンプレートに対してそれぞれ特定される）一方で、ベータフィールド１３５４の残りは、特定された種類の複数のオペレーションのどれが実行されるべきかを区別する。ノーメモリアクセス１３０５の命令テンプレートにおいて、スケールフィールド１３６０、変位フィールド１３６２Ａ及び変位スケールフィールド１３６２Ｂは存在しない。
【０１０６】
ノーメモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション１３１０の命令テンプレートにおいて、ベータフィールド１３５４の残りは、ラウンドオペレーションフィールド１３５９Ａと解釈され、例外イベント報告は、無効化される（所与の命令は、任意の種類の浮動小数点例外フラグを報告せず、いずれの浮動小数点例外処理部もを立ち上げない）。
【０１０７】
［ラウンドオペレーション制御フィールド１３５９Ａ］単にラウンドオペレーション制御フィールド１３５８と同じように、当該コンテンツは、ラウンドオペレーションのグループの中のどれを実行すべきか（例えば、切り上げ、切り捨て、ゼロへの丸め、及び最近接丸め）を区別する。つまり、ラウンドオペレーション制御フィールド１３５９Ａによれば、命令単位に基づいてラウンドモードの変更が可能となる。プロセッサが複数のラウンドモードを特定するための制御レジスタを含む本願発明の一実施形態において、ラウンドオペレーション制御フィールド１３５０のコンテンツは、そのレジスタ値を無効にする。
【０１０８】
ノーメモリアクセス、書き込みマスク制御、ＶＳＩＺＥ型オペレーション１３１７の命令テンプレートにおいて、残りのベータフィールド１３５４は、ベクトル長さフィールド１３５９Ｂとして解釈され、当該コンテンツは、多数のデータベクトル長さの中でどれが実行されるべきか（例えば、１２８、２５６、または５１２バイト）を区別する。
【０１０９】
メモリアクセス１３２０のクラスＢの命令テンプレートの場合、ベータフィールド１３５４の一部分は、ブロードキャストフィールド１３５７Ｂとして解釈され、当該コンテンツは、ブロードキャスト型データ操作オペレーションが実行されるべきか否かを区別する一方、残りのベータフィールド１３５４は、ベクトル長さフィールド１３５９Ｂとして解釈される。メモリアクセス１３２０の複数の命令テンプレートは、スケールフィールド１３６０、及び任意選択的に、変位フィールド１３６２Ａまたは変位スケールフィールド１３６２Ｂを含む。
【０１１０】
ジェネリックベクトル向け命令フォーマット１３００に関して、フルオペコードフィールド１３７４は、フォーマットフィールド１３４０、ベースオペレーションフィールド１３４２、及びデータ要素幅フィールド１３６４を含むように示されている。フルオペコードフィールド１３７４がこれらのフィールドのすべてを含む一実施形態が示されるが、フルオペコードフィールド１３７４は、これらのすべてをサポートしていない複数の実施形態においてこれらの複数のフィールドの一部のみを含む。フルオペコードフィールド１３７４は、オペレーションコード（オペコード）を提供する。
【０１１１】
増加オペレーションフィールド１３５０、データ要素幅フィールド１３６４、及び書き込みマスクフィールド１３７０は、これらの特徴が命令単位に基づいてジェネリックベクトル向け命令フォーマットにおいて特定されることを可能にする。
【０１１２】
書き込みマスクフィールド及びデータ要素幅フィールドの組み合わせは、複数の異なるデータ要素幅に基づいてマスクが適用されることを可能にする分類された命令を生成する。
【０１１３】
クラスＡ及びクラスＢ内で見られる様々な命令テンプレートは、異なる状況において有益である。本願発明のいくつかの実施形態において、複数の異なるプロセッサまたはプロセッサ内の複数の異なるコアは、クラスＡのみ、クラスＢのみ、または両方のクラスをサポートしてもよい。例えば、汎用コンピューティング向けの高性能汎用アウトオブオーダコアは、クラスＢのみをサポートしてもよく、主にグラフィックス及び／または科学的（スループット）コンピューティング向けのコアは、クラスＡのみをサポートしてもよく、両方向けのコアは、両方をサポートしてもよい（勿論、両方のクラスの複数のテンプレート及び複数の命令のいくつかの組み合わせを有するが、両方のクラスのすべてのテンプレート及び命令を有しないコアは本願発明の範囲内にある訳ではない）。また、単一のプロセッサは、複数のコアを含んでもよく、その複数のコアのすべては、同一のクラスをサポートし、または複数のコアの中で複数の異なるコアは、異なるクラスをサポートする。例えば、別個のグラフィックス及び汎用コアを有するプロセッサでは、主にグラフィックス及び／または科学的コンピューティング向けの複数のグラフィックスコアの１つは、クラスＡのみをサポートしてもよく、複数の汎用コアのうちの１つまたは複数は、クラスＢのみをサポートする汎用コンピューティング向けのアウトオブオーダ実行及びレジスタリネーミングを伴う高性能な複数の汎用コアであってもよい。別個のグラフィックスコアを有しない別のプロセッサは、クラスＡ及びクラスＢの両方をサポートする汎用インオーダまたはアウトオブオーダコアをもう１つ含んでもよい。勿論、１つのクラスからの複数の特徴はまた、本願発明の複数の異なる実施形態における他のクラスで実装されてもよい。高水準言語で記述される複数のプログラムは、１）実行のために対象プロセッサによってサポートされるクラスの複数の命令のみを有する形式、または２）全クラスの複数の命令の複数の異なる組み合わせを用いて記述される代替的な複数のルーチンを有し、コードを現在実行しているプロセッサによりサポートされる複数の命令に基づいて実行する、複数のルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能な形式にされる（例えば、ジャストインタイムでコンパイルされ、または静的にコンパイルされる）。
［例示的特定ベクトル向け命令フォーマット］
【０１１４】
図１４Ａは、本願発明の複数の実施形態に係る例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図１４Ａは、フィールドの位置、サイズ、解釈、順序、及びそれらのフィールドのうちのいくつかの値を特定するという意味において特定ベクトル向け命令フォーマット１４００を示す。特定ベクトル向け命令フォーマット１４００は、ｘ８６命令セットを拡張するために用いられてもよく、これにより、複数のフィールドのいくつかは、既存のｘ８６命令セット及びその拡張（例えば、ＡＶＸ）に用いられたものと同様のまたは同一となる。 このフォーマットは、拡張された既存のｘ８６命令セットのプレフィックス符号化フィールド、リアルオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド及び複数の即値フィールドと整合性のある状態を保つ。図１３Ａ−Ｂの複数のフィールド内にマッピングする図１４Ａ−Ｄの複数のフィールドが示されている。
【０１１５】
理解されるべきことは、本願発明の複数の実施形態が、例示の目的のために、ジェネリックベクトル向け命令フォーマット１３００との関連で特定ベクトル向け命令フォーマット１４００を参照して説明されるが、本願発明は、特許請求された場合を除き、特定ベクトル向け命令フォーマット１４００に限定されない。例えば、ジェネリックベクトル向け命令フォーマット１３００は、様々な複数のフィールドに適用可能な様々な複数のサイズを検討し、特定ベクトル向け命令フォーマット１４００は、複数の特定のサイズの様々なフィールドを有するものとして示される。具体的な例として、データ要素幅フィールド１３６４は、特定ベクトル向け命令フォーマット１４００の１ビットフィールドとして示されるが、本願発明は、このように限定されるものではない（すなわち、ジェネリックベクトル向け命令フォーマット１３００は、データ要素幅フィールド１３６４の複数の他のサイズを検討する）。
【０１１６】
ジェネリックベクトル向け命令フォーマット１３００は、図１４Ａに示される順序で、下で列挙される複数の以下のフィールドを含む。ＥＶＥＸプレフィックス（バイト０−３）１４０２は、４バイト形式で符号化される。 
【０１１７】
［フォーマットフィールド１３４０（ＥＶＥＸ  バイト０、ビット［７：０］）］第１のバイト（ＥＶＥＸ  バイト０）は、フォーマットフィールド１３４０であり、これは、０ｘ６２（本願発明の一実施形態において、ベクトル向け命令フォーマットを区別するために用いられる固有値）を含む。
【０１１８】
第２−第４のバイト（ＥＶＥＸ  バイト１−３）は、特定の性能を提供する多数のビットフィールドを含む。
【０１１９】
ＲＥＸフィールド１４０５（ＥＶＥＸ  バイト１、ビット［７−５］）は、ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸ  バイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸ  バイト１、ビット［６］−Ｘ）及び１３５７ＢＥＸ  バイト１、ビット［５］−Ｂ）からなる。ＥＶＥＸ．Ｒ，ＥＶＥＸ．Ｘ及びＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同一の機能性を提供し、１の補数形式を用いて符号化され、すなわち、ＺＭＭ０は１１１１Ｂとして符号化され、ＺＭＭ１５は００００Ｂとして符号化される。当技術分野で知られているように、複数の命令の複数の他のフィールドが複数のレジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ及びｂｂｂ）を符号化することにより、Ｒｒｒｒ、Ｘｘｘｘ及びＢｂｂｂは、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ及びＥＶＥＸ．Ｂを加算することによって形成されてもよい。
【０１２０】
［ＲＥＸ'フィールド１３１０］これは、ＲＥＸ'フィールド１３１０の第１の部分であり、拡張された３２のレジスタセットの上位１６または下位１６のいずれかを符号化するために用いられるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸ  バイト１、ビット［４］−Ｒ'）である。本願発明の一実施形態において、下で示されるように、このビットは、他の複数のビットと共に、ビット反転フォーマットで記憶されることにより、リアルオペコードバイトは６２であるが、（後述の）ＭＯＤ  Ｒ／ＭフィールドにおいてＭＯＤフィールドの値１１を受け付けない（周知のｘ８６の３２ビットモードにおける）ＢＯＵＮＤ命令と区別するが、本願発明の複数の代替的な実施形態は、これ及び以下に示される反転フォーマットで示される他のビットを記憶しない。値１は、下位１６のレジスタを符号化するために用いられる。言い換えると、Ｒ'Ｒｒｒｒは、複数の他のフィールドのＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ及び他のＲＲＲを組み合わせることによって形成される。
【０１２１】
［オペコードマップフィールド１４１５（ＥＶＥＸ  バイト１、ビット［３：０］−ｍｍｍｍ）］当該コンテンツは、暗示された先頭オペコードバイト（０Ｆ、０Ｆ  ３８または０Ｆ  ３）を符号化する。
【０１２２】
［データ要素幅フィールド１３６４（ＥＶＥＸ  バイト２、ビット［７］−Ｗ）］表記ＥＶＥＸ．Ｗにより表される。ＥＶＥＸ．Ｗは、データタイプの粒度（サイズ）を定義するために用いられる（３２ビットのデータ要素または６４ビットのデータ要素のいずれか）。
【０１２３】
［ＥＶＥＸ．ｖｖｖｖ１４２０（ＥＶＥＸ  バイト２、ビット［６：３］−ｖｖｖｖ）］ＥＶＥＸ．ｖｖｖｖの役割は、以下を含み得る。１）ＥＶＥＸ．ｖｖｖｖは、反転（１の補数）形式で指定される第１のソースレジスタオペランドを符号化し、２つまたはそれより多くのソースオペランドを有する複数の命令に対して有効であり、２）ＥＶＥＸ．ｖｖｖｖは、特定の複数のベクトルシフトに対して１の補数形式で特定される送信先レジスタオペランドを符号化し、または３）ＥＶＥＸ．ｖｖｖｖは、いずれのオペランドも符号化せず、フィールドは保持されて１１１１ｂを含むべきである。つまり、ＥＶＥＸ．ｖｖｖｖフィールド１４２０は、反転（１の補数）形式で記憶された第１のソースレジスタの特定子の下位４ビットを符号化する。命令に依存して、追加の異なるＥＶＥＸビットフィールドは、特定子サイズを３２のレジスタに拡張するために用いられる。
【０１２４】
［ＥＶＥＸ．Ｕ  １３６８クラスフィールド（ＥＶＥＸ  バイト２、ビット［２］−Ｕ）］ＥＶＥＸ．Ｕ＝０の場合、クラスＡまたはＥＶＥＸ．Ｕ０を示し、ＥＶＥＸ．Ｕ＝１の場合、クラスＢまたはＥＶＥＸ．Ｕ１を示す。
【０１２５】
［プレフィックス符号化フィールド１４２５（ＥＶＥＸ  バイト２、ビット［ｌ：０］−ｐｐ）］ベースオペレーションフィールドに対して複数の追加ビットを提供する。ＥＶＥＸプレフィックスフォーマットのレガシＳＳＥ命令に対するサポートを提供することに加え、これはまた、ＳＩＭＤプレフィックスを圧縮するという利益を有する（ＳＩＭＤプレフィックスを表すためのバイトを必要とするのではなく、ＥＶＥＸプレフィックスは、２ビットのみを必要とする）。一実施形態において、レガシフォーマット及びＥＶＥＸプレフィックスフォーマットの両方のＳＩＭＤプレフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を用いるレガシＳＳＥ命令をサポートするために、これらの複数のレガシＳＩＭＤプレフィックスは、ＳＩＭＤプレフィックス符号化フィールドに符号化され、デコーダのＰＬＡに提供されるに先立って、ランタイムにおいて、レガシＳＩＭＤプレフィックスに拡張される（そのためＰＬＡは、これらの複数のレガシ命令のレガシ及びＥＶＥＸフォーマットの両方を、変更せずに実行することができる）。
【０１２６】
より新たな命令はＥＶＥＸプレフィックス符号化フィールドのコンテンツをオペコード拡張として直接に用いてもよいが、複数の特定の実施形態は、一貫性のために同様の様式に拡張するが、これらのレガシＳＩＭＤプレフィックスによって特定される異なる意味を可能にする。代替的な実施形態は、２ビットのＳＩＭＤプレフィックスの複数の符号化をサポートするＰＬＡを再設計し得、したがって、拡張を必要としない。
【０１２７】
［アルファフィールド１３５２（ＥＶＥＸ  バイト３、ビット［７］−ＥＨ、また、ＥＶＥＸ．ＥＨ，ＥＶＥＸ．ｒｓ，ＥＶＥＸ．ＲＬ，ＥＶＥＸ．ｗｒｉｔｅ  ｍａｓｋ  ｃｏｎｔｒｏｌ、及びＥＶＥＸ．Ｎとしても知られており、またαで示される）］前述されたように、このフィールドは、状況に応じる。
【０１２８】
［ベータフィールド１３５４（ＥＶＥＸ  バイト３、ビット［６：４］−ＳＳＳ、またＥＶＥＸ．ｓ２−０，ＥＶＥＸ．ｒ２−０，ＥＶＥＸ．ｒｒｌ，ＥＶＥＸ．ＬＬ０，ＥＶＥＸ．ＬＬＢとしても知られており、またβββで示される）］前述されたように、このフィールドは、状況に応じる。
【０１２９】
［ＲＥＸ'フィールド１３１０］これは、ＲＥＸ'フィールドの残りであり、拡張された３２のレジスタセットの上位１６または下位１６のいずれかを符号化するのに用いられ得るＥＶＥＸ．Ｖ'ビットフィールド（ＥＶＥＸ  バイト３、ビット［３］−Ｖ'）である。このビットは、ビット反転フォーマットで記憶される。値１は、下位１６のレジスタを符号化するために用いられる。言い換えると、Ｖ'ＶＶＶＶは、ＥＶＥＸ．Ｖ'、ＥＶＥＸ．ｖｖｖｖを組み合わせることによって形成される。
【０１３０】
［書き込みマスクフィールド１３７０（ＥＶＥＸ  バイト３、ビット［２：０］−ｋｋｋ）］当該コンテンツは、前述されたように、書き込みマスクレジスタにおけるレジスタのインデックスを特定する。本願発明の一実施形態において、特定の値ＥＶＥＸ．ｋｋｋ＝０００は、特定の命令のために用いられる書き込みマスクがないことを示唆する特別な動作を有する（これは、すべてハードワイヤードされた書き込みマスクまたはマスキングハードウェアを回避するハードウェアの使用を含む、様々な態様で実装されてもよい）。
【０１３１】
リアルオペコードフィールド１４３０（バイト４）はまた、オペコードバイトとしても知られる。オペコードの一部分は、このフィールドで特定される。
【０１３２】
ＭＯＤ  Ｒ／Ｍフィールド１４４０（バイト５）は、ＭＯＤフィールド１４４２、Ｒｅｇフィールド１４４４及びＲ／Ｍフィールド１４４６を含む。前述されたように、ＭＯＤフィールド１４４２のコンテンツは、メモリアクセスと非メモリアクセスオペレーションとを区別する。Ｒｅｇフィールド１４４４の役割は、送信先レジスタオペランドまたはソースレジスタオペランドのいずれかを符号化する、もしくはオペコード拡張として扱われ、いずれの命令オペランドを符号化するためにも用いられないという、２つの状況に要約されることができる。  Ｒ／Ｍフィールド１４４６の役割は、メモリアドレスを参照する命令オペランドの符号化、もしくは送信先レジスタオペランドまたはソースレジスタオペランドのいずれかの符号化を含んでもよい。
【０１３３】
［スケール、インデックス、ベース（ＳＩＢ）バイト（バイト６）］前述されたように、スケールフィールド１３５０のコンテンツは、メモリアドレス生成のために用いられる。［ＳＩＢ．ｘｘｘ１４５４及びＳＩＢ．ｂｂｂ１４５６］これらの複数のフィールドの複数のコンテンツは、複数のレジスタインデックスＸｘｘｘ及びＢｂｂｂに関して前で参照された。
【０１３４】
［変位フィールド１３６２Ａ（バイト７−１０）］ＭＯＤフィールド１４４２が１０を含む場合、バイト７−１０は、変位フィールド１３６２Ａであり、これは、レガシ３２ビット変位（ｄｉｓｐ３２）と同じく機能し、バイト粒度において機能する。
【０１３５】
［変位ファクタフィールド１３６２Ｂ（バイト７）］ＭＯＤフィールド１４４２が０１を含む場合、バイト７は、変位ファクタフィールド１３６２Ｂである。このフィールドの位置は、バイト粒度において機能するレガシｘ８６命令セットの８ビット変位（ｄｉｓｐ８）と同一である。ｄｉｓｐ８は符号拡張であるため、これは、−１２８から１２７バイトまでの間の複数のオフセットにのみアドレスすることができ、６４バイトの複数のキャッシュラインの観点から、ｄｉｓｐ８は、実に有用な４つの値−１２８、−６４、０及び６４にのみ設定可能な８ビットを用い、より広い範囲が必要となる場合が多いことからｄｉｓｐ３２が用いられるが、しかしながら、ｄｉｓｐ３２は４バイトを必要とする。ｄｉｓｐ８及びｄｉｓｐ３２と対照的に、変位ファクタフィールド１３６２Ｂは、ｄｉｓｐ８の再解釈であり、変位ファクタフィールド１３６２Ｂを用いる場合、実際の変位は、メモリオペランドアクセス（Ｎ）のサイズによって乗じられた変位ファクタフィールドのコンテンツによって決定される。この種類の変位は、ｄｉｓｐ８＊Ｎと称される。これにより、平均命令長さ（変位のために用いられる単一のバイトであるが、はるかにより広い範囲を有する）が減少する。このような圧縮された変位は、有効変位がメモリアクセスの粒度の倍数であるという前提に基づくことによって、アドレスオフセットの複数の冗長下位ビットは、符号化されることを必要としない。言い換えると、変位ファクタフィールド１３６２Ｂは、レガシｘ８６命令セットの８ビット変位を代替する。つまり、変位ファクタフィールド１３６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８＊Ｎに対してオーバーロードされるという場合のみを除き、ｘ８６命令セットの８ビット変位と同一態様で符号化される（そのためＭｏｄＲＭ／ＳＩＢ符号化の複数の規則は変更されない）。言い換えると、（バイト単位のアドレスオフセットを得るために、メモリオペランドのサイズで変位をスケーリングする必要がある）ハードウェアによる変位値の解釈のみを除き、符号化の複数の規則または符号化の複数の長さは変更されない。即値フィールド１３７２は前述されたように動作する。
［フルオペコードフィールド］
【０１３６】
図１４Ｂは、本願発明の一実施形態に係るフルオペコードフィールド１３７４を構成する特定ベクトル向け命令フォーマット１４００の複数のフィールドを示すブロック図である。具体的には、フルオペコードフィールド１３７４は、フォーマットフィールド１３４０、ベースオペレーションフィールド１３４２及びデータ要素幅（Ｗ）フィールド１３６４を含む。ベースオペレーションフィールド１３４２は、プレフィックス符号化フィールド１４２５、オペコードマップフィールド１４１５及びリアルオペコードフィールド１４３０を含む。
［レジスタインデックスフィールド］
【０１３７】
図１４Ｃは、本願発明の一実施形態に係るレジスタインデックスフィールド１３４４を構成する特定ベクトル向け命令フォーマット１４００の複数のフィールドを示すブロック図である。
【０１３８】
具体的には、レジスタインデックスフィールド１３４４は、ＲＥＸフィールド１４０５、ＲＥＸ'  フィールド１４１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド１４４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド１４４６、ｖｖｖｖフィールド１４２０、ｘｘｘフィールド１４５４、及びｂｂｂフィールド１４５６を含む。
［増加オペレーションフィールド］
【０１３９】
図１４Ｄは、本願発明の一実施形態に係る増加オペレーションフィールド１３５０を構成する特定ベクトル向け命令フォーマット１４００の複数のフィールドを示すブロック図である。クラス（Ｕ）フィールド１３６８が０を含む場合、これは、ＥＶＥＸ．Ｕ０（クラスＡの１３６８Ａ）を示し、これが１を含む場合、これは、ＥＶＥＸ．Ｕ１（クラスＢの１３６８Ｂ）を示す。Ｕ＝０、かつＭＯＤフィールド１４４２が１１を含む（ノーメモリアクセスオペレーションを示す）場合、アルファフィールド１３５２（ＥＶＥＸ  バイト３、ビット［７］−ＥＨ）は、ＲＳフィールド１３５２Ａとして解釈される。ＲＳフィールド１３５２Ａが１を含む場合（ラウンド１３５２Ａ．１）、ベータフィールド１３５４（ＥＶＥＸ  バイト３、ビット［６：４］−ＳＳＳ）は、ラウンド制御フィールド１３５４Ａとして解釈される。ラウンド制御フィールド１３５４Ａは、１ビットのＳＡＥフィールド１３５６及び２ビットのラウンドオペレーションフィールド１３５８を含む。ＲＳフィールド１３５２Ａが０を含む場合（データ変換１３５２Ａ．２）、ベータフィールド１３５４（ＥＶＥＸ  バイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ変換型フィールド１３５４Ｂとして解釈される。Ｕ＝０、かつＭＯＤフィールド１４４２が００、０１、または１０を含む（メモリアクセスオペレーションを示す）場合、アルファフィールド１３５２（ＥＶＥＸ  バイト３、ビット［７］−ＥＨ）は、追い出し示唆（ＥＨ）フィールド１３５２Ｂとして解釈され、ベータフィールド１３５４（ＥＶＥＸ  バイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ操作フィールド１３５４Ｃとして解釈される。
【０１４０】
Ｕ＝１の場合、アルファフィールド１３５２（ＥＶＥＸ  バイト３、ビット［７］−ＥＨ）は、書き込みマスク制御（Ｚ）フィールド１３５２Ｃとして解釈される。Ｕ＝１、かつＭＯＤフィールド１４４２が１１を含む（ノーメモリアクセスオペレーションを示す）場合、ベータフィールド１３５４の一部分（ＥＶＥＸ  バイト３、ビット［４］−Ｓ０）は、ＲＬフィールド１３５７Ａとして解釈され、これが１を含む（ラウンド１３５７Ａ．１）場合、残りのベータフィールド１３５４（ＥＶＥＸ  バイト３、ビット［６−５］−Ｓ２−１）は、ラウンドオペレーションフィールド１３５９Ａとして解釈され、ＲＬフィールド１３５７Ａが０を含む（ＶＳＩＺＥ１３５７．Ａ２）場合、残りのベータフィールド１３５４（ＥＶＥＸ  バイト３、ビット［６−５］−Ｓ２−１）は、ベクトル長さフィールド１３５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）として解釈される。Ｕ＝１、ＭＯＤフィールド１４４２が（メモリアクセスオペレーションを示す）００、０１、または１０を含む場合、ベータフィールド１３５４（ＥＶＥＸ  バイト３、ビット［６：４］―ＳＳＳ）は、ベクトル長さフィールド１３５９Ｂ（ＥＶＥＸ  バイト３、ビット［６−５］−Ｌ１−０）及びブロードキャストフィールド１３５７Ｂ（ＥＶＥＸ  バイト３、ビット［４］−Ｂ）として解釈される。
［例示的レジスタアーキテクチャ］
【０１４１】
図１５は、本願発明の一実施形態に係るレジスタアーキテクチャ１５００のブロック図である。示された実施形態において、３２の５１２ビット幅のベクトルレジスタ１５１０があり、これらのレジスタは、ｚｍｍ０からｚｍｍ３１として参照される。下位２５６ビット下位１６のｚｍｍレジスタは、レジスタｙｍｍ０−１６に対してオーバーレイされる。下位１２８ビットの下位１６のｚｍｍレジスタ（下位１２８ビットの複数のｙｍｍレジスタ）は、レジスタＸＭＭ０−１５に対してオーバーレイされる。以下の表に示されているように、特定ベクトル向け命令フォーマット１４００は、これらのオーバーレイされたレジスタファイル上で動作する。
【表１】
2016531377.tif 000003
【０１４２】
言い換えると、ベクトル長さフィールド１３５９Ｂは、最大長さ及び１つまたは複数の他のより短い長さの間から選択を行う。ここでそのようなより短い長さの各々は先行する長さの半分であり、ベクトル長さフィールド１３５９Ｂを有しない複数の命令テンプレートは、最大ベクトル長さで動作する。さらに、一実施形態において、特定ベクトル向け命令フォーマット１４００のクラスＢの命令テンプレートは、パックドまたはスカラ単／倍精度浮動小数点データ及びパックドまたはスカラ整数データに対して動作する。複数のスカラ演算は、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタの最下位データ要素位置に対して実行される複数の演算であり、上位の複数のデータ要素位置は、実施形態に依存して、命令前と同一の状態で残されるまたはゼロを書き込まれるのいずれかである。
【０１４３】
［書き込みマスクレジスタ１５１５］示された実施形態では、８の書き込みマスクレジスタが存在し（ｋ０からｋ７）、各々のサイズは６４ビットである。代替的な実施形態では、複数の書き込みマスクレジスタ１５１５は、１６ビットのサイズである。前述されたように、本願発明の一実施形態において、ベクトルマスクレジスタｋ０は、書き込みマスクとして用いられることができず、通常ｋ０を示す符号化が書き込みマスクのために用いられる場合、０ｘＦＦＦＦのハードワイヤードされた書き込みマスクを選択し、効果的に命令のための書き込みマスキングを無効にする。
【０１４４】
［複数の汎用レジスタ１５２５］示された実施形態では、複数のメモリオペランドにアドレスする既存の複数のｘ８６アドレッシングモードと共に用いられる１６の６４ビット汎用レジスタが存在する。これらの複数のレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ及びＲ８からＲ１５という名で称される。
【０１４５】
［ＭＭＸパックド整数フラットレジスタファイル１５５０がエイリアスされるスカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）１５４５］示された実施形態において、ｘ８７スタックは、ｘ８７命令セット拡張を用いて３２／６４／８０ビットの浮動小数点データに対してスカラ浮動小数点の複数の演算を実行するのに用いられる８の要素スタックである一方、複数のＭＭＸレジスタは、６４ビットのパックド整数データに対して複数の演算を実行し、ＭＭＸ及びＸＭＭレジスタの間で実行されるいくつかの演算のための複数のオペランドを保持するのに用いられる。
【０１４６】
本願発明の複数の代替的な実施形態は、より広いまたはより狭い複数のレジスタを用いてもよい。更に、本願発明の複数の代替的な実施形態は、より多くの、より少ない、または異なる複数のレジスタファイル及び複数のレジスタを用いてもよい。
［複数の例示的なコアアーキテクチャ、複数のプロセッサ及び複数のコンピュータアーキテクチャ］
【０１４７】
複数のプロセッサコアは、複数の異なる態様で、複数の異なる目的で、及び複数の異なるプロセッサで、実装されてもよい。例えば、このような複数のコアの複数の実装は、１）汎用コンピューティング向け汎用インオーダコア、２）汎用コンピューティング向け高性能汎用アウトオブオーダコア、３）主にグラフィックス及び／または科学的（スループット）コンピューティング向け特定用途向けコアを含んでもよい。複数の異なるプロセッサの複数の実装は、１）１つまたは複数の汎用コンピューティング向け汎用インオーダコア及び／または１つまたは複数の汎用コンピューティング向け汎用アウトオブオーダコアを含むＣＰＵ、及び２）１つまたは複数の主にグラフィックス及び／または科学的（スループット）向け特定用途向けコアを含むコプロセッサを含んでもよい。このような複数の異なるプロセッサは、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同一のパッケージ内で別個のダイ上のコプロセッサ、３）ＣＰＵと同一のダイ上のコプロセッサ（この場合、そのようなコプロセッサは、場合によっては統合グラフィックス及び／または科学的（スループット）論理のような特定用途向けロジック、または複数の特定用途向けコアと称される）及び４）同一のダイ上で、説明されたＣＰＵ（場合によってはアプリケーションコアまたはアプリケーションプロセッサと称される）、上で説明されたコプロセッサ及び追加的な機能性を含み得るシステムオンチップを含み得る、複数の異なるコンピュータシステムアーキテクチャをもたらす。複数の例示的なコアアーキテクチャが、次に説明され、次いで、例示的な複数のプロセッサ及び複数のコンピュータアーキテクチャが説明される。
［例示的なコアアーキテクチャ］
［インオーダ及びアウトオブオーダコアのブロック図］
【０１４８】
図１６Ａは、本願発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図１６Ｂは、本願発明の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図１６Ａ−Ｂの複数の実線のボックスは、インオーダパイプライン及びインオーダコアを示し、任意的追加の複数の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行／実行パイプライン及びコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様について説明する。
【０１４９】
図１６Ａにおいて、プロセッサパイプライン１６００は、フェッチステージ１６０２、長さ復号ステージ１６０４、復号ステージ１６０６、割り当てステージ１６０８、リネーミングステージ１６１０、スケジューリング（ディスパッチまたは発行としても知られる）ステージ１６１２、レジスタ読み出し／メモリ読み出しステージ１６１４、実行ステージ１６１６、ライトバック／メモリ書き込みステージ１６１８、例外処理ステージ１６２２、及びコミットステージ１６２４を含む。
【０１５０】
図１６Ｂは、実行エンジンユニット１６５０に連結されるフロントエンドユニット１６３０を含むプロセッサコア１６９０を示し、実行エンジンユニット１６５０とフロントエンドユニット１６３０の両方がメモリユニット１６７０に連結される。コア１６９０は、縮小命令セットコンピュータ（ＲＩＳＣ）コア、複合命令セットコンピュータ（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コアまたはハイブリッドもしくは代替的なコアタイプであってもよい。さらに他のオプションとして、コア１６９０は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックスプロセッシングユニット（ＧＰＧＰＵ）コア、グラフィックスコア、または同様なものような特定用途向けコアであってもよい。
【０１５１】
フロントエンドユニット１６３０は、命令キャッシュユニット１６３４に連結される分岐予測ユニット１６３２を含み、命令キャッシュユニット１６３４は命令トランスレーションルックアサイドバッファ（ＴＬＢ）１６３６に連結され、ＴＬＢ１６３６は、命令フェッチユニット１６３８に連結され、命令フェッチユニット１６３８は、復号ユニット１６４０に連結される。復号ユニット１６４０（またはデコーダ）は、複数の命令を復号化し、出力として、１つまたは複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または元の複数の命令から復号化された、もしくはこれらを他の方法で反映する、もしくはこれらから派生された他の制御信号を生成してもよい。復号ユニット１６４０は、複数の様々な異なる機構を用いて実装されてもよい。適切な複数の機構の例は、限定されないが、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ（ＰＬＡ）、複数のマイクロコードリードオンリメモリ（ＲＯＭ）などを含む。一実施形態において、コア１６９０は、マイクロコードＲＯＭまたは（例えば、復号ユニット１６４０、さもなければフロントエンドユニット１６３０内で）特定の複数のマクロ命令に対するマイクロコードを記憶する他の媒体を含む。復号ユニット１６４０は、実行エンジンユニット１６５０内のリネーミング／アロケータユニット１６５２に連結される。
【０１５２】
実行エンジンユニット１６５０は、リタイアメントユニット１６５４及び１つまたは複数のスケジューラユニット１６５６のセットに連結されたリネーミング／アロケータユニット１６５２を含む。スケジューラユニット１６５６は、予約ステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット１６５６は、物理レジスタファイルユニット１６５８に連結される。物理レジスタファイルユニット１６５８の各々は、１つまたは複数の物理レジスタファイルを表し、そのうち複数の異なるものが、（例えば、実行されるべき次の命令のアドレスである命令ポインタなどの）スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、状態のような、１つまたは複数の異なるデータタイプを記憶する。
【０１５３】
一実施形態において、物理レジスタファイルユニット１６５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット及びスカラレジスタユニットを備える。これらの複数のレジスタユニットは、複数のアーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ及び汎用レジスタを提供してもよい。物理レジスタファイルユニット１６５８は、リタイアメントユニット１６５４により重複され、（例えば、リオーダバッファ及びリタイアレジスタファイルを用いて、フューチャファイル、履歴バッファ、及びリタイアレジスタファイルを用いて、レジスタマップ及びレジスタのプールを用いるなど）レジスタリネーミング及びアウトオブオーダ実行が実施され得るという様々な態様を示す。リタイアメントユニット１６５４及び物理レジスタファイルユニット１６５８は、実行クラスタ１６６０に連結される。実行クラスタ１６６０は、１つまたは複数の実行ユニット１６６２のセット及び１つまたは複数のメモリアクセスユニット１６６４のセットを含む。複数の実行ユニット１６６２は、様々な種類のデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して、様々な演算（例えば、複数のシフト、加算、減算、乗算）を実行してもよい。いくつかの実施形態は、具体的な複数の関数または複数の関数の複数のセット専用の多数の実行ユニットを含んでもよく、複数の他の実施形態は、１つのみの実行ユニットまたはすべての関数をすべてが実行する複数の実行ユニットを含んでもよい。スケジューラユニット１６５６、物理レジスタファイルユニット１６５８及び実行クラスタ１６６０は、複数として示される可能性があるが、その理由は、複数の特定の実施形態は、データ／演算の複数の特定の種類に対して複数の別個のパイプラインを生成するからである（例えば、各々の自己のスケジューラユニット、物理レジスタファイルユニット及び／または実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／またはメモリアクセスパイプライン、及び、別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット１６６４を有する複数の特定の実施形態が実装される）。複数の別個のパイプラインが用いられる場合、これらのパイプラインのうちの１つまたは複数がアウトオブオーダ発行／実行であり、残りがインオーダであってもよいこともまた理解されるべきである。
【０１５４】
メモリアクセスユニット１６６４のセットは、メモリユニット１６７０に連結され、メモリユニット１６７０は、データキャッシュユニット１６７４に連結されるデータＴＬＢユニット１６７２を含み、データキャッシュユニット１６７４は、レベル２（Ｌ２）キャッシュユニット１６７６に連結される。一例示的な実施形態では、メモリアクセスユニット１６６４は、ロードユニット、ストアアドレスユニット及びストアデータユニットを含んでもよく、これらの各々は、メモリユニット１６７０内のデータＴＬＢユニット１６７２に連結される。命令キャッシュユニット１６３４は、メモリユニット１６７０内のレベル２（Ｌ２）キャッシュユニット１６７６に、さらに連結される。Ｌ２キャッシュユニット１６７６は、１つまたは複数の他のレベルのキャッシュ、及び最終的にはメインメモリに連結される。
【０１５５】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン１６００を以下のように実装してもよい。
【０１５６】
１）命令フェッチ１６３８が、フェッチステージ１６０２及び長さ復号化ステージ１６０４を実行し、２）復号ユニット１６４０が、復号ステージ１６０６を実行し、３）リネーミング／アロケータユニット１６５２が、割り当てステージ１６０８及びリネーミングステージ１６１０を実行し、４）スケジューラユニット１６５６が、スケジューリングステージ１６１２を実行し、５）物理レジスタファイルユニット１６５８及びメモリユニット１６７０が、レジスタ読み出し／メモリ読み出しステージ１６１４を実行し、実行クラスタ１６６０が、実行ステージ１６１６を実行し、６）メモリユニット１６７０及び物理レジスタファイルユニット１６５８が、ライトバック／メモリ書き込みステージ１６１８を実行し、７）様々な複数のユニットが、例外処理ステージ１６２２に関与してもよく、かつ８）リタイアメントユニット１６５４及び物理レジスタファイルユニット１６５８が、コミットステージ１６２４を実行する。
【０１５７】
コア１６９０は、本明細書で説明される命令を含む１つまたは複数の命令セット（例えば、ｘ８６命令セット（複数のより新たなバージョンで追加されたいくつかの拡張を有する）カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭ  ホールディンス（ＡＲＭ  Ｈｏｌｄｉｎｇｓ）の（ＮＥＯＮのような任意的追加の拡張を有する）ＡＲＭ命令セット）をサポートしてもよい。一実施形態において、コア１６９０は、パックドデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートする論理を含み、それにより、パックドデータを用いて実行されるべき多くのマルチメディアアプリケーションにより用いられる複数のオペレーションを可能にする。
【０１５８】
コアは、マルチスレッディング（複数のオペレーションまたはスレッドの２つまたはそれより多くの並列なセットを実行すること）をサポートしてもよく、時分割マルチスレッディング、同時マルチスレッディング（ここで、単一の物理コアは、物理コアが同時マルチスレッディングを実行する複数のスレッドの各々に、論理コアを提供する）、またはそれらの組み合わせ（例えば、時分割フェッチ及び復号化、その後、インテル（登録商標）ハイパースレッディングテクノロジでのような同時マルチスレッディング）を含む複数の様々な態様で、これを実行してもよいことを理解されるべきである。
【０１５９】
レジスタリネーミングがアウトオブオーダ実行との関連で説明されている一方、インオーダアーキテクチャにおいて、レジスタリネーミングが用いられてもよいことを理解されるべきである。プロセッサの例示された実施形態は、別個の命令及びデータキャッシュユニット１６３４／１６７４、及び共有のＬ２キャッシュユニット１６７６をさらに含むが、複数の代替的な実施形態は、複数の命令及びデータの両方のために、例えば、レベル１（Ｌ１）内部キャッシュ、または複数のレベルの内部キャッシュのような単一の内部キャッシュを有してもよい。いくつかの実施形態において、システムは、内部キャッシュとコア及び／またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでもよい。代替的には、すべてのキャッシュは、コア及び／またはプロセッサの外部にあってもよい。
［例示的なインオーダコアアーキテクチャの詳細］
【０１６０】
図１７Ａ−Ｂは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、当該コアは、チップ内の（同一種類及び／または異なる種類の他の複数のコアを含む）いくつかの論理ブロックのうちの１つであり得る。複数の論理ブロックは、用途に応じて、高帯域幅相互接続ネットワーク（例えば、リングネットワーク）を介して、いくつかの固定関数論理、メモリＩ／Ｏインターフェース及び他の必要なＩ／Ｏ論理と通信を行う。
【０１６１】
図１７Ａは、本願発明の複数の実施形態に係るオンダイ相互接続ネットワーク１７０２との接続と共に、自己のレベル２（Ｌ２）キャッシュローカルサブセット１７０４を有する単一プロセッサコアのブロック図である。一実施形態において、命令デコーダ１７００は、パックドデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ１７０６によれば、キャッシュメモリによる、スカラ及びベクトルユニットへの低レイテンシアクセスが可能である。一実施形態において（設計の簡潔化のために）、スカラユニット１７０８及びベクトルユニット１７１０は、別個の複数のレジスタセット（それぞれ、複数のスカラレジスタ１７１２及び複数のベクトルレジスタ１７１４）を用い、これらの間で送られるデータは、メモリに書き込まれ、次にレベル１（Ｌ１）キャッシュ１７０６から再読み出しされるが、本願発明の複数の代替的な実施形態は、異なるアプローチ（例えば、単一のレジスタセットを用い、または、データが書き込み及び再読み出しされることなく２つのレジスタファイル間で送られることを可能にする通信パスを含む）を用いてもよい。
【０１６２】
Ｌ２キャッシュローカルサブセット１７０４は、プロセッサコアあたり１つの別個のローカルサブセットに分割されるグローバルＬ２キャッシュの一部分である。各プロセッサコアは、自己のＬ２キャッシュローカルサブセット１７０４に対するダイレクトアクセスパスを有する。プロセッサコアに読み出されたデータは、自己のＬ２キャッシュサブセット１７０４に記憶され、迅速かつ、これらの自己の複数のローカルＬ２キャッシュサブセットにアクセスする複数の他のプロセッサコアと並列に、アクセスされることができる。プロセッサコアに書き込まれたデータは、自己のＬ２キャッシュサブセット１７０４に記憶され、必要な場合には、他の複数のサブセットからフラッシュされる。  リングネットワークは、共有のデータに対するコヒーレンシを保証する。リングネットワークが双方向であることにより、複数のプロセッサコア、複数のＬ２キャッシュ及び複数の他の論理ブロックなどのエージェントは、チップ内で互いに通信を行うことができる。各リングデータパスは、１方向あたり１０１２ビット幅である。
【０１６３】
図１７Ｂは、本願発明の複数の実施形態に係る図１７Ａのプロセッサコアの一部分の拡張図である。図１７Ｂは、Ｌ１キャッシュ１７０６の一部分であり、ベクトルユニット１７１０及びベクトルレジスタ１７１４に関する更なる詳細となるＬ１データキャッシュ１７０６Ａも含む。具体的には、ベクトルユニット１７１０は、１６ワイドのベクトル処理ユニット（ＶＰＵ）（１６ワイドＡＬＵ１７２８を参照）であり、１つまたは複数の整数、単精度浮動小数点及び倍精度浮動小数点命令を実行する。ＶＰＵは、スウィズルユニット１７２０による複数のレジスタ入力のスウィズル、数値変換ユニット１７２２Ａ−Ｂによる数値変換、及び複製ユニット１７２４によるメモリ入力に対する複製をサポートする。  書き込みマスクレジスタ１７２６によれば、結果的な複数のベクトルの書き込みを叙述することが可能となる。
［統合メモリコントローラ及びグラフィックスを有するプロセッサ］
【０１６４】
図１８は、本願発明の複数の実施形態に係る、１つより多いコアを有し得、統合メモリコントローラを有し得、かつ、統合グラフィックスを有し得るプロセッサ１８００のブロック図である。図１８の複数の実線のボックスは、単一のコア１８０２Ａ、システムエージェント１８１０、１つまたは複数のバスコントローラユニット１８１６のセットを有するプロセッサ１８００を示し、任意的に追加の複数の破線のボックスは、複数のコア１８０２Ａ−Ｎを有する代替的なプロセッサ１８００、システムエージェントユニット１８１０内の１つまたは複数の統合メモリコントローラユニット１８１４のセット及び特定用途向けロジック１８０８を示す。
【０１６５】
したがって、プロセッサ１８００の異なる実装は、１）統合グラフィックス及び／または科学的（スループット）論理（１つまたは複数のコアを備えることができる）である特定用途向けロジック１８０８と、１つまたは複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、これらの２つの組み合わせ）であるコア１８０２Ａ―Ｎとを有するＣＰＵと、２）主にグラフィックス及び／または科学（スループット）向けの多数の特定用途向けコアであるコア１８０２Ａ−Ｎを有するコプロセッサと、３）多数の汎用インオーダコアであるコア１８０２Ａ−Ｎを有するコプロセッサを含み得る。したがって、プロセッサ１８００は、汎用プロセッサ、コプロセッサまたは、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、（３０またはそれより多くのコアを含む）高スループット多数集積コア（ＭＩＣ）コプロセッサ、エンベデッドプロセッサなどのような特定用途向けプロセッサであってよい。プロセッサは、１つまたは複数のチップ上に実装されてもよい。プロセッサ１８００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳまたはＮＭＯＳなどの多数の処理技術のいずれかを用いて、１つまたは複数の基板の一部分であってもよく、及び／またはその上に実装されてもよい。
【０１６６】
メモリ階層は、複数のコア、１つまたは複数の共有キャッシュユニット１８０６またはそのセット、及び複数の統合メモリコントローラユニット１８１４のセットに連結される外部メモリ（図示せず）内に、１つまたは複数のレベルのキャッシュを含む。複数の共有キャッシュユニット１８０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）または他の複数のレベルのキャッシュなどの１つまたは複数の中レベルキャッシュ、ラストレベルのキャッシュ（ＬＬＣ）及び／またはそれらの組み合わせを含んでもよい。一実施形態において、リングベースの相互接続ユニット１８１２が、統合グラフィックスロジック１８０８、複数の共有キャッシュユニット１８０６のセット及びシステムエージェントユニット１８１０／統合メモリコントローラユニット１８１４を相互接続するが、複数の代替的な実施形態は、そのような複数のユニットを相互接続するための任意の数の周知技術を用いてもよい。一実施形態において、１つまたは複数のキャッシュユニット１８０６と複数のコア１８０２Ａ−Ｎとの間で、コヒーレンシが維持される。
【０１６７】
いくつかの実施形態において、１つまたは複数のコア１８０２Ａ―Ｎは、マルチスレッディングに対応可能である。システムエージェント１８１０は、複数のコア１８０２Ａ−Ｎの調整及び操作を行うこれらの構成要素を含む。システムエージェントユニット１８１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを含んでもよい。ＰＣＵは、複数のコア１８０２Ａ−Ｎ及び統合グラフィックスロジック１８０８の電力状態を調整するために必要なロジック及び複数の構成要素であってもよく、またはこれらを含んでもよい。ディスプレイユニットは、１つまたは複数の外部接続ディスプレイを駆動するためのものである。
【０１６８】
コア１８０２Ａ−Ｎは、アーキテクチャ命令セットの観点から同種であっても異種であってもよく、すなわち、２つまたはそれより多くのコア１８０２Ａ−Ｎは、同一の命令セットを実行することができてよい一方、他の複数のものは、命令セットのサブセットまたは異なる命令セットのみを実行することができる。
［例示的なコンピュータアーキテクチャ］
【０１６９】
図１９−２２は、複数の例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型ＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス及び様々な他の電子デバイス用の当技術分野で既知の他の複数のシステム設計及び複数の構成もまた、適切である。概して、本明細書で開示されるように、プロセッサ及び／または他の実行論理を組み込み可能な多様なシステムまたは電子デバイスが、概して適切である。
【０１７０】
ここで、図１９を参照すると、本願発明の一実施形態に係るコンピューティングシステム１９００のブロック図が示されている。システム１９００は、コントローラハブ１９２０に連結される１つまたは複数のプロセッサ１９１０、１９１５を含んでもよい。一実施形態において、コントローラハブ１９２０は、（別個のチップ上であってよい）グラフィックスメモリコントローラハブ（ＧＭＣＨ）１９９０及び入力／出力ハブ（ＩＯＨ）１９５０を含み、ＧＭＣＨ１９９０は、メモリ１９４０及びコプロセッサ１９４５に連結されるメモリ及びグラフィックスコントローラを含み、ＩＯＨ１９５０は、入力／出力（Ｉ／Ｏ）デバイス１９６０をＧＭＣＨ１９９０に連結させる。代替的には、メモリ及びグラフィックスコントローラの一方または両方は、プロセッサ内に集積され（本明細書に説明されているように）、メモリ１９４０及びコプロセッサ１９４５は、プロセッサ１９１０及び単一のチップ内でＩＯＨ１９５０を有するコントローラハブ１９２０に直接連結される。
【０１７１】
追加のプロセッサ１９１５の任意的という性質は、図１９において破線によって示されている。各プロセッサ１９１０、１９１５は、本明細書で説明される複数の処理コアのうちの１つまたは複数を含んでもよく、プロセッサ１８００のいくつかのバージョンであってもよい。
【０１７２】
メモリ１９４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、位相変化メモリ（ＰＣＭ）、またはそれら２つの組み合わせであってよい。少なくとも一実施形態について、コントローラハブ１９２０は、フロントサイドバス（ＦＳＢ）のようなマルチドロップバス、クイックパスインターコネクト（ＱＰＩ）のようなポイントツーポイントインターフェースまたは同様の接続１９９５を介して、プロセッサ１９１０、１９１５と通信を行う。
【０１７３】
一実施形態において、コプロセッサ１９４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、エンベデッドプロセッサなどのような特定用途向けプロセッサである。一実施形態において、コントローラハブ１９２０は、統合グラフィックスアクセラレータを含んでもよい。
【０１７４】
アーキテクチャ上の、マイクロアーキテクチャ上の、熱の、複数の電力消費特性等を含む様々な利益の基準の観点から、物理ソース１９１０、１９１５間には様々な違いがあり得る。
【０１７５】
一実施形態において、プロセッサ１９１０は、一般的な種類の複数のデータ処理オペレーションを制御する複数の命令を実行する。複数の命令内に、複数のコプロセッサ命令が組み込まれていてもよい。プロセッサ１９１０は、これらの複数のコプロセッサ命令を、取り付けられたコプロセッサ１９４５によって実行されるべき種類のものと認識する。従って、プロセッサ１９１０は、これらの複数のコプロセッサ命令（または複数のコプロセッサ命令を表す複数の制御信号）を、コプロセッサバスまたは他の相互接続上で、コプロセッサ１９４５に対して発行する。コプロセッサ１９４５は、受信された複数のコプロセッサ命令を受け付けて実行する。
【０１７６】
ここで、図２０を参照すると、本願発明の実施形態に係る第１のより具体的な例示的コンピューティングシステム２０００のブロック図が示されている。図２０に示されるように、マルチプロセッサシステム２０００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続２０５０を介して連結される第１のプロセッサ２０７０及び第２のプロセッサ２０８０を含む。プロセッサ２０７０及び２０８０の各々は、いくつかのバージョンのプロセッサ１８００であってもよい。本願発明の一実施形態において、プロセッサ２０７０及び２０８０は、それぞれプロセッサ１９１０及び１９１５である一方、コプロセッサ２０３８は、コプロセッサ１９４５である。別の実施形態において、プロセッサ２０７０及び２０８０は、それぞれ、プロセッサ１９１０及びコプロセッサ１９４５である。
【０１７７】
プロセッサ２０７０及び２０８０は、統合メモリコントローラ（ＩＭＣ）ユニット２０７２及び２０８２をそれぞれ含むものとして示される。プロセッサ２０７０はまた、自己のバスコントローラユニットの一部分として、複数のポイントツーポイント（Ｐ−Ｐ）インターフェース２０７６及び２０７８を含み、同様に、第２のプロセッサ２０８０は、複数のＰ−Ｐインターフェース２０８６及び２０８８を含む。複数のプロセッサ２０７０、２０８０は、複数のＰ−Ｐインターフェース回路２０７８、２０８８を用いたポイントツーポイント（Ｐ−Ｐ）インターフェース２０５０を介して、情報を交換してもよい。図２０に示されるように、ＩＭＣ２０７２及び２０８２は、複数のプロセッサをそれぞれのメモリ、すなわち、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部分となり得るメモリ２０３２及びメモリ２０３４に連結する。
【０１７８】
プロセッサ２０７０、２０８０は各々、ポイントツーポイントインターフェース回路２０７６、２０９４、２０８６、２０９８を用いる個々のＰ−Ｐインターフェース２０５２、２０５４を介して、チップセット２０９０と情報を交換してもよい。チップセット２０９０は、高性能インターフェース２０３９を介して、コプロセッサ２０３８と任意選択的に情報を交換してもよい。一実施形態において、コプロセッサ２０３８は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、エンベデッドプロセッサ、または同様のもののような特定用途向けプロセッサである。
【０１７９】
共有キャッシュ（図示せず）は、いずれかのプロセッサに含まれてもよく、あるいは両方のプロセッサの外側にあってもよいが、プロセッサが低電力モード内で配置されても、いずれかのまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに記憶され得るように、Ｐ−Ｐ相互接続を介して複数のプロセッサに接続される。
【０１８０】
チップセット２０９０は、インターフェース２０９６を介して、第１のバス２０１６に連結されてもよい。一実施形態において、第１のバス２０１６は、周辺構成要素相互接続（ＰＣＩ）バス、または、ＰＣＩエクスプレスバスもしくは別の第３の生成Ｉ／О相互接続バスのようなバスであり得るが、本願発明の範囲はそれに限定されない。
【０１８１】
図２０に示されるように、様々なＩ／Ｏデバイス２０１４が、第１のバス２０１６を第２のバス２０２０に連結するバスブリッジ２０１８と共に、第１のバス２０１６に連結されてもよい。一実施形態において、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵのアクセラレータ（例えば、グラフィックスアクセラレータもしくはデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどの１つまたは複数の追加のプロセッサ２０１５が、第１のバス２０１６に連結される。一実施形態において、第２のバス２０２０は、ローピンカウント（ＬＰＣ）バスであってもよい。例えば、キーボード及び／またはマウス２０２２、通信デバイス２０２７、及びディスクドライブ、または複数の命令／コード及びデータ２０３０を含み得る他の大容量ストレージデバイスなどのストレージユニット２０２８を含む様々な複数のデバイスが、一実施形態においては、第２のバス２０２０に連結されてもよい。さらに、オーディオＩ／Ｏ２０２４が、第２のバス２０２０に連結されてもよい。なお、他の複数のアーキテクチャが、適用可能であることが留意されたい。例えば、図２０のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
【０１８２】
ここで、図２１を参照すると、本願発明の実施形態に係る第２のより具体的な例示的コンピューティングシステム２１００のブロック図が示されている。図２０及び２１における同様の複数の要素には、同様の参照番号が付され、図２０の複数の特定の態様は、図２１の他の複数の態様の不明瞭を回避すべく、図２１では省略されている。
【０１８３】
図２１は、プロセッサ２０７０、２０８０が、それぞれ統合メモリ及びＩ／Ｏ制御論理（「ＣＬ」）２０７２及び２０８２を含み得ることを示す。したがって、ＣＬ２０７２、２０８２は、複数の統合メモリコントローラユニットを含み、かつ、Ｉ／Ｏ制御論理を含む。図２１は、メモリ２０３２、２０３４がＣＬ２０７２、２０８２に連結されるのみならず、複数のＩ／Ｏデバイス２１１４も制御論理２０７２、２０８２に連結されることもまた示す。複数のレガシＩ／Ｏデバイス２１１５は、チップセット２０９０に連結される。
【０１８４】
ここで、図２２を参照すると、本願発明の実施形態に係るＳｏＣ２２００のブロック図が示される。図１８における同様の複数の要素には、同様の参照番号が付される。また、複数の破線のボックスは、より高度なＳｏＣ上の任意的な特徴である。図２２では、相互接続ユニット２２０２は、１つまたは複数のコア２０２Ａ―Ｎ及び共有キャッシュユニット１８０６のセットを含むアプリケーションプロセッサ２２１０、システムエージェントユニット１８１０、バスコントローラユニット１８１６、統合メモリコントローラユニット１８１４、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ及びビデオプロセッサを含み得る１つまたは複数のコプロセッサ２２２０またはそのセット、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット２２３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット２２３２及び１つまたは複数の外部ディスプレイに連結するためのディスプレイユニット２２４０に連結される。一実施形態において、コプロセッサ２２２０は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、エンベデッドプロセッサなどのような特定用途向けプロセッサを含む。
【０１８５】
本明細書に開示される複数の機構の複数の実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはそのような複数の実装アプローチの組み合わせで実装されてもよい。本願発明の複数の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性及び不揮発性メモリ及び／または複数のストレージ要素を含む）、少なくとも１つの入力デバイスおよび少なくとも１つの出力デバイスを備える複数のプログラマブルシステム上で実行する複数のコンピュータプログラムまたはプログラムコードとして実装されてもよい。
【０１８６】
図２０に示されるコード２０３０のようなプログラムコードは、本明細書で説明される複数の関数を実行し、出力情報を生成する複数の入力命令に適用されてもよい。出力情報は、１つまたは複数の出力デバイスに、既知の様式で適用されてもよい。この用途の目的のために、処理システムは、例えば、デジタルシグナルプロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【０１８７】
プログラムコードは、処理システムと通信を行うために、高水準の手順型またはオブジェクト指向プログラミング言語で実装されてもよい。プログラムコードは、必要に応じて、アセンブリ言語または機械言語でさらに実装されてもよい。実際には、本明細書で説明されている複数の機構は、その範囲において、任意の特定のプログラミング言語に限定されない。いずれの場合であっても、言語は、コンパイラ型またはインタプリタ型言語であってもよい。
【０１８８】
少なくとも一実施形態の１つまたは複数の態様は、プロセッサ内の様々な論理を表す機械可読媒体上に記憶された複数の代表的命令により実装されうる。複数の代表的命令は、機械により読み出された場合、機械に、本明細書で説明される複数の技術を実行する論理を作成させる。「ＩＰコア」として知られるそのような複数の表現は、有形の機械可読媒体上に記憶され、様々な顧客または製造設備に供給されて、実際に論理またはプロセッサを作り出す製造機械にロードされてもよい。
【０１８９】
そのような機械可読記憶媒体は、限定的ではないが、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、書き換え可能コンパクトディスク（ＣＤ−ＲＷ）及び光磁気ディスクを含む任意の他の種類のディスク、リードオンリメモリ（ＲＯＭ）などの半導体デバイス、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、位相変化メモリ（ＰＣＭ）、磁気または光カードなどのランダムアクセスメモリ（ＲＡＭ）、または複数の電子的命令を記憶するために適切な任意の他の種類の媒体などの記憶媒体を含む、機械またはデバイスによって製造もしくは形成される複数の物品の非一時的かつ有形の構成を含んでもよい。
【０１９０】
従って、本願発明の複数の実施形態はまた、複数の命令を含み、または、本明細書で説明されている複数の構造、複数の回路、複数の装置、複数のプロセッサ及び／または複数のシステム特徴を定義するハードウェア記述言語（ＨＤＬ）のような設計データを含む非一時的で有形機械可読媒体を含む。
【０１９１】
複数のそのような実施形態はまた、プログラム製品と称されてもよい。
［エミュレーション（バイナリトランスレーション、コードモーフィングなどを含む）］
【０１９２】
いくつかの場合によっては、命令コンバータは、ソース命令セットからターゲット命令セットへ命令を変換するために用いられてもよい。例えば、命令コンバータは、コアによって処理されるべき１つまたは複数の他の命令に、命令を（例えば、静的バイナリトランスレーション、動的コンパイレーションを含む動的バイナリトランスレーションを用いる）トランスレート、モーフィング、エミュレート、あるいは他の方法で変換してもよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェアまたはそれらの組み合わせで実装されてもよい。命令コンバータは、プロセッサ上にあってもよく、プロセッサ外にあってもよく、または一部分がプロセッサ上かつ一部分がプロセッサ外にあってもよい。
【０１９３】
図２３は、本願発明の複数の実施形態に係る、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの使用を対比させるブロック図である。例示された実施形態では、命令コンバータは、ソフトウェア命令コンバータであるが、代替的には、命令コンバータは、ソフトウェア、ファームウェア、ハードウェアまたはそれらの様々な組み合わせで実装されてもよい。図２３は、少なくとも１つのｘ８６命令セットコアを有するプロセッサ２３１６によってネイティブに実行され得るｘ８６バイナリコード２３０６を生成するために、ｘ８６コンパイラ２３０４を用いてコンパイルされ得る高水準言語２３０２のプログラムを示す。少なくとも１つのｘ８６命令セットコアを有するプロセッサ２３１６は、少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサと実質的に同一結果を達成すべく、（１）インテル（登録商標）ｘ８６命令セットコアの命令セットの大部分、または（２）複数のアプリケーションのオブジェクトコードバージョン、もしくは少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサ上で動作することが想定された他のソフトウェアを互換可能に実行または他の方法で処理することにより、少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサと実質的に複数の同一の関数を実行可能な任意のプロセッサを表す。ｘ８６コンパイラ２３０４は、追加のリンク処理の有無に関わらず、少なくとも１つのｘ８６命令セットコアを有するプロセッサ２３１６上で実行可能なｘ８６バイナリコード２３０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。
【０１９４】
同様に、図２３は、高水準言語２３０２のプログラムが少なくとも１つのｘ８６命令セットコア２３１４を有しないプロセッサ（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セットを実行し及び／またはカリフォルニア州サニーベールのＡＲＭ  ホールディングス（ＡＲＭ  Ｈｏｌｄｉｎｇｓ）のＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）により、ネイティブに実行され得る代替的な命令セットバイナリコード２３１０を生成すべく、代替的な命令セットコンパイラ２３０８を用いてコンパイルされ得ることを示す。命令コンバータ２３１２は、ｘ８６バイナリコード２３０６を、ｘ８６命令セットコアを有しないプロセッサ２３１４によりネイティブに実行され得るコードに変換するために用いられる。この変換済みコードは、このような変換が可能な命令コンバータの製造は難しいため、代替的な命令セットバイナリコード２３１０と同一となる可能性は低いが、しかしながら、変換済みコードは、一般的なオペレーションを実現し、代替的な命令セットからの複数の命令により補完される。したがって、命令コンバータ２３１２は、エミュレーション、シミュレーションまたは任意の他の処理を介して、プロセッサまたはｘ８６命令セットプロセッサもしくはコアを有しない他の電子デバイスにｘ８６バイナリコード２３０６を実行させるソフトウェア、ファームウェア、ハードウェアまたはそれらの組み合わせを表す。
【０１９５】
また、説明及び特許請求の範囲で、「連結」及び／または「接続」という用語は、これらの複数の派生形とともに用いられてもよい。これらの用語は、互いの類義語として意図されていないことが理解されるべきである。むしろ、複数の特定の実施形態においては、「接続」は、２つまたはそれより多くの要素が、互いに直接物理的にまたは電気的に接触することを示すために用いられてもよい。「連結」は、２つまたはそれより多くの要素が、直接物理的にまたは電気的に接触することを意味してもよい。しかしながら、「連結」はまた、２つまたはそれより多くの要素が、互いに直接接触しないものの、互いに連動または連携することをさらに意味してもよい。例えば、復号ユニットは、１つまたは複数の介在する構成要素を通じて、実行ユニット及び／またはレジスタと連結され得る。複数の図面において、複数の矢印は、連結及び／または接続を示すのに用いられる。
【０１９６】
説明及び／または特許請求の範囲では、「論理」という用語が用いられてもよい。本明細書で用いられる場合において、論理という用語は、ハードウェア、ファームウェア、ソフトウェアまたはそれらの様々な組み合わせを含んでよい。複数の論理の例は、集積回路、複数の特定用途向け集積回路、複数のアナログ回路、複数のデジタル回路、複数のプログラミングされたロジックデバイス、複数の命令を含む複数のメモリデバイス、同様のもの、及び複数のそれらの組み合わせを含む。いくつかの実施形態において、ハードウェア論理は、複数のトランジスタ及び／または複数のゲート、及び／または複数の他の回路部構成要素を潜在的に含んでよい。様々な実施形態において、論理はまた、モジュール、ユニット、構成要素、回路、ロジックデバイス、または同様のものを称され及び／または表す。
【０１９７】
上の説明において、複数の実施形態への十分な理解を提供すべく、複数の具体的な詳細が記載されている。しかしながら、複数の他の実施形態は、これら複数の具体的な詳細のうちのいくつかをなしに実施され得る。本願発明の範囲は、上で提供された具体的な複数の例によって決定されるものではなく、以下の特許請求の範囲によってのみ決定される。複数の図面に示され、明細書で説明されたものへのすべての等しい関係は、複数の実施形態内に包含される。
【０１９８】
複数の他の例において、複数の周知回路、複数の構造、複数のデバイス、及び複数のオペレーションは、説明の理解を不明瞭にすることを回避すべく、ブロック図形式で示されており、または詳細に示されていない。いくつかの場合において、複数の構成要素が示されており、説明されているところ、それらは代わりに単一構成要素に組み込まれ得る。いくつかの場合において、単一構成要素が示されており説明されているところ、２つまたはそれより多くの構成要素に分離されてよい。
【０１９９】
特有のオペレーションは、ハードウェア構成要素により実行され得、または、命令を用いてプログラミングされた機械、回路、またはハードウェア構成要素（例えば、プロセッサ、プロセッサの一部分、回路など）が複数のオペレーションを実行するることをさせる及び／またはもたらすのに用いられ得る機械実行可能な命令または回路実行可能な命令で具現化され得る。複数のオペレーションはまた、ハードウェア及びソフトウェアの組み合わせにより任意選択的に実行されてもよい。プロセッサ、機械、回路、またはハードウェアはまた、命令を実行及び／または処理するように動作可能な具体的または特定の回路または他の論理（例えば、ファームウェア及び／またはソフトウェアと潜在的に組み合わせたハードウェア）を含み得る。
【０２００】
いくつかの実施形態は、機械可読媒体を含む製造品（例えば、コンピュータプログラム製品）を含む。当該媒体は、機械には可読な形式で情報を提供、例えば、記憶する機構を含み得る。機械可読媒体は、仮に機械に実行されたとき及び／またはその場合には機械に１つまたは複数のオペレーション、方法、または本明細書に開示されている技術を実行させ及び／または機械にそれを実行することにもたらすように動作可能な、そこに記憶されている命令または複数の命令のシーケンスを提供、または有し得る。機械可読媒体は、本明細書に開示されている複数の命令の１つまたは複数の実施形態を提供、例えば、記憶し得る。
【０２０１】
いくつかの実施形態において、機械可読媒体は、有形及び／または非一時的機械可読記憶媒体を含んでよい。例えば、有形及び／または非一時的機械可読記憶媒体は、フロッピー（登録商標）ディスケット、光記憶媒体、光ディスク、光データストレージデバイス、ＣＤ−ＲＯＭ、磁気ディスク、光磁気ディスク、リードオンリメモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、位相変化メモリ、位相変化データ記憶材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイス等を含んでよい。非一時的機械可読記憶媒体は、一時的伝搬された信号（例えば、搬送波）を含まない。
【０２０２】
適した機械の複数の例は、限定されないが、複数の汎用プロセッサ、複数の特定用途向けプロセッサ、命令処理装置、複数のデジタル論理回路、複数の集積回路、及び同様のものを含む。適した機械のさらに他の複数の例は、複数のコンピューティングデバイス、及びそのような複数のプロセッサ、命令処理装置、複数のデジタル論理回路、または複数の集積回路を組み込む複数の他の電子デバイスを含む。そのようなコンピューティングデバイス及び電子デバイスの例は、限定されないが、複数のデスクトップコンピュータ、複数のラップトップコンピュータ、複数のノートブックコンピュータ、複数のタブレットコンピュータ、複数のネットブック、複数のスマートフォン、複数の携帯電話、複数のサーバ、複数のネットワークデバイス（例えば、複数のルータ及び複数のスイッチ）、モバイルインターネットデバイス（ＭＩＤ）、複数のメディアプレイヤ、複数のスマートテレビ、複数のネットトップ、複数のセットトップボックス、及び複数のビデオゲームコントローラを含む。
【０２０３】
本明細書を通して、「一実施形態」、「実施形態」、「１つまたは複数の実施形態」、「いくつかの実施形態」という言及は、例えば、特定の機能が、本願発明の実施に含まれてもよいが、必ずしも含まれていなくてもよいことを示す。同様に、説明において、様々な複数の特徴は、場合により、開示を簡潔化し、様々な進歩的な複数の態様に対する理解を助けることを目的として、単一の実施形態、図またはその説明の中で一緒にグループ化される。この開示方法は、しかしながら、本願発明が、各請求項で明確に記述されるよりも多くの特徴を必要とするという意図を反映すると解釈されるものではない。むしろ、以下の特許請求の範囲が反映するように、進歩的な複数の態様は単一の開示された実施形態の一部のみの特徴にある。したがって、詳細な説明に続く、各請求項が本願発明の別個の実施形態として独立する特許請求の範囲は、これにより、この詳細な説明に明確に組み込まれている。
［例示的な実施形態］
【０２０４】
以下の複数の例は、さらなる実施形態に関する。複数の例における詳細が、１つまたは複数の実施形態における任意の場所で用いられ得る。
【０２０５】
例１は、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令を受信する復号ユニットを含むプロセッサである。インデックス付きベクトルロードとＡ／Ｌ演算とストア命令は、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示す。実行ユニットは、復号ユニットに連結される。実行ユニットは、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令に応じて、複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードし、ソース・パックドデータ・オペランドの複数のパックドデータ要素及びロードされた複数のデータ要素に対して複数のＡ／Ｌ演算を実行し、複数のパックドメモリインデックスに対応する複数のメモリ位置に複数の結果データ要素を記憶する。
【０２０６】
例２は、例１のプロセッサを含み、それにおいて任意選択的に、命令は、ギャザー、Ａ／Ｌ演算、及びスキャッタ命令を含む。
【０２０７】
例３は、任意の先行の例のプロセッサを含み、それにおいて任意選択的に、Ａ／Ｌ演算は、複数のパックド加算演算、複数のパックド減算演算、複数のパックド乗算演算、複数のパックド除算演算、複数のパックド積和演算、複数のパックド演算、複数のパックド回転演算、複数のパックド論理積演算、複数のパックド論理和演算、複数のパックド論理否定演算、及び複数のパックド否定論理積演算のうち少なくとも１つを含む。
【０２０８】
例４は、任意の先行の例のプロセッサを含み、それにおいて任意選択的に、Ａ／Ｌ演算は、複数のパックド加算演算及び複数のパックド乗算演算のうち少なくとも１つを含む。
【０２０９】
例５は、任意の先行の例のプロセッサを含み、それにおいて任意選択的に、プロセッサは、ロードされたデータ要素をコア内に送らずに、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令を実行する。
【０２１０】
例６は、任意の先行の例のプロセッサを含み、それにおいて任意選択的に、実行ユニットはメモリサブシステム内のプロセッサの非コアの部分にある。
【０２１１】
例７は、任意の先行の例のプロセッサを含み、それにおいて任意選択的に、復号ユニットは、コア内にあり、実行ユニットは、復号ユニットを有するコアよりもラストレベルのキャッシュに近い。
【０２１２】
例８は、任意の先行の例のプロセッサを含み、それにおいて任意選択的に、Ａ／Ｌ演算を実行すべき実行ユニットの一部分は、ラストレベルのキャッシュ及びラストレベルの次のレベルのキャッシュのうちの１つからロードされたデータ要素を受信する。
【０２１３】
例９は、任意の先行の例のプロセッサを含み、それにおいて任意選択的に、復号ユニットは、ソース・パックドデータ・オペレーション・マスクオペランドを示すマスクされたインデックス付きベクトルロードとＡ／Ｌ演算とストア命令であるインデックス付きベクトルロードとＡ／Ｌ演算とストア命令を復号化する。
【０２１４】
例１０は、任意の先行の例のプロセッサを含み、それにおいて任意選択的に、復号ユニットは、少なくとも５１２ビット幅のソース・パックドデータ・オペランドを示すべきインデックス付きベクトルロードとＡ／Ｌ演算とストア命令を復号化する。
【０２１５】
例１１は、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令を受信する段階を含む、プロセッサにおける方法である。インデックス付きベクトルロードとＡ／Ｌ演算とストア命令は、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、かつ複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示す。インデックス付きベクトルロードとＡ／Ｌ演算とストア命令が実行される。これは、複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードする段階を含んでよい。Ａ／Ｌ演算は、ソース・パックドデータ・オペランドの複数のパックドデータ要素及びロードされた複数のデータ要素に対して実行され得る。複数の結果データ要素は、複数のパックドメモリインデックスに対応する複数のメモリ位置に記憶され得る。
【０２１６】
例１２は、例１１の方法を含み、それにおいて任意選択的に、受信する段階は、ギャザーとＡ／Ｌ演算とスキャッタ命令を受信する段階を含む。
【０２１７】
例１３は、任意の先行の例の方法を含み、それにおいて任意選択的に、複数のＡ／Ｌ演算を実行する段階は、複数のパックド加算演算、複数のパックド減算演算、複数のパックド除算演算、複数のパックド乗算演算、複数のパックド積和演算、複数のパックドシフト演算、複数のパックド回転演算、複数のパックド論理積演算、複数のパックド論理和演算、複数のパックド論理否定演算、複数のパックド否定論理積演算のうち少なくとも１つを実行する段階を含む。
【０２１８】
例１４は、任意の先行の例の方法を含み、それにおいて任意選択的に、複数のＡ／Ｌ演算を実行する段階は、複数のパックド加算演算及び複数のパックド乗算演算のうち少なくとも１つを実行する段階を含む。
【０２１９】
例１５は、任意の先行の例の方法を含み、それにおいて任意選択的に、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令を実行する段階は、ロードされた複数のデータ要素をコア内に送らずに完了する。
【０２２０】
例１６は、任意の先行の例の方法を含み、それにおいて任意選択的に、複数のＡ／Ｌ演算を実行する段階は、メモリサブシステム内のプロセッサの非コアの部分のユニットにより実行され、当該ユニットは、命令が受信されたコアよりもラストレベルのキャッシュに近い。
【０２２１】
例１７は、任意の先行の例の方法を含み、それにおいて任意選択的に、受信する段階は、ソース・パックドデータ・オペレーション・マスクオペランドを示す、マスクされたインデックス付きベクトルロードとＡ／Ｌ演算とストア命令を受信する段階を含む。
【０２２２】
例１８は、任意の先行の例の方法を含み、それにおいて任意選択的に、受信する段階は、少なくとも５１２ビット幅のソース・パックドデータ・オペランドを示す命令を受信する段階を含む。
【０２２３】
例１９は、相互接続、当該相互接続に連結されるダイナミックランダムアクセスメモリ（ＤＲＡＭ）、及び当該相互接続に連結されるプロセッサを含む、命令を処理するシステムである。インデックス付きベクトルロードとＡ／Ｌ演算とストア命令を受信するプロセッサは、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、かつ複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示す。プロセッサは、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令に応じて、複数のパックドメモリインデックスに対応するＤＲＡＭの複数のメモリ位置から複数のデータ要素をロードし、ソース・パックドデータ・オペランドの複数のパックドデータ要素及びロードされた複数のデータ要素に対して複数のＡ／Ｌ演算を実行し、複数の送信先記憶位置に複数の結果データ要素を記憶するように動作可能である。
【０２２４】
例２０は、例１９のシステムを含み、それにおいて任意選択的に、複数の送信先記憶位置は、ＤＲＡＭの複数のパックドメモリインデックスに対応する複数のメモリ位置を含む。
【０２２５】
例２１は、任意の先行の例のシステムを含み、それにおいて任意選択的に、命令はギャザーとＡ／Ｌ演算とスキャッタ命令を含む。
【０２２６】
例２２は、非一時的機械可読記憶媒体を含む製造品である。機械可読記憶媒体は、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令を記憶する。インデックス付きベクトルロードとＡ／Ｌ演算とストア命令は、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、かつ複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示す。インデックス付きベクトルロードとＡ／Ｌ演算とストア命令は、機械により実行された場合には、当該機械に、複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードすること、ソース・パックドデータ・オペランドの複数のパックドデータ要素及びロードされた複数のデータ要素に対して複数のＡ／Ｌ演算を実行すること、及び複数の送信先記憶位置に複数の結果データ要素を記憶することを含む複数のオペレーションを実行させるように、動作可能である。
【０２２７】
例２３は、例２２の製造品を含み、それにおいて任意選択的に、複数の送信先記憶位置に複数の結果データ要素を記憶することは、複数のパックドメモリインデックスに対応する複数のメモリ位置に複数の結果データ要素を記憶することを含む。
【０２２８】
例２４は、任意の先行の例の製造品を含み、それにおいて任意選択的に、命令は、ギャザーとＡ／Ｌ演算とスキャッタ命令を含む。
【０２２９】
例２５は、任意の先行の例の製造品を含み、それにおいて任意選択的に、複数のＡ／Ｌ演算を実行することは、複数のパックド加算演算及び複数のパックド乗算演算のうち少なくとも１つを実行することを含む。
【０２３０】
例２６は、任意の先行の例の製造品を含み、それにおいて任意選択的に、ロードされた複数のデータ要素をプロセッサのコア内に送らずに、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令の実行を完了することをさらに含む。
【０２３１】
例２７は、例１１−１８のうちのいずれかの方法を実行するように構成され及び／または動作可能なプロセッサまたは他の装置を含む。
【０２３２】
例２８は、例１１−１８のうちのいずれかの方法を実行するための手段を含むプロセッサまたは他の装置を含む。
【０２３３】
例２９は、プロセッサを備え、かつダイナミックランダムアクセスメモリ（ＤＲＡＭ）、ネットワークプロセッサ、グラフィックスプロセッサ、無線通信チップのうち少なくとも１つを任意選択的に備えるコンピュータシステムを含み、当該プロセッサは、例１１−１８のいずれかの方法を実行するように構成され及び／または動作可能である。
【０２３４】
例３０は、仮に機械に実行されたとき及び／またはその場合に機械に例１１−１８のうちのいずれかの方法を実行させるように動作可能な命令を記憶する非一時的機械可読記憶媒体を含む。
【０２３５】
例３１は、１つまたは複数のオペレーションまたは実質的に本明細書で説明されているような任意の方法を実行するプロセッサまたは他の装置を含む。
【０２３６】
例３２は、１つまたは複数のオペレーションまたは実質的に本明細書で説明されている任意の方法を実行するための手段を含むプロセッサまたは他の装置を含む。
【０２３７】
例３３は、本明細書で説明されている命令のうちのいずれかを実行するプロセッサまたは他の装置を含む。
【０２３８】
例３４は、本明細書で説明されている複数の命令のいずれかを実行するための手段を含むプロセッサまたは他の装置を含む。
【０２３９】
例３５は、インデックス付きベクトルロード、算術及び／または論理（Ａ／Ｌ）演算、及びストア命令を受信するための手段を有するプロセッサを備える。インデックス付きベクトルロードとＡ／Ｌ演算とストア命令は、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、かつ複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示す。プロセッサは、複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードするための手段、ソース・パックドデータ・オペランドの複数のパックドデータ要素及びロードされた複数のデータ要素に対して複数のＡ／Ｌ演算を実行するための手段、及び複数のパックドメモリインデックスに対応する複数のメモリ位置に複数の結果データ要素を記憶するための手段を含む、インデックス付きベクトルロードとＡ／Ｌ演算とストア命令を実行するための手段を含む。
【０２４０】
例３６は、例３５のプロセッサを含み、受信するための手段は、ギャザーとＡ／Ｌ演算とスキャッタ命令を受信するための手段を含む。
【図１】
2016531377.tif 000004
【図２】
2016531377.tif 000005
【図３】
2016531377.tif 000006
【図４】
2016531377.tif 000007
【図５】
2016531377.tif 000008
【図６】
2016531377.tif 000009
【図７】
2016531377.tif 000010
【図８】
2016531377.tif 000011
【図９】
2016531377.tif 000012
【図１０】
2016531377.tif 000013
【図１１】
2016531377.tif 000014
【図１２】
2016531377.tif 000015
【図１３Ａ】
2016531377.tif 000016
【図１３Ｂ】
2016531377.tif 000017
【図１４Ａ】
2016531377.tif 000018
【図１４Ｂ】
2016531377.tif 000019
【図１４Ｃ】
2016531377.tif 000020
【図１４Ｄ】
2016531377.tif 000021
【図１５】
2016531377.tif 000022
【図１６Ａ】
2016531377.tif 000023
【図１６Ｂ】
2016531377.tif 000024
【図１７Ａ】
2016531377.tif 000025
【図１７Ｂ】
2016531377.tif 000026
【図１８】
2016531377.tif 000027
【図１９】
2016531377.tif 000028
【図２０】
2016531377.tif 000029
【図２１】
2016531377.tif 000030
【図２２】
2016531377.tif 000031
【図２３】
2016531377.tif 000032
【手続補正書】
【提出日】平成28年3月16日(2016.3.16)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、かつ複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示す、インデックス付きベクトルロード、算術及び論理の少なくとも一方の（Ａ／Ｌ）演算、及びストア命令を受信する復号ユニットと、
前記復号ユニットに連結され、前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令に応じて、前記複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードし、前記ソース・パックドデータ・オペランドの前記複数のパックドデータ要素、及びロードされた前記複数のデータ要素に対して複数のＡ／Ｌ演算を実行し、前記複数のパックドメモリインデックスに対応する前記複数のメモリ位置に複数の結果データ要素を記憶する実行ユニットと
を備える
プロセッサ。
【請求項２】
前記命令は、ギャザー、Ａ／Ｌ演算、及びスキャッタ命令を含む、
請求項１に記載のプロセッサ。
【請求項３】
前記複数のＡ／Ｌ演算は、複数のパックド加算演算、複数のパックド減算演算、複数のパックド乗算演算、複数のパックド除算演算、複数のパックド積和演算、複数のパックドシフト演算、複数のパックド回転演算、複数のパックド論理積演算、複数のパックド論理和演算、複数のパックド論理否定演算、及び複数のパックド否定論理積演算のうち少なくとも１つを含む、
請求項１または２に記載のプロセッサ。
【請求項４】
前記複数のＡ／Ｌ演算は、前記複数のパックド加算演算及び前記複数のパックド乗算演算のうち少なくとも１つを含む、
請求項３に記載のプロセッサ。
【請求項５】
前記プロセッサは、ロードされた前記複数のデータ要素をコア内に送らずに前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令を実行する、
請求項１から４のいずれか一項に記載のプロセッサ。
【請求項６】
前記実行ユニットは、メモリサブシステム内の前記プロセッサの非コアの部分にある、
請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
前記復号ユニットは、コア内にあり、前記実行ユニットは、前記復号ユニットを有するコアよりもラストレベルのキャッシュに近い、
請求項６に記載のプロセッサ。
【請求項８】
前記複数のＡ／Ｌ演算を実行すべき前記実行ユニットの部分は、ラストレベルのキャッシュ及び前記ラストレベルの次のレベルのキャッシュのうちの１つからロードされた前記複数のデータ要素を受信する、
請求項１から７のいずれか一項に記載のプロセッサ。
【請求項９】
前記復号ユニットは、ソース・パックドデータ・オペレーション・マスクオペランドを示す、マスクされたインデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令である前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令を復号化する、
請求項１から７のいずれか一項に記載のプロセッサ。
【請求項１０】
前記復号ユニットは、少なくとも５１２ビット幅の前記ソース・パックドデータ・オペランドを示すべき前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令を復号化する、
請求項１から７のいずれか一項に記載のプロセッサ。
【請求項１１】
プロセッサにおける方法であって、
複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、かつ複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示すインデックス付きベクトルロード、算術及び論理の少なくとも一方の（Ａ／Ｌ）演算、及びストア命令を受信する段階と、
前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令を実行する段階と
を備え、
前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令を実行する段階は、
前記複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードする段階と、
前記ソース・パックドデータ・オペランドの前記複数のパックドデータ要素、及びロードされた前記複数のデータ要素に対して複数のＡ／Ｌ演算を実行する段階と、
前記複数のパックドメモリインデックスに対応する前記複数のメモリ位置に複数の結果データ要素を記憶する段階とを含む、
方法。
【請求項１２】
前記受信する段階は、ギャザー、Ａ／Ｌ演算、及びスキャッタ命令を受信する段階を含む、
請求項１１に記載の方法。
【請求項１３】
前記複数のＡ／Ｌ演算を実行する段階は、複数のパックド加算演算、複数のパックド減算演算、複数のパックド乗算演算、複数のパックド除算演算、複数のパックド積和演算、複数のパックドシフト演算、複数のパックド回転演算、複数のパックド論理積演算、複数のパックド論理和演算、複数のパックド論理否定演算、及び複数のパックド否定論理積演算のうち少なくとも１つ実行する段階を含む、
請求項１１または１２に記載の方法。
【請求項１４】
前記複数のＡ／Ｌ演算を実行する段階は、前記複数のパックド加算演算及び前記複数のパックド乗算演算のうち少なくとも１つを実行する段階を含む、
請求項１３に記載の方法。
【請求項１５】
前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令を実行する段階は、ロードされた前記複数のデータ要素をコア内に送らずに完了する、
請求項１１から１４のいずれか一項に記載の方法。
【請求項１６】
前記複数のＡ／Ｌ演算を実行する段階は、メモリサブシステム内の前記プロセッサの非コアの部分のユニットにより実行され、
前記ユニットは、前記命令が受信されるコアよりもラストレベルのキャッシュに近い、  請求項１１から１５のいずれか一項に記載の方法。
【請求項１７】
前記受信する段階は、ソース・パックドデータ・オペレーション・マスクオペランドを示す、マスクされたインデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令を受信する段階を含む、
請求項１１から１６のいずれか一項に記載の方法。
【請求項１８】
前記受信する段階は、少なくとも５１２ビット幅の前記ソース・パックドデータ・オペランドを示す前記命令を受信する段階を含む、
請求項１１から１７のいずれか一項に記載の方法。
【請求項１９】
複数の命令を処理するシステムであって、
相互接続と、
前記相互接続に連結されるダイナミックランダムアクセスメモリ（ＤＲＡＭ）と、
前記相互接続に連結されるプロセッサと
を備え、
前記プロセッサは、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、かつ複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示す、インデックス付きベクトルロード、算術及び論理の少なくとも一方の（Ａ／Ｌ）演算、及びストア命令を受信し、
前記プロセッサは、前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令に応じて、前記複数のパックドメモリインデックスに対応する前記ＤＲＡＭの複数のメモリ位置から複数のデータ要素をロードし、前記ソース・パックドデータ・オペランドの前記複数のパックドデータ要素及びロードされた前記複数のデータ要素に対して複数のＡ／Ｌ演算を実行し、複数の送信先記憶位置に複数の結果データ要素を記憶するように、動作可能である、
システム。
【請求項２０】
前記複数の送信先記憶位置は、前記ＤＲＡＭの前記複数のパックドメモリインデックスに対応する前記複数のメモリ位置を含む、
請求項１９に記載のシステム。
【請求項２１】
前記命令は、ギャザー、Ａ／Ｌ演算、及びスキャッタ命令を含む、
請求項１９または２０に記載のシステム。
【請求項２２】
コンピュータに複数のオペレーションを実行させるためのプログラムであって、
インデックス付きベクトルロード、算術及び論理の少なくとも一方の（Ａ／Ｌ）演算、及びストア命令を記憶し、
前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令は、複数のパックドメモリインデックスを有すべきソース・パックドメモリインデックス・オペランドを示し、かつ複数のパックドデータ要素を有すべきソース・パックドデータ・オペランドを示し、
前記インデックス付きベクトルロード、Ａ／Ｌ演算、及びストア命令は、前記コンピュータに実行された場合に、
前記複数のパックドメモリインデックスに対応する複数のメモリ位置から複数のデータ要素をロードすること、
前記ソース・パックドデータ・オペランドの前記複数のパックドデータ要素、及びロードされた前記複数のデータ要素に対して複数のＡ／Ｌ演算を実行すること、及び
複数の送信先記憶位置に複数の結果データ要素を記憶することを含む
前記複数のオペレーションを前記コンピュータに実行させるように動作可能である、
プログラム。
【請求項２３】
前記複数の送信先記憶位置に前記複数の結果データ要素を記憶することは、前記複数のパックドメモリインデックスに対応する前記複数のメモリ位置に前記複数の結果データ要素を記憶することを含む、
請求項２２に記載のプログラム。
【請求項２４】
前記命令は、ギャザー、Ａ／Ｌ演算、及びスキャッタ命令を含む、
請求項２２または２３に記載のプログラム。
【請求項２５】
前記複数のＡ／Ｌ演算を実行することは、複数のパックド加算演算及び複数のパックド乗算演算のうち少なくとも１つを実行することを含む、
請求項２２から２４のいずれかに一項に記載のプログラム。
【請求項２６】
請求項２２から２５の何れか一項に記載のプログラムを格納するコンピュータ可読記憶媒体。
【国際調査報告】
2016531377.tif 000033
2016531377.tif 000034