本発明の様々な実施形態および態様は、以下に述べる詳細に関連して説明され、添付した複数の図面は、様々な実施形態を例示する。以下の説明および図面は、本発明の例示であり、本発明を限定するものとして解釈されるべきではない。本発明の様々な実施形態を深く理解するべく、様々な具体的詳細を説明する。しかし、場合によっては、本発明の複数の実施形態の簡潔な説明を提供するためには、周知または従来の詳細が説明されていない。
「一実施形態」または「実施形態」に対する本明細書における言及は、その実施形態に関連して特有の機能、構造、または特性が本発明の少なくとも1つの実施形態に含まれ得ることを意味している。本明細書の各所における「一実施形態において」という文言の出現は、必ずしも全てが同じ実施形態を指しているわけではない。
いくつかの実施形態によれば、命令セットは、効率的に複数のSKEIN MIX−PERMUTE演算を処理するべく、定義される。各命令を実行して、SKEIN演算(例えば、SKEIN256、SKEIN512、またはSKEIN1024)の複数のラウンド処理を行うことができる。本願全体にわたって、SKEIN256は、本発明の複数の実施形態に鑑みて説明されている。しかし、その技術をSKEIN512およびSKEIN1024に対して等しく適用することができる。
図4は、本発明の一実施形態に係るプロセッサまたはプロセッサコアの実行パイプラインのブロック図である。図4を参照すると、プロセッサ100は、任意の種類の命令処理装置を表してもよい。例えば、プロセッサ100は汎用プロセッサであってもよい。プロセッサ100は、もっぱら、様々な複合命令セットコンピューティング(CISC)プロセッサ、様々な縮小命令セットコンピューティング(RISC)プロセッサ、様々な超長命令語(VLIW)プロセッサ、それらの様々なハイブリッド、または他のタイプのプロセッサのいずれかであってもよい。プロセッサ100は、1または複数のプロセッサコアを表すものであってもよい。
複数のプロセッサコアは、複数の異なる方法で、複数の異なる目的で、さらに複数の異なるプロセッサに、実装されてもよい。例えば、そのような複数のコアの複数の実装として、(1)汎用コンピューティングを意図した汎用インオーダコア、(2)汎用コンピューティングを意図したハイパフォーマンス汎用アウトオブオーダコア、(3)グラフィクスおよび/またはサイエンス(スループット)コンピューティングを意図した特定用途向けコアを挙げることが可能である。複数の異なるプロセッサの複数の実装は、(1)汎用コンピューティングを意図した1または複数の汎用インオーダコアおよび/または汎用コンピューティングを意図した1または複数の汎用アウトオブオーダコアを含む中央処理装置(CPU)と、(2)グラフィクスおよび/またはサイエンス(スループット)を主に意図した1または複数の特定用途向けコアを含むコプロセッサとを、備えてもよい。そのような複数の異なるプロセッサは、複数の異なるコンピュータシステムアーキテクチャをもたらし、それには、(1)CPUとは別のチップ上のコプロセッサと、(2)CPUとして同じパッケージ内の別個のダイ上のコプロセッサと、(3)CPUとして同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、しばしば、統合グラフィクスおよび/またはサイエンス(スループット)ロジックとして、または特定用途向けコアなどの、特定用途向けロジックと称される)と、(4)同じダイ上に上記CPU(場合によっては、アプリケーションコア(複数可)もしくはアプリケーションプロセッサ(複数可)と称される)、上記コプロセッサ、および追加の機能性を有してもよいチップ上のシステムとを、挙げることが可能である。例示的なコアアーキテクチャを次に説明し、その後に例示的なプロセッサとコンピュータアーキテクチャとの説明を行う。
一実施形態において、プロセッサ100は、限定されるものではないが、命令デコーダ101と、1または複数の実行部102とを備える。命令デコーダ101は、命令フェッチ部(不図示)からの複数の命令103を受信して復号化するものである。命令デコーダ101は、1または複数のマイクロ演算、マイクロコード、複数のエントリポイント、複数のマイクロ命令、複数の他の命令、またはこれらの命令を反映もしくはそれらから派生される他の制御信号を生成および出力することが可能である。命令デコーダ101は、様々な異なるメカニズムを用いて、実装されてもよい。複数の適したメカニズムの例として、限定されるものではないが、複数のリードオンリメモリ(ROM)、複数のルックアップテーブル、複数のハードウェア実装プログラマブルロジックアレイ(PLA)、およびその他が挙げられる。
実行部(複数可)102は、演算ロジック部、または命令に基づいて演算を実行可能な別のタイプのロジック部を有してもよい。命令を復号化する命令デコーダ101の結果として、実行部102は、1または複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、または該命令を反映もしくは該命令から派生される他の制御シグナル他の制御信号を受信してもよい。実行部102は、1または複数のソースオペランド(SRC)を示している複数の命令の結果として、かつこれらの命令によって示されるレジスタセットの1または複数のデスティネーションオペランド(DEST)の結果を格納するべく、動作可能である。実行部102は、複数の命令またはこれらの命令から派生される複数の他の制御信号を実行し、それに応じて演算を行うべく、動作可能である回路または他の実行ロジック(例えば、ハードウェアおよび/もしくはファームウェアと組み合わさったソフトウェア)を有してもよい。実行部102は、例えば、複数のロジック部、複数の演算ロジック部(ALU)、複数の演算部、複数の整数部、その他の任意の種類の実行部を表してもよい。
ソースのいくつかまたは全てとデスティネーションオペランドとは、レジスタセットの複数のレジスタまたはメモリに格納されてもよい。レジスタセットは、考えられる他のレジスタ(例えばステータスレジスタ、フラグレジスタ、その他)と共に、レジスタファイルの一部であってもよい。レジスタは、データの格納に用いることが可能であるストレージロケーションまたはデバイスであってもよい。レジスタセットは、しばしば、実行部(複数可)を有するダイ上に、物理的に置かれる場合がある。レジスタは、プロセッサの外側から、またはプログラマの視点から見えてもよい。例えば、複数の命令は複数のレジスタに格納された複数のオペランドを特定してもよい。複数の異なるタイプのレジスタは、本明細書中に説明されるように、データを格納および提供可能である限り、適している。レジスタは、リネームされてもよく、されなくてもよい。複数の適したレジスタの例として、限定されるものではないが、複数の専用物理レジスタ、レジスタリネーミングを用いてダイナミックに割り当てられた複数の物理レジスタ、複数の専用物理レジスタとダイナミックに割り当てられた複数の物理レジスタとの組み合わせ、その他が挙げられる。あるいは、複数のソースオペランドおよび複数のデスティネーションオペランドのうちの1または複数がレジスタ以外のストレージロケーション、例えばシステムメモリ内のロケーションなどに、格納されてもよい。
一実施形態によれば、実行部102はさらに、1または複数のSKEIN部106を有する。このSKEIN部106は、単一命令多重データ(SIMD)命令に応答して複数のSKEIN MIX−PERMUTE演算の複数のラウンド処理を実行することができる。SIMDデータは、複数のSKEIN状態、複数のワード入力、および1または複数のレジスタ104(例えば、少なくとも128ビットを有するレジスタ)に特化したローテーション値などのデータ110を用いて、命令デコーダ101により受信および提供される。一実施形態において、各々が少なくとも128ビットを有する一組のレジスタ(例えばレジスタ104)は、MIX−PERMUTE演算の入力および/または出力を格納するために利用される。256ビットSKEIN状態は、少なくとも128ビットを有するレジスタペア、例えばXMMレジスタに格納される。
SKEIN256に関して、次のラウンド処理ではオペランドペア0,3および2、1に置き換えられるオペランドペア0、1、および2、3を有する4つの64ビットオペランドが存在する。
SKEIN256に関して、ワードのペアリングは、ラウンド処理2回ごとに反復する。奇数ラウンド処理1、3、5、7、・・・に関して、オペランド0および1は第1のMIX関数に関してペアを形成し、オペランド2および3は第2のMIX関数に関してペアを形成する。偶数ラウンド処理0、2、4、6、・・・に関して、図5に示されるように、オペランド0および3は第1のMIX関数に関してペアを形成し、オペランド2および1は第2のMIX関数に関してペアを形成する。図5を参照すると、一実施形態によれば、第1の128ビットXMMレジスタ501は、2つの64ビットワードを第1のオペランドとして格納し、第2の128ビットXMMレジスタ502は別の2つの64ビットワードを第2のオペランドとして格納する。第3のオペランドとしての即値バイト503は、MIX関数のローテーション値を格納する。SKEIN部106は、次のラウンド処理のための新ワード504を生成するべく、複数のSKEIN MIX−PERMUTE演算の複数のラウンド処理を実行するものである。一実施形態において、ワード1および3(例えば、奇数ワード(odd word))はXMMレジスタ501に格納され、一方でワード0および2(例えば、複数の偶数ワード(even word))はXMMレジスタ503に格納される。オペランド503は、図1Aのローテーション値R
d,iを表し、ここで、R
d,iは、図3に示されるように、表に基づいて決定される。
一実施形態によれば、奇数および偶数のXMMレジスタのビット[127:64]および奇数および偶数のXMMレジスタのビット[63:0]に基づいたSKEIN MIX関数の実行によって、4つの内部64ビット値、すなわちroundl_even_high、roundl_odd_high、roundl_even low、およびroundl_odd lowを生成する。次に、第2の対のMIX関数は、round1_odd_highによってround1_even_low上で、および、round1_odd_lowによってround1_even_high上で、実行され、4つの内部64ビット値からなる第2の組、すなわちround2_even_high、round2_even_low、およびround2_odd_lowが生成される。このことは、図6に示されるように、ラウンド処理1の順列とラウンド処理2のMIX関数とを効果的に実行する。
一実施形態によれば、SKEIN256に関して、複数のSKEIN MIX−PERMUTE演算の複数のラウンド処理(例えば、SKEIN256の2回のラウンド処理)を実行するべく、SKEIN256_ODDおよびSKEIN256_EVENという2つの命令が定義される。命令SKEIN256_ODDは、複数のSKEIN MIX−PERMUTE演算の2回のラウンド処理の後に、奇数ワード(odd word)1および3の新たな値を生成する。命令SKEIN256_EVENは、複数のSKEIN MIX−PERMUTE演算の2回のラウンド処理の後に、偶数ワード(even word)0および2の新たな値を生成する。
一実施形態において、図7Aに示されるように、命令SKEIN256_ODDは、以下のように定義される。
ソースとして、XMM1は以下のように定義される。
ソースとして、XMM2は以下のように定義される。
即値バイトimmは、R
d,iを表すデスティネーションとして、新奇数ワード(new odd word)1および3を、以下のようにして、XMM1によって示されるストレージロケーションに格納される。
一実施形態において、図7Bに示されるように、命令SKEIN256_EVENは以下のように定義される。
ソースとして、XMM1は以下のように定義される。
ソースとして、XMM2は以下のように定義される。
即値バイトimmは、R
d,iを表す。デスティネーションとして、以下のようにして、新奇数ワード0および2は、XMM1によって示されるストレージロケーションに格納される。
上記命令を利用する擬似コードの例を以下に示す。
3サイクルパイプラインにより、4サイクルごとにラウンド処理を2回達成することができる。即値オペランドは、複数のMIX関数の複数のローテート値を特定する。
図8は、一実施形態に係わる複数のSKEIN MIX−PERMUTE演算を実行する方法を示すフロー図である。方法800は、図5のプロセッサ100によって実行されてもよい。図8を参照すると、ブロック801では、処理ロジックは、複数のSKEIN MIX−PERMUTE演算を実行する第1のオペランド、第2のオペランド、および第3のオペランドを有する命令(例えば、SKEIN256_EVENまたはSKEIN256_ODD)を受信する。ブロック802では、処理ロジックは、第1のオペランドによって示されるストレージロケーションから複数の奇数ワードを取得する。ブロック803では、処理ロジックは、第2のオペランドによって示されるストレージロケーションから偶数ワードを取得する。ブロック804では、処理ロジックは、第3のオペランドによって示されるストレージロケーションから取得したローテーション値を用いて、奇数ワードおよび偶数ワードに基づく複数のSKEIN MIX−PERMUTE演算の複数のラウンド処理を実行する。ブロック805では、SKEIN MIX−PERMUTE演算の結果は、第1のオペランドによって示されるストレージロケーションに格納される。
別の実施形態によれば、オペランドの代替的レイアウトもまた実装可能である。例えば、ワード(word)0およびワード(word)1は、1つのXMMレジスタ:XMM1[127:64]=word0;XMM1[63:0]=word1に格納されてもよい。ワード(word)2およびワード(word)3は、別のXMMレジスタ:XMM2[127:64]=word2;XMM2[63:0]=word3に格納してもよい。このことは、正規レイアウト(上述のような奇数偶数レイアウトの代わり)と称される。2回のラウンド処理が複数回実行される場合、複数の順列は、オリジナルレイアウトへのオペランドの復帰をもたらす。したがって、命令セットは、上述した2つの代わりに4回のラウンド処理を実行し得る。
即値バイトは、図3のローテート値の表にある複数の行の複数のペアにマッピングされる2回のラウンド処理ISA用として4つの値を許容するものとして定義されることになる。4回のラウンド処理ISAに関して、2つの値を即値バイトとして特定することができ、これらの値は表の上半分または下半分を選択することになる。
さらなる実施形態によれば、上述の技術はSKETN512にも適用され得る。SKEIN512では、4回のラウンド処理が完了した後に、サブキーが追加される。512ビットSKEINステートデータは、4つの128ビットレジスタ、例えばXMMレジスタに格納される必要がある。SKETN512に関して、次のラウンド処理ではオペランドペア(2,1)、(4,7)、(6,5)、および(0,3)に置き換えられるオペランドペア(0,1)、(2,3)、(4,5)、および(6,7)による8つの64ビット演算が存在する。
SKEIN512に関しては、4回のラウンド処理ごとにワードのペアリングが反復する。ラウンド処理間でオペランドをシャッフルする必要がある命令を避けるべく、複数のXMMレジスタにおいて、複数の奇数オペランドを一緒に格納し、かつ複数の偶数オペランドを一緒に格納する。SKEIN512の複数の順列によって、繰り返し4回のラウンド処理パターンにおいて異なる偶数ワードとペアリングする各々の奇数ワードが結果として生ずる。
上記表は、SKEIN512演算の4回のラウンド処理に関する奇数/偶数ワードのペアリングを示す。ラウンド処理1および2では、奇数ワード1および3は、SKEIN256の場合と同様のやり方で1回目のラウンド処理には同じレーンおよび2回目のラウンド処理には交差レーンにある偶数ワード0および2とペアリングする。また、ラウンド処理1および2において、奇数ワード5および7は、同じやり方で偶数ワード4および6とペアリングする。ラウンド処理3および4では、奇数ワード1および3は、偶数ワード4および6とペアリングし、一方で奇数ワード5および7は、1回目のラウンド処理には同じレーンおよび2回目のラウンド処理には交差レーンにある偶数ワード0および2とペアリングする。このように、2つの奇数ワードおよび2つの偶数ワードを処理するための命令は、SKEINの2回のラウンド処理に関して、SKEIN512およびSKEIN256(奇数偶数レイアウトで2回のラウンド処理を実行する命令セット用)の全ての場合において、類似している。命令の主な違いは、即値オペランドによって特定される、異なるラウンド処理およびペアリングに必要であるラウンド処理制御である。
一実施形態に従って、上記命令を利用する擬似コードの例を以下に示す。
3サイクル命令パイプラインに関して、SKEIN512のパフォーマンスは、5サイクルで2回のラウンド処理である(両方の偶数の更新は、次の2回のラウンド処理に必要である)。128ビットXMMレジスタは、2つの64ビットオペランドを格納する。一実施形態において、ワード1および3は、XMMレジスタに格納される。すなわち、XMM[127:64]=word1;XMM[63:0]=word3。同様に、ワード0およびワード2は、別のXMMレジスタに格納される。すなわち、XMM[127:64]=word0;XMM[63:0]=word2。オペランドペア(5,7)および(4,6)も同様である。
同様に、一実施形態によれば、2つの命令が定義される。すなわち、SKEIN512_ODDおよびSKEIN512_EVEN。SKEIN512_ODDは、MIX−PERMUTE−MIX−PERMUTEの2回のラウンド処理の後に、奇数ワードに関して新たな値を生成する。SKEIN512_EVENは、MIX−PERMUTE−MIX−PERMUTEの2回のラウンド処理の後に、偶数ワード用の新たな値を生成する。即値オペランドは、MIX関数のローテート値を特定する。命令SKEIN512_EVENに関して、偶数ワードの第2の順列を完了するためのデスティネーションXMM[127:64]=round2_even_lowおよびXMM[63:0]=round2_even_highである。命令SKEIN512_ODDに関して、デスティネーションXMM[127:64]=round2_odd_highおよびXMM[63:0]=round2_odd_lowである。奇数ワードは、同じワードレーンにとどまる。なぜなら、複数の順列を達成するべく、複数の下位ワードのみが上位ワードレーンおよび下位ワードレーンをスワッピングしなければならない。
一実施形態によれば、即値バイトは、図3に示される表において複数の行からなる複数の対にマッピングする2回のラウンド処理ISA用として4つの値を許容するものとして定義され得る。しかし、SKEIN256と違って、各ラウンド処理に関する異なるローテート値セットは、我々がより高位な256ビットの状態で演算しているかに依存している。我々は、このISAをSKEIN1024に拡張可能にもしたい。一実施形態において、即値制御は2つの値X||Yを有すると定義する。一実施形態において、各命令は、以下のようなやり方で図3の表から4回のローテート値を利用する。
したがって、YおよびXは、0から3の間の値を取ることが許されるであろう。一実施形態によれば、適用可能なマッピングは、X=imm8[3:2]、Y=imm8[1:0]であろう。SKEIN512に関して、Xは2つの値0および1によって特定されよう。SKEIN256に関して、Xは0であり、Yは処理されているラウンド処理に応じて変動する。
命令セット、すなわち命令セットアーキテクチャ(ISA)は、プログラミングに関連したコンピュータアーキテクチャの一部であり、ネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割り込および例外処理、ならいに外部入力および出力(I/O)を有してもよい。命令の用語は、概して本明細書中では、マクロ命令のことを言う。すなわち、マクロ命令は、実行のためにプロセッサ(あるいは、プロセッサによって処理される1または複数の他の命令に1つの命令をトランスレート(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用)、モーフィング、エミュレート、またはさもなければ変換する命令変換部)に提供される命令であり、マイクロ命令またはマイクロ演算(マイクロop)とは対照的に、マクロ命令を復号化するプロセッサのデコーダの結果である。
ISAは、命令セットを実装するプロセッサの内部設計であるマイクロアーキテクチャと識別される。異なるマイクロアーキテクチャを有する複数のプロセッサは、共通命令セットを共有し得る。例えば、Intel(登録商標)Pentium(登録商標)4プロセッサ、Intel(登録商標)Core(商標)プロセッサ、およびカリフォルニア州サニーベールのAdvanced Micro Devices, Inc.のプロセッサは、ほぼ同じのバージョンの×86命令セット(より新しいバージョンが追加されているいくつかの拡張を有する)を実装するが、異なる内部設計を有する。 例えば、ISAの同じレジスタアーキテクチャは、周知の技術を用いて、異なる方法で異なるマイクロアーキテクチャに実装されてもよく、専用物理レジスタ、レジスタリネーミングメカニズム(例えば、レジスタエイリアステーブル(RAT)、リオーダバッファ(ROBの使用)、およびリタイアレジスタファイル;複数のマップと複数のレジスタからなるプールとの使用)を用いた1または複数のダイナミックに割り当てられた物理レジスタ、その他が含まれる。別段の定めがない限り、文言であるレジスタアーキテクチャ、レジスタファイル、およびレジスタの極は、ソフトウェア/プログラマに見えるもの、および、命令がレジスタを特定するやり方に言及するべく、本明細書中で用いられる。特定性が所望される場合、ロジックカル、アーキテクチャ、またはソフトウェアビジブルの形容詞は、レジスタアーキテクチャ内のレジスタ/ファイルを示すべく、用いられる。一方で、異なる形容詞は、所与のマイクロアーキテクチャ内の複数の指定レジスタ(例えば、物理レジスタ、リオーダバッファ、リタイアメントレジスタ、レジスタプール)に対して用いられる。
命令セットは、1または複数の命令フォーマットを設定する。所与の命令フォーマットは、他にもあるうち、実行される演算(オペコード)およびその演算が実行されるように構成されるオペランド(複数可)を特定するべく、様々なフィールド(ビット数、ビットのロケーション)を定義する。いくつかの命令フォーマットは、複数の命令テンプレート(または複数のサブフォーマット)の定義を介して、さらに分割される。例えば、所与の命令フォーマットの複数の命令テンプレートは、命令フォーマットの複数のフィールドからなる異なるサブセットを複数持つように定義されてもよく(含まれた複数のフィールドは一般的に同じ順位にあるが、含まれているフィールドがより少ないことから少なくともいくつかは複数の異なるビットポジションを有する)、および/または異なるように解釈された所与のフィールドを持つように定義されてもよい。したがって、ISAの各命令は、所与の命令フォーマット(および、もし定義されているならば、その命令フォーマットの所与の1または複数の命令テンプレート内)を用いて表わされ、演算およびオペランドを特定するための複数のフィールドを含む。例えば、例示的なADD命令は、特定のオペコードと命令フォーマットとを有する。命令フォーマットは、そのオペコードを特定するためのオペコードフィールドと複数のオペランド(ソース1/デスティネーションおよびソース2)を選択するための複数のオペランドフィールドとを含む。命令ストリームにおけるこのADD命令の発生は、複数の特定オペランドを選択する複数のオペランドフィールド内の複数の特定のコンテンツを有するであろう。
サイエンス的、財政的、自動ベクトル化汎用、RMS(認識、マイニング、および合成)、ならびにビジュアルおよびマルチメディアアプリケーション(例えば、2D/3Dグラフィクス、イメージ処理、ビデオ圧縮/解凍、音声認識アルゴリズム、およびオーディオ操作)は、多数のデータアイテム上で実行される同じ演算(「データパラレリズム」と称される)を、しばしば必要とする。Single Instruction Multiple Data(SIMD)は、複数のデータアイテム上で演算をプロセッサに実行させる命令の一タイプに言及する。SIMD技術は、特に、レジスタのビットを、各々が個別の値を表しているいくつかの一定のサイズのデータ要素に論理的に分割し得るプロセッサに、適している。例えば、256ビットレジスタ内の複数のビットは、4つの別々の64ビットパックドデータ要素(クワッドワード(Q)サイズデータ要素)、8つの別々の32ビットパックドデータ要素(ダブルワード(D)サイズデータ要素)、16個の別々の16ビットパックドデータ要素(ワード(W)サイズデータ要素)、または32の別個の8ビットデータ要素(バイト(B)サイズデータ要素)として演算されるソースオペランドとして、特定されてもよい。このタイプのデータは、パックドデータタイプまたはベクトルデータタイプと称される。また、このデータタイプの複数のオペランドは、複数のパックドデータオペランドまたは複数のベクトルオペランドと称される。言い換えれば、パックドデータアイテムまたはベクトルは、一連のパックドデータ要素と称され、また、パックドデータオペランドまたはベクトルオペランドはSIMD命令(パックドデータ命令またはベクトル命令としても知られている)のソースまたはデスティネーションオペランドである。
例として、SIMD命令の1つのタイプは、同数のデータ要素によって、かつ同じのデータ要素順序で、同じサイズの複数のデスティネーションベクトルオペランド(結果ベクトルオペランドとも称される)を生成するべく、垂直様式の2つのソースベクトルオペランド上で実行される単一のベクトル演算を特定する。複数のソースベクトルオペランド内のデータ要素は、ソースデータ要素と称される。その一方で、デスティネーションベクトルオペランド内のデータ要素は、デスティネーションまたは結果データ要素と称される。これら複数のソースベクトルオペランドは、同じサイズであり、同じ幅の複数のデータ要素を含むので、それらは同数のデータ要素を含む。2つのソースベクトルオペランド内の複数の同じビットポジションの複数のソースデータ要素は、複数のデータ要素(対応データ要素とも称される;すなわち、各ソースオペランドのデータ要素ポジション0にあるデータ要素が対応し、各ソースオペランドのデータ要素ポジション1にあるデータ要素が対応し、以下同様である)からなる複数の対を形成する。そのSIMD命令によって特定された演算は、ソースデータ要素のこれらの各対の上で別々に実行され、適合する数の結果データ要素を生成するので、ソースデータ要素の各々の対は対応する結果データ要素を有する。演算が垂直であることから、ならびに、結果ベクトルオペランドが同じサイズであり、同数のデータ要素を有し、複数の結果データ要素が複数のソースベクトルオペランドとして同じデータ要素順序で格納されることから、結果データ要素は、複数のソースベクトルオペランド内の対応ソースデータ要素対として、結果ベクトルオペランドの同じビットポジションにある。SIMD命令のこの例示的なタイプに加えて、様々な他のタイプのSIMD命令(例えば、たった1つの、または2を上回る複数のソースベクトルオペランドを有するもの、水平様式で動作するもの、異なるサイズの結果ベクトルオペランドを生成するもの、複数の異なるサイズデータ要素を有するもの、および/または異なるデータ要素順序を有するもの)が存在する。理解するべきことは、デスティネーションベクトルオペランド(またはデスティネーションオペランド)という用語は、命令によって特定された演算を実行する直接的な結果として定義され、それには、別の命令によって(別の命令による同じロケーションの特定によって)ソースオペランドとしてアクセス可能であるように、1つのロケーション(それがレジスタであること、または、その命令によって特定されるメモリアドレス上)でのデスティネーションオペランドの格納が含まれる。
SEVID技術、例えば、x86、MMX(商標)、ストリーミングSEVID拡張(SSE)、SSE2、SSE3、SSE4.1、およびSSE4.2命令を含む命令セットを有するIntel(登録商標)Core(商標)プロセッサによって採用されたものは、アプリケーションパフォーマンスの顕著な向上を可能にした。アドバンスドベクトル拡張(AVX)(AVX1およびAVX2)と称され、ベクトル拡張(VEX)符号化スキームが用いられる複数のSEVID拡張からなる追加のセットがリリースおよび/または公開されている(例えば、Intel(登録商標)64およびIA−32アーキテクチャソフトウェアデベロッパーズマニュアル、2011年10月を参照、および、Intel(登録商標)Advanced Vector Extensions Programming Reference、2011年6月を参照)。
本明細書中に説明される命令(複数可)の複数の実施形態は、異なるフォーマットで具現化されてもよい。さらに、例示的なシステムアーキテクチャ、および、パイプラインの詳細を以下に示す。命令(複数可)の複数の実施形態は、詳細に説明されたものに限定されるものではないが、そのようなシステム、アーキテクチャ、およびパイプライン上で実行され得る。
VEX符号化は、複数の命令が2を上回る数のオペランドを有することを可能にし、複数のSEVIDベクトルレジスタが128ビットより長くなることを可能にする。VEXプレフィックスの使用は、3オペランド(またはより多くの)構文を提供する。例えば、以前の複数の2オペランド命令は、ソースオペランドを上書きするA=A+Bなどの複数の演算を、実行した。VEXプレフィックスの使用は、オペランドがA=B+Cのような非破壊の演算を遂行することを可能にする。
図9Aは、VEXプレフィックス2102、リアルオペコードフィールド2130、Mod R/Mバイト2140、SIBバイト2150、変位フィールド2162、およびIMM8 2172を含む例示的なAVX命令フォーマットを例示する。図9Bは、図9Aからのどのフィールドがフルオペコードフィールド2174と基本演算フィールド2142とを作るかについて説明する。図9Cは、図9Aからのどのフィールドがレジスタインデックスフィールド2144を作るかについて説明する。
VEXプレフィックス(バイト0〜2)2102は、3バイトの形で符号化される。第1のバイトは、フォーマットフィールド2140(VEXバイト0、ビット[7:0])であり、これは、明確なC4バイト値(C4命令フォーマットを識別するために使用される固有値)を含む。第2、第3のバイト(VEXバイト1〜2)は、特定の機能を提供するいくつかのビットフィールドを含む。具体的には、REXフィールド2105(VEXバイト1、ビット[7〜5]は、VEX.Rビットフィールド(VEXバイト1、ビット[7]−R)、VEX.Xビットフィールド(VEXバイト1、ビット[6]−X)、およびVEX.Bビットフィールド(VEXバイト1、ビット[5]−B)からなる。複数の命令の他のフィールドは、当技術分野で知られているように、下位3ビットのレジスタインデックス(rrr、xxx、およびbbb)を符号化するので、Rrrr、Xxxx、およびBbbbは、VEX.R、VEX.X、およびVEX.Bを追加することによって形成可能である。オペコードマップフィールド2115(VEXバイト1、ビット[4:0]−mmmmm)は、暗示リーディングオペコードバイトを符号化するコンテンツを含む。W Field 2164(VEXバイト2、ビット[7]−W)は、表記VEX.Wによって表され、そして、命令に応じて異なる関数を提供する。VEX.vvvv 2120(VEXバイト2、ビット[6:3]vvvv)の役割として、以下のものを挙げることができる。
(1)VEX.vvvvは、反転(1の補数)形式で特定された第1のソースレジスタオペランドを符号化し、2またはそれ以上のソースオペランドを有する複数の命令に有効である。
(2)VEX.vvvvは、特定のベクトルシフトに関して1の補数形式に特化したデスティネーションレジスタオペランドを符号化する。または、
(3)VEX.vvvvは、任意のオペランドを符号化せず、フィールドがリザーブされ、1111bを含まなければならない。もしVEX.L2168サイズフィールド(VEXバイト2ビット[2]−L)=0であるならば、それは128ビットベクトルを示し、もしVEX.L=1ならば、それは256ビットベクトルを示す。プレフィックス符号化フィールド2125(VEXバイト2、ビット[1:0]−ppは、基本演算フィールド用の複数の追加のビットを提供する。
リアルオペコードフィールド2130(バイト3)もまた、オペコードバイトとしても知られている。オペコードの一部は、このフィールドに特定される。MOD R/Mフィル−ド2140(バイト4)は、MODフィールド2142(ビット[7−6])、Regフィールド2144((ビット[5−3])、およびR/Mフィールド2146(ビット[2−0])を含む。Regフィールド2144の役割は、以下のものを含んでもよい。すなわち、デスティネーションレジスタオペランドまたはソースレジスタオペランド(Rrrrのrrr)のいずれかを符号化すること、またはオペコードエクステンションとして処理され、いっさいの命令オペランドを符号化するためには使用されないことである。R/Mフィールド2146の役割として、以下のものを含んでもよい。すなわち、メモリアドレスを参照する命令オペランドを符号化すること、またはデスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかを符号化することである。
スケール、インデックス、ベース(SIB) − スケールフィールドのコンテンツ2150(バイト5)は、メモリアドレス発生に用いられるSS2152(ビット[7−6])を含む。SIB.xxx 2154ビット][5−3]およびSIB.bbb2156ビット[2−0]のコンテンツは、以前は、レジスタインデックスXxxxおよびBbbbに関連して言及されてきた。変位フィールド2162および即値フィールド(IMM8)2172は、アドレスデータを含む。
ベクトルフレンドリ命令フォーマットは、複数のベクトル命令(例えば、複数のベクトル演算に特有のいくつかのフィールドを含む)に適している複数の命令フォーマットである。ベクトルおよびスカラ演算の両方がベクトルフレンドリ命令フォーマットを介してサポートされている一方で、複数の代替実施形態はベクトルフレンドリ命令フォーマットである複数のベクトル演算のみしか使用しない。
図10Aおよび図10Bは、ブロック図であり、これらの図は本発明の複数の実施形態に係る汎用ベクトルフレンドリ命令フォーマットおよびその複数の命令テンプレートを例示する。図10Aは、本発明の複数の実施形態に係る汎用ベクトルフレンドリ命令フォーマットおよびその複数のクラスA命令テンプレートを例示するブロック図である。一方で、図10Bは、本発明の複数の実施形態に係る汎用ベクトルフレンドリ命令フォーマットおよびその複数のクラスB命令テンプレートを例示するブロック図である。より具体的には、クラスAおよびクラスB命令テンプレートに対して定義される汎用ベクトルフレンドリ命令フォーマット2200は、両方とも複数の非メモリアクセス2205の命令テンプレートと複数のメモリアクセス2220の命令テンプレートとを含む。ベクトルフレンドリ命令フォーマットとの関連で使用される用語である「汎用」は、任意の具体的な命令セットと結びついていない命令フォーマットのことをいう。
本発明の複数の実施形態は、ベクトルフレンドリ命令フォーマットが以下のものをサポートすることを説明する。すなわち、32ビット(4バイト)または64ビット(8バイト)データ要素幅(またはサイズ)を有する64バイトベクトルオペランド長(または8バイト)(したがって、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バイトベクトルオペランド)を、サポートするものであってもよい。
図10Aの複数のクラスA命令テンプレートは、(1)複数の非メモリアクセス2205の命令テンプレート内に、非メモリアクセス、完全ラウンド制御型演算2210の命令テンプレート、および非メモリアクセス、データ変換型演算2215の命令テンプレートが示されていること、ならびに、(2)複数のメモリアクセス2220の命令テンプレート内に、メモリアクセス、一時的2225の命令テンプレート、およびメモリアクセス、非一時的2230の命令テンプレートが示されていること、を含む。図10Bの複数のクラスB命令テンプレートは、(1)複数の非メモリアクセス2205の命令テンプレート内に、非メモリアクセス、書き込みマスク制御、部分的ラウンド制御処理型演算2212の命令テンプレート、および非メモリアクセス、書き込みマスク制御、VSIZE型演算2217の命令テンプレートが示されていこと、(2)複数のメモリアクセス2220の命令テンプレート内に、メモリアクセス、書き込みマスク制御2227の命令テンプレートが示されていること、を含む。
汎用ベクトルフレンドリ命令フォーマット2200は、図10Aおよび図10Bに示す順序で、下にリストアップした以下の複数のフィールドを含む。フォーマットフィールド2240 − このフィールドの特定の値(命令フォーマット識別子値)は一意的にベクトルフレンドリ命令フォーマットを識別し、複数の命令ストリーム内のベクトルフレンドリ命令フォーマットの複数の命令の発生が識別される。このように、このフィールドは、汎用ベクトルフレンドリ命令フォーマットのみを有する命令セットに必要とされないという意味で任意である。基本演算フィールド2242 − そのコンテンツは複数の異なる基本演算を識別する。
レジスタインデックスフィールド2244 − そのコンテンツは、直接、または、アドレス発生を介して、ソースの複数のロケーションと複数のデスティネーションオペランドとを、それらがレジスタにあろうともメモリにあろうとも、特定する。これらは、PxQ(例えば、32x512、16x128、32x1024、64x1024)レジスタファイルからN個のレジスタを選択するべく、十分な数のビットを含む。一実施形態において、Nが最大で3つのソースと1つのデスティネーションレジスタまでであってもよい。一方で、複数の代替実施形態において、より多くのまたはより少ない、複数のソースと複数のデスティネーションレジスタとをサポートしてもよい(例えば、最大2つのソースをサポートしてもよくこれらのソースの1つはデスティネーションとしても機能するものをサポートしてもよく、最大で3つのソースをサポートしてもよくこれらのソースのうちの1つはデスティネーションとして機能するものをサポートしてもよく、あるいは最大で2つのソースと1つのデスティネーションとをサポートしてもよい)。
変形子フィールド2246 − そのコンテンツは、ジェネリックベクトル命令フォーマットの複数の命令の発生を識別する。これらの命令は、複数の非メモリアクセス2205の命令テンプレートと複数のメモリアクセス2220の命令テンプレートとのうち、メモリアクセスをするものを、そうでないものから特定する。複数のメモリアクセス演算は、メモリ階層に対して読み取および/または書き込み(場合によっては、複数のレジスタ内の複数の値を用いてソースおよび/またはデスティネーションアドレスを特定)を行う。一方で、非メモリアクセス演算はそのようなことを行わない(例えば、ソースおよび複数のデスティネーションは、複数のレジスタ)。一実施形態において、このフィールドは、複数のメモリアドレス計算を実行するべく、3つの異なる方法の間で選択する。一方で、代替実施形態は、複数のメモリアドレス計算を実行するべく、より多い、より少ない、または異なる方法をサポートするものであってもよい。
追加演算フィールド2250 − そのコンテンツは、基本演算に加えて、様々な異なる演算のうちのどれが実行されるべきかを識別する。このフィールドはコンテキストに特有である。本発明の一実施形態において、このフィールドはクラスフィールド2268、アルファフィールド2252、およびベータフィールド2254に分割される。追加演算フィールド2250は、複数の演算からなる複数の共通グループが、2、3、または4つの命令よりはむしろ単一の命令で実行されるのを可能にする。スケールフィールド2260 − そのコンテンツはメモリアドレス発生用(例えば、2scale*index+baseを用いるアドレス発生用)のインデックスフィールドのコンテンツのスケーリングを可能にする。
変位フィールド2262A − そのコンテンツはメモリアドレス発生の一部として用いられる(例えば、2scale*index+base+displacementを用いるアドレス発生用)。変位係数フィールド2262B(変位係数フィールド2262Bに直に加えて変位フィールド2262Aを並置することは一方または他方が用いられることを示す点に留意) − そのコンテンツは、アドレス発生の一部として用いられる。それはメモリアクセス(N)のサイズによって基準化されるように変位係数を特定する。ここで、Nはメモリアクセスのバイト数(例えば、2scale*index+base+scaled displacementを用いるアドレス発生用)である。複数の冗長な下位ビットは無視される。それ故、変位係数フィールドのコンテンツは、有効なアドレスを計算する際に用いられる最終的な変位を生成するために、メモリオペランド総計サイズ(N)によって乗算される。Nの値は、フルオペコードフィールド2274(本明細書中に後述)およびデータ操作フィールド2254Cに基づいて、ランタイム時、プロセッサハードウェアによってランダムに決定される。変位フィールド2262Aおよび変位係数フィールド2262Bは、非メモリアクセス2205の命令テンプレートに用いられるという意味で、任意であり、および/または、複数の異なる実施形態はそれら2つのうちの1つを実装してもよく、もしくは全く実装されなくてもよい。
データ要素幅フィールド2264 − そのコンテンツは、いくつかのデータ要素幅のうちのどれが用いられるべきかを識別する(いくつかの実施形態において、すべての命令に関するものであり、複数の他の実施形態において、複数の命令のいくつかに関する)。このフィールドは、1つのみデータ要素幅がサポートされる、および/または、複数のデータ要素幅がオペコードのいくつかの態様を用いてサポートされる場合にそれが必要でないという意味で、任意である。
書き込みマスクフィールド2270 − そのコンテンツは、1つのデータ要素ポジション毎に基準として、デスティネーションベクトルオペランドのそのデータ要素ポジションが基本演算と追加演算との結果を反映するかどうかを、制御する。複数のクラスA命令テンプレートは、マージング・ライトマスキングをサポートし、一方で複数のクラスB命令テンプレートは、マージングおよびゼロイング・ライトマスキングの両方をサポートする。マージングする場合、複数のベクトルマスクは、任意の演算(基本演算および追加演算によって特定)の実行中、デスティネーションおける任意の要素の組が、更新から保護されることを可能とする。他の一実施形態において、対応マスクビットが0を有するデスティネーションの各要素の古い値を保護する。対照的に、複数のベクトルマスクをゼロにする場合、任意の演算(基本演算および追加演算によって特定)の実行中、デスティネーションの複数の要素からなる任意の組をゼロとすることを可能にする。一実施形態において、デスティネーションの要素は、対応マスクビットが0の値を有する場合に、0に設定される。この機能のサブセットは、実行されている演算のベクトル長を制御する能力である(すなわち、最初から最後のものの中で修正されている複数の要素のスパン)。しかし、修正される要素が連続であることは、必要でない。したがって、書き込みマスクフィールド2270は、複数のロード、複数の格納、演算、ロジック、その他を含む、部分的な複数のベクトル演算を可能にする。本発明の複数の実施形態において、使用される書き込みマスクを含むいくつかの書き込みマスクレジスタの1つを書き込みマスクフィールド2270のコンテンツが選択すること(したがって、書き込みマスクフィールド2270のコンテンツは間接的に、実行されるマスキングを識別すること)が説明される。その一方で、複数の別の実施形態は、その代わりに、またはそれに追加して、実行されるマスキングを直接的に特定するべくマスク書き込みフィールド2270のコンテンツを可能にする。
即値フィールド2272 − そのコンテンツは、即値の定義を考慮に入れる。このフィールドは、即値をサポートせず、かつ即値を用いない命令には存在しない汎用ベクトルフレンドリフォーマットの実装に存在しないという意味で、任意である。クラスフィールド2268 − そのコンテンツは複数の命令の異なる複数のクラス間を識別する。図10Aおよび図10Bに関連して、このフィールドのコンテンツはクラスAおよびクラスBの複数の命令間で選択する。図10Aおよび図10Bにおいて、角が丸みを帯びた複数の四角は、特定の値がフィールドに存在することを示すために用いられる(例えば、図10Aおよび図10Bのそれぞれにおいて、クラスフィールド2268のクラスA 2268AおよびクラスB 2268B)。
クラスAの非メモリアクセス2205の命令テンプレートの場合、アルファフィールド2252はRSフィールド2252Aとして解釈される。このRSフィールド2252Aのコンテンツは、複数の異なる追加演算タイプのうちのどれが実行されるべきかを識別する(例えば、ラウンド処理2252A.1およびデータ変換2252A.2は、非メモリアクセスであるラウンドタイプ演算2210と非メモリアクセスである複数のデータ変換型演算2215の命令テンプレートとのそれぞれに対して特定される)。一方で、ベータフィールド2254が特定のタイプの演算のうちのいずれが実行されるべきかを識別する。非メモリアクセス2205の命令テンプレートであるスケールフィールド2260では、変位フィールド2262Aおよび変位スケールフィールド2262Bは存在しない。
非メモリアクセス完全ラウンド制御型演算2210の命令テンプレートでは、ベータフィールド2254はラウンド制御フィールド2254Aとして解釈され、このコンテンツ(複数可)は静的ラウンド処理を提供する。説明される本発明の複数の実施形態において、ラウンド制御フィールド2254Aは、浮動小数点例外抑制(SAE)フィールド2256と、ラウンド演算制御フィールド2258とを含む。一方で、複数の代替実施形態は、これらのコンセプトの両方をサポートしてもよく、同じフィールドに符号化してもよく、または、これらのコンセプト/フィールドのうちの一方または他方を有してもよい(例えば、ラウンド演算制御フィールド2258のみを有してもよい)。
SAEフィールド2256 − そのコンテンツは、例外事象報告を無効化するか否かを識別する。抑制が有効であることをSAEフィールド2256コンテンツが示す場合、所与の命令はいかなる種類の浮動小数点例外フラグもレポートせず、いかなる浮動小数点例外ハンドラも持ち上げない。
ラウンド演算制御フィールド2258 − そのコンテンツは、一群のラウンド演算のうちのどれが実行されるべきかを識別する(例えば、切り上げ、切り下げ、ゼロ方向へのラウンド処理、および最近接値へのラウンド処理)。したがって、ラウンド演算制御フィールド2258は、1命令ごとにラウンド処理モードの変更を可能にする。
プロセッサがラウンド処理モードを特定するための制御レジスタを含む本発明の一実施形態において、ラウンド演算制御フィールドの2250のコンテンツは、そのレジスタ値をオーバーライドする。非メモリアクセスデータ変換型演算2215の命令テンプレートでは、ベータフィールド2254はデータ変換フィールド2254Bとして解釈され、そのコンテンツはいくつかのデータ変換のうちのどれが実行されるべきかを識別する(例えば、非データ変換、スウィズル、ブロードキャスト)。
クラスAのメモリアクセス2220の命令テンプレートの場合、アルファフィールド2252は、エビクションヒントフィールド2252Bと解釈され、そのコンテンツが、複数のエビクションヒントのうちのどれが用いられるべきかを識別する(図10Aにおいて、一時的2252B.1および非一時的2252B.2は、メモリアクセス、一時的2225の命令テンプレートと、メモリアクセス、非一時的2230の命令テンプレートとに、それぞれ特定される)。その一方で、ベータフィールド2254がデータ操作フィールド2254Cと解釈される。そのコンテンツは、いくつかのデータ操作演算(プリミティブとしても知られている)のうちのどれが実行されるべきかを識別する(例えば、操作なし;ブロードキャスト;ソースのアップコンバージョン;およびデスティネーションのダウンコンバージョン)。複数のメモリアクセス2220の命令テンプレートはスケールフィールド2260を含み、任意選択的に、変位フィールド2262Aまたは変位スケールフィールド2262Bを含む。
複数のベクトルメモリ命令は、変換サポートにより、メモリからの複数のベクトルロードとそれに対する複数のベクトル格納を行う。複数の通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素的様式で、メモリからデータを送信すること、および、メモリへデータを送信することを行う。実際に送信される複数の要素が、書き込みマスクとして選択されるベクトルマスクのコンテンツによって、規定される。
一時的データは、キャッシングから利益を得るのに十分なほどすぐに再利用される可能性が高いデータである。しかし、これはヒントであり、複数の異なるプロセッサが異なる方法でそれを実装してもよく、それにはヒントを完全に無視することも含まれる。非一時的データは、一次レベルキャッシュのキャッシングから利益を得るのに十分なほどすぐに再利用される可能性がなく、エビクションに対して優先権が与えられなければならないデータである。しかし、これはヒントであり、複数の異なるプロセッサが異なる方法でそれを実装してもよく、それにはヒントを完全に無視することも含まれる。
クラスBの複数の命令テンプレートの場合、アルファフィールド2252は書き込みマスク制御(Z)フィールド2252Cとして解釈される。そのコンテンツは、書き込みマスクフィールド2270によって制御される書き込みマスキングがマージまたはゼロ化されるべきかどうかを識別する。
非メモリアクセス2205のクラスBの複数の命令テンプレートの場合、ベータフィールド2254の一部はRLフィールド2257Aとして解釈される。そのコンテンツは、複数の異なる追加演算タイプのうちのどれが実行されるべきかを識別する(例えば、ラウンド処理2257A.1およびベクトル長(VSIZE)2257A.2は、それぞれ、非メモリアクセス、書き込みマスク制御、部分的ラウンド制御処理型演算2212の命令テンプレートと、非メモリアクセス、書き込みマスク制御、VSIZE型演算2217命令テンプレートと、に対して特定される)。一方で、ベータフィールド2254の残りは、特定のタイプの複数の演算のどれが実行されるべきかを識別する。
非メモリアクセス2205の命令テンプレートでは、スケールフィールド2260、変位フィールド2262A、および変位スケールフィールド2262Bは存在しない。非メモリアクセス、書き込みマスク制御、部分的ラウンド制御処理型演算2210の命令テンプレートでは、ベータフィールド2254の残りは、ラウンド演算フィールド2259Aと解釈され、例外事象報告はディセーブルである(所与の命令では浮動小数点例外フラグのいかなる種類もレポートせず、いかなる浮動小数点例外ハンドラも持ち上げない)。
ラウンド演算制御フィールド2259A − ラウンド演算制御フィールド2258と同様に、そのコンテンツは、一群のラウンド演算のうちのいずれが実行されるべきかを識別する(例えば、切り上げ、切り下げ、ゼロ方向へのラウンド処理、および最近接値へのラウンド処理)。したがって、ラウンド演算制御フィールド2259Aは、1命令ごとにラウンド処理モードの変更を可能にする。プロセッサがラウンド処理モードを特定するための制御レジスタを含む本発明の一実施形態において、ラウンド演算制御フィールドの2250のコンテンツは、そのレジスタ値をオーバーライドする。
非メモリアクセス、書き込みマスク制御、VSIZE型演算2217の命令テンプレートでは、ベータフィールド2254の残りは、ベクトル長フィールド2259Bと解釈され、そのコンテンツは、いくつかのデータベクトル長のうちのどれが実行されるべきかを識別する(例えば、128、256、または512バイト)。
クラスBのメモリアクセス2220の命令テンプレートの場合、ベータフィールド2254の一部は、ブロードキャストフィールド2257Bと解釈され、そのコンテンツは、ブロードキャストタイプデータ操作演算が実行される一方で、ベータフィールド2254の残りがベクトル長フィールド2259Bとして解釈されるか否かを識別する。複数のメモリアクセス2220の命令テンプレートは、スケールフィールド2260と、任意選択的に、変位フィールド2262Aまたは変位スケールフィールド2262Bとを含む。
汎用ベクトルフレンドリ命令フォーマット2200に関連して、フルオペコードフィールド2274は、フォーマットフィールド2240、基本演算フィールド2242、およびデータ要素幅フィールド2264を含むように示されている。フルオペコードフィールド2274がこれらのフィールドの全てを含む一実施形態が示される一方で、それらの全てをサポートしない複数の実施形態においては、フルオペコードフィールド2274に含まれるものは、それらのフィールドの全てよりも少ない。フルオペコードフィールド2274は、演算コード(オペコード)を提供する。
追加演算フィールド2250、データ要素幅フィールド2264、および書き込みマスクフィールド2270は、汎用ベクトルフレンドリ命令フォーマットにおいてこれらの特徴が1命令ごとに特定されるのを可能にする。書き込みマスクフィールドとデータ要素幅フィールドとの組み合わせは、複数の異なるデータ要素幅に基づいてマスクを適用させる複数の型付き命令を生成する。
クラスAとクラスBとの範囲内で見つかる様々な命令テンプレートは、複数の異なる状況下で有益である。本発明のいくつかの実施形態において、プロセッサ内の複数の異なるプロセッサまたは複数の異なるコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートしてもよい。例えば、汎用コンピューティングを意図したハイパフォーマンス汎用性アウトオブオーダコアは、クラスBだけをサポートしてもよく、グラフィクスおよび/またはサイエンス(スループット)演算を主たる目的とするコアは、クラスAのみをサポートしてもよく、両方を意図したコアは、両方をサポートしてもよい(もちろん、両方のクラスからの複数のテンプレートおよび複数の命令の全てを含むわけではないが両方クラスからの複数のテンプレートと複数の命令とからなるいくつかのミックスを有するコアは本発明の範囲内にある)。また、単一のプロセッサは、複数のコアを有してもよく、それらの全てが同じのクラスをサポートし、または異なるコアが異なるクラスをサポートする。例えば、別個のグラフィクスと汎用コアとを有するプロセッサにおいて、グラフィクスおよび/またはサイエンス的演算を主な目的とする複数のグラフィクスコアの1つは、クラスAのみをサポートしてもよく、一方で、汎用コアのうちの1または複数は、クラスBのみをサポートする汎用コンピューティングを意図したアウトオブオーダ実行およびレジスタリネーミングを有する複数のハイパフォーマンス汎用コアであってもよい。別個のグラフィクスコアを持たない別のプロセッサは、クラスAおよびクラスBの両方をサポートする1または複数の汎用インオーダまたはアウトオブオーダコアを有してもよい。もちろん、1つのクラスからの特徴もまた、本発明の複数の異なる実施形態において他のクラスで実装可能である。高水準言語で書かれている複数のプログラムは、様々な異なる実行可能な形式に換えてもよい(例えば、ジャストインタイムにコンパイルまたは静的にコンパイルする)。そのような形式には、(1)実行用のターゲットプロセッサによってサポートされるクラス(複数可)の複数の命令のみを有する形式、または、(2)全てのクラスの複数の命令からなる複数の異なる組み合わせを用いて書かれている複数の別のルーチンを有し、かつコードを目下実行しているプロセッサによってサポートされる命令に基づいて実行するべく複数のルーチンを選択する制御フローコードを有する形式、が含まれる。
図11A〜11Dは、本発明の複数の実施形態に係る例示的な特有のベクトルフレンドリ命令フォーマットを例示するブロック図である。図11A〜11Dは、それが複数のフィールドのロケーション、サイズ、インタプリテーション、および順序と、それらのフィールドのいくつかの複数の値とを特定するという意味で特有である特有のベクトルフレンドリ命令フォーマット2300を示す。特有のベクトルフレンドリ命令フォーマット2300は、x86命令セットを拡張するために用いられてもよく、したがって複数のフィールドのいくつかは、既存のx86命令セットおよびその拡張(例えば、AVX)に使用されたものと類似または同じである。このフォーマットは、複数の拡張を有する既存のx86命令セットのプレフィックス符号化フィールド、実オペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドと整合性を保つ。図11A〜11Dからの複数のフィールドがマッピングされる図10Aおよび10Bの複数のフィールドは、例示される。
理解するべきことは、本発明の複数の実施形態は、例示目的のための汎用ベクトルフレンドリ命令フォーマット2200のコンテキストとの関連で、特有のベクトルフレンドリ命令フォーマット2300に関連して説明されるにもかかわらず、本発明は、クレームされた場合を除き、特有のベクトルフレンドリ命令フォーマット2300に限定されない。例えば、汎用ベクトルフレンドリ命令フォーマット2200は様々なフィールド用の種々の適用可能サイズを予測する一方で、特有のベクトルフレンドリ命令フォーマット2300は、具体的サイズのフィールドを有するものとして示される。具体例を用いて、データ要素幅フィールド2264は、特有のベクトルフレンドリ命令フォーマット2300の唯一のビットフィールドとして例示される一方で、本発明は、そのようには限定されない(すなわち、汎用ベクトルフレンドリ命令フォーマット2200はデータ要素幅フィールド2264の他のサイズを予測する)。
汎用ベクトルフレンドリ命令フォーマット2200は、図11Aに図示される順序で、以下に挙げた以下の複数のフィールドを含む。EVEXプレフィックス(バイト0〜3)2302 − 4バイト形式で符号化される。フォーマットフィールド2240フィールド(EVEXバイト0、ビット[7:0])−第1のバイト(EVEXバイト0)は、フォーマットフィールド2240であり、それは0x62(本発明の一実施形態においてベクトルフレンドリ命令フォーマットを識別するために用いられる固有値)を含む。第2から第4のバイト(EVEXバイト1〜3)は、特定の機能を提供するいくつかのビットフィールドを含む。
REXフィールド2305(EVEXバイト1、ビット[7−5]) − EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、および2257BEXバイト1、ビット[5]−B)からなる。EVEX.R、EVEX.X、およびEVEX.Bビットフィールドは、対応する複数のVEXビットフィールドと同様の機能を提供し、1の補数形式を用いて符号化される。すなわち、ZMMOは1111Bとして符号化され、ZMM15は0000Bとして符号化される。複数の命令の複数の他のフィールドは、当技術分野で知られているように、複数のレジスタインデックスの下位3ビットを符号化(rrr、xxx、およびbbb)するので、EVEX.R、EVEX.X、およびEVEX.Bを追加することによって、Rrrr、Xxxx、およびBbbbが形成可能である。
REX'フィールド2210 − これは、REX'フィールド2210の第1の部分であり、拡張32レジスタセットの上位16または下位16EVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')のいずれかを符号化するために用いられる。本発明の一実施形態において、このビットは、以下に示されるように他のものと共に実オペコードバイトが62であるが、MOD R/Mフィールド(後述)では、MODフィールドの値11を受け付けないBOUND命令から識別されるべくビット反転形式で格納される(周知のx86 32ビットモードで)。本発明の複数の代替実施形態は、これを格納せず、他は反転形式で下記の複数のビットを示した。1の値は、下位の16個のレジスタを符号化するために用いられる。言い換えれば、R'Rrrrは、EVEX.R'、EVEX.R、および複数の他のフィールドからの他のRRRを組み合わせることによって、形成される。
オペコードマップフィールド2315(EVEXバイト1、ビット[3:0]−mmmm)−そのコンテンツは暗黙的なリーディングオペコードバイト(OF、OF38、またはOF3)を符号化する。データ要素幅フィールド2264(EVEXバイト2、ビット[7]−W)は、表記EVEX.Wによって表される。EVEX.Wは、データタイプの粒度(サイズ)(32ビットデータ要素または64ビットデータ要素のいずれか)を決定するために用いられる。EVEX.vvvv2320(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割は以下のものを含んでもよい。(1)EVEX.vvvvは、反転(1の補数)形式に特定された第1のソースレジスタオペランドを符号化し、2またはそれ以上のソースオペランドを有する複数の命令に有効である。(2)EVEX.vvvvは、特定のベクトルシフト用の1の補数形式で特定されるデスティネーションレジスタオペランドを符号化する。あるいは、(3)EVEX.vvvvはいかなるオペランドも符号化せず、フィールドはリザーブされて1111bを含まなければならない。したがって、EVEX.vvvvフィールド2320は、反転(1の補数)形式で格納された第1のソースレジスタスペシファイヤの4つの下位ビットを符号化する。命令に応じて、追加の異なるEVEXビットフィールドは、スペシファイヤサイズを32レジスタまで延ばすために用いられる。EVEX.U2268クラスフィールド(EVEXバイト2、ビット[2]−U) − もしEVEX.U=0ならば、それはクラスAまたはEVEX.U0を示す;もしEVEX.U=1ならば、それはクラスBまたはEVEX.U1を示す。
プレフィックス符号化フィールド2325(EVEXバイト2、ビット[1:0]−pp) − は、基本演算フィールド用の複数の追加のビットを提供する。EVEXプレフィックス形式のレガシーSSE命令に対するサポートを提供することに加えて、このことは、SIMDプレフィックスをコンパクト化する利益も有する(SIMDプレフィックスを表すために1バイトを必要とするのではなく、EVEXプレフィックスは2ビットのみを必要とする)一実施形態において、レガシー形式およびEVEXプレフィックス形式の両方のSIMDプレフィックス(66H、F2H、F3H)を使用する複数のレガシーSSE命令をサポートするべく、これらのレガシーSIMDプレフィックスはSIMDプレフィックス符号化フィールドに符号化され、ランタイム時、デコーダのPLAの提供に先立って、レガシーSIMDプレフィックスに拡張される(したがって、PLAは、変形なしでこれらのレガシー命令のレガシーおよびEVEXフォーマットの両方を実行できる)。より新しい複数の命令は、EVEXプレフィックス符号化フィールドコンテンツをオペコードエクステンションとして直接用いることが可能である。しかし、複数の特定の実施形態は、一貫性のために同様の様式で拡張するが、これらのレガシーSIMDプレフィックスによって複数の異なる意味を特定することを可能にする。代替実施形態は、2ビットSIMDプレフィックス符号化をサポートするべく、PLAを再設計してもよいので、拡張を必要としない。
アルファフィールド2252(EVEXバイト3、ビット[7]−EH;EVEX.EH、EVEX.rs、EVEX.RL、EVEX.書き込みマスク制御、およびEVEX.Nとしても知られており、また、αとともに図示されている) − 先述したように、このフィールドは、コンテキストに特有である。ベータフィールド2254(EVEXバイト3、ビット[6:4]−SSS、EVEX.s2−0、EVEX.r2−0、EVEX.rr1、EVEX.LLO、EVEX.LLBとしても知られており、また、βββにとともに図示されている) − 先述したように、このフィールドはコンテキストに特有である。
REX'フィールド2210−これはREX'フィールドの残りであり、拡張32レジスタセットの上位16または下位16を符号化するために用いられてもよいEVEX.Vビットフィールド(EVEXバイト3、ビット[3]―V)のいずれかである。このビットは、ビット反転形式で格納される。1の値は、下位16レジスタを符号化するために用いられる。言い換えれば、v'vvvvは、EVEX.V'、EVEX.vvvvを組み合わせることによって、形成される。
書き込みマスクフィールド2270(EVEXバイト3、ビット[2:0]−kkk)−そのコンテンツは先述した書き込みマスクレジスタにあるレジスタのインデックスを特定する。本発明の一実施形態において、特定の値EVEX.kkk=000は、書き込みマスクが特定の命令に使用されないことを示す特有のふるまいを暗示する(これは、様々なやり方で実装可能であり、すべてのものに対してハードワイヤドされた書き込みマスク、または、マスキングハードウェアを迂回するハードウェアの使用が含まれる)。
リアルオペコードフィールド2330(バイト4)は、オペコードバイトとしても知られている。オペコードの一部は、このフィールドで特定される。MOD R/Mフィールド2340(バイト5)は、MODフィールド2342、Regフィールド2344、およびR/Mフィールド2346を含む。先述したように、MODフィールド2342のコンテンツは、メモリアクセスと複数の非メモリアクセス演算との間を識別する。Regフィールド2344の役割は、2つの状況に要約され得る。すなわち、デスティネーションレジスタオペランドまたはソースレジスタオペランドを符号化すること、または、オペコードエクステンションとして処理され、任意の命令オペランドを符号化するために用いられないこと、のいずれかである。R/Mフィールド2346の役割は、以下のことを含む。すなわち、メモリアドレスを参照する命令オペランドを符号化すること、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかを符号化すること、である。スケール、インデックス、ベース(SIB)バイト(バイト6)−先述したように、スケールフィールドの2250コンテンツは、メモリアドレス発生に用いられる。
SIB.xxx2354およびSIB.bbb2356−これらのフィールドのコンテンツは、レジスタインデックスXxxxおよびBbbbに関連して前に言及されている。
変位フィールド2262A(バイト7―10) − MODフィールド2342が10を含む場合、バイト7〜10が変位フィールド2262Aであり、それはレガシー32ビット変位(disp32)と同様に作動し、バイト粒度で作動する。変位係数フィールド2262B(バイト7) − MODフィールド2342が01を含む場合、バイト7は変位係数フィールド2262Bである。このフィールドのロケーションがレガシーx86命令セットの8ビット変位(disp8)であり、バイト粒度で作動する。disp8が拡張された符号であることから、それは−128および127バイトオフセットの間をアドレスし、64バイトキャッシュラインに関して、disp8は、4つの実に有用な値−128、−64、0、および64に設定され得る8ビットを用いる。より大きな範囲がしばしば必要となることから、disp32が使用される。しかし、disp32は4バイトを必要とする。disp8およびdisp32とは対照的に、変位係数フィールド2262Bは、disp8の再解釈である。変位係数フィールド2262Bを用いる場合、実際の変位はメモリオペランドアクセス(N)のサイズによって乗算される変位係数フィールドのコンテンツによって決定される。このタイプの変位は、disp8*Nと称される。これは、平均命令長(非常により大きな範囲による以外、変位のために用いられるものの単一バイト)を減らす。そのような圧縮変位は、有効な変位がメモリアクセスの粒度の倍数であり得るから、アドレスオフセットの冗長な下位ビットは符号化される必要はないという、前提に基づく。言い換えれば、変位係数フィールド2262Bは、レガシーx86命令セット8ビット変位を置換する。したがって、変位係数フィールド2262Bは、disp8がdisp8*Nに多重定義されることを唯一の例外として、レガシーx86命令セット8ビット変位と同様のやり方で符号化される(したがって、複数のModRM/SIB符号化規則は変化しない)。言い換えれば、変化は、符号化規則または符号化長にはなく、ハードウェアによる変位値のインタプリテーションにのみにある(バイト単位アドレスオフセットを得るべく、メモリオペランドのサイズによって変位をスケーリングする必要がある)。即値フィールド2272は、先述したように、動作する。
図11Bは、ブロック図であり、本発明の一実施形態に係わるフルオペコードフィールド2274を構成する特有のベクトルフレンドリ命令フォーマット2300の複数のフィールドを示す。具体的にはフルオペコードフィールド2274は、フォーマットフィールド2240、基本演算フィールド2242、およびデータ要素幅(W)フィールド2264を含む。基本演算フィールド2242は、プレフィックス符号化フィールド2325、オペコードマップフィールド2315、およびリアルオペコードフィールド2330を含む。
図11Cは、ブロック図であり、本発明の一実施形態に係るレジスタインデックスフィールド2244を構成する特有のベクトルフレンドリ命令フォーマット2300の複数のフィールドを示す。具体的には、レジスタインデックスフィールド2244は、REXフィールド2305、REX'フィールド2310、MODR/M.Regフィールド2344、MODR/M.r/mフィールド2346、WWフィールド2320、xxxフィールド2354、およびbbbフィールド2356を含む。
図11Dは、本発明の一実施形態に係る追加演算フィールド2250を構成する特有のベクトルフレンドリ命令フォーマット2300の複数のフィールドを示すブロック図である。クラス(U)フィールド2268が0を含む場合、それはEVEX.U0(クラスA2268A)を示す。それが1を含む場合、それはEVEX.Ul(クラスB2268B)を示す。U=0およびMODフィールド2342が11(非メモリアクセス演算を示す)を含む場合、アルファフィールド2252(EVEXバイト3、ビット[7]−EH)はrsフィールド2252Aと解釈される。rsフィールド2252Aが1(ラウンド処理2252A.1)を含む場合、ベータフィールド2254(EVEXバイト3、ビット[6:4]−SSS)はラウンド制御フィールド2254Aと解釈される。ラウンド制御フィールド2254Aは、1ビットSAEフィールド2256と、2ビットラウンド演算フィールド2258とを含む。RSフィールド2252Aが0(データ変換2252A.2)を含む場合、ベータフィールド2254(EVEXバイト3、ビット[6:4]−SSS)は、3ビットデータ変換フィールド2254Bとして解釈される。U=0およびMODフィールド2342が00、01または10(メモリアクセス演算を示す)を含む場合、アルファフィールド2252(EVEXバイト3、ビット[7]−EH)は、エビクションヒント(EH)フィールド2252Bと解釈され、ベータフィールド2254(EVEXバイト3、ビット[6:4]−SSS)は、3ビットデータ操作フィールド2254Cと解釈される。
U=1の場合、アルファフィールド2252(EVEXバイト3、ビット[7]−EH)は書き込みマスク制御(Z)フィールド2252Cと解釈される。U=1およびMODフィールド2342が11(非メモリアクセス演算を示す)を含む場合、ベータフィールド2254(EVEXバイト3、ビット[4]―S0)の一部分はRLフィールド2257Aと解釈される。それが1(ラウンド2257A.1)を含む場合、ベータフィールド2254(EVEXバイト3、ビット[6−5]−S2−1)の残りは、ラウンド演算フィールド2259Aと解釈される。一方で、RLフィールド2257Aが0(VSIZE2257.A2)を含む場合、ベータフィールド2254(EVEXバイト3、ビット[6−5]―S2−1)の残りは、ベクトル長フィールド2259B(EVEXバイト3、ビット[6−5]―L1−0)と解釈される。U=1およびMODフィールド2342が00、01または10(メモリアクセス演算を示す)を含む場合、ベータフィールド2254(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド2259B(EVEXバイト3、ビット[6−5]−L1−0)およびブロードキャストフィールド2257B(EVEXバイト3、ビット[4]−B)と解釈される。
図12は、本発明の一実施形態によるレジスタアーキテクチャ2400のブロック図である。例示した実施形態において、512ビット幅の32ベクトルレジスタ2410がある。これらのレジスタはzmm0からzmm31として参照される。下位16zmmレジスタの下位順位256ビットは複数のレジスタymm0〜16にオーバーレイされている。下位16zmmレジスタの下位順位128ビット(複数のymmレジスタの下位順位128ビット)は、複数のレジスタxmm0〜15にオーバーレイされている。特有のベクトルフレンドリ命令フォーマット2300は、以下の表に示されるように、オーバーレイレジスタファイル上で動作する。
言い換えれば、ベクトル長フィールド2259Bは、最大長と1または複数の他のより短い長さとの間を選択し、ここで、各々のそのようなより短い長さは、先行する長さの半分の長さであり、ベクトル長フィールド2259Bを持たない複数の命令テンプレートは、最大ベクトル長で機能する。さらに、一実施形態において、特有のベクトルフレンドリ命令フォーマット2300のクラスB命令テンプレートは、パックドまたはスカラ単/倍精度浮動小数点データとパックドまたはスカラ整数データとで機能する。複数のスカラ演算は、ZMM/ymm/XMMレジスタで最も低い順序データ要素ポジションに対して実行される複数の演算である。複数の高位データ要素ポジションは、実施形態に応じて、それらが命令に先立ったロケーションと同じまま、または、ゼロにされるかのいずれかである。
複数の書き込みマスクレジスタ2415 − 例示される実施形態において、8つの書き込みマスクレジスタ(k0からk7)があり、各々のサイズは64ビットである。代替的な複数の実施形態において、書き込みマスクレジスタ2415はサイズが16ビットである。先述したように、本発明の一実施形態において、ベクトルマスクレジスタk0は、書き込みマスクとして使用できない。通常k0を示す符号化が書き込みマスクに用いられる場合、それが0xFFFFのハードワイヤドされた書き込みマスクを選択して、その命令に対する書き込みマスキングを無効にする。
複数の汎用レジスタ2425 − アドレスメモリオペランドに対して、複数の既存のx86アドレッシングモードと共に用いられる16個の64ビット汎用レジスタが存在する。これらのレジスタは、名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8からR15によって参照される。
スカラ浮動小数点スタックレジスタファイル(x87スタック)2445、別名MMXパック型整数フラットレジスタファイル2450 − 例示した実施形態では、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(場合によっては、アプリケーションコア(複数可)またはアプリケーションプロセッサ(複数可)と称される)、上述のコプロセッサ、および追加の機能性を含んでもよいチップ上のシステムが含まれてもよい。複数の例示的なコアアーキテクチャを次に説明し、その後、複数の例示的なプロセッサおよびコンピュータアーキテクチャを説明する。
図13Aは、例示的なインオーダパイプラインおよび例示的なレジスタリネーミング(本発明の複数の実施形態に係るアウトオブオーダ発行/実行パイプライン)の両方を示すブロック図である。
図13Bは、インオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミングの両方(本発明の複数の実施形態に係るプロセッサに含まれるべきアウトオブオーダ発行/実行アーキテクチャコア)を示すブロック図である。実線で囲まれた複数のボックスは、インオーダパイプラインとインオーダコアとを示し、一方で、点線で囲まれた複数のボックスの任意の加算はレジスタリネーミング(アウトオブオーダ発行/実行パイプラインおよびコア)を示す。インオーダ態様がアウトオブオーダ態様のサブセットであるので、アウトオブオーダ態様を説明する。
図13Aの中で、プロセッサ・パイプライン2500は、フェッチステージ2502(長さデコードステージ2504)、デコードステージ2506、アロケーションステージ2508、リネームステージ2510、スケジューリング(ディスパッチまたは発行としても知られている)ステージ2512、レジスタリード/メモリリードステージ2514、実行ステージ2516、ライトバック/メモリライトステージ2518、例外処理ステージ2522、およびコミットステージ2524を含む。図13Bは、実行エンジン部2550に連結したフロントエンド部2530を含み、これら両方ともメモリ部2570に連結したプロセッサコア2590を示す。コア2590は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは別のコアタイプであってもよい。さらに別のオプションとして、コア2590は特定用途向けコア、例えば、ネットワークもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィクスプロセッシングユニット(GPGPU)コア、グラフィクスコア、またはその他、などであってもよい。
フロントエンド部2530は、命令キャッシュ部2534に連結する分岐予測部2532を含み、ここで、命令キャッシュ部2534は命令トランスレーションルックアサイドバッファ(TLB)2536に連結し、TLB2536は命令フェッチ部2538に連結し、命令フェッチ部2538はデコード部2540に連結している。デコード部2540(またはデコーダ)は、複数の命令を復号化してもよく、それらの命令は出力として、1または複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を生成する。これらは、複数のオリジナル命令から復号化、さもなければそれらを反映、またはそれらから派生される。デコード部2540は、様々な異なるメカニズムを用いて実装でされてもよい。複数の適切なメカニズムの複数の例として、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)、その他が挙げられる。一実施形態において、コア2590は、複数の特定のマクロ命令用のマイクロコードを格納するマイクロコードROMまたは他の媒体を含む(例えば、デコード部2540またはさもなければフロントエンド部2530内)。デコード部2540は、実行エンジン部2550のリネーム/アロケータ部2552に連結される。
実行エンジン部2550は、リタイアメント部2554に連結したリネーム/アロケータ部2552と、一組の1または複数のスケジューラ部(複数可)2556とを含む。スケジューラ部(複数可)2556は、複数のリザベーションステーション、中央命令ウィンドウ、その他を含む任意の数の異なるスケジューラを表す。スケジューラ部(複数可)2556は、複数の物理レジスタファイル(複数可)部(複数可)2558に連結されている。複数の物理レジスタファイル(複数可)部2558のそれぞれは、1または複数の物理レジスタファイル、1または複数の異なるデータタイプ、例えば、スカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)、その他を格納する様々なもの、を表す。
一実施形態において、物理レジスタファイル(複数可)部2558は、ベクトルレジスタ部、書き込みマスクレジスタ部、およびスカラレジスタ部を有する。これらのレジスタ部は、アーキテクチャ上の複数のベクトルレジスタ、複数のベクトルマスクレジスタ、および複数の汎用レジスタを提供するものであってもよい。物理レジスタファイル(複数可)部(複数可)2558には、様々な方法を例示するべく、リタイアメント部2554がオーバーラップされている。これらのやり方では、レジスタリネーミングおよびアウトオブオーダ実行を実装可能とする(例えば、リオーダバッファ(複数可)およびリタイアレジスタファイル(複数可)を用いて、フューチャーファイル(複数可)、ヒストリーファイル(複数可)、およびリタイアレジスタファイル(複数可)を用いて、複数のレジスタマップと複数のレジスタマップからなるプールとを用いて、その他)。リタイアメント部2554および物理レジスタファイル(複数可)部(複数可)2558は、実行クラスタ(複数可)2560に連結される。
実行クラスタ(複数可)2560は、一組の1または複数の実行部2562と一組の1または複数のメモリアクセス部2564とを含む。実行部2562は、様々な演算(例えば、シフト、加算、減算、乗算)を実行可能であり、様々なタイプのデータ(例えば、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点)上で演算可能である。いくつかの実施形態が複数の特定関数または複数の関数からなるセットに対して専用の多くの実行部を含んでもよい一方で、複数の他の実施形態は、すべての関数をすべて実行するたった1つの実行部または複数の実行部を含んでもよい。
スケジューラ部(複数可)2556、物理レジスタファイル(複数可)部(複数可)2558、および実行クラスタ(複数可)2560は、場合によっては、複数として示される。なぜなら、複数の特定の実施形態が複数の特定のタイプのデータ/演算に対して別々のパイプラインを生成するからである(例えば、スカラ整数パイプライン、スカラ浮動小数点/パック型整数/パック型浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、ならびに/あるいはメモリアクセスパイプラインであり、それらは、各々、それ自体のスケジューラ部、物理レジスタファイル(複数可)部および/または実行クラスタを有し、さらに、別々のメモリアクセスパイプラインの場合、複数の特定の実施形態は、このパイプラインの実行クラスタだけがメモリアクセス部(複数可)2564を有する実装である)。理解されるべきことは、別々のパイプラインが用いられる場合、これらのパイプラインのうちの1または複数はアウトオブオーダ発行/実行であり、残りはインオーダであってもよい。
複数のメモリアクセス部2564からなるセットはメモリ部2570に連結されており、このメモリ部2570は、データキャッシュ部2574に連結したデータTLB部2572を含み、データキャッシュ部2574はレベル2(L2)キャッシュ部2576に連結している。1つの例示的な実施形態において、メモリアクセス部2564はロード部、ストアアドレス部、およびストアデータ部を含んでもよく、それらのそれぞれはメモリ部2570内のデータTLB部2572に連結されている。命令キャッシュ部2534は、メモリ部2570のレベル2(L2)キャッシュ部2576に、さらに連結されている。L2キャッシュ部2576は、キャッシュの1または複数の他のレベルに連結され、最終的にはメインメモリに連結される。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン2500を実装してもよい。(1)命令フェッチ2538は、フェッチおよびレングスデコーディングステージ2502および2504を実行する。(2)デコード部2540はデコードステージ2506を実行する。(3)リネーム/アロケータ部2552はアロケーションステージ2508およびリネームステージ2510を実行する。(4)スケジューラ部(複数可)2556は、スケジュールステージ2512を実行する。(5)物理レジスタファイル(複数可)部(複数可)2558およびメモリ部2570はレジスタリード/メモリリードステージ2514を実行する。実行クラスタ2560は、実行ステージ2516を実行する。(6)メモリ部2570および物理レジスタファイル(複数可)部(複数可)2558は、ライトバック/メモリライトステージ2518を実行する。(7)様々なユニットは例外処理ステージ2522に関わってもよい。(8)リタイアメント部2554と物理レジスタファイル(複数可)部(複数可)2558は、コミットステージ2524を実行する。
コア2590は、本明細書に説明された命令(複数可)を含む1または複数の命令セット(例えば、x86命令セット(より新しいバージョンで追加された、いくつかの拡張を有する)、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングズのARM命令セット(NEONなどの、オプションの複数の追加拡張を有する))、をサポートしてもよい。一実施形態において、コア2590はパックドデータ命令セット拡張をサポートするためのロジック(例えば、先述したAVX1、AVX2、および/または汎用ベクトルフレンドリ命令フォーマットのいくつかの形態(U=0および/またはU=1)を含み、それによって、パックドデータを用いて実行される多くのマルチメディアアプリケーションにより用いられる複数の演算を可能にする。
理解するべきことは、コアがマルチスレッディング(2またはそれ以上の演算またはスレッドの並列セットを実行すること)をサポートしていてもよく、およびタイムスライスドマルチスレッディング、同時マルチスレッディング(単一の物理コアは、物理コアが同時にマルチスレッディングする複数のスレッドの各々に対して論理コアを提供)、またはそれらの組み合わせ(例えば、タイムスライスドフェッチおよび復号化、ならびに、その後、Intel(登録商標)ハイパースレッディングテクノロジーなどで、同時マルチスレッディング)を含む様々なやり方でそうしてもよいこと、である。
レジスタリネーミングはアウトオブオーダ実行との関連で説明されている一方で、理解するべきことは、レジスタリネーミングはインオーダーアーキテクチャで使用されてもよいことである。プロセッサの図示の実施形態はまた別々の命令およびデータキャッシュ部2534/2574および共有L2キャッシュ部2576を含む一方で、別の実施形態は、例えばレベル1(L1)内部キャッシュ、または複数レベルの内部キャッシュなどの命令およびデータの両方のための単一の内部キャッシュを有していてもよい。いくつかの実施形態において、システムは内部キャッシュおよびコアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでいてもよい。あるいは、キャッシュのすべてがコアおよび/またはプロセッサの外部にあってもよい。
図14Aおよび図14Bは、コアがチップ内のいくつかのロジックブロック(同じタイプおよび/または異なるタイプの他のコアを含む)の1つであるより具体的かつ例示的なインオーダコアアーキテクチャのブロック図を示す。複数のロジックブロックは、高帯域幅のインターコネクトネットワーク(例えば、リングネットワーク)を介して、アプリケーションに応じて、いくつかの固定機能ロジック、メモリI/Oインターフェース、および他の必要なI/Oロジックと通信する。
図14Aは、本発明の複数の実施形態に係るオンダイインターコネクトネットワーク2602への接続およびレベル2(L2)キャッシュ2604のローカルサブセットと共に、単一のプロセッサコアを示すブロック図である。一実施形態において、命令デコーダ2600はパックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ2606はスカラおよびベクトル部内のキャッシュメモリへのローレイテンシー(低遅延)アクセスを可能とする。一実施形態において(設計を単純化するために)、スカラ部2608およびベクトル部2610は別々のレジスタセット(それぞれ、スカラレジスタ2612およびベクトルレジスタ2614)を使用し、それらの間で転送されるデータがメモリに書き込まれ、その後レベル1(L1)キャッシュ2606から再度読み出される。一方で、本発明の複数の代替実施形態は異なるアプローチ(例えば、単一のレジスタセットを使用するか、または2つのレジスタファイル間で転送されるデータが書き込みおよび再度読み出されないことを可能にする通信パスを含む)を使用してもよい。
L2キャッシュ2604のローカルサブセットはプロセッサコアあたり1つの別々のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアはL2キャッシュ2604の独自のローカルサブセットへの直接アクセスパスを有する。プロセッサコアにより読み取られたデータは、L2キャッシュのサブセット2604に格納され、他のプロセッサコアが自分自身のローカルL2キャッシュのサブセットへアクセスすることと並行に、迅速にアクセスされ得る。プロセッサコアにより書き込まれたデータは独自のL2キャッシュのサブセット2604に格納され、必要に応じて他のサブセットからフラッシュされる。リングネットワークは共有データのコヒーレンシを保証する。リングネットワークは、プロセッサコア、L2キャッシュおよび他のロジックブロックのようなエージェントをチップ内で互いに通信することを可能にするべく、双方向性である。各リングデータパスは方向ごとに1012ビット幅である。
図14Bは、本発明の複数の実施形態に係る図14A内のプロセッサコアの部分拡大図である。図14Bは、L1キャッシュ2604のL1データキャッシュ2606A部分、ならびに、ベクトル部2610および複数のベクトルレジスタ2614に関するより詳細なこと、を含む。具体的には、ベクトル部2610は、整数、単精度浮動小数点、倍精度浮動小数点命令のうちの1または複数を実行する、16幅のベクトル処理部(VPU)(16幅のALU2628を参照)である。VPUはスウィズル部2620でのレジスタの入力のスウィズリング(ベクトル要素の入れ替え)、複数の数値変換部2622A〜Bでの数値変換、およびメモリ入力上のレプリケーション部2624でのレプリケーションをサポートする。書き込みマスクレジスタ2626は、結果として生じる複数のベクトル書き込みをプレディケートすることを可能にする。
図15は本発明の複数の実施形態に係る1より多くのコアを有していてもよい、統合メモリコントローラを有していてもよい、および統合グラフィクスを有していてもよいプロセッサ2700のブロック図である。図15において実線で囲まれた複数のボックスは、シングルコア2702Aと、システムエージェント2710と、1または複数のバスコントローラ部2716からなるセットとを有するプロセッサ2700を示す。一方で、点線で囲まれた複数のボックスのオプション追加部が複数のコア2702A〜Nと、システムエージェント部2710内の1または複数の統合メモリコントローラ部(複数可)2714からなるセットと、特定用途向けロジック2708とを有する別のプロセッサ2700を示す。
このように、プロセッサ2700の異なる実装は、(1)統合グラフィクスおよび/またはサイエンス(スループット)ロジック(1または複数のコアを含んでいてもよい)を統合されている特定用途向けロジック2708を有するCPU、および1または複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、それら2つの組み合わせ)であるコア2702A〜N、(2)主にグラフィクスおよび/またはサイエンス(スループット)を対象とした多数の特定用途向けコアである複数のコア2702A〜Nを有するコプロセッサ;および3)多数の汎用インオーダコアである複数のコア2702A〜Nを有するコプロセッサを含んでいてもよい。このように、プロセッサ2700は汎用プロセッサ、コプロセッサまたは特定用途向けプロセッサ、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(汎用グラフィクスプロセッシングユニット)、ハイスループットメニー統合型コア(MIC)コプロセッサ(30またはそれよりも多くのコアを含む)、組み込みプロセッサ、またはその他、などであってもよい。プロセッサは1または複数のチップ上に実装されてもよい。プロセッサ2700は、例えば、BiCMOS、CMOS、またはNMOSなどの、いくつかの処理技術のうちのいずれかを使用した1または複数の基板の一部および/またはその上に実装されてもよい。
メモリ階層は、コア、セットまたは1または複数の共有キャッシュ部2706、および統合メモリコントローラ部2714のセットに連結された外部メモリ(不図示)内のキャッシュの1または複数のレベルを含む。共有キャッシュ部2706のセットはレベル2(L2)、レベル3(L3)、レベル4(L4)、またはキャッシュの他のレベル、ラストレベルキャッシュ(LLC)、および/またはこれらの組み合わせなどの、1または複数の中間レベルのキャッシュを含んでいてもよい。一実施形態において、リングベースのインターコネクト部2712は統合グラフィクスロジック2708、共有キャッシュ部2706のセット、およびシステムエージェント部2710/統合メモリコントローラ部(複数可)2714をインターコネクトする一方で、複数の別の実施形態においてそのような複数のユニットとをインターコネクトするための任意の数の周知の技術を使用してもよい。一実施形態において、コヒーレンシは、1または複数の共有キャッシュ部2706およびコア2702A〜Nとの間で保持される。
いくつかの実施形態において、コア2702A〜Nのうちの1または複数はマルチスレッディングが可能である。システムエージェント部2710はコア2702A〜Nの調整および操作をするこれらのコンポーネントを含む。システムエージェント部2710は、例えばパワーコントロール部(PCU)およびディスプレイ部を含んでいてもよい。PCUは、複数のコア2702A〜Nおよび統合グラフィクスロジック2708の電源状態を調整するために必要なロジックおよび複数のコンポーネントを含んでいてもよい。ディスプレイ部は1または複数の外部接続されたディスプレイの駆動用である。
複数のコア2702A〜Nはアーキテクチャ命令セットに関して均質または不均一であってもよい。すなわち、2またはそれ以上のコア2702A〜Nは同じ命令セットを実行可能であってもよい一方で、他のものはその命令セットまたは異なる命令セットのサブセットのみを実行可能であってもよい。
図16から図20は例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィクスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、および様々な他の電子デバイスのための当技術分野において知られている他のシステム設計および構成もまた適している。概して、本明細書に開示される膨大な種類の、プロセッサおよび/または他の実行ロジックを組み込むことが可能なシステムまたは電子デバイスは概ね適している。
次に図16を参照すると、本発明の一実施形態に係るシステム2800のブロック図が図示される。システム2800はコントローラハブ2820に連結された1または複数のプロセッサ2810、2815を含んでいてもよい。一実施形態において、コントローラハブ2820は、グラフィクスメモリコントローラハブ(GMCH)2890および入力/出力ハブ(IOH)2850(複数の別のチップ上にあってもよい)を含む。GMCH 2890は、メモリ2840およびコプロセッサ2845に連結されたメモリおよびグラフィクスコントローラを含む。IOH2850は、入力/出力(I/O)デバイス2860をGMCH2890に連結する。あるいは、メモリおよびグラフィクスコントローラの1つまたは両方がプロセッサ内に統合され(本明細書中に説明されるように)、およびメモリ2840およびコプロセッサ2845がプロセッサ2810、およびIOH 2850を有する単一チップのコントローラハブ2820に直接連結される。
複数の追加のプロセッサ2815のオプション機能は図16内の複数の破線で示される。プロセッサ2810、2815の各々は、本明細書中に説明される複数のプロセッシングコアのうちの1または複数を含んでいてもよく、プロセッサ2700のいくつかのバージョンであってもよい。
メモリ2840は、例えばダイナミックランダムアクセスメモリ(DRAM)、位相変化メモリ(PCM)、またはそれら2つの組み合わせであってもよい。少なくとも1つの実施形態の場合、コントローラハブ2820は、フロントサイドバス(FSB)、クイックパスインターコネクト(QPI)のようなポイントツーポイントインターフェース、または同様の接続2895などのマルチドロップバスを介して、プロセッサ(複数可)2810、2815と通信する。
一実施形態において、コプロセッサ2845は、特定用途向けプロセッサ、例えば、ハイスループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組み込みプロセッサ、またはその他、などである。一実施形態において、コントローラハブ2820は統合グラフィクスアクセラレータを含んでいてもよい。
物理リソース2810、2815との間には、アーキテクチャ的、マイクロアーキテクチャ的、熱的、電力消費的な特性、およびその他を含む、複数の長所に関する基準のスペクトルに関して、様々な違いがあり得る。
一実施形態において、プロセッサ2810は一般的なタイプの複数のデータ処理演算を制御する命令を実行する。命令内に埋め込まれたコプロセッサ命令であってもよい。プロセッサ2810はこれらのコプロセッサ命令を接続コプロセッサ2845により実行されるべきであるタイプのものであるとして認識する。したがって、プロセッサ2810はコプロセッサ2845に対してコプロセッサバスまたは他のインターコネクト上にこれらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)を発行する。コプロセッサ(複数可)2845はこれを受け取り、受け取ったコプロセッサ命令を実行する。
次に図17を参照すると、本発明の実施形態に係る第1のより具体的かつ例示的なシステム2900のブロック図が図示される。図17に示されるように、マルチプロセッサシステム2900はポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト2950を介して連結された第1のプロセッサ2970および第2のプロセッサ2980を含む。プロセッサ2970および2980のそれぞれはプロセッサ2700のいくつかのバージョンであってもよい。本発明の一実施形態において、プロセッサ2970および2980はそれぞれプロセッサ2810および2815である一方で、コプロセッサ2938はコプロセッサ2845である。別の実施形態において、プロセッサ2970および2980はそれぞれプロセッサ2810およびコプロセッサ2845である。
プロセッサ2970および2980は統合メモリコントローラ(IMC)部2972および2982それぞれを含んで表示される。プロセッサ2970はまたそのバスコントローラ部の一部としてポイントツーポイント(P−P)インターフェース2976および2978を含み、同様に、第2のプロセッサ2980は、P−Pインターフェース2986および2988を含む。
プロセッサ2970、2980はP−Pインターフェース2978、2988を使用してポイントツーポイント(P−P)インターフェース2950を介して情報交換してもよい。図17に示されるように、IMC2972および2982はプロセッサを、それぞれのプロセッサにローカルに接続されたメインメモリの一部であってもよいそれぞれのメモリ、つまりメモリ2932およびメモリ2934に連結する。プロセッサ2970、2980は、各々、ポイントツーポイントインターフェース回路2976、2994、2986、2998を使用して、個々のP−Pインターフェース2952、2954を介したチップセット2990との情報交換を、行ってもよい。チップセット2990は、ハイパフォーマンスインターフェース2939を介してコプロセッサ2938と任意選択的に情報交換をしてもよい。一実施形態において、コプロセッサ2938は、特定用途向けプロセッサ、例えばハイスループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組み込みプロセッサ、またはその他、などである。
共有キャッシュ(不図示)はいずれかのプロセッサ内に含まれるかあるいは両方のプロセッサ外であってもよく、プロセッサが低電力モードに配置される場合いずれかのまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納されてもよいように、P−Pインターコネクトを介してまだプロセッサに接続される。チップセット2990はインターフェース2996を介して第1のバス2916に連結されてもよい。一実施形態において、第1のバス2916はペリフェラルコンポーネントインターコネクト(PCI)バス、またはPCI Expressバスまたは別の第3世代I/Oインターコネクトバスなどのバスであってもよいが、本発明の範囲はこれに限定されない。
図17に示されるように、様々なI/Oデバイス2914は、第1のバス2916を第2のバス2920に連結するバスブリッジ2918と共に、第1のバス2916に連結されてもよい。一実施形態において、1または複数の追加のプロセッサ(複数可)2915、例えば、コプロセッサ、ハイスループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィクスアクセラレータまたはデジタル信号処理(DSP)部など)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサは、第1のバス2916に連結される。一実施形態において、第2のバス2920はローピンカウント(LPC)バスであってもよい。一実施形態において、様々なデバイスは、例えば、キーボードおよび/またはマウス2922、通信デバイス2927、ならびに命令/コードおよびデータ2930を含んでもよいディスクドライブまたは他の大容量ストレージデバイスなどのストレージ部2928を有する第2のバス2920に、連結されてもよい。さらに、オーディオI/O2924は第2のバス2920に連結されてもよい。他のアーキテクチャも適用可能であることに留意されたい。例えば、図17のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
ここで図18を参照すると、本発明の実施形態に係る第2のより具体的かつ例示的なシステム3000のブロック図が図示される。図18および図19内の同様の要素は同様の参照番号の関係を有し、図17の特定の態様は図18の他の態様を不明瞭にするのを避けるために図18から省略されている。
図18はプロセッサ2970、2980が統合型メモリおよびI/O制御ロジック(「CL」)2972および2982をそれぞれ含んでいてもよいことを示す。このように、CL2972、2982は統合メモリコントローラ部を含み、I/O制御ロジックを含む。 図18はメモリ2932、2934がCL2972、2982に連結されていることだけでなく、I/Oデバイス3014もまた制御ロジック2972、2982に連結されていることも示す。レガシーI/Oデバイス3015はチップセット2990に連結される。
次に図19を参照すると、本発明の実施形態に係るSoC3100のブロック図が図示される。図15内の同様の要素が同様の参照番号を付してある。また、点線で囲まれた複数のボックスは、より高度なSoC上のオプション機能である。図19において、インターコネクト部(複数可)3102は:1または複数のコア202A〜Nおよび共有キャッシュ部(複数可)2706のセットを含むアプリケーションプロセッサ3110、システムエージェント部2710、バスコントローラ部(複数可)2716、統合メモリコントローラ部(複数可)2714、統合グラフィクスロジック、画像処理プロセッサ、オーディオプロセッサ、ビデオプロセッサを含んでいてもよいセットまたは1または複数のコプロセッサ3120、スタティックランダムアクセスメモリ(SRAM)部3130、ダイレクトメモリアクセス(DMA)部3132、および1または複数の外部ディスプレイを連結するためのディスプレイ部3140に連結される。一実施形態において、コプロセッサ(複数可)3120は、特定用途向けプロセッサ、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサ、またはその他、などを含む。
明細書に開示された複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせで実装されてもよい。本発明の複数の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリおよび/またはストレージ要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備えるプログラマブルなシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてもよい。
図17に示されるコード2930などのプログラムコードは本明細書に説明された複数の関数を実行し、出力情報を生成するために入力命令に適用されてもよい。出力情報は公知の様式で1または複数の出力デバイスに適用されてもよい。本願の目的のために、プロセッシングシステムは、例えばデジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードはプロセッシングシステムと通信するためにハイレベルプロシージャルまたはオブジェクト指向プログラミング言語で実装されてもよい。必要に応じて、プログラムコードは、アセンブリ言語または機械言語で実装されてもよい。実際に、本明細書に説明されたメカニズムは任意の特定のプログラミング言語の範囲に限定されない。いずれの場合であっても、言語はコンパイラまたはインタープリタ型言語であってもよい。
少なくとも1つの実施形態の1または複数の態様は、機械により読み取られた場合、本明細書中に説明された複数の技術を実行するためのロジックを機械に組み立てさせるプロセッサ内の様々なロジックを表す、機械可読媒体上に格納された複数の代表的な命令によって、実装されてもよい。「複数のIPコア」として知られているそのような複数の表現は、有形の機械可読媒体上に格納され、実際にロジックまたはプロセッサを作る製造機械にロードするべく、様々な顧客または製造施設に供給されてもよい。
そのような複数の機械可読ストレージ媒体は、これらに限定されないが、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、および光磁気ディスクを含む任意の他のタイプ、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)などのランダムアクセスメモリ(RAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、位相変化メモリ(PCM)、磁気または光カード、または電子命令を格納するのに適した媒体の任意の他のタイプなどの半導体デバイスなどのストレージ媒体を含む、機械またはデバイスにより製造または形成された複数の構成要素の非一時的な、有形の構成を含んでいてもよい。
したがって、本発明の複数の実施形態は、本明細書に説明された命令を含む、または構造、回路、装置、プロセッサ、および/またはシステムの特徴を規定するハードウェア記述言語(HDL)などの設計データを含む非一時的な、有形の機械可読媒体をも含む。そのような実施形態はまたプログラムプロダクトと称されることもある。
場合によっては、命令変換部は命令をソース命令セットからターゲット命令セットに変換するために使用されてもよい。例えば、命令変換部は命令をコアにより処理される1または複数の他の命令にトランスレート(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)、モーフ(モーフィング)、エミュレート、またはそうでなければ変換してもよい。命令変換部はソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実装されてもよい。命令変換部はプロセッサ上、プロセッサ外、または一部がプロセッサ上および一部がプロセッサ外であってもよい。
図20は、本発明の複数の実施形態に係るターゲット命令セット内の複数のバイナリ命令にソース命令セット内の複数のバイナリ命令を変換するためのソフトウェア命令変換部の使用を対比するブロック図である。図示の実施形態において、代替的に命令変換部はソフトウェア、ファームウェア、ハードウェア、またはそれらの様々な組み合わせで実装されてもよいが、命令変換部はソフトウェア命令変換部である。図20は少なくとも1つのx86命令セットコア3216を有するプロセッサによりネイティブに実行されてもよいx86バイナリコード3206を生成させるためのx86コンパイラ3204を使用してコンパイルされてもよい高水準言語3202でのプログラムを示す。少なくとも1つのx86命令セットコア3216を有するプロセッサは互換性のある実行またはそうでなければ、(1)Intel(登録商標)x86命令セットコアの命令セットの実質的な部分、または(2)少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサと実質的に同じ結果を達成するために、少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサ上で実行することを目標とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョンを処理することにより、少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサと実質的に同じ関数を実行することができる任意のプロセッサを表す。x86コンパイラ3204は、追加のリンク処理を有してまたは有せずに、少なくとも1つのx86命令セットコア3216を有するプロセッサ上で実行されることができる、x86バイナリコード3206(例えば、オブジェクトコード)を生成するべく動作可能であるコンパイラを表す。同様に、図20は、高水準言語3202でのプログラムを示し、このプログラムは、少なくとも1つのx86命令セットコア3214を有しないプロセッサ(例えば、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セットを実行する、および/またはカリフォルニア州サニーベールのARMホールディングズのARM命令セットを実行するコアを有するプロセッサ)によりネイティブに実行されてもよい別の命令セットバイナリコード3210を生成する別の命令セットコンパイラ3208を使用してコンパイルされてもよい。命令変換部3212は、x86命令セットコア3214を有しないプロセッサによって、x86バイナリコード3206をネイティブに実行されてもよいコードに変換するために、使用される。この変換後のコードは、別の命令セットバイナリコード3210と同じである可能性が高いわけではない。なぜなら、このことが可能な命令変換部は、作製が難しいためである。しかしながら、変換後のコードは一般的な動作を達成し、別の命令セットからの命令で構成される。このように、命令変換部3212は、エミュレーション、シミュレーション、または他の任意の処理を介して、x86命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがx86バイナリコード3206を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
一実施形態によれば、プロセッサは、第1のSKEIN256 MIX−PERMUTE演算を実行するための第1の命令を受信するための命令デコーダを有し、この第1の命令は、複数の奇数ワードを格納するための第1のストレージロケーションに関連した第1のオペランド、複数の偶数ワードを格納する第2のストレージロケーションに関連した第2のオペランド、および第3のオペランドを有する。プロセッサは、第1の命令に応答して、第3のオペランドによって示される第3のストレージロケーション示から得られる第1のローテート値を用いて複数の奇数ワードおよび複数の偶数ワードに基づいた複数の第1のSKEIN256 MIX−PERMUTE演算の複数のラウンド処理を実行するべく、ならびに、第1のオペランドによって新奇数ワードを第1のストレージロケーションに格納するべく、命令デコーダに連結する第1の実行部をさらに有する。第1のオペランドおよび第2のオペランドは、128ビットレジスタである。ソースとして、第1のオペランドは上位64ビットにワード1(word1)を格納し、下位64ビットにワード3(word3)を格納する。ソースとして、第2のオペランドは下位64ビットにワード0(word0)を格納し、上位64ビットにワード2(word2)を格納する。デスティネーションとして、第1のオペランドは下位64ビットに新ワード3(new word3)を格納し、上位64ビットに新ワード1(new word1)を格納する。プロセッサは、第4のオペランド、第5のオペランド、および第6のオペランドを有する第2の命令に応答して、第6のオペランドによって示される第6のストレージロケーションから得られる第2のローテート値を用いることによって、第4のオペランドによって示される第4のストレージロケーションから得られる複数の偶数ワードと第5のオペランドによって示される第5のストレージロケーションから得られる複数の奇数ワードとに基づいた第2のSKEIN256 MIX−PERMUTE演算の複数のラウンド処理を実行するべく、ならびに、第4のストレージロケーションに複数の新偶数ワードを格納するべく、命令デコーダに連結する第2の実行部をさらに有する。第4のオペランドおよび第5のオペランドは128ビットレジスタであり、デスティネーションとして、第4のオペランドは上位64ビットに新ワード0を格納し、下位64ビットに新ワード2を格納する。
前述の詳細な説明のいくつかの部分は、コンピュータメモリ内の複数のデータビットに対する複数の演算の複数のアルゴリズムおよび複数の記号表現に関して、示された。これらのアルゴリズム的記述および表現は、他の当業者に最も効果的にそれらの作業の実体を伝えるべく、データ処理技術の当業者によって用いられるやり方ある。アルゴリズムは、ここにあって、概して、一貫性のある一連の演算であり、所望の結果をもたらすと理解される。複数の演算は、複数の物理量の複数の物理的操作を必要とするものである。
しかしながら、これらの、ならびに類似の用語のすべてが、適切な物理量に関連付けされており、その量に適用された単に便宜上のラベルであることを念頭に置く必要がある。特に示さない限り、上記の議論から明らかように、説明の全体を通じて、以下の特許請求の範囲に記載されたものなどの複数の用語を利用した議論は、コンピュータシステムもしくは類似の電子コンピューティングデバイスの、コンピュータシステムの複数のレジスタおよび複数のメモリ内における物理的な(電子的な)量として表されたデータを操作し、物理量として同様に表現される、コンピュータシステムの複数のメモリまたは複数のレジスタまたは他のそのような情報記憶デバイス、送信デバイス、またはディスプレイデバイス内における他のデータに変換する動作および処理を指すと、理解される。
図面で示される技術は、1または複数の電子デバイスに格納されて実行されるコードおよびデータを用いて、実装され得る。そのような複数の電子デバイスは、複数のコンピュータ可読媒体を用いて、コードおよびデータを格納し、(内部での、および/または、ネットワーク上で複数の他の電子デバイスとの)通信を実行する。そのような複数のコンピュータ可読媒体として、例えば、複数の非一時的なコンピュータ可読ストレージ媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、位相変化メモリ)と、トランジトリな複数のコンピュータ可読伝送媒体(例えば、電気信号、光信号、音響信号、または他の形態の伝搬信号(伝送波、赤外線信号、デジタル信号など))とがある。
前述の図面に示した複数の処理または複数の方法は、この処理ロジックは、ハードウェア(例えば、回路、特定用途向けロジック、その他)、ファームウェア、ソフトウェア(例えば、非一時的なコンピュータ可読媒体上で具体化されるもの)、または両方の組み合わせを含む処理ロジックによって実行されてもよい。複数の処理または複数の方法はいくつかのシーケンシャル演算に関して上述されているが、説明された複数の演算のいくつかは異なる順序で実行されてもよいことは、理解されるべきである。さらに、いくつかの演算は、順番に実行されるのではなく、並行に実行されてもよい。
上記の明細書内において、本発明の複数の実施形態は、それらの具体的かつ例示的な実施形態に関連して説明された。様々な変形が、以下の特許請求の範囲に記載の本発明のより広い精神および範囲から逸脱することなくなされ得ることは明らかであろう。したがって、明細書および図面は、例示的な意味ではなく、限定的な意味で解釈されるべきである。
本実施形態の例を下記の各項目として示す。
[項目1]
複数の第1のSKEIN256 MIX−PERMUTE演算を実行するための第1の命令を受信するための命令デコーダと、
前記命令デコーダに連結した第1の実行部とを備え、
前記第1の命令は、
複数の奇数ワードを格納するべく第1のストレージロケーションに関連付けられた第1のオペランドと、
複数の偶数ワードを格納するべく第2のストレージロケーションに関連付けられた第2のオペランドと、
第3のオペランドとを有し、
前記第1の実行部は、
前記第1の命令に応答して、前記第3のオペランドによって示された第3のストレージロケーションから得られた第1のローテート値を用いて、前記複数の奇数ワードおよび前記複数の偶数ワードに基づいた前記複数の第1のSKEIN256 MIX−PERMUTE演算の複数のラウンド処理を実行すること、ならびに、
前記第1のオペランドによって示される前記第1のストレージロケーションに複数の新奇数ワードを格納することを行う、プロセッサ。
[項目2]
前記第1のオペランドおよび前記第2のオペランドは、複数の128ビットレジスタである、項目1に記載のプロセッサ。
[項目3]
前記第1のオペランドは、ソースとして、ワード1を上位64ビットに、ワード3を下位64ビットに格納する、項目2に記載のプロセッサ。
[項目4]
前記第2のオペランドは、ソースとして、ワード0を上位64ビットに、ワード2を下位64ビットに格納する、項目2に記載のプロセッサ。
[項目5]
前記第1のオペランドは、デスティネーションとして、新ワード3を上位64ビットに格納し、新ワード1を下位64ビットに格納する、項目2に記載のプロセッサ。
[項目6]
第4のオペランド、第5のオペランド、第6のオペランドを有する第2の命令に応答して、前記第6のオペランドによって示される第6のストレージロケーションから得た第2のローテート値を用いて、前記第4のオペランドによって示される第4のストレージロケーションから得た前記複数の偶数ワードと前記第5のオペランドによって示された第5のストレージロケーションから得た前記複数の奇数ワードに基づいて複数の第2のSKEIN256 MIX−PERMUTE演算の複数のラウンド処理を実行すること、ならびに、
前記第4のストレージロケーションに新たな複数の偶数ワードを格納すること、
を行うべく、前記命令デコーダに連結する第2の実行部を、さらに備える、項目1から5のいずれか一項に記載のプロセッサ。
[項目7]
前記第4のオペランドおよび前記第5のオペランドは128ビットレジスタであり、デスティネーションとして、前記第4のオペランドは新ワード0を上位64ビットに格納し、新ワード2を下位64ビットに格納する、項目6に記載のプロセッサ。
[項目8]
複数の奇数ワードを格納するべく第1のストレージロケーションに関連付けられた第1のオペランド、複数の偶数ワードを格納するべく第2のストレージロケーションに関連付けられた第2のオペランド、および第3のオペランドを有する、複数の第1のSKEIN256 MIX−PERMUTE演算を実行するための第1の命令を、プロセッサの命令デコーダによって受信する段階と、
前記第1の命令に応答して、前記第3のオペランドによって示される第3のストレージロケーションから得た第1のローテート値を用い、前記複数の奇数ワードおよび前記複数の偶数ワードに基づいて、前記複数の第1のSKEIN256 MIX−PERMUTE演算の複数のラウンド処理を前記プロセッサの第1の実行部によって実行し、ならびに、前記第1のオペランドによって示される前記第1のストレージロケーションに複数の新奇数ワードを格納する段階と、を備える方法。
[項目9]
前記第1のオペランドおよび前記第2のオペランドは、複数の128ビットレジスタである、項目8に記載の方法。
[項目10]
前記第1のオペランドは、ソースとして、ワード1を上位64ビットに格納し、ワード3を下位64ビットに格納する、項目9に記載の方法。
[項目11]
前記第2のオペランドは、ソースとして、ワード0を上位64ビットに格納し、ワード2を下位64ビットに格納する、項目9に記載の方法。
[項目12]
前記第1のオペランドは、デスティネーションとして、新ワード3を上位64ビットに格納し、新ワード1を下位64ビットに格納する、項目9に記載の方法。
[項目13]
前記プロセッサの第2の実行部によって、第4のオペランド、第5のオペランド、および第6のオペランドを有する第2の命令に応答して、前記第6のオペランドによって示された第6のストレージロケーションから得た第2のローテート値を用い、第4のオペランドによって示された第4のストレージロケーションから得た前記複数の偶数ワードと前記第5のオペランドによって示された第5のストレージロケーションから得た前記複数の奇数ワードとに基づいて、複数の第2のSKEIN256 MIX−PERMUTE演算の複数のラウンド処理を、実行する段階、および
前記第4のストレージロケーションに複数の新偶数ワードを格納する段階と、をさらに備える、項目8から12のいずれか一項に記載の方法。
[項目14]
前記第4のオペランドおよび前記第5のオペランドは128ビットレジスタであり、デスティネーションとして、前記第4のオペランドは新ワード0を上位64ビットに格納し、新ワード2を下位64ビットに格納する、項目13に記載の方法。
[項目15]
インターコネクトと、
前記インターコネクトに連結したダイナミックランダムアクセスメモリ(DRAM)と、
前記インターコネクトに連結したプロセッサとを備え、
前記プロセッサは、
複数の第1のSKEIN256 MIX−PERMUTE演算を実行するための第1の命令を受信するための命令デコーダと、
前記命令デコーダに連結した第1の実行部とを備え、
前記第1の命令は、
複数の奇数ワードを格納するべく第1のストレージロケーションに関連付けられた第1のオペランドと、
複数の偶数ワードを格納するべく第2のストレージロケーションに関連付けられた第2のオペランドと、
第3のオペランドとを有し、
前記第1の実行部は、
前記第1の命令に応答して、前記第3のオペランドによって示された第3のストレージロケーションから得られた第1のローテート値を用いて、前記複数の奇数ワードおよび前記複数の偶数ワードに基づいた前記複数の第1のSKEIN256 MIX−PERMUTE演算の複数のラウンド処理を実行すること、ならびに、
前記第1のオペランドによって示される前記第1のストレージロケーションに複数の新奇数ワードを格納することを行う、データプロセッシングシステム。
[項目16]
前記第1のオペランドおよび前記第2のオペランドは、128ビットレジスタである、項目15に記載のデータプロセッシングシステム。
[項目17]
前記第1のオペランドは、ソースとして、ワード1を上位64ビットに格納し、ワード3を下位64ビットに格納する、項目16に記載のデータプロセッシングシステム。
[項目18]
前記第2のオペランドは、ソースとして、ワード0を上位64ビットに格納し、ワード2を下位64ビットに格納する、項目16に記載のデータプロセッシングシステム。
[項目19]
前記第1のオペランドは、デスティネーションとして、新ワード3を上位64ビットに格納し、新ワード1を下位64ビットに格納する、項目16に記載のデータプロセッシングシステム。
[項目20]
前記プロセッサは、
第4のオペランド、第5のオペランド、第6のオペランドを有する第2の命令に応答して、前記第6のオペランドによって示される第6のストレージロケーションから得た第2のローテート値を用いて、前記第4のオペランドによって示される第4のストレージロケーションから得た前記複数の偶数ワードと前記第5のオペランドによって示された第5のストレージロケーションから得た前記複数の奇数ワードに基づいて複数の第2のSKEIN256 MIX−PERMUTE演算の複数のラウンド処理を実行すること、ならびに、
前記第4のストレージロケーションに新たな複数の偶数ワードを格納すること、
を行うべく、前記命令デコーダに連結する第2の実行部を、さらに備える、項目15から19のいずれか一項に記載のデータプロセッシングシステム。
[項目21]
前記第4のオペランドおよび前記第5のオペランドは128ビットレジスタであり、デスティネーションとして、前記第4のオペランドは新ワード0を上位64ビットに格納し、新ワード2を下位64ビットに格納する、項目20に記載のデータプロセッシングシステム。
[項目22]
複数の奇数ワードを格納するべく第1のストレージロケーションに関連付けられた第1のオペランド、複数の偶数ワードを格納するべく第2のストレージロケーションに関連付けられた第2のオペランド、および第3のオペランドを有する第1の命令を、第1のSKEIN256 MIX−PERMUTE演算を実行するべく受信するための手段と、
前記第1の命令に応答して、前記第3のオペランドによって示される第3のストレージロケーションから得られる第1のローテート値を用いて前記複数の奇数ワードおよび前記複数の偶数ワードに基づいた複数の第1のSKEIN256MIX−PERMUTE演算の複数のラウンド処理を実行すること、ならびに、前記第1のオペランドによって示される第1のストレージロケーションに新奇数ワードを格納すること、を行うための手段と、を備える、装置。
[項目23]
前記第1のオペランドおよび前記第2のオペランドは、128ビットレジスタである、項目22に記載の装置。
[項目24]
前記第1のオペランドは、ソースとして、上位64ビットにワード1を格納し、下位64ビットにワード3を格納する、項目23に記載の装置。
[項目25]
前記第2のオペランドは、ソースとして、上位64ビットにワード0を格納し、下位64ビットにワード2を格納する、項目23に記載の装置。