(57)【特許請求の範囲】
【請求項１】
システムメモリ内に位置する多次元アレイから要素の多次元ブロックをキャッシュにプリフェッチするためのプリフェッチ命令を復号する復号器であって、前記プリフェッチ命令の少なくとも１つの被演算子が、前記要素の多次元ブロックのある要素のシステムメモリアドレス、前記要素の多次元ブロックのストライド、および前記要素の多次元ブロックの境界を示すものである、復号器と、
前記プリフェッチ命令を実行して、
前記要素の多次元ブロックの他の要素のシステムメモリアドレスを生成し、かつ
前記要素の多次元ブロックの各要素を各要素のシステムメモリアドレスから前記キャッシュにロードする、実行ユニットと、を備える、ハードウェアプロセッサ。
【請求項２】
状態マシンから前記要素の多次元ブロックの前記他の要素の前記システムメモリアドレスを生成するためのプリフェッチユニットを更に備える、請求項１に記載のハードウェアプロセッサ。
【請求項３】
前記プリフェッチユニットが、前記要素の多次元ブロックの前記他の要素の前記システムメモリアドレスを生成するための加算器を更に有する、請求項２に記載のハードウェアプロセッサ。
【請求項４】
前記プリフェッチユニットが、前記要素の多次元ブロックの前記他の要素の前記システムメモリアドレスを生成するためのアドレス生成ユニットを更に有する、請求項２に記載のハードウェアプロセッサ。
【請求項５】
前記プリフェッチ命令の前記少なくとも１つの被演算子が、前記要素の多次元ブロックをロードするための前記キャッシュのレベルを示すものである、請求項１に記載のハードウェアプロセッサ。
【請求項６】
前記ストライドが、第１の次元における第１のストライドと、第２の次元における異なる第２のストライドと、を含む、請求項１に記載のハードウェアプロセッサ。
【請求項７】
前記実行ユニットが、前記要素の多次元ブロックを犠牲キャッシュにロードするものである、請求項１に記載のハードウェアプロセッサ。
【請求項８】
前記実行ユニットが、前記キャッシュ内の推測プリフェッチデータセットを前記要素の多次元ブロックと置換するものである、請求項１〜７のいずれか一項に記載のハードウェアプロセッサ。
【請求項９】
１組の１つまたは複数のプロセッサにより実行される方法であって、
復号ユニットを用いて、システムメモリ内に位置する多次元アレイから要素の多次元ブロックをキャッシュにプリフェッチするためのプリフェッチ命令を復号することであって、
前記プリフェッチ命令の少なくとも１つの被演算子が、前記要素の多次元ブロックのある要素のシステムメモリアドレス、前記要素の多次元ブロックのストライド、および前記要素の多次元ブロックの境界を示すものである、復号することと、
実行ユニットを用いて、前記プリフェッチ命令を実行して、
前記要素の多次元ブロックの他の要素のシステムメモリアドレスを生成し、かつ
前記要素の多次元ブロックの各要素を各要素のシステムメモリアドレスから前記キャッシュにロードすることと、を含む、方法。
【請求項１０】
状態マシンから前記要素の多次元ブロックの前記他の要素の前記システムメモリアドレスを生成するためのプリフェッチユニットを提供することを更に含む、請求項９に記載の方法。
【請求項１１】
前記プリフェッチユニットが、前記要素の多次元ブロックの前記他の要素の前記システムメモリアドレスを生成するための加算器を更に有する、請求項１０に記載の方法。
【請求項１２】
前記プリフェッチユニットが、前記要素の多次元ブロックの前記他の要素の前記システムメモリアドレスを生成するアドレス生成ユニットを更に有する、請求項１０に記載の方法。
【請求項１３】
前記プリフェッチ命令の前記少なくとも１つの被演算子が、前記要素の多次元ブロックをロードするための前記キャッシュのレベルを示すものである、請求項９に記載の方法。
【請求項１４】
前記ストライドが、第１の次元における第１のストライドと、第２の次元における異なる第２のストライドと、を含む、請求項９に記載の方法。
【請求項１５】
前記実行ユニットが、前記要素の多次元ブロックを犠牲キャッシュにロードするものである、請求項９に記載の方法。
【請求項１６】
前記実行ユニットが、前記キャッシュ内の推測プリフェッチデータセットを前記要素の多次元ブロックと置換するものである、請求項９〜１５のいずれか一項に記載の方法。
【請求項１７】
１組の１つまたは複数のプロセッサと、
コードを記憶する１組の１つまたは複数のデータ記憶デバイスとを備え、
前記１組のプロセッサは、前記コードを実行すると、
復号ユニットを用いて、システムメモリ内に位置する多次元アレイから要素の多次元ブロックをキャッシュにプリフェッチするためのプリフェッチ命令を復号することであって、前記プリフェッチ命令の少なくとも１つの被演算子が、前記要素の多次元ブロックのある要素のシステムメモリアドレス、前記要素の多次元ブロックのストライド、および前記要素の多次元ブロックの境界を示すものである、復号することと、
実行ユニットを用いて、前記プリフェッチ命令を実行して、
前記要素の多次元ブロックの他の要素のシステムメモリアドレスを生成し、かつ
前記要素の多次元ブロックの各要素を各要素の前記システムメモリアドレスから前記キャッシュにロードすることと、を行う、装置。
【請求項１８】
前記１組のプロセッサは、前記コードを実行すると、
状態マシンから前記要素の多次元ブロックの前記他の要素の前記システムメモリアドレスを生成するためのプリフェッチユニットを提供することを更に行う、請求項１７に記載の装置。
【請求項１９】
前記プリフェッチユニットは、前記要素の多次元ブロックの前記他の要素の前記システムメモリアドレスを生成するための加算器を更に有するものである、請求項１８に記載の装置。
【請求項２０】
前記プリフェッチユニットは、前記要素の多次元ブロックの前記他の要素の前記システムメモリアドレスを生成するためのアドレス生成ユニットを更に有するものである、請求項１８に記載の装置。
【請求項２１】
前記プリフェッチ命令の前記少なくとも１つの被演算子は、前記要素の多次元ブロックをロードするための前記キャッシュのレベルを示すものである、請求項１７に記載の装置。
【請求項２２】
前記ストライドは、第１の次元における第１のストライドと、第２の次元における異なる第２のストライドと、を含むものである、請求項１７に記載の装置。
【請求項２３】
前記１組のプロセッサは、前記コードを実行すると、
前記実行ユニットを用いて、前記要素の多次元ブロックを犠牲キャッシュにロードすることを更に行う、請求項１７に記載の装置。
【請求項２４】
前記１組のプロセッサは、前記コードを実行すると、
前記実行ユニットを用いて、前記キャッシュ内の推測プリフェッチデータセットを前記要素の多次元ブロックと置換することを更に行う、請求項１７〜２３のいずれか一項に記載の装置。
【請求項２５】
システムメモリ内に位置する多次元アレイから要素の多次元ブロックをキャッシュにプリフェッチするためのプリフェッチ命令を復号する手段であって、前記プリフェッチ命令の少なくとも１つの被演算子が、前記要素の多次元ブロックのある要素のシステムメモリアドレス、前記要素の多次元ブロックのストライド、および前記要素の多次元ブロックの境界を示すものである、復号する手段と、
前記プリフェッチ命令を実行して、
前記要素の多次元ブロックの他の要素のシステムメモリアドレスを生成し、かつ
前記要素の多次元ブロックの各要素を各要素のシステムメモリアドレスから前記キャッシュにロードする手段と、を備える、ハードウェアプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、エレクトロニクスに関し、より具体的には、本開示の実施形態は、多次元アレイから要素の多次元ブロックをプリフェッチすることに関する。
【背景技術】
【０００２】
プロセッサまたはプロセッサの組が、命令セット、例えば、命令セットアーキテクチャ（ＩＳＡ：ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ）からの命令を実行する。命令セットは、プログラミングに関連するコンピュータアーキテクチャの一部であり、一般に、ネイティブデータ型、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割込みおよび例外処理、ならびに外部入力および出力（Ｉ／Ｏ：ｉｎｐｕｔ／ｏｕｔｐｕｔ）を含む。本明細書における命令という用語は、マクロ命令、例えば、実行用にプロセッサに提供される命令、またはマイクロ命令、例えば、マクロ命令を復号するプロセッサの復号器から結果として生じる命令のことを指し得ることに留意されたい。
【図面の簡単な説明】
【０００３】
本開示は、添付の図面の図における限定ではなくて、例として例示され、図面中、同じ参照符は、類似の要素を示す。
【０００４】
【図１】本開示の実施形態に従うスパース（ｓｐａｒｓｅ：疎）３次元ステンシルを例示する。
【０００５】
【図２】本開示の実施形態に従うプリフェッチユニットを有する複数コアハードウェアプロセッサのブロック図を例示する。
【０００６】
【図３】本開示の実施形態に従うプリフェッチユニットのブロック図を例示する。
【０００７】
【図４】本開示の実施形態に従って多次元アレイから要素の多次元ブロックをプリフェッチするフロー図を例示する。
【０００８】
【図５】本開示の実施形態に従って多次元アレイから要素の多次元ブロックをプリフェッチするフロー図を例示する。
【０００９】
【図６Ａ】本開示の実施形態に従う一般的なベクトルフレンドリ命令形式およびそれのクラスＡ命令テンプレートを例示するブロック図である。
【００１０】
【図６Ｂ】本開示の実施形態に従う一般的なベクトルフレンドリ命令形式およびそれのクラスＢ命令テンプレートを例示するブロック図である。
【００１１】
【図７Ａ】本開示の実施形態に従う図６Ａおよび６Ｂにおける一般的なベクトルフレンドリ命令形式のためのフィールドを例示するブロック図である。
【００１２】
【図７Ｂ】本開示の一実施形態に従うフルオペコードフィールドを構成する図７Ａにおける特定のベクトルフレンドリ命令形式のフィールドを例示するブロック図である。
【００１３】
【図７Ｃ】本開示の一実施形態に従うレジスタ指標フィールドを構成する図７Ａにおける特定のベクトルフレンドリ命令形式のフィールドを例示するブロック図である。
【００１４】
【図７Ｄ】本開示の一実施形態に従う増補（ａｕｇｕｍｅｎｔａｔｉｏｎ）演算フィールド６５０を構成する図７Ａにおける特定のベクトルフレンドリ命令形式のフィールドを例示するブロック図である。
【００１５】
【図８】本開示の一実施形態に従うレジスタアーキテクチャのブロック図である。
【００１６】
【図９Ａ】本開示の実施形態に従う例示的なイン・オーダーパイプラインおよび例示的なレジスタリネーミング、アウト・オブ・オーダー発行／実行パイプラインの両方を例示するブロック図である。
【００１７】
【図９Ｂ】本開示の実施形態に従うプロセッサに含まれるイン・オーダーアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウト・オブ・オーダー発行／実行アーキテクチャコアの両方を例示するブロック図である。
【００１８】
【図１０Ａ】本開示の実施形態に従う単一プロセッサコアのブロック図であって、オンダイ型相互接続ネットワークへのその接続およびレベル２（Ｌ２）キャッシュのそのローカルサブセットを加えたブロック図である。
【００１９】
【図１０Ｂ】本開示の実施形態に従う図１０Ａにおけるプロセッサコアの一部の拡大図である。
【００２０】
【図１１】本開示の実施形態に従う２つ以上のコアを有し得、統合メモリコントローラを有し得、および統合グラフィックスを有し得るプロセッサのブロック図である。
【００２１】
【図１２】本開示の一実施形態に従うシステムのブロック図である。
【００２２】
【図１３】本開示の実施形態に従うより具体的で例示的なシステムのブロック図である。
【００２３】
【図１４】本開示の実施形態に従って第２のより具体的で例示的なシステムのブロック図が示される。
【００２４】
【図１５】本開示の実施形態に従ってシステム・オン・チップ（ＳｏＣ）のブロック図が示される。
【００２５】
【図１６】本開示の実施形態に従うソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令にコンバートするためのソフトウェア命令コンバータの使用を対照させるブロック図である。
【発明を実施するための形態】
【００２６】
以下の記載には、非常に多くの具体的な詳細が説明される。しかしながら、本開示の実施形態は、これらの具体的な詳細を用いずに実施され得ることが理解される。他の事例では、周知の回路、構造、および技法が、この記載の理解を不明瞭にしないために詳細に示されていない。
【００２７】
「一実施形態」、「ある実施形態」、「ある実施形態例」等への明細書における参照は、記載される実施形態が、特定の特徴、構造、または特性を含み得るものの、全ての実施形態が、必ずしもその特定の特徴、構造、または特性を含まなくてもよいことを示す。その上、かかる文言は、必ずしも同じ実施形態を参照するものではない。更に、ある特定の特徴、構造、または特性が、ある実施形態に関して記載されるとき、明示的に記載されるか否かに関わらず、他の実施形態に関してかかる特徴、構造、または特性に影響を及ぼすことが当業者の知識内にあることが提起される。
【００２８】
命令処理ハードウェア（例えば、命令を復号および／または実行するために１つまたは複数のコアを有するハードウェアプロセッサ）が、例えば、算術または論理機能を行う際に、データについて演算し得る。データにアクセス（例えば、データをロードまたはストア）するプロセッサは、データの到着を待たざるを得ず、その場合、例えば、プロセッサは、データを待っていて、かつ何も処理していない（例えば、アイドル状態にある）。特定の実施形態では、ハードウェアプロセッサが、プロセッサによって演算されるべきデータを、（例えば、通常、プロセッササイクルにおいて測定される、アクセスおよび／またはサイクルタイムの）より遅いメモリからより速いメモリへとロード（例えば、コピー）し得、それは、一般的に、プリフェッチ（例えば、データのプリフェッチ）として呼ばれ得る。例えば、プロセッサによって（例えば、プログラム順序命令における後のものによって）演算されるべきデータが、システム（例えば、メイン）メモリからキャッシュ（例えば、キャッシュメモリ）にロードされ得る。キャッシュ（例えば、レベルＬ１、Ｌ２、Ｌ３、Ｌ４等のうちの全てまたは１つもしくは複数のレベル）は、ハードウェアプロセッサの一部（例えば、オンダイ）であり得る。一実施形態では、キャッシュが、静的ランダムアクセスメモリ（ＳＲＡＭ：ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）である。システムメモリは、ハードウェアプロセッサとは別個の構成要素、例えば、バス経由でプロセッサによってアクセス可能なメモリであってもよい。一実施形態では、システムメモリが、動的ランダムアクセスメモリ（ＤＲＡＭ：ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）および／または（プロセッサの）外部メモリ（例えば、大容量記憶デバイス）である。システムメモリは、アクセスおよび／またはサイクルタイムにおいて（例えば、その中への要求されたロードおよび／またはストアの完了において）（例えば、少なくとも１、２、３、４、５、６、７、８、９、または１０倍だけ）キャッシュよりも遅い可能性がある。本明細書において使用される際、キャッシュラインは、一般に、コヒーレンス目的のための単位として管理され得るデータのブロック（例えば、セクタ）のことを指し得る。キャッシュラインは、複数の別個の要素、例えばベクトルの要素を含み得る。
【００２９】
データをキャッシュに（例えば、システムメモリから、または下位レベルのキャッシュから上位レベルのキャッシュに、例えば、Ｌ３からＬ２またはＬ１キャッシュなどに）プリフェッチすること（例えば、プリフェッチ）は、プロセッサがそのデータを待つ（例えば、アイドル状態にある）ことに費やす時間を最小限にし得る。プリフェッチは、ハードウェアプロセッサにおけるメモリアクセスレイテンシを削減し得る。特定の処理演算（例えば、ステンシル計算）は、比較的大きな（例えば、キャッシュのまたはキャッシュレベルの容量よりも大きな）量のデータを含み得る。これは、例えば、キャッシュからのデータ（例えば、データのキャッシュライン）についてのハードウェアプロセッサの要求が失敗である（例えば、キャッシュラインがキャッシュ内にないか、または要求されたキャッシュレベルにない）場合、およびデータが、そのキャッシュからのロードよりも遅い演算においてロードされる場合、処理遅延を引き起こし得る。キャッシュは、システムメモリよりも（例えば、少なくとも１、２、３、４、５、６、７、８、９、１０、１００、または１０００倍だけ）小さくてもよい。
【００３０】
ステンシル計算（例えば、演算）は、ハードウェアプロセッサによって行われる科学的計算、金融サービス、および地震画像化において普通に見られる演算（例えば、ベクトル計算）の一実施例である。ステンシル計算は、以下の一般形式を有する。
【数１】
0006761415.tif 000002
【００３１】
この場合、各要素（例えば、ノード）は、例えば、特定の隣接要素からの重み付け寄与を生じさせるために、それ自体のデータを有し得る。ステンシル計算は、例えば、ベクトルデータについて演算するためのプロセッサ、例えば、限定されるものではないが、ＳＩＭＤベクトルおよび／またはＳＩＭＤハードウェアなどを使用して、多次元アレイから要素の多次元ブロック（例えば、サブセット）について行われ得る。要素は、一般に、単一値を表わすデータの別個の区分のことを指し得る。例えば、５１２ビットのキャッシュラインは、各要素について３２ビットを用いる１６の要素、各要素について８ビットを用いる６４の要素等を有し得る。本明細書における特定の実施形態は、要素の多次元アレイまたは多次元ブロックが、メモリ内の要素の単一次元アレイまたはブロックに平坦化されることを想定し得る。本開示の特定の実施形態は、ステンシルに関して記述されるが、これは、単に、本開示の１つの適用の実施例である。本開示の適用の更なる非限定例が、以下に記述される。図１は、本開示の実施形態に従うスパース３次元（３Ｄ：ｔｈｒｅｅ−ｄｉｍｅｎｓｉｏｎａｌ）ステンシル１００を例示する。例えば、このステンシル１００は、このステンシルによって（例えば、このステンシルにおいて）カバーされる６＊ｋの要素の値に基づいて、要素１０５について新しい値（例えば、６＊ｋの隣接要素のものからの重み付け寄与）を計算するために使用され得、この場合、ｋは、ステンシルの半値幅である。図１に関して例示されるように、スパースは、要素の多次元ブロックの最も外側の要素（例えば、描写されるような９＊９＊９（７２９）の要素キューブである、（２＊ｋ＋１）＊（２＊ｋ＋１）の要素キューブ）によって決定されるデータのブロック全体（例えば、ここでのキューブは、そこでのブロック全体になる）に存在する全てではない要素のことを指し得る。
【００３２】
多次元（例えば、２次元、３次元、４次元等の）アレイは、任意のサイズ、例えば、ステンシルの次元と比べて１桁またはそれ以上のサイズのものであり得る。例えば、ステンシルは、前の（例えば、隣接）要素に基づいて、多次元アレイにおける新しい要素に移され得り、この新しい要素について新しい値を計算する。一実施形態では、多次元アレイが、前のプロセスによって、例えば、データベースポピュレーション方法を使用して、要素を用いてポピュレートされる。一実施形態では、多次元アレイの各要素が、４バイトである。一実施形態では、多次元アレイの各要素が、８バイトである。一実施形態では、多次元アレイの各要素が、１６バイトである。一実施形態では、多次元アレイの各要素が、キャッシュラインの要素と同じサイズである。一実施形態では、要素の多次元ブロックの各要素が、キャッシュラインの要素と同じサイズである。一実施形態では、要素の多次元ブロックにおける各要素が、多次元アレイの各要素と同じサイズである。
【００３３】
（例えば、単一）プリフェッチ命令（例えば、マクロ命令）は、ハードウェアプロセッサ（例えば、それのプリフェッチユニット）が、要素の多次元ブロックを多次元アレイからキャッシュにプリフェッチすることを可能にし得る。かかる命令のいくつかの非限定的な形式が後に続く。特定の実施形態では、プリフェッチ命令が、要素の多次元ブロックの（例えば、開始または中心）要素のシステム（例えば、仮想）メモリアドレス、要素の多次元ブロックの（例えば、１つもしくは複数次元における）ストライド、要素の多次元ブロックの境界（例えば、および形状）、またはそれらの任意の組み合わせを（例えば、プロセッサに）示すデータフィールド（例えば、被演算子もしくは複数の被演算子）を含む。一実施形態では、そのアドレスが、ステンシルの中心、例えば、図１における要素１０５である。一実施形態では、そのアドレスが、ステンシルの境界要素、例えば、ｋが４であるとき、図１における要素１０１ｘまたは１０９ｘである。アレイのストライド（例えば、ステップサイズまたはインクリメント）は、一般に、ある要素の始まりと次の要素の始まりとの間のメモリ内の（例えば、仮想または物理）アドレスの数のことを指し得る。ストライドは、測定され得、またはアレイの要素（例えば、セル）のサイズの単位にあり得る。一実施形態では、ストライドが、要素のサイズよりも大きく、それゆえ、隣接要素間の超過間隔を示す。特定の実施形態では、プリフェッチ命令が、要素の多次元ブロック（例えば、合成アレイ）および／または多次元（例えば、ソース）アレイの全てのあるいは特定の次元についてストライドを示し得る。例えば、ストライドは、プリフェッチ命令のデータフィールド（例えば、被演算子または複数の被演算子）によって示され得る。例えば、各次元における、特定の次元における、またはある次元におけるストライドを示すために、プリフェッチ命令内の被演算子フィールドにおいて、第１の次元におけるストライドは、Ｓ１（ストライド値）の形態にあり得、第２の次元におけるストライドは、Ｓ２（ストライド値）等の形態にあり得る。第１および第２の次元における均一ストライドは、Ｓ１２（即時ストライド値）の形態にあり得る。第１、第２、および第３の次元における均一ストライドは、Ｓ１２３（即時ストライド値）の形態にあり得る。括弧がここで使用されるが、被演算子の任意の形式が、利用されてもよい。
【００３４】
一実施形態では、境界が、多次元ブロックおよび／または多次元アレイの最も外側の次元のアドレスであり得る。一実施形態では、境界または複数の境界が、例えば、既知のシステムメモリアドレスの要素（複数可）に対して測定されるような、各次元における要素の数であり得る。例えば、図１における中心要素１０５についてのアドレスおよび次元ｋが与えられる場合、境界が決定され得る。更に、境界（または、境界を表わすコードのストリーム）が、要素の多次元ブロック（例えば、図１におけるスパースステンシル１００）における他の要素のアドレスを決定するために使用され得る。境界は、複数の次元の各次元において異なり得る。
【００３５】
特定の実施形態では、プリフェッチ命令は、どのレベルのキャッシュ（例えば、レベル１（Ｌ１）、レベル２、（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）等）が、例えば、オペコードおよび／または任意のデータフィールド（例えば、被演算子もしくは複数の被演算子）によって、要素の多次元ブロックを中にロードするかを示し得る。例えば、「Ｌ１」、「Ｌ２」、「Ｌ３」、「Ｌ４」、または他の被演算子のテキストが、キャッシュのターゲットレベルを示すために、プリフェッチ命令における被演算子フィールド内に含まれ得る。一実施形態では、プリフェッチが、データをシステムメモリからキャッシュにプリフェッチすること（またはそのデータについてのシステムメモリアドレスをプリフェッチすること）あるいはキャッシュのあるレベルからキャッシュのより高いレベルに（例えば、Ｌ３からＬ２またはＬ１に）プリフェッチすることを含んでもよい。
【００３６】
（例えば、プログラミング言語および非機械言語で表現される）プリフェッチ命令の形式例が、以下に表１において提供される。
【表１】
0006761415.tif 000003
【００３７】
終りにおける括弧内の数字は、単に以下の記述における助けとなるものであり、被演算子フィールドの一部ではないことに留意する。オペコード名は単なる例であり、他の名前が使用されてもよい。被演算子は、即値、アドレス、レジスタ（例えば、全ての被演算子についての単一ベクトルレジスタまたは被演算子もしくは複数の被演算子についての複数のレジスタ）等であり得る。特定の被演算子が、特定のオペコードと共に列挙されるが、本開示は、そのように限定されず、例えば、オペコードおよび被演算子（複数可）が、任意の組み合わせで利用されてもよい。プリフェッチ命令は、全てのもしくは様々な被演算子を保持するために、メモリ、例えば、システムメモリまたはレジスタ（例えば、単一命令複数データ（ＳＩＭＤ：ｓｉｎｇｌｅ  ｉｎｓｔｒｕｃｔｉｏｎ  ｍｕｌｔｉｐｌｅ  ｄａｔａ）型レジスタ）を使用してもよい。一実施形態では、被演算子が、複数のデータレジスタの各要素に記憶される。一実施形態では、被演算子が、複数のレジスタのそれぞれに記憶される。プリフェッチ命令は、領域についての更なる情報、例えば、データ型サイズ（例えば、各要素のビットサイズ）を示す被演算子を含んでもよい。
【００３８】
命令形式例（１）に関して、オペコードＰＲＥＦＥＴＣＨ２Ｄは、（例えば、本明細書に記述されるような）ハードウェアプロセッサに、要素の２次元（２Ｄ：ｔｗｏ−ｄｅｍｅｎｓｉｏｎａｌ）ブロックを多次元（例えば、２Ｄまたは３Ｄ）アレイからプリフェッチさせ得る。ベースの被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから（例えば、ターゲット）キャッシュにフェッチされるべき要素の２次元ブロックのベース（例えば、システムメモリ）アドレスを示（例えば、符号化）し得る。一実施形態では、ベースの被演算子フィールドが、開始要素であり、例えば、必ずしも境界上の要素ではない。（単一レジスタまたは複数のレジスタ等にあり得る）領域の被演算子フィールドは、命令の実行によって、システムメモリ内に位置する多次元アレイから（例えば、ターゲット）キャッシュにフェッチされるべき２Ｄ領域の次元（例えば、高さおよび幅）を示（例えば、符号化）し得る。一実施形態では、領域の被演算子フィールドが、幅（例えば、デカルト座標のｘ方向）および高さ（例えば、デカルト座標のｙ方向）のそれぞれにおけるビットまたは要素の数である。ストライドの被演算子フィールドは、プリフェッチされるべき要素の多次元ブロックおよび／またはシステムメモリ内の多次元アレイの（例えば、ビットまたは要素の数において）ストライドを示（例えば、符号化）し得る。ストライドは、２つの次元のそれぞれにおいて異なってもよく、例えば、ストライドデータフィールドは、１次元（例えば、デカルト座標のｘ方向）について第１のストライドおよび第２の次元（例えば、デカルト座標のｙ方向）について第２のストライドを含んでもよい。ターゲットキャッシュの被演算子フィールドは、要素の２次元ブロックが、命令の実行によってシステムメモリ内に位置する多次元アレイからキャッシュにフェッチ（例えば、ロード）されるという（例えば、ターゲット）キャッシュ（例えば、キャッシュレベル）の識別を示（例えば、符号化）し得る。一実施形態では、ターゲットキャッシュの被演算子フィールドが、ラストレベルキャッシュまたはＬ３である。かかる命令の実行は、ベースアドレスで開始し、かつ矩形領域の対応する行および／または列の間のストライド（複数可）を使用して、システムメモリ領域の幅×高さの矩形全体をキャッシュにプリフェッチし得る。
【００３９】
命令形式例（２）に関して、オペコードＰＲＥＦＥＴＣＨ３Ｄは、（例えば、本明細書に記述されるような）ハードウェアプロセッサに、要素の３次元（３Ｄ）ブロックを多次元（例えば、３Ｄまたは４Ｄ）アレイからプリフェッチさせ得る。ベースの被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから（例えば、ターゲット）キャッシュにフェッチされるべき要素の３次元ブロックのベース（例えば、システムメモリ）アドレスを示（例えば、符号化）し得る。一実施形態では、ベースの被演算子フィールドが、開始要素であり、例えば、必ずしも境界上の要素ではない。（単一レジスタまたは複数のレジスタ等内にあり得る）領域の被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから（例えば、ターゲット）キャッシュにフェッチされるべき３Ｄ領域の次元（例えば、高さ、幅、および深さ）を示（例えば、符号化）し得る。一実施形態では、領域の被演算子フィールドが、高さ（例えば、デカルト座標のｚ方向）、幅（例えば、デカルト座標のｘ方向）、および深さ（例えば、デカルト座標のｙ方向）のそれぞれにおけるビットまたは要素の数である。ストライドの被演算子フィールドは、プリフェッチされるべき要素の多次元ブロックおよび／またはシステムメモリ内の多次元アレイの（例えば、ビットまたは要素の数において）ストライドを示（例えば、符号化）し得る。ストライドは、２次元または３次元のそれぞれにおいて異なってもよく、例えば、ストライドデータフィールドは、１次元（例えば、デカルト座標のｘ方向）についての第１のストライド、第２の次元（例えば、デカルト座標のｙ方向）についての第２のストライド、および第３の次元（例えば、デカルト座標のｚ方向）についての第３のストライドを含んでもよい。ターゲットキャッシュの被演算子フィールドは、要素の３次元ブロックが、命令の実行によってシステムメモリ内に位置する多次元アレイからキャッシュにフェッチ（例えば、ロード）されるという（例えば、ターゲット）キャッシュ（例えば、キャッシュレベル）の識別を示（例えば、符号化）し得る。一実施形態では、ターゲットキャッシュの被演算子フィールドが、ラストレベルキャッシュまたはＬ３である。かかる命令の実行は、ベースアドレスを含んで開始し、かつ矩形領域の対応する要素間のストライド（複数可）を使用して、システムメモリ領域の高さ×幅×深さの直方体全体をキャッシュにプリフェッチし得る。
【００４０】
命令形式例（３）に関して、オペコードＰＲＥＦＥＴＣＨは、（例えば、本明細書に記述されるような）ハードウェアプロセッサに、例えば、オペコードの一部である代わりに、被演算子フィールドである次元の数を用いて、要素の多次元ブロックを多次元アレイからプリフェッチさせ得る。例えば、２である次元の被演算子フィールドを有するＰＲＥＦＥＴＣＨ命令が、上記ＰＲＥＦＥＴＣＨ２Ｄ命令として機能し得る。例えば、３である次元の被演算子フィールドを有するＰＲＥＦＥＴＣＨ命令は、上記ＰＲＥＦＥＴＣＨ３Ｄ命令として機能し得る。次元の被演算子フィールドは、２、３、４、５、６、７、８、９等であり得、プリフェッチされるべき要素の多次元ブロックの境界を決定するために、被演算子をスケーリングすること、例えば、ストライド被演算子（複数可）および／または領域被演算子をスケーリング（例えば、修正）することを含み得る。一実施形態では、プリフェッチされるべき要素の多次元ブロックの１つもしくは複数の次元（例えば、各次元）についてのストライドが、即値であり得、および／またはメモリ内、例えば、レジスタ内に記憶され得る。
【００４１】
命令形式例（４）に関して、オペコード２Ｄ＿ＢＬＯＣＫ＿ＰＲＥＦＥＴＣＨｘは、（例えば、本明細書に記述されるような）ハードウェアプロセッサに、要素の２次元（２Ｄ）ブロック（例えば、正方形）を多次元（例えば、２Ｄまたは３Ｄ）アレイからプリフェッチさせ得る。［Ａ］の被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから（例えば、ターゲット）キャッシュにフェッチされるべき要素の２次元ブロックのベース（例えば、システムメモリ）アドレスを示（例えば、符号化）し得る。一実施形態では、［Ａ］の被演算子フィールドが、開始要素、例えば、境界上の要素である。例えば、半値幅について言及し得る、（または、例えば、図１のステンシル１００におけるような、要素の多次元ブロックの少なくとも１つの次元における（２＊ｋ＋１）の全幅に対応する）ｋの被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから（例えば、ターゲット）キャッシュにフェッチされるべき２Ｄ領域の次元（例えば、高さおよび幅）を示（例えば、符号化）し得る。一実施形態では、ｋの被演算子フィールドは、（２＊ｋ＋１）が幅（例えば、デカルト座標のｘ方向）および高さ（例えば、デカルト座標のｙ方向）のそれぞれにおけるビットまたは要素の数であることを示す。ｎ１の被演算子フィールドは、プリフェッチされるべき要素の多次元ブロックおよび／またはシステムメモリ内の多次元アレイの（例えば、ビットまたは要素の数における）ストライドを示（例えば、符号化）し得る。ストライドは、２つの次元のそれぞれにおいて異なってもよく、例えば、ストライドデータフィールドｎ１は、１次元（例えば、デカルト座標のｘ方向）についての第１のストライドおよび第２の次元（例えば、デカルト座標のｙ方向）についての第２のストライドを含んでもよい。ｘのオペコードフィールドは、要素の２次元ブロックが、命令の実行によってシステムメモリ内に位置する多次元アレイからキャッシュにフェッチ（例えば、ロード）されるという（例えば、ターゲット）キャッシュ（例えば、キャッシュレベル）の識別を示（例えば、符号化）し得る。代わりに、ｘは、被演算子フィールドにあってもよい。一実施形態では、ターゲットキャッシュの被演算子フィールドが、ラストレベルキャッシュまたはＬ３である。かかる命令の実行は、ベースアドレスにおいて開始し、かつ矩形領域の対応する行および／または列の間のストライド（複数可）を使用して、システムメモリ領域の高さ×幅の正方形全体をキャッシュにプリフェッチし得る。例えば、この命令は、（例えば、第１の被演算子によって指定されるような）アドレスＡから開始する要素（例えば、キャッシュライン）の数２＊ｋ＋１をキャッシュレベル「ｘ」（この場合、ｘは、変数である）にプリフェッチし得る。プリフェッチされるｋの要素（例えば、キャッシュライン）の組は、［Ａ］、［Ａ＋ｎ１］、［Ａ＋２＊ｎ１］、...［Ａ＋（ｋ−１）＊ｎ１］のような各次元に広がる正方形であり得る。
【００４２】
命令形式例（５）に関して、オペコード２Ｄ＿ＢＬＯＣＫ＿ＣＥＮＴＥＲ＿ＰＲＥＦＥＴＣＨｘは、（例えば、本明細書に記述されるような）ハードウェアプロセッサに、要素の２次元（２Ｄ）ブロック（例えば、正方形）を多次元（例えば、２Ｄまたは３Ｄ）アレイからプリフェッチさせ得る。［Ａ］の被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから（例えば、ターゲット）キャッシュにフェッチされるべき要素の２次元ブロックのベース（例えば、システムメモリ）アドレスを示（例えば、符号化）し得る。一実施形態では、［Ａ］の被演算子フィールドが、要素の多次元ブロックの正方形の中心要素、例えば、図１の要素１０５である。例えば、上記命令形式例（４）に関して記述されるような、他の被演算子が、含まれてもよい。例えば、この命令は、（例えば、第１の被演算子によって指定されるような）アドレスＡを（例えば、中心において）含むｋ個の要素（例えば、キャッシュライン）をキャッシュレベル「ｘ」（この場合、ｘは変数である）にプリフェッチし得る。プリフェッチされるｋの要素（例えば、キャッシュライン）の組は、［Ａ−ｋ＊ｎ１］から［Ａ＋ｋ＊ｎ１］までのような各次元に広がる正方形であり得る。
【００４３】
あるデータフィールド、例えば、被演算子ｎ１は、例えば、３Ｄにおける（＋または−）ｘ、ｙ、またはｚに向かって広がるような多次元ブロックについての方向を含んでもよい。
【００４４】
命令形式例（６）に関して、オペコード３Ｄ＿ＢＬＯＣＫ＿ＳＰＡＲＳＥ＿ＰＲＥＦＥＴＣＨｘは、（例えば、本明細書に記述されるような）ハードウェアプロセッサに、要素のスパース３次元（スパース３Ｄ）ブロックを多次元（例えば、３Ｄまたは４Ｄ）アレイからプリフェッチさせ得る。［Ａ］の被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから（例えば、ターゲット）キャッシュにフェッチされるべき（スパース）要素の３次元ブロックのベース（例えば、システムメモリ）アドレスを示（例えば、符号化）し得る。一実施形態では、［Ａ］の被演算子フィールドが、開始要素、例えば、スパースブロックの中心における要素である。（例えば、要素の多次元ブロックの少なくとも１つの次元における半値幅または（２＊ｋ＋１）の全幅を指し得る）ｋの被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから（例えば、ターゲット）キャッシュにフェッチされるべき３Ｄスパースブロックの次元（例えば、高さ、幅、および深さ、例えば、全て同じ値）を示（例えば、符号化）し得る。一実施形態では、（２＊ｋ＋１）の被演算子フィールドが、幅（例えば、デカルト座標のｘ方向）、高さ（例えば、デカルト座標のｚ方向）、および深さ（例えば、デカルト座標のｙ方向）のそれぞれにおけるビットまたは要素の数である。ｎ１およびｎ２の被演算子フィールドは、プリフェッチされるべき要素の多次元ブロックおよび／またはシステムメモリ内の多次元アレイの、第１の方向および第２の方向のそれぞれにおいて（例えば、ビットまたは要素の数における）ストライドを示（例えば、符号化）し得る。ストライドは、２つの次元のそれぞれにおいて異なってもよく、例えば、ストライドデータフィールドは、１次元（例えば、デカルト座標のｘ方向）についての第１のストライドｎ１および第２の次元（例えば、デカルト座標のｙ方向）についての第２のストライドｎ２を含んでもよい。第３の方向におけるストライドは、ｎ１＊ｎ２であり得る。例えば、開始要素がＡ［ｘ、ｙ、ｚ］であり、かつ進むべき要素がＡ［ｘ、ｙ、ｚ＋１］である場合、それらの間の距離は、Ａ［ｘ、ｙ、ｚ］＋ｎ１＊ｎ２＊要素のサイズである。ｘのオペコードフィールドは、要素のスパース３次元ブロックが、命令の実行によってシステムメモリ内に位置する多次元アレイからキャッシュにフェッチ（例えば、ロード）されるという（例えば、ターゲット）キャッシュ（例えば、キャッシュレベル）の識別を示（例えば、符号化）し得る。代わりに、ｘは、被演算子フィールドにあってもよい。一実施形態では、ターゲットｐ０キャッシュの被演算子フィールドが、ラストレベルキャッシュまたはＬ３である。かかる命令の実行は、ベースアドレスを含んで、かつ領域の対応する行および／または列の間のストライド（複数可）を使用して、システムメモリ領域の高さ×幅×深さの（例えば、互いに直角に）交差する３つの１次元アレイをキャッシュにプリフェッチし得る。例えば、この命令は、（例えば、第１の被演算子によって指定されるような）アドレスＡを含む要素（例えば、キャッシュライン）の数６＊ｋ＋１をキャッシュレベル「ｘ」（この場��、ｘは、変数である）にプリフェッチし得る。プリフェッチされるｋの要素（例えば、キャッシュライン）の組は、例えば、図１のステンシル１００におけるように、［Ａ−ｋ＊ｎ１］から［Ａ＋ｋ＊ｎ１］までのような各次元に広がるスパース３Ｄブロックであり得る。
【００４５】
命令形式例（７）に関して、オペコード３Ｄ＿ＢＬＯＣＫ＿ＰＲＥＦＥＴＣＨｘは、（例えば、本明細書に記述されるような）ハードウェアプロセッサに、３次元（３Ｄ）ブロックを多次元（例えば、３Ｄまたは４Ｄ）ブロックからプリフェッチさせ得る。［Ａ］の被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから（例えば、ターゲット）キャッシュにフェッチされるべき要素の３次元ブロックのベース（例えば、システムメモリ）アドレスを示（例えば、符号化）し得る。一実施形態では、［Ａ］の被演算子フィールドが、開始要素、例えば、スパースブロックの中心における要素である。（例えば、要素の多次元ブロック（例えば、ステンシル）の少なくとも１つの次元における半値幅または（２＊ｋ＋１）の全幅を指し得る）ｋの被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから（例えば、ターゲット）キャッシュにフェッチされるべき３Ｄブロックの次元（例えば、高さ、幅、および深さ、例えば、全て同じ値）を示（例えば、符号化）し得る。一実施形態では、ｋの被演算子フィールドは、（２＊ｋ＋１）が、幅（例えば、デカルト座標のｘ方向）、高さ（例えば、デカルト座標のｚ方向）、および深さ（例えば、デカルト座標のｙ方向）のそれぞれにおけるビットまたは要素の数であることを示す。ｎ１およびｎ２の被演算子フィールドは、プリフェッチされるべき要素の多次元ブロックおよび／またはシステムメモリ内の多次元アレイの、第１の方向および第２の方向のそれぞれにおいて（例えば、ビットまたは要素の数における）ストライドを示（例えば、符号化）し得る。ストライドは、２つの次元のそれぞれにおいて異なってもよく、例えば、ストライドデータフィールドは、１次元（例えば、デカルト座標のｘ方向）についての第１のストライドｎ１および第２の次元（例えば、デカルト座標のｙ方向）についての第２のストライドｎ２を含んでもよい。第３の方向に対するストライドは、ｎ１＊ｎ２であり得る。ｘのオペコードフィールドは、要素のスパース３次元ブロックが、命令の実行によってシステムメモリ内に位置する多次元アレイからキャッシュにフェッチ（例えば、ロード）されるという（例えば、ターゲット）キャッシュ（例えば、キャッシュレベル）の識別を示（例えば、符号化）し得る。代わりに、ｘは、被演算子フィールドにあってもよい。一実施形態では、ターゲットキャッシュの被演算子フィールドが、ラストレベルキャッシュまたはＬ３である。かかる命令の実行は、ベースアドレスを含んで、かつ領域の対応する行および／または列の間のストライド（複数可）を使用して、システムメモリ領域の高さ×幅×深さの直方体をキャッシュにプリフェッチし得る。例えば、この命令は、（例えば、第１の被演算子によって指定されるような）（例えば、隅）アドレスＡにおいて開始する要素（例えば、キャッシュライン）の数（２＊ｋ＋１）＊（２＊ｋ＋１）＊（２＊ｋ＋１）をキャッシュレベル「ｘ」（ここで、ｘは、変数である）にプリフェッチし得る。プリフェッチされるｋの要素（例えば、キャッシュライン）の組は、［Ａ］、［Ａ＋ｎ１］、［Ａ＋２＊ｎ１］...、［Ａ＋（ｋ−１）＊ｎ��］、［Ａ＋ｎ１＊ｎ２］、［Ａ＋ｎ１＊ｎ２＋ｎ１］、...［Ａ＋（ｋ−１）＊ｎ１＊ｎ２＋（ｋ−１）＊ｎ１］から形成される直方体であり得る。代わりに、この命令は、２Ｄ＿ＢＬＯＣＫ＿ＰＲＥＦＥＴＣＨｘ命令の量（２＊ｋ＋１）と置換されてもよい。
【００４６】
ターゲットキャッシュ（例えば、要素の多次元ブロックをそこにロードするキャッシュの識別）が（例えば、ターゲットキャッシュまたはｘとして）上記に示されるが、それは、必須ではなく、例えば、ターゲットキャッシュフィールドが存在しなくてもよい。それに加えてまたは代えて、ターゲットキャッシュは、被演算子において暗示的であってもよく、例えば、プリフェッチオペコードは、命令を（例えば、復号の間に）実行するハードウェアプロセッサに、ターゲットキャッシュが、ある特定のキャッシュレベル（例えば、Ｌ１、Ｌ２、Ｌ３、Ｌ４等）であるということを示してもよい。一実施形態では、命令のためのターゲットキャッシュは、特定のオペコードが、ターゲットキャッシュをハードウェアプロセッサに示すオペコードと同じであり、例えば、ターゲットキャッシュは、常に、ある特定のキャッシュレベル（例えば、Ｌ１、Ｌ２、Ｌ３、Ｌ４等）である。
【００４７】
図２は、本開示の実施形態に従うプリフェッチユニット２２０を有する複数コアハードウェアプロセッサ２０２のブロック図２００を例示する。いかなるプロセッサも、プリフェッチユニット、例えば、以下に記述されるプロセッサを含み得る。図２は、例えば、キャッシュコヒーレンス階層における、複数プロセッサコア（コアＡおよびコアＢ）ならびにキャッシュの複数レベル（Ｌ１、Ｌ２、およびＬ３）の実施形態を例示する。２つのコアが描写されるが、単一または２つ以上のコアが、利用されてもよい。キャッシュの複数レベルが描写されるが、単一または任意の数のキャッシュが、利用されてもよい。キャッシュ（複数可）は、任意の様式で、例えば、物理的または論理的に集中または分散されたキャッシュとして、編成されてもよい。
【００４８】
ある実施形態では、プロセッサ、例えば、図面に例示されるプロセッサコアを含むプロセッサもしくは複数のプロセッサ、または任意の他のプロセッサなどが、１つまたは複数のキャッシュを含んでもよい。図２は、３つのレベル（例えば、レベル１（Ｌ１）、２（Ｌ２）、および３（Ｌ３））のキャッシュの実施形態を例示する。プロセッサは、少なくとも１つのコアおよび少なくとも１つの非コアを含んでもよい。一実施形態では、複数のコア（コアＡおよびＢ）が、単一プロセッサ２０２のものである。コア（例えば、コアＡおよびコアＢ）は、命令を実行するためのプロセッサの構成要素を含み得る。非コアは、コアにはない全てのロジックを含み得る。プロセッサコア（例えば、コアＡ）は、例えば、レベル１命令キャッシュ（Ｌ１Ｉ）２０８およびレベル１データキャッシュ（Ｌ１Ｄ）２１０などの構成要素を含んでもよい。コア（例えば、コアＡ）は、例えば、アドレス生成ユニット（ＡＧＵ：ａｄｄｒｅｓｓ  ｇｅｎｅｒａｔｉｏｎ  ｕｎｉｔ）２１２、変換索引バッファ（ＴＬＢ：ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ）２１４、およびレベル２キャッシュ（Ｌ２）２１６などの構成要素を含んでもよい。コアは、キャッシュを他のコアと共有してもよいしまたは共有しなくてもよく、例えば、コアＡおよびコアＢは、Ｌ２  ２１６またはＬ１（２０８、２１０）ではなくてレベル３キャッシュ（Ｌ３）２１８を共有してもよい。コアは、これらの構成要素の任意の組み合わせを含んでもよいし、またはこれらの構成要素のうちのどれも含まなくてもよい。プロセッサ２０２（例えば、コアＡおよびコアＢ）は、例えば、矢印によって示されるように、システムメモリ２２４内のデータにアクセス（例えば、データをロードおよびストア）し得る。一実施形態では、システムメモリ２２４が、例えば、キャッシュ（例えば、プロセッサ２０２上のキャッシュ）にアクセスするコアよりも遅いアクセスおよび／またはサイクルタイムにおいて、バス上でコアと通信する。システムメモリ２２４は、例えば、プリフェッチ命令の実行の前にシステムメモリ２２４にロードされる、多次元アレイ２２６を含んでもよい。
【００４９】
アドレス生成ユニット（例えば、ＡＧＵ２１２）、例えば、アドレス計算ユニット（ＡＣＵ：ａｄｄｒｅｓｓ  ｃｏｍｐｕｔａｔｉｏｎ  ｕｎｉｔ）は、例えば、コアが、システムメモリにアクセスすることを可能にするために、メモリ（例えば、システムメモリ２２４）にアクセスするために使用されるアドレスを計算するプロセッサ（例えば、コア）の内側の実行ユニットを指し得る。一実施形態では、ＡＧＵが、アドレスストリーム（例えば、式）を入力としてみなして、そのストリームについての（例えば、仮想）アドレスを出力する。ＡＧＵ（例えば、回路）は、例えば、それの加算器、乗算器、シフタ、回転器等を利用して、例えば、加算、減算、モジュロ演算、またはビットシフトなどの算術演算を行い得る。
【００５０】
変換索引バッファ（例えば、ＴＬＢ２１４）は、仮想アドレスを（例えば、システムメモリの）物理アドレスにコンバートし得る。ＴＬＢは、例えば、物理的なメモリアドレスを取得するために、変換が、存在する各仮想アドレスについて行われる必要がないように、（例えば、最近使用された）仮想から物理的なメモリアドレスへの変換を記憶するためのデータ表を含んでもよい。仮想アドレス入力が、ＴＬＢ内にない場合、プロセッサは、仮想から物理的なメモリアドレスへの変換を判別するためにページウォークを行い得る。
【００５１】
プリフェッチユニット２２０は、例えば、コアの機能ユニット（例えば、実行ユニット、算術論理ユニット（ＡＬＵ：Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）、ＡＧＵ、ＴＬＢ等）を利用しない、別個の機能ユニットであり得る。プリフェッチユニットは、（例えば、本明細書に開示されるような）プリフェッチ命令によって利用され得る。プリフェッチユニットは、本明細書に記述されるプリフェッチを行うための回路および／またはハードウェアロジックを含んでもよい。プリフェッチユニットは、プロセッサの一部で（例えば、非コア上に）あり得る。プリフェッチユニットは、例えば、通信リソース（図示しない）、例えば、限定されるものではないが、リング型ネットワークなどを経由して、プロセッサのコア（複数可）と通信し得る。プロセッサ２０２は、（例えば、プロセッサの一部として）メモリコントローラおよび／または相互接続経由で、システムメモリ２２４および／またはキャッシュ（例えば、図２におけるＬ１、Ｌ２、もしくはＬ３）と通信し得る。プリフェッチユニット２２０は、システムメモリ２２４内の多次元アレイ２２６からキャッシュ（例えば、図２におけるＬ１、Ｌ２、またはＬ３）にロード（例えば、コピー）されるべき要素の多次元ブロックのシステムメモリアドレスを出力し得る。プリフェッチユニット２２０は、システムメモリアドレスをプロセッサ２０２のメモリコントローラ（図示しない）に出力し得る。
【００５２】
図３は、本開示の実施形態に従うハードウェアプリフェッチユニット３２０のブロック図を例示する。ハードウェアプリフェッチユニットは、図示される要素の任意の組み合わせを含んでもよいし、またはそれらのいずれも含まなくてもよい。例えば、プリフェッチユニットは、要素の多次元ブロックの仕様（例えば、次元、ベースアドレス、領域境界、ストライド、および／またはターゲットキャッシュ）を入力としてみなして、要素の多次元ブロックの（例えば、物理的な）システムメモリアドレスを（例えば、ロジックもしくは状態マシン、例えば、有限状態マシン（ＦＳＭ：ｆｉｎｉｔｅ  ｓｔａｔｅ  ｍａｃｈｉｎｅ）などを経由して）キャッシュにプリフェッチおよび／または出力するために、例えば、要素の多次元ブロックのそのデータをキャッシュに移動するために、制御ユニット３２４（または制御ユニットロジック）のみを含んでもよい。一実施形態では、システムメモリアドレスの出力（例えば、メモリ要求）が、メモリ制御ユニット（例えば、メモリコントローラ）のキューまたはバッファに送信され、例えば、それらの要求を完了する。
【００５３】
一実施形態では、ハードウェアプリフェッチユニットが、システムメモリに接続され得、（例えば、コアのリソースを利用せずに）キャッシュへの要素の多次元ブロックの移動を引き起こし得る。
【００５４】
一実施形態では、プリフェッチユニットが、実行ユニットおよび／またはプロセッサパイプライン（例えば、図９Ａの９００）から分離している。例えば、プリフェッチ命令は、実行ユニットによって実行（例えば、開始）され得、その後、プリフェッチユニットを利用し得、アドレスがプロセッサのコア（例えば、その実行ユニット）内で生成されることなく、キャッシュに配置されるべき要素の多次元ブロックのシステムメモリアドレスを取得する。
【００５５】
図３において、描写されたプリフェッチユニット３２０が、入力３２２を含む。入力３２２は、キャッシュにプリフェッチするための要素の多次元ブロックの仕様（例えば、次元、ベースアドレス、領域境界、ストライド、および／またはターゲットキャッシュ）であり得る。仕様は、プリフェッチ命令からの被演算子および／またはオペコードデータであり得る。（任意選択的な）入力３２２Ａは、仕様を提供するために制御ユニット３２４に直接的に接続し得、および／またはキューを含み得る。制御ユニット３２４は、仕様を仮想アドレスにコンバートするためのロジックを含み得る。一実施形態では、制御ユニット３２４が、仕様を仮想アドレスにコンバートするための有限状態マシン（ＦＳＭ３２５）を含む。例えば、ＦＳＭは、各多次元ブロックサイズ（例えば、２Ｄ、３Ｄ、４Ｄ等）についてある状態（または状態の組）を有し、かつＦＳＭの特定の状態を利用して、それに応じて、仕様についてのアドレスストリーム（例えば、式）を出力する。例えば、２Ｄ＿ＢＬＯＣＫ＿ＰＲＥＦＥＴＣＨｘオペコードについての命令形式例（４）に関して、アドレスストリームは、［Ａ］、［Ａ＋ｎ１］、［Ａ＋２＊ｎ１］、...［Ａ＋（ｋ−１）＊ｎ１］ならびにＡ、ｋ、およびｎ１についての値の供給を含み得る。
【００５６】
アドレスストリームは、アドレス生成ユニット３１２に出力３２６され得る。ＡＧＵは、プリフェッチユニットのＡＧＵ３１２またはコアのＡＧＵ（例えば、図２におけるＡＧＵ２１２）であり得る。ＡＧＵは、アドレスストリームから（例えば、仮想）アドレスを生成し得る。上記したように、ＡＧＵのハードウェア回路は、算術または他のハードウェア構成要素、例えば、加算器、乗算器、シフトレジスタ等を含んでもよい。次いで、（例えば、全）ストリームのための仮想アドレスが、トランジション・ルックアサイド・バッファ（ＴＬＢ）３１４（または仮想アドレスを、プロセッサがシステムメモリ（例えば、図２におけるシステムメモリ２２４）にアクセスするために使用し得るアドレス形式にコンバートするための他の構成要素）に（例えば、連続的に）出力３２８され得る。図３において、ＴＬＢ３１４は、仮想アドレスを受信し得、それらを物理的なアドレスにコンバートし得る。一実施形態では、ＴＬＢが、プリフェッチユニットのＴＬＢ３１４またはコアのＴＬＢ（例えば、図２におけるＴＬＢ２１４）であり得る。物理的なアドレスは、例えば、出力３３０経由で、または３００Ａを経由してＴＬＢから直接的に、プリフェッチユニット３２０から出力され得る。キューは、３３０または３３０Ａにおいて含まれ得る。任意選択的な特徴として、プリフェッチユニット３２０は、構成要素またはユーザが、プリフェッチユニットの状態を判断するためにステータスレジスタ３３２に問い合わせ得るように、ステータスレジスタ３３２（または他のステータスインジケータ）を含んでもよい。一実施形態では、ステータスレジスタ３３２は、例えば、出力３３４Ａ経由で、現在のプリフェッチ動作が進行中であること、完了したこと、失敗したこと等を示してもよい。一実施形態では、ステータスレジスタ３３２は、プリフェッチユニットがビジーまたはビジーでないことを示してもよい。一実施形態では、ステータスレジスタからの出力および／または問い合わせ入力が、プリフェッチユニット出力３３４経由で発生し得る。制御ユニット３２４は、ステータスレジスタ３３２を制御（例えば、更新）し得る。
【００５７】
本明細書における通信のための矢印の使用において、単一方向の矢印は、両方向における通信（例えば、信号の送信および／または受信）を許可し得ることに留意する。
【００５８】
図４は、本開示の実施形態に従って要素の多次元ブロックを多次元アレイからプリフェッチするフロー図４００を例示する。入力４０２は、プリフェッチされるべき要素の多次元ブロックの仕様（例えば、次元、ベースアドレス、領域境界、ストライド、および／またはターゲットキャッシュ）であり得る。それらの仕様は、次いで、（例えば、制御ユニット３２４によって）アドレスストリーム４０４を作り出すために使用され得る。アドレスストリームは、次いで、（例えば、仮想）アドレスを生成するために使用され得る。ストリームは、ストリームの全アドレスが、キャッシュにプリフェッチされる４１０まで、すなわち、終了（例えば、完了）される４１２まで、４０８において繰り返し得る。一実施形態では、プリフェッチロジック（例えば、ＦＳＭ）が、フロー図４００における動作の特定または全ての性能を制御し得る。
【００５９】
更なる例として、以下は、３つの可能なハードウェアロジック（例えば、ＦＳＭ）実現形態である。第１に、ロジック（例えば、ＦＳＭ）は、アドレス（例えば、アドレスＡ（ベースアドレス）＋６４、他の実施例についての上記アドレスストリームを参照）を計算するための整数加算器（および／または乗算器等）と、メモリサブシステム（例えば、コントローラ）に送信する前に仮想アドレスを物理的なアドレスに変換するためのＴＬＢと、を含み得る。この実現形態では、ＦＳＭが、自己完結的であり得、プロセッサの内側の別個の機能的ユニットとして開発され得る。一実施形態では、プリフェッチユニットのＴＬＢが、プロセッサのＴＬＢ（複数可）とコヒーレントに保たれる。第２に、ロジック（例えば、ＦＳＭ）は、仮想アドレスを生成するためにＡＧＵ（例えば、整数加算器）を含有し得、次いで、仮想アドレスは、（例えば、ＴＬＢ経由での）仮想から物理への変換のためにプロセッサのメモリパイプラインに送り込まれ得、ならびに／または（例えば、それぞれ交互に）キャッシュおよびシステムメモリアクセスのためにキューに入れられ得る。第３に、ロジック（例えば、ＦＳＭ）は、アドレスストリームを生成するために制御ユニットを含み得るが、システムメモリの仮想アドレスを生成するためにプロセッサコアのＡＧＵと、キャッシュおよびシステムメモリアクセスのためにキューに入れられる物理的なシステムメモリ要求を生成するためのプロセッサコアのＴＬＢと、を利用し得る。
【００６０】
図５は、本開示の実施形態に従って要素の多次元ブロックを多次元アレイからプリフェッチするフロー図５００を例示する。フロー図は、復号ユニットを用いて、要素の多次元ブロックを多次元アレイからキャッシュにプリフェッチするためのプリフェッチ命令を復号することであって、プリフェッチ命令の少なくとも１つの被演算子が、要素の多次元ブロックのある要素のシステムメモリアドレス、要素の多次元ブロックのストライド、および要素の多次元ブロックの境界を示すものである、復号すること５０２、ならびに、実行ユニットを用いて、プリフェッチ命令を実行して、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成し、かつ要素の多次元ブロックをシステムメモリアドレスからキャッシュにロードすること５０４、を含む。
【００６１】
本明細書に開示されるハードウェアプリフェッチ方法および装置は、データの規則的な形状の（例えば、１Ｄ、２Ｄ、または３Ｄ）ブロック上で、これらのブロック内の規則的なアクセスパターンを使用して利用され得る。隣接ブロックは、（例えば、畳み込み用途において）連続的あるいは（例えば、スパースソルバー、スパースブロック行列ベクトル積、または地震モデリングおよび予測用途において）不連続的のいずれかであり得る。
【００６２】
特定の実施形態では、プリフェッチ命令が、要素の多次元ブロックをキャッシュレベルのうちの１つまたは複数にプリフェッチし得る。一実施形態では、キャッシュレベルが、犠牲キャッシュである。犠牲キャッシュは、ラストレベルキャッシュ（ＬＬＣ：ｌａｓｔ  ｌｅｖｅｌ  ｃａｃｈｅ）、例えば、図２におけるＬ３  ２１８であり得る。一実施例では、（例えば、マクロ）命令が、要素の多次元ブロックをシステムメモリから犠牲キャッシュにプリフェッチする。プロセッサ（例えば、コア）が、（例えば、かなり遅い）システムメモリへのアクセスの前にデータ（例えば、キャッシュライン）について（例えば、最高（例えば、図２のＬ１）から最低（例えば、図２のＬ３）までキャッシュを調べ得るので、犠牲キャッシュへのプリフェッチは、システムメモリにアクセスすることなく、かつ問題のそのデータがキャッシュ内にあるという他の通知をプロセッサに提供することなく、プロセッサが、そのデータにアクセスすることを可能にし得る。別の実施形態では、要素の多次元ブロックのプリフェッチが、要素の多次元ブロックが（例えば、キャッシュ内のそれらのキャッシュラインのタグディレクトリを使用して）キャッシュにロードされることをプロセッサ（例えば、コア）に通知することを含んでもよい。
【００６３】
推測プリフェッチデータセットがキャッシュに生成および配置されている可能性がある一実施形態では、本明細書に記述されるプリフェッチ命令、方法、および装置が、キャッシュ内のその推測プリフェッチデータセットを要素の多次元ブロックと置換してもよい。既存の（例えば、利用できない）キャッシュの交換は、例えば、（例えば、推測プリフェッチデータセットおよび／または）要素の多次元ブロックのサイズに関するキャッシュの限定されたサイズ、システムメモリからデータをフェッチするための限定されたリソース、および不正確なプリフェッチによって生じられる電力消費のために、有用であり得る。一実施形態では、推測プリフェッチデータセットおよび要素の多次元ブロックが、このデータ上で動作すべき同じフューチャ命令に対応する。
【００６４】
特定の実施形態では、本明細書に開示されるハードウェアプリフェッチ方法および装置が、例えば、単に、要素の多次元ブロック全体のための連続な仮想アドレスのみならず、（例えば、仮想）アドレス間の一定ではない差異を伴う複数のメモリ要求を生成し得る。特定の実施形態では、本明細書におけるハードウェア方法および装置が、単に、乱数を生成するのみならず、その代わりに、（例えば、本明細書に記述されるような）ある特定の固定パターンを対象にしてもよい。
【００６５】
特定の実施形態では、本明細書に開示されるハードウェアプリフェッチ方法および装置が、キャッシュミス率を削減し得、例えば、異なるサイズのブロックの、メモリ内にランダムに位置する要素の（例えば、規則的な形状の（１Ｄ、２Ｄ、または３Ｄ））ブロック上で動作する演算についての性能を改善し得る。各ブロック内のアクセスパターンは、規則的（例えば、逐次的またはストライド式）であり得るが、演算（例えば、ステンシル演算）が次のかかるブロックに動く際に、アクセスパターンは、割り込まれることになり得、推測プリフェッチエンジンが、本明細書に開示されるような（例えば、プログラマーが）決定した要素の多次元ブロックのプリフェッチを可能にするプリフェッチ命令とは対照的に、新しいブロック内での別のアクセスパターンの学習を必要とし（例えば、新しいブロック内の正確なデータをキャッシュにないようにさせ）得る。
【００６６】
例えば、同じストライドを３回見ることを、ストリームを学習して、そのストライドを用いて推測的にプリフェッチを開始するために、必要とするプリフェッチを考える。新しいブロックに動いた後、ある演算が、キャッシュ内のデータの３つのミスを経験し得る。データがメモリから来る場合、メモリアクセスについて３００サイクルのレイテンシを想定すると、プロセッサパイプラインは、最大１０００サイクルまで停止し得る。ブロック内の計算が５００サイクル行われる場合、データが、そのデータについての演算が実行されている時間またはその時間の前にキャッシュ内で利用可能である場合と比べて、３倍の性能損失（例えば、１５００／５００）が存在する。
【００６７】
一実施形態では、疎線形（ｓｐａｒｓｅ  ｌｉｎｅａｒ）法が、式Ｍ＊ｘ＝ｂの疎系を解くための直接的な方法である。一実施形態では、アレイ（例えば、行列）Ｍが、リオーダされる。更に、リオーダされた行列の列は、スーパーブロックに区分けされ得、例えば、この場合、各スーパーブロックが、同じ非ゼロ構造を有する連続した列の小さなサブセットである。同じ非ゼロ構造に起因して、これらのスーパーブロックは、例えば、スーパーブロックの個々の行／列にアクセスするための追加的な指標付けデータ構造を有する、比較的長くて狭い密行列として記憶され得る。これらの行列の幅および高さは、非ゼロ構造のみならず、行列内のそれらの位置に依存し得る。片側（例えば、左）のスーパーノードは、他方側（例えば、右）のスーパーノードよりも（例えば、かなり）小さい場合がある。一実施例では、スーパーノードサイズが、１ｘ１と５１２ｘ１６との間で異なる。マルチコアプロセッサ上の並列処理にさらすために、（例えば、大きな）スーパーノードが、可変次元の（例えば、小さな）密行列に更に分割され得る。両方のスーパーノードは、例えば、消去ツリー順序によって規定されるような、ランダムな様式でアクセスされ得るので、推測プリフェッチは、例えば、あるスーパーノードから別のスーパーノードへのランダムな遷移を捕らえないために、正確なデータをプリフェッチしない可能性があり、それゆえ、次のスーパーノードにおける開始をプリフェッチし得る。更に、スーパーノードのサイズは、小さいおよび／または異なる可能性がある。スーパーノードは、三角形の２Ｄアレイを含んでもよい。本明細書における特定の実施形態は、（例えば、三角形の２Ｄ領域のための）スーパーノードデータのプリフェッチを可能にし得る。
【００６８】
本開示の実施形態は、（例えば、グリッドレベルのセルをプリフェッチするための）幾何学的なマルチグリッド方法のためのデータのプリフェッチ、畳み込みをベースとするカーネル、例えば、限定されるものではないが、Ｉｎｔｅｌ（登録商標）インテグレーテッド・パフォーマンス・プリミティブ（ＩＰＰ：Ｉｎｔｅｇｒａｔｅｄ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｐｒｉｍｉｔｉｖｅｓ）におけるもの、計算流体力学（ＣＦＤ：ｃｏｍｐｕｔａｔｉｏｎａｌ  ｆｌｕｉｄ  ｄｙｎａｍｉｃｓ）における高位の方法、および基本線形代数サブプログラム（Ｂａｓｉｃ  Ｌｉｎｅａｒ  Ａｌｇｅｂｒａ  Ｓｕｂｐｒｏｇｒａｍｓ）（例えば、ＢＬＡＳ３）高密度線形代数カーネルの高性能な実現形態などを可能にする。本明細書における特定の実施形態によるプリフェッチは、畳み込みのために利用され得るが、本開示は、そのように限定されない。例えば、特定の実施形態は、逐次的またはほぼ逐次的なアクセスパターンを呈しないデータをプリフェッチするために利用されてもよい。
【００６９】
一実施形態では、本開示に従う複数のプリフェッチ命令のためのプリフェッチ被演算子が、別個のメモリ位置内に（例えば、レジスタ内に）記憶され、各プリフェッチ命令が、例えば、所望の時間において、プリフェッチされたデータの各組を提供するために、被演算子のそのそれぞれの組について実行され得る。特定の実施形態では、これは、各ブロックが、他の（例えば、前にアクセスされた）ブロックとは異なる非逐次的（例えば、不規則的）なアクセスパターンのものである、要素の多次元ブロックのプリフェッチを可能にし得る。
【００７０】
更に別の実施形態では、３Ｄにおける空間適応性が、例えば、地震モデリングおよび予測用途における、柔軟な非構造化多面体（例えば、四面体または六面体）メッシュによって実現され得る。四面体メッシュは、例えば、４つの三角形面の、多次元アレイを形成し得る。六面体メッシュは、例えば、６つの面の、多次元アレイを形成し得る。本明細書における特定の実施形態は、（例えば、メッシュのある面についての）そのデータのプリフェッチを可能にし得る。例えば、本開示の方法および装置は、グローバル演算子および時間積分未知量のためのプリフェッチ演算子を提供してもよい。アクセス構造は、メッシュ（例えば、それは、実行時間において既知であるが、コンパイル時間において既知ではない）によって決定され得る。多面体（例えば、四面体または六面体）の第ｉ番目の面が処理されるが、本開示は、（ｉ＋１）番目の面のために必要とされる行列のある範囲のプリフェッチを提供してもよい。要求された行列は、（例えば、行列の疎性パターンに従って）可変サイズを有し得るので、２Ｄプリフェッチが、利用されてもよい。
【００７１】
一実施形態では、ブロック圧縮行（ＢＣＲ：ｂｌｏｃｋ  ｃｏｍｐｒｅｓｓｅｄ  ｒｏｗ）形式および複数右辺を使用する疎行列ベクトル積が、多次元アレイの非連続的なブロックを含んでもよい。本明細書における特定の実施形態は、その非連続的なデータのプリフェッチを可能にし得る。
【００７２】
一実施形態では、ハードウェアプロセッサが、プリフェッチ命令を復号して、要素の多次元ブロックを多次元アレイからキャッシュにプリフェッチするための復号器であって、プリフェッチ命令の少なくとも１つの被演算子が、要素の多次元ブロックのある要素のシステムメモリアドレス、要素の多次元ブロックのストライド、および要素の多次元ブロックの境界を示すものである、復号器と、プリフェッチ命令を実行して、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成し、かつ要素の多次元ブロックをシステムメモリアドレスからキャッシュにロードするための実行ユニットと、を含む。実行ユニットは、ハードウェアプリフェッチユニットに、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成させる、および／または要素の多次元ブロックをシステムメモリアドレスからキャッシュにロードさせるためのプリフェッチ命令を実行し得る。ハードウェアプロセッサは、状態マシンから要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するためのプリフェッチユニットを含んでもよい。プリフェッチユニットは、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するための加算器を含んでもよい。プリフェッチユニットは、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するためのアドレス生成ユニットを含んでもよい。命令の少なくとも１つの被演算子は、要素の多次元ブロックをロードするためのキャッシュのあるレベルを示し得る。ストライドは、第１の次元における第１のストライドと、第２の次元における異なる第２のストライドと、を含み得る。実行ユニットは、要素の多次元ブロックを犠牲キャッシュにロードしてもよい。実行ユニットは、キャッシュ内の推測プリフェッチデータセットを要素の多次元ブロックと置換してもよい。
【００７３】
別の実施形態では、方法が、復号ユニットを用いて、要素の多次元ブロックを多次元アレイからキャッシュにプリフェッチするためのプリフェッチ命令を復号することであって、プリフェッチ命令の少なくとも１つの被演算子が、要素の多次元ブロックのある要素のシステムメモリアドレス、要素の多次元ブロックのストライド、および要素の多次元ブロックの境界を示すものである、復号することと、実行ユニットを用いて、プリフェッチ命令を実行して、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成し、かつ要素の多次元ブロックをシステムメモリアドレスからキャッシュにロードすることと、を含む。方法は、状態マシンから要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するためのプリフェッチユニットを提供することを含んでもよい。プリフェッチユニットは、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するための加算器を含んでもよい。プリフェッチユニットは、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するためのアドレス生成ユニットを含んでもよい。命令の少なくとも１つの被演算子は、要素の多次元ブロックをロードするためのキャッシュのあるレベルを示し得る。ストライドは、第１の次元における第１のストライドと、第２の次元における異なる第２のストライドと、を含み得る。実行ユニットは、要素の多次元ブロックを犠牲キャッシュにロードしてもよい。実行ユニットは、キャッシュ内の推測プリフェッチデータセットを要素の多次元ブロックと置換してもよい。
【００７４】
更に別の実施形態では、装置が、１組の１つまたは複数のプロセッサと、１組の１つまたは複数のデータ記憶デバイスであって、１組のプロセッサによって実行されるときに、１組の１つまたは複数のプロセッサに、以下の、復号ユニットを用いて、要素の多次元ブロックを多次元アレイからキャッシュにプリフェッチするためのプリフェッチ命令を復号することであって、プリフェッチ命令の少なくとも１つの被演算子が、要素の多次元ブロックのある要素のシステムメモリアドレス、要素の多次元ブロックのストライド、および要素の多次元ブロックの境界を示すものである、復号することと、実行ユニットを用いて、プリフェッチ命令を実行して、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成し、かつ要素の多次元ブロックをシステムメモリアドレスからキャッシュにロードすることと、を行わせる、コードを記憶する１組の１つまたは複数のデータ記憶デバイスと、を含む。１組のデータ記憶デバイスが、１組のプロセッサによって実行されるときに、１組のプロセッサに、以下の、状態マシンから要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するためのプリフェッチユニットを提供することを更に含むことを行わせる、コードを更に記憶してもよい。１組のデータ記憶デバイスが、１組のプロセッサによって実行されるときに、１組のプロセッサに、以下の、プリフェッチユニットが、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するための加算器を更に備えることを行わせる、コードを更に記憶してもよい。１組のデータ記憶デバイスが、１組のプロセッサによって実行されるときに、１組のプロセッサに、以下の、プリフェッチユニットが、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するためのアドレス生成ユニットを更に備えることを行わせる、コードを更に記憶してもよい。１組のデータ記憶デバイスが、１組のプロセッサによって実行されるときに、１組のプロセッサに、以下の、命令の少なくとも１つの被演算子が、要素の多次元ブロックをロードするためのキャッシュのあるレベルを示すものであることを行わせる、コードを更に記憶してもよい。１組のデータ記憶デバイスが、１組のプロセッサによって実行されるときに、１組のプロセッサに、以下の、ストライドが、第１の次元における第１のストライドおよび第２の次元における異なる第２のストライドを含むことを行わせる、コードを更に記憶してもよい。１組のデータ記憶デバイスが、１組のプロセッサによって実行されるときに、１組のプロセッサに、以下の、実行ユニットが、要素の多次元ブロックを犠牲キャッシュにロードするものであることを行わせる、コードを更に記憶してもよい。１組のデータ記憶デバイスが、１組のプロセッサによって実行されるときに、１組のプロセッサに、以下の、実行ユニットが、キャッシュ内の推測プリフェッチデータセットを要素の多次元ブロックと置換するものであることを行わせる、コードを更に記憶してもよい。
【００７５】
別の実施形態では、ハードウェアプロセッサが、要素の多次元ブロックを多次元アレイからキャッシュにプリフェッチするためのプリフェッチ命令を復号するための手段であって、プリフェッチ命令の少なくとも１つの被演算子が、要素の多次元ブロックのある要素のシステムメモリアドレス、要素の多次元ブロックのストライド、および要素の多次元ブロックの境界を示すものである、復号するための手段と、プリフェッチ命令を実行して、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成し、かつ要素の多次元ブロックをシステムメモリアドレスからキャッシュにロードするための手段と、を含む。
【００７６】
更に別の実施形態では、マシン可読記憶媒体が、実行されるときに、マシンに、本明細書に開示される方法を行わせる、コードを含む。
【００７７】
命令セットは、１つまたは複数の命令形式を含んでもよい。所与の命令形式は、とりわけ、行われるべき演算（例えば、オペコード）およびその演算が行われるべき被演算子（複数可）を指定するための様々なフィールド（例えば、ビットの数、ビットの位置）ならびに／または他のデータフィールド（複数可）（例えば、マスク）を決定し得る。いくつかの命令形式が、命令テンプレート（またはサブ形式）の決定にもかかわらず、更に分解される。例えば、所与の命令形式の命令テンプレートは、命令形式のフィールドの異なるサブセットを有するように決定され得る（含まれるフィールドは、典型的には、同じ位にあるが、含まれるフィールドが少ないので、少なくともいくらかは、異なるビット位置を有する）、および／または異なって解釈される所与のフィールドを有するように決定されてもよい。それゆえ、ＩＳＡの各命令は、所与の命令形式を使用して（および、決定される場合、その命令形式の命令テンプレートの所与の１つにおいて）表現され、演算および被演算子を指定するためのフィールドを含む。例えば、例示的なＡＤＤ命令は、ある特定のオペコードおよびオペコードフィールドを含む命令形式を有し、そのオペコードおよび被演算子フィールドを指定して、被演算子（ソース１／宛先およびソース２）を選択する。命令ストリーム内のこのＡＤＤ命令の発生は、特定の被演算子を選択する被演算子フィールド内に特定の内容を有する。Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ（ＡＶＸ）（ＡＶＸ１およびＡＶＸ２）として呼ばれ、かつＶｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ（ＶＥＸ）コード化スキームを使用する１組のＳＩＭＤ拡張が、リリースおよび／または公開されている（例えば、Ｉｎｔｅｌ（登録商標）６４  ａｎｄ  ＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ'ｓ  Ｍａｎｕａｌ、２０１４年９月を参照、およびＩｎｔｅｌ（登録商標）Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅ、２０１４年１０月を参照）。
【００７８】
例示的な命令形式  本明細書に記載される命令（複数可）の実施形態は、異なる形式で具体化され得る。更に、例示的なシステム、アーキテクチャ、およびパイプラインが、以下に詳述される。命令（複数可）の実施形態は、かかるシステム、アーキテクチャ、およびパイプライン上で実行され得るが、詳述されるものに限定されない。
【００７９】
一般的なベクトルフレンドリ命令形式  ベクトルフレンドリ命令形式は、ベクトル命令に適した命令形式である（例えば、ベクトル演算に特有の特定のフィールドが存在する）。ベクトルおよびスカラー演算の両方がベクトルフレンドリ命令形式によってサポートされる実施形態が記載されるが、代替の実施形態は、ベクトルフレンドリ命令形式のベクトル演算のみを使用する。
【００８０】
図６Ａ〜６Ｂは、本開示の実施形態に従う一般的なベクトルフレンドリ命令形式およびそれの命令テンプレートを例示するブロック図である。図６Ａは、本開示の実施形態に従う一般的なベクトルフレンドリ命令形式およびそれのクラスＡ命令テンプレートを例示するブロック図である。一方、図６Ｂは、本開示の実施形態に従う一般的なベクトルフレンドリ命令形式およびそれのクラスＢ命令テンプレートを例示するブロック図である。具体的には、それについての一般的なベクトルフレンドリ命令形式６００が、決定されたクラスＡおよびクラスＢ命令テンプレートであり、それらの両方とも、メモリアクセス６０５命令テンプレートおよびメモリアクセス６２０命令テンプレートを含まない。ベクトルフレンドリ命令形式との関連で一般的という用語は、任意の特定の命令セットに拘束されない命令形式のことを言う。
【００８１】
ベクトルフレンドリ命令形式が、以下、すなわち、３２ビット（４バイト）もしくは６４ビット（８バイト）データ要素幅（またはサイズ）を有する６４バイトベクトル被演算子長（またはサイズ）（それゆえ、６４バイトベクトルは、１６ダブルワードサイズ要素または代わりに、８クワドワードサイズ要素のいずれかから成る）、１６ビット（２バイト）もしくは８ビット（１バイト）データ要素幅（またはサイズ）を有する６４バイトベクトル被演算子長（またはサイズ）、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、もしくは８ビット（１バイト）データ要素幅（またはサイズ）を有する３２バイトベクトル被演算子長（またはサイズ）、および３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、もしくは８ビット（１バイト）データ要素幅（またはサイズ）を有する１６バイトベクトル被演算子長（またはサイズ）をサポートする、本開示の実施形態が記載されるが、代替の実施形態は、より多くの、より少ない、または異なるデータ要素幅（例えば、１２８ビット（１６バイト）データ要素幅）を有する、より多くの、より少ない、および／または異なるベクトル被演算子サイズ（例えば、２５６バイトベクトル被演算子）をサポートしてもよい。
【００８２】
図６ＡにおけるクラスＡ命令テンプレートは、１）非メモリアクセス６０５命令テンプレート内に、非メモリアクセス、全丸め制御型演算６１０命令テンプレートおよび非メモリアクセス、データ変形型演算６１５命令テンプレートが示され、ならびに２）メモリアクセス６２０命令テンプレート内に、メモリアクセス、テンポラル６２５命令テンプレートおよびメモリアクセス、ノンテンポラル６３０命令テンプレートが示されるものを含む。図６ＢにおけるクラスＢ命令テンプレートは、１）非メモリアクセス６０５命令テンプレート内に、非メモリアクセス、書込みマスク制御、部分丸め制御型演算６１２命令テンプレートおよび非メモリアクセス、書込みマスク制御、Ｖサイズ型演算６１７命令テンプレートが示され、ならびに２）メモリアクセス６２０命令テンプレート内に、メモリアクセス、書込みマスク制御６２７命令テンプレートが示されるものを含む。
【００８３】
一般的なベクトルフレンドリ命令形式６００は、図６Ａ〜６Ｂに例示される順序において下記に列挙される以下のフィールドを含む。
【００８４】
形式フィールド６４０−このフィールドにおけるある特定の値（命令形式識別子値）は、ベクトルフレンドリ命令形式、および、それゆえ、命令ストリーム内のベクトルフレンドリ命令形式における命令の発生を固有に識別する。そのように、このフィールドは、それがベクトルフレンドリ命令形式のみを有する命令セットに必要とされないという意味において任意選択的である。
【００８５】
ベース演算フィールド６４２−その内容は、異なるベース演算を区別する。
【００８６】
レジスタ指標フィールド６４４−その内容は、直接的にまたはアドレス生成を通して、ソースおよび宛先被演算子の位置を、それらがレジスタ内またはメモリ内にあろうが、指定する。これらは、Ｐ×Ｑ（例えば、３２×５１２、１６×１２８、３２×１０２４、６４×１０２４）レジスタファイルからＮ個のレジスタを選択するのに十分な数のビットを含む。一実施形態では、Ｎが、最大３個までのソースおよび１つの宛先レジスタであり得るが、代替の実施形態は、より多くのまたはより少ないソースおよび宛先レジスタをサポートしてもよい（例えば、最大２個までのソースをサポートしてもよく、その場合、これらのソースの１つが宛先としても機能し、最大３個までのソースをサポートしてもよく、その場合、これらのソースのうちの１つが宛先としても機能し、最大２個までのソースおよび１つの宛先をサポートしてもよい）。
【００８７】
修飾子フィールド６４６−その内容は、メモリアクセスを指定する一般的なベクトル命令形式における命令の発生をそうではないものから、すなわち、非メモリアクセス６０５命令テンプレートとメモリアクセス６２０命令テンプレートとの間で区別する。メモリアクセス演算は、（いくつかの場合では、レジスタ内の値を使用してソースおよび／または宛先アドレスを指定して）メモリ階層を読取るおよび／またはそれに書込むが、非メモリアクセス演算は、しない（例えば、ソースおよび宛先が、レジスタである）。一実施形態では、このフィールドはまた、メモリアドレス計算を行うために３つの異なる手法間で選択するが、代替の実施形態は、メモリアドレス計算を行うためにより多くの、より少ない、または異なる手法をサポートしてもよい。
【００８８】
増補演算フィールド６５０−その内容は、様々な異なる演算のうちのどれがベース演算に加えて行われるかを区別する。このフィールドは、コンテキスト固有のものである。本開示の一実施形態では、このフィールドが、クラスフィールド６６８、アルファフィールド６５２、およびベータフィールド６５４に分割される。増補演算フィールド６５０は、演算の共通グループが、２、３、または４つの命令ではなくて、単一命令において行われることを可能にする。
【００８９】
スケールフィールド６６０−その内容は、メモリアドレス生成のための（例えば、２スケール＊指標＋ベースを使用するアドレス生成のための）指標フィールドの内容のスケーリングを可能にする。
【００９０】
変位フィールド６６２Ａ−その内容は、メモリアドレス生成の一部として（例えば、２スケール＊指標＋ベース＋変位を使用するアドレス生成のために）使用される。
【００９１】
変位因子フィールド６６２Ｂ（変位因子フィールド６６２Ｂの真上への変位フィールド６６２Ａの並置は、一方または他方が使用されることを示すことに留意する）−その内容は、アドレス生成の一部として使用される。それは、メモリアクセス（Ｎ）のサイズによってスケールされるべき変位因子を指定する。その場合、Ｎは、（例えば、２スケール＊指標＋ベース＋スケールされた変位を使用するアドレス生成のための）メモリアクセスにおけるバイトの数である。冗長な下位ビットは無視され、それゆえ、変位因子フィールドの内容が、有効アドレスの計算に使用されるべき最終変位を生成するために、メモリ被演算子総サイズ（Ｎ）で乗算される。Ｎの値は、（本明細書に後に記載される）フルオペコードフィールド６７４およびデータ操作フィールド６５４Ｃに基づいて実行時間にプロセッサハードウェアによって決定される。変位フィールド６６２Ａおよび変位因子フィールド６６２Ｂは、それらが非メモリアクセス６０５命令テンプレートのために使用されないという意味において任意選択的であり、および／または異なる実施形態が、それらの２つのうちの一方のみを実装してもよいしまたはそれらのいずれも実装しなくてもよい。
【００９２】
データ要素幅フィールド６６４−その内容は、（いくつかの実施形態では、全ての命令について、他の実施形態では、命令のうちのいくつかのみについて）いくらかのデータ要素幅のうちのどれが使用されるべきかを区別する。このフィールドは、ただ１つのデータ要素幅がサポートされるおよび／またはデータ要素幅がオペコードのいくらかの態様を使用してサポートされる場合に、それが必要とされないという意味において任意選択的である。
【００９３】
書込みマスクフィールド６７０−その内容は、データ要素位置毎に基づいて、宛先ベクトル被演算子内のそのデータ要素位置が、ベース演算および増補演算の結果を反映するかどうかを制御する。クラスＡ命令テンプレートは、マージング書込みマスキング（ｍｅｒｇｉｎｇ−ｗｒｉｔｅｍａｓｋｉｎｇ）をサポートする一方で、クラスＢ命令テンプレートは、マージングおよびゼロイング（ｚｅｒｏｉｎｇ）書込みマスキングの両方をサポートする。マージングの場合、ベクトルマスクは、宛先内の任意の組の要素が、（ベース演算および増補演算によって指定される）任意の演算の実行の間の更新から保護されることを可能にする。他の一実施形態では、対応するマスクビットが０を有する場合に、宛先の各要素の古い値を保持する。対照的に、ゼロイングの場合、ベクトルマスクは、宛先内の任意の組の要素が、（ベース演算および増補演算によって指定される）任意の演算の実行の間に零化されることを可能にする。一実施形態では、対応するマスクビットが０値を有する場合に、宛先の要素が０に設定される。この機能の一部は、行われている演算のベクトル長を制御できることである（すなわち、要素のスパンが、第１のものから最後のものまで修正される）。しかしながら、修正されるそれらの要素が連続的である必要はない。それゆえ、書込みマスクフィールド６７０は、ロード、ストア、算術、ロジック等を含む、部分的なベクトル演算を可能にする。書込みマスクフィールド６７０の内容が、使用されるべき書込みマスクを含有するいくらかの書込みマスクレジスタのうちの１つを選択する（それゆえ、書込みマスクフィールド６７０の内容は、行われるべきそのマスキングを間接的に識別する）本開示の実施形態が記載されるが、代替の実施形態は、その代わりにまたは更に、マスク書込みフィールド６７０の内容が、行われるべきマスキングを直接的に指定することを可能にする。
【００９４】
即時フィールド６７２−その内容は、即値の仕様を可能にする。このフィールドは、それが即値をサポートしない一般的なベクトルフレンドリ形式の実現形態において存在せず、かつ即値を使用しない命令において存在しないという意味において任意選択的である。
【００９５】
クラスフィールド６６８−その内容は、命令の異なるクラスを区別する。図６Ａ〜６Ｂに関して、このフィールドの内容は、クラスＡおよびクラスＢ命令から選択する。図６Ａ〜６Ｂにおいて、丸隅正方形が、ある特定の値がフィールド内に存在すること（例えば、図６Ａ〜６Ｂにおける、それぞれ、クラスフィールド６６８のためのクラスＡ６６８ＡおよびクラスＢ６６８Ｂ）を示すために使用される。
【００９６】
クラスＡの命令テンプレート  クラスＡの非メモリアクセス６０５命令テンプレートの場合には、アルファフィールド６５２が、ＲＳフィールド６５２Ａとして解釈され、それの内容が、異なる増補演算型のどれが行われるべきかを区別する（例えば、丸め６５２Ａ．１およびデータ変形６５２Ａ．２が、それぞれ、非メモリアクセス、丸め型演算６１０および非メモリアクセス、データ変形型演算６１５命令テンプレートについて指定される）。一方で、ベータフィールド６５４は、指定された型の演算のどれが行われるべきかを区別する。非メモリアクセス６０５命令テンプレートには、スケールフィールド６６０、変位フィールド６６２Ａ、および変位スケールフィールド６６２Ｂが、存在しない。
【００９７】
非メモリアクセス命令テンプレート−全丸め制御型演算  非メモリアクセス全丸め制御型演算６１０命令テンプレートでは、ベータフィールド６５４が、丸め制御フィールド６５４Ａとして解釈され、それの内容（複数可）が静的丸めを提供する。本開示の記載される実施形態では、丸め制御フィールド６５４Ａが、全浮動小数点例外抑制（ＳＡＥ：ｓｕｐｐｒｅｓｓ  ａｌｌ  ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ  ｅｘｃｅｐｔｉｏｎｓ）フィールド６５６および丸め演算制御フィールド６５８を含むが、代替の実施形態は、これらの概念の両方をサポートし得、同じフィールドに符号化し得るか、あるいはこれらの概念／フィールドのうちの一方または他方のみを有し得る（例えば、丸め演算制御フィールド６５８のみを有し得る）。
【００９８】
ＳＡＥフィールド６５６−その内容は、ＳＡＥフィールド６５６の内容が、抑制がイネーブルにされ、所与の命令が、いかなる種類の浮動小数点例外フラグも報告せず、かつ、いかなる浮動小数点例外ハンドラも発生させないことを示すときに、例外事象報告をディスエーブルにするか否かを区別する。
【００９９】
丸め演算制御フィールド６５８−その内容が、一群の丸め演算のうちのどれ（例えば、切り上げ、切り捨て、ゼロへの丸め、および最近接への丸め）を行うかを区別する。それゆえ、丸め演算制御フィールド６５８は、命令毎に基づく丸めモードの変更を可能にする。プロセッサが、丸めモードを指定するための制御レジスタを含む、本開示の一実施形態では、丸め演算制御フィールド６５０の内容が、そのレジスタ値をオーバーライドする。
【０１００】
非メモリアクセス命令テンプレート−データ変形型演算  非メモリアクセスデータ変形型演算６１５命令テンプレートでは、ベータフィールド６５４が、データ変形フィールド６５４Ｂとして解釈され、それの内容が、いくらかのデータ変形のうちのどれが行われるべきか（例えば、非データ変形、スウィズル、ブロードキャスト）を区別する。
【０１０１】
クラスＡのメモリアクセス６２０命令テンプレートの場合では、アルファフィールド６５２が、エビクションヒントフィールド６５２Ｂとして解釈され、それの内容が、エビクションヒントのうちのどれが使用されるべきかを区別する（図６Ａでは、テンポラル６５２Ｂ．１およびノンテンポラル６５２Ｂ．２が、それぞれ、メモリアクセス、テンポラル６２５命令テンプレートおよびメモリアクセス、ノンテンポラル６３０命令テンプレートについて指定される）。一方で、ベータフィールド６５４は、データ操作フィールド６５４Ｃとして解釈され、それの内容が、（プリミティブとしても知られる）いくらかのデータ操作演算のうちのどれが行われるべきか（例えば、非操作、ブロードキャスト、ソースのアップコンバージョン、および宛先のダウンコンバージョン）を区別する。メモリアクセス６２０命令テンプレートは、スケールフィールド６６０、および任意選択的に変位フィールド６６２Ａまたは変位スケールフィールド６６２Ｂを含む。
【０１０２】
ベクトルメモリ命令は、コンバージョンサポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを行う。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素毎の様式でデータをメモリから／に転送し、実際に転送される要素が、書込みマスクとして選択されるベクトルマスクの内容によって規定される。
【０１０３】
メモリアクセス命令テンプレート−テンポラル  テンポラルデータは、キャッシングから利益を得るために十分に早く再使用される可能性が高いデータである。しかしながら、これは、ヒントであり、異なるプロセッサが、それを、ヒントを全体的に無視することを含む異なる手法で実現し得る。
【０１０４】
メモリアクセス命令テンプレート−ノンテンポラル  ノンテンポラルデータは、第１のレベルキャッシュにおけるキャッシングから利益を得るために十分に早く再使用される可能性が低いデータであり、エビクションのための優先順位を与えられるべきである。しかしながら、これは、ヒントであり、異なるプロセッサが、それを、ヒントを全体的に無視することを含む異なる手法で実現し得る。
【０１０５】
クラスＢの命令テンプレート  クラスＢの命令テンプレートの場合では、アルファフィールド６５２が、書込みマスク制御（Ｚ）フィールド６５２Ｃとして解釈され、それの内容が、書込みマスクフィールド６７０によって制御される書込みマスキングが、マージングまたはゼロイングであるべきかどうかを区別する。
【０１０６】
クラスＢの非メモリアクセス６０５命令テンプレートの場合では、ベータフィールド６５４の一部が、ＲＬフィールド６５７Ａとして解釈され、それの内容が、異なる増補演算型のうちのどれが行われるべきかを区別する（例えば、丸め６５７Ａ．１およびベクトル長（ＶＳＩＺＥ）６５７Ａ．２が、それぞれ、非メモリアクセス、書込みマスク制御、部分丸め制御型演算６１２命令テンプレート、および非メモリアクセス、書込みマスク制御、ＶＳＩＺＥ型演算６１７命令テンプレートについて指定される）。一方で、ベータフィールド６５４の残りは、指定された型の演算のうちのどれが行われるべきかを区別する。非メモリアクセス６０５命令テンプレートには、スケールフィールド６６０、変位フィールド６６２Ａ、および変位スケールフィールド６６２Ｂが、存在しない。
【０１０７】
非メモリアクセス、書込みマスク制御、部分丸め制御型演算６１０命令テンプレートでは、ベータフィールド６５４の残りが、丸め演算フィールド６５９Ａとして解釈され、例外事象報告がディスエーブルにされる（所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、かつ、いかなる浮動小数点例外ハンドラも発生させない）。
【０１０８】
丸め演算制御フィールド６５９Ａ−丸め演算制御フィールド６５８と同じように、その内容が、一群の丸め演算のうちのどれ（例えば、切り上げ、切り捨て、ゼロへの丸め、および最近接への丸め）を行うかを区別する。それゆえ、丸め演算制御フィールド６５９Ａは、命令毎に基づく丸めモードの変更を可能にする。プロセッサが、丸めモードを指定するための制御レジスタを含む、本開示の一実施形態では、丸め演算制御フィールド６５０の内容が、そのレジスタ値をオーバーライドする。
【０１０９】
非メモリアクセス、書込みマスク制御、ＶＳＩＺＥ型演算６１７命令テンプレートでは、ベータフィールド６５４の残りが、ベクトル長フィールド６５９Ｂとして解釈され、それの内容が、いくらかのデータベクトル長のうちのどれ（例えば、１２８、２５６、または５１２バイト）が行われるべきかを区別する。
【０１１０】
クラスＢのメモリアクセス６２０命令テンプレートの場合では、ベータフィールド６５４の一部が、ブロードキャストフィールド６５７Ｂとして解釈され、それの内容が、ブロードキャスト型データ操作演算が行われるべきか否かを区別する。一方で、ベータフィールド６５４の残りは、ベクトル長フィールド６５９Ｂとして解釈される。メモリアクセス６２０命令テンプレートは、スケールフィールド６６０、および任意選択的に変位フィールド６６２Ａまたは変位スケールフィールド６６２Ｂを含む。
【０１１１】
一般的なベクトルフレンドリ命令形式６００に関して、フルオペコードフィールド６７４が、形式フィールド６４０、ベース演算フィールド６４２、およびデータ要素幅フィールド６６４を含んで示される。フルオペコードフィールド６７４が、これらのフィールドの全てを含む一実施形態が示されるが、フルオペコードフィールド６７４は、それらの全てをサポートしない実施形態では、これらのフィールドの全てを含むとは言えない。フルオペコードフィールド６７４は、演算コード（オペコード）を提供する。
【０１１２】
増補演算フィールド６５０、データ要素幅フィールド６６４、および書込みマスクフィールド６７０は、これらの特徴が、一般的なベクトルフレンドリ命令形式において命令毎に基づいて指定されることを可能にする。
【０１１３】
書込みマスクフィールドおよびデータ要素幅フィールドの組み合わせは、それらが、マスクが異なるデータ要素幅に基づいて適用されることを可能にするという点で、型付けされた命令を作り出す。
【０１１４】
クラスＡおよびクラスＢ内で見つけられる様々な命令テンプレートは、異なる状況において有益である。本開示のいくつかの実施形態では、異なるプロセッサまたはあるプロセッサ内の異なるコアが、クラスＡのみ、クラスＢのみ、または両方のクラスをサポートし得る。例えば、汎用計算向けの高性能汎用アウト・オブ・オーダーコアは、クラスＢのみをサポートし得、主にグラフィックスおよび／または科学的（スループット）計算向けのコアは、クラスＡのみをサポートし得、それらの両方向けのコアは、両方のクラスをサポートし得る（勿論、両方のクラスからのテンプレートおよび命令のいくらかの混合を有するコアであって、ただし、両方のクラスからの全てのテンプレートおよび命令を有するとは限らないコアが、開示の範囲内にある）。また、単一プロセッサが、複数のコアであって、それらの全てが同じクラスをサポートするか、または異なるコアが異なるクラスをサポートする、複数のコアを含んでもよい。例えば、別個のグラフィックスおよび汎用コアを有するプロセッサにおいて、主にグラフィックスおよび／または科学的計算向けのグラフィックスコアのうちの１つが、クラスＡのみをサポートしてもよく、一方で、汎用コアのうちの１つまたは複数が、クラスＢのみをサポートする汎用計算向けのアウト・オブ・オーダー実行およびレジスタリネーミングを伴う高性能汎用コアであってもよい。別個のグラフィックスコアを有さない別のプロセッサは、クラスＡおよびクラスＢの両方をサポートするもう１つの汎用イン・オーダーまたはアウト・オブ・オーダーコアを含んでもよい。勿論、一方のクラスからの特徴がまた、本開示の異なる実施形態において他のクラスで実現されてもよい。高水準言語で書かれたプログラムは、１）実行のためにターゲットプロセッサによってサポートされるクラス（複数可）の命令のみを有する形式、または２）全てのクラスの命令の異なる組み合わせを使用して書かれた代わりのルーチンを有し、かつ現在実行しているプロセッサによってサポートされる命令に基づいてコードを実行するためにそのルーチンを選択する制御フローコードを有する形式を含む、種々の異なる実行可能な形式にされる（例えば、実行時（ｊｕｓｔ  ｉｎ  ｔｉｍｅ）にコンパイルされるか、あるいは静的にコンパイルされる）。
【０１１５】
例示的な特定のベクトルフレンドリ命令形式
図７Ａは、本開示の実施形態に従う例示的な特定のベクトルフレンドリ命令形式を例示するブロック図である。図７Ａは、フィールドの位置、サイズ、解釈、および順序のみならず、それらのフィールドのうちのいくらかについての値を指定するという意味において特有である、ある特定のベクトルフレンドリ命令形式７００を示す。特定のベクトルフレンドリ命令形式７００が、ｘ８６命令セットを拡張するために使用されてもよく、それゆえ、フィールドのうちのいくらかが、既存のｘ８６命令セットおよびそれの拡張（例えば、ＡＶＸ）において使用されるものと類似するまたは同じである。この形式は、拡張を伴う既存のｘ８６命令セットの接頭符号化フィールド、実（ｒｅａｌ）オペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、および即時フィールドと整合性のあるままである。図７Ａからのフィールドがマッピングされる図６Ａまたは図６Ｂからのフィールドが例示される。
【０１１６】
本開示の実施形態は、例示目的のために一般的なベクトルフレンドリ命令形式６００との関連で、特定のベクトルフレンドリ命令形式７００に関して記載されるが、本開示は、特許請求される場合を除いて、特定のベクトルフレンドリ命令形式７００に限定されないことを理解されたい。例えば、一般的なベクトルフレンドリ命令形式６００は、様々なフィールドのための種々の可能なサイズを考慮するが、特定のベクトルフレンドリ命令形式７００は、特定のサイズのフィールドを有するように示される。具体的な例として、データ要素幅フィールド６６４が、特定のベクトルフレンドリ命令形式７００における１ビットフィールドとして例示されるが、本開示は、そのように限定されない（すなわち、一般的なベクトルフレンドリ命令形式６００は、データ要素幅フィールド６６４の他のサイズを考慮する）。
【０１１７】
一般的なベクトルフレンドリ命令形式６００は、図７Ａに例示される順序で下記に列挙される以下のフィールドを含む。
【０１１８】
ＥＶＥＸ接頭（バイト０〜３）７０２が、４バイト形態で符号化される。
【０１１９】
形式フィールド６４０（ＥＶＥＸバイト０、ビット［７：０］）−第１のバイト（ＥＶＥＸバイト０）は、形式フィールド６４０であり、それは、０ｘ６２（本開示の一実施形態においてベクトルフレンドリ命令形式を区別するために使用される固有値）を含有する。
【０１２０】
第２〜第４のバイト（ＥＶＥＸバイト１〜３）は、特定の機能を提供するいくらかのビットフィールドを含む。
【０１２１】
ＲＥＸフィールド７０５（ＥＶＥＸバイト１、ビット［７−５］）は、ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）、および６５７ＢＥＸバイト１、ビット［５］−Ｂ）から成る。ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、およびＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同じ機能を提供し、１の補数形態を使用して符号化される。すなわち、ＺＭＭ０が、１１１１Ｂとして符号化され、ＺＭＭ１５が、００００Ｂとして符号化される。命令の他のフィールドは、Ｒｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂが、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、およびＥＶＥＸ．Ｂを追加することによって形成され得るように、当分野において既知であるようにレジスタ指標の下位３ビット（ｒｒｒ、ｘｘｘ、およびｂｂｂ）を符号化する。
【０１２２】
ＲＥＸ'フィールド６１０−これは、ＲＥＸ'フィールド６１０の第１の部分であり、拡張された３２レジスタセットの上位１６または下位１６のいずれかを符号化するために使用されるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ'）である。本開示の一実施形態では、このビットは、以下に示されるような他のものと共に、（周知のｘ８６  ３２ビットモードにおいて）ＢＯＵＮＤ命令と区別するためにビット反転形式で記憶され、それの実オペコードバイトは６２であるが、（以下に記載される）ＭＯＤ  Ｒ／ＭフィールドにおけるＭＯＤフィールドにおいて１１の値を受け入れない。本開示の代替の実施形態は、反転形式にあるこのおよび他の以下に示されるビットを記憶しない。１の値は、下位１６レジスタを符号化するために使用される。換言すれば、Ｒ'Ｒｒｒｒは、他のフィールドからのＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ、および他のＲＲＲを組み合わせることによって形成される。
【０１２３】
オペコードマップフィールド７１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）−その内容が、暗示的な先行オペコードバイト（０Ｆ、０Ｆ３８、または０Ｆ３）を符号化する。
【０１２４】
データ要素幅フィールド６６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）は、表記ＥＶＥＸ．Ｗによって表わされる。ＥＶＥＸ．Ｗは、データ型の粒度（サイズ）（３２ビットデータ要素または６４ビットデータ要素のいずれか）を決定するために使用される。
【０１２５】
ＥＶＥＸ．ｖｖｖｖ７２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）−ＥＶＥＸ．ｖｖｖｖの役割は、以下を含み得る。すなわち、１）ＥＶＥＸ．ｖｖｖｖは、反転（１の補数）形態で指定された第１のソースレジスタ被演算子を符号化し、かつ２または複数のソース被演算子を有する命令に有効である。２）ＥＶＥＸ．ｖｖｖｖは、特定のベクトルシフトについて１の補数形態で指定された宛先レジスタ被演算子を符号化する。または３）ＥＶＥＸ．ｖｖｖｖは、被演算子を符号化せず、フィールドは、予約され、１１１１Ｂを含有するべきである。それゆえ、ＥＶＥＸ．ｖｖｖｖフィールド７２０は、反転（１の補数）形態で記憶された第１のソースレジスタ指定子の下位４ビットを符号化する。命令に応じて、追加の異なるＥＶＥＸビットフィールドが、指定子サイズを３２レジスタに拡張するために使用される。
【０１２６】
ＥＶＥＸ．Ｕ６６８クラスフィールド（ＥＶＥＸバイト２、ビット［２］−Ｕ）−ＥＶＥＸ．Ｕ＝０である場合、それは、クラスＡまたはＥＶＥＸ．Ｕ０を示す。ＥＶＥＸ．Ｕ＝１である場合、それは、クラスＢまたはＥＶＥＸ．Ｕ１を示す。
【０１２７】
接頭符号化フィールド７２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）は、更なるビットをベース演算フィールドに提供する。ＥＶＥＸ接頭形式でレガシーＳＳＥ命令にサポートを提供することに加えて、これはまた、ＳＩＭＤ接頭の小型化という利益を得る（ＳＩＭＤ接頭を表現するためのバイトを要求するのではなくて、ＥＶＥＸ接頭は、２ビットのみを要求する）。一実施形態では、レガシー形式およびＥＶＥＸ接頭形式の両方でＳＩＭＤ接頭（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を使用するレガシーＳＳＥ命令をサポートするために、これらのレガシーＳＩＭＤ接頭が、ＳＩＭＤ接頭符号化フィールドに符号化され、実行時間において、復号器のＰＬＡに提供される前にレガシーＳＩＭＤ接頭に拡張される（それゆえ、ＰＬＡは、修正をせずに、これらのレガシー命令のレガシーおよびＥＶＥＸ形式の両方を実行することができる）。より新しい命令が、オペコード拡張として直接的にＥＶＥＸ接頭符号化フィールドの内容を使用し得るが、特定の実施形態は、整合性のために類似の様式で拡張するものの、異なる意味が、これらのレガシーＳＩＭＤ接頭によって指定されることを可能にする。代替の実施形態は、２ビットＳＩＭＤ接頭符号化をサポートするようにＰＬＡを再設計してもよく、それゆえ、拡張を要求しなくてもよい。
【０１２８】
アルファフィールド６５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ。ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．書込みマスク制御、およびＥＶＥＸ．Ｎとしても知られる。また、αを用いて例示される）−前に記載されたように、このフィールドは、コンテキストに特有である。
【０１２９】
ベータフィールド６５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、また、ＥＶＥＸ．ｓ２−０、ＥＶＥＸ．ｒ２−０、ＥＶＥＸ．ｒｒ１、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られる。また、βββを用いて例示される）−前に記載されたように、このフィールドは、コンテキストに特有である。
【０１３０】
ＲＥＸ'フィールド６１０−これは、ＲＥＸ'フィールドの余りであり、かつ拡張３２レジスタセットの上位１６または下位１６のいずれかを符号化するために使用され得るＥＶＥＸ．Ｖ'ビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ'）である。このビットは、ビット反転形式で記憶される。１の値は、下位１６レジスタを符号化するために使用される。換言すれば、Ｖ'ＶＶＶＶが、ＥＶＥＸ．Ｖ'、ＥＶＥＸ．ｖｖｖｖの組み合わせによって形成される。
【０１３１】
書込みマスクフィールド６７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）−その内容が、前に記載されたように書込みマスクレジスタにおけるレジスタの指標を指定する。本開示の一実施形態では、特定の値ＥＶＥＸ．ｋｋｋ＝０００が、特定の命令のために書込みマスクが使用されないことを暗示する特別な挙動を有する（これは、全てのものにハードワイヤードされた書込みマスクまたはマスキングハードウェアをバイパスするハードウェアの使用を含む種々の手法で実現され得る）。
【０１３２】
実オペコードフィールド７３０（バイト４）はまた、オペコードバイトとしても知られる。オペコードの一部が、このフィールドにおいて指定される。
【０１３３】
ＭＯＤ  Ｒ／Ｍフィールド７４０（バイト５）は、ＭＯＤフィールド７４２、Ｒｅｇフィールド７４４、およびＲ／Ｍフィールド７４６を含む。前に記載されたように、ＭＯＤフィールド７４２の内容は、メモリアクセスおよび非メモリアクセス演算を区別する。Ｒｅｇフィールド７４４の役割は、２つの状況、すなわち、宛先レジスタ被演算子もしくはソースレジスタ被演算子のいずれかの符号化に要約され得、またはオペコード拡張として取扱われ得、かつ命令被演算子を符号化するために使用され得ない。Ｒ／Ｍフィールド７４６の役割は、以下、すなわち、メモリアドレスを参照する命令被演算子の符号化、または宛先レジスタ被演算子もしくはソースレジスタ被演算子のいずれかの符号化を含み得る。
【０１３４】
スケール、指標、ベース（ＳＩＢ：Ｓｃａｌｅ，Ｉｎｄｅｘ，Ｂａｓｅ）バイト（バイト６）−前に記載されたように、スケールフィールド６５０の内容が、メモリアドレス生成のために使用される。ＳＩＢ．ｘｘｘ７５４およびＳＩＢ．ｂｂｂ７５６−これらのフィールドの内容は、レジスタ指標ＸｘｘｘおよびＢｂｂｂに関して前に参照されている。
【０１３５】
変位フィールド６６２Ａ（バイト７〜１０）−ＭＯＤフィールド７４２が１０を含有するとき、バイト７〜１０は、変位フィールド６６２Ａであり、それは、レガシー３２ビット変位（ｄｉｓｐ３２）と同じように機能し、かつバイト粒度において機能する。
【０１３６】
変位因子フィールド６６２Ｂ（バイト７）−ＭＯＤフィールド７４２が０１を含有するとき、バイト７は、変位因子フィールド６６２Ｂである。このフィールドの位置は、バイト粒度において機能する、レガシーｘ８６命令セット８ビット変位（ｄｉｓｐ８）のものと同じである。ｄｉｓｐ８は、符号拡張されるので、それは、−１２８〜１２７バイトオフセットのみを扱うことができる。６４バイトキャッシュラインに関して、ｄｉｓｐ８は、４つの実際に有用な値−１２８、−６４、０、および６４のみに設定され得る８ビットを使用する。より大きな範囲が必要とされることが多いので、ｄｉｓｐ３２が使用される。しかしながら、ｄｉｓｐ３２は、４バイトを要求する。ｄｉｓｐ８およびｄｉｓｐ３２とは対照的に、変位因子フィールド６６２Ｂは、ｄｉｓｐ８の再解釈である。変位因子フィールド６６２Ｂを使用するとき、実際の変位は、メモリ被演算子アクセス（Ｎ）のサイズで乗算された変位因子フィールドの内容によって判断される。この種の変位は、ｄｉｓｐ８＊Ｎとして呼ばれる。これは、平均命令長を減らす（変位のために使用され、ただし、かなり大きな範囲を有する単一バイト）。かかる圧縮された変位は、有効変位が、メモリアクセスの粒度の倍数であるという想定に基づく。それゆえ、アドレスオフセットの冗長な下位ビットは、符号化される必要がない。換言すれば、変位因子フィールド６６２Ｂは、レガシーｘ８６命令セット８ビット変位の代わりになる。それゆえ、変位因子フィールド６６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８＊Ｎにオーバーロードされるという例外だけを用いて、ｘ８６命令セット８ビット変位と同じ手法で符号化される（それゆえ、Ｍｏｄ  ＲＭ／ＳＩＢ符号化規則に変更はない）。換言すれば、符号化規則または符号化長に変更はないが、ハードウェアによる変位値の解釈においてのみ変更がある（それは、バイト単位のアドレスオフセットを得るためにメモリ被演算子のサイズによって変位をスケールする必要がある）。即時フィールド６７２は、前に記載されたように演算する。
【０１３７】
フルオペコードフィールド  図７Ｂは、本開示の一実施形態に従うフルオペコードフィールド６７４を構成する特定のベクトルフレンドリ命令形式７００のフィールドを例示するブロック図である。具体的には、フルオペコードフィールド６７４が、形式フィールド６４０、ベース演算フィールド６４２、およびデータ要素幅（Ｗ）フィールド６６４を含む。ベース演算フィールド６４２は、接頭符号化フィールド７２５、オペコードマップフィールド７１５、および実オペコードフィールド７３０を含む。
【０１３８】
レジスタ指標フィールド  図７Ｃは、本開示の一実施形態に従うレジスタ指標フィールド６４４を構成する特定のベクトルフレンドリ命令形式７００のフィールドを例示するブロック図である。具体的には、レジスタ指標フィールド６４４が、ＲＥＸフィールド７０５、ＲＥＸ'フィールド７１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド７４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド７４６、ＶＶＶＶフィールド７２０、ｘｘｘフィールド７５４、およびｂｂｂフィールド７５６を含む。
【０１３９】
増補演算フィールド  図７Ｄは、本開示の一実施形態に従う増補演算フィールド６５０を構成する特定のベクトルフレンドリ命令形式７００のフィールドを例示するブロック図である。クラス（Ｕ）フィールド６６８が０を含有するとき、それは、ＥＶＥＸ．Ｕ０（クラスＡ６６８Ａ）を意味し、それが１を含有するとき、それは、ＥＶＥＸ．Ｕ１（クラスＢ６６８Ｂ）を意味する。Ｕ＝０かつＭＯＤフィールド７４２が（非メモリアクセス演算を意味する）１１を含有するとき、アルファフィールド６５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）が、ｒｓフィールド６５２Ａとして解釈される。ｒｓフィールド６５２Ａが１（丸め６５２Ａ．１）を含有するとき、ベータフィールド６５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）が、丸め制御フィールド６５４Ａとして解釈される。丸め制御フィールド６５４Ａは、１ビットＳＡＥフィールド６５６および２ビット丸め演算フィールド６５８を含む。ｒｓフィールド６５２Ａが０（データ変形６５２Ａ．２）を含有するとき、ベータフィールド６５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）が、３ビットデータ変形フィールド６５４Ｂとして解釈される。Ｕ＝０かつＭＯＤフィールド７４２が（メモリアクセス演算を意味する）００、０１、または１０を含有するとき、アルファフィールド６５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）が、エビクションヒント（ＥＨ：ｅｖｉｃｔｉｏｎ  ｈｉｎｔ）フィールド６５２Ｂとして解釈され、ベータフィールド６５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）が、３ビットデータ操作フィールド６５４Ｃとして解釈される。
【０１４０】
Ｕ＝１のとき、アルファフィールド６５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）が、書込みマスク制御（Ｚ）フィールド６５２Ｃとして解釈される。Ｕ＝１かつＭＯＤフィールド７４２が（非メモリアクセス演算を意味する）１１を含有するとき、ベータフィールド６５４の一部（ＥＶＥＸバイト３、ビット［４］−Ｓ０）が、ＲＬフィールド６５７Ａとして解釈される。それが、１（丸め６５７Ａ．１）を含有するとき、ベータフィールド６５４の残り（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）が、丸め演算フィールド６５９Ａとして解釈される。一方で、ＲＬフィールド６５７Ａが、０（ＶＳＩＺＥ６５７．Ａ２）を含有するとき、ベータフィールド６５４の残り（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）が、ベクトル長フィールド６５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）として解釈される。Ｕ＝１かつＭＯＤフィールド７４２が、（メモリアクセス演算を意味する）００、０１、または１０を含有するとき、ベータフィールド６５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）が、ベクトル長フィールド６５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）およびブロードキャストフィールド６５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）として解釈される。
【０１４１】
例示的なレジスタアーキテクチャ  図８は、本開示の一実施形態に従うレジスタアーキテクチャ８００のブロック図である。例示される実施形態では、５１２ビット長である３２ベクトルレジスタ８１０が存在する。これらのレジスタは、ｚｍｍ０〜ｚｍｍ３１として参照される。下位１６ｚｍｍレジスタの下位２５６ビットは、レジスタｙｍｍ０〜１６上にオーバーレイされる。下位１６ｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０〜１５上にオーバーレイされる。特定のベクトルフレンドリ命令形式７００は、以下の表に例示されるようなこれらのオーバーレイされたレジスタファイルについて演算する。
【表２】
0006761415.tif 000004
【０１４２】
換言すれば、ベクトル長フィールド６５９Ｂは、最大の長さおよび１つまたは複数の他のより短い長さ間を選択し、その場合、それぞれのかかるより短い長さが先行する長さの半分の長さであり、ベクトル長フィールド６５９Ｂを有さない命令テンプレートが、最大のベクトル長について演算する。更に、一実施形態では、特定のベクトルフレンドリ命令形式７００のクラスＢ命令テンプレートが、パック型またはスカラー単／倍精度浮動小数点データおよびパック型またはスカラー整数データについて演算する。スカラー演算は、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタにおける最下位データ要素位置上で行われる演算である。上位データ要素位置は、実施形態に応じて、それらが命令の前にあったものと同じに残されるか、または零化されるかのいずれかである。
【０１４３】
書込みマスクレジスタ８１５−例示される実施形態では、それぞれ６４ビットのサイズにある、８個の書込みマスクレジスタ（ｋ０〜ｋ７）が存在する。代替の実施形態では、書込みマスクレジスタ８１５が、１６ビットのサイズにある。前に記載されたように、本開示の一実施形態では、ベクトルマスクレジスタｋ０が、書込みマスクとして使用されることができない。通常、ｋ０を示すことになる符号化が、書込みマスクのために使用されるとき、それは、０ｘＦＦＦＦのハードワイヤードされた書込みマスクを選択して、その命令についての書込みマスキングを効果的にディスエーブルにする。
【０１４４】
汎用レジスタ８２５−例示される実施形態では、メモリ被演算子をアドレス指定するために既存のｘ８６アドレッシングモードと共に使用される１６個の６４ビット汎用レジスタが存在する。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、およびＲ８〜Ｒ１５という名前によって参照される。
【０１４５】
ＭＭＸパック型整数フラットレジスタファイル８５０がエイリアスされる、スカラー浮動小数点スタックレジスタファイル（ｘ８７スタック）８４５−例示される実施形態では、ｘ８７スタックが、ｘ８７命令セット拡張を使用して３２／６４／８０ビット浮動小数点データについてスカラー浮動小数点演算を行うために使用される８個の要素スタックである。一方で、ＭＭＸレジスタは、６４ビットのパック型整数データについて演算を行うために、ならびＭＭＸおよびＸＭＭレジスタ間で行われるいくつかの演算用に被演算子を保持するために使用される。
【０１４６】
本開示の代替の実施形態は、より広いまたはより狭いレジスタを使用してもよい。更に、本開示の代替の実施形態は、より多くの、より少ない、または異なるレジスタファイルおよびレジスタを使用してもよい。
【０１４７】
例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ  プロセッサコアは、異なる手法で、異なる目的のために、および異なるプロセッサにおいて実現され得る。例えば、かかるコアの実現形態は、１）汎用計算向けの汎用イン・オーダーコア、２）汎用計算向けの高性能汎用アウト・オブ・オーダーコア、３）主にグラフィックスおよび／または科学的（スループット）計算向けの特殊目的コアを含み得る。異なるプロセッサの実現形態は、１）汎用計算向けの１つもしくは複数の汎用イン・オーダーコアおよび／または汎用計算向けの１つもしくは複数の汎用アウト・オブ・オーダーコアを含むＣＰＵ、ならびに２）主にグラフィックスおよび／もしくは科学的（スループット）向けの１つまたは複数の特殊目的コアを含むコプロセッサを含み得る。かかる異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、それは、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内の別個のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（その場合では、かかるコプロセッサは、特殊目的ロジック、例えば、統合グラフィックおよび／もしくは科学的（スループット）ロジック、または特殊目的コアなどとして呼ばれることがある）、ならびに４）（アプリケーションコア（複数可）またはアプリケーションプロセッサ（複数可）と呼ばれることがある）記載されたＣＰＵ、上記したコプロセッサ、および更なる機能を同じダイ上に含み得るシステム・オン・チップを含み得る。例示的なコアアーキテクチャが、次に記載され、例示的なプロセッサおよびコンピュータアーキテクチャの記載が後に続く。
【０１４８】
例示的なコアアーキテクチャ  イン・オーダーおよびアウト・オブ・オーダーコアブロック図  図９Ａは、本開示の実施形態に従う例示的なイン・オーダーパイプラインおよび例示的なレジスタリネーミング、アウト・オブ・オーダー発行／実行パイプラインの両方を例示するブロック図である。図９Ｂは、本開示の実施形態に従うプロセッサに含まれるべきイン・オーダーアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウト・オブ・オーダー発行／実行アーキテクチャコアの両方を例示するブロック図である。図９Ａ〜９Ｂにおける実線枠は、イン・オーダーパイプラインおよびイン・オーダーコアを例示し、一方で、破線枠の任意選択的な付加部分は、レジスタリネーミング、アウト・オブ・オーダー発行／実行パイプラインおよびコアを例示する。イン・オーダー態様が、アウト・オブ・オーダー態様の一部であることを考慮して、アウト・オブ・オーダー態様が記載される。
【０１４９】
図９Ａにおいて、プロセッサパイプライン９００は、フェッチ段階９０２、長さ復号段階９０４、復号段階９０６、割り当て段階９０８、リネーミング段階９１０、（ディスパッチまたは発行としても知られる）スケジューリング段階９１２、レジスタ読取り／メモリ読取り段階９１４、実行段階９１６、ライトバック／メモリ書込み段階９１８、例外処理段階９２２、およびコミット段階９２４を含む。
【０１５０】
図９Ｂは、実行エンジンユニット９５０に結合されるフロントエンドユニット９３０を含むプロセッサコア９９０を示し、それらの両方が、メモリユニット９７０に結合される。コア９９０は、縮小命令セット計算（ＲＩＳＣ：ｒｅｄｕｃｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｉｎｇ）コア、複合命令セット計算（ＣＩＳＣ：ｃｏｍｐｌｅｘ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｉｎｇ）コア、超長命令語（ＶＬＩＷ：ｖｅｒｙ  ｌｏｎｇ  ｉｎｓｔｒｕｃｔｉｏｎ  ｗｏｒｄ）コア、またはハイブリッドもしくは代替のコア型であり得る。更に別の選択肢として、コア９９０は、特殊目的コア、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用計算グラフィックス処理ユニット（ＧＰＧＰＵ：ｇｅｎｅｒａｌ  ｐｕｒｐｏｓｅ  ｃｏｍｐｕｔｉｎｇ  ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）コア、グラフィックスコア、または同様のものなどであってもよい。
【０１５１】
フロントエンドユニット９３０は、命令キャッシュユニット９３４に結合された分岐予測ユニット９３２を含み、命令キャッシュユニット９３４は、命令変換索引バッファ（ＴＬＢ）９３６に結合され、ＴＬＢ９３６は、命令フェッチユニット９３８に結合され、命令フェッチユニット９３８は、復号ユニット９４０に結合される。復号ユニット９４０（または復号器もしくは復号器ユニット）は、命令（例えば、マクロ命令）を復号し得、かつ出力として１つまたは複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を生成し得、それらは、元の命令から復号されるか、またはさもなければ元の命令を反映するか、あるいは元の命令に由来する。復号ユニット９４０は、様々な異なる機構を使用して実現され得る。適切な機構の実施例は、限定されるものではないが、ルックアップテーブル、ハードウェア実現形態、プログラム可能なロジックアレイ（ＰＬＡ：ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ａｒｒａｙ）、マイクロコード読取り専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）等を含む。一実施形態では、コア９９０が、特定のマクロ命令のためのマイクロコードを（例えば、復号ユニット９４０において、またはさもなければフロントエンドユニット９３０内に）記憶するマイクロコードＲＯＭまたは他の媒体を含む。復号ユニット９４０は、実行エンジンユニット９５０内のリネーム／アロケータユニット９５２に結合される。
【０１５２】
実行エンジンユニット９５０は、リタイヤメントユニット９５４および１組の１つまたは複数のスケジューラユニット（複数可）９５６に結合されるリネーム／アロケータユニット９５２を含む。スケジューラユニット（複数可）９５６は、予約ステーション、集中型命令ウィンドウ等を含む、任意の数の異なるスケジューラを表わす。スケジューラユニット（複数可）９５６は、物理的なレジスタファイル（複数可）ユニット（複数可）９５８に結合される。物理的なレジスタファイル（複数可）ユニット９５８のそれぞれは、１つまたは複数の物理的なレジスタファイルを表わし、それらのうちの異なるものが、１つまたは複数の異なるデータ型、例えば、スカラー整数、スカラー浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行されるべき次の命令のアドレスである命令ポインタ）等などを記憶する。一実施形態では、物理的なレジスタファイル（複数可）ユニット９５８が、ベクトルレジスタユニット、書込みマスクレジスタユニット、およびスカラーレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供してもよい。物理的なレジスタファイル（複数可）ユニット（複数可）９５８は、レジスタリネーミングおよびアウト・オブ・オーダー実行が、（例えば、リオーダバッファ（複数可）およびリタイヤメントレジスタファイル（複数可）を使用して、フューチャファイル（複数可）、履歴バッファ（複数可）、およびリタイヤメントレジスタファイル（複数可）を使用して、レジスタマップおよびレジスタのプール等を使用して）実現され得る様々な手法を例示するためにリタイヤメントユニット９５４と重複される。リタイヤメントユニット９５４および物理的なレジスタファイル（複数可）ユニット（複数可）９５８は、実行クラスタ（複数可）９６０に結合される。実行クラスタ（複数可）９６０は、１組の１つまたは複数の実行ユニット９６２および１組の１つまたは複数のメモリアクセスユニット９６４を含む。実行ユニット９６２は、様々な種類のデータ（例えば、スカラー浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点）についての様々な演算（例えば、シフト、加算、減算、乗算）を行い得る。いくつかの実施形態は、特定の機能または機能の組に専用のいくらかの実行ユニットを含み得るが、他の実施形態が、全ての機能を全て行う１つの実行ユニットのみまたは複数の実行ユニットを含んでもよい。スケジューラユニット（複数可）９５６、物理的なレジスタファイル（複数可）ユニット（複数可）９５８、および実行クラスタ（複数可）９６０は、複数であり得るように示される。なぜなら、特定の実施形態は、特定の種類のデータ／演算について別個のパイプライン（例えば、それら自体のスケジューラユニット、物理的なレジスタファイル（複数可）ユニット、および／または実行クラスタをそれぞれ有する、スカラー整数パイプライン、スカラー浮動小数点／パック型整数／パック型浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリアクセスパイプライン。別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみが、メモリアクセスユニット（複数可）９６４を有する特定の実施形態が実現される）を作り出すからである。また、別個のパイプラインが使用される場合、これらのパイプラインのうちの１つまたは複数が、アウト・オブ・オーダー発行／実行であり得、かつその残りが、イン・オーダーであり得ることを理解されたい。
【０１５３】
メモリアクセスユニット９６４の組は、メモリユニット９７０に結合され、それは、レベル２（Ｌ２）キャッシュユニット９７６に結合されるデータキャッシュユニット９７４に結合されるデータＴＬＢユニット９７２を含む。ある例示的な実施形態では、メモリアクセスユニット９６４が、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含み得、それらのそれぞれが、メモリユニット９７０内のデータＴＬＢユニット９７２に結合される。命令キャッシュユニット９３４は、メモリユニット９７０内のレベル２（Ｌ２）キャッシュユニット９７６に更に結合される。Ｌ２キャッシュユニット９７６は、キャッシュの１つまたは複数の他のレベルに、かつ、結局はメインメモリに結合される。
【０１５４】
例として、例示的なレジスタリネーミング、アウト・オブ・オーダー発行／実行コアアーキテクチャは、パイプライン９００を以下のように実現し得る。１）命令フェッチ９３８が、フェッチ段階９０２および長さ復号段階９０４を行い、２）復号ユニット９４０が、復号段階９０６を行い、３）リネーム／アロケータユニット９５２が、割り当て段階９０８およびリネーミング段階９１０を行い、４）スケジューラユニット（複数可）９５６が、スケジュール段階９１２を行い、５）物理的なレジスタファイル（複数可）ユニット（複数可）９５８およびメモリユニット９７０が、レジスタ読取り／メモリ読取り段階９１４を行い、実行クラスタ９６０が、実行段階９１６を行い、６）メモリユニット９７０および物理的なレジスタファイル（複数可）ユニット（複数可）９５８が、ライトバック／メモリ書込み段階９１８を行い、７）様々なユニットが、例外処理段階９２２に関与され得、ならびに８）リタイヤメントユニット９５４および物理的なレジスタファイル（複数可）ユニット（複数可）９５８が、コミット段階９２４を行う。
【０１５５】
コア９９０は、本明細書に記載される命令（複数可）を含む、１つまたは複数の命令セット（例えば、（より新しいバージョンを追加されたいくらかの拡張を伴う）ｘ８６命令セット、Ｓｕｎｎｙｖａｌｅ、ＣＡのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、Ｓｕｎｎｙｖａｌｅ、ＣＡのＡＲＭ  Ｈｏｌｄｉｎｇｓの（例えばＮＥＯＮなどの任意選択的な更なる拡張を伴う）ＡＲＭ命令セット）をサポートし得る。一実施形態では、コア９９０が、パック型データ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするためのロジックを含み、それによって、多くのマルチメディアアプリケーションによって使用される演算が、パック型データを使用して行われることを可能にする。
【０１５６】
コアは、マルチスレッディング（演算もしくはスレッドの２つまたはそれ以上の並列組の実行）をサポートし得、かつタイムスライス型マルチスレッディング、同時マルチスレッディング（その場合、単一の物理的なコアは、物理的なコアが同時にマルチスレッディングするというロジックコアをスレッドのそれぞれに提供する）、またはそれらの組み合わせ（例えば、タイムスライス型フェッチおよび復号化ならびに同時マルチスレッディング、その後、例えば、Ｉｎｔｅｌ（登録商標）ハイパースレッディング・テクノロジーにおけるものなど）を含む種々の手法でそのように行い得ることを理解されたい。
【０１５７】
レジスタリネーミングが、アウト・オブ・オーダー実行との関連で記載されるが、レジスタリネーミングは、イン・オーダーアーキテクチャにおいて使用されてもよいことを理解されたい。プロセッサの例示される実施形態はまた、別個の命令およびデータキャッシュユニット９３４／９７４および共有Ｌ２キャッシュユニット９７６を含むが、代替の実施形態が、命令およびデータの両方のための単一内部キャッシュ、例えば、レベル１（Ｌ１）内部キャッシュなど、または複数レベルの内部キャッシュを有してもよい。いくつかの実施形態では、システムが、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュの組み合わせを含んでもよい。代わりに、キャッシュの全てが、コアおよび／またはプロセッサの外部にあってもよい。
【０１５８】
特定の例示的なイン・オーダーコアアーキテクチャ  図１０Ａ〜１０Ｂは、より具体的で例示的なイン・オーダーコアアーキテクチャのブロック図を例示し、そのコアは、チップ内の（同じ種類および／または異なる種類の他のコアを含む）いくつかのロジックブロックのうちの１つになる。ロジックブロックは、アプリケーションに応じて、高帯域幅の相互接続ネットワーク（例えば、リング型ネットワーク）を通して、いくつかの固定機能ロジック、メモリＩ／Ｏインターフェース、および他の必要なＩ／Ｏロジックと通信する。
【０１５９】
図１０Ａは、本開示の実施形態に従う、オンダイの相互接続ネットワーク１００２へのその接続、およびレベル２（Ｌ２）キャッシュ１００４のそのローカルサブセットを加えた、単一プロセッサコアのブロック図である。一実施形態では、命令復号ユニット１０００が、パック型データ命令セット拡張を伴うｘ８６命令セットをサポートする。Ｌ１キャッシュ１００６は、スカラーおよびベクトルユニットへのキャッシュメモリに対する低レイテンシアクセスを可能にする。（設計を単純化するために）一実施形態では、スカラーユニット１００８およびベクトルユニット１０１０が、別個のレジスタセット（それぞれ、スカラーレジスタ１０１２およびベクトルレジスタ１０１４）を使用し、それらの間で転送されるデータが、メモリに書き込まれ、次いで、レベル１（Ｌ１）キャッシュ１００６からリードバックされるが、本開示の代替の実施形態は、異なるアプローチを使用してもよい（例えば、単一レジスタセットを使用してもよいし、またはデータがライトおよびリードバックなしで２つのレジスタファイル間で転送されることを可能にする通信経路を含んでもよい）。
【０１６０】
Ｌ２キャッシュ１００４のローカルサブセットは、プロセッサコア毎に１つの別個のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュ１００４のそれ自体のローカルサブセットへの直接的なアクセス経路を有する。プロセッサコアによって読み取られたデータは、そのＬ２キャッシュサブセット１００４内に記憶され、それら自体のローカルＬ２キャッシュサブセットにアクセスする他のプロセッサコアと並列に、迅速にアクセスされ得る。プロセッサコアによって書き込まれたデータは、それ自体のＬ２キャッシュサブセット１００４内に記憶され、必要に応じて、他のサブセットからフラッシュされる。リング型ネットワークは、共有データのためのコヒーレンスを確実にする。リング型ネットワークは、双方向性であり、エージェント、例えば、プロセッサコア、Ｌ２キャッシュ、および他のロジックブロックなどが、チップ内で互いと通信することを可能にする。各リング型データ−経路は、方向毎に１０１２ビット長である。
【０１６１】
図１０Ｂは、本開示の実施形態に従う図１０Ａにおけるプロセッサコアの一部の拡大図である。図１０Ｂは、Ｌ１キャッシュ１００４のＬ１データキャッシュ１００６Ａ部分、ならびにベクトルユニット１０１０およびベクトルレジスタ１０１４に関する更なる詳細を含む。具体的には、ベクトルユニット１０１０が、１６−ｗｉｄｅベクトル処理ユニット（ＶＰＵ：ｖｅｃｔｏｒ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）（１６−ｗｉｄｅ  ＡＬＵ１０２８を参照）であり、それは、整数、単精度浮動小数、および倍精度浮動小数命令のうちの１つまたは複数を実行する。ＶＰＵは、スウィズルユニット１０２０を用いるレジスタ入力のスウィズリング、数値化ユニット１０２２Ａ〜Ｂを用いる数値化、およびメモリ入力についての複製ユニット１０２４を用いる複製をサポートする。書込みマスクレジスタ１０２６は、結果として生じるベクトル書込みの断定を可能にする。
【０１６２】
図１１は、本開示の実施形態に従う、２つ以上のコアを有し得、統合メモリコントローラを有し得、かつ統合グラフィックを有し得る、プロセッサ１１００のブロック図である。図１１における実線枠は、単一コア１１０２Ａ、システムエージェント１１１０、１組の１つまたは複数のバスコントローラユニット１１１６を有するプロセッサ１１００を例示し、一方で、破線枠の任意選択的な付加部分は、複数のコア１１０２Ａ〜Ｎ、システムエージェントユニット１１１０内の１組の１つまたは複数の統合メモリコントローラユニット（複数可）１１１４、および特殊目的ロジック１１０８を有する代替のプロセッサ１１００を例示する。
【０１６３】
それゆえ、プロセッサ１１００の異なる実現形態は、１）（１つまたは複数のコアを含み得る）統合グラフィックおよび／または科学的（スループット）ロジックである特殊目的ロジック１１０８、ならびに１つまたは複数の汎用コア（例えば、汎用イン・オーダーコア、汎用アウト・オブ・オーダーコア、それらの２つの組み合わせ）であるコア１１０２Ａ〜Ｎを有するＣＰＵ、２）主にグラフィックスおよび／または科学的（スループット）向けの多数の特殊目的コアであるコア１１０２Ａ〜Ｎを有するコプロセッサ、なおかつ３）多数の汎用イン・オーダーコアであるコア１１０２Ａ〜Ｎを有するコプロセッサを含み得る。それゆえ、プロセッサ１１００は、汎用プロセッサ、コプロセッサ、または特殊目的プロセッサ、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、（３０またはそれ以上のコアを含む）高スループットメニー・インテグレーテッド・コア（ＭＩＣ：ｍａｎｙ  ｉｎｔｅｇｒａｔｅｄ  ｃｏｒｅ）コプロセッサ、埋め込み型プロセッサ、または同様のものなどであり得る。プロセッサは、１つまたは複数のチップ上に実装され得る。プロセッサ１１００は、いくらかのプロセス技術、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳなどのうちのいずれかを使用して、１つまたは複数の基板の一部であってもよいし、および／あるいは１つまたは複数の基板上に実装されてもよい。
【０１６４】
メモリ階層は、コア、１組のまたは１つもしくは複数の共有キャッシュユニット１１０６、および１組の統合メモリコントローラユニット１１１４に結合される外部メモリ（図示しない）内に１つまたは複数のレベルのキャッシュを含む。１組の共有キャッシュユニット１１０６は、１つもしくは複数の中間レベルキャッシュ、例えば、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、または他のレベルのキャッシュなど、ラストレベルキャッシュ（ＬＬＣ）、および／あるいはそれらの組み合わせを含み得る。一実施形態では、リングベースの相互接続ユニット１１１２が、統合グラフィックスロジック１１０８、１組の共有キャッシュユニット１１０６、およびシステムエージェントユニット１１１０／統合メモリコントローラユニット（複数可）１１１４を相互接続するが、代替の実施形態は、かかるユニットを相互接続するために任意の数の周知の技法を使用してもよい。一実施形態では、コヒーレンスが、１つまたは複数のキャッシュユニット１１０６およびコア１１０２Ａ〜Ｎ間で維持される。
【０１６５】
いくつかの実施形態では、コア１１０２Ａ〜Ｎのうちの１つまたは複数が、マルチスレッディングすることができる。システムエージェント１１１０は、コア１１０２Ａ〜Ｎを調整および操作する構成要素を含む。システムエージェントユニット１１１０は、例えば、電力制御ユニット（ＰＣＵ：ｐｏｗｅｒ  ｃｏｎｔｒｏｌ  ｕｎｉｔ）および表示ユニットを含んでもよい。ＰＣＵは、コア１１０２Ａ〜Ｎおよび統合グラフィックスロジック１１０８の電力状態を調節するために必要なロジックおよび構成要素であってもよいし、またはそれらを含んでもよい。表示ユニットは、１つまたは複数の外部に接続された表示部を駆動するためのものである。
【０１６６】
コア１１０２Ａ〜Ｎは、アーキテクチャ命令セットに関してホモジニアスまたはヘテロジニアスであり得る。すなわち、コア１１０２Ａ〜Ｎのうちの２つまたはそれ以上が、同じ命令セットを実行することができ得、一方で、その他が、その命令セットまたは異なる命令セットのサブセットのみを実行することができ得る。
【０１６７】
例示的なコンピュータアーキテクチャ  図１２、１３、１４、および１５は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、手持ち式ＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込み型プロセッサ、デジタル信号プロセッサ（ＤＳＰ：ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、手持ち式デバイス、および様々な他の電子デバイスのための当分野において既知の他のシステム設計ならびに構成がまた、適している。一般に、本明細書に開示されるようなプロセッサおよび／もしくは他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが、一般的に適している。
【０１６８】
次に、図１２を参照すると、本開示の一実施形態に従ってシステム１２００のブロック図が示される。システム１２００は、１つまたは複数のプロセッサ１２１０、１２１５を含み得、それらは、コントローラハブ１２２０に結合される。一実施形態では、コントローラハブ１２２０が、グラフィックスメモリコントローラハブ（ＧＭＣＨ：ｇｒａｐｈｉｃｓ  ｍｅｍｏｒｙ  ｃｏｎｔｒｏｌｌｅｒ  ｈｕｂ）１２９０および（別個のチップ上にあり得る）入出力ハブ（ＩＯＨ：Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｈｕｂ）１２５０を含み、ＧＭＣＨ１２９０は、メモリおよびグラフィックスコントローラを含み、それに対してメモリ１２４０およびコプロセッサ１２４５が結合され、ＩＯＨ１２５０は、入出力（Ｉ／Ｏ）デバイス１２６０をＧＭＣＨ１２９０に結合する。代わりに、メモリおよびグラフィックスコントローラのうちの一方または両方が、（本明細書に記載されるような）プロセッサ内に統合され、メモリ１２４０およびコプロセッサ１２４５は、プロセッサ１２１０、およびＩＯＨ１２５０を有するシングルチップ内のコントローラハブ１２２０に直接的に結合される。
【０１６９】
任意選択的な性質の追加的なプロセッサ１２１５が、破線を用いて図１２に示される。各プロセッサ１２１０、１２１５は、本明細書に記載される処理コアのうちの１つまたは複数を含んでもよいし、あるバージョンのプロセッサ１１００であってもよい。
【０１７０】
メモリ１２４０は、例えば、動的ランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ：ｐｈａｓｅ  ｃｈａｎｇｅ  ｍｅｍｏｒｙ）、またはそれらの２つの組み合わせであってもよい。少なくとも１つの実施形態の場合、コントローラハブ１２２０が、マルチドロップバス、例えば、フロントサイドバス（ＦＳＢ：ｆｒｏｎｔｓｉｄｅ  ｂｕｓ）など、ポイントツーポイントインターフェース、例えば、ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＱＰＩ）など、または類似の接続１２９５経由で、プロセッサ（複数可）１２１０、１２１５と通信する。
【０１７１】
一実施形態では、コプロセッサ１２４５が、特殊目的プロセッサ、例えば、高スループットＭＩＣプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、埋め込み型プロセッサ、または同様のものなどである。一実施形態では、コントローラハブ１２２０が、統合グラフィックアクセラレータを含んでもよい。
【０１７２】
アーキテクチャ、マイクロアーキテクチャ、熱的、電力消費特性、および同様のものを含むメリットのメトリクスのスペクトルに関して、物理的なリソース１２１０、１２１５間に種々の差が存在し得る。
【０１７３】
一実施形態では、プロセッサ１２１０が、一般型のデータ処理演算を制御する命令を実行する。命令内には、コプロセッサ命令が埋め込まれ得る。プロセッサ１２１０は、これらのコプロセッサ命令を、取り付けられたコプロセッサ１２４５によって実行されるべきである類のものとして認識する。したがって、プロセッサ１２１０は、コプロセッサバスまたは他の相互接続上でこれらのコプロセッサ命令をコプロセッサ１２４５に発行する（またはコプロセッサ命令を表わす信号を制御する）。コプロセッサ（複数可）１２４５は、受信されたコプロセッサ命令を受け入れて実行する。
【０１７４】
次に、図１３を参照すると、本開示の実施形態に従って第１のより具体的で例示的なシステム１３００のブロック図が示される。図１３に示されるように、マルチプロセッサシステム１３００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１３５０経由で結合される第１のプロセッサ１３７０および第２のプロセッサ１３８０を含む。プロセッサ１３７０および１３８０のそれぞれは、あるバージョンのプロセッサ１１００であり得る。本開示の一実施形態では、プロセッサ１３７０および１３８０が、それぞれ、プロセッサ１２１０および１２１５であり、一方で、コプロセッサ１３３８が、コプロセッサ１２４５である。別の実施形態では、プロセッサ１３７０および１３８０が、それぞれ、プロセッサ１２１０、コプロセッサ１２４５である。
【０１７５】
それぞれ、統合メモリコントローラ（ＩＭＣ：ｉｎｔｅｇｒａｔｅｄ  ｍｅｍｏｒｙ  ｃｏｎｔｒｏｌｌｅｒ）ユニット１３７２および１３８２を含む、プロセッサ１３７０および１３８０が示される。プロセッサ１３７０はまた、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ：ｐｏｉｎｔ−ｔｏ−ｐｏｉｎｔ）インターフェース１３７６および１３７８を含む。同様に、第２のプロセッサ１３８０は、Ｐ−Ｐインターフェース１３８６および１３８８を含む。プロセッサ１３７０、１３８０は、Ｐ−Ｐインターフェース回路１３７８、１３８８を使用してポイントツーポイント（Ｐ−Ｐ）インターフェース１３５０経由で情報を交換し得る。図１３に示されるように、ＩＭＣ１３７２および１３８２が、プロセッサをそれぞれのメモリ、すなわち、メモリ１３３２およびメモリ１３３４に結合し、それらは、それぞれのプロセッサにローカルに取り付けられるメインメモリの一部分であり得る。
【０１７６】
プロセッサ１３７０、１３８０は、ポイントツーポイントインターフェース回路１３７６、１３９４、１３８６、１３９８を使用して個々のＰ−Ｐインターフェース１３５２、１３５４経由でチップセット１３９０と情報をそれぞれ交換し得る。チップセット１３９０は、任意選択的に、高性能インターフェース１３３９経由でコプロセッサ１３３８と情報を交換してもよい。一実施形態では、コプロセッサ１３３８が、特殊目的プロセッサ、例えば、高スループットＭＩＣプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、埋め込み型プロセッサ、または同様のものなどである。
【０１７７】
共有キャッシュ（図示しない）は、プロセッサが低電力モードに置かれた場合に、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に記憶され得るように、いずれかのプロセッサ内にまたは両方のプロセッサの外側に含まれ得、更にＰ−Ｐ相互接続経由でプロセッサと接続され得る。
【０１７８】
チップセット１３９０は、インターフェース１３９６経由で第１のバス１３１６に結合されてもよい。一実施形態では、第１のバス１３１６が、周辺部品相互接続（ＰＣＩ：Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス、または例えば、ＰＣＩ  Ｅｘｐｒｅｓｓバスまたは別の第３世代Ｉ／Ｏ相互接続バスなどのバスであり得るが、本開示の範囲は、そのように限定されない。
【０１７９】
図１３に示されるように、様々なＩ／Ｏデバイス１３１４が、第１のバス１３１６を第２のバス１３２０に結合するバスブリッジ１３１８と共に、第１のバス１３１６に結合され得る。一実施形態では、１つまたは複数の追加的なプロセッサ（複数可）１３１５、例えば、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックスアクセラレータまたはデジタル信号処理（ＤＳＰ：ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｉｎｇ）ユニットなど）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどが、第１のバス１３１６に結合される。一実施形態では、第２のバス１３２０が、ピン数が少ない（ＬＰＣ：ｌｏｗ  ｐｉｎ  ｃｏｕｎｔ）バスであり得る。様々なデバイスが、第２のバス１３２０に結合され得、例えば、一実施形態では、キーボードおよび／またはマウス１３２２、通信デバイス１３２７、ならびに記憶ユニット１３２８、例えば、ディスクドライブまたは命令／コードおよびデータ１３３０を含み得る他の大容量記憶デバイスなどを含む。更に、オーディオＩ／Ｏ１３２４が、第２のバス１３２０に結合されてもよい。他のアーキテクチャが可能であることに留意する。例えば、図１３のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のかかるアーキテクチャを実装してもよい。
【０１８０】
次に、図１４を参照すると、本開示の実施形態に従って第２のより具体的で例示的なシステム１４００のブロック図が示される。図１３および１４における同じ要素は、同じ参照数字を有し、図１３の特定の態様は、図１４の他の態様を不明瞭にすることを回避するために、図１４から省略されている。
【０１８１】
図１４は、プロセッサ１３７０、１３８０が、それぞれ、統合メモリおよびＩ／Ｏ制御ロジック（「ＣＬ：ｃｏｎｔｒｏｌ  ｌｏｇｉｃ」）１３７２および１３８２を含み得ることを例示する。それゆえ、ＣＬ１３７２、１３８２は、統合メモリコントローラユニットを含み、かつＩ／Ｏ制御ロジックを含む。図１４は、メモリ１３３２、１３３４がＣＬ１３７２、１３８２に結合されることのみならず、Ｉ／Ｏデバイス１４１４がまた制御ロジック１３７２、１３８２に結合されることも例示する。レガシーＩ／Ｏデバイス１４１５は、チップセット１３９０に結合される。
【０１８２】
次に、図１５を参照すると、本開示の実施形態に従ってＳｏＣ１５００のブロック図が示される。図１１における類似の要素は、同じ参照数字を有する。また、破線枠は、より高度なＳｏＣについての任意選択的な特徴である。図１５において、相互接続ユニット（複数可）１５０２は、１組の１つまたは複数のコア２０２Ａ〜Ｎおよび共有キャッシュユニット（複数可）１１０６を含むアプリケーションプロセッサ１５１０、システムエージェントユニット１１１０、バスコントローラユニット（複数可）１１１６、統合メモリコントローラユニット（複数可）１１１４、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサを含み得る１組のまたは１つもしくは複数のコプロセッサ１５２０、静的ランダムアクセスメモリ（ＳＲＡＭ）ユニット１５３０、直接メモリアクセス（ＤＭＡ：ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）ユニット１５３２、ならびに１つまたは複数の外部表示部に結合するための表示ユニット１５４０に結合される。一実施形態では、コプロセッサ（複数可）１５２０が、特殊目的プロセッサ、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、埋め込み型プロセッサ、または同様のものなどを含む。
【０１８３】
本明細書に開示される（例えば、機構の）実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはかかる実現形態アプローチの組み合わせにおいて実現され得る。本開示の実施形態は、少なくとも１つのプロセッサ、（揮発性および不揮発性メモリならびに／または記憶要素を含む）記憶システム、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを備える、プログラム可能なシステム上で実行するコンピュータプログラムあるいはプログラムコードとして実現され得る。
【０１８４】
プログラムコード、例えば、図１３に例示されるコード１３３０などが、命令を入力して、本明細書に記載される機能を行い、かつ出力情報を生成するために適用され得る。出力情報は、既知の様式で、１つまたは複数の出力デバイスに適用され得る。この適用の目的のために、処理システムは、プロセッサ、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ：ａｐｐｌｉｃａｔｉｏｎ  ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）、またはマイクロプロセッサなどを有する、任意のシステムを含む。
【０１８５】
プログラムコードは、処理システムと通信するための高水準手順またはオブジェクト指向プログラミング言語で実現され得る。プログラムコードはまた、必要に応じて、アセンブリまたはマシン言語で実現されてもよい。実際、本明細書に記載される機構は、任意の特定のプログラミング言語に対する範囲に限定されない。いずれにせよ、言語は、コンパイルまたは解釈される言語であり得る。
【０１８６】
少なくとも１つの実施形態の１つまたは複数の態様は、プロセッサ内の様々なロジックを表わすマシン可読媒体上に記憶された典型的な命令によって実現され得、それは、マシンによって読み取られるときに、マシンに、本明細書に記載される技法を行うためのロジックを製作させる。「ＩＰコア」として知られるかかる典型は、有形のマシン可読媒体上に記憶され得、実際にロジックまたはプロセッサを作製する製作マシンにロードするために、様々な顧客または製造設備に供給され得る。
【０１８７】
かかるマシン可読記憶媒体は、限定なしで、マシンもしくはデバイスによって製造または形成された項目の非一時的な有形の構成を含み得、記憶媒体、例えば、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク読取り専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｋ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、書き換え可能なコンパクトディスク（ＣＤ−ＲＷ：ｃｏｍｐａｃｔ  ｄｉｓｋ  ｒｅｗｒｉｔａｂｌｅ）、および光磁気ディスクを含む任意の他の種類のディスクなど、半導体デバイス、例えば、読取り専用メモリ（ＲＯＭ）など、ランダムアクセスメモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、例えば、動的ランダムアクセスメモリ（ＤＲＡＭ）など、静的ランダムアクセスメモリ（ＳＲＡＭ）、消去可能でプログラム可能な読取り専用メモリ（ＥＰＲＯＭ：ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、フラッシュメモリ、電気的に消去可能でプログラム可能な読取り専用メモリ（ＥＥＰＲＯＭ：ｅｌｅｃｔｒｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、相変化メモリ（ＰＣＭ）、磁気もしくは光カード、または電子命令を記憶するのに適した任意の他の種類の媒体を含む。
【０１８８】
したがって、本開示の実施形態はまた、命令を含有する、あるいは本明細書に記載される構造、回路、装置、プロセッサおよび／またはシステム特徴を決定する設計データ、例えば、ハードウェア記述言語（ＨＤＬ：Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）などを含有する、非一時的な有形のマシン可読媒体を含む。かかる実施形態はまた、プログラム製品としても呼ばれ得る。
【０１８９】
（バイナリ変換、コードモーフィング等を含む）エミュレーション  いくつかの場合では、命令コンバータが、命令をソース命令セットからターゲット命令セットにコンバートするために使用されてもよい。例えば、命令コンバータは、命令を、コアによって処理されるべき１つまたは複数の他の命令に（例えば、静的変換、動的コンパイルを含む動的バイナリ変換を使用して）変換、モーフィング、エミュレート、またはさもなければコンバートし得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせにおいて実現され得る。命令コンバータは、オン（ｏｎ）プロセッサ、オフ（ｏｆｆ）プロセッサ、または部分オンおよび部分オフプロセッサであり得る。
【０１９０】
図１６は、本開示の実施形態に従うソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令にコンバートするためのソフトウェア命令コンバータの使用を対照させるブロック図である。例示される実施形態では、命令コンバータが、ソフトウェア命令コンバータであるが、代わりに、命令コンバータが、ソフトウェア、ファームウェア、ハードウェア、またはそれの様々な組み合わせにおいて実現されてもよい。図１６は、高水準言語１６０２におけるプログラムが、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１６１６によってネイティブに実行され得るｘ８６バイナリコード１６０６を生成するためにｘ８６コンパイラ１６０４を使用してコンパイルされ得ることを示す。少なくとも１つのｘ８６命令セットコアを有するプロセッサ１６１６は、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ結果を達成するために、（１）Ｉｎｔｅｌｘ８６命令セットコアの命令セットの実質的な部分、あるいは（２）少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサ上で動くことを対象にされたオブジェクトコードバージョンのアプリケーションもしくは他のソフトウェアを互換可能に実行すること、またはさもなければ処理することによって、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ機能を行うことができる任意のプロセッサを表わす。ｘ８６コンパイラ１６０４は、更なる連係処理を用いてまたは用いずに、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１６１６上で実行され得るｘ８６バイナリコード１６０６（例えば、オブジェクトコード）を生成するように操作可能なコンパイラを表わす。同様に、図１６は、高水準言語１６０２におけるプログラムが、少なくとも１つのｘ８６命令セットコアを有さないプロセッサ１６１４（例えば、Ｓｕｎｎｙｖａｌｅ、ＣＡのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行するおよび／またはＳｕｎｎｙｖａｌｅ、ＣＡのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行するコアを有するプロセッサ）によってネイティブに実行され得る代替の命令セットバイナリコード１６１０を生成するために代替の命令セットコンパイラ１６０８を使用してコンパイルされ得ることを示す。命令コンバータ１６１２は、ｘ８６バイナリコード１６０６を、ｘ８６命令セットコアを用いずにプロセッサ１６１４によってネイティブに実行され得るコードにコンバートするために使用される。このコンバートされたコードは、代替の命令セットバイナリコード１６１０と同じである可能性が低い。なぜなら、これが可能な命令コンバータは、製造するのが困難であるからである。しかしながら、コンバートされたコードは、一般的な演算を達成し、代替の命令セットからの命令で構成されることになる。それゆえ、命令コンバータ１６１２は、エミュレーション、シミュレーション、または任意の他のプロセスを通して、ｘ８６命令セットプロセッサもしくはコアを有さないプロセッサまたは他の電子デバイスが、ｘ８６バイナリコード１６０６を実行することを可能にする、ソフトウェア、ファームウェア、ハー��ウェア、またはそれらの組み合わせを表わす。
【図１】
0006761415.tif 000005
【図２】
0006761415.tif 000006
【図３】
0006761415.tif 000007
【図４】
0006761415.tif 000008
【図５】
0006761415.tif 000009
【図６Ａ】
0006761415.tif 000010
【図６Ｂ】
0006761415.tif 000011
【図７Ａ】
0006761415.tif 000012
【図７Ｂ】
0006761415.tif 000013
【図７Ｃ】
0006761415.tif 000014
【図７Ｄ】
0006761415.tif 000015
【図８】
0006761415.tif 000016
【図９Ａ】
0006761415.tif 000017
【図９Ｂ】
0006761415.tif 000018
【図１０Ａ】
0006761415.tif 000019
【図１０Ｂ】
0006761415.tif 000020
【図１１】
0006761415.tif 000021
【図１２】
0006761415.tif 000022
【図１３】
0006761415.tif 000023
【図１４】
0006761415.tif 000024
【図１５】
0006761415.tif 000025
【図１６】
0006761415.tif 000026