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