以下の記載には、非常に多くの具体的な詳細が説明される。しかしながら、本開示の実施形態は、これらの具体的な詳細を用いずに実施され得ることが理解される。他の事例では、周知の回路、構造、および技法が、この記載の理解を不明瞭にしないために詳細に示されていない。
「一実施形態」、「ある実施形態」、「ある実施形態例」等への明細書における参照は、記載される実施形態が、特定の特徴、構造、または特性を含み得るものの、全ての実施形態が、必ずしもその特定の特徴、構造、または特性を含まなくてもよいことを示す。その上、かかる文言は、必ずしも同じ実施形態を参照するものではない。更に、ある特定の特徴、構造、または特性が、ある実施形態に関して記載されるとき、明示的に記載されるか否かに関わらず、他の実施形態に関してかかる特徴、構造、または特性に影響を及ぼすことが当業者の知識内にあることが提起される。
命令処理ハードウェア(例えば、命令を復号および/または実行するために1つまたは複数のコアを有するハードウェアプロセッサ)が、例えば、算術または論理機能を行う際に、データについて演算し得る。データにアクセス(例えば、データをロードまたはストア)するプロセッサは、データの到着を待たざるを得ず、その場合、例えば、プロセッサは、データを待っていて、かつ何も処理していない(例えば、アイドル状態にある)。特定の実施形態では、ハードウェアプロセッサが、プロセッサによって演算されるべきデータを、(例えば、通常、プロセッササイクルにおいて測定される、アクセスおよび/またはサイクルタイムの)より遅いメモリからより速いメモリへとロード(例えば、コピー)し得、それは、一般的に、プリフェッチ(例えば、データのプリフェッチ)として呼ばれ得る。例えば、プロセッサによって(例えば、プログラム順序命令における後のものによって)演算されるべきデータが、システム(例えば、メイン)メモリからキャッシュ(例えば、キャッシュメモリ)にロードされ得る。キャッシュ(例えば、レベルL1、L2、L3、L4等のうちの全てまたは1つもしくは複数のレベル)は、ハードウェアプロセッサの一部(例えば、オンダイ)であり得る。一実施形態では、キャッシュが、静的ランダムアクセスメモリ(SRAM:static random access memory)である。システムメモリは、ハードウェアプロセッサとは別個の構成要素、例えば、バス経由でプロセッサによってアクセス可能なメモリであってもよい。一実施形態では、システムメモリが、動的ランダムアクセスメモリ(DRAM:dynamic random access memory)および/または(プロセッサの)外部メモリ(例えば、大容量記憶デバイス)である。システムメモリは、アクセスおよび/またはサイクルタイムにおいて(例えば、その中への要求されたロードおよび/またはストアの完了において)(例えば、少なくとも1、2、3、4、5、6、7、8、9、または10倍だけ)キャッシュよりも遅い可能性がある。本明細書において使用される際、キャッシュラインは、一般に、コヒーレンス目的のための単位として管理され得るデータのブロック(例えば、セクタ)のことを指し得る。キャッシュラインは、複数の別個の要素、例えばベクトルの要素を含み得る。
データをキャッシュに(例えば、システムメモリから、または下位レベルのキャッシュから上位レベルのキャッシュに、例えば、L3からL2またはL1キャッシュなどに)プリフェッチすること(例えば、プリフェッチ)は、プロセッサがそのデータを待つ(例えば、アイドル状態にある)ことに費やす時間を最小限にし得る。プリフェッチは、ハードウェアプロセッサにおけるメモリアクセスレイテンシを削減し得る。特定の処理演算(例えば、ステンシル計算)は、比較的大きな(例えば、キャッシュのまたはキャッシュレベルの容量よりも大きな)量のデータを含み得る。これは、例えば、キャッシュからのデータ(例えば、データのキャッシュライン)についてのハードウェアプロセッサの要求が失敗である(例えば、キャッシュラインがキャッシュ内にないか、または要求されたキャッシュレベルにない)場合、およびデータが、そのキャッシュからのロードよりも遅い演算においてロードされる場合、処理遅延を引き起こし得る。キャッシュは、システムメモリよりも(例えば、少なくとも1、2、3、4、5、6、7、8、9、10、100、または1000倍だけ)小さくてもよい。
ステンシル計算(例えば、演算)は、ハードウェアプロセッサによって行われる科学的計算、金融サービス、および地震画像化において普通に見られる演算(例えば、ベクトル計算)の一実施例である。ステンシル計算は、以下の一般形式を有する。
この場合、各要素(例えば、ノード)は、例えば、特定の隣接要素からの重み付け寄与を生じさせるために、それ自体のデータを有し得る。ステンシル計算は、例えば、ベクトルデータについて演算するためのプロセッサ、例えば、限定されるものではないが、SIMDベクトルおよび/またはSIMDハードウェアなどを使用して、多次元アレイから要素の多次元ブロック(例えば、サブセット)について行われ得る。要素は、一般に、単一値を表わすデータの別個の区分のことを指し得る。例えば、512ビットのキャッシュラインは、各要素について32ビットを用いる16の要素、各要素について8ビットを用いる64の要素等を有し得る。本明細書における特定の実施形態は、要素の多次元アレイまたは多次元ブロックが、メモリ内の要素の単一次元アレイまたはブロックに平坦化されることを想定し得る。本開示の特定の実施形態は、ステンシルに関して記述されるが、これは、単に、本開示の1つの適用の実施例である。本開示の適用の更なる非限定例が、以下に記述される。図1は、本開示の実施形態に従うスパース3次元(3D:three−dimensional)ステンシル100を例示する。例えば、このステンシル100は、このステンシルによって(例えば、このステンシルにおいて)カバーされる6*kの要素の値に基づいて、要素105について新しい値(例えば、6*kの隣接要素のものからの重み付け寄与)を計算するために使用され得、この場合、kは、ステンシルの半値幅である。図1に関して例示されるように、スパースは、要素の多次元ブロックの最も外側の要素(例えば、描写されるような9*9*9(729)の要素キューブである、(2*k+1)*(2*k+1)の要素キューブ)によって決定されるデータのブロック全体(例えば、ここでのキューブは、そこでのブロック全体になる)に存在する全てではない要素のことを指し得る。
多次元(例えば、2次元、3次元、4次元等の)アレイは、任意のサイズ、例えば、ステンシルの次元と比べて1桁またはそれ以上のサイズのものであり得る。例えば、ステンシルは、前の(例えば、隣接)要素に基づいて、多次元アレイにおける新しい要素に移され得り、この新しい要素について新しい値を計算する。一実施形態では、多次元アレイが、前のプロセスによって、例えば、データベースポピュレーション方法を使用して、要素を用いてポピュレートされる。一実施形態では、多次元アレイの各要素が、4バイトである。一実施形態では、多次元アレイの各要素が、8バイトである。一実施形態では、多次元アレイの各要素が、16バイトである。一実施形態では、多次元アレイの各要素が、キャッシュラインの要素と同じサイズである。一実施形態では、要素の多次元ブロックの各要素が、キャッシュラインの要素と同じサイズである。一実施形態では、要素の多次元ブロックにおける各要素が、多次元アレイの各要素と同じサイズである。
(例えば、単一)プリフェッチ命令(例えば、マクロ命令)は、ハードウェアプロセッサ(例えば、それのプリフェッチユニット)が、要素の多次元ブロックを多次元アレイからキャッシュにプリフェッチすることを可能にし得る。かかる命令のいくつかの非限定的な形式が後に続く。特定の実施形態では、プリフェッチ命令が、要素の多次元ブロックの(例えば、開始または中心)要素のシステム(例えば、仮想)メモリアドレス、要素の多次元ブロックの(例えば、1つもしくは複数次元における)ストライド、要素の多次元ブロックの境界(例えば、および形状)、またはそれらの任意の組み合わせを(例えば、プロセッサに)示すデータフィールド(例えば、被演算子もしくは複数の被演算子)を含む。一実施形態では、そのアドレスが、ステンシルの中心、例えば、図1における要素105である。一実施形態では、そのアドレスが、ステンシルの境界要素、例えば、kが4であるとき、図1における要素101xまたは109xである。アレイのストライド(例えば、ステップサイズまたはインクリメント)は、一般に、ある要素の始まりと次の要素の始まりとの間のメモリ内の(例えば、仮想または物理)アドレスの数のことを指し得る。ストライドは、測定され得、またはアレイの要素(例えば、セル)のサイズの単位にあり得る。一実施形態では、ストライドが、要素のサイズよりも大きく、それゆえ、隣接要素間の超過間隔を示す。特定の実施形態では、プリフェッチ命令が、要素の多次元ブロック(例えば、合成アレイ)および/または多次元(例えば、ソース)アレイの全てのあるいは特定の次元についてストライドを示し得る。例えば、ストライドは、プリフェッチ命令のデータフィールド(例えば、被演算子または複数の被演算子)によって示され得る。例えば、各次元における、特定の次元における、またはある次元におけるストライドを示すために、プリフェッチ命令内の被演算子フィールドにおいて、第1の次元におけるストライドは、S1(ストライド値)の形態にあり得、第2の次元におけるストライドは、S2(ストライド値)等の形態にあり得る。第1および第2の次元における均一ストライドは、S12(即時ストライド値)の形態にあり得る。第1、第2、および第3の次元における均一ストライドは、S123(即時ストライド値)の形態にあり得る。括弧がここで使用されるが、被演算子の任意の形式が、利用されてもよい。
一実施形態では、境界が、多次元ブロックおよび/または多次元アレイの最も外側の次元のアドレスであり得る。一実施形態では、境界または複数の境界が、例えば、既知のシステムメモリアドレスの要素(複数可)に対して測定されるような、各次元における要素の数であり得る。例えば、図1における中心要素105についてのアドレスおよび次元kが与えられる場合、境界が決定され得る。更に、境界(または、境界を表わすコードのストリーム)が、要素の多次元ブロック(例えば、図1におけるスパースステンシル100)における他の要素のアドレスを決定するために使用され得る。境界は、複数の次元の各次元において異なり得る。
特定の実施形態では、プリフェッチ命令は、どのレベルのキャッシュ(例えば、レベル1(L1)、レベル2、(L2)、レベル3(L3)、レベル4(L4)等)が、例えば、オペコードおよび/または任意のデータフィールド(例えば、被演算子もしくは複数の被演算子)によって、要素の多次元ブロックを中にロードするかを示し得る。例えば、「L1」、「L2」、「L3」、「L4」、または他の被演算子のテキストが、キャッシュのターゲットレベルを示すために、プリフェッチ命令における被演算子フィールド内に含まれ得る。一実施形態では、プリフェッチが、データをシステムメモリからキャッシュにプリフェッチすること(またはそのデータについてのシステムメモリアドレスをプリフェッチすること)あるいはキャッシュのあるレベルからキャッシュのより高いレベルに(例えば、L3からL2またはL1に)プリフェッチすることを含んでもよい。
(例えば、プログラミング言語および非機械言語で表現される)プリフェッチ命令の形式例が、以下に表1において提供される。
終りにおける括弧内の数字は、単に以下の記述における助けとなるものであり、被演算子フィールドの一部ではないことに留意する。オペコード名は単なる例であり、他の名前が使用されてもよい。被演算子は、即値、アドレス、レジスタ(例えば、全ての被演算子についての単一ベクトルレジスタまたは被演算子もしくは複数の被演算子についての複数のレジスタ)等であり得る。特定の被演算子が、特定のオペコードと共に列挙されるが、本開示は、そのように限定されず、例えば、オペコードおよび被演算子(複数可)が、任意の組み合わせで利用されてもよい。プリフェッチ命令は、全てのもしくは様々な被演算子を保持するために、メモリ、例えば、システムメモリまたはレジスタ(例えば、単一命令複数データ(SIMD:single instruction multiple data)型レジスタ)を使用してもよい。一実施形態では、被演算子が、複数のデータレジスタの各要素に記憶される。一実施形態では、被演算子が、複数のレジスタのそれぞれに記憶される。プリフェッチ命令は、領域についての更なる情報、例えば、データ型サイズ(例えば、各要素のビットサイズ)を示す被演算子を含んでもよい。
命令形式例(1)に関して、オペコードPREFETCH2Dは、(例えば、本明細書に記述されるような)ハードウェアプロセッサに、要素の2次元(2D:two−demensional)ブロックを多次元(例えば、2Dまたは3D)アレイからプリフェッチさせ得る。ベースの被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから(例えば、ターゲット)キャッシュにフェッチされるべき要素の2次元ブロックのベース(例えば、システムメモリ)アドレスを示(例えば、符号化)し得る。一実施形態では、ベースの被演算子フィールドが、開始要素であり、例えば、必ずしも境界上の要素ではない。(単一レジスタまたは複数のレジスタ等にあり得る)領域の被演算子フィールドは、命令の実行によって、システムメモリ内に位置する多次元アレイから(例えば、ターゲット)キャッシュにフェッチされるべき2D領域の次元(例えば、高さおよび幅)を示(例えば、符号化)し得る。一実施形態では、領域の被演算子フィールドが、幅(例えば、デカルト座標のx方向)および高さ(例えば、デカルト座標のy方向)のそれぞれにおけるビットまたは要素の数である。ストライドの被演算子フィールドは、プリフェッチされるべき要素の多次元ブロックおよび/またはシステムメモリ内の多次元アレイの(例えば、ビットまたは要素の数において)ストライドを示(例えば、符号化)し得る。ストライドは、2つの次元のそれぞれにおいて異なってもよく、例えば、ストライドデータフィールドは、1次元(例えば、デカルト座標のx方向)について第1のストライドおよび第2の次元(例えば、デカルト座標のy方向)について第2のストライドを含んでもよい。ターゲットキャッシュの被演算子フィールドは、要素の2次元ブロックが、命令の実行によってシステムメモリ内に位置する多次元アレイからキャッシュにフェッチ(例えば、ロード)されるという(例えば、ターゲット)キャッシュ(例えば、キャッシュレベル)の識別を示(例えば、符号化)し得る。一実施形態では、ターゲットキャッシュの被演算子フィールドが、ラストレベルキャッシュまたはL3である。かかる命令の実行は、ベースアドレスで開始し、かつ矩形領域の対応する行および/または列の間のストライド(複数可)を使用して、システムメモリ領域の幅×高さの矩形全体をキャッシュにプリフェッチし得る。
命令形式例(2)に関して、オペコードPREFETCH3Dは、(例えば、本明細書に記述されるような)ハードウェアプロセッサに、要素の3次元(3D)ブロックを多次元(例えば、3Dまたは4D)アレイからプリフェッチさせ得る。ベースの被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから(例えば、ターゲット)キャッシュにフェッチされるべき要素の3次元ブロックのベース(例えば、システムメモリ)アドレスを示(例えば、符号化)し得る。一実施形態では、ベースの被演算子フィールドが、開始要素であり、例えば、必ずしも境界上の要素ではない。(単一レジスタまたは複数のレジスタ等内にあり得る)領域の被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから(例えば、ターゲット)キャッシュにフェッチされるべき3D領域の次元(例えば、高さ、幅、および深さ)を示(例えば、符号化)し得る。一実施形態では、領域の被演算子フィールドが、高さ(例えば、デカルト座標のz方向)、幅(例えば、デカルト座標のx方向)、および深さ(例えば、デカルト座標のy方向)のそれぞれにおけるビットまたは要素の数である。ストライドの被演算子フィールドは、プリフェッチされるべき要素の多次元ブロックおよび/またはシステムメモリ内の多次元アレイの(例えば、ビットまたは要素の数において)ストライドを示(例えば、符号化)し得る。ストライドは、2次元または3次元のそれぞれにおいて異なってもよく、例えば、ストライドデータフィールドは、1次元(例えば、デカルト座標のx方向)についての第1のストライド、第2の次元(例えば、デカルト座標のy方向)についての第2のストライド、および第3の次元(例えば、デカルト座標のz方向)についての第3のストライドを含んでもよい。ターゲットキャッシュの被演算子フィールドは、要素の3次元ブロックが、命令の実行によってシステムメモリ内に位置する多次元アレイからキャッシュにフェッチ(例えば、ロード)されるという(例えば、ターゲット)キャッシュ(例えば、キャッシュレベル)の識別を示(例えば、符号化)し得る。一実施形態では、ターゲットキャッシュの被演算子フィールドが、ラストレベルキャッシュまたはL3である。かかる命令の実行は、ベースアドレスを含んで開始し、かつ矩形領域の対応する要素間のストライド(複数可)を使用して、システムメモリ領域の高さ×幅×深さの直方体全体をキャッシュにプリフェッチし得る。
命令形式例(3)に関して、オペコードPREFETCHは、(例えば、本明細書に記述されるような)ハードウェアプロセッサに、例えば、オペコードの一部である代わりに、被演算子フィールドである次元の数を用いて、要素の多次元ブロックを多次元アレイからプリフェッチさせ得る。例えば、2である次元の被演算子フィールドを有するPREFETCH命令が、上記PREFETCH2D命令として機能し得る。例えば、3である次元の被演算子フィールドを有するPREFETCH命令は、上記PREFETCH3D命令として機能し得る。次元の被演算子フィールドは、2、3、4、5、6、7、8、9等であり得、プリフェッチされるべき要素の多次元ブロックの境界を決定するために、被演算子をスケーリングすること、例えば、ストライド被演算子(複数可)および/または領域被演算子をスケーリング(例えば、修正)することを含み得る。一実施形態では、プリフェッチされるべき要素の多次元ブロックの1つもしくは複数の次元(例えば、各次元)についてのストライドが、即値であり得、および/またはメモリ内、例えば、レジスタ内に記憶され得る。
命令形式例(4)に関して、オペコード2D_BLOCK_PREFETCHxは、(例えば、本明細書に記述されるような)ハードウェアプロセッサに、要素の2次元(2D)ブロック(例えば、正方形)を多次元(例えば、2Dまたは3D)アレイからプリフェッチさせ得る。[A]の被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから(例えば、ターゲット)キャッシュにフェッチされるべき要素の2次元ブロックのベース(例えば、システムメモリ)アドレスを示(例えば、符号化)し得る。一実施形態では、[A]の被演算子フィールドが、開始要素、例えば、境界上の要素である。例えば、半値幅について言及し得る、(または、例えば、図1のステンシル100におけるような、要素の多次元ブロックの少なくとも1つの次元における(2*k+1)の全幅に対応する)kの被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから(例えば、ターゲット)キャッシュにフェッチされるべき2D領域の次元(例えば、高さおよび幅)を示(例えば、符号化)し得る。一実施形態では、kの被演算子フィールドは、(2*k+1)が幅(例えば、デカルト座標のx方向)および高さ(例えば、デカルト座標のy方向)のそれぞれにおけるビットまたは要素の数であることを示す。n1の被演算子フィールドは、プリフェッチされるべき要素の多次元ブロックおよび/またはシステムメモリ内の多次元アレイの(例えば、ビットまたは要素の数における)ストライドを示(例えば、符号化)し得る。ストライドは、2つの次元のそれぞれにおいて異なってもよく、例えば、ストライドデータフィールドn1は、1次元(例えば、デカルト座標のx方向)についての第1のストライドおよび第2の次元(例えば、デカルト座標のy方向)についての第2のストライドを含んでもよい。xのオペコードフィールドは、要素の2次元ブロックが、命令の実行によってシステムメモリ内に位置する多次元アレイからキャッシュにフェッチ(例えば、ロード)されるという(例えば、ターゲット)キャッシュ(例えば、キャッシュレベル)の識別を示(例えば、符号化)し得る。代わりに、xは、被演算子フィールドにあってもよい。一実施形態では、ターゲットキャッシュの被演算子フィールドが、ラストレベルキャッシュまたはL3である。かかる命令の実行は、ベースアドレスにおいて開始し、かつ矩形領域の対応する行および/または列の間のストライド(複数可)を使用して、システムメモリ領域の高さ×幅の正方形全体をキャッシュにプリフェッチし得る。例えば、この命令は、(例えば、第1の被演算子によって指定されるような)アドレスAから開始する要素(例えば、キャッシュライン)の数2*k+1をキャッシュレベル「x」(この場合、xは、変数である)にプリフェッチし得る。プリフェッチされるkの要素(例えば、キャッシュライン)の組は、[A]、[A+n1]、[A+2*n1]、...[A+(k−1)*n1]のような各次元に広がる正方形であり得る。
命令形式例(5)に関して、オペコード2D_BLOCK_CENTER_PREFETCHxは、(例えば、本明細書に記述されるような)ハードウェアプロセッサに、要素の2次元(2D)ブロック(例えば、正方形)を多次元(例えば、2Dまたは3D)アレイからプリフェッチさせ得る。[A]の被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから(例えば、ターゲット)キャッシュにフェッチされるべき要素の2次元ブロックのベース(例えば、システムメモリ)アドレスを示(例えば、符号化)し得る。一実施形態では、[A]の被演算子フィールドが、要素の多次元ブロックの正方形の中心要素、例えば、図1の要素105である。例えば、上記命令形式例(4)に関して記述されるような、他の被演算子が、含まれてもよい。例えば、この命令は、(例えば、第1の被演算子によって指定されるような)アドレスAを(例えば、中心において)含むk個の要素(例えば、キャッシュライン)をキャッシュレベル「x」(この場合、xは変数である)にプリフェッチし得る。プリフェッチされるkの要素(例えば、キャッシュライン)の組は、[A−k*n1]から[A+k*n1]までのような各次元に広がる正方形であり得る。
あるデータフィールド、例えば、被演算子n1は、例えば、3Dにおける(+または−)x、y、またはzに向かって広がるような多次元ブロックについての方向を含んでもよい。
命令形式例(6)に関して、オペコード3D_BLOCK_SPARSE_PREFETCHxは、(例えば、本明細書に記述されるような)ハードウェアプロセッサに、要素のスパース3次元(スパース3D)ブロックを多次元(例えば、3Dまたは4D)アレイからプリフェッチさせ得る。[A]の被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから(例えば、ターゲット)キャッシュにフェッチされるべき(スパース)要素の3次元ブロックのベース(例えば、システムメモリ)アドレスを示(例えば、符号化)し得る。一実施形態では、[A]の被演算子フィールドが、開始要素、例えば、スパースブロックの中心における要素である。(例えば、要素の多次元ブロックの少なくとも1つの次元における半値幅または(2*k+1)の全幅を指し得る)kの被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから(例えば、ターゲット)キャッシュにフェッチされるべき3Dスパースブロックの次元(例えば、高さ、幅、および深さ、例えば、全て同じ値)を示(例えば、符号化)し得る。一実施形態では、(2*k+1)の被演算子フィールドが、幅(例えば、デカルト座標のx方向)、高さ(例えば、デカルト座標のz方向)、および深さ(例えば、デカルト座標のy方向)のそれぞれにおけるビットまたは要素の数である。n1およびn2の被演算子フィールドは、プリフェッチされるべき要素の多次元ブロックおよび/またはシステムメモリ内の多次元アレイの、第1の方向および第2の方向のそれぞれにおいて(例えば、ビットまたは要素の数における)ストライドを示(例えば、符号化)し得る。ストライドは、2つの次元のそれぞれにおいて異なってもよく、例えば、ストライドデータフィールドは、1次元(例えば、デカルト座標のx方向)についての第1のストライドn1および第2の次元(例えば、デカルト座標のy方向)についての第2のストライドn2を含んでもよい。第3の方向におけるストライドは、n1*n2であり得る。例えば、開始要素がA[x、y、z]であり、かつ進むべき要素がA[x、y、z+1]である場合、それらの間の距離は、A[x、y、z]+n1*n2*要素のサイズである。xのオペコードフィールドは、要素のスパース3次元ブロックが、命令の実行によってシステムメモリ内に位置する多次元アレイからキャッシュにフェッチ(例えば、ロード)されるという(例えば、ターゲット)キャッシュ(例えば、キャッシュレベル)の識別を示(例えば、符号化)し得る。代わりに、xは、被演算子フィールドにあってもよい。一実施形態では、ターゲットp0キャッシュの被演算子フィールドが、ラストレベルキャッシュまたはL3である。かかる命令の実行は、ベースアドレスを含んで、かつ領域の対応する行および/または列の間のストライド(複数可)を使用して、システムメモリ領域の高さ×幅×深さの(例えば、互いに直角に)交差する3つの1次元アレイをキャッシュにプリフェッチし得る。例えば、この命令は、(例えば、第1の被演算子によって指定されるような)アドレスAを含む要素(例えば、キャッシュライン)の数6*k+1をキャッシュレベル「x」(この場合、xは、変数である)にプリフェッチし得る。プリフェッチされるkの要素(例えば、キャッシュライン)の組は、例えば、図1のステンシル100におけるように、[A−k*n1]から[A+k*n1]までのような各次元に広がるスパース3Dブロックであり得る。
命令形式例(7)に関して、オペコード3D_BLOCK_PREFETCHxは、(例えば、本明細書に記述されるような)ハードウェアプロセッサに、3次元(3D)ブロックを多次元(例えば、3Dまたは4D)ブロックからプリフェッチさせ得る。[A]の被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから(例えば、ターゲット)キャッシュにフェッチされるべき要素の3次元ブロックのベース(例えば、システムメモリ)アドレスを示(例えば、符号化)し得る。一実施形態では、[A]の被演算子フィールドが、開始要素、例えば、スパースブロックの中心における要素である。(例えば、要素の多次元ブロック(例えば、ステンシル)の少なくとも1つの次元における半値幅または(2*k+1)の全幅を指し得る)kの被演算子フィールドは、命令の実行によってシステムメモリ内に位置する多次元アレイから(例えば、ターゲット)キャッシュにフェッチされるべき3Dブロックの次元(例えば、高さ、幅、および深さ、例えば、全て同じ値)を示(例えば、符号化)し得る。一実施形態では、kの被演算子フィールドは、(2*k+1)が、幅(例えば、デカルト座標のx方向)、高さ(例えば、デカルト座標のz方向)、および深さ(例えば、デカルト座標のy方向)のそれぞれにおけるビットまたは要素の数であることを示す。n1およびn2の被演算子フィールドは、プリフェッチされるべき要素の多次元ブロックおよび/またはシステムメモリ内の多次元アレイの、第1の方向および第2の方向のそれぞれにおいて(例えば、ビットまたは要素の数における)ストライドを示(例えば、符号化)し得る。ストライドは、2つの次元のそれぞれにおいて異なってもよく、例えば、ストライドデータフィールドは、1次元(例えば、デカルト座標のx方向)についての第1のストライドn1および第2の次元(例えば、デカルト座標のy方向)についての第2のストライドn2を含んでもよい。第3の方向に対するストライドは、n1*n2であり得る。xのオペコードフィールドは、要素のスパース3次元ブロックが、命令の実行によってシステムメモリ内に位置する多次元アレイからキャッシュにフェッチ(例えば、ロード)されるという(例えば、ターゲット)キャッシュ(例えば、キャッシュレベル)の識別を示(例えば、符号化)し得る。代わりに、xは、被演算子フィールドにあってもよい。一実施形態では、ターゲットキャッシュの被演算子フィールドが、ラストレベルキャッシュまたはL3である。かかる命令の実行は、ベースアドレスを含んで、かつ領域の対応する行および/または列の間のストライド(複数可)を使用して、システムメモリ領域の高さ×幅×深さの直方体をキャッシュにプリフェッチし得る。例えば、この命令は、(例えば、第1の被演算子によって指定されるような)(例えば、隅)アドレスAにおいて開始する要素(例えば、キャッシュライン)の数(2*k+1)*(2*k+1)*(2*k+1)をキャッシュレベル「x」(ここで、xは、変数である)にプリフェッチし得る。プリフェッチされるkの要素(例えば、キャッシュライン)の組は、[A]、[A+n1]、[A+2*n1]...、[A+(k−1)*n1]、[A+n1*n2]、[A+n1*n2+n1]、...[A+(k−1)*n1*n2+(k−1)*n1]から形成される直方体であり得る。代わりに、この命令は、2D_BLOCK_PREFETCHx命令の量(2*k+1)と置換されてもよい。
ターゲットキャッシュ(例えば、要素の多次元ブロックをそこにロードするキャッシュの識別)が(例えば、ターゲットキャッシュまたはxとして)上記に示されるが、それは、必須ではなく、例えば、ターゲットキャッシュフィールドが存在しなくてもよい。それに加えてまたは代えて、ターゲットキャッシュは、被演算子において暗示的であってもよく、例えば、プリフェッチオペコードは、命令を(例えば、復号の間に)実行するハードウェアプロセッサに、ターゲットキャッシュが、ある特定のキャッシュレベル(例えば、L1、L2、L3、L4等)であるということを示してもよい。一実施形態では、命令のためのターゲットキャッシュは、特定のオペコードが、ターゲットキャッシュをハードウェアプロセッサに示すオペコードと同じであり、例えば、ターゲットキャッシュは、常に、ある特定のキャッシュレベル(例えば、L1、L2、L3、L4等)である。
図2は、本開示の実施形態に従うプリフェッチユニット220を有する複数コアハードウェアプロセッサ202のブロック図200を例示する。いかなるプロセッサも、プリフェッチユニット、例えば、以下に記述されるプロセッサを含み得る。図2は、例えば、キャッシュコヒーレンス階層における、複数プロセッサコア(コアAおよびコアB)ならびにキャッシュの複数レベル(L1、L2、およびL3)の実施形態を例示する。2つのコアが描写されるが、単一または2つ以上のコアが、利用されてもよい。キャッシュの複数レベルが描写されるが、単一または任意の数のキャッシュが、利用されてもよい。キャッシュ(複数可)は、任意の様式で、例えば、物理的または論理的に集中または分散されたキャッシュとして、編成されてもよい。
ある実施形態では、プロセッサ、例えば、図面に例示されるプロセッサコアを含むプロセッサもしくは複数のプロセッサ、または任意の他のプロセッサなどが、1つまたは複数のキャッシュを含んでもよい。図2は、3つのレベル(例えば、レベル1(L1)、2(L2)、および3(L3))のキャッシュの実施形態を例示する。プロセッサは、少なくとも1つのコアおよび少なくとも1つの非コアを含んでもよい。一実施形態では、複数のコア(コアAおよびB)が、単一プロセッサ202のものである。コア(例えば、コアAおよびコアB)は、命令を実行するためのプロセッサの構成要素を含み得る。非コアは、コアにはない全てのロジックを含み得る。プロセッサコア(例えば、コアA)は、例えば、レベル1命令キャッシュ(L1I)208およびレベル1データキャッシュ(L1D)210などの構成要素を含んでもよい。コア(例えば、コアA)は、例えば、アドレス生成ユニット(AGU:address generation unit)212、変換索引バッファ(TLB:translation lookaside buffer)214、およびレベル2キャッシュ(L2)216などの構成要素を含んでもよい。コアは、キャッシュを他のコアと共有してもよいしまたは共有しなくてもよく、例えば、コアAおよびコアBは、L2 216またはL1(208、210)ではなくてレベル3キャッシュ(L3)218を共有してもよい。コアは、これらの構成要素の任意の組み合わせを含んでもよいし、またはこれらの構成要素のうちのどれも含まなくてもよい。プロセッサ202(例えば、コアAおよびコアB)は、例えば、矢印によって示されるように、システムメモリ224内のデータにアクセス(例えば、データをロードおよびストア)し得る。一実施形態では、システムメモリ224が、例えば、キャッシュ(例えば、プロセッサ202上のキャッシュ)にアクセスするコアよりも遅いアクセスおよび/またはサイクルタイムにおいて、バス上でコアと通信する。システムメモリ224は、例えば、プリフェッチ命令の実行の前にシステムメモリ224にロードされる、多次元アレイ226を含んでもよい。
アドレス生成ユニット(例えば、AGU212)、例えば、アドレス計算ユニット(ACU:address computation unit)は、例えば、コアが、システムメモリにアクセスすることを可能にするために、メモリ(例えば、システムメモリ224)にアクセスするために使用されるアドレスを計算するプロセッサ(例えば、コア)の内側の実行ユニットを指し得る。一実施形態では、AGUが、アドレスストリーム(例えば、式)を入力としてみなして、そのストリームについての(例えば、仮想)アドレスを出力する。AGU(例えば、回路)は、例えば、それの加算器、乗算器、シフタ、回転器等を利用して、例えば、加算、減算、モジュロ演算、またはビットシフトなどの算術演算を行い得る。
変換索引バッファ(例えば、TLB214)は、仮想アドレスを(例えば、システムメモリの)物理アドレスにコンバートし得る。TLBは、例えば、物理的なメモリアドレスを取得するために、変換が、存在する各仮想アドレスについて行われる必要がないように、(例えば、最近使用された)仮想から物理的なメモリアドレスへの変換を記憶するためのデータ表を含んでもよい。仮想アドレス入力が、TLB内にない場合、プロセッサは、仮想から物理的なメモリアドレスへの変換を判別するためにページウォークを行い得る。
プリフェッチユニット220は、例えば、コアの機能ユニット(例えば、実行ユニット、算術論理ユニット(ALU:Arithmetic Logic Unit)、AGU、TLB等)を利用しない、別個の機能ユニットであり得る。プリフェッチユニットは、(例えば、本明細書に開示されるような)プリフェッチ命令によって利用され得る。プリフェッチユニットは、本明細書に記述されるプリフェッチを行うための回路および/またはハードウェアロジックを含んでもよい。プリフェッチユニットは、プロセッサの一部で(例えば、非コア上に)あり得る。プリフェッチユニットは、例えば、通信リソース(図示しない)、例えば、限定されるものではないが、リング型ネットワークなどを経由して、プロセッサのコア(複数可)と通信し得る。プロセッサ202は、(例えば、プロセッサの一部として)メモリコントローラおよび/または相互接続経由で、システムメモリ224および/またはキャッシュ(例えば、図2におけるL1、L2、もしくはL3)と通信し得る。プリフェッチユニット220は、システムメモリ224内の多次元アレイ226からキャッシュ(例えば、図2におけるL1、L2、またはL3)にロード(例えば、コピー)されるべき要素の多次元ブロックのシステムメモリアドレスを出力し得る。プリフェッチユニット220は、システムメモリアドレスをプロセッサ202のメモリコントローラ(図示しない)に出力し得る。
図3は、本開示の実施形態に従うハードウェアプリフェッチユニット320のブロック図を例示する。ハードウェアプリフェッチユニットは、図示される要素の任意の組み合わせを含んでもよいし、またはそれらのいずれも含まなくてもよい。例えば、プリフェッチユニットは、要素の多次元ブロックの仕様(例えば、次元、ベースアドレス、領域境界、ストライド、および/またはターゲットキャッシュ)を入力としてみなして、要素の多次元ブロックの(例えば、物理的な)システムメモリアドレスを(例えば、ロジックもしくは状態マシン、例えば、有限状態マシン(FSM:finite state machine)などを経由して)キャッシュにプリフェッチおよび/または出力するために、例えば、要素の多次元ブロックのそのデータをキャッシュに移動するために、制御ユニット324(または制御ユニットロジック)のみを含んでもよい。一実施形態では、システムメモリアドレスの出力(例えば、メモリ要求)が、メモリ制御ユニット(例えば、メモリコントローラ)のキューまたはバッファに送信され、例えば、それらの要求を完了する。
一実施形態では、ハードウェアプリフェッチユニットが、システムメモリに接続され得、(例えば、コアのリソースを利用せずに)キャッシュへの要素の多次元ブロックの移動を引き起こし得る。
一実施形態では、プリフェッチユニットが、実行ユニットおよび/またはプロセッサパイプライン(例えば、図9Aの900)から分離している。例えば、プリフェッチ命令は、実行ユニットによって実行(例えば、開始)され得、その後、プリフェッチユニットを利用し得、アドレスがプロセッサのコア(例えば、その実行ユニット)内で生成されることなく、キャッシュに配置されるべき要素の多次元ブロックのシステムメモリアドレスを取得する。
図3において、描写されたプリフェッチユニット320が、入力322を含む。入力322は、キャッシュにプリフェッチするための要素の多次元ブロックの仕様(例えば、次元、ベースアドレス、領域境界、ストライド、および/またはターゲットキャッシュ)であり得る。仕様は、プリフェッチ命令からの被演算子および/またはオペコードデータであり得る。(任意選択的な)入力322Aは、仕様を提供するために制御ユニット324に直接的に接続し得、および/またはキューを含み得る。制御ユニット324は、仕様を仮想アドレスにコンバートするためのロジックを含み得る。一実施形態では、制御ユニット324が、仕様を仮想アドレスにコンバートするための有限状態マシン(FSM325)を含む。例えば、FSMは、各多次元ブロックサイズ(例えば、2D、3D、4D等)についてある状態(または状態の組)を有し、かつFSMの特定の状態を利用して、それに応じて、仕様についてのアドレスストリーム(例えば、式)を出力する。例えば、2D_BLOCK_PREFETCHxオペコードについての命令形式例(4)に関して、アドレスストリームは、[A]、[A+n1]、[A+2*n1]、...[A+(k−1)*n1]ならびにA、k、およびn1についての値の供給を含み得る。
アドレスストリームは、アドレス生成ユニット312に出力326され得る。AGUは、プリフェッチユニットのAGU312またはコアのAGU(例えば、図2におけるAGU212)であり得る。AGUは、アドレスストリームから(例えば、仮想)アドレスを生成し得る。上記したように、AGUのハードウェア回路は、算術または他のハードウェア構成要素、例えば、加算器、乗算器、シフトレジスタ等を含んでもよい。次いで、(例えば、全)ストリームのための仮想アドレスが、トランジション・ルックアサイド・バッファ(TLB)314(または仮想アドレスを、プロセッサがシステムメモリ(例えば、図2におけるシステムメモリ224)にアクセスするために使用し得るアドレス形式にコンバートするための他の構成要素)に(例えば、連続的に)出力328され得る。図3において、TLB314は、仮想アドレスを受信し得、それらを物理的なアドレスにコンバートし得る。一実施形態では、TLBが、プリフェッチユニットのTLB314またはコアのTLB(例えば、図2におけるTLB214)であり得る。物理的なアドレスは、例えば、出力330経由で、または300Aを経由してTLBから直接的に、プリフェッチユニット320から出力され得る。キューは、330または330Aにおいて含まれ得る。任意選択的な特徴として、プリフェッチユニット320は、構成要素またはユーザが、プリフェッチユニットの状態を判断するためにステータスレジスタ332に問い合わせ得るように、ステータスレジスタ332(または他のステータスインジケータ)を含んでもよい。一実施形態では、ステータスレジスタ332は、例えば、出力334A経由で、現在のプリフェッチ動作が進行中であること、完了したこと、失敗したこと等を示してもよい。一実施形態では、ステータスレジスタ332は、プリフェッチユニットがビジーまたはビジーでないことを示してもよい。一実施形態では、ステータスレジスタからの出力および/または問い合わせ入力が、プリフェッチユニット出力334経由で発生し得る。制御ユニット324は、ステータスレジスタ332を制御(例えば、更新)し得る。
本明細書における通信のための矢印の使用において、単一方向の矢印は、両方向における通信(例えば、信号の送信および/または受信)を許可し得ることに留意する。
図4は、本開示の実施形態に従って要素の多次元ブロックを多次元アレイからプリフェッチするフロー図400を例示する。入力402は、プリフェッチされるべき要素の多次元ブロックの仕様(例えば、次元、ベースアドレス、領域境界、ストライド、および/またはターゲットキャッシュ)であり得る。それらの仕様は、次いで、(例えば、制御ユニット324によって)アドレスストリーム404を作り出すために使用され得る。アドレスストリームは、次いで、(例えば、仮想)アドレスを生成するために使用され得る。ストリームは、ストリームの全アドレスが、キャッシュにプリフェッチされる410まで、すなわち、終了(例えば、完了)される412まで、408において繰り返し得る。一実施形態では、プリフェッチロジック(例えば、FSM)が、フロー図400における動作の特定または全ての性能を制御し得る。
更なる例として、以下は、3つの可能なハードウェアロジック(例えば、FSM)実現形態である。第1に、ロジック(例えば、FSM)は、アドレス(例えば、アドレスA(ベースアドレス)+64、他の実施例についての上記アドレスストリームを参照)を計算するための整数加算器(および/または乗算器等)と、メモリサブシステム(例えば、コントローラ)に送信する前に仮想アドレスを物理的なアドレスに変換するためのTLBと、を含み得る。この実現形態では、FSMが、自己完結的であり得、プロセッサの内側の別個の機能的ユニットとして開発され得る。一実施形態では、プリフェッチユニットのTLBが、プロセッサのTLB(複数可)とコヒーレントに保たれる。第2に、ロジック(例えば、FSM)は、仮想アドレスを生成するためにAGU(例えば、整数加算器)を含有し得、次いで、仮想アドレスは、(例えば、TLB経由での)仮想から物理への変換のためにプロセッサのメモリパイプラインに送り込まれ得、ならびに/または(例えば、それぞれ交互に)キャッシュおよびシステムメモリアクセスのためにキューに入れられ得る。第3に、ロジック(例えば、FSM)は、アドレスストリームを生成するために制御ユニットを含み得るが、システムメモリの仮想アドレスを生成するためにプロセッサコアのAGUと、キャッシュおよびシステムメモリアクセスのためにキューに入れられる物理的なシステムメモリ要求を生成するためのプロセッサコアのTLBと、を利用し得る。
図5は、本開示の実施形態に従って要素の多次元ブロックを多次元アレイからプリフェッチするフロー図500を例示する。フロー図は、復号ユニットを用いて、要素の多次元ブロックを多次元アレイからキャッシュにプリフェッチするためのプリフェッチ命令を復号することであって、プリフェッチ命令の少なくとも1つの被演算子が、要素の多次元ブロックのある要素のシステムメモリアドレス、要素の多次元ブロックのストライド、および要素の多次元ブロックの境界を示すものである、復号すること502、ならびに、実行ユニットを用いて、プリフェッチ命令を実行して、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成し、かつ要素の多次元ブロックをシステムメモリアドレスからキャッシュにロードすること504、を含む。
本明細書に開示されるハードウェアプリフェッチ方法および装置は、データの規則的な形状の(例えば、1D、2D、または3D)ブロック上で、これらのブロック内の規則的なアクセスパターンを使用して利用され得る。隣接ブロックは、(例えば、畳み込み用途において)連続的あるいは(例えば、スパースソルバー、スパースブロック行列ベクトル積、または地震モデリングおよび予測用途において)不連続的のいずれかであり得る。
特定の実施形態では、プリフェッチ命令が、要素の多次元ブロックをキャッシュレベルのうちの1つまたは複数にプリフェッチし得る。一実施形態では、キャッシュレベルが、犠牲キャッシュである。犠牲キャッシュは、ラストレベルキャッシュ(LLC:last level cache)、例えば、図2におけるL3 218であり得る。一実施例では、(例えば、マクロ)命令が、要素の多次元ブロックをシステムメモリから犠牲キャッシュにプリフェッチする。プロセッサ(例えば、コア)が、(例えば、かなり遅い)システムメモリへのアクセスの前にデータ(例えば、キャッシュライン)について(例えば、最高(例えば、図2のL1)から最低(例えば、図2のL3)までキャッシュを調べ得るので、犠牲キャッシュへのプリフェッチは、システムメモリにアクセスすることなく、かつ問題のそのデータがキャッシュ内にあるという他の通知をプロセッサに提供することなく、プロセッサが、そのデータにアクセスすることを可能にし得る。別の実施形態では、要素の多次元ブロックのプリフェッチが、要素の多次元ブロックが(例えば、キャッシュ内のそれらのキャッシュラインのタグディレクトリを使用して)キャッシュにロードされることをプロセッサ(例えば、コア)に通知することを含んでもよい。
推測プリフェッチデータセットがキャッシュに生成および配置されている可能性がある一実施形態では、本明細書に記述されるプリフェッチ命令、方法、および装置が、キャッシュ内のその推測プリフェッチデータセットを要素の多次元ブロックと置換してもよい。既存の(例えば、利用できない)キャッシュの交換は、例えば、(例えば、推測プリフェッチデータセットおよび/または)要素の多次元ブロックのサイズに関するキャッシュの限定されたサイズ、システムメモリからデータをフェッチするための限定されたリソース、および不正確なプリフェッチによって生じられる電力消費のために、有用であり得る。一実施形態では、推測プリフェッチデータセットおよび要素の多次元ブロックが、このデータ上で動作すべき同じフューチャ命令に対応する。
特定の実施形態では、本明細書に開示されるハードウェアプリフェッチ方法および装置が、例えば、単に、要素の多次元ブロック全体のための連続な仮想アドレスのみならず、(例えば、仮想)アドレス間の一定ではない差異を伴う複数のメモリ要求を生成し得る。特定の実施形態では、本明細書におけるハードウェア方法および装置が、単に、乱数を生成するのみならず、その代わりに、(例えば、本明細書に記述されるような)ある特定の固定パターンを対象にしてもよい。
特定の実施形態では、本明細書に開示されるハードウェアプリフェッチ方法および装置が、キャッシュミス率を削減し得、例えば、異なるサイズのブロックの、メモリ内にランダムに位置する要素の(例えば、規則的な形状の(1D、2D、または3D))ブロック上で動作する演算についての性能を改善し得る。各ブロック内のアクセスパターンは、規則的(例えば、逐次的またはストライド式)であり得るが、演算(例えば、ステンシル演算)が次のかかるブロックに動く際に、アクセスパターンは、割り込まれることになり得、推測プリフェッチエンジンが、本明細書に開示されるような(例えば、プログラマーが)決定した要素の多次元ブロックのプリフェッチを可能にするプリフェッチ命令とは対照的に、新しいブロック内での別のアクセスパターンの学習を必要とし(例えば、新しいブロック内の正確なデータをキャッシュにないようにさせ)得る。
例えば、同じストライドを3回見ることを、ストリームを学習して、そのストライドを用いて推測的にプリフェッチを開始するために、必要とするプリフェッチを考える。新しいブロックに動いた後、ある演算が、キャッシュ内のデータの3つのミスを経験し得る。データがメモリから来る場合、メモリアクセスについて300サイクルのレイテンシを想定すると、プロセッサパイプラインは、最大1000サイクルまで停止し得る。ブロック内の計算が500サイクル行われる場合、データが、そのデータについての演算が実行されている時間またはその時間の前にキャッシュ内で利用可能である場合と比べて、3倍の性能損失(例えば、1500/500)が存在する。
一実施形態では、疎線形(sparse linear)法が、式M*x=bの疎系を解くための直接的な方法である。一実施形態では、アレイ(例えば、行列)Mが、リオーダされる。更に、リオーダされた行列の列は、スーパーブロックに区分けされ得、例えば、この場合、各スーパーブロックが、同じ非ゼロ構造を有する連続した列の小さなサブセットである。同じ非ゼロ構造に起因して、これらのスーパーブロックは、例えば、スーパーブロックの個々の行/列にアクセスするための追加的な指標付けデータ構造を有する、比較的長くて狭い密行列として記憶され得る。これらの行列の幅および高さは、非ゼロ構造のみならず、行列内のそれらの位置に依存し得る。片側(例えば、左)のスーパーノードは、他方側(例えば、右)のスーパーノードよりも(例えば、かなり)小さい場合がある。一実施例では、スーパーノードサイズが、1x1と512x16との間で異なる。マルチコアプロセッサ上の並列処理にさらすために、(例えば、大きな)スーパーノードが、可変次元の(例えば、小さな)密行列に更に分割され得る。両方のスーパーノードは、例えば、消去ツリー順序によって規定されるような、ランダムな様式でアクセスされ得るので、推測プリフェッチは、例えば、あるスーパーノードから別のスーパーノードへのランダムな遷移を捕らえないために、正確なデータをプリフェッチしない可能性があり、それゆえ、次のスーパーノードにおける開始をプリフェッチし得る。更に、スーパーノードのサイズは、小さいおよび/または異なる可能性がある。スーパーノードは、三角形の2Dアレイを含んでもよい。本明細書における特定の実施形態は、(例えば、三角形の2D領域のための)スーパーノードデータのプリフェッチを可能にし得る。
本開示の実施形態は、(例えば、グリッドレベルのセルをプリフェッチするための)幾何学的なマルチグリッド方法のためのデータのプリフェッチ、畳み込みをベースとするカーネル、例えば、限定されるものではないが、Intel(登録商標)インテグレーテッド・パフォーマンス・プリミティブ(IPP:Integrated Performance Primitives)におけるもの、計算流体力学(CFD:computational fluid dynamics)における高位の方法、および基本線形代数サブプログラム(Basic Linear Algebra Subprograms)(例えば、BLAS3)高密度線形代数カーネルの高性能な実現形態などを可能にする。本明細書における特定の実施形態によるプリフェッチは、畳み込みのために利用され得るが、本開示は、そのように限定されない。例えば、特定の実施形態は、逐次的またはほぼ逐次的なアクセスパターンを呈しないデータをプリフェッチするために利用されてもよい。
一実施形態では、本開示に従う複数のプリフェッチ命令のためのプリフェッチ被演算子が、別個のメモリ位置内に(例えば、レジスタ内に)記憶され、各プリフェッチ命令が、例えば、所望の時間において、プリフェッチされたデータの各組を提供するために、被演算子のそのそれぞれの組について実行され得る。特定の実施形態では、これは、各ブロックが、他の(例えば、前にアクセスされた)ブロックとは異なる非逐次的(例えば、不規則的)なアクセスパターンのものである、要素の多次元ブロックのプリフェッチを可能にし得る。
更に別の実施形態では、3Dにおける空間適応性が、例えば、地震モデリングおよび予測用途における、柔軟な非構造化多面体(例えば、四面体または六面体)メッシュによって実現され得る。四面体メッシュは、例えば、4つの三角形面の、多次元アレイを形成し得る。六面体メッシュは、例えば、6つの面の、多次元アレイを形成し得る。本明細書における特定の実施形態は、(例えば、メッシュのある面についての)そのデータのプリフェッチを可能にし得る。例えば、本開示の方法および装置は、グローバル演算子および時間積分未知量のためのプリフェッチ演算子を提供してもよい。アクセス構造は、メッシュ(例えば、それは、実行時間において既知であるが、コンパイル時間において既知ではない)によって決定され得る。多面体(例えば、四面体または六面体)の第i番目の面が処理されるが、本開示は、(i+1)番目の面のために必要とされる行列のある範囲のプリフェッチを提供してもよい。要求された行列は、(例えば、行列の疎性パターンに従って)可変サイズを有し得るので、2Dプリフェッチが、利用されてもよい。
一実施形態では、ブロック圧縮行(BCR:block compressed row)形式および複数右辺を使用する疎行列ベクトル積が、多次元アレイの非連続的なブロックを含んでもよい。本明細書における特定の実施形態は、その非連続的なデータのプリフェッチを可能にし得る。
一実施形態では、ハードウェアプロセッサが、プリフェッチ命令を復号して、要素の多次元ブロックを多次元アレイからキャッシュにプリフェッチするための復号器であって、プリフェッチ命令の少なくとも1つの被演算子が、要素の多次元ブロックのある要素のシステムメモリアドレス、要素の多次元ブロックのストライド、および要素の多次元ブロックの境界を示すものである、復号器と、プリフェッチ命令を実行して、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成し、かつ要素の多次元ブロックをシステムメモリアドレスからキャッシュにロードするための実行ユニットと、を含む。実行ユニットは、ハードウェアプリフェッチユニットに、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成させる、および/または要素の多次元ブロックをシステムメモリアドレスからキャッシュにロードさせるためのプリフェッチ命令を実行し得る。ハードウェアプロセッサは、状態マシンから要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するためのプリフェッチユニットを含んでもよい。プリフェッチユニットは、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するための加算器を含んでもよい。プリフェッチユニットは、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するためのアドレス生成ユニットを含んでもよい。命令の少なくとも1つの被演算子は、要素の多次元ブロックをロードするためのキャッシュのあるレベルを示し得る。ストライドは、第1の次元における第1のストライドと、第2の次元における異なる第2のストライドと、を含み得る。実行ユニットは、要素の多次元ブロックを犠牲キャッシュにロードしてもよい。実行ユニットは、キャッシュ内の推測プリフェッチデータセットを要素の多次元ブロックと置換してもよい。
別の実施形態では、方法が、復号ユニットを用いて、要素の多次元ブロックを多次元アレイからキャッシュにプリフェッチするためのプリフェッチ命令を復号することであって、プリフェッチ命令の少なくとも1つの被演算子が、要素の多次元ブロックのある要素のシステムメモリアドレス、要素の多次元ブロックのストライド、および要素の多次元ブロックの境界を示すものである、復号することと、実行ユニットを用いて、プリフェッチ命令を実行して、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成し、かつ要素の多次元ブロックをシステムメモリアドレスからキャッシュにロードすることと、を含む。方法は、状態マシンから要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するためのプリフェッチユニットを提供することを含んでもよい。プリフェッチユニットは、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するための加算器を含んでもよい。プリフェッチユニットは、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するためのアドレス生成ユニットを含んでもよい。命令の少なくとも1つの被演算子は、要素の多次元ブロックをロードするためのキャッシュのあるレベルを示し得る。ストライドは、第1の次元における第1のストライドと、第2の次元における異なる第2のストライドと、を含み得る。実行ユニットは、要素の多次元ブロックを犠牲キャッシュにロードしてもよい。実行ユニットは、キャッシュ内の推測プリフェッチデータセットを要素の多次元ブロックと置換してもよい。
更に別の実施形態では、装置が、1組の1つまたは複数のプロセッサと、1組の1つまたは複数のデータ記憶デバイスであって、1組のプロセッサによって実行されるときに、1組の1つまたは複数のプロセッサに、以下の、復号ユニットを用いて、要素の多次元ブロックを多次元アレイからキャッシュにプリフェッチするためのプリフェッチ命令を復号することであって、プリフェッチ命令の少なくとも1つの被演算子が、要素の多次元ブロックのある要素のシステムメモリアドレス、要素の多次元ブロックのストライド、および要素の多次元ブロックの境界を示すものである、復号することと、実行ユニットを用いて、プリフェッチ命令を実行して、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成し、かつ要素の多次元ブロックをシステムメモリアドレスからキャッシュにロードすることと、を行わせる、コードを記憶する1組の1つまたは複数のデータ記憶デバイスと、を含む。1組のデータ記憶デバイスが、1組のプロセッサによって実行されるときに、1組のプロセッサに、以下の、状態マシンから要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するためのプリフェッチユニットを提供することを更に含むことを行わせる、コードを更に記憶してもよい。1組のデータ記憶デバイスが、1組のプロセッサによって実行されるときに、1組のプロセッサに、以下の、プリフェッチユニットが、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するための加算器を更に備えることを行わせる、コードを更に記憶してもよい。1組のデータ記憶デバイスが、1組のプロセッサによって実行されるときに、1組のプロセッサに、以下の、プリフェッチユニットが、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成するためのアドレス生成ユニットを更に備えることを行わせる、コードを更に記憶してもよい。1組のデータ記憶デバイスが、1組のプロセッサによって実行されるときに、1組のプロセッサに、以下の、命令の少なくとも1つの被演算子が、要素の多次元ブロックをロードするためのキャッシュのあるレベルを示すものであることを行わせる、コードを更に記憶してもよい。1組のデータ記憶デバイスが、1組のプロセッサによって実行されるときに、1組のプロセッサに、以下の、ストライドが、第1の次元における第1のストライドおよび第2の次元における異なる第2のストライドを含むことを行わせる、コードを更に記憶してもよい。1組のデータ記憶デバイスが、1組のプロセッサによって実行されるときに、1組のプロセッサに、以下の、実行ユニットが、要素の多次元ブロックを犠牲キャッシュにロードするものであることを行わせる、コードを更に記憶してもよい。1組のデータ記憶デバイスが、1組のプロセッサによって実行されるときに、1組のプロセッサに、以下の、実行ユニットが、キャッシュ内の推測プリフェッチデータセットを要素の多次元ブロックと置換するものであることを行わせる、コードを更に記憶してもよい。
別の実施形態では、ハードウェアプロセッサが、要素の多次元ブロックを多次元アレイからキャッシュにプリフェッチするためのプリフェッチ命令を復号するための手段であって、プリフェッチ命令の少なくとも1つの被演算子が、要素の多次元ブロックのある要素のシステムメモリアドレス、要素の多次元ブロックのストライド、および要素の多次元ブロックの境界を示すものである、復号するための手段と、プリフェッチ命令を実行して、要素の多次元ブロックの他の要素のシステムメモリアドレスを生成し、かつ要素の多次元ブロックをシステムメモリアドレスからキャッシュにロードするための手段と、を含む。
更に別の実施形態では、マシン可読記憶媒体が、実行されるときに、マシンに、本明細書に開示される方法を行わせる、コードを含む。
命令セットは、1つまたは複数の命令形式を含んでもよい。所与の命令形式は、とりわけ、行われるべき演算(例えば、オペコード)およびその演算が行われるべき被演算子(複数可)を指定するための様々なフィールド(例えば、ビットの数、ビットの位置)ならびに/または他のデータフィールド(複数可)(例えば、マスク)を決定し得る。いくつかの命令形式が、命令テンプレート(またはサブ形式)の決定にもかかわらず、更に分解される。例えば、所与の命令形式の命令テンプレートは、命令形式のフィールドの異なるサブセットを有するように決定され得る(含まれるフィールドは、典型的には、同じ位にあるが、含まれるフィールドが少ないので、少なくともいくらかは、異なるビット位置を有する)、および/または異なって解釈される所与のフィールドを有するように決定されてもよい。それゆえ、ISAの各命令は、所与の命令形式を使用して(および、決定される場合、その命令形式の命令テンプレートの所与の1つにおいて)表現され、演算および被演算子を指定するためのフィールドを含む。例えば、例示的なADD命令は、ある特定のオペコードおよびオペコードフィールドを含む命令形式を有し、そのオペコードおよび被演算子フィールドを指定して、被演算子(ソース1/宛先およびソース2)を選択する。命令ストリーム内のこのADD命令の発生は、特定の被演算子を選択する被演算子フィールド内に特定の内容を有する。Advanced Vector Extensions(AVX)(AVX1およびAVX2)として呼ばれ、かつVector Extensions(VEX)コード化スキームを使用する1組のSIMD拡張が、リリースおよび/または公開されている(例えば、Intel(登録商標)64 and IA−32 Architectures Software Developer's Manual、2014年9月を参照、およびIntel(登録商標)Advanced Vector Extensions Programming Reference、2014年10月を参照)。
例示的な命令形式 本明細書に記載される命令(複数可)の実施形態は、異なる形式で具体化され得る。更に、例示的なシステム、アーキテクチャ、およびパイプラインが、以下に詳述される。命令(複数可)の実施形態は、かかるシステム、アーキテクチャ、およびパイプライン上で実行され得るが、詳述されるものに限定されない。
一般的なベクトルフレンドリ命令形式 ベクトルフレンドリ命令形式は、ベクトル命令に適した命令形式である(例えば、ベクトル演算に特有の特定のフィールドが存在する)。ベクトルおよびスカラー演算の両方がベクトルフレンドリ命令形式によってサポートされる実施形態が記載されるが、代替の実施形態は、ベクトルフレンドリ命令形式のベクトル演算のみを使用する。
図6A〜6Bは、本開示の実施形態に従う一般的なベクトルフレンドリ命令形式およびそれの命令テンプレートを例示するブロック図である。図6Aは、本開示の実施形態に従う一般的なベクトルフレンドリ命令形式およびそれのクラスA命令テンプレートを例示するブロック図である。一方、図6Bは、本開示の実施形態に従う一般的なベクトルフレンドリ命令形式およびそれのクラスB命令テンプレートを例示するブロック図である。具体的には、それについての一般的なベクトルフレンドリ命令形式600が、決定されたクラスAおよびクラスB命令テンプレートであり、それらの両方とも、メモリアクセス605命令テンプレートおよびメモリアクセス620命令テンプレートを含まない。ベクトルフレンドリ命令形式との関連で一般的という用語は、任意の特定の命令セットに拘束されない命令形式のことを言う。
ベクトルフレンドリ命令形式が、以下、すなわち、32ビット(4バイト)もしくは64ビット(8バイト)データ要素幅(またはサイズ)を有する64バイトベクトル被演算子長(またはサイズ)(それゆえ、64バイトベクトルは、16ダブルワードサイズ要素または代わりに、8クワドワードサイズ要素のいずれかから成る)、16ビット(2バイト)もしくは8ビット(1バイト)データ要素幅(またはサイズ)を有する64バイトベクトル被演算子長(またはサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、もしくは8ビット(1バイト)データ要素幅(またはサイズ)を有する32バイトベクトル被演算子長(またはサイズ)、および32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、もしくは8ビット(1バイト)データ要素幅(またはサイズ)を有する16バイトベクトル被演算子長(またはサイズ)をサポートする、本開示の実施形態が記載されるが、代替の実施形態は、より多くの、より少ない、または異なるデータ要素幅(例えば、128ビット(16バイト)データ要素幅)を有する、より多くの、より少ない、および/または異なるベクトル被演算子サイズ(例えば、256バイトベクトル被演算子)をサポートしてもよい。
図6AにおけるクラスA命令テンプレートは、1)非メモリアクセス605命令テンプレート内に、非メモリアクセス、全丸め制御型演算610命令テンプレートおよび非メモリアクセス、データ変形型演算615命令テンプレートが示され、ならびに2)メモリアクセス620命令テンプレート内に、メモリアクセス、テンポラル625命令テンプレートおよびメモリアクセス、ノンテンポラル630命令テンプレートが示されるものを含む。図6BにおけるクラスB命令テンプレートは、1)非メモリアクセス605命令テンプレート内に、非メモリアクセス、書込みマスク制御、部分丸め制御型演算612命令テンプレートおよび非メモリアクセス、書込みマスク制御、Vサイズ型演算617命令テンプレートが示され、ならびに2)メモリアクセス620命令テンプレート内に、メモリアクセス、書込みマスク制御627命令テンプレートが示されるものを含む。
一般的なベクトルフレンドリ命令形式600は、図6A〜6Bに例示される順序において下記に列挙される以下のフィールドを含む。
形式フィールド640−このフィールドにおけるある特定の値(命令形式識別子値)は、ベクトルフレンドリ命令形式、および、それゆえ、命令ストリーム内のベクトルフレンドリ命令形式における命令の発生を固有に識別する。そのように、このフィールドは、それがベクトルフレンドリ命令形式のみを有する命令セットに必要とされないという意味において任意選択的である。
ベース演算フィールド642−その内容は、異なるベース演算を区別する。
レジスタ指標フィールド644−その内容は、直接的にまたはアドレス生成を通して、ソースおよび宛先被演算子の位置を、それらがレジスタ内またはメモリ内にあろうが、指定する。これらは、P×Q(例えば、32×512、16×128、32×1024、64×1024)レジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。一実施形態では、Nが、最大3個までのソースおよび1つの宛先レジスタであり得るが、代替の実施形態は、より多くのまたはより少ないソースおよび宛先レジスタをサポートしてもよい(例えば、最大2個までのソースをサポートしてもよく、その場合、これらのソースの1つが宛先としても機能し、最大3個までのソースをサポートしてもよく、その場合、これらのソースのうちの1つが宛先としても機能し、最大2個までのソースおよび1つの宛先をサポートしてもよい)。
修飾子フィールド646−その内容は、メモリアクセスを指定する一般的なベクトル命令形式における命令の発生をそうではないものから、すなわち、非メモリアクセス605命令テンプレートとメモリアクセス620命令テンプレートとの間で区別する。メモリアクセス演算は、(いくつかの場合では、レジスタ内の値を使用してソースおよび/または宛先アドレスを指定して)メモリ階層を読取るおよび/またはそれに書込むが、非メモリアクセス演算は、しない(例えば、ソースおよび宛先が、レジスタである)。一実施形態では、このフィールドはまた、メモリアドレス計算を行うために3つの異なる手法間で選択するが、代替の実施形態は、メモリアドレス計算を行うためにより多くの、より少ない、または異なる手法をサポートしてもよい。
増補演算フィールド650−その内容は、様々な異なる演算のうちのどれがベース演算に加えて行われるかを区別する。このフィールドは、コンテキスト固有のものである。本開示の一実施形態では、このフィールドが、クラスフィールド668、アルファフィールド652、およびベータフィールド654に分割される。増補演算フィールド650は、演算の共通グループが、2、3、または4つの命令ではなくて、単一命令において行われることを可能にする。
スケールフィールド660−その内容は、メモリアドレス生成のための(例えば、2スケール*指標+ベースを使用するアドレス生成のための)指標フィールドの内容のスケーリングを可能にする。
変位フィールド662A−その内容は、メモリアドレス生成の一部として(例えば、2スケール*指標+ベース+変位を使用するアドレス生成のために)使用される。
変位因子フィールド662B(変位因子フィールド662Bの真上への変位フィールド662Aの並置は、一方または他方が使用されることを示すことに留意する)−その内容は、アドレス生成の一部として使用される。それは、メモリアクセス(N)のサイズによってスケールされるべき変位因子を指定する。その場合、Nは、(例えば、2スケール*指標+ベース+スケールされた変位を使用するアドレス生成のための)メモリアクセスにおけるバイトの数である。冗長な下位ビットは無視され、それゆえ、変位因子フィールドの内容が、有効アドレスの計算に使用されるべき最終変位を生成するために、メモリ被演算子総サイズ(N)で乗算される。Nの値は、(本明細書に後に記載される)フルオペコードフィールド674およびデータ操作フィールド654Cに基づいて実行時間にプロセッサハードウェアによって決定される。変位フィールド662Aおよび変位因子フィールド662Bは、それらが非メモリアクセス605命令テンプレートのために使用されないという意味において任意選択的であり、および/または異なる実施形態が、それらの2つのうちの一方のみを実装してもよいしまたはそれらのいずれも実装しなくてもよい。
データ要素幅フィールド664−その内容は、(いくつかの実施形態では、全ての命令について、他の実施形態では、命令のうちのいくつかのみについて)いくらかのデータ要素幅のうちのどれが使用されるべきかを区別する。このフィールドは、ただ1つのデータ要素幅がサポートされるおよび/またはデータ要素幅がオペコードのいくらかの態様を使用してサポートされる場合に、それが必要とされないという意味において任意選択的である。
書込みマスクフィールド670−その内容は、データ要素位置毎に基づいて、宛先ベクトル被演算子内のそのデータ要素位置が、ベース演算および増補演算の結果を反映するかどうかを制御する。クラスA命令テンプレートは、マージング書込みマスキング(merging−writemasking)をサポートする一方で、クラスB命令テンプレートは、マージングおよびゼロイング(zeroing)書込みマスキングの両方をサポートする。マージングの場合、ベクトルマスクは、宛先内の任意の組の要素が、(ベース演算および増補演算によって指定される)任意の演算の実行の間の更新から保護されることを可能にする。他の一実施形態では、対応するマスクビットが0を有する場合に、宛先の各要素の古い値を保持する。対照的に、ゼロイングの場合、ベクトルマスクは、宛先内の任意の組の要素が、(ベース演算および増補演算によって指定される)任意の演算の実行の間に零化されることを可能にする。一実施形態では、対応するマスクビットが0値を有する場合に、宛先の要素が0に設定される。この機能の一部は、行われている演算のベクトル長を制御できることである(すなわち、要素のスパンが、第1のものから最後のものまで修正される)。しかしながら、修正されるそれらの要素が連続的である必要はない。それゆえ、書込みマスクフィールド670は、ロード、ストア、算術、ロジック等を含む、部分的なベクトル演算を可能にする。書込みマスクフィールド670の内容が、使用されるべき書込みマスクを含有するいくらかの書込みマスクレジスタのうちの1つを選択する(それゆえ、書込みマスクフィールド670の内容は、行われるべきそのマスキングを間接的に識別する)本開示の実施形態が記載されるが、代替の実施形態は、その代わりにまたは更に、マスク書込みフィールド670の内容が、行われるべきマスキングを直接的に指定することを可能にする。
即時フィールド672−その内容は、即値の仕様を可能にする。このフィールドは、それが即値をサポートしない一般的なベクトルフレンドリ形式の実現形態において存在せず、かつ即値を使用しない命令において存在しないという意味において任意選択的である。
クラスフィールド668−その内容は、命令の異なるクラスを区別する。図6A〜6Bに関して、このフィールドの内容は、クラスAおよびクラスB命令から選択する。図6A〜6Bにおいて、丸隅正方形が、ある特定の値がフィールド内に存在すること(例えば、図6A〜6Bにおける、それぞれ、クラスフィールド668のためのクラスA668AおよびクラスB668B)を示すために使用される。
クラスAの命令テンプレート クラスAの非メモリアクセス605命令テンプレートの場合には、アルファフィールド652が、RSフィールド652Aとして解釈され、それの内容が、異なる増補演算型のどれが行われるべきかを区別する(例えば、丸め652A.1およびデータ変形652A.2が、それぞれ、非メモリアクセス、丸め型演算610および非メモリアクセス、データ変形型演算615命令テンプレートについて指定される)。一方で、ベータフィールド654は、指定された型の演算のどれが行われるべきかを区別する。非メモリアクセス605命令テンプレートには、スケールフィールド660、変位フィールド662A、および変位スケールフィールド662Bが、存在しない。
非メモリアクセス命令テンプレート−全丸め制御型演算 非メモリアクセス全丸め制御型演算610命令テンプレートでは、ベータフィールド654が、丸め制御フィールド654Aとして解釈され、それの内容(複数可)が静的丸めを提供する。本開示の記載される実施形態では、丸め制御フィールド654Aが、全浮動小数点例外抑制(SAE:suppress all floating point exceptions)フィールド656および丸め演算制御フィールド658を含むが、代替の実施形態は、これらの概念の両方をサポートし得、同じフィールドに符号化し得るか、あるいはこれらの概念/フィールドのうちの一方または他方のみを有し得る(例えば、丸め演算制御フィールド658のみを有し得る)。
SAEフィールド656−その内容は、SAEフィールド656の内容が、抑制がイネーブルにされ、所与の命令が、いかなる種類の浮動小数点例外フラグも報告せず、かつ、いかなる浮動小数点例外ハンドラも発生させないことを示すときに、例外事象報告をディスエーブルにするか否かを区別する。
丸め演算制御フィールド658−その内容が、一群の丸め演算のうちのどれ(例えば、切り上げ、切り捨て、ゼロへの丸め、および最近接への丸め)を行うかを区別する。それゆえ、丸め演算制御フィールド658は、命令毎に基づく丸めモードの変更を可能にする。プロセッサが、丸めモードを指定するための制御レジスタを含む、本開示の一実施形態では、丸め演算制御フィールド650の内容が、そのレジスタ値をオーバーライドする。
非メモリアクセス命令テンプレート−データ変形型演算 非メモリアクセスデータ変形型演算615命令テンプレートでは、ベータフィールド654が、データ変形フィールド654Bとして解釈され、それの内容が、いくらかのデータ変形のうちのどれが行われるべきか(例えば、非データ変形、スウィズル、ブロードキャスト)を区別する。
クラスAのメモリアクセス620命令テンプレートの場合では、アルファフィールド652が、エビクションヒントフィールド652Bとして解釈され、それの内容が、エビクションヒントのうちのどれが使用されるべきかを区別する(図6Aでは、テンポラル652B.1およびノンテンポラル652B.2が、それぞれ、メモリアクセス、テンポラル625命令テンプレートおよびメモリアクセス、ノンテンポラル630命令テンプレートについて指定される)。一方で、ベータフィールド654は、データ操作フィールド654Cとして解釈され、それの内容が、(プリミティブとしても知られる)いくらかのデータ操作演算のうちのどれが行われるべきか(例えば、非操作、ブロードキャスト、ソースのアップコンバージョン、および宛先のダウンコンバージョン)を区別する。メモリアクセス620命令テンプレートは、スケールフィールド660、および任意選択的に変位フィールド662Aまたは変位スケールフィールド662Bを含む。
ベクトルメモリ命令は、コンバージョンサポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを行う。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素毎の様式でデータをメモリから/に転送し、実際に転送される要素が、書込みマスクとして選択されるベクトルマスクの内容によって規定される。
メモリアクセス命令テンプレート−テンポラル テンポラルデータは、キャッシングから利益を得るために十分に早く再使用される可能性が高いデータである。しかしながら、これは、ヒントであり、異なるプロセッサが、それを、ヒントを全体的に無視することを含む異なる手法で実現し得る。
メモリアクセス命令テンプレート−ノンテンポラル ノンテンポラルデータは、第1のレベルキャッシュにおけるキャッシングから利益を得るために十分に早く再使用される可能性が低いデータであり、エビクションのための優先順位を与えられるべきである。しかしながら、これは、ヒントであり、異なるプロセッサが、それを、ヒントを全体的に無視することを含む異なる手法で実現し得る。
クラスBの命令テンプレート クラスBの命令テンプレートの場合では、アルファフィールド652が、書込みマスク制御(Z)フィールド652Cとして解釈され、それの内容が、書込みマスクフィールド670によって制御される書込みマスキングが、マージングまたはゼロイングであるべきかどうかを区別する。
クラスBの非メモリアクセス605命令テンプレートの場合では、ベータフィールド654の一部が、RLフィールド657Aとして解釈され、それの内容が、異なる増補演算型のうちのどれが行われるべきかを区別する(例えば、丸め657A.1およびベクトル長(VSIZE)657A.2が、それぞれ、非メモリアクセス、書込みマスク制御、部分丸め制御型演算612命令テンプレート、および非メモリアクセス、書込みマスク制御、VSIZE型演算617命令テンプレートについて指定される)。一方で、ベータフィールド654の残りは、指定された型の演算のうちのどれが行われるべきかを区別する。非メモリアクセス605命令テンプレートには、スケールフィールド660、変位フィールド662A、および変位スケールフィールド662Bが、存在しない。
非メモリアクセス、書込みマスク制御、部分丸め制御型演算610命令テンプレートでは、ベータフィールド654の残りが、丸め演算フィールド659Aとして解釈され、例外事象報告がディスエーブルにされる(所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、かつ、いかなる浮動小数点例外ハンドラも発生させない)。
丸め演算制御フィールド659A−丸め演算制御フィールド658と同じように、その内容が、一群の丸め演算のうちのどれ(例えば、切り上げ、切り捨て、ゼロへの丸め、および最近接への丸め)を行うかを区別する。それゆえ、丸め演算制御フィールド659Aは、命令毎に基づく丸めモードの変更を可能にする。プロセッサが、丸めモードを指定するための制御レジスタを含む、本開示の一実施形態では、丸め演算制御フィールド650の内容が、そのレジスタ値をオーバーライドする。
非メモリアクセス、書込みマスク制御、VSIZE型演算617命令テンプレートでは、ベータフィールド654の残りが、ベクトル長フィールド659Bとして解釈され、それの内容が、いくらかのデータベクトル長のうちのどれ(例えば、128、256、または512バイト)が行われるべきかを区別する。
クラスBのメモリアクセス620命令テンプレートの場合では、ベータフィールド654の一部が、ブロードキャストフィールド657Bとして解釈され、それの内容が、ブロードキャスト型データ操作演算が行われるべきか否かを区別する。一方で、ベータフィールド654の残りは、ベクトル長フィールド659Bとして解釈される。メモリアクセス620命令テンプレートは、スケールフィールド660、および任意選択的に変位フィールド662Aまたは変位スケールフィールド662Bを含む。
一般的なベクトルフレンドリ命令形式600に関して、フルオペコードフィールド674が、形式フィールド640、ベース演算フィールド642、およびデータ要素幅フィールド664を含んで示される。フルオペコードフィールド674が、これらのフィールドの全てを含む一実施形態が示されるが、フルオペコードフィールド674は、それらの全てをサポートしない実施形態では、これらのフィールドの全てを含むとは言えない。フルオペコードフィールド674は、演算コード(オペコード)を提供する。
増補演算フィールド650、データ要素幅フィールド664、および書込みマスクフィールド670は、これらの特徴が、一般的なベクトルフレンドリ命令形式において命令毎に基づいて指定されることを可能にする。
書込みマスクフィールドおよびデータ要素幅フィールドの組み合わせは、それらが、マスクが異なるデータ要素幅に基づいて適用されることを可能にするという点で、型付けされた命令を作り出す。
クラスAおよびクラスB内で見つけられる様々な命令テンプレートは、異なる状況において有益である。本開示のいくつかの実施形態では、異なるプロセッサまたはあるプロセッサ内の異なるコアが、クラスAのみ、クラスBのみ、または両方のクラスをサポートし得る。例えば、汎用計算向けの高性能汎用アウト・オブ・オーダーコアは、クラスBのみをサポートし得、主にグラフィックスおよび/または科学的(スループット)計算向けのコアは、クラスAのみをサポートし得、それらの両方向けのコアは、両方のクラスをサポートし得る(勿論、両方のクラスからのテンプレートおよび命令のいくらかの混合を有するコアであって、ただし、両方のクラスからの全てのテンプレートおよび命令を有するとは限らないコアが、開示の範囲内にある)。また、単一プロセッサが、複数のコアであって、それらの全てが同じクラスをサポートするか、または異なるコアが異なるクラスをサポートする、複数のコアを含んでもよい。例えば、別個のグラフィックスおよび汎用コアを有するプロセッサにおいて、主にグラフィックスおよび/または科学的計算向けのグラフィックスコアのうちの1つが、クラスAのみをサポートしてもよく、一方で、汎用コアのうちの1つまたは複数が、クラスBのみをサポートする汎用計算向けのアウト・オブ・オーダー実行およびレジスタリネーミングを伴う高性能汎用コアであってもよい。別個のグラフィックスコアを有さない別のプロセッサは、クラスAおよびクラスBの両方をサポートするもう1つの汎用イン・オーダーまたはアウト・オブ・オーダーコアを含んでもよい。勿論、一方のクラスからの特徴がまた、本開示の異なる実施形態において他のクラスで実現されてもよい。高水準言語で書かれたプログラムは、1)実行のためにターゲットプロセッサによってサポートされるクラス(複数可)の命令のみを有する形式、または2)全てのクラスの命令の異なる組み合わせを使用して書かれた代わりのルーチンを有し、かつ現在実行しているプロセッサによってサポートされる命令に基づいてコードを実行するためにそのルーチンを選択する制御フローコードを有する形式を含む、種々の異なる実行可能な形式にされる(例えば、実行時(just in time)にコンパイルされるか、あるいは静的にコンパイルされる)。
例示的な特定のベクトルフレンドリ命令形式
図7Aは、本開示の実施形態に従う例示的な特定のベクトルフレンドリ命令形式を例示するブロック図である。図7Aは、フィールドの位置、サイズ、解釈、および順序のみならず、それらのフィールドのうちのいくらかについての値を指定するという意味において特有である、ある特定のベクトルフレンドリ命令形式700を示す。特定のベクトルフレンドリ命令形式700が、x86命令セットを拡張するために使用されてもよく、それゆえ、フィールドのうちのいくらかが、既存のx86命令セットおよびそれの拡張(例えば、AVX)において使用されるものと類似するまたは同じである。この形式は、拡張を伴う既存のx86命令セットの接頭符号化フィールド、実(real)オペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即時フィールドと整合性のあるままである。図7Aからのフィールドがマッピングされる図6Aまたは図6Bからのフィールドが例示される。
本開示の実施形態は、例示目的のために一般的なベクトルフレンドリ命令形式600との関連で、特定のベクトルフレンドリ命令形式700に関して記載されるが、本開示は、特許請求される場合を除いて、特定のベクトルフレンドリ命令形式700に限定されないことを理解されたい。例えば、一般的なベクトルフレンドリ命令形式600は、様々なフィールドのための種々の可能なサイズを考慮するが、特定のベクトルフレンドリ命令形式700は、特定のサイズのフィールドを有するように示される。具体的な例として、データ要素幅フィールド664が、特定のベクトルフレンドリ命令形式700における1ビットフィールドとして例示されるが、本開示は、そのように限定されない(すなわち、一般的なベクトルフレンドリ命令形式600は、データ要素幅フィールド664の他のサイズを考慮する)。
一般的なベクトルフレンドリ命令形式600は、図7Aに例示される順序で下記に列挙される以下のフィールドを含む。
EVEX接頭(バイト0〜3)702が、4バイト形態で符号化される。
形式フィールド640(EVEXバイト0、ビット[7:0])−第1のバイト(EVEXバイト0)は、形式フィールド640であり、それは、0x62(本開示の一実施形態においてベクトルフレンドリ命令形式を区別するために使用される固有値)を含有する。
第2〜第4のバイト(EVEXバイト1〜3)は、特定の機能を提供するいくらかのビットフィールドを含む。
REXフィールド705(EVEXバイト1、ビット[7−5])は、EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、および657BEXバイト1、ビット[5]−B)から成る。EVEX.R、EVEX.X、およびEVEX.Bビットフィールドは、対応するVEXビットフィールドと同じ機能を提供し、1の補数形態を使用して符号化される。すなわち、ZMM0が、1111Bとして符号化され、ZMM15が、0000Bとして符号化される。命令の他のフィールドは、Rrrr、Xxxx、およびBbbbが、EVEX.R、EVEX.X、およびEVEX.Bを追加することによって形成され得るように、当分野において既知であるようにレジスタ指標の下位3ビット(rrr、xxx、およびbbb)を符号化する。
REX'フィールド610−これは、REX'フィールド610の第1の部分であり、拡張された32レジスタセットの上位16または下位16のいずれかを符号化するために使用されるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。本開示の一実施形態では、このビットは、以下に示されるような他のものと共に、(周知のx86 32ビットモードにおいて)BOUND命令と区別するためにビット反転形式で記憶され、それの実オペコードバイトは62であるが、(以下に記載される)MOD R/MフィールドにおけるMODフィールドにおいて11の値を受け入れない。本開示の代替の実施形態は、反転形式にあるこのおよび他の以下に示されるビットを記憶しない。1の値は、下位16レジスタを符号化するために使用される。換言すれば、R'Rrrrは、他のフィールドからのEVEX.R'、EVEX.R、および他のRRRを組み合わせることによって形成される。
オペコードマップフィールド715(EVEXバイト1、ビット[3:0]−mmmm)−その内容が、暗示的な先行オペコードバイト(0F、0F38、または0F3)を符号化する。
データ要素幅フィールド664(EVEXバイト2、ビット[7]−W)は、表記EVEX.Wによって表わされる。EVEX.Wは、データ型の粒度(サイズ)(32ビットデータ要素または64ビットデータ要素のいずれか)を決定するために使用される。
EVEX.vvvv720(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割は、以下を含み得る。すなわち、1)EVEX.vvvvは、反転(1の補数)形態で指定された第1のソースレジスタ被演算子を符号化し、かつ2または複数のソース被演算子を有する命令に有効である。2)EVEX.vvvvは、特定のベクトルシフトについて1の補数形態で指定された宛先レジスタ被演算子を符号化する。または3)EVEX.vvvvは、被演算子を符号化せず、フィールドは、予約され、1111Bを含有するべきである。それゆえ、EVEX.vvvvフィールド720は、反転(1の補数)形態で記憶された第1のソースレジスタ指定子の下位4ビットを符号化する。命令に応じて、追加の異なるEVEXビットフィールドが、指定子サイズを32レジスタに拡張するために使用される。
EVEX.U668クラスフィールド(EVEXバイト2、ビット[2]−U)−EVEX.U=0である場合、それは、クラスAまたはEVEX.U0を示す。EVEX.U=1である場合、それは、クラスBまたはEVEX.U1を示す。
接頭符号化フィールド725(EVEXバイト2、ビット[1:0]−pp)は、更なるビットをベース演算フィールドに提供する。EVEX接頭形式でレガシーSSE命令にサポートを提供することに加えて、これはまた、SIMD接頭の小型化という利益を得る(SIMD接頭を表現するためのバイトを要求するのではなくて、EVEX接頭は、2ビットのみを要求する)。一実施形態では、レガシー形式およびEVEX接頭形式の両方でSIMD接頭(66H、F2H、F3H)を使用するレガシーSSE命令をサポートするために、これらのレガシーSIMD接頭が、SIMD接頭符号化フィールドに符号化され、実行時間において、復号器のPLAに提供される前にレガシーSIMD接頭に拡張される(それゆえ、PLAは、修正をせずに、これらのレガシー命令のレガシーおよびEVEX形式の両方を実行することができる)。より新しい命令が、オペコード拡張として直接的にEVEX接頭符号化フィールドの内容を使用し得るが、特定の実施形態は、整合性のために類似の様式で拡張するものの、異なる意味が、これらのレガシーSIMD接頭によって指定されることを可能にする。代替の実施形態は、2ビットSIMD接頭符号化をサポートするようにPLAを再設計してもよく、それゆえ、拡張を要求しなくてもよい。
アルファフィールド652(EVEXバイト3、ビット[7]−EH。EVEX.EH、EVEX.rs、EVEX.RL、EVEX.書込みマスク制御、およびEVEX.Nとしても知られる。また、αを用いて例示される)−前に記載されたように、このフィールドは、コンテキストに特有である。
ベータフィールド654(EVEXバイト3、ビット[6:4]−SSS、また、EVEX.s2−0、EVEX.r2−0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られる。また、βββを用いて例示される)−前に記載されたように、このフィールドは、コンテキストに特有である。
REX'フィールド610−これは、REX'フィールドの余りであり、かつ拡張32レジスタセットの上位16または下位16のいずれかを符号化するために使用され得るEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]−V')である。このビットは、ビット反転形式で記憶される。1の値は、下位16レジスタを符号化するために使用される。換言すれば、V'VVVVが、EVEX.V'、EVEX.vvvvの組み合わせによって形成される。
書込みマスクフィールド670(EVEXバイト3、ビット[2:0]−kkk)−その内容が、前に記載されたように書込みマスクレジスタにおけるレジスタの指標を指定する。本開示の一実施形態では、特定の値EVEX.kkk=000が、特定の命令のために書込みマスクが使用されないことを暗示する特別な挙動を有する(これは、全てのものにハードワイヤードされた書込みマスクまたはマスキングハードウェアをバイパスするハードウェアの使用を含む種々の手法で実現され得る)。
実オペコードフィールド730(バイト4)はまた、オペコードバイトとしても知られる。オペコードの一部が、このフィールドにおいて指定される。
MOD R/Mフィールド740(バイト5)は、MODフィールド742、Regフィールド744、およびR/Mフィールド746を含む。前に記載されたように、MODフィールド742の内容は、メモリアクセスおよび非メモリアクセス演算を区別する。Regフィールド744の役割は、2つの状況、すなわち、宛先レジスタ被演算子もしくはソースレジスタ被演算子のいずれかの符号化に要約され得、またはオペコード拡張として取扱われ得、かつ命令被演算子を符号化するために使用され得ない。R/Mフィールド746の役割は、以下、すなわち、メモリアドレスを参照する命令被演算子の符号化、または宛先レジスタ被演算子もしくはソースレジスタ被演算子のいずれかの符号化を含み得る。
スケール、指標、ベース(SIB:Scale,Index,Base)バイト(バイト6)−前に記載されたように、スケールフィールド650の内容が、メモリアドレス生成のために使用される。SIB.xxx754およびSIB.bbb756−これらのフィールドの内容は、レジスタ指標XxxxおよびBbbbに関して前に参照されている。
変位フィールド662A(バイト7〜10)−MODフィールド742が10を含有するとき、バイト7〜10は、変位フィールド662Aであり、それは、レガシー32ビット変位(disp32)と同じように機能し、かつバイト粒度において機能する。
変位因子フィールド662B(バイト7)−MODフィールド742が01を含有するとき、バイト7は、変位因子フィールド662Bである。このフィールドの位置は、バイト粒度において機能する、レガシーx86命令セット8ビット変位(disp8)のものと同じである。disp8は、符号拡張されるので、それは、−128〜127バイトオフセットのみを扱うことができる。64バイトキャッシュラインに関して、disp8は、4つの実際に有用な値−128、−64、0、および64のみに設定され得る8ビットを使用する。より大きな範囲が必要とされることが多いので、disp32が使用される。しかしながら、disp32は、4バイトを要求する。disp8およびdisp32とは対照的に、変位因子フィールド662Bは、disp8の再解釈である。変位因子フィールド662Bを使用するとき、実際の変位は、メモリ被演算子アクセス(N)のサイズで乗算された変位因子フィールドの内容によって判断される。この種の変位は、disp8*Nとして呼ばれる。これは、平均命令長を減らす(変位のために使用され、ただし、かなり大きな範囲を有する単一バイト)。かかる圧縮された変位は、有効変位が、メモリアクセスの粒度の倍数であるという想定に基づく。それゆえ、アドレスオフセットの冗長な下位ビットは、符号化される必要がない。換言すれば、変位因子フィールド662Bは、レガシーx86命令セット8ビット変位の代わりになる。それゆえ、変位因子フィールド662Bは、disp8がdisp8*Nにオーバーロードされるという例外だけを用いて、x86命令セット8ビット変位と同じ手法で符号化される(それゆえ、Mod RM/SIB符号化規則に変更はない)。換言すれば、符号化規則または符号化長に変更はないが、ハードウェアによる変位値の解釈においてのみ変更がある(それは、バイト単位のアドレスオフセットを得るためにメモリ被演算子のサイズによって変位をスケールする必要がある)。即時フィールド672は、前に記載されたように演算する。
フルオペコードフィールド 図7Bは、本開示の一実施形態に従うフルオペコードフィールド674を構成する特定のベクトルフレンドリ命令形式700のフィールドを例示するブロック図である。具体的には、フルオペコードフィールド674が、形式フィールド640、ベース演算フィールド642、およびデータ要素幅(W)フィールド664を含む。ベース演算フィールド642は、接頭符号化フィールド725、オペコードマップフィールド715、および実オペコードフィールド730を含む。
レジスタ指標フィールド 図7Cは、本開示の一実施形態に従うレジスタ指標フィールド644を構成する特定のベクトルフレンドリ命令形式700のフィールドを例示するブロック図である。具体的には、レジスタ指標フィールド644が、REXフィールド705、REX'フィールド710、MODR/M.regフィールド744、MODR/M.r/mフィールド746、VVVVフィールド720、xxxフィールド754、およびbbbフィールド756を含む。
増補演算フィールド 図7Dは、本開示の一実施形態に従う増補演算フィールド650を構成する特定のベクトルフレンドリ命令形式700のフィールドを例示するブロック図である。クラス(U)フィールド668が0を含有するとき、それは、EVEX.U0(クラスA668A)を意味し、それが1を含有するとき、それは、EVEX.U1(クラスB668B)を意味する。U=0かつMODフィールド742が(非メモリアクセス演算を意味する)11を含有するとき、アルファフィールド652(EVEXバイト3、ビット[7]−EH)が、rsフィールド652Aとして解釈される。rsフィールド652Aが1(丸め652A.1)を含有するとき、ベータフィールド654(EVEXバイト3、ビット[6:4]−SSS)が、丸め制御フィールド654Aとして解釈される。丸め制御フィールド654Aは、1ビットSAEフィールド656および2ビット丸め演算フィールド658を含む。rsフィールド652Aが0(データ変形652A.2)を含有するとき、ベータフィールド654(EVEXバイト3、ビット[6:4]−SSS)が、3ビットデータ変形フィールド654Bとして解釈される。U=0かつMODフィールド742が(メモリアクセス演算を意味する)00、01、または10を含有するとき、アルファフィールド652(EVEXバイト3、ビット[7]−EH)が、エビクションヒント(EH:eviction hint)フィールド652Bとして解釈され、ベータフィールド654(EVEXバイト3、ビット[6:4]−SSS)が、3ビットデータ操作フィールド654Cとして解釈される。
U=1のとき、アルファフィールド652(EVEXバイト3、ビット[7]−EH)が、書込みマスク制御(Z)フィールド652Cとして解釈される。U=1かつMODフィールド742が(非メモリアクセス演算を意味する)11を含有するとき、ベータフィールド654の一部(EVEXバイト3、ビット[4]−S0)が、RLフィールド657Aとして解釈される。それが、1(丸め657A.1)を含有するとき、ベータフィールド654の残り(EVEXバイト3、ビット[6−5]−S2−1)が、丸め演算フィールド659Aとして解釈される。一方で、RLフィールド657Aが、0(VSIZE657.A2)を含有するとき、ベータフィールド654の残り(EVEXバイト3、ビット[6−5]−S2−1)が、ベクトル長フィールド659B(EVEXバイト3、ビット[6−5]−L1−0)として解釈される。U=1かつMODフィールド742が、(メモリアクセス演算を意味する)00、01、または10を含有するとき、ベータフィールド654(EVEXバイト3、ビット[6:4]−SSS)が、ベクトル長フィールド659B(EVEXバイト3、ビット[6−5]−L1−0)およびブロードキャストフィールド657B(EVEXバイト3、ビット[4]−B)として解釈される。
例示的なレジスタアーキテクチャ 図8は、本開示の一実施形態に従うレジスタアーキテクチャ800のブロック図である。例示される実施形態では、512ビット長である32ベクトルレジスタ810が存在する。これらのレジスタは、zmm0〜zmm31として参照される。下位16zmmレジスタの下位256ビットは、レジスタymm0〜16上にオーバーレイされる。下位16zmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0〜15上にオーバーレイされる。特定のベクトルフレンドリ命令形式700は、以下の表に例示されるようなこれらのオーバーレイされたレジスタファイルについて演算する。
換言すれば、ベクトル長フィールド659Bは、最大の長さおよび1つまたは複数の他のより短い長さ間を選択し、その場合、それぞれのかかるより短い長さが先行する長さの半分の長さであり、ベクトル長フィールド659Bを有さない命令テンプレートが、最大のベクトル長について演算する。更に、一実施形態では、特定のベクトルフレンドリ命令形式700のクラスB命令テンプレートが、パック型またはスカラー単/倍精度浮動小数点データおよびパック型またはスカラー整数データについて演算する。スカラー演算は、zmm/ymm/xmmレジスタにおける最下位データ要素位置上で行われる演算である。上位データ要素位置は、実施形態に応じて、それらが命令の前にあったものと同じに残されるか、または零化されるかのいずれかである。
書込みマスクレジスタ815−例示される実施形態では、それぞれ64ビットのサイズにある、8個の書込みマスクレジスタ(k0〜k7)が存在する。代替の実施形態では、書込みマスクレジスタ815が、16ビットのサイズにある。前に記載されたように、本開示の一実施形態では、ベクトルマスクレジスタk0が、書込みマスクとして使用されることができない。通常、k0を示すことになる符号化が、書込みマスクのために使用されるとき、それは、0xFFFFのハードワイヤードされた書込みマスクを選択して、その命令についての書込みマスキングを効果的にディスエーブルにする。
汎用レジスタ825−例示される実施形態では、メモリ被演算子をアドレス指定するために既存のx86アドレッシングモードと共に使用される16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8〜R15という名前によって参照される。
MMXパック型整数フラットレジスタファイル850がエイリアスされる、スカラー浮動小数点スタックレジスタファイル(x87スタック)845−例示される実施形態では、x87スタックが、x87命令セット拡張を使用して32/64/80ビット浮動小数点データについてスカラー浮動小数点演算を行うために使用される8個の要素スタックである。一方で、MMXレジスタは、64ビットのパック型整数データについて演算を行うために、ならびMMXおよびXMMレジスタ間で行われるいくつかの演算用に被演算子を保持するために使用される。
本開示の代替の実施形態は、より広いまたはより狭いレジスタを使用してもよい。更に、本開示の代替の実施形態は、より多くの、より少ない、または異なるレジスタファイルおよびレジスタを使用してもよい。
例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ プロセッサコアは、異なる手法で、異なる目的のために、および異なるプロセッサにおいて実現され得る。例えば、かかるコアの実現形態は、1)汎用計算向けの汎用イン・オーダーコア、2)汎用計算向けの高性能汎用アウト・オブ・オーダーコア、3)主にグラフィックスおよび/または科学的(スループット)計算向けの特殊目的コアを含み得る。異なるプロセッサの実現形態は、1)汎用計算向けの1つもしくは複数の汎用イン・オーダーコアおよび/または汎用計算向けの1つもしくは複数の汎用アウト・オブ・オーダーコアを含むCPU、ならびに2)主にグラフィックスおよび/もしくは科学的(スループット)向けの1つまたは複数の特殊目的コアを含むコプロセッサを含み得る。かかる異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、それは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同じパッケージ内の別個のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(その場合では、かかるコプロセッサは、特殊目的ロジック、例えば、統合グラフィックおよび/もしくは科学的(スループット)ロジック、または特殊目的コアなどとして呼ばれることがある)、ならびに4)(アプリケーションコア(複数可)またはアプリケーションプロセッサ(複数可)と呼ばれることがある)記載されたCPU、上記したコプロセッサ、および更なる機能を同じダイ上に含み得るシステム・オン・チップを含み得る。例示的なコアアーキテクチャが、次に記載され、例示的なプロセッサおよびコンピュータアーキテクチャの記載が後に続く。
例示的なコアアーキテクチャ イン・オーダーおよびアウト・オブ・オーダーコアブロック図 図9Aは、本開示の実施形態に従う例示的なイン・オーダーパイプラインおよび例示的なレジスタリネーミング、アウト・オブ・オーダー発行/実行パイプラインの両方を例示するブロック図である。図9Bは、本開示の実施形態に従うプロセッサに含まれるべきイン・オーダーアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウト・オブ・オーダー発行/実行アーキテクチャコアの両方を例示するブロック図である。図9A〜9Bにおける実線枠は、イン・オーダーパイプラインおよびイン・オーダーコアを例示し、一方で、破線枠の任意選択的な付加部分は、レジスタリネーミング、アウト・オブ・オーダー発行/実行パイプラインおよびコアを例示する。イン・オーダー態様が、アウト・オブ・オーダー態様の一部であることを考慮して、アウト・オブ・オーダー態様が記載される。
図9Aにおいて、プロセッサパイプライン900は、フェッチ段階902、長さ復号段階904、復号段階906、割り当て段階908、リネーミング段階910、(ディスパッチまたは発行としても知られる)スケジューリング段階912、レジスタ読取り/メモリ読取り段階914、実行段階916、ライトバック/メモリ書込み段階918、例外処理段階922、およびコミット段階924を含む。
図9Bは、実行エンジンユニット950に結合されるフロントエンドユニット930を含むプロセッサコア990を示し、それらの両方が、メモリユニット970に結合される。コア990は、縮小命令セット計算(RISC:reduced instruction set computing)コア、複合命令セット計算(CISC:complex instruction set computing)コア、超長命令語(VLIW:very long instruction word)コア、またはハイブリッドもしくは代替のコア型であり得る。更に別の選択肢として、コア990は、特殊目的コア、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用計算グラフィックス処理ユニット(GPGPU:general purpose computing graphics processing unit)コア、グラフィックスコア、または同様のものなどであってもよい。
フロントエンドユニット930は、命令キャッシュユニット934に結合された分岐予測ユニット932を含み、命令キャッシュユニット934は、命令変換索引バッファ(TLB)936に結合され、TLB936は、命令フェッチユニット938に結合され、命令フェッチユニット938は、復号ユニット940に結合される。復号ユニット940(または復号器もしくは復号器ユニット)は、命令(例えば、マクロ命令)を復号し得、かつ出力として1つまたは複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を生成し得、それらは、元の命令から復号されるか、またはさもなければ元の命令を反映するか、あるいは元の命令に由来する。復号ユニット940は、様々な異なる機構を使用して実現され得る。適切な機構の実施例は、限定されるものではないが、ルックアップテーブル、ハードウェア実現形態、プログラム可能なロジックアレイ(PLA:programmable logic array)、マイクロコード読取り専用メモリ(ROM:read−only memory)等を含む。一実施形態では、コア990が、特定のマクロ命令のためのマイクロコードを(例えば、復号ユニット940において、またはさもなければフロントエンドユニット930内に)記憶するマイクロコードROMまたは他の媒体を含む。復号ユニット940は、実行エンジンユニット950内のリネーム/アロケータユニット952に結合される。
実行エンジンユニット950は、リタイヤメントユニット954および1組の1つまたは複数のスケジューラユニット(複数可)956に結合されるリネーム/アロケータユニット952を含む。スケジューラユニット(複数可)956は、予約ステーション、集中型命令ウィンドウ等を含む、任意の数の異なるスケジューラを表わす。スケジューラユニット(複数可)956は、物理的なレジスタファイル(複数可)ユニット(複数可)958に結合される。物理的なレジスタファイル(複数可)ユニット958のそれぞれは、1つまたは複数の物理的なレジスタファイルを表わし、それらのうちの異なるものが、1つまたは複数の異なるデータ型、例えば、スカラー整数、スカラー浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)等などを記憶する。一実施形態では、物理的なレジスタファイル(複数可)ユニット958が、ベクトルレジスタユニット、書込みマスクレジスタユニット、およびスカラーレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供してもよい。物理的なレジスタファイル(複数可)ユニット(複数可)958は、レジスタリネーミングおよびアウト・オブ・オーダー実行が、(例えば、リオーダバッファ(複数可)およびリタイヤメントレジスタファイル(複数可)を使用して、フューチャファイル(複数可)、履歴バッファ(複数可)、およびリタイヤメントレジスタファイル(複数可)を使用して、レジスタマップおよびレジスタのプール等を使用して)実現され得る様々な手法を例示するためにリタイヤメントユニット954と重複される。リタイヤメントユニット954および物理的なレジスタファイル(複数可)ユニット(複数可)958は、実行クラスタ(複数可)960に結合される。実行クラスタ(複数可)960は、1組の1つまたは複数の実行ユニット962および1組の1つまたは複数のメモリアクセスユニット964を含む。実行ユニット962は、様々な種類のデータ(例えば、スカラー浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点)についての様々な演算(例えば、シフト、加算、減算、乗算)を行い得る。いくつかの実施形態は、特定の機能または機能の組に専用のいくらかの実行ユニットを含み得るが、他の実施形態が、全ての機能を全て行う1つの実行ユニットのみまたは複数の実行ユニットを含んでもよい。スケジューラユニット(複数可)956、物理的なレジスタファイル(複数可)ユニット(複数可)958、および実行クラスタ(複数可)960は、複数であり得るように示される。なぜなら、特定の実施形態は、特定の種類のデータ/演算について別個のパイプライン(例えば、それら自体のスケジューラユニット、物理的なレジスタファイル(複数可)ユニット、および/または実行クラスタをそれぞれ有する、スカラー整数パイプライン、スカラー浮動小数点/パック型整数/パック型浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプライン。別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみが、メモリアクセスユニット(複数可)964を有する特定の実施形態が実現される)を作り出すからである。また、別個のパイプラインが使用される場合、これらのパイプラインのうちの1つまたは複数が、アウト・オブ・オーダー発行/実行であり得、かつその残りが、イン・オーダーであり得ることを理解されたい。
メモリアクセスユニット964の組は、メモリユニット970に結合され、それは、レベル2(L2)キャッシュユニット976に結合されるデータキャッシュユニット974に結合されるデータTLBユニット972を含む。ある例示的な実施形態では、メモリアクセスユニット964が、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含み得、それらのそれぞれが、メモリユニット970内のデータTLBユニット972に結合される。命令キャッシュユニット934は、メモリユニット970内のレベル2(L2)キャッシュユニット976に更に結合される。L2キャッシュユニット976は、キャッシュの1つまたは複数の他のレベルに、かつ、結局はメインメモリに結合される。
例として、例示的なレジスタリネーミング、アウト・オブ・オーダー発行/実行コアアーキテクチャは、パイプライン900を以下のように実現し得る。1)命令フェッチ938が、フェッチ段階902および長さ復号段階904を行い、2)復号ユニット940が、復号段階906を行い、3)リネーム/アロケータユニット952が、割り当て段階908およびリネーミング段階910を行い、4)スケジューラユニット(複数可)956が、スケジュール段階912を行い、5)物理的なレジスタファイル(複数可)ユニット(複数可)958およびメモリユニット970が、レジスタ読取り/メモリ読取り段階914を行い、実行クラスタ960が、実行段階916を行い、6)メモリユニット970および物理的なレジスタファイル(複数可)ユニット(複数可)958が、ライトバック/メモリ書込み段階918を行い、7)様々なユニットが、例外処理段階922に関与され得、ならびに8)リタイヤメントユニット954および物理的なレジスタファイル(複数可)ユニット(複数可)958が、コミット段階924を行う。
コア990は、本明細書に記載される命令(複数可)を含む、1つまたは複数の命令セット(例えば、(より新しいバージョンを追加されたいくらかの拡張を伴う)x86命令セット、Sunnyvale、CAのMIPS TechnologiesのMIPS命令セット、Sunnyvale、CAのARM Holdingsの(例えばNEONなどの任意選択的な更なる拡張を伴う)ARM命令セット)をサポートし得る。一実施形態では、コア990が、パック型データ命令セット拡張(例えば、AVX1、AVX2)をサポートするためのロジックを含み、それによって、多くのマルチメディアアプリケーションによって使用される演算が、パック型データを使用して行われることを可能にする。
コアは、マルチスレッディング(演算もしくはスレッドの2つまたはそれ以上の並列組の実行)をサポートし得、かつタイムスライス型マルチスレッディング、同時マルチスレッディング(その場合、単一の物理的なコアは、物理的なコアが同時にマルチスレッディングするというロジックコアをスレッドのそれぞれに提供する)、またはそれらの組み合わせ(例えば、タイムスライス型フェッチおよび復号化ならびに同時マルチスレッディング、その後、例えば、Intel(登録商標)ハイパースレッディング・テクノロジーにおけるものなど)を含む種々の手法でそのように行い得ることを理解されたい。
レジスタリネーミングが、アウト・オブ・オーダー実行との関連で記載されるが、レジスタリネーミングは、イン・オーダーアーキテクチャにおいて使用されてもよいことを理解されたい。プロセッサの例示される実施形態はまた、別個の命令およびデータキャッシュユニット934/974および共有L2キャッシュユニット976を含むが、代替の実施形態が、命令およびデータの両方のための単一内部キャッシュ、例えば、レベル1(L1)内部キャッシュなど、または複数レベルの内部キャッシュを有してもよい。いくつかの実施形態では、システムが、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュの組み合わせを含んでもよい。代わりに、キャッシュの全てが、コアおよび/またはプロセッサの外部にあってもよい。
特定の例示的なイン・オーダーコアアーキテクチャ 図10A〜10Bは、より具体的で例示的なイン・オーダーコアアーキテクチャのブロック図を例示し、そのコアは、チップ内の(同じ種類および/または異なる種類の他のコアを含む)いくつかのロジックブロックのうちの1つになる。ロジックブロックは、アプリケーションに応じて、高帯域幅の相互接続ネットワーク(例えば、リング型ネットワーク)を通して、いくつかの固定機能ロジック、メモリI/Oインターフェース、および他の必要なI/Oロジックと通信する。
図10Aは、本開示の実施形態に従う、オンダイの相互接続ネットワーク1002へのその接続、およびレベル2(L2)キャッシュ1004のそのローカルサブセットを加えた、単一プロセッサコアのブロック図である。一実施形態では、命令復号ユニット1000が、パック型データ命令セット拡張を伴うx86命令セットをサポートする。L1キャッシュ1006は、スカラーおよびベクトルユニットへのキャッシュメモリに対する低レイテンシアクセスを可能にする。(設計を単純化するために)一実施形態では、スカラーユニット1008およびベクトルユニット1010が、別個のレジスタセット(それぞれ、スカラーレジスタ1012およびベクトルレジスタ1014)を使用し、それらの間で転送されるデータが、メモリに書き込まれ、次いで、レベル1(L1)キャッシュ1006からリードバックされるが、本開示の代替の実施形態は、異なるアプローチを使用してもよい(例えば、単一レジスタセットを使用してもよいし、またはデータがライトおよびリードバックなしで2つのレジスタファイル間で転送されることを可能にする通信経路を含んでもよい)。
L2キャッシュ1004のローカルサブセットは、プロセッサコア毎に1つの別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ1004のそれ自体のローカルサブセットへの直接的なアクセス経路を有する。プロセッサコアによって読み取られたデータは、そのL2キャッシュサブセット1004内に記憶され、それら自体のローカルL2キャッシュサブセットにアクセスする他のプロセッサコアと並列に、迅速にアクセスされ得る。プロセッサコアによって書き込まれたデータは、それ自体のL2キャッシュサブセット1004内に記憶され、必要に応じて、他のサブセットからフラッシュされる。リング型ネットワークは、共有データのためのコヒーレンスを確実にする。リング型ネットワークは、双方向性であり、エージェント、例えば、プロセッサコア、L2キャッシュ、および他のロジックブロックなどが、チップ内で互いと通信することを可能にする。各リング型データ−経路は、方向毎に1012ビット長である。
図10Bは、本開示の実施形態に従う図10Aにおけるプロセッサコアの一部の拡大図である。図10Bは、L1キャッシュ1004のL1データキャッシュ1006A部分、ならびにベクトルユニット1010およびベクトルレジスタ1014に関する更なる詳細を含む。具体的には、ベクトルユニット1010が、16−wideベクトル処理ユニット(VPU:vector processing unit)(16−wide ALU1028を参照)であり、それは、整数、単精度浮動小数、および倍精度浮動小数命令のうちの1つまたは複数を実行する。VPUは、スウィズルユニット1020を用いるレジスタ入力のスウィズリング、数値化ユニット1022A〜Bを用いる数値化、およびメモリ入力についての複製ユニット1024を用いる複製をサポートする。書込みマスクレジスタ1026は、結果として生じるベクトル書込みの断定を可能にする。
図11は、本開示の実施形態に従う、2つ以上のコアを有し得、統合メモリコントローラを有し得、かつ統合グラフィックを有し得る、プロセッサ1100のブロック図である。図11における実線枠は、単一コア1102A、システムエージェント1110、1組の1つまたは複数のバスコントローラユニット1116を有するプロセッサ1100を例示し、一方で、破線枠の任意選択的な付加部分は、複数のコア1102A〜N、システムエージェントユニット1110内の1組の1つまたは複数の統合メモリコントローラユニット(複数可)1114、および特殊目的ロジック1108を有する代替のプロセッサ1100を例示する。
それゆえ、プロセッサ1100の異なる実現形態は、1)(1つまたは複数のコアを含み得る)統合グラフィックおよび/または科学的(スループット)ロジックである特殊目的ロジック1108、ならびに1つまたは複数の汎用コア(例えば、汎用イン・オーダーコア、汎用アウト・オブ・オーダーコア、それらの2つの組み合わせ)であるコア1102A〜Nを有するCPU、2)主にグラフィックスおよび/または科学的(スループット)向けの多数の特殊目的コアであるコア1102A〜Nを有するコプロセッサ、なおかつ3)多数の汎用イン・オーダーコアであるコア1102A〜Nを有するコプロセッサを含み得る。それゆえ、プロセッサ1100は、汎用プロセッサ、コプロセッサ、または特殊目的プロセッサ、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、(30またはそれ以上のコアを含む)高スループットメニー・インテグレーテッド・コア(MIC:many integrated core)コプロセッサ、埋め込み型プロセッサ、または同様のものなどであり得る。プロセッサは、1つまたは複数のチップ上に実装され得る。プロセッサ1100は、いくらかのプロセス技術、例えば、BiCMOS、CMOS、またはNMOSなどのうちのいずれかを使用して、1つまたは複数の基板の一部であってもよいし、および/あるいは1つまたは複数の基板上に実装されてもよい。
メモリ階層は、コア、1組のまたは1つもしくは複数の共有キャッシュユニット1106、および1組の統合メモリコントローラユニット1114に結合される外部メモリ(図示しない)内に1つまたは複数のレベルのキャッシュを含む。1組の共有キャッシュユニット1106は、1つもしくは複数の中間レベルキャッシュ、例えば、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュなど、ラストレベルキャッシュ(LLC)、および/あるいはそれらの組み合わせを含み得る。一実施形態では、リングベースの相互接続ユニット1112が、統合グラフィックスロジック1108、1組の共有キャッシュユニット1106、およびシステムエージェントユニット1110/統合メモリコントローラユニット(複数可)1114を相互接続するが、代替の実施形態は、かかるユニットを相互接続するために任意の数の周知の技法を使用してもよい。一実施形態では、コヒーレンスが、1つまたは複数のキャッシュユニット1106およびコア1102A〜N間で維持される。
いくつかの実施形態では、コア1102A〜Nのうちの1つまたは複数が、マルチスレッディングすることができる。システムエージェント1110は、コア1102A〜Nを調整および操作する構成要素を含む。システムエージェントユニット1110は、例えば、電力制御ユニット(PCU:power control unit)および表示ユニットを含んでもよい。PCUは、コア1102A〜Nおよび統合グラフィックスロジック1108の電力状態を調節するために必要なロジックおよび構成要素であってもよいし、またはそれらを含んでもよい。表示ユニットは、1つまたは複数の外部に接続された表示部を駆動するためのものである。
コア1102A〜Nは、アーキテクチャ命令セットに関してホモジニアスまたはヘテロジニアスであり得る。すなわち、コア1102A〜Nのうちの2つまたはそれ以上が、同じ命令セットを実行することができ得、一方で、その他が、その命令セットまたは異なる命令セットのサブセットのみを実行することができ得る。
例示的なコンピュータアーキテクチャ 図12、13、14、および15は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、手持ち式PC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込み型プロセッサ、デジタル信号プロセッサ(DSP:digital signal processor)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、手持ち式デバイス、および様々な他の電子デバイスのための当分野において既知の他のシステム設計ならびに構成がまた、適している。一般に、本明細書に開示されるようなプロセッサおよび/もしくは他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが、一般的に適している。
次に、図12を参照すると、本開示の一実施形態に従ってシステム1200のブロック図が示される。システム1200は、1つまたは複数のプロセッサ1210、1215を含み得、それらは、コントローラハブ1220に結合される。一実施形態では、コントローラハブ1220が、グラフィックスメモリコントローラハブ(GMCH:graphics memory controller hub)1290および(別個のチップ上にあり得る)入出力ハブ(IOH:Input/Output Hub)1250を含み、GMCH1290は、メモリおよびグラフィックスコントローラを含み、それに対してメモリ1240およびコプロセッサ1245が結合され、IOH1250は、入出力(I/O)デバイス1260をGMCH1290に結合する。代わりに、メモリおよびグラフィックスコントローラのうちの一方または両方が、(本明細書に記載されるような)プロセッサ内に統合され、メモリ1240およびコプロセッサ1245は、プロセッサ1210、およびIOH1250を有するシングルチップ内のコントローラハブ1220に直接的に結合される。
任意選択的な性質の追加的なプロセッサ1215が、破線を用いて図12に示される。各プロセッサ1210、1215は、本明細書に記載される処理コアのうちの1つまたは複数を含んでもよいし、あるバージョンのプロセッサ1100であってもよい。
メモリ1240は、例えば、動的ランダムアクセスメモリ(DRAM)、相変化メモリ(PCM:phase change memory)、またはそれらの2つの組み合わせであってもよい。少なくとも1つの実施形態の場合、コントローラハブ1220が、マルチドロップバス、例えば、フロントサイドバス(FSB:frontside bus)など、ポイントツーポイントインターフェース、例えば、QuickPath Interconnect(QPI)など、または類似の接続1295経由で、プロセッサ(複数可)1210、1215と通信する。
一実施形態では、コプロセッサ1245が、特殊目的プロセッサ、例えば、高スループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、埋め込み型プロセッサ、または同様のものなどである。一実施形態では、コントローラハブ1220が、統合グラフィックアクセラレータを含んでもよい。
アーキテクチャ、マイクロアーキテクチャ、熱的、電力消費特性、および同様のものを含むメリットのメトリクスのスペクトルに関して、物理的なリソース1210、1215間に種々の差が存在し得る。
一実施形態では、プロセッサ1210が、一般型のデータ処理演算を制御する命令を実行する。命令内には、コプロセッサ命令が埋め込まれ得る。プロセッサ1210は、これらのコプロセッサ命令を、取り付けられたコプロセッサ1245によって実行されるべきである類のものとして認識する。したがって、プロセッサ1210は、コプロセッサバスまたは他の相互接続上でこれらのコプロセッサ命令をコプロセッサ1245に発行する(またはコプロセッサ命令を表わす信号を制御する)。コプロセッサ(複数可)1245は、受信されたコプロセッサ命令を受け入れて実行する。
次に、図13を参照すると、本開示の実施形態に従って第1のより具体的で例示的なシステム1300のブロック図が示される。図13に示されるように、マルチプロセッサシステム1300は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1350経由で結合される第1のプロセッサ1370および第2のプロセッサ1380を含む。プロセッサ1370および1380のそれぞれは、あるバージョンのプロセッサ1100であり得る。本開示の一実施形態では、プロセッサ1370および1380が、それぞれ、プロセッサ1210および1215であり、一方で、コプロセッサ1338が、コプロセッサ1245である。別の実施形態では、プロセッサ1370および1380が、それぞれ、プロセッサ1210、コプロセッサ1245である。
それぞれ、統合メモリコントローラ(IMC:integrated memory controller)ユニット1372および1382を含む、プロセッサ1370および1380が示される。プロセッサ1370はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P:point−to−point)インターフェース1376および1378を含む。同様に、第2のプロセッサ1380は、P−Pインターフェース1386および1388を含む。プロセッサ1370、1380は、P−Pインターフェース回路1378、1388を使用してポイントツーポイント(P−P)インターフェース1350経由で情報を交換し得る。図13に示されるように、IMC1372および1382が、プロセッサをそれぞれのメモリ、すなわち、メモリ1332およびメモリ1334に結合し、それらは、それぞれのプロセッサにローカルに取り付けられるメインメモリの一部分であり得る。
プロセッサ1370、1380は、ポイントツーポイントインターフェース回路1376、1394、1386、1398を使用して個々のP−Pインターフェース1352、1354経由でチップセット1390と情報をそれぞれ交換し得る。チップセット1390は、任意選択的に、高性能インターフェース1339経由でコプロセッサ1338と情報を交換してもよい。一実施形態では、コプロセッサ1338が、特殊目的プロセッサ、例えば、高スループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、埋め込み型プロセッサ、または同様のものなどである。
共有キャッシュ(図示しない)は、プロセッサが低電力モードに置かれた場合に、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に記憶され得るように、いずれかのプロセッサ内にまたは両方のプロセッサの外側に含まれ得、更にP−P相互接続経由でプロセッサと接続され得る。
チップセット1390は、インターフェース1396経由で第1のバス1316に結合されてもよい。一実施形態では、第1のバス1316が、周辺部品相互接続(PCI:Peripheral Component Interconnect)バス、または例えば、PCI Expressバスまたは別の第3世代I/O相互接続バスなどのバスであり得るが、本開示の範囲は、そのように限定されない。
図13に示されるように、様々なI/Oデバイス1314が、第1のバス1316を第2のバス1320に結合するバスブリッジ1318と共に、第1のバス1316に結合され得る。一実施形態では、1つまたは複数の追加的なプロセッサ(複数可)1315、例えば、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP:digital signal processing)ユニットなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどが、第1のバス1316に結合される。一実施形態では、第2のバス1320が、ピン数が少ない(LPC:low pin count)バスであり得る。様々なデバイスが、第2のバス1320に結合され得、例えば、一実施形態では、キーボードおよび/またはマウス1322、通信デバイス1327、ならびに記憶ユニット1328、例えば、ディスクドライブまたは命令/コードおよびデータ1330を含み得る他の大容量記憶デバイスなどを含む。更に、オーディオI/O1324が、第2のバス1320に結合されてもよい。他のアーキテクチャが可能であることに留意する。例えば、図13のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のかかるアーキテクチャを実装してもよい。
次に、図14を参照すると、本開示の実施形態に従って第2のより具体的で例示的なシステム1400のブロック図が示される。図13および14における同じ要素は、同じ参照数字を有し、図13の特定の態様は、図14の他の態様を不明瞭にすることを回避するために、図14から省略されている。
図14は、プロセッサ1370、1380が、それぞれ、統合メモリおよびI/O制御ロジック(「CL:control logic」)1372および1382を含み得ることを例示する。それゆえ、CL1372、1382は、統合メモリコントローラユニットを含み、かつI/O制御ロジックを含む。図14は、メモリ1332、1334がCL1372、1382に結合されることのみならず、I/Oデバイス1414がまた制御ロジック1372、1382に結合されることも例示する。レガシーI/Oデバイス1415は、チップセット1390に結合される。
次に、図15を参照すると、本開示の実施形態に従ってSoC1500のブロック図が示される。図11における類似の要素は、同じ参照数字を有する。また、破線枠は、より高度なSoCについての任意選択的な特徴である。図15において、相互接続ユニット(複数可)1502は、1組の1つまたは複数のコア202A〜Nおよび共有キャッシュユニット(複数可)1106を含むアプリケーションプロセッサ1510、システムエージェントユニット1110、バスコントローラユニット(複数可)1116、統合メモリコントローラユニット(複数可)1114、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサを含み得る1組のまたは1つもしくは複数のコプロセッサ1520、静的ランダムアクセスメモリ(SRAM)ユニット1530、直接メモリアクセス(DMA:direct memory access)ユニット1532、ならびに1つまたは複数の外部表示部に結合するための表示ユニット1540に結合される。一実施形態では、コプロセッサ(複数可)1520が、特殊目的プロセッサ、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、埋め込み型プロセッサ、または同様のものなどを含む。
本明細書に開示される(例えば、機構の)実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはかかる実現形態アプローチの組み合わせにおいて実現され得る。本開示の実施形態は、少なくとも1つのプロセッサ、(揮発性および不揮発性メモリならびに/または記憶要素を含む)記憶システム、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備える、プログラム可能なシステム上で実行するコンピュータプログラムあるいはプログラムコードとして実現され得る。
プログラムコード、例えば、図13に例示されるコード1330などが、命令を入力して、本明細書に記載される機能を行い、かつ出力情報を生成するために適用され得る。出力情報は、既知の様式で、1つまたは複数の出力デバイスに適用され得る。この適用の目的のために、処理システムは、プロセッサ、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC:application specific integrated circuit)、またはマイクロプロセッサなどを有する、任意のシステムを含む。
プログラムコードは、処理システムと通信するための高水準手順またはオブジェクト指向プログラミング言語で実現され得る。プログラムコードはまた、必要に応じて、アセンブリまたはマシン言語で実現されてもよい。実際、本明細書に記載される機構は、任意の特定のプログラミング言語に対する範囲に限定されない。いずれにせよ、言語は、コンパイルまたは解釈される言語であり得る。
少なくとも1つの実施形態の1つまたは複数の態様は、プロセッサ内の様々なロジックを表わすマシン可読媒体上に記憶された典型的な命令によって実現され得、それは、マシンによって読み取られるときに、マシンに、本明細書に記載される技法を行うためのロジックを製作させる。「IPコア」として知られるかかる典型は、有形のマシン可読媒体上に記憶され得、実際にロジックまたはプロセッサを作製する製作マシンにロードするために、様々な顧客または製造設備に供給され得る。
かかるマシン可読記憶媒体は、限定なしで、マシンもしくはデバイスによって製造または形成された項目の非一時的な有形の構成を含み得、記憶媒体、例えば、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク読取り専用メモリ(CD−ROM:compact disk read−only memory)、書き換え可能なコンパクトディスク(CD−RW:compact disk rewritable)、および光磁気ディスクを含む任意の他の種類のディスクなど、半導体デバイス、例えば、読取り専用メモリ(ROM)など、ランダムアクセスメモリ(RAM:random access memory)、例えば、動的ランダムアクセスメモリ(DRAM)など、静的ランダムアクセスメモリ(SRAM)、消去可能でプログラム可能な読取り専用メモリ(EPROM:erasable programmable read−only memory)、フラッシュメモリ、電気的に消去可能でプログラム可能な読取り専用メモリ(EEPROM:electrically erasable programmable read−only memory)、相変化メモリ(PCM)、磁気もしくは光カード、または電子命令を記憶するのに適した任意の他の種類の媒体を含む。
したがって、本開示の実施形態はまた、命令を含有する、あるいは本明細書に記載される構造、回路、装置、プロセッサおよび/またはシステム特徴を決定する設計データ、例えば、ハードウェア記述言語(HDL:Hardware Description Language)などを含有する、非一時的な有形のマシン可読媒体を含む。かかる実施形態はまた、プログラム製品としても呼ばれ得る。
(バイナリ変換、コードモーフィング等を含む)エミュレーション いくつかの場合では、命令コンバータが、命令をソース命令セットからターゲット命令セットにコンバートするために使用されてもよい。例えば、命令コンバータは、命令を、コアによって処理されるべき1つまたは複数の他の命令に(例えば、静的変換、動的コンパイルを含む動的バイナリ変換を使用して)変換、モーフィング、エミュレート、またはさもなければコンバートし得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせにおいて実現され得る。命令コンバータは、オン(on)プロセッサ、オフ(off)プロセッサ、または部分オンおよび部分オフプロセッサであり得る。
図16は、本開示の実施形態に従うソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令にコンバートするためのソフトウェア命令コンバータの使用を対照させるブロック図である。例示される実施形態では、命令コンバータが、ソフトウェア命令コンバータであるが、代わりに、命令コンバータが、ソフトウェア、ファームウェア、ハードウェア、またはそれの様々な組み合わせにおいて実現されてもよい。図16は、高水準言語1602におけるプログラムが、少なくとも1つのx86命令セットコアを有するプロセッサ1616によってネイティブに実行され得るx86バイナリコード1606を生成するためにx86コンパイラ1604を使用してコンパイルされ得ることを示す。少なくとも1つのx86命令セットコアを有するプロセッサ1616は、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ結果を達成するために、(1)Intelx86命令セットコアの命令セットの実質的な部分、あるいは(2)少なくとも1つのx86命令セットコアを有するIntelプロセッサ上で動くことを対象にされたオブジェクトコードバージョンのアプリケーションもしくは他のソフトウェアを互換可能に実行すること、またはさもなければ処理することによって、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ機能を行うことができる任意のプロセッサを表わす。x86コンパイラ1604は、更なる連係処理を用いてまたは用いずに、少なくとも1つのx86命令セットコアを有するプロセッサ1616上で実行され得るx86バイナリコード1606(例えば、オブジェクトコード)を生成するように操作可能なコンパイラを表わす。同様に、図16は、高水準言語1602におけるプログラムが、少なくとも1つのx86命令セットコアを有さないプロセッサ1614(例えば、Sunnyvale、CAのMIPS TechnologiesのMIPS命令セットを実行するおよび/またはSunnyvale、CAのARM HoldingsのARM命令セットを実行するコアを有するプロセッサ)によってネイティブに実行され得る代替の命令セットバイナリコード1610を生成するために代替の命令セットコンパイラ1608を使用してコンパイルされ得ることを示す。命令コンバータ1612は、x86バイナリコード1606を、x86命令セットコアを用いずにプロセッサ1614によってネイティブに実行され得るコードにコンバートするために使用される。このコンバートされたコードは、代替の命令セットバイナリコード1610と同じである可能性が低い。なぜなら、これが可能な命令コンバータは、製造するのが困難であるからである。しかしながら、コンバートされたコードは、一般的な演算を達成し、代替の命令セットからの命令で構成されることになる。それゆえ、命令コンバータ1612は、エミュレーション、シミュレーション、または任意の他のプロセスを通して、x86命令セットプロセッサもしくはコアを有さないプロセッサまたは他の電子デバイスが、x86バイナリコード1606を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表わす。