複数の本発明の様々な複数の実施形態及び複数の態様が、後述される複数の詳細を参照して説明され、複数の添付図面は、様々な複数の実施形態を示す。以下の説明及び複数の図面は、本発明の例示であり、本発明を限定するものとして解釈されるものではない。多数の具体的な詳細が、本発明の様々な複数の実施形態に対する深い理解を与えるために説明される。しかしながら、特定の複数の例では、周知のまたは従来の複数の詳細は、複数の本発明の複数の実施形態の簡潔な説明を提供するために、説明されない。
本明細書における「一実施形態」または「実施形態」という語は、実施形態に併せて説明される特定の機能、構造または特性が、本発明の少なくとも1つの実施形態に含まれることができることを意味する。本明細書中、様々な箇所に出現する用語「一実施形態では」は、必ずしも全てが同じ実施形態を指すとは限らない。
いくつかの実施形態によれば、新たな命令セットアーキテクチャ(ISA)は、SHA−2オペレーションの効率性を改善するための単一の命令(例えば、単一命令複数データまたはSIMD命令)に応答して、上述したSHA−2の複数のオペレーションの1つまたは複数のラウンドを実行するために用いられる。2つのソースという限定のない128ビットの複数のレジスタ(例えば、複数のXMMレジスタ)を用いるSHA256ラウンド処理に対して、3サイクルパイプラインのプロセッサまたはプロセッサコアで実行されることができる複数の新たな命令が用いられる。さらに、SHA256メッセージスケジューリングに対して、2つのソースオペランドという制約を有する128ビットSIMDを用いる複数の新たな命令が定義される。
図2は、本発明の一実施形態に係るプロセッサまたはプロセッサコアの実行パイプラインのブロック図である。図2を参照すると、プロセッサ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を受信し、復号するためのものである。命令デコーダ102は、複数の命令を反映し、または複数の命令から導出される1つまたは複数のマイクロオペレーション、マイクロコード、エントリポイント、マイクロ命令、他の命令または他の制御信号を生成及び出力してもよい。命令デコーダ102は、様々な複数の異なるメカニズムを用いて実装されてもよい。適した複数のメカニズムの例は、限定されるものではないが、複数のマイクロコードリードオンリメモリ(ROM)、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラム可能ロジックアレイ(PLA)等を含む。
複数の実行ユニット102は、オペレーションロジックユニットまたは複数の命令に基づいて複数のオペレーションを実行可能な他のタイプのロジックユニットを含んでもよい。命令デコーダ102が複数の命令を復号した結果として、実行ユニット102は、1つまたは複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令もしくは複数の命令を反映し、または複数の命令から導出される他の制御信号を受信してもよい。実行ユニット102は、1つまたは複数のソースオペランド(SRC)を示す複数の命令の結果として、かつ、複数の命令によって示されるレジスタセットの1つまたは複数のデスティネーションオペランド(DEST)に結果を記憶するように、動作可能であってもよい。実行ユニット102は、複数の命令または複数の命令から導出される他の複数の制御信号を実行することによりオペレーションを実行するように動作可能な回路または他の実行ロジック(例えば、ハードウェア及び/またはファームウェアと組み合わせられたソフトウェア)を含んでもよい。実行ユニット102は、複数のロジックユニット、複数のオペレーションロジックユニット(ALU)、複数のオペレーションユニット、複数の整数ユニット等のような、あらゆる種類の複数の実行ユニットを表してもよい。
ソース及びデスティネーションオペランドのいくつか又は全ては、レジスタセットまたはメモリの複数のレジスタに記憶されてもよい。レジスタセットは、可能性としては複数のステータスレジスタ、複数のフラグレジスタ等のような他の複数のレジスタと共にレジスタファイルの一部であってもよい。レジスタは、データを記憶するために用いられ得るストレージ位置またはデバイスであってもよい。レジスタセットは、実行ユニットを有するダイ上に物理的に位置することが多い。複数のレジスタは、プロセッサ外部から、またはプログラマの視点からから可視であってもよい。例えば、複数の命令は、複数のレジスタに記憶される複数のオペランドを指定してもよい。様々な複数の異なるタイプのレジスタは、これらが本明細書で説明されたようにデータを記憶及び提供可能である限り、適している。複数のレジスタは、リネームされてもよく、されなくてもよい。適した複数のレジスタの例は、限定されるものではないが、複数の専用物理レジスタ、レジスタリネーミングを用いる複数の動的に割り当てられる物理レジスタ、専用及び動的に割り当てられる物理レジスタの複数の組み合わせ等を含む。代替的に、ソース及びデスティネーションオペランドのうちの1つまたは複数は、例えば、システムメモリ内の位置のような、レジスタ以外のストレージ位置に記憶されてもよい。
再び図2を参照すると、一実施形態によれば、実行ユニット102は、命令デコーダ101によって受信及び提供される第1の命令に応答して、SHA−2の複数の状態AからH、複数のメッセージ入力(w)及び1つまたは複数のレジスタ104に記憶される対応する複数の定数Wt及びKtのようなデータ110を用いて、SHA−2の複数のラウンドオペレーションの1つまたは複数のラウンドを実行する1つまたは複数のSHA−2ユニット106を含む。SHA−2の複数のラウンドオペレーションの1つまたは複数のラウンドは、1つまたは複数のSIMD命令に応答して実行される。SHA−2の複数のラウンドオペレーションの複数のラウンドの数は、プロセッサパイプラインの全体的な性能を最適化する適切な数となるように構成され得るプロセッサパイプラインの具体的な設計または構成(例えば、パイプレイテンシ要件)によって異なる。例示目的のために、SHA−2の複数のラウンドオペレーションの2つのラウンドが実行されると仮定する。SHA−2の複数のラウンドオペレーションのより多い又は少ないラウンドも、適切なサイズの複数のレジスタまたはメモリなどの複数の必要なリソースが得られる限り、実行されることができることが理解されよう。
一実施形態によれば、SHA−2の複数のラウンドオペレーションの2つのラウンドは、128ビットデータパスにおいて複数のSIMD命令、すなわち1)SHA2_IN、2)SHA2_LO及び3)SHA2_HI命令を用いて実行される。これら3つの命令の実行は、SHA256の複数のオペレーションの少なくとも2つのラウンドを、2つのラウンドに対して6サイクル、すなわちSHA2_INの3サイクルパイプライン、次いでSHA2_LOの3サイクルパイプラインのクリティカルパスにより完了させる。SHA2_HI及びメッセージスケジューリング(MSG1SHA256及びMSG2SHA256)の複数のオペレーションは、SHA2_IN及びSHA2_LO命令の実行の内部に隠される(例えば、並列に実行される)。これらの複数の命令の全ては、複数のXMMレジスタのような、少なくとも128ビットの複数のオペランドを用いる。この適用を通して、複数のXMMレジスタは、複数の128ビットレジスタの例として用いられる。
一実施形態では、命令SHA_INは、以下の通り定義されてもよい。
SHA2_IN命令は、次の2つのラウンドのために部分的な計算を実行し、複数のメッセージに加えて複数の定数を、2つのラウンドに投入する。この命令では、XMM0は、ソース/デスティネーションレジスタである。入力として、XMM0は、SHA2の複数の状態E,F,G及びHを記憶する。XMM1は、2つのラウンドの場合、複数の定数WK2及びWK1を記憶する。具体的には、一実施形態に係る入力として、SHA2の複数の状態は、以下の通りXMM0レジスタに記憶される。
複数のオペレーションの出力は、複数の状態E及びFならびに複数の中間結果X及びYを含むデスティネーションレジスタとして、XMM0に記憶される。一実施形態によれば、出力として、デスティネーションレジスタXMM0は、以下の通り定義される。
一実施形態では、命令SHA_LOは、以下の通り定義されてもよい。
SHA2_LOは、現在のラウンドに対し、更新されたE,F,G及びHと称されるSHA256の複数の状態E,F,G及びHの2つのラウンドを、入力[A、B、C、D]及び[E、F、G、H]から部分的に算出する。この命令では、XMM0は、ソース/デスティネーションレジスタである。入力として、XMM0は、上述したSHA2_IN命令から算出されるSHA2の複数の状態E、F、X及びYを、以下の通り記憶する。
XMM1は、複数の入力状態A、B、C及びDを記憶する。具体的には、一実施形態によれば、入力として、SHA2の複数の状態は、以下の通りXMM1レジスタに記憶される。
命令SHA_LOの実行後、一実施形態に係る出力として、XMM0は、以下の通り定義される。
一実施形態では、命令SHA_HIは、以下の通り定義されてもよい。
SHA2_HIは、現在のラウンドに対し、入力[A、B、C、D]及び[E、F、X、Y]から、更新されたA、B、C及びDと称されるSHA256の複数の状態A、B、C及びDの2つのラウンドを部分的に算出する。この命令では、XMM0は、ソース/デスティネーションレジスタである。入力として、一実施形態によれば、XMM0は、SHA2の元の複数の状態A、B、C及びDを以下の通り記憶する。
一実施形態によれば、入力として、XMM1は、(SHA2_INにより算出される)E、F、X及びYを、以下の通り記憶する。
出力として、一実施形態によれば、XMM0は、以下の通り定義される。
図3は、一実施形態に係るSHA2の複数のラウンドオペレーションのための実行パイプラインの例を示すブロック図である。システム300は、複数の命令SHA2_IN、SHA2_LO及びSHA2_HIを処理するように構成され、ここで、複数のマイクロコード301−303は、異なる複数のパイプラインステージで実行されてもよい。
他の実施形態によれば、命令に応答して、SHA−2ユニット106は、次のサイクル(例えば、次のSIMD命令サイクルにおけるSHA−2の複数のラウンドオペレーションの1つまたは複数のラウンド)のための複数のメッセージ入力を生成するために、SHA−2の複数のメッセージスケジューリングオペレーションを実行ように構成される。一実施形態では、プロセッサパイプラインの具体的な設計または構成に応じて、次のSIMDサイクルのための複数のメッセージ入力を準備するために必要な2つの命令が存在しうる。SHA−2の複数のラウンドオペレーションの少なくとも2つのラウンドをサポートする場合、第1の命令は、少なくとも8つの前のメッセージ入力を記憶するための2つのオペランドを含み、第1の命令が実行された後、中間結果が生成され、複数のオペランドの1つにおいて指定されたレジスタに戻される。第2の命令は、第1の命令から生成された中間結果と、1つのオペランドにおける入力として、少なくとも4つの前のメッセージ入力とを取る。第2の命令の他のオペランドは、少なくとも4つの他の前のメッセージ入力を指定する。最終結果は、次のSIMDサイクルのための4つのメッセージ入力を表す。一実施形態では、複数のメッセージスケジューリングオペレーションで用いられる複数のレジスタは、少なくとも128ビットを有する。
上述したラウンドと調子を合わせるために、複数の命令は、一実施形態によれば、SHA−256メッセージスケジューリングの実行に特化された、本明細書では命令MSG1SHA256及びMSG2SHA256と称される2つの命令が提供される。MSG1SHA256及びMSG2SHA256は、ラウンド16から63の場合、以下の通り複数の語w(i)を計算する。
一実施形態では、命令MSG1SHA256は、以下の通り定義されてもよい。
ここで、レジスタXMM0及びXMM1は、インテルAVXプロセッサファミリから入手可能なこれらの複数のXMMレジスタのような、少なくとも128ビットを有する複数のレジスタを表す。XMM0は、ソース/デスティネーションレジスタであり、XMM1は、ソースレジスタである。命令MSG1SHA256は、次の4つのSHA256のメッセージ入力のために、中間計算を実行する。
一実施形態では、入力XMM0は、複数のメッセージw(i−13)、w(i−14)、w(i−15)及びw(i−16)を表す。XMM0フォーマットの実施形態は、以下の通り定義されることができる。
入力XMM1は、複数のメッセージw(i−9)、w(i−10)、w(i−11)及びw(i−12)を表す。XMM1フォーマットの実施形態は、以下の通り定義されることができる。
出力XMM0は、w(i−13)+s0(w(i−12))、w(i−14)+s0(w(i−13))、w(i−15)+s0(w(i−14))、及びw(i−16)+s0(w(i−15))を表す。XMM0のフォーマットの実施形態は、以下の通り定義されることができる。
ここで、XMM0[127:96]は、w(i+3)を決定するためのMSG1(i−13)を表し、XMM0[95:64]は、w(i+2)を決定するためのMSG1(i−14)を表し、XMM0[63:32]は、w(i+1)を決定するためのMSG1(i−15)を表し、XMM0[31:00]は、w(i)を決定するためのMSG1(i−16)を表す。
一実施形態では、命令MSG2SHA256は、以下の通り定義されてもよい。
ここで、レジスタXMM0及びXMM1は、インテルAVXプロセッサファミリから入手可能なこれらの複数のXMMレジスタのような、少なくとも128ビットを有する複数のレジスタを表す。XMM0レジスタは、ソース/デスティネーションレジスタであり、XMM1は、ソースレジスタである。命令MSG2SHA256は、1)w(i−13)からw(i−16)に対するMSG1の複数の値及び複数のメッセージ入力w(i−5)からw(i−7)、ならびに2)複数のメッセージ入力w(i−1)からw(i−4)を含む次の4つのSHA−256メッセージ入力に対して、計算を実行する。
一実施形態では、入力XMM0は、以下の通り定義される。
一実施形態では、SHA−256の複数のラウンドオペレーションの現在のラウンドiでは、入力XMM1は、以下の通り複数のメッセージw(i−1)、w(i−2)、w(i−3)及びw(i−4)を表す。
一実施形態では、SHA−256の複数のラウンドオペレーションの現在のラウンドiでは、出力XMM0は、新たな複数のメッセージw(i+3)、w(i+2)、w(i+1)及びw(i)を、以下の通り表す。
なお、この命令に対する入力XMM0は、MSG1の直接出力ではなく、4レーン中の3つに追加されたいくつかのwのワードにより修正されたバージョンである。これは、新たな命令またはPERM、ADD命令のような2つの既存の命令の組み合わせにより達成されることができる。
図4は、一実施形態に係るSHA−256の複数のラウンドオペレーションのための処理を示すブロック図である。図4を参照すると、処理の実施形態は、プロセッサまたはプロセッサコアの少なくとも3つのパイプラインステージ401−403により定義されることができる。なお、パイプラインステージ401−403は、プロセッサの具体的な設計または構成に依存する複数の連続パイプラインステージであってもよく、依存しない複数の連続パイプラインステージであってもよい。MSG1SHA256マイクロコード404、MSG2SHA256マイクロコード405及びSHA256ラウンドマイクロコード406は、図2のSHA−2ユニット106の一部として実装されてもよい。一実施形態では、SHA256ラウンドマイクロコード406は、図3のロジック300の一部として実装されてもよい。
一実施形態によれば、命令MSG1SHA256、MSG1SHA256に応答して、マイクロコード404は、上述したように、SHA−256の複数のメッセージスケジューリングオペレーションの第1の部分を実行するものである。SHA−256の複数のラウンドオペレーションの所定のラウンドiでは、パイプラインステージ401の間に、MSG1SHA256マイクロコード404は、前に生成されたメッセージ407−408に対して複数のメッセージスケジューリングオペレーションの第1の部分を実行し、中間メッセージ409を生成するためのものである。
一実施形態によれば、命令に応答してMSG2SHA256、MSG2SHA256マイクロコード405は、上述したように、SHA−256の複数のメッセージスケジューリングオペレーションの第2の部分を実行するためのものである。SHA−256の複数のラウンドオペレーションの所定のラウンドiでは、パイプラインステージ402の間に、MSG2SHA256マイクロコード405は、複数のメッセージスケジューリングオペレーションの第2の部分を、前に生成されたメッセージ410及び中間メッセージ409及び複数のメッセージ入力411(PERM及び/またはADDなどの他の命令を用いて組み合わせられてもよい)に対して実行し、メッセージ412を生成するためのものである。
一実施形態によれば、SHA256RNDS2命令に応答して、SHA256RNDS2マイクロコード406は、上述したように、SHA−256の複数のラウンドオペレーションのラウンドを実行するためのものである。SHA−256の複数のラウンドオペレーションの所定のラウンドiでは、パイプラインステージ403の間に、SHA256RNDS2マイクロコード406は、複数のメッセージ412及び現在のSHA−256の複数の状態413に対してラウンドオペレーションを実行し、次のラウンドまたはイタレーションのためにSHA−256の複数の状態414を生成するためのものである。なお、この例では、レジスタ412に記憶されるw(i+3)、w(i+2)、w(i+1)及びw(i)のそれぞれは、32ビットを有する。これは、SHA−256の複数のラウンドオペレーションの少なくとも2つのラウンドを実行するために用いられることができる。レジスタ412が、より多くのメッセージ入力を記憶することができる場合、パイプレイテンシ要件が満たされる限り、SHA−256の複数のラウンドオペレーションのより多くのラウンドが、さらに実行されることができる。
図5は、一実施形態に係るSHA−2の複数のメッセージスケジューリングオペレーションを実行するための方法を示すフロー図である。方法500は、図1のSHA−2ユニット106により実行されてもよい。図5を参照すると、ブロック501において、命令(例えば、MSG1SHA256)がプロセッサの実行ユニットにより受信され、ここで、命令は、SHA256の複数のメッセージスケジューリングオペレーションの第1の部分を実行するために複数のメッセージ入力を記憶する第1のオペランド(例えば、XMM0)及び第2のオペランド(例えば、XMM1)を含む。ブロック502において、複数のメッセージ入力(例えば、少なくとも8つのメッセージ入力)は、第1及び第2のオペランドによって示される複数のストレージ位置から抽出される。ブロック503において、SHA256の複数のメッセージスケジューリングオペレーションの第1の部分は、抽出された複数のメッセージ入力に基づいて実行される。ブロック504において、SHA256の複数のメッセージスケジューリングオペレーションの第1の部分の中間結果は、第1のオペランド(例えば、XMM0)によって示されるストレージ位置に記憶される。
図6は、一実施形態に係るSHA−2の複数のメッセージスケジューリングオペレーションを実行するための方法を示すフロー図である。方法600は、SHA−2の複数のメッセージスケジューリングオペレーションの第2の部分として、図1のSHA−2ユニット106により実行されてもよい。図6を参照すると、ブロック601において、命令(例えば、MSG2SHA256)が受信され、ここで、命令は、各々が少なくとも128ビットのストレージ位置を特定する2つのオペランド(例えば、XMM0、XMM1)を含む。第1のオペランドは、複数のメッセージスケジューリングオペレーションの第1の部分の中間結果及び複数のメッセージ入力の第1のセットを記憶する第1のストレージ位置を指す。第2のオペランドは、複数のメッセージ入力の第2のセットを記憶する第2のストレージ位置を指す。ブロック602において、中間結果及びメッセージ入力の第1のセットは、第1のオペランドと関連付けられたストレージ位置から抽出され、メッセージ入力の第2のセットは、第2のオペランドと関連付けられたストレージ位置から抽出される。ブロック603において、SHA−2の複数のメッセージスケジューリングオペレーションの第2の部分は、中間結果及び複数のメッセージ入力に基づいて実行される。ブロック604において、最終結果は、生成されて、第1のオペランド(例えば、XMM0)と関連付けられたレジスタに記憶される。図7は、一実施形態に係るSHA256の複数のオペレーションの処理を示す疑似コードである。
他の実施形態によれば、新たなラウンド命令SHA2_2RNDは、本質的にSHA2_LO及びSHA2_HIオペレーションを実行するものとして定義されてもよい。一実施形態によれば、命令SHA2_2RNDは、以下の通り定義されてもよい。
ここで、XMM0及びXMM1の両方は、ソース/デスティネーションレジスタである。複数の入力として、XMM0は、複数の状態A、B、C及びDを記憶し、XMM1は、複数の状態E及びFならびに中間結果X及びYを記憶する。SHA2_2RNDの一連の複数のオペレーションの例は、以下の通りであってもよい。
2つのラウンド後、複数の出力として、XMM0は、更新されたA、B、C及びDを記憶し、XMM1は、更新されたE,F,G及びHを記憶する。
複数の実施形態がSHA256の複数のオペレーションについて説明されたが、しかしながら、上述した複数の技術は、図8A及び図8Bに示されるように、SHA512の複数のオペレーションのような他のより広い複数のデータパスにも適用可能である。SHA512IN1、SHA512IN2、SHA512LO及びSHA512HIの実行は、2つのラウンドに対して9サイクル、すなわち、SHA512IN1(3サイクルパイプライン)、次いでSHA512IN2(3サイクルパイプライン)、次いでSHA512HI(3サイクルパイプライン)のクリティカルパスにより、SHA512の2つのラウンドを完了させる。SHA512LO及びメッセージスケジューリング複数の命令は、SHA512IN1、SHA512IN2及びSHA512HIの実行の内部に隠される。
命令セットまたは命令セットアーキテクチャ(ISA)は、プログラミング関連のコンピュータアーキテクチャの一部であり、複数のネイティブデータ型、複数の命令、レジスタアーキテクチャ、複数のアドレッシングモード、メモリアーキテクチャ、割り込み及び例外処理、ならびに外部入力及び出力(I/O)を含んでもよい。命令という用語は、本明細書では概して、複数のマイクロ命令または複数のマイクロオペレーション(micro−op)、すなわち、プロセッサのデコーダが複数のマクロ命令を復号した結果とは対照的に、複数のマクロ命令、すなわち、プロセッサ(または、命令をプロセッサに処理されるべき1つまたは複数の他の複数の命令に(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる)変換、モーフィング、エミュレートまたは他の方法で変換する命令変換部)に、実行のために提供される複数の命令を指す。
ISAは、命令セットを実装するプロセッサの内部設計であるマイクロアーキテクチャと区別される。複数の異なるマイクロアーキテクチャを有する複数のプロセッサは、共通の命令セットを共有することができる。例えば、複数のインテル(登録商標)ペンティアム(登録商標)4プロセッサ、複数のインテル(登録商標)コア(商標)プロセッサ及びカリフォルニア州サニーベールのアドバンスド・マイクロ・デバイシズ社(Advanced Micro Devices, Inc.)の複数のプロセッサは、ほぼ理想的なバージョンのx86命令セット(複数のより新しいバージョンに追加された複数の拡張を有する)を実装するが、異なる複数の内部設計を有する。例えば、ISAの同じレジスタアーキテクチャは、複数の専用物理レジスタ、レジスタリネーミングメカニズムを用いる(例えば、レジスタエイリアステーブル(RAT)、リオーダバッファ(ROB)及びリタイアメントレジスタファイルの利用、複数のマップ及び複数のレジスタのプールの利用)1つまたは複数の動的に割り当てられる物理レジスタ等を含む複数の周知技術を用いる複数の異なるマイクロアーキテクチャでは、複数の異なる態様で実装されてもよい。他に指定しない限り、レジスタアーキテクチャ、レジスタファイル及びレジスタという用語は、本明細書では、ソフトウェア/プログラマに可視なものであり、複数の命令が複数のレジスタを指定する態様を指すものとして用いられる。特定性が求められる場合、論理的な、アーキテクチャ上のまたはソフトウェアに可視という形容詞は、レジスタアーキテクチャ内の複数のレジスタ/ファイルを示すために用いられ、異なる形容詞は、所定のマイクロアーキテクチャ(例えば、物理的レジスタ、リオーダバッファ、リタイアメントレジスタ、レジスタプール)内の複数のレジスタを指定するために用いられる。
命令セットは、1つまたは複数の命令フォーマットを含む。所定の命令フォーマットは、実行されるべきオペレーション(オペコード)及びオペレーションが実行されるべきオペランドを他のものの中で指定するために、様々な複数のフィールド(ビット数、ビット位置)を定義する。いくつかの命令フォーマットは、複数の命令テンプレート(または複数のサブフォーマット)の定義により、さらに分割される。例えば、所定の命令フォーマットの複数の命令テンプレートは、命令フォーマットの複数のフィールド(含まれる複数のフィールドは、典型的には同じ順序だが、含まれるフィールドがより少ないため、少なくともいくつかは異なる複数のビット位置を有する)の異なる複数のサブセットを有するように定義されてもよく、及び/または、異なる解釈をされる所定のフィールドを有するように定義されてもよい。つまり、ISAの各命令は、所定の命令フォーマットを用いて(かつ、定義される場合には、その命令フォーマットの複数の命令テンプレートの所定の1つで)表され、オペレーション及び複数のオペランドを指定するための複数のフィールドを含む。例えば、例示的なADD命令は、オペコード及びオペランドフィールドを指定することにより複数のオペランド(ソース1/デスティネーション及びソース2)を選択するために、具体的なオペコード及びオペコードフィールドを含む命令フォーマットを有し、命令ストリームにおけるこのADD命令の発生は、具体的な複数のオペランドを選択する複数のオペランドフィールド内の具体的な複数のコンテンツを有する。
科学的、金融的、自動ベクトル化汎用、RMS(認識、検索及び合成)ならびに視覚的及びマルチメディアアプリケーション(例えば、2D/3Dグラフィクス、画像処理、ビデオ圧縮/解凍、複数の音声認識アルゴリズム及びオーディオ操作)は、多数のデータ項目に対して同じオペレーションが実行されることを要求する(「データ並列性」と称される)場合が多い。単一命令複数データ(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つより多くのソースベクトルオペランドを有するもの、横方向にオペレーションを行うもの、異なるサイズの結果ベクトルオペランドを生成するもの、複数の異なるサイズのデータエレメントを有するもの、及び/またはデータエレメントの順序が異なるもの)。理解されるべきことは、デスティネーションベクトルオペランド(またはデスティネーションオペランド)という用語は、命令によって指定されるオペレーションを実行した直接的な結果と定義され、(レジスタの場合またはその命令によって指定されるメモリアドレスにある場合)ある位置におけるそのデスティネーションオペランドのストレージを含むことにより、ソースオペランドとして他の命令によって(他の命令によるその同じ位置の仕様によって)アクセスされてもよい。
x86、MMX(商標)、ストリーミングSIMD拡張(SSE)、SSE2、SSE3、SSE4.1及びSSE4.2命令を含む命令セットを有する複数のインテル(登録商標)コア(商標)プロセッサに採用されるようなSIMD技術は、アプリケーション性能の顕著な改善を可能にしてきた。高度ベクトル拡張(AVX)(AVX1及びAVX2)と称され、ベクトル拡張(VEX)符号化スキームを用いるSIMD拡張のさらなるセットが、リリース及び/または公開されている(例えば、インテル(登録商標)64及びIA−32アーキテクチャソフトウェア開発者マニュアル、2011年10月を参照、及びインテル(登録商標)高度ベクトル拡張プログラミングリファレンス、2011年6月を参照)。
本明細書で説明される命令の複数の実施形態は、異なる複数のフォーマットで具現されてもよい。さらに、例示的な複数のシステム、複数のアーキテクチャ及び複数のパイプラインが、以下に詳述される。命令の複数の実施形態は、このような複数のシステム、複数のアーキテクチャ及び複数のパイプライン上で実行されてもよいが、これらの詳細に限定されるものではない。
VEX符号化によれば、複数の命令は、2つより多くのオペランドを有することができ、SIMDの複数のベクトルレジスタは、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のバイトは、明示的なC4バイト値(C4命令フォーマットを区別するために用いられる固有値)を含むフォーマットフィールド2140(VEXバイト0、ビット[7:0])である。第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)からなる。複数の命令の他の複数のフィールドは、Rrrr、Xxxx及びBbbbがVEX.R、VEX.X及びVEX.Bを追加することで形成可能なように、複数のレジスタインデックスの下位3ビットを、当技術分野で知られているように符号化する(rrr、xxx及びbbb)。オペコードマップフィールド2115(VEXバイト1、ビット[4:0]−mmmmm)は、暗示された先頭オペコードバイトを符号化するためのコンテンツを含む。Wフィールド2164(VEXバイト2、ビット[7]−W)は、VEX.Wという表記により表され、命令に応じて異なる複数の機能を提供する。VEX.vvvv2120の役割(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.xxx2154(ビット[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バイトベクトルオペランド長(またはサイズ)(これにより、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本のデスティネーションレジスタであってもよく、代替的な実施形態は、より多くの又はより少ないソース及びデスティネーションレジスタをサポートしてもよい(例えば、これらのソースの1つもデスティネーションとして動作する場合、最大で2つのソースをサポートしてもよく、これらのソースの1つもデスティネーションとして動作する場合、最大で3つのソースをサポートしてもよく、最大で2つのソース及び1つのデスティネーションをサポートしてもよい)。
[修正フィールド2246]
当該コンテンツは、総称ベクトル命令フォーマットにおいて、メモリアクセスを指定する複数の命令の発生を、これを指定しないものから、すなわち、ノーメモリアクセス2205の複数の命令テンプレートとメモリアクセス2220の複数の命令テンプレートとの間で、区別する。複数のメモリアクセスオペレーションは、(場合によっては、レジスタ内の複数の値を用いてソース及び/またはデスティネーションアドレスを指定する)メモリ階層に対して読み出し及び/または書き込みを行うが、複数の非メモリアクセスオペレーションは、行わない(例えば、ソース及び複数のデスティネーションは、複数のレジスタである)。一実施形態では、このフィールドも、複数のメモリアドレス算出を実行する3つの異なる態様間で選択するが、代替的な実施形態は、複数のメモリアドレス算出を実行する、より多くの、より少ない、または複数の異なる態様をサポートしてもよい。
[増加オペレーションフィールド2250]
当該コンテンツは、ベースオペレーションに加え、様々な異なる複数のオペレーションの中で実行されるべき1つを区別する。このフィールドは、状況に応じる。本発明の一実施形態では、このフィールドは、クラスフィールド2268、アルファフィールド2252及びベータフィールド2254に分割される。増加オペレーションフィールド2250によれば、2、3または4つの命令ではなく、単一の命令において、複数のオペレーションの共通の複数のグループが実行される。[スケールフィールド2260]
当該コンテンツによれば、メモリアドレス生成のために(例えば、2スケール*インデックス+ベースを用いるアドレス生成のために)、フィールドコンテンツのインデックスをスケーリングすることができる。
[変位フィールド2262A]
当該コンテンツは、(例えば、2スケール*インデックス+ベース+変位を用いるアドレス生成のために)メモリアドレス生成の一部として用いられる。[変位ファクタフィールド2262B(なお、変位フィールド2262Aを変位ファクタフィールド2262Bと直接並置することは、1つまたは他が使用されていることを示す)]
当該コンテンツは、アドレス生成の一部として用いられ、これは、メモリアクセスのサイズ(N)によってスケーリングされるべき変位要因を指定し、ここで、Nは、(例えば、2スケール*インデックス+ベース+スケーリングされる変位を用いるアドレス生成のための)メモリアクセス内のバイトの数である。複数の冗長下位ビットが無視されることによって、有効アドレスの計算で用いられるべき最終変位を生成するために、変位ファクタフィールドのコンテンツに、複数のメモリオペランドの合計サイズ(N)が乗じられる。N値は、フルオペコードフィールド2274(本明細書で後述される)及びデータ操作フィールド2254Cに基づいて、プロセッサハードウェアによってランタイムに決定される。変位フィールド2262A及び変位ファクタフィールド2262Bは、これらがノーメモリアクセス2205の複数の命令テンプレートのために用いられ、及び/または複数の異なる実施形態が、2つのうち1つだけ実装してもよく、または1つも実装しなくてもよいという意味で、任意的である。
[データエレメント幅フィールド2264]
当該コンテンツは、(いくつかの実施形態では、全ての命令に対して、複数の他の実施形態では、複数の命令の中のいくつかのみに対して)多数のデータエレメント幅の中で用いられるべき1つを区別する。このフィールドは、複数のオペコードのいくつかの態様を用いて、データエレメント幅が1つだけサポートされ、及び/またはデータエレメント幅がサポートされる場合には必要ないという意味で、任意的である。
[書き込みマスクフィールド2270]
当該コンテンツは、データエレメント位置に基づいて、デスティネーションベクトルオペランドにおけるそのデータエレメント位置がベースオペレーション及び増加オペレーション結果を反映するか否かを制御する。クラスAの複数の命令テンプレートは、結合書き込みマスクをサポートし、クラスBの複数の命令テンプレートは、結合及びゼロ書き込みマスクの両方をサポートする。結合する場合、複数のベクトルマスクにより、デスティネーションにおける複数のエレメントの任意のセットは、(ベースオペレーション及び増加オペレーションによって指定される)あらゆるオペレーションの実行の間、複数の更新から保護されることができ、他の一実施形態では、デスティネーションの各エレメントの古い値を保持し、ここで、対応するマスクビットは、0を有する。対照的に、ゼロを書き込む場合、複数のベクトルマスクにより、デスティネーションにおける複数のエレメントの任意のセットは、(ベースオペレーション及び増加オペレーションによって指定される)あらゆるオペレーションの実行の間、ゼロを書き込まれることができ、一実施形態では、対応するマスクビットが0値を有する場合、デスティネーションのエレメントは、0に設定される。この機能のサブセットは、実行中のオペレーションのベクトル長(すなわち、第1のものから最後の1つへと修正中の複数のエレメントのスパン)を制御する能力であるが、しかしながら、修正される複数のエレメントが連続している必要はない。つまり、書き込みマスクフィールド2270により、読み込み、記憶、オペレーション的、論理的等を含む部分的な複数のベクトルオペレーションが可能となる。書き込みマスクフィールド2270のコンテンツが多数の書き込みマスクレジスタの中から使用されるべき書き込みマスクを含む1つを選択する(これにより、書き込みマスクフィールド2270のコンテンツは、実行されるべきマスキングを間接的に識別する)本発明の複数の実施形態が説明されるが、代替的な実施形態によれば、代わりにまたはさらに、マスク書き込みフィールド2270のコンテンツは、実行されるべきマスキングを直接的に指定することができる。
[即値フィールド2272]
当該コンテンツは、即値の仕様を考慮する。このフィールドは、即値をサポートしない総称ベクトル向けフォーマットの実装では存在せず、即値を用いない複数の命令に存在しないという意味で、任意的である。[クラスフィールド2268]
当該コンテンツは、複数の命令の異なる複数のクラス間で区別する。図10A及び図10Bを参照すると、このフィールドの複数のコンテンツは、クラスA及びクラスB命令間で選択する。図10A及び図10Bでは、複数の角が丸い四角は、特定の値がフィールド(例えば、図10A及び図10Bのクラスフィールド2268に対し、それぞれ、クラスA2268A及びクラスB2268B)に存在することを示すために用いられる。
非メモリアクセス2205のクラスAの複数の命令テンプレートの場合、アルファフィールド2252は、RSフィールド2252Aと解釈され、そのコンテンツは、複数の異なる増加オペレーション型の中で実行されるべき1つを区別し(例えば、ノーメモリアクセス、ラウンド型オペレーション2210及びノーメモリアクセス、データ変換型オペレーション2215の複数の命令テンプレートに対し、ラウンド2252A.1及びデータ変換2252A.2がそれぞれ指定される)、ベータフィールド2254は、指定される型の複数のオペレーションの中でいずれが実行されるべきかを区別する。ノーメモリアクセス2205の複数の命令テンプレートには、スケールフィールド2260、変位フィールド2262A及び変位スケールフィールド2262Bは、存在しない。
ノーメモリアクセスフルラウンド制御型オペレーション2210の命令テンプレートでは、ベータフィールド2254は、ラウンド制御フィールド2254Aと解釈され、そのコンテンツは、静的なラウンドを提供する。説明された本発明の複数の実施形態では、ラウンド制御フィールド2254Aは、全浮動小数点例外抑制(SAE)フィールド2256及びラウンドオペレーション制御フィールド2258を含むが、代替的な実施形態は、これらの複数の概念の両方を同じフィールドに符号化することをサポートしてもよく、またはこれらの複数の概念/複数のフィールドの1つまたは他を有するだけでよい(例えば、ラウンドオペレーション制御フィールド2258のみを有してもよい)。
[SAEフィールド2256]
当該コンテンツは、例外イベント報告を無効化するか否かを区別し、SAEフィールド2256のコンテンツが、抑制が可能であることを示す場合、所定の命令は任意の種類の浮動小数点例外フラグを報告せず、いずれの浮動小数点例外処理部も立ち上げない。
[ラウンドオペレーション制御フィールド2258]
当該コンテンツは、複数のラウンドオペレーションの複数のグループ(例えば、切り上げ、切り捨て、0への丸め及び最近接丸め)の中から実行する1つを区別する。つまり、ラウンドオペレーション制御フィールド2258によれば、命令に基づいてラウンドオペレーションモードの変更が可能となる。プロセッサが複数のラウンドオペレーションモードを指定するための制御レジスタを含む本発明の一実施形態では、ラウンドオペレーション制御フィールド2250のコンテンツは、そのレジスタ値を無効にする。
ノーメモリアクセスデータ変換型オペレーション2215の命令テンプレートでは、ベータフィールド2254は、データ変換型フィールド2254Bと解釈され、そのコンテンツは、多数のデータ変換の中から実行されるべき1つ(例えば、データ変換なし、並び換え、ブロードキャスト)を区別する。
メモリアクセス2220のクラスA命令テンプレートの場合、アルファフィールド2252は、追い出し示唆フィールド2252Bと解釈され、そのコンテンツは、複数の追い出し示唆の中から用いられるべき1つを区別し(図10Aでは、一時的2252B.1及び非一時的2252B.2が、メモリアクセス、一時的2225命令テンプレート及びメモリアクセス、非一時的2230命令テンプレートに対してそれぞれ指定される)、ベータフィールド2254は、データ操作フィールド2254Cと解釈され、そのコンテンツは、多数のデータの中から複数の操作オペレーション(プリミティブとしても知られる)が実行されるべき1つ(例えば、操作なし、ブロードキャスト、ソースのアップコンバート及びデスティネーションのダウンコンバート)を区別する。メモリアクセス2220の複数の命令テンプレートは、スケールフィールド2260、及び任意選択的に、変位フィールド2262Aまたは変位スケールフィールド2262Bを含む。
ベクトルメモリの複数の命令は、変換サポートにより、メモリからの複数のベクトル読み込み、メモリへの及び複数のベクトル記憶を実行する。通常の複数のベクトル命令と同様に、ベクトルメモリの複数の命令は、書き込みマスクとして選択されるベクトルマスクの複数のコンテンツに命令される、実際に転送される複数のエレメントとともに、データエレメント単位の様式で、メモリから/へデータを転送する。
一時的データは、キャッシュによる利益を十分に受けられるほどすぐに再使用される可能性が高いデータである。これは、しかしながら、示唆であり、複数の異なるプロセッサは、示唆を完全に無視することを含む複数の異なる態様で、これを実装してもよい。非一時的データは、一次キャッシュでキャッシュによる利益を十分に受けられるほどすぐに再使用される可能性が低いデータであり、追い出しの優先が与えられなければならない。これは、しかしながら、示唆であり、複数の異なるプロセッサは、示唆を完全に無視することを含む複数の異なる態様で、これを実装してもよい。
クラスBの複数の命令テンプレートの場合、アルファフィールド2252は、書き込みマスク制御(Z)フィールド2252Cと解釈され、そのコンテンツは、書き込みマスクフィールド2270によって制御される書き込みマスキングが、結合またはゼロを書き込むべきかを区別する。
非メモリアクセス2205のクラスBの複数の命令テンプレートの場合、ベータフィールド2254の一部は、RLフィールド2257Aと解釈され、そのコンテンツは、複数の異なる増加オペレーション型の中で実行されるべき1つを区別し(例えば、ラウンド2257A.1及びベクトル長(VSIZE)2257A.2は、ノーメモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション2212の命令テンプレート及びノーメモリアクセス、書き込みマスク制御、VSIZE型オペレーション2217の命令テンプレートに対してそれぞれ指定される)、ベータフィールド2254の残りは、指定される型の複数のオペレーションのいずれが実行されるべきかを区別する。ノーメモリアクセス2205の複数の命令テンプレートでは、スケールフィールド2260、変位フィールド2262A及び変位スケールフィールド2262Bは、存在しない。
ノーメモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション2210の命令テンプレートでは、ベータフィールド2254の残りは、ラウンドオペレーションフィールド2259Aと解釈され、例外イベント報告は、無効化される(所定の命令は、任意の種類の浮動小数点例外フラグを報告せず、いずれの浮動小数点例外処理部もを立ち上げない)。
[ラウンドオペレーション制御フィールド2259A]
単にラウンドオペレーション制御フィールド2258として、当該コンテンツは、複数のラウンドオペレーションの複数のグループ(例えば、切り上げ、切り捨て、0への丸め及び最近接丸め)の中から実行するべき1つを区別する。つまり、ラウンドオペレーション制御フィールド2259Aによれば、命令に基づいてラウンドオペレーションモードの変更が可能となる。プロセッサが複数のラウンドオペレーションモードを指定するための制御レジスタを含む本発明の一実施形態では、ラウンドオペレーション制御フィールド2250のコンテンツは、そのレジスタ値を無効にする。
ノーメモリアクセス、書き込みマスク制御、VSIZE型オペレーション2217の命令テンプレートでは、ベータフィールド2254の残りは、ベクトル長フィールド2259Bと解釈され、そのコンテンツは、多数のデータの複数のベクトル長の中から実行されるべき1つを区別する(例えば、128、256または512バイト)。
メモリアクセス2220のクラスB命令テンプレートの場合、ベータフィールド2254の一部は、ブロードキャストフィールド2257Bと解釈され、そのコンテンツは、ブロードキャスト型のデータの操作オペレーションが実行されるべきか否かを区別し、ベータフィールド2254の残りは、ベクトル長フィールド2259Bと解釈される。メモリアクセス2220の複数の命令テンプレートは、スケールフィールド2260、及び任意選択的に、変位フィールド2262Aまたは変位スケールフィールド2262Bを含む。
総称ベクトル向け命令フォーマット2200に関して、フォーマットフィールド2240、ベースオペレーションフィールド2242及びデータエレメント幅フィールド2264を含むフルオペコードフィールド2274が示される。フルオペコードフィールド2274がこれらのフィールドの全てを含む一実施形態が示されるが、これらの全てをサポートしてはいない複数の実施形態では、フルオペコードフィールド2274は、これらの複数のフィールドの一部のみを含む。フルオペコードフィールド2274は、オペレーションコード(オペコード)を提供する。
増加オペレーションフィールド2250、データエレメント幅フィールド2264及び書き込みマスクフィールド2270によれば、総称ベクトル向け命令フォーマットにおいて、これら全ての機能が、命令に基づいて指定されることができる。書き込みマスクフィールド及びデータエレメント幅フィールドの組み合わせは、型別の複数の命令を生成し、これらによれば、マスクが複数の異なるデータエレメント幅に基づいて適用されることができる。
クラスA及びクラスB内で得られる様々な複数の命令テンプレートは、異なる複数の状況において有益である。本発明のいくつかの実施形態では、複数の異なるプロセッサまたはプロセッサ内の複数の異なるコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートしてもよい。例えば、汎用オペレーション向けの高性能汎用アウトオブオーダコアは、クラスBのみをサポートしてもよく、主にグラフィクス及び/または科学的(スループット)オペレーション向けのコアは、クラスAのみをサポートしてもよく、両方向けのコアは、両方をサポートしてもよい(勿論、コアは、両方のクラスからの複数のテンプレート及び複数の命令のいくつかの組み合わせを有するが、両方のクラスからの複数のテンプレート及び複数の命令の全てが本発明の範囲内にある訳ではない)。また、単一のプロセッサは、複数のコアを含んでもよく、その全ては、同じクラスをサポートし、またはその複数の異なるコアは、異なるクラスをサポートする。例えば、個別のグラフィクス及び汎用コアを有するプロセッサでは、主にグラフィクス及び/または科学的オペレーション向けの複数のグラフィクスコアの1つは、クラスAのみをサポートしてもよく、複数の汎用コアのうちの1つまたは複数は、クラスBのみをサポートする汎用オペレーション向けのアウトオブオーダ実行及びレジスタリネーミングを伴う高性能複数の汎用コアであってもよい。個別のグラフィクスコアを有さない他のプロセッサは、クラスA及びクラスBの両方をサポートする汎用インオーダまたはアウトオブオーダコアをもう1つ含んでもよい。勿論、1つのクラスからの複数の機能は、本発明の複数の異なる実施形態における他のクラスでさらに実装されてもよい。高水準言語で記述される複数のプログラムは、1)実行のために対象プロセッサによってサポートされるクラスの複数の命令のみを有する形式、または2)全クラスの複数の命令の複数の異なる組み合わせを用いて記述される代替的な複数のルーチンを有し、コードを現在実行しているプロセッサによってサポートされる複数の命令に基づいて実行する、複数のルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能な形式にされる(例えば、ジャストインタイムでコンパイルされ、または静的にコンパイルされる)。
図11A−Cは、本発明の複数の実施形態に係る例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図11A−Cは、複数のフィールドの位置、サイズ、解釈及び順序、ならびにこれらの複数のフィールドのいくつかの複数の値を指定するという意味で、具体的な特定ベクトル向け命令フォーマット2300を示す。特定ベクトル向け命令フォーマット2300は、x86命令セットを拡張するために用いられてもよく、これにより、複数のフィールドのいくつかは、既存のx86命令セット及びその拡張(例えば、AVX)で用いられたものと同様のまたは同じとなる。このフォーマットは、拡張された既存のx86命令セットのプレフィクス符号化フィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド及び複数の即値フィールドと整合性のある状態を保つ。図11A−Cの複数のフィールドがマッピングされる図10A−Bの複数のフィールドが、示される。
理解されるべきことは、本発明の複数の実施形態が、例示目的のため、総称ベクトル向け命令フォーマット2200との関連で特定ベクトル向け命令フォーマット2300を参照して説明されるが、本発明は、特許請求の範囲に記載されたものを除き、特定ベクトル向け命令フォーマット2300に限定されるものではない。例えば、総称ベクトル向け命令フォーマット2200は、様々な複数のフィールドに適用可能な様々な複数のサイズを検討し、特定ベクトル向け命令フォーマット2300は、具体的な複数のサイズの複数のフィールドを有するものとして示される。具体的な例を用いて、データエレメント幅フィールド2264は、特定ベクトル向け命令フォーマット2300の1ビットフィールドとして示されるが、本発明は、このように限定されるものではない(すなわち、総称ベクトル向け命令フォーマット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の補数形式を用いて符号化され、すなわち、ZMM0は1111Bとして符号化され、ZMM15は0000Bとして符号化される。当技術分野で知られているように、複数の命令の他の複数のフィールドが複数のレジスタインデックスの下位3ビット(rrr、xxx及びbbb)を符号化することにより、Rrrr、Xxxx及びBbbbは、EVEX.R、EVEX.X及びEVEX.Bを加算することによって形成されてもよい。
[REX'フィールド2210]
これは、REX'フィールド2210の第1の部分であり、拡張された32本のレジスタセットの上位16または下位16のいずれかを符号化するために用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。本発明の一実施形態では、以下に示すように、このビットは、他の複数のビットと共に、ビット反転フォーマットで記憶されることにより、リアルオペコードバイトは62であるが、(後述の)MOD R/MフィールドにおいてMODフィールドの値11を受け付けない(周知のx86の32ビットモードにおける)BOUND命令から区別するが、本発明の複数の代替的な実施形態は、これ及び以下に示される反転フォーマットの他のビットを記憶しない。値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、ビット[l: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を再設計することにより、拡張不要であってもよい。
[アルファフィールド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.rrl、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.U1(クラス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のブロック図である。示された実施形態では、32本の512ビット幅ベクトルレジスタ2410が存在し、これらの複数のレジスタは、zmm0からzmm31と称される。下位16本のzmmレジスタの下位256ビットは、複数のレジスタymm0−16に対してオーバーレイされる。下位16本のzmmレジスタの下位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という名で称される。
[MMXパック型整数フラットレジスタファイル2450がエイリアスされるスカラ浮動小数点スタックレジスタファイル(x87スタック)2445]
示された実施形態では、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を含むプロセッサコア2590を示し、両方ともメモリユニット2570に結合される。コア2590は、縮小命令セットコンピュータ(RISC)コア、複合命令セットコンピュータ(CISC)コア、超長命令語(VLIW)コアまたはハイブリッド、もしくは代替的なコアタイプであってもよい。さらに他の選択肢として、コア2590は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用オペレーション画像処理ユニット(GPGPU)コア、グラフィクスコアなどのような特別用途コアであってもよい。
フロントエンドユニット2530は、命令キャッシュユニット2534に結合される分岐予測ユニット2532を含み、命令キャッシュユニット2534は、命令トランスレーションルックアサイドバッファ(TLB)2536に結合され、命令トランスレーションルックアサイドバッファ(TLB)2536は、命令フェッチユニット2538に結合され、命令フェッチユニット2538は、復号ユニット2540に結合される。復号ユニット2540(またはデコーダ)は、複数の命令を復号し、1つまたは複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の複数の命令、または元の複数の命令から復号され、または他の方法でこれを反映し、またはこれから導出される他の制御信号を、出力として生成してもよい。復号ユニット2540は、様々な複数の異なるメカニズムを用いて実装されてもよい。適した複数のメカニズムの例は、限定されるものではないが、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラム可能ロジックアレイ(PLA)、マイクロコード複数のリードオンリメモリ(ROM)等を含む。一実施形態では、コア2590は、マイクロコードROMまたは(例えば、復号ユニット2540で、またはさもなければフロントエンドユニット2530内で)特定の複数のマクロ命令に対するマイクロコードを記憶する他の媒体を含む。復号ユニット2540は、実行エンジンユニット2550内でリネーム/配分ユニット2552に結合される。
実行エンジンユニット2550は、リタイアメントユニット2554及び1つまたは複数のスケジューラユニット2556のセットに結合されるリネーム/配分ユニット2552を含む。スケジューラユニット2556は、複数の予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット2556は、物理レジスタファイルユニット2558に結合される。複数の物理レジスタファイルユニット2558のそれぞれは、1つまたは複数の物理レジスタファイルを表し、そのいくつかは、スカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)等のような、1つまたは複数の異なるデータ型を記憶する。
一実施形態では、物理レジスタファイルユニット2558は、複数のベクトルレジスタユニット、複数の書き込みマスクレジスタユニット及び複数のスカラレジスタユニットを備える。これらのレジスタ複数のユニットは、アーキテクチャ上の複数のベクトルレジスタ、複数のベクトルマスクレジスタ及び複数の汎用レジスタを提供してもよい。物理レジスタファイルユニット2558は、レジスタリネーミング及びアウトオブオーダ実行が(例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いて、フューチャーファイル、履歴バッファ及びリタイアメントレジスタファイルを用いて、レジスタマップ及び複数のレジスタプール等を用いて)実装され得る様々な複数の態様を示すために、リタイアメントユニット2554によりオーバーラップされる。リタイアメントユニット2554及び物理レジスタファイルユニット2558は、実行クラスタ2560に結合される。
実行クラスタ2560は、1つまたは複数の実行ユニット2562のセット及び1つまたは複数のメモリアクセスユニット2564のセットを含む。複数の実行ユニット2562は、複数の様々な型のデータ(例えば、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点)に対し、様々な複数のオペレーション(例えば、シフト、加算、減算、乗算)を実行してもよい。いくつかの実施形態は、具体的な複数の関数または複数の関数の複数のセット専用の多数の実行ユニットを含んでもよく、他の複数の実施形態は、1つだけの実行ユニットまたは全てが全関数を実行する複数の実行ユニットを含んでもよい。
特定の複数の実施形態は、特定の複数のデータ型/複数のオペレーションに対する個別の複数のパイプライン(例えば、各々が自己のスケジューラユニット、物理レジスタファイルユニット及び/または実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点/パック型整数/パック型浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン及び/またはメモリアクセスパイプライン。個別のメモリアクセスパイプラインの場合、特定の複数の実施形態は、このパイプラインの実行クラスタのみがメモリアクセスユニット2564を有するかたちで実装される)を生成するため、スケジューラユニット2556、物理レジスタファイルユニット2558及び実行クラスタ2560は、場合によっては複数として示される。個別の複数のパイプラインが用いられる場合、これらの複数のパイプラインのうちの1つまたは複数はアウトオブオーダ発行/実行、残りはインオーダであってもよいことも理解されたい。
複数のメモリアクセスユニット2564のセットは、メモリユニット2570に結合され、メモリユニット2570は、データTLBユニット2572を含み、データTLBユニット2572は、データキャッシュユニット2574に結合され、データキャッシュユニット2574は、二次(L2)キャッシュユニット2576に結合される。例示的な一実施形態では、複数のメモリアクセスユニット2564は、読み込みユニット、記憶アドレスユニット、記憶データユニットを含んでもよく、これらのそれぞれは、メモリユニット2570のデータTLBユニット2572に結合される。命令キャッシュユニット2534は、メモリユニット2570の二次(L2)キャッシュユニット2576にさらに結合される。L2キャッシュユニット2576は、1つまたは複数の他の複数のレベルのキャッシュ、及びゆくゆくはメインメモリに結合される。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、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を実行するというように、パイプライン2500を実装してもよい。
コア2590は、本明細書で説明される命令を含む1つまたは複数の命令セット(例えば、x86命令セット(複数のより新しいバージョンいくつかの拡張を有する)カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスの(NEONのような任意の追加的な拡張を有する)ARM命令セット)をサポートしてもよい。一実施形態では、コア2590は、パックドデータ命令セット拡張(例えば、AVX1、AVX2及び/または前述した総称ベクトル向け命令フォーマットのいくつかの形式(U=0及び/またはU=1))をサポートするロジックを含むことによって、複数のオペレーションは、パックドデータを用いて実行されるべき多数のマルチメディアアプリケーションによって用いられる。
理解されるべきことは、コアは、マルチスレッディング(複数のオペレーションまたは複数のスレッドの2つまたはそれより多くの並列のセットを実行すること)をサポートしてもよく、時分割マルチスレッディング、同時マルチスレッディング(ここで、単一の物理的コアは、物理的コアが同時にマルチスレッディングを行う複数のスレッドのそれぞれに論理コアを提供する)またはこれらの組み合わせ(例えば、インテル(登録商標)ハイパースレッディング・テクノロジーなどにおける時分割フェッチ及び復号、ならびにその後の同時マルチスレッディング)を含む様々な複数の態様で、これを行ってもよい。
レジスタリネーミングは、アウトオブオーダ実行との関連で説明されるが、理解されるべきことは、レジスタリネーミングは、インオーダアーキテクチャで用いられてもよい。プロセッサの示される実施形態は、個別の命令及びデータキャッシュユニット2534/2574ならびに共有L2キャッシュユニット2576をさらに含むが、代替的な実施形態は、複数の命令及びデータの両方のために、例えば、一次(L1)内部キャッシュのような単一の内部キャッシュ、または複数のレベルの内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュ及びコア及び/またはプロセッサの外部にある外部キャッシュの組み合わせを含んでもよい。代替的に、全てのキャッシュは、コア及び/またはプロセッサの外部にあってもよい。
図14A及び図14Bは、より具体的な、例示的なインオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップにおけるいくつかのロジックブロック(同じタイプ及び/または複数の異なるタイプの他の複数のコアを含む)の1つである。複数のロジックブロックは、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を介して、用途に応じて、いくつかの固定関数ロジック、複数のメモリI/Oインターフェース及び他の必要なI/Oロジックにより通信を行う。
図14Aは、本発明の複数の実施形態に係る単一のプロセッサコアのブロック図であり、そのオンダイ相互接続ネットワーク2602との接続、及びその二次(L2)キャッシュ2604のローカルサブセットと共に示される。一実施形態では、命令デコーダ2600は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ2606によれば、キャッシュメモリ、さらにはスカラ及びベクトルユニットへの低レイテンシアクセスが可能である。一実施形態では(設計の単純化のために)、スカラユニット2608及びベクトルユニット2610は、個別の複数のレジスタセット(それぞれ、複数のスカラレジスタ2612及び複数のベクトルレジスタ2614)を用い、これらの間で転送されるデータは、メモリに書き込まれ、次に一次(L1)キャッシュ2606から再読み出しされるが、本発明の複数の代替的な実施形態は、異なるアプローチ(例えば、単一のレジスタセットを用い、または、データが書き込み及び再読み出しされることなく2つのレジスタファイル間で転送されることを可能とする通信パスを含む)を用いてもよい。
L2キャッシュ2604のローカルサブセットは、1プロセッサコアあたり1つの個別の複数のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ2604の自己のローカルサブセットへのダイレクトアクセスパスを有する。プロセッサコアによって読み出されたデータは、そのL2キャッシュサブセット2604に記憶され、他の複数のプロセッサコアがこれら自体の複数のローカルL2キャッシュサブセットにアクセスするのと並行に、迅速にアクセスされることができる。プロセッサコアによって書き込まれたデータは、それ自体のL2キャッシュサブセット2604に記憶され、他の複数のサブセットから、必要に応じてフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは、双方向であることにより、複数のプロセッサコア、複数のL2キャッシュ及び他の複数のロジックブロックのような複数のエージェントが、チップ内で互いに通信を行うことができる。各リングデータパスは、各方向1012ビット幅である。
図14Bは、本発明の複数の実施形態に係る図14Aのプロセッサコアの一部の拡大図である。図14Bは、L1キャッシュ2606の一部であるL1データキャッシュ2606Aを含み、ベクトルユニット2610及び複数のベクトルレジスタ2614についてより詳細に示す。具体的には、ベクトルユニット2610は、整数、単精度浮動及び倍精度浮動の複数の命令のうちの1つまたは複数を実行する16幅ベクトル処理ユニット(VPU)(16幅ALU2628を参照)である。VPUは、メモリ入力に対して、並び換えユニット2620によるレジスタ複数の入力の並び換え、数字変換ユニット2622A−Bによる数字変換、及び複製ユニット2624による複製をサポートする。複数の書き込みマスクレジスタ2626は、結果的な複数のベクトル書き込みの叙述を可能とする。
図15は、本発明の複数の実施形態に係るプロセッサ2700のブロック図であり、プロセッサ2700は、1つより多くのコアを有してもよく、1つより多くのコアは、集積メモリコントローラを有してもよく、集積メモリコントローラは、集中画像表示を有してもよい。図15の複数の実線のボックスは、単一のコア2702A、システムエージェント2710、1つまたは複数のバスコントローラユニット2716のセットを有するプロセッサ2700を示し、任意的に追加された複数の破線のボックスは、複数のコア2702A−N、システムエージェントユニット2710における1つまたは複数の集積メモリコントローラユニットのセット2714、及び特別用途ロジック2708を有する代替的なプロセッサ2700を示す。
つまり、プロセッサ2700の異なる複数の実装は、1)(1つまたは複数のコアを含み得る)集中画像表示及び/または科学的(スループット)ロジックである特別用途ロジック2708、及び1つまたは複数の汎用コア(例えば、複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、2つの組み合わせ)である複数のコア2702A−Nを有するCPU、2)主にグラフィクス及び/または科学的(スループット)向けの多数の特別用途コアである複数のコア2702A−Nを有するコプロセッサ、及び3)多数の汎用インオーダコアである複数のコア2702A−Nを有するコプロセッサを含んでもよい。つまり、プロセッサ2700は、汎用プロセッサ、コプロセッサ、または、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(汎用画像処理ユニット)、ハイスループット多集積コア(MIC)コプロセッサ(30またはそれより多くのコアを含む)、組込みプロセッサなどのような特別用途プロセッサであってもよい。プロセッサは、1つまたは複数のチップ上に実装されてもよい。プロセッサ2700は、例えば、BiCMOS、CMOSまたはNMOSのような多数の処理技術のいずれかを用いる1つまたは複数の基板の一部であってもよく、及び/またはその上に実装されてもよい。
メモリ階層は、複数のコア内の1つまたは複数のレベルのキャッシュ、セットまたは1つまたは複数の共有キャッシュユニット2706及び複数の集積メモリコントローラユニット2714のセットに結合される外部メモリ(不図示)を含む。複数の共有キャッシュユニット2706のセットは、二次(L2)、三次(L3)、四次(L4)または他の複数のレベルのキャッシュのような1つまたは複数の中レベルキャッシュ、ラストレベルキャッシュ(LLC)及び/またはこれらの複数の組み合わせを含んでもよい。一実施形態では、リングベースの相互接続ユニット2712は、集中画像表示ロジック2708、複数の共有キャッシュユニット2706のセット、及びシステムエージェントユニット2710/集積メモリコントローラユニット2714を相互接続するが、代替的な実施形態は、このような複数のユニットを相互接続するための任意の数の周知技術を用いてもよい。一実施形態では、コヒーレンシは、1つまたは複数のキャッシュユニット2706と複数のコア2702A−Nとの間で維持される。
いくつかの実施形態では、複数のコア2702A−Nのうちの1つまたは複数は、マルチスレッディングが可能である。システムエージェント2710は、複数のコア2702A−Nの調整及び操作を行うこれらの複数のコンポーネントを含む。システムエージェントユニット2710は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを含んでもよい。PCUは、複数のコア2702A−N及び集中画像表示ロジック2708の電力状態を調整するために必要なロジック及び複数のコンポーネントであってもよく、またはこれらを含んでもよい。ディスプレイユニットは、1つまたは複数の外部接続ディスプレイを駆動するためのものである。
複数のコア2702A−Nは、アーキテクチャ命令セットに関してホモジニアスまたはヘテロジニアスであってもよく、すなわち、複数のコア2702A−Nの2つまたはそれより多くは、同じ命令セットを実行可能であってもよく、他は、その命令セットまたは異なる命令セットのサブセットのみを実行可能であってもよい。
図16から図20は、例示的な複数のコンピュータアーキテクチャの複数のブロック図である。複数のラップトップ、複数のデスクトップ、複数のハンドヘルド型PC、複数のパーソナルデジタルアシスタント、複数のエンジニアリングワークステーション、複数のサーバ、複数のネットワークデバイス、複数のネットワークハブ、複数のスイッチ、複数の組込みプロセッサ、複数のデジタルシグナルプロセッサ(DSP)、複数のグラフィクスデバイス、複数のビデオゲームデバイス、複数のセットトップボックス、複数のマイクロコントローラ、複数の携帯電話、複数のポータブルメディアプレイヤ、複数のハンドヘルドデバイス及び様々な他の複数の電子デバイスに対して、当技術分野で公知の他の複数のシステム設計及び複数の構成も、適している。概して、プロセッサ及び/または他の実行ロジックを組み込み可能な多様な複数のシステムまたは複数の電子デバイスは、本明細書に開示されるように、概して、適している。
ここで図16を参照すると、本発明の一実施形態に係るシステム2800のブロック図が示される。システム2800は、コントローラハブ2820に結合される1つまたは複数のプロセッサ2810、2815を含んでもよい。一実施形態では、コントローラハブ2820は、グラフィクスメモリコントローラハブ(GMCH)2890及び入出力ハブ(IOH)2850(複数の別のチップ上にあってもよい)を含み、GMCH2890は、メモリ2840及びコプロセッサ2845が結合されるメモリ及び複数のグラフィクスコントローラを含み、IOH2850は、複数の入出力(I/O)デバイス2860をGMCH2890に結合する。代替的に、メモリ及び複数のグラフィクスコントローラの一方又は両方は、(本明細書で説明されたように)プロセッサ内で集積され、メモリ2840及びコプロセッサ2845は、プロセッサ2810及びIOH2850と共に単一のチップにあるコントローラハブ2820と、直接的に結合される。
追加のプロセッサ2815の任意的な性質が、図16において複数の破線で示される。各プロセッサ2810、2815は、本明細書で説明される複数の処理コアのうちの1つまたは複数を含んでもよく、プロセッサ2700のいくつかのバージョンであってもよい。
メモリ2840は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、位相変化メモリ(PCM)または2つの組み合わせであってもよい。少なくとも1つの実施形態では、コントローラハブ2820は、フロントサイドバス(FSB)のようなマルチドロップバス、QuickPath相互接続(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エクスプレスバスまたは他の第3世代I/O相互接続バスのようなバスであってもよいが、本発明の範囲はこのように限定されるものではない。
図17に示されるように、様々な複数のI/Oデバイス2914は、第1のバス2916を第2のバス2920に結合するバスブリッジ2918と共に、第1のバス2916に結合されてもよい。一実施形態では、複数のコプロセッサ、複数のハイスループットMICプロセッサ、(例えば、複数のグラフィクスアクセラレータまたは複数のデジタルシグナル処理(DSP)ユニットのような)GPGPUの複数のアクセラレータ、複数のフィールドプログラマブルゲートアレイまたは任意の他のプロセッサのような1つまたは複数の追加のプロセッサ2915は、第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)、複数のスタティックランダムアクセスメモリ(SRAM)のような複数のランダムアクセスメモリ(RAM)などの複数の半導体デバイス、複数の消去可能プログラマブルROM(EPROM)、複数のフラッシュメモリ、複数の電気的消去可能プログラマブルROM(EEPROM)、位相変化メモリ(PCM)、複数の磁気または光カード、もしくは電気的な複数の命令を記憶するために適した任意の他のタイプの媒体を含む、機械またはデバイスによって製造または形成された複数の物品の非一時的な有形の複数の構成を含んでもよい。
従って、本発明の複数の実施形態は、複数の命令を含み、または本明細書で説明される複数の構造、複数の回路、複数の装置、複数のプロセッサ及び/またはシステムの複数の機能を定義するハードウェア記述言語(HDL)などの設計データを含む、非一時的な有形の機械可読媒体をさらに含む。このような複数の実施形態は、プログラム製品とも称されてもよい。
場合によっては、命令変換部は、ソース命令セットからターゲット命令セットへ命令を変換するために用いられてもよい。例えば、命令変換部は、命令をコアによって処理されるべき1つまたは複数の他の複数の命令に、(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)変換、モーフィング、エミュレートまたは他の方法で変換してもよい。命令変換部は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせのかたちで実装されてもよい。命令変換部は、オンプロセッサ、オフプロセッサ、または部分的にオンかつ部分的にオフプロセッサであってもよい。
図20は、本発明の複数の実施形態に係るソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令変換器の使用を対比させるブロック図である。示される実施形態では、命令変換部はソフトウェア命令変換器であるが、代替的には、命令変換部は、ソフトウェア、ファームウェア、ハードウェアまたは様々なこれらの複数の組み合わせのかたちで実装されてもよい。図20は、高水準言語3202のプログラムが、少なくとも1つのx86命令セットコア3216を有するプロセッサによってネイティブで実行され得るx86バイナリコード3206を生成するために、x86コンパイラ3204を用いてコンパイルされてもよいことを示す。少なくとも1つのx86命令セットコア3216を有するプロセッサは、少なくとも1つのx86命令セットコアを有するインテル社製プロセッサと実質的に同じ結果を達成するために、(1)インテルx86命令セットコアの命令セットの大部分または(2)複数のオブジェクトコードバージョン複数のアプリケーションまたは少なくとも1つのx86命令セットコアを有するインテル社製プロセッサ上で実行することを目的とする他のソフトウェアを、互換性を有するように実行または他の方法で処理することにより、少なくとも1つのx86命令セットコアを有するインテル社製プロセッサと実質的に同じ複数の機能を実行することができる任意のプロセッサを表す。x86コンパイラ3204は、追加のリンケージ処理の有無に関わらず、少なくとも1つのx86命令セットコア3216を有するプロセッサ上で実行されることができるx86バイナリコード3206(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図20は、少なくとも1つのx86命令セットコア3214を有さないプロセッサ(例えば、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セットを実行する、及び/またはカリフォルニア州サニーベールのARMホールディングスのARM命令セットを実行する複数のコアを有するプロセッサ)によってネイティブで実行され得る代替的な命令セットバイナリコード3210を生成するために、代替的な命令セットコンパイラ3208を用いて、高水準言語3202のプログラムがコンパイルされてもよいことを示す。命令変換部3212は、x86バイナリコード3206を、x86命令セットコア3214を有さないプロセッサによってネイティブで実行され得るコードに変換するために用いられる。この変換されたコードは、これが可能な命令変換部の作成は難しいため、代替的な命令セットバイナリコード3210と同じである可能性は低いが、しかしながら、変換されたコードは、一般的なオペレーションを達成し、代替的な命令セットからの複数の命令で構成される。つまり、命令変換部3212は、エミュレート、シミュレーションまたは任意の他の処理により、プロセッサまたはx86命令セットプロセッサまたはコアを有さない他の電子デバイスにx86バイナリコード3206を実行させることができるソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表す。
いくつかの実施形態によれば、プロセッサは、セキュアハッシュアルゴリズム256(SHA256)の複数のメッセージスケジューリングオペレーションの第1の部分を処理するために、第1の命令を受信する第1の実行ユニットであって、第1の命令は、複数のメッセージ入力の第1のセットを記憶する第1のストレージ位置と関連付けられた第1のオペランドと、複数のメッセージ入力の第2のセットを記憶する第2のストレージ位置と関連付けられた第2のオペランドとを有し、中間結果を生成するために、複数のメッセージ入力の第1及び第2のセットに基づいて第1の命令を実行する第1の実行ユニットと、SHA256の複数のメッセージスケジューリングオペレーションの第2の部分を処理するために、第2の命令を受信する第2の実行ユニットであって、第2の命令は、中間結果及び複数のメッセージ入力の第3のセットを記憶する第3のストレージ位置と関連付けられた第3のオペランドと、複数のメッセージ入力の第4のセットを記憶する第4のストレージ位置と関連付けられた第4のオペランドとを有し、SHA256の複数のラウンドオペレーションの次のイタレーションのための複数のメッセージ入力を生成するために、中間結果及び複数のメッセージ入力の第3及び第4のセットに基づいて第2の命令を実行する第2の実行ユニットとを含む。第1、第2、第3及び第4のオペランドは、各々が少なくとも128ビットを有する複数のストレージ位置を指す。中間結果は、第1のオペランドと関連付けられた第1のストレージ位置に記憶される。SHA256の複数のラウンドオペレーションの次のイタレーションのための複数のメッセージ入力は、第3のオペランドと関連付けられた第3のストレージ位置に記憶される。SHA256の複数のメッセージスケジューリングオペレーションの現在のイタレーションiでは、第1のストレージ位置は、複数のメッセージ入力w(i−13)、w(i−14)、w(i−15)及びw(i−16)を記憶し、第2のストレージ位置は、複数のメッセージ入力w(i−9)、w(i−10)、w(i−11)及びw(i−12)を記憶する。SHA256の複数のメッセージスケジューリングオペレーションの現在のイタレーションiでは、中間結果は、w(i−13)+s0(w(i−12))、w(i−14)+s0(w(i−13))、w(i−15)+s0(w(i−14))及びw(i−16)+s0(w(i−15))を表す。SHA256の複数のメッセージスケジューリングオペレーションの現在のイタレーションiでは、第3のストレージ位置は、中間結果と複数のメッセージ入力w(i−5)、w(i−6)及びw(i−7)との組み合わせを記憶する。SHA256の複数のメッセージスケジューリングオペレーションの現在のイタレーションiでは、次のイタレーションのための複数のメッセージ入力は、w(i+3)、w(i+2)、w(i+1)及びw(i)を表す。
前述した詳細な説明のいくつかの部分は、コンピュータメモリ内のデータビットに対する複数のオペレーションの複数のアルゴリズム及び象徴的な複数の表現に関して提示された。これらのアルゴリズムの複数の説明及び複数の表現は、これらの機能の本質を最も効率的に他の当業者に伝達するために、複数のデータ処理分野における当業者によって用いられる複数の態様である。アルゴリズムは、ここで、かつ概して、所望の結果をもたらす、一貫した一連の複数のオペレーションであると考えられる。複数のオペレーションは、複数の物理量の複数の物理的操作を必要とするものである。
しかしながら、これらの全て及び同様の複数の用語は、適切な複数の物理量と関連付けられるべきものであり、これらの複数の量に適用される便利な複数のラベルであるに過ぎないことに留意すべきである。上述した説明とは明らかに異なるように具体的に述べられない限り、説明全体を通じて、以下の特許請求の範囲で示されるような複数の用語を用いる複数の説明は、コンピュータシステム、またはコンピュータシステムの複数のレジスタ及び複数のメモリ内で複数の物理(電子)量として表されるデータを操作し、コンピュータシステムの複数のメモリまたは複数のレジスタもしくはこのような情報を記憶、送信または表示する他の複数のデバイス内で、同様に複数の物理量として表される他のデータに変換する同様の電子計算機の動き及び複数の処理を指すことを理解されたい。
複数の図面に示される複数の技術は、1つまたは複数の電子デバイスに記憶され、実行されるコード及びデータを用いて実装されることができる。このような複数の電子デバイスは、非一時的コンピュータ可読記憶媒体(例えば、複数の磁気ディスク、複数の光ディスク、ランダムアクセスメモリ、リードオンリメモリ、複数のフラッシュメモリデバイス、位相変化メモリ)及び一時的コンピュータ可読送信媒体(例えば、電気、光、音響または複数の搬送波、複数の赤外線信号、複数のデジタルシグナルのような他の形式の複数の伝搬信号)のようなコンピュータ可読媒体を用いて、コード及びデータを記憶し、(内部で、及び/またはネットワーク経由で他の複数の電子デバイスと)通信を行う。
前述した複数の図面に示された複数の処理または複数の方法は、ハードウェア(例えば、回路、専用ロジック等)、ファームウェア、(例えば、非一時的コンピュータ可読媒体上に具現される)ソフトウェアまたは両方の組み合わせを備える処理ロジックにより実行されてもよい。複数の処理または複数の方法は、いくつかのシーケンシャルなオペレーションに関して上述されたが、説明された複数のオペレーションのいくつかは、異なる順序で実行されてもよいことが理解されるべきである。さらに、いくつかのオペレーションは、シーケンシャルにではなく、並列に実行されてもよい。
上述した明細書では、本発明の複数の実施形態が、その具体的な、例示的な複数の実施形態を参照して説明された。これに対し、以下の特許請求の範囲に示される広範な本発明の趣旨および範囲から逸脱することなく、様々な複数の変更がなされ得ることは明らかである。本明細書及び複数の図面は、従って、制限的な意味ではなく、例示的な意味のものとみなされるべきである。