SIMDデータを用いて動作する場合、特に小さいコアに対し、トータルの命令カウントを低減し、電力効率を改善するために有益となるであろう条件がある。特に、浮動小数点データタイプ用の結合した加算−加算オペレーションを実装する命令は、トータルの命令カウントを減らし、ワークロードの電力要求を減らすことを可能にする。
以下の説明では、多数の具体的な詳細が記載される。しかしながら、本発明の複数の実施形態は、これらの具体的な複数の詳細がなくとも実施可能であることを理解されたい。他の複数の例において、周知の複数の回路、構造および技術は、この説明に対する理解を曖昧にしないよう、詳細には示されていない。しかしながら、当業者ならば、このような具体的な詳細なしに本発明は実施され得ることを理解するであろう。当業者がここに含まれる詳細な説明に接すれば、過度の実験をすることなく、適切な機能を実装可能である。
明細書における、「一実施形態」、「実施形態」、「例示的な実施形態」等への言及は、説明される実施形態は特定の特徴、構造、または特性を含み得るが、全ての実施形態が必ずしも、その特定の特徴、構造、または特性を含まなくてもよいことを示す。さらに、このような複数の語句は、必ずしも同じ実施形態を参照するものではない。さらに、特定の特徴、構造または特性がある実施形態に関し記載されている場合、明示の記載のあるなしに関わらず、このような特徴、構造または特性を他の実施形態に関し有効化することは当業者の知識の範囲内に属するものである。
以下の詳細な説明および特許請求の範囲において、「結合され」および「接続され」という用語がそれらの派生語と共に使用されることがある。これらの用語は互いの同義語として意図されていないことを理解されたい。「結合され」は、2または2より多い要素、それらは互いに直接物理的または電気的に接触していてもしていなくてもよいが、これらが互いに連携またはやり取りすることを示すために使用されている。「接続され」は、互いに結合された2または2より多い要素の間の通信の確立を示すために使用されている。
命令セット
命令セット、または命令セットアーキテクチャ(ISA)とは、プログラミングに関連するコンピュータアーキテクチャの一部であり、ネイティブのデータタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込みおよび例外処理並びに外部入出力(I/O)を含んでよい。本明細書において「命令」という用語は概して、マクロ命令、すなわち実行のためにプロセッサ(または命令を、プロセッサによって処理される1または複数の他の命令に変換(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)、モーフィング、エミュレート、またはそれ以外の方法で変換する命令変換器)に提供される命令を指す。これに対し、マイクロ命令またはマイクロオペレーション(マイクロop)とは、プロセッサのデコーダがマクロ命令をデコードした結果である。
ISAは、命令セットを実装するプロセッサの内部設計であるマイクロアーキテクチャとは区別される。異なるマイクロアーキテクチャを持つプロセッサが共通の命令セットを共有可能である。例えば、インテル(登録商標)Pentium(登録商標)4プロセッサ、インテル(登録商標)Core(商標)プロセッサおよびカリフォルニア州サニーベールのアドバンストマイクロデバイス社のプロセッサは、異なる内部設計を有するものの、(より新しいバージョンに追加されたいくつかの拡張機能を持つ)x86命令セットの複数のバージョンとほぼ同一のものを実装する。例えば、ISAの同一レジスタアーキテクチャは、周知の技術を使用して異なるマイクロアーキテクチャにおいて異なる方法で実装されてよく、このようなものとしては専用物理レジスタ、レジスタリネーミングメカニズム(例えば、レジスタエイリアステーブル(RAT)、リオーダバッファ(ROB)およびリタイアメントレジスタファイルの使用、複数のマップおよびレジスタプールの使用)等を使用して動的に割り当てられる1または複数の物理レジスタが含まれる。別途の記載がない限り、本明細書において、レジスタアーキテクチャ、レジスタファイルおよびレジスタという文言は、ソフトウェア/プログラマに可視なものであり、命令がレジスタを指定する態様を指すものとして使用される。特殊性が所望される場合、論理(logilcal)、アーキテクチャ(architectural)、またはソフトウェアビジブルという形容詞がレジスタアーキテクチャ内のレジスタ/ファイルを示すために使用される一方で、特定のマイクロアーキテクチャ(例えば、物理レジスタ、リオーダバッファ、リタイアメントレジスタ、レジスタプール)内のレジスタを指定するために異なる形容詞が使用される。
命令セットは、1または複数の命令フォーマットを含む。特定の命令フォーマットは、とりわけ、実行されるべきオペレーション(オペコード)およびそのオペレーションが実行されるべきオペランドを指定するための様々なフィールド(ビット数、ビット位置)を定義する。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)の定義を通して、さらに細分化されている。例えば、特定の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されてよく(含まれるフィールドは通常、同一順序であるが、少なくともいくつかは、含まれるフィールドの数がより少ないので、異なるビット位置を有する)、および/または、異なって解釈される特定のフィールドを有するように定義されてよい。故に、ISAの各命令は、特定の命令フォーマットを使用して(また、定義される場合には、その命令フォーマットの命令テンプレートのうちの特定の1つにおいて)表現され、オペレーションおよびオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコードと、そのオペコードを指定するためのオペコードフィールドおよびオペランド(ソース1/デスティネーションおよびソース2)を選択するためのオペランドフィールドを含む命令フォーマットとを有する。命令ストリーム内にこのADD命令が出現すると、特定のオペランドを選択するオペランドフィールド内に特定の内容を有することになる。
サイエンティフィックアプリケーション、財務アプリケーション、自動ベクトル化汎用アプリケーション、RMS(Recognition(認識)、mining(マイニング)およびsynthesis(合成))アプリケーション並びにビジュアルおよびマルチメディアアプリケーション(例えば、2D/3Dグラフィックス、画像処理、ビデオ圧縮/圧縮解除、音声認識アルゴリズムおよびオーディオ操作)は、通常、多数のデータ項目上で同一のオペレーションが実行されること(「データ並列処理」と称される)を要求する。単一命令複数データ(SIMD)とは、プロセッサに、複数のデータ項目に対するオペレーションを実行させるタイプの命令を指す。SIMD技術は、レジスタ内のビットを複数の固定サイズのデータ要素に論理的に分割可能なプロセッサに特に好適であり、当該データ要素の各々は別個の値を表わす。例えば、256ビットレジスタ内のビットは、4個の別個の64ビットのパックドデータ要素(クワッドワード(Q)サイズのデータ要素)、8個の別個の32ビットのパックドデータ要素(ダブルワード(D)サイズのデータ要素)、16個の別個の16ビットのパックドデータ要素(ワード)(W)サイズのデータ要素)、または32個の別個の8ビットのデータ要素(バイト(B)サイズのデータ要素)として演算されるべきソースオペランドとして指定されてよい。このタイプのデータは、パックドデータタイプまたはベクトルデータタイプと称され、このデータタイプのオペランドは、パックドデータオペランドまたはベクトルオペランドと称される。換言すると、パックドデータ項目またはベクトルとは、一連のパックドデータ要素を指し、パックドデータオペランドまたはベクトルオペランドは、SIMD命令(パックドデータ命令またはベクトル命令としても知られる)のソースオペランドまたはデスティネーションオペランドである。
例示として、1つのタイプのSIMD命令は、同一サイズで同一数のデータ要素を有し且つ同一データ要素順序であるデスティネーションベクトルオペランド(結果ベクトルオペランドとも称される)を生成するために、2つのソースベクトルオペランド上で縦方向(vertical fashion)に実行されるべき単一のベクトルオペレーションを指定する。ソースベクトルオペランド内のデータ要素はソースデータ要素と称される一方で、デスティネーションベクトルオペランド内のデータ要素はデスティネーションまたは結果データ要素と称される。これらのソースベクトルオペランドは同一サイズであり、同一幅のデータ要素を有し、故に、それらは同一数のデータ要素を含む。2つのソースベクトルオペランド内の同一のビット位置にあるソースデータ要素は、データ要素のペア(対応するデータ要素とも称される。すなわち、各ソースオペランドのデータ要素位置0にあるデータ要素が対応し、各ソースオペランドのデータ要素位置1にあるデータ要素が対応する等)を形成する。そのSIMD命令により指定されるオペレーションは、これらペアのソースデータ要素の各々に対して別個に実行され、一致する数の結果データ要素を生成し、よってソースデータ要素の各ペアは、対応する結果データ要素を有する。オペレーションは縦方向であるため、また、結果ベクトルオペランドは同一サイズであり、同一数のデータ要素を有し、結果データ要素はソースベクトルオペランドと同一のデータ要素順序で格納されるため、結果データ要素は、結果ベクトルオペランドにおけるソースベクトルオペランド内のソースデータ要素の対応するペアと同一ビット位置にある。この例示的なタイプのSIMD命令に加え、様々な他のタイプのSIMD命令(例えば、1つのみのソースベクトルオペランドを有する、または3つ以上のソースベクトルオペランドを有する命令、横方向に演算される命令、異なるサイズ、異なるサイズのデータ要素を有する、および/または異なるデータ要素の順序を有する結果ベクトルオペランドを生成する命令)が存在する。デスティネーションベクトルオペランド(またはデスティネーションオペランド)という用語は命令によって指定されるオペレーションを実行した直接的な結果として定義され、(その命令で指定されるレジスタであれメモリアドレス位置であれ)ある位置での当該デスティネーションオペランドのストレージを含み、その結果、そのデスティネーションオペランドが(別の命令によってその同一の位置を指定することによって)別の命令によるソースオペランドとしてアクセスされ得ることを理解されたい。
x86命令、MMX(商標)命令、ストリーミングSIMD拡張(SSE)命令、SSE2命令、SSE3命令、SSE4.1命令およびSSE4.2命令を含む命令セットを有するIntel(登録商標)Core(商標)プロセッサによって採用されるようなSIMD技術がアプリケーション性能の大きな改善を実現した。アドバンストベクトル拡張(AVX)(AVX1およびAVX2)と称され、ベクトル拡張(VEX)コーディングスキームを使用する追加的なSIMD拡張のセットがリリースおよび/または公開されている(例えば、2011年10月のインテル(登録商標)64およびIA−32アーキテクチャソフトウェアデベロッパーズマニュアル並びに2011年6月のインテル(登録商標)アドバンストベクトル拡張プログラミングリファレンスを参照)。
図1Aは、本発明の実施形態に係る例示的なインオーダフェッチ、デコード、リタイアパイプライン、および例示的なレジスタリネーム、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図1Bは、本発明の実施形態に係るインオーダフェッチ、デコード、リタイアコアの例示的な実施形態、およびプロセッサ内に含まれる例示的なレジスタリネーム、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図1Aおよび図1Bにおける実線のボックスは、パイプラインおよびコアのインオーダ部分を示し、一方、破線のボックスの任意の追加部は、レジスタリネーム、アウトオブオーダ発行/実行パイプライン、およびコアを示す。
図1Aにおいて、プロセッサパイプライン100は、フェッチステージ102、レングスデコードステージ104、デコードステージ106、割り当てステージ108、リネーミングステージ110、スケジューリング(ディスパッチまたは発行としても知られる)ステージ112、レジスタ読み出し/メモリ読み出しステージ114、実行ステージ116、ライトバック/メモリ書き込みステージ118、例外ハンドリングステージ122、およびコミットステージ124を含む。図1Bは、実行エンジンユニット150に結合されるフロントエンドユニット130を含むプロセッサコア190を示し、両方がメモリユニット170に結合される。コア190は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであってもよい。さらなる別のオプションとして、コア190は、例えば、ネットワークコアまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィック処理ユニット(GPGPU)コア、グラフィックコア等のような専用コアであってよい。
フロントエンドユニット130は、命令キャッシュユニット134に結合される分岐予測ユニット132を含む。命令キャッシュユニット134は、命令変換ルックアサイドバッファ(TLB)136に結合される。TLB136は、命令フェッチユニット138に結合される。命令フェッチユニット138は、デコードユニット140に結合される。デコードユニット140(すなわちデコーダ)は命令をデコードしてよく、また、1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令または他の制御信号を出力として生成してよく、これらは元の命令からデコードされ、あるいは元の命令を反映し、あるいは元の命令から派生する。デコードユニット140は、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例としては、限定はされないがルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等が含まれる。一実施形態において、コア190は、複数の特定のマクロ命令に対するマイクロコードを(例えば、デコードユニット140またはフロントエンドユニット130内に)格納する、マイクロコードROMまたは他の媒体を含む。デコードユニット140は、実行エンジンユニット150内のリネーム/アロケータユニット152に結合される。
実行エンジンユニット150は、リタイアメントユニット154および1または複数のスケジューラユニット156のセットに結合されたリネーム/割り当てユニット152を含む。スケジューラユニット156は、複数のリザベーションステーション、中央命令ウィンドウ等を含む、任意の数の異なるスケジューラを表す。スケジューラユニット156は、物理レジスタファイルユニット158に結合される。複数の物理レジスタファイルユニット158のそれぞれは、1または複数の物理レジスタファイルを表し、それらのうちの異なるものがスカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)等のような、1または複数の異なるデータタイプを記憶する。一実施形態において、物理レジスタファイルユニット158は、複数のベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャのベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供してよい。物理レジスタファイルユニット158は、リタイアメントユニット154により重ねられて、(例えば、リオーダバッファおよびリタイアメントレジスタファイルを用いて、将来のファイル、ヒストリバッファおよびリタイアメントレジスタファイルを用いて、レジスタマップおよび複数のレジスタのプールを用いて等により)レジスタリネームおよびアウトオブオーダ実行が実装され得る様々な態様を示す。
リタイアメントユニット154および物理レジスタファイルユニット158は、実行クラスタ160に結合される。実行クラスタ160は、1または複数の実行ユニット162のセット、および、1または複数のメモリアクセスユニット164のセットを含む。複数の実行ユニット162は、様々なオペレーション(例えば、シフト、加算、減算、乗算)を、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行し得る。いくつかの実施形態は、特定の機能または機能のセットに専用の複数の実行ユニットを含んでよく、一方で、他の実施形態は、1つのみの実行ユニットまたは、それらすべてが全機能を実行する複数の実行ユニットを含んでよい。スケジューラユニット156、物理レジスタファイルユニット158、および実行クラスタ160は、場合によっては複数であるものとして示される。これは、複数の特定の実施形態が特定の複数のタイプのデータ/オペレーションのための複数の別個のパイプラインを作成するからである(例えば、各々が自身のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプライン。別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット164を有する複数の特定の実施形態が実装される)。別個のパイプラインが使用される場合、これらのパイプラインのうちの1または複数はアウトオブオーダ発行/実行であってよく、残りはインオーダであってよいことも理解されたい。
複数のメモリアクセスユニット164のセットは、メモリユニット170に結合される。メモリユニット170は、データTLBユニット172を含む。データTLBユニット172は、データキャッシュユニット174に結合される。データキャッシュユニット174は、レベル2(L2)キャッシュユニット176に結合される。例示的な一実施形態では、複数のメモリアクセスユニット164は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、それぞれがメモリユニット170内のデータTLBユニット172に結合される。命令キャッシュユニット134は、メモリユニット170におけるレベル2(L2)キャッシュユニット176に更に結合される。L2キャッシュユニット176は、1または複数の他のレベルのキャッシュに結合され、最終的にメインメモリに結合される。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン100を以下のとおり実装してもよい。1)命令フェッチ138が、フェッチステージ102および長さ復号ステージ104を実行し、2)復号ユニット140が、復号ステージ106を実行し、3)リネーム/アロケータユニット152が、配分ステージ108およびリネームステージ110を実行し、4)スケジューラユニット156が、スケジューリングステージ112を実行し、5)物理レジスタファイルユニット158およびメモリユニット170が、レジスタ読み出し/メモリ読み出しステージ114を実行し、実行クラスタ160が、実行ステージ116を実行し、6)メモリユニット170および物理レジスタファイルユニット158が、ライトバック/メモリ書き込みステージ118を実行し、7)様々な複数のユニットが、例外処理ステージ122に関与してもよく、かつ8)リタイアメントユニット154および物理レジスタファイルユニット158が、コミットステージ124を実行する。コア190は、ここに記載される命令を含め、1または複数の命令セット(例えば、(より新しい複数のバージョンに追加された幾つかの拡張を有する)x86命令セット、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスの(NEONのようなオプション追加の複数の拡張を有する)ARM命令セット)をサポートしてよい。一実施形態では、コア190は、パックドデータ命令セットの拡張(例えば、AVX1、AVX2、および/または後述する汎用ベクトル向け命令フォーマット(U=0および/またはU=1)の幾つかの形式)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションにより用いられる複数のオペレーションをパックドデータを用いて実行されるようにする。
コアは、マルチスレッディング(オペレーションまたはスレッドの2または2より多い並列セットの実行)をサポートしてよく、様々な方法でマルチスレッディングを実行してよいことを理解されたい。そのようなものとしては、時分割マルチスレッディング、同時マルチスレッディング(この場合、単一の物理コアは、物理コアが同時にマルチスレッディングを行っているスレッドごとに論理コアを提供する)、またはこれらの組み合わせ(例えば、時分割フェッチおよび時分割デコード並びにインテル(登録商標)ハイパースレッディング技術等のそれら以降の同時マルチスレッディング)が含まれる。
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャで使用されてよいことを理解されたい。プロセッサの図示される実施形態は、別個の命令および複数のデータキャッシュユニット134/174、ならびに共有L2キャッシュユニット176も含むが、複数の代替的な実施形態は、例えば、レベル1(L1)内部キャッシュまたは複数レベルの内部キャッシュ等、命令およびデータの両方について1つの内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。代替的に、すべてのキャッシュは、コアおよび/またはプロセッサの外部に存在してよい。図2は、本発明の実施形態に係る、1より多いコアを有してよく、統合メモリコントローラを有してよく、また統合グラフィクスを有してよいプロセッサ200のブロック図である。図2の実線で示されたボックスは、単一のコア202A、システムエージェント210、1または複数のバスコントローラユニット216のセットを有するプロセッサ200を示し、破線で示されたボックスの任意の追加部は、複数のコア202A〜202N、システムエージェントユニット210内にある1または複数の統合メモリコントローラユニット214のセット、および専用ロジック208を有する代替プロセッサ200を示す。
従って、プロセッサ200の異なる実装は、1)統合グラフィクスおよび/またはサイエンティフィック(スループット)ロジックである専用ロジック208を有するCPU(1または複数のコアを含んでよい)、および1または複数の汎用コアであるコア202A−N(例えば、汎用インオーダコア、汎用アウトオブオーダコア、これら2つの組み合わせ)、2)グラフィックおよび/またはサイエンティフィック(スループット)を主に意図する多数の専用コアであるコア202A−Nを有するコプロセッサ、および3)多数の汎用インオーダコアであるコア202A−Nを有するコプロセッサを含んでよい。従って、プロセッサ200は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(汎用グラフィック処理ユニット)、高スループット多集積コア(MIC)コプロセッサ(30またはそれより多いコアを含む)、組み込みプロセッサなどのような汎用プロセッサ、コプロセッサ、または専用プロセッサであってよい。プロセッサは、1または複数のチップ上に実装されてよい。プロセッサ200は、例えば、BiCMOS、CMOSまたはNMOS等の複数のプロセス技術のうちの任意のものを使用する1または複数の基板の一部であってよく、および/または当該基板上に実装されてよい。
メモリ階層は、複数の統合メモリコントローラユニット214のセットに結合される複数のコア、セットまたは1または複数の共有キャッシュユニット206、および外部メモリ(不図示)内に1または複数のレベルのキャッシュを含む。共有キャッシュユニットのセット206は、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュ等の1または複数の中間レベルキャッシュ、ラストレベルキャッシュ(LLC)および/またはそれらの組み合わせを含んでよい。一実施形態において、リングベースの相互接続ユニット212は、統合グラフィックスロジック208、複数の共有キャッシュユニット206のセット、およびシステムエージェントユニット210/統合メモリコントローラユニット214を相互接続し、複数の代替的な実施形態は、このような複数のユニットを相互接続する、任意の数の周知技術を使用し得る。一実施形態において、1または複数のキャッシュユニット206と、コア202A〜Nとの間でコヒーレンシが維持される。
いくつかの実施形態において、コア202A〜Nのうちの1または複数は、マルチスレッディングが可能である。システムエージェント210は、コア202A〜Nを調整および操作するそれらのコンポーネントを含む。システムエージェントユニット210は、例えば、電力制御ユニット(PCU)および表示ユニットを含んでよい。PCUは、複数のコア202A〜Nおよび統合グラフィックスロジック208の電力状態を調整するのに必要とされるロジックおよび複数のコンポーネントであってもよく、またはこれらを含んでもよい。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。複数のコア202A−Nは、アーキテクチャ命令セットの面で同種または異種であってよい。すなわち、コア202A−Nのうちの2またはそれより多いコアは同じ命令セットを実行できてよく、その他はその命令セットまたは異なる命令セットのサブセットのみを実行できてよい。一実施形態では、複数のコア202A−Nは、異種であり、後述する複数の「小さい」コアおよび複数の「大きい」コアの両方を含む。
図3から図6は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイスおよび様々な他の電子デバイスのための当該技術分野で既知の他のシステム設計および構成も好適である。一般的に、本明細書に開示のプロセッサおよび/または他の実行ロジックを組み込み可能な非常に多種多様なシステムまたは電子デバイスが概して好適である。
ここで図3を参照すると、本発明の一実施形態に係るシステム300のブロック図が示される。システム300は、1または複数のプロセッサ310、315を含んでよく、1または複数のプロセッサ310、315は、コントローラハブ320に結合される。一実施形態において、コントローラハブ320は、グラフィックスメモリコントローラハブ(GMCH)390および入力/出力ハブ(IOH)350(複数の別個のチップ上にあり得る)を含む。GMCH390は、メモリコントローラおよびグラフィックスコントローラを含み、これらにメモリ340およびコプロセッサ345が結合される。IOH350は、入力/出力(I/O)デバイス360をGMCH390に結合する。代替的に、メモリコントローラおよびグラフィクスコントローラのうち一方または両方は、(本明細書に説明されるように)プロセッサ内に統合され、メモリ340およびコプロセッサ345は、プロセッサ310と、IOH350を有する単一チップ内のコントローラハブ320とに直接結合される。
複数の追加のプロセッサ315の任意の特性は、破線を用いて図3内に示される。各プロセッサ310、315は、本明細書で説明される複数の処理コアのうちの1または複数を含んでよく、プロセッサ200の何らかのバージョンであってよい。メモリ340は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはこれら2つの組み合わせであってよい。少なくとも1つの実施形態については、コントローラハブ320は、フロントサイドバス(FSB)等のマルチドロップバス、QuickPath相互接続(QPI)等のポイントツーポイントインターフェース、または類似の接続395を介してプロセッサ310、315と通信する。一実施形態では、コプロセッサ345は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組み込みプロセッサなどのような専用プロセッサである。一実施形態において、コントローラハブ320は、統合グラフィックスアクセラレータを含み得る。物理リソース310と315との間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、電力消費特性などを含む広範な価値基準に関して、様々な差異が存在し得る。
一実施形態では、プロセッサ310は、一般タイプのデータ処理オペレーションを制御する複数の命令を実行する。この命令内にコプロセッサ命令が組み込まれてもよい。プロセッサ310は、取り付けられたコプロセッサ345により実行されるべきタイプのものとして、これらのコプロセッサ命令を認識する。従って、プロセッサ310は、コプロセッサバスまたは他の相互接続上で、これらのコプロセッサ命令(または複数のコプロセッサ命令を表す複数の制御信号)をコプロセッサ345に発行する。コプロセッサ345は、受信されたコプロセッサ命令を承認して実行する。
ここで図4を参照すると、本発明の実施形態に係る、第1のより具体的な例示的なシステム400のブロック図が示される。図4に示されるように、マルチプロセッサシステム400は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続450を介して結合される第1のプロセッサ470および第2のプロセッサ480を含む。プロセッサ470および480の各々は、いくつかのバージョンのプロセッサ200であり得る。本発明の一実施形態において、プロセッサ470および480は各々プロセッサ310および315であり、コプロセッサ438はコプロセッサ345である。別の実施形態では、プロセッサ470および480は、それぞれ、プロセッサ310およびコプロセッサ345である。
プロセッサ470および480が示されており、それぞれ統合メモリコントローラ(IMC)ユニット472および482を含んでいる。また、プロセッサ470は、その複数のバスコントローラユニットの一部として、ポイントツーポイント(P―P)インターフェース476および478を含む。同様に、第2のプロセッサ480は、P―Pインターフェース486および488を含む。プロセッサ470、480は、複数のP―Pインターフェース回路478、488を用いて、ポイントツーポイント(P―P)インターフェース450を介して情報を交換し得る。図4に示されるように、IMC472および482は、複数のプロセッサを各メモリ、すなわち、メモリ432およびメモリ434に結合させるが、メモリ432およびメモリ434は、各プロセッサにローカルに取り付けられたメインメモリの一部であり得る。プロセッサ470、480は、それぞれ、ポイントツーポイントインターフェース回路476、494、486、498を用いて、個々のP−Pインターフェース452、454を介してチップセット490と情報を交換してよい。チップセット490は、任意選択で、高性能インターフェース439を介してコプロセッサ438と情報を交換してもよい。一実施形態では、コプロセッサ438は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組み込みプロセッサなどのような専用プロセッサである。
共有キャッシュ(図示せず)は、どちらかのプロセッサ内または双方のプロセッサの外側に含まれるが、P―P相互接続を介して複数のプロセッサとなおも接続され得、従って、プロセッサが低電力モードに置かれると、どちらかまたは双方のプロセッサのローカルキャッシュ情報は、共有キャッシュ内に格納され得る。チップセット490は、インターフェース496を介して、第1のバス416に結合されてよい。一実施形態において、第1のバス416は、ペリフェラル・コンポーネント・インターコネクト(PCI)バス、あるいはPCIエクスプレスバスまたは別の第3世代I/O相互接続バスなどのバスであってよいが、本発明の範囲はそのように限定されない。
図4に示すように、様々なI/Oデバイス414は、第1のバス416を第2のバス420に接続するバスブリッジ418とともに、第1のバス416に結合されてよい。一実施形態では、コプロセッサ、ハイスループットMICプロセッサ、GPGPUのアクセラレータ(例えば、グラフィクスアクセラレータもしくはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイまたは任意の他のプロセッサなどの1または複数の追加のプロセッサ415が、第1のバス416に結合される。一実施形態において、第2のバス420はローピンカウント(LPC)バスであってよい。一実施形態において、例えばキーボードおよび/またはマウス422、通信デバイス427、ならびに複数の命令/コードおよびデータ430を含み得るディスクドライブもしくは他の大容量ストレージデバイス等のストレージユニット428を含む様々なデバイスが第2のバス420に結合され得る。更に、オーディオI/O424は、第2のバス420に結合されてもよい。他のアーキテクチャも可能であることに留意されたい。例えば、図4のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバスアーキテクチャまたは他のこのようなアーキテクチャを実装してよい。
ここで図5を参照すると、本発明の実施形態に係る第2のより具体的な例示的なシステム500のブロック図が示される。図4および図5における複数の同一の要素は、複数の同一の参照番号を有し、図4の複数の特定の態様は、図5の他の複数の態様を不明瞭にするのを避けるべく、図5から省略されている。図5は、プロセッサ470、480が統合メモリおよびI/O制御ロジック(「CL」)472および482を各々含み得ることを示す。従って、CL472、482は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。図5は、メモリ432、434のみが制御ロジック472、482に結合されるのではなく、複数のI/Oデバイス514もCL472、482に結合されることを示す。レガシI/Oデバイス515がチップセット490に結合される。
ここで図6を参照すると、本発明の実施形態に係るSoC600のブロック図が示される。図2における複数の類似の要素は、同一の参照番号を有する。また、破線ボックスは、より高度なSoC上での任意選択の機能である。図6では、相互接続ユニット602は、1または複数のコア202A−Nのセットおよび共有キャッシュユニット206を含むアプリケーションプロセッサ610と、システムエージェントユニット210と、バスコントローラユニット216と、集積メモリコントローラユニット214、統合グラフィックロジック、画像プロセッサ、オーディオプロセッサおよびビデオプロセッサを含み得るセットまたは1または複数のコプロセッサ620と、スタティックランダムアクセスメモリ(SRAM)ユニット630と、ダイレクトメモリアクセス(DMA)ユニット632と、1または複数の外部ディスプレイに結合するためのディスプレイユニット640とに結合される。一実施形態において、コプロセッサ620は、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサ等のような特定用途向けプロセッサを含む。
本明細書に開示のメカニズムに係る実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはこのような実装アプローチの組み合わせで実装されてよい。本発明の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリおよび/またはストレージ要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備える複数のプログラマブルシステム上で実行する複数のコンピュータプログラムまたはプログラムコードとして実装されてよい。図4に示されるコード430のようなプログラムコードは、ここに記載の複数の機能を実行し、出力情報を生成する複数の命令を入力するために適用されてよい。出力情報は、1または複数の出力デバイスに既知の態様で適用されてよい。この適用を目的として、処理システムは、たとえばデジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを備える任意のシステムを含む。プログラムコードは、処理システムと通信するために、ハイレベルの手順型プログラミング言語またはオブジェクト指向型プログラミング言語で実装されてよい。必要であれば、プログラムコードはまた、アセンブリ言語または機械言語で実装されてもよい。実際、本明細書に記載のメカニズムは、いずれの特定のプログラミング言語にも範囲限定されない。いずれの場合においても、言語はコンパイル型言語またはインタープリタ型言語であってよい。
少なくとも1つの実施形態に係る1または複数の態様は、機械可読媒体上に格納された、プロセッサ内で様々なロジックを表わす典型的命令によって実装されてよく、当該命令は機械による読み取り時に、機械に対し、本明細書に記載の技術を実行するためのロジックを生成させる。「IPコア」として公知のこのような表現は、有形の機械可読媒体にストアされてよく、様々な顧客または製造施設に供給され、実際にロジックまたはプロセッサを作り出す製造機械にロードされてよい。このような機械可読記録媒体としては、限定はされないが、機械またはデバイスによって製造または形成される非一時的な有形の構成の物品が含まれてよく、それらとしては、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD‐ROM)、コンパクトディスクリライタブル(CD‐RW)、および光磁気ディスクを含む任意の他のタイプのディスク、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)等の半導体デバイス、磁気カード若しくは光カードといった記録媒体または電子的命令を格納するのに好適な任意の他のタイプの媒体が含まれる。
従って、また、本発明の実施形態は、命令を含む、または本明細書に記載の構造、回路、装置、プロセッサおよび/またはシステム機能を定義するハードウェア記述言語(HDL)等の設計データを含む非一時的な有形の機械可読媒体を含む。このような実施形態はプログラム製品と呼んでもよい。いくつかの場合において、命令変換器を使用し、命令をソース命令セットからターゲット命令セットへ変換してよい。例えば、命令変換器は、ある命令を、コアによって処理されるべき1または複数の他の命令へと、トランスレート(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)、モーフィング、エミュレート、またはそれら以外の方法による変換を行ってよい。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装されてよい。命令変換器は、プロセッサ内、プロセッサ外、または部分的にプロセッサ内または部分的にプロセッサ外に存在してよい。
図7は、本発明の実施形態に係る、ソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令変換器の使用を対比するブロック図である。図示された実施形態において、命令変換器はソフトウェア命令変換器であるものの、代替的に、命令変換器はソフトウェア、ファームウェア、ハードウェアまたはこれらの様々な組み合わせで実装されてもよい。図7は、少なくとも1つのx86命令セットコアを用いるプロセッサ716によりネイティブに実行され得るx86バイナリコード706を生成するべくx86コンパイラ704を用いてコンパイルされ得るハイレベル言語702のプログラムを示す。少なくとも1つのx86命令セットコアを用いるプロセッサ716は、少なくとも1つのx86命令セットコアを用いるインテル(登録商標)プロセッサと実質的に同一の結果を実現するべく、(1)インテル(登録商標)x86命令セットコアの命令セットの実質的部分、または(2)少なくとも1つのx86命令セットコアを用いるインテル(登録商標)プロセッサ上で起動することを目的とする、複数のオブジェクトコードバージョンの複数のアプリケーションまたは他のソフトウェアを互換的に実行または処理することにより、少なくとも1つのx86命令セットコアを用いるインテル(登録商標)プロセッサと実質的に同一の複数の機能を実行し得るいずれのプロセッサも表す。x86コンパイラ704は、x86バイナリコード706(例えばオブジェクトコード)を生成するように動作可能なコンパイラを表わし、当該x86バイナリコード706は、追加のリンク処理と共に、または追加のリンク処理なしに、少なくとも1つのx86命令セットコアを持つプロセッサ716上で実行可能である。
同様に、図7は、少なくとも1つのx86命令セットコアを用いないプロセッサ714(例えば、カルフォルニア州サニーベールのMIPS TechnologyのMIPS命令セットを実行し、および/またはカリフォルニア州サニーベールのARM HoldingのARM命令セットを実行する複数のコアを用いるプロセッサ)によりネイティブに実行され得る代替的な命令セットバイナリコード710を生成するべく代替的な命令セットのコンパイラ708を用いてコンパイルされ得るハイレベル言語702のプログラムを示す。命令変換器712は、x86バイナリコード706を、x86命令セットコア714を用いないプロセッサによりネイティブに実行され得るコードに変換するべく使用される。この変換済みコードは、代替的な命令セットバイナリコード710と同一である可能性が高くない。これを行うことができる命令変換器は、作製するのが困難なためである。しかし、変換済みコードは、汎用オペレーションを遂行し、代替的な命令セットの複数の命令からなるであろう。故に、命令変換器712は、ソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表わし、それらは、エミュレーション、シミュレーションまたは任意の他の処理を介して、x86命令セットプロセッサまたはコアを有さないプロセッサまたは他の電子デバイスが、x86バイナリコード706を実行できるようにする。
[例示的な命令フォーマット]
ここに記載の命令の複数の実施形態は、異なるフォーマットで実施されてよい。さらに、例示的なシステム、アーキテクチャ、およびパイプラインが以下に詳述される。命令の複数の実施形態は、このような複数のシステム、複数のアーキテクチャおよび複数のパイプライン上で実行されてもよいが、これらの詳細に限定されるものではない。ベクトル向け命令フォーマットは、(例えば、特定の複数のフィールド固有の複数のベクトルオペレーションが存在する)複数のベクトル命令に適した命令フォーマットである。ベクトルオペレーションおよびスカラオペレーションの両方がベクトル向け命令フォーマットを通じてサポートされる実施形態が説明されているが、代替的な実施形態はベクトル向け命令フォーマットを通じてベクトルオペレーションのみを用いる。
図8Aおよび図8Bは、本発明の実施形態に係る、汎用ベクトル向け命令フォーマットおよびその命令テンプレートを示すブロック図である。図8Aは、本発明の実施形態に係る汎用ベクトル向け命令フォーマットおよびそのクラスA命令テンプレートを示すブロック図であり、これに対し、図8Bは、本発明の実施形態に係る汎用ベクトル向け命令フォーマットおよびそのクラスB命令テンプレートを示すブロック図である。詳細には、汎用ベクトル向け命令フォーマット800には、それぞれが非メモリアクセス805命令テンプレートおよびメモリアクセス820命令テンプレートを含む、クラスAおよびクラスB命令テンプレートが定義されている。
ベクトル向け命令フォーマットとの関係での汎用という用語は、いかなる具体的な命令セットにも縛られない命令フォーマットを指している。本発明の実施形態が説明されるが、ここでベクトル向け命令フォーマットは以下のものをサポートする。つまり、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バイトベクトルオペランド)をサポートしてよい。
図8AでクラスA命令テンプレートは以下を含む。1)非メモリアクセス805命令テンプレート内では、非メモリアクセス完全ラウンド制御タイプオペレーション(演算)810命令テンプレートおよび非メモリアクセスデータ変換タイプオペレーション815命令テンプレートが存在するように示され、2)メモリアクセス820命令テンプレート内では、メモリアクセス、一時的825命令テンプレートおよびメモリアクセス、非一時的830命令テンプレートが存在するように示される。図8BでクラスBの命令テンプレートは、以下を含む。1)非メモリアクセス805命令テンプレート内では、非メモリアクセス書き込みマスク制御、パーシャルラウンドタイプ演算812命令テンプレートと、非メモリアクセス書き込みマスク制御、VSIZEタイプ演算817命令テンプレートが示され、2)メモリアクセス820命令テンプレート内では、メモリアクセス、書き込みマスク制御827命令テンプレートが示される。汎用ベクトル向け命令フォーマット800は、以下に挙げられるフィールドを図8Aおよび図8B中に図示される順序で含む。
フォーマットフィールド840-このフィールド内の特定の値(命令フォーマット識別子の値)は、ベクトル向け命令フォーマットを一意に識別し、故に命令ストリーム内のベクトル向け命令フォーマットの命令の出現を一意に識別する。よって、このフィールドは、汎用ベクトル向け命令フォーマットのみを有する命令セットには不要であるという意味において任意的である。
ベースオペレーションフィールド842−その内容は、異なるベースオペレーションを区別する。
レジスタインデックスフィールド844−その内容は、直接的にまたはアドレス生成を介して、ソースオペランドおよびデスティネーションオペランドの位置を指定する。それらはレジスタ内またはメモリ内である。これらは、PxQ(例えば、32×512、16×128、32×1024、64×1024)個のレジスタファイルからN個のレジスタを選択するための十分なビット数を含む。一実施形態において、Nは最大3つのソースレジスタおよび1つのデスティネーションレジスタであってよく、一方で、代替的な実施形態は、それより多いまたは少ないソースレジスタおよびデスティネーションレジスタをサポートしてよい(例えば、最大2つのソースをサポートしてよく、この場合、これらのソースのうちの1つがデスティネーションとしても動作する。最大3つのソースをサポートしてよく、この場合、これらのソースのうちの1つがデスティネーションとしても動作する。最大2つのソースおよび1つのデスティネーションをサポートしてよい)。
修飾子フィールド846−その内容は、汎用ベクトル命令フォーマットの、メモリアクセスを指定する命令の出現を、メモリアクセスを指定しないものから区別する。すなわち、非メモリアクセス805命令テンプレートおよびメモリアクセス820命令テンプレート間を区別する。メモリアクセスオペレーションはメモリ階層に対し、読み取りおよび/または書き込みを行う(場合によっては、レジスタ内の値を使用してソースアドレスおよび/またはデスティネーションアドレスを指定する)が、非メモリアクセスオペレーションはそれを行わない(例えば、ソースおよびデスティネーションはレジスタである)。一実施形態において、このフィールドはまたメモリアドレス計算を実行するための3つの異なる方法の中で選択をする一方で、代替的な実施形態は、メモリアドレス計算を実行するためのより多い、より少ないまたは異なる方法をサポートしてよい。
拡張(Augmentation)オペレーションフィールド850−その内容は、ベースオペレーションに加え、様々な異なるオペレーションのうちどれが実行されるべきかを区別する。このフィールドは、コンテキストに特有のものである。本発明の一実施形態において、このフィールドは、クラスフィールド868、アルファフィールド852およびベータフィールド854に分割される。拡張オペレーションフィールド850は、2、3または4の命令ではなく、単一の命令において共通のオペレーショングループが実行されることを可能にする。
スケールフィールド860−その内容は、メモリアドレス生成のために(例えば、2scale*インデックス+ベースを使用するアドレス生成のために)インデックスフィールドの内容のスケーリングを可能にする。
変位フィールド862A−その内容は、(例えば、2scale*インデックス+ベース+変位を使用するアドレス生成のために)メモリアドレス生成の一部として使用される。
変位係数フィールド862B(変位係数フィールド862B上に直接、変位フィールド862Aが並置されていることで、一方または他方が使用されることを示すことに留意されたい)−その内容は、アドレス生成の一部として使用される。その内容は、メモリアクセス(N)のサイズによってスケーリングされるべき変位係数を指定する。ここでNは、(例えば、2scale*インデックス+ベース+スケールされた変位を使用するアドレス生成のための)メモリアクセスにおけるバイト数である。冗長下位ビットは無視され、従って、有効アドレスの計算に用いられる最終的な変位を生成するために、変位係数フィールドのコンテンツにはメモリオペランドの合計サイズ(N)が乗算される。Nの値は、(本明細書に記載の)フルオペコードフィールド874およびデータ操作フィールド854Cに基づいて、ランタイムでプロセッサハードウェアによって判断される。変位フィールド862Aおよび変位係数フィールド862Bは、それらが非メモリアクセス805命令テンプレートには使用されない、および/または、異なる実施形態がそれら2つのうちの一方のみを実装してよい、またはいずれも実装しなくてよいという意味において任意的である。
データ要素幅フィールド864−その内容は、(いくつかの実施形態においては、すべての命令に対し、他の実施形態においては、命令の一部のみに対し)複数のデータ要素幅のうちどれが使用されるべきかを区別する。1つのデータ要素幅のみがサポートされる、および/または、オペコードのいくつかの態様を使用して複数のデータ要素幅がサポートされる場合、このフィールドは不要であるという意味において、このフィールドは任意的なものである。
書き込みマスクフィールド870−その内容は、データ要素位置単位で、デスティネーションベクトルオペランド内のそのデータ要素位置が、ベースオペレーションおよび拡張オペレーションの結果を反映するかを制御する。クラスA命令テンプレートは、マージ‐書き込みマスクをサポートする一方で、クラスB命令テンプレートは、マージ‐書き込みマスクおよびゼロイング‐書き込みマスクの両方をサポートする。マージの場合、ベクトルマスクは、任意のオペレーションの実行中、デスティネーション内のあらゆる要素セットが更新されないように保護されることを可能にする(ベースオペレーションおよび拡張オペレーションによって指定される)。他の一実施形態においては、対応するマスクビットが0を有する場合、デスティネーションの各要素の古い値が保持される。これと対照的に、ゼロイングの場合、ベクトルマスクは、任意のオペレーションの実行中、デスティネーション内のあらゆる要素セットがゼロ化されることを可能にする(ベースオペレーションおよび拡張オペレーションによって指定される)。一実施形態においては、対応するマスクビットが0値を有する場合、デスティネーションの要素は0に設定される。この機能のサブセットは、実行されるオペレーションのベクトル長(すなわち、最初のものから最後のものまで、要素が変更されるスパン)を制御する能力であるが、変更される要素は連続的であることは必要ではない。故に、書き込みマスクフィールド870は、ロード、ストア、算術、論理等を含む部分的なベクトルオペレーションを可能にする。書き込みマスクフィールド870の内容が複数の書き込みマスクレジスタのうち使用されるべき書き込みマスクを含む1つの書き込みマスクレジスタを選択する(故に、書き込みマスクフィールド870の内容は、実行されるべきマスキングを間接的に識別する)本発明の実施形態が記載されているものの、代替的な実施形態は、代替的または追加的に、マスク書き込みフィールド870の内容が、実行されるべきマスキングを直接指定することを可能にする。
即値フィールド872−その内容は、即値の指定を可能にする。このフィールドは、即値をサポートしない汎用ベクトル向けフォーマットの実装に存在せず、このフィールドは即値を使用しない命令内に存在しないという意味において任意的なものである。
クラスフィールド868−その内容は、異なるクラスの命令間を区別する。図8Aおよび図8Bを参照すると、このフィールドの内容は、クラスA命令およびクラスB命令間を選択する。図8Aおよび図8B中、特定値がフィールド内に存在することを示すために、隅が丸められた四角が使用されている(例えば、図8Aおよび図8Bにおいて、それぞれクラスフィールド868のクラスA 868AおよびクラスB 868B)。
[クラスAの命令テンプレート]
クラスAの非メモリアクセス805命令テンプレートの場合、アルファフィールド852はRSフィールド852Aとして解釈され、RSフィールド852Aの内容は、異なる拡張オペレーションタイプのうちどれが実行されるべきか(例えば、ラウンド852A.1およびデータ変換852A.2がそれぞれ、非メモリアクセスラウンドタイプオペレーション810命令テンプレートおよび非メモリアクセスデータ変換タイプオペレーション815命令テンプレートに対し指定される)を区別し、一方で、ベータフィールド854は指定されるタイプのオペレーションのうちどれが実行されるべきかを区別する。非メモリアクセス805命令テンプレートには、スケールフィールド860、変位フィールド862Aおよび変位スケールフィールド862Bは存在しない。
[非メモリアクセス命令テンプレート‐完全ラウンド制御タイプオペレーション]
非メモリアクセスの完全ラウンド制御タイプオペレーション810命令テンプレートでは、ベータフィールド854はラウンド制御フィールド854Aとして解釈され、ラウンド制御フィールド854Aの内容は静的ラウンドを提供する。本発明に記載の実施形態においては、ラウンド制御フィールド854Aは、全浮動小数点例外抑制(SAE)フィールド856およびラウンドオペレーション制御フィールド858を含み、一方で、代替的な実施形態は、これら両方の概念をサポートしこれら両方の概念を同一フィールドにエンコードしてよく、または代替的な実施形態はこれらの概念/フィールドのうちの一方または他方のみを有してよい(例えば、ラウンドオペレーション制御フィールド858のみを有してよい)。
SAEフィールド856−その内容は、例外イベント報告を無効にするか否かを区別する。SAEフィールド856の内容が、抑制が有効になっていることを示す場合、特定の命令は、あらゆる種類の浮動小数点例外フラグを報告せず、浮動小数点例外ハンドラを発生させない。
ラウンドオペレーション制御フィールド858−その内容は、ラウンドオペレーショングループ(例えば、切り上げ、切り捨て、ゼロへの丸めおよび最近値への丸め)のうちどれが実行されるかを区別する。故に、ラウンドオペレーション制御フィールド858は、命令単位で、ラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定するための制御レジスタを含む本発明の一実施形態では、ラウンドオペレーション制御フィールド850の内容は、そのレジスタ値をオーバーライドする。
[非メモリアクセス命令テンプレート‐データ変換タイプオペレーション]
非メモリアクセスのデータ変換タイプオペレーション815命令テンプレートでは、ベータフィールド854はデータ変換フィールド854Bとして解釈され、データ変換フィールド854Bの内容は、複数のデータ変換(例えば、データ変換なし、スウィズル、ブロードキャスト)のうちどれが実行されるべきかを区別する。
クラスAのメモリアクセス820命令テンプレートの場合、アルファフィールド852はエビクションヒントフィールド852Bとして解釈され、エビクションヒントフィールド852Bの内容は、エビクションヒントのうちどれが使用されるべきかを区別し(図8A中、一時的852B.1および非一時的852B.2がそれぞれ、メモリアクセスの一時的825命令テンプレートおよびメモリアクセスの非一時的830命令テンプレートに対し指定される)、一方で、ベータフィールド854はデータ操作フィールド854Cとして解釈され、データ操作フィールドの内容は、複数のデータ操作オペレーション(プリミティブとしても知られる)のうちどれが実行されるべきかを区別する(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョンおよびデスティネーションのダウンコンバージョン)。メモリアクセス820命令テンプレートは、スケールフィールド860、および任意に、変位フィールド862Aまたは変位スケールフィールド862Bを含む。ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。複数の通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素的様式で、メモリから/メモリへデータを送信する。実際に送信される複数の要素は、書き込みマスクとして選択されるベクトルマスクの内容によって規定される。
[メモリアクセス命令テンプレート‐一時的]
一時的データとは、キャッシュによる利益を受けられるほどすぐに再利用される可能性の高いデータである。しかしながら、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含め、それを異なる方法で実装してよい。
[メモリアクセス命令テンプレート−非一時的]
非一時的データとは、一次ベルのキャッシュにおけるキャッシュにより利益を受けられるほどすぐには再利用される可能性が低いデータであり、エビクションが優先されるべきである。しかしながら、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含め、それを異なる方法で実装してよい。
[クラスBの命令テンプレート]
クラスBの命令テンプレートの場合、アルファフィールド852は、書き込みマスク制御(Z)フィールド852Cとして解釈される。アルファフィールド852の内容は、書き込みマスクフィールド870により制御される書き込みマスキングがマージまたはゼロ化であるべきかどうかを区別する。クラスBの非メモリアクセス805の複数の命令テンプレートの場合、ベータフィールド854の一部はRLフィールド857Aとして解釈され、その内容は、異なる拡張オペレーションタイプのうちのどの1つが実行されるかを区別し(例えば、ラウンド857A.1およびベクトル長(VSIZE)857A.2は、それぞれ、非メモリアクセス、書き込みマスク制御の部分ラウンド制御タイプオペレーション812の命令テンプレートおよび非メモリアクセス、書き込みマスク制御、VSIZEタイプオペレーション817の命令テンプレートに対して指定される)、ベータフィールド854の残りは、指定されるタイプの複数のオペレーションのうちのどれが実行されるかを区別する。非メモリアクセス805命令テンプレートには、スケールフィールド860、変位フィールド862Aおよび変位スケールフィールド862Bは存在しない。非メモリアクセス書き込みマスク制御、部分的ラウンド制御タイプオペレーション810命令テンプレートでは、ベータフィールド854の残部はラウンドオペレーションフィールド859Aとして解釈され、例外イベント報告が無効にされる(特定の命令は、あらゆる種類の浮動小数点例外フラグを報告せず、いかなる浮動小数点例外ハンドラも発生させない)。
ラウンドオペレーション制御フィールド859A―まさにラウンドオペレーション制御フィールド858と同様に、その内容は、ラウンドオペレーショングループ(例えば、切り上げ、切り捨て、ゼロへの丸めおよび最近値への丸め)のうちどれが実行されるかを区別する。故に、ラウンドオペレーション制御フィールド859Aは、命令単位で、ラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定する制御レジスタを含む本発明の実施形態では、ラウンドオペレーション制御フィールド850のコンテンツが、そのレジスタ値をオーバーライドする。非メモリアクセス書き込みマスク制御、VSIZEタイプオペレーション817命令テンプレートでは、ベータフィールド854の残部はベクトル長フィールド859Bとして解釈され、ベクトル長フィールド859Bの内容は、複数のデータベクトル長(例えば、128、256または512バイト)のうちのどれで実行されるべきかを区別する。
クラスBのメモリアクセス820命令テンプレートの場合、ベータフィールド854の一部はブロードキャストフィールド857Bとして解釈され、ブロードキャストフィールド857Bの内容は、ブロードキャストタイプのデータ操作オペレーションが実行されるか否かを区別し、一方で、ベータフィールド854の残部はベクトル長フィールド859Bとして解釈される。メモリアクセス820命令テンプレートは、スケールフィールド860、および任意に、変位フィールド862Aまたは変位スケールフィールド862Bを含む。
クラスBのメモリアクセス820命令テンプレートの場合、ベータフィールド854の一部はブロードキャストフィールド857Bとして解釈され、ブロードキャストフィールド857Bの内容は、ブロードキャストタイプのデータ操作オペレーションが実行されるか否かを区別し、一方で、ベータフィールド854の残部はベクトル長フィールド859Bとして解釈される。メモリアクセス820命令テンプレートは、スケールフィールド860、および任意に、変位フィールド862Aまたは変位スケールフィールド862Bを含む。汎用ベクトル向け命令フォーマット800に関し、フルオペコードフィールド874は、フォーマットフィールド840、ベースオペレーションフィールド842およびデータ要素幅フィールド864を含むように表示されている。フルオペコードフィールド874がこれらのフィールドのうちすべてを含む一実施形態が示されているものの、これらのフィールドのすべてをサポートしない実施形態においては、フルオペコードフィールド874は、これらのフィールドのすべてより少ないフィールドを含む。フル命令コードフィールド874は、オペレーションコード(オペコード)を与える。拡張オペレーションフィールド850、データ要素幅フィールド864、および書き込みマスクフィールド870は、汎用ベクトル向け命令フォーマットにおける命令ベースで、これらの特徴が指定されることを可能にする。書き込みマスクフィールドとデータ要素幅フィールドの組み合わせは、それらが異なるデータ要素幅に基づいてマスクが適用されることを可能にするという点で、型付き命令を形成する。
クラスAおよびクラスB内に存在する様々な命令テンプレートは、異なる状況において有益である。本発明のいくつかの実施形態において、あるプロセッサ内の異なる複数のプロセッサまたは異なるコアが、クラスAのみ、クラスBのみ、またはこれら両方のクラスをサポートしてよい。例えば、汎用コンピューティング向け高性能な汎用アウトオブオーダコアはクラスBのみをサポートしてよく、主にグラフィックおよび/またはサイエンティフィック(スループット)コンピューティング向けのコアはクラスAのみをサポートしてよく、これら両方向けのコアは両方をサポートしてよい(もちろん、両方のクラスのテンプレートおよび命令の何らかの組み合わせを有するものの、両方のクラスのすべてのテンプレートおよび命令を有してはいないコアは、本発明の範囲に属する)。また、単一のプロセッサが複数のコアを含んでよく、それらのすべてが同一クラスをサポートし、またはそれらのうち異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックおよび汎用コアを有するプロセッサにおいて、主にグラフィックおよび/またはサイエンティフィックコンピューティングのために意図された複数のグラフィックコアの1つは、クラスAのみをサポートしてよく、複数の汎用コアのうちの1または複数は、クラスBのみをサポートする汎用コンピューティングのために意図されたアウトオブオーダ実行およびレジスタリネームを有する高性能汎用コアであってよい。
別個のグラフィックスコアを持たない別のプロセッサは、クラスAおよびクラスBの両方をサポートするもう1つの汎用インオーダまたはアウトオブオーダコアを含んでよい。もちろん、本発明の異なる実施形態において、一方のクラスに属する諸機能が、他方のクラスに実装されてもよい。ハイレベル言語で記述されるプログラムは、(例えばジャストインタイムコンパイルまたは静的コンパイルをされて)様々な異なる実行可能な形式に翻訳されるであろう。それらの形式は、1)実行のターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、または2)すべてのクラスの命令の異なる組み合わせを使用して記述された代替的なルーチンを有し且つ現在コードを実行中のプロセッサによってサポートされる命令に基づき実行ルーチンを選択する制御フローコードを有する形式を含む。
図9A−Dは、本発明の複数の実施形態に係る例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図9は、位置、サイズ、解釈およびフィールド順序に加え、これらのフィールドの一部の値を指定するという意味において具体的な特定ベクトル向け命令フォーマット900を示す。特定ベクトル向け命令フォーマット900は、x86命令セットを拡張するために使用されてよく、よって、当該フィールドのうちのいくつかは、既存のx86命令セットおよびその拡張(例えば、AVX)で使用されるフィールドと類似または同一である。このフォーマットは、いくつかの拡張を備えた既存のx86命令セットのプレフィクスエンコーディングフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールドおよび即値フィールドと、整合性が維持されている。図8のフィールドが図9のどのフィールドにマッピングされるかが図示されている。
本発明の実施形態は、例示目的で、汎用ベクトル向け命令フォーマット800に照らし特定ベクトル向け命令フォーマット900に関し説明されているものの、本発明は特許請求される場合を除き、特定ベクトル向け命令フォーマット900には限定されないことを理解されたい。例えば、特定ベクトル向け命令フォーマット900は特定のサイズのフィールドを有するように図示されているものの、汎用ベクトル向け命令フォーマット800は、様々なフィールドについて様々な考え得るサイズを想定している。特定の実施例として、データ要素幅フィールド864は、特定ベクトル向け命令フォーマット900で1ビットフィールドとして示されるが、本発明を限定するものではない(すなわち、汎用ベクトル向け命令フォーマット800は、他のサイズのデータ要素幅フィールド864を想定する)。汎用ベクトル向け命令フォーマット800は、図9Aに示される順で以下に列挙される次のフィールドを含む。
EVEXプレフィクス(バイト0〜3)902−これは4バイト形式でエンコードされる。
フォーマットフィールド840(EVEXバイト0、ビット[7:0])−第1バイト(EVEXバイト0)はフォーマットフィールド840であり、0x62(本発明の一実施形態において、ベクトル向け命令フォーマットを区別するために用いられる固有値)を含む。第2から第4のバイト(EVEXバイト1〜3)は、特定の機能を提供する複数のビットフィールドを含む。
REXフィールド905(EVEXバイト1、ビット[7‐5])−これはEVEX.Rビットフィールド(EVEXバイト1、ビット[7]‐R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]‐X)および857BEXバイト1、ビット[5]‐B)から成る。EVEX.R、EVEX.X、およびEVEX.Bビットフィールドは、対応する複数のVEXビットフィールドと同じ機能性を提供し、1の補数形式を用いてエンコードされる、すなわち、ZMM0は811Bとしてエンコードされ、ZMM15は0000Bとしてエンコードされる。当技術分野において知られているように、命令の他のフィールドは、レジスタインデックスの下位3ビット(rrr、xxx、およびbbb)をエンコードし、その結果、EVEX.R、EVEX.X、およびEVEX.Bを加えることで、Rrrr、Xxxx、Bbbbが形成され得る。
REX'フィールド810−これはREX'フィールド810の第1の部分であり、拡張32レジスタセットの上位16または下位16のいずれかをエンコードするために使用されるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]‐R')である。本発明の一実施形態において、このビットは、以下に示される他のものと共に、ビット反転フォーマットで格納され、(周知のx86の32ビットモードで)BOUND命令から区別される。BOUND命令のリアルオペコードバイトは62であるが、MOD R/Mフィールド(後述)内では、MODフィールドの値11を受け付けない。本発明の代替的な実施形態は、このビットおよび後述される他のビットを反転フォーマットで格納しない。値1が使用され、下位16個のレジスタをエンコードする。換言すると、EVEX.R'、EVEX.Rおよび他のフィールドの他のRRRを組み合わせて、R'Rrrrが形成される。
オペコードマップフィールド915(EVEXバイト1、ビット[3:0]‐mmmm)−その内容は、示唆される先頭オペコードバイト(0F、0F38、または0F3)をエンコードする。
データ要素幅フィールド864(EVEXバイト2、ビット[7]‐W)−これはEVEX.Wという表記で表される。EVEX.Wはデータタイプ(32ビットデータ要素または64ビットデータ要素のいずれか)の粒度(サイズ)を定義するのに使用される。
EVEX.vvvv920(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割は、以下を含んでよい。1)EVEX.vvvvは、反転(1の補数)形式で指定される第1のソースレジスタオペランドをエンコードし、2または3以上のソースオペランドを有する複数の命令に対して有効である。2)EVEX.vvvvは、特定のベクトルシフトに対して1の補数形式で指定されるデスティネーションレジスタオペランドをエンコードする。または、3)EVEX.vvvvは、いずれのオペランドもエンコードせず、当該フィールドは残しておかれ、811bを含まなくてはならない。したがって、EVEX.vvvvフィールド920は、反転形式(1の補数)で記憶された第1のソースレジスタ指定子の4つの下位ビットをエンコードする。命令に応じて、追加の異なるEVEXビットフィールドが使用され、指定子サイズを32個のレジスタに拡張する。
EVEX.U 868クラスフィールド(EVEXバイト2、ビット[2]‐U)−EVEX.U=0の場合、それはクラスAまたはEVEX.U0を示す。EVEX.U=1の場合、それはクラスBまたはEVEX.U1を示す。
プレフィクスエンコーディングフィールド925(EVEXバイト2、ビット[1:0]‐pp)−これは、ベースオペレーションフィールドの追加のビットを提供する。EVEXプレフィクスフォーマットにおけるレガシSSE命令のサポートの提供に加え、これはまた、SIMDプレフィクスのコンパクト化の利点を有する(SIMDプレフィクスを表わすために1バイトを要求する代わりに、EVEXプレフィクスは2ビットのみを要求する)。一実施形態において、レガシフォーマットおよびEVEXプレフィクスフォーマットの両方において、SIMDプレフィクス(66H、F2H、F3H)を使用するレガシSSE命令をサポートすべく、これらのレガシSIMDプレフィクスは、SIMDプレフィクスエンコーディングフィールドにエンコードされる。これらのレガシSIMDプレフィクスは、デコーダのPLAに提供される前に、ランタイムにレガシSIMDプレフィクスに拡張される(よって、PLAは、変更なしで、これらのレガシ命令のレガシフォーマットおよびEVEXフォーマットの両方を実行可能である)。より新しい命令はEVEXプレフィクスエンコーディングフィールドの内容をオペコード拡張として直接使用できるにもかかわらず、特定の実施形態は一貫性をもたせるために同様の方法で拡張するが、これらのレガシSIMDプレフィクスによって異なる意味が指定されることが可能になる。代替的な実施形態は、2ビットSIMDプレフィクスエンコーディングをサポートするように、つまり拡張を要求しないように、PLAを再設計してよい。
アルファフィールド852(EVEXバイト3、ビット[7]−EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX、書き込みマスク制御、およびEVEX.Nとしても知られる。またαと示される)−先に記載したように、このフィールドは状況に固有である。
ベータフィールド854(EVEXバイト3、ビット[6:4]−SSS、EVEX.S2-0、EVEXr2-0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られる。またβββと示される)−先に記載したように、このフィールドは、コンテキスト固有である。
REX'フィールド810−これは、REX'フィールドの残部であり、拡張された32個のレジスタセットの上位16または下位16のいずれかをエンコードするために用いられ得るEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]−V')である。このビットは、ビット反転フォーマットで格納される。下位16個のレジスタをエンコードするのに値1が使用される。換言すると、EVEX.V'、EVEX.vvvvを組み合わせることにより、V'VVVVが形成される。
書き込みマスクフィールド870(EVEXバイト3、ビット[2:0]‐kkk)−上記の通り、その内容は、書き込みマスクレジスタ内のレジスタのインデックスを指定する。本発明の一実施形態において、特定値EVEX.kkk=000は、どの書き込みマスクも特定の命令に用いられないことを示唆する特別な挙動を有する(これは、全て1に物理的に組み込まれた書き込みマスクの使用、またはマスキングハードウェアをバイパスするハードウェアの使用を含む様々な方法で実装され得る)。
リアルオペコードフィールド930(バイト4)−これは、オペコードバイトとしても知られる。このフィールドで、オペコードの一部が指定される。
MOD R/Mフィールド940(バイト5)は、MODフィールド942、Regフィールド944およびR/Mフィールド946を含む。上記の通り、MODフィールド942の内容は、メモリアクセスオペレーションおよび非メモリアクセスオペレーション間を区別する。Regフィールド944の役割は、デスティネーションレジスタオペランド若しくはソースレジスタオペランドのいずれかをエンコードすること、または、オペコード拡張として扱われ、命令オペランドをエンコードするために使用されないこと、という2つの状況に要約できる。R/Mフィールド946の役割は、メモリアドレスを参照する命令オペランドをエンコードすること、またはデスティネーションレジスタオペランド若しくはソースレジスタオペランドのいずれかをエンコードすることが含まれてよい。
スケール、インデックス、ベース(SIB)バイト(バイト6)−上記の通り、スケールフィールド850の内容は、メモリアドレス生成に使用される。SIB.xxx954およびSIB.bbb 956−これらのフィールドの内容は、レジスタインデックスXxxxおよびBbbbに関して記載済みである。
変位フィールド862A(バイト7‐10)−MODフィールド942に10が含まれる場合、バイト7‐10は変位フィールド862Aであり、変位フィールド862Aはレガシ32‐ビット変位(disp32)と同様に動作し、バイト粒度で動作する。
変位係数フィールド862B(バイト7)−MODフィールド942に01が含まれる場合、バイト7は変位係数フィールド862Bである。このフィールドの位置は、バイト粒度で機能するレガシx86命令セットの8ビット変位(disp8)のものと同じである。disp8は符号拡張されるので、disp8は−128〜127バイトオフセット間のアドレス指定のみ可能である。64バイトのキャッシュラインに関しては、disp8は4つの実際に有用な値、−128、−64、0および64のみに設定可能な8ビットを使用する。通常、さらに広い範囲が必要であるので、disp32が使用されるが、disp32は4バイトを必要とする。disp8およびdisp32と対照的に、変位係数フィールド862Bはdisp8の再解釈である。変位係数フィールド862Bを使用する場合、実際の変位は、メモリオペランドアクセス(N)のサイズで乗算された変位係数フィールドの内容によって決定される。このタイプの変位は、disp8×Nと称される。これは平均命令長を減少させる(単一バイトが変位に用いられるが、極めて広い範囲を備える)。このような圧縮された変位は、有効な変位はメモリアクセスの粒度の倍数であり、従って、アドレスオフセットの冗長下位ビットはエンコードの必要がないという前提に基づいている。換言すると、変位係数フィールド862Bは、レガシx86命令セットの8ビット変位に置き換わる。故に、変位係数フィールド862Bは、disp8がdisp8×Nにオーバーロードされる点のみを除いては、x86命令セットの8‐ビット変位と同じ方法でエンコードされる(よって、ModRM/SIBエンコーディングルールの変更はない)。言い換えれば、エンコーディングルールまたはエンコーディング長には変化がなく、ハードウェアによる変位値の解釈にのみにある(バイト単位アドレスオフセットを得るべく、メモリオペランドのサイズによって変位をスケーリングする必要がある)。即値フィールド872は、上記の通り動作する。
[フルオペコードフィールド]
図9Bは、本発明の一実施形態に係る、フルオペコードフィールド874を構成する特定ベクトル向け命令フォーマット900のフィールドを示すブロック図である。具体的には、フルオペコードフィールド874は、フォーマットフィールド840、ベースオペレーションフィールド842およびデータ要素幅(W)フィールド864を含む。ベースオペレーションフィールド842は、プレフィクスエンコーディングフィールド925、オペコードマップフィールド915およびリアルオペコードフィールド930を含む。
[レジスタインデックスフィールド]
図9Cは、本発明の一実施形態に係る、レジスタインデックスフィールド844を構成する特定ベクトル向け命令フォーマット900のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド844は、REXフィールド905、REX'フィールド910、MODR/M.regフィールド944、MODR/M.r/mフィールド946、VVVVフィールド920、xxxフィールド954およびbbbフィールド956を含む。
[拡張オペレーションフィールド]
図9Dは、本発明の一実施形態に係る、拡張オペレーションフィールド850を構成する特定ベクトル向け命令フォーマット900のフィールドを示すブロック図である。クラス(U)フィールド868が0を含む場合、それはEVEX.U0(クラスA 868A)を表わす。クラス(U)フィールド868が1を含む場合、それはEVEX.U1(クラスB 868B)を表わす。U=0で且つMODフィールド942が11を含む場合(非メモリアクセスのオペレーションを意味)、アルファフィールド852(EVEXバイト3、ビット[7]‐EH)は、rsフィールド852Aとして解釈される。rsフィールド852Aが1を含む場合(ラウンド852A.1)、ベータフィールド854(EVEXバイト3、ビット[6:4]‐SSS)はラウンド制御フィールド854Aとして解釈される。ラウンド制御フィールド854Aは、1ビットのSAEフィールド856および2ビットのラウンドオペレーションフィールド858を含む。rsフィールド852Aが0を含む場合(データ変換852A.2)、ベータフィールド854(EVEXバイト3、ビット[6:4]‐SSS)は3ビットのデータ変換フィールド854Bとして解釈される。U=0で且つMODフィールド942が00、01または10を含む場合(メモリアクセスオペレーションを意味)、アルファフィールド852(EVEXバイト3、ビット[7]‐EH)は、エビクションヒント(EH)フィールド852Bとして解釈され、ベータフィールド854(EVEXバイト3、ビット[6:4]‐SSS)は3ビットのデータ操作フィールド854Cとして解釈される。
U=1の場合、アルファフィールド852(EVEXバイト3、ビット[7]−EH)は、書き込みマスク制御(Z)フィールド852Cとして解釈される。U=1且つMODフィールド942が11を含む場合(非メモリアクセスオペレーションを意味)、ベータフィールド854の一部(EVEXバイト3、ビット[4]−S0)は、RLフィールド857Aとして解釈される。それが1(ラウンド857A.1)を含むと、ベータフィールド854の残り(EVEXバイト3、ビット[6−5]−S2−1)は、ラウンドオペレーションフィールド859Aとして解釈され、RLフィールド857Aが0(VSIZE857.A2)を含むと、ベータフィールド854の残り(EVEXバイト3、ビット[6−5]−S2−1)は、ベクトル長フィールド859B(EVEXバイト3、ビット[6−5]−L1−0)として解釈される。U=1およびMODフィールド942が00、01または10を含む場合(メモリアクセスオペレーションを意味)、ベータフィールド854(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド859B(EVEXバイト3、ビット[6−5]−L1−0)およびブロードキャストフィールド857B(EVEXバイト3、ビット[4]−B)と解釈される。
図10は、本発明の一実施形態に係るレジスタアーキテクチャ1000を示すブロック図である。図示される実施形態には、512ビット幅の32個のベクトルレジスタ1010がある。これらのレジスタは、zmm0からzmm31として参照される。下位16個のzmmレジスタの下位256ビットは、レジスタymm0〜ymm16に重なっている。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0〜xmm15に重なっている。特定ベクトル向け命令フォーマット900は、下の表に示されるように、これらの上書きレジスタファイル上で動作する。
換言すると、ベクトル長フィールド859Bは、最大長から1または複数の他のより短い長さまでの範囲内から選択する。ここで、当該より短い長さそれぞれは、1つ前の長さの半分であり、ベクトル長フィールド859Bを持たない命令テンプレートは、最大ベクトル長に対して動作する。さらに一実施形態において、特定ベクトル向け命令フォーマット900のクラスB命令テンプレートは、パックドまたはスカラ単精度/倍精度浮動小数点データ、およびパックドまたはスカラ整数データに対して動作する。スカラオペレーションとは、zmm/ymm/xmmレジスタ内の最下位のデータ要素の位置で実行されるオペレーションである。実施形態に応じ、より上位のデータ要素の位置は、命令前と同じに保持されるか、ゼロにされるかのいずれかである。
書き込みマスクレジスタ1015−図示された実施形態中では、8個の書き込みマスクレジスタ(k0からk7)が存在し、各々64ビットのサイズである。代替的な実施形態において、書き込みマスクレジスタ1015は、16ビットのサイズである。上記の通り、本発明の一実施形態において、ベクトルマスクレジスタk0は書き込みマスクとして使用不可である。通常k0を示すエンコーディングが書き込みマスクに使用される場合、それは0xFFFFのハードワイヤードされた書き込みマスクを選択し、有効にその命令に対し書き込みマスキングを無効にする。
汎用レジスタ1025−図示された実施形態では、メモリオペランドをアドレス指定するために既存のx86アドレス指定モードと共に使用される16個の64ビットの汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSPおよびR8〜R15という名称で参照される。
MMXパックド整数フラットレジスタファイル1050がエイリアスされるスカラ浮動小数点スタックレジスタファイル(x87スタック)1045−図示された実施形態において、x87スタックは、x87命令セット拡張を用いて32/64/80ビット浮動小数点データに対してスカラ浮動小数点オペレーションを実行するために用いられる8エレメントスタックであり、複数のMMXレジスタは、64ビットパックド整数データに対してオペレーションを実行し、MMXおよびXMMレジスタの間で実行されるいくつかのオペレーションのためのオペランドを保持するために用いられる。本発明の代替的な実施形態は、より範囲の広いまたは狭いレジスタを使用してよい。加えて、本発明の代替的な実施形態は、より多い、より少ないまたは異なるレジスタファイルおよびレジスタを使用してもよい。
図11A〜Bは、より具体的な例示のインオーダコアアーキテクチャのブロック図を示し、コアはチップ内のいくつかのロジックブロック(同一タイプおよび/または異なるタイプの他のコアを含む)の1つであろう。論理ブロックは、用途に応じ、何らかの固定機能ロジック、メモリI/Oインターフェースおよび他の必要なI/Oロジックを備えた高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を介して通信する。
図11Aは、本発明の実施形態に係る単一プロセッサコアのブロック図であり、オンダイ相互接続ネットワーク1102への接続に加え、レベル2(L2)キャッシュ1104のローカルサブセットを有する。一実施形態において、命令デコーダ1100は、パックドデータ命令セット拡張を備えたx86命令セットをサポートする。L1キャッシュ1106によって、キャッシュメモリに、そしてスカラおよびベクトルユニット内部に低レイテンシのアクセスが可能になる。一実施形態では(設計を簡単にするため)、スカラーユニット1108とベクトルユニット1110は別々のレジスタセットを用い(それぞれスカラレジスタ1112およびベクトルレジスタ1114)、その間を移動するデータは、メモリに書き込まれ、それからレベル1(L1)キャッシュ1106から読み戻される一方、本発明の別の実施形態は、異なる取り組みを用いる場合がある(たとえば単一のレジスタ組を用いる、または書き戻しおよび読み戻しを行わずに2つのレジスタファイル間でのデータ移動を可能にする通信経路を含む)。
L2キャッシュのローカルサブセット1104は、1つのプロセッサコアあたり1つずつ、別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、自身のL2キャッシュ1104のローカルサブセットへのダイレクトアクセスパスを有する。プロセッサコアによって読み取られたデータは、そのL2キャッシュサブセット1104に格納され、当該データは、他のプロセッサコアが自身のローカルL2キャッシュサブセットにアクセスするのと並列的に、迅速にアクセス可能である。プロセッサコアによって書き込まれたデータは、自身のL2キャッシュサブセット1104に格納され、必要な場合、他のサブセットからはフラッシュされる。リングネットワークは、共有データのためのコヒーレンシを保証する。リングネットワークは双方向であり、プロセッサコア、L2キャッシュおよび他の論理ブロック等のエージェントが、チップ内で互いに通信することを可能にする。各リングデータパスは、一方向当たり1012ビット幅である。
図11Bは、本発明の複数の実施形態に係る図11A内のプロセッサコアの部分拡大図である。図11Bは、ベクトルユニット1110およびベクトルレジスタ1114に関するより詳細な点だけでなく、L1キャッシュ1104の一部であるL1データキャッシュ1106Aを含む。具体的には、ベクトルユニット1110は、16幅ベクトル処理ユニット(VPU)(16幅ALU1128を参照)であり、整数命令、単精度浮動命令および倍精度浮動命令のうちの1または複数を実行する。VPUは、スウィズルユニット1120を用いるレジスタ入力のスウィズル、数値変換ユニット1122A〜Bを用いる数値変換およびメモリ入力での複製ユニット1124を用いる複製をサポートする。書き込みマスクレジスタ1126は、結果ベクトル書き込みのプレディケートを可能にする。
本発明の実施形態は、上記された様々な段階を含んでよい。当該段階は、機械で実行可能な命令に具現化されてよく、当該命令は、汎用プロセッサまたは特定用途向けプロセッサに、当該段階を実行させるために使用されてよい。代替的に、これらの段階は、当該段階を実行するためのハードワイヤードロジックを含む特定のハードウェアコンポーネントによって、またはプログラムされたコンピュータコンポーネントと、カスタムのハードウェアコンポーネントとの任意の組み合わせによって実行されてもよい。
本明細書において説明されるように、複数の命令は、特定の複数のオペレーションを実行するよう構成され、または予め定められた機能または非一時的コンピュータ可読媒体で実施されるメモリに格納された複数のソフトウェア命令を有する特定用途向け集積回路(ASIC)等のハードウェアの特定の構成を指し得る。従って、図面に示される複数の技術は、1または複数の電子デバイス(例えば、終端局およびネットワーク要素等)上に格納され、実行されるコードおよびデータを用いて実装され得る。このような電子デバイスは、非一時的コンピュータ機械可読記憶媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ)および一時的コンピュータ機械可読通信媒体(例えば、搬送波、赤外線信号、デジタル信号などのような伝搬信号の電気、光、音、または他の形式)のような、コンピュータ機械可読媒体を用いてコードおよびデータを(内部で、および/またはネットワークを介して他の電子デバイスを用いて)格納および通信する。
更に、このような電子デバイスは通常、1もしくは複数のストレージデバイス(非一時的機械可読記憶媒体)、ユーザ入力/出力デバイス(例えば、キーボード、タッチスクリーン、および/またはディスプレイ)、ならびにネットワーク接続等、1または複数の他のコンポーネントに結合された1もしくは複数のプロセッサのセットを含む。複数のプロセッサのセットおよび他の複数のコンポーネントの結合は通常、1または複数のバスおよびブリッジ(バスコントローラとも呼ばれる)を介して行われる。ストレージデバイスおよびネットワークトラフィックを搬送する複数の信号は、各々、1または複数の機械可読記憶媒体および機械可読通信媒体を表す。従って、所与の電子デバイスのストレージデバイスは通常、当該電子デバイスの1または複数のプロセッサのセット上で実行するためのコードおよび/またはデータを格納する。もちろん、本発明の実施形態の1または複数の部分は、ソフトウェア、ファームウェア、および/またはハードウェアの異なる複数の組み合わせを用いて実装されてよい。[結合した加算−加算オペレーションを実行するための装置および方法]
上述したように、ベクトル/SIMDデータを用いて動作する場合、特に小さいコアに対し、トータルの命令カウントを低減し、電力効率を改善するのに有益となるであろう条件がある。特に、浮動小数点データタイプ用の結合した加算−加算オペレーションを実装する命令は、トータルの命令カウントを減らし、ワークロードの電力要求を減らすことを可能にする。
図12−15は、各々が単精度浮動小数点値を含んだ16個の別個の32ビットパックドデータ要素として演算される512ビットのベクトル/SIMDオペランド上の結合した加算−加算オペレーションの実施形態を示す。しかしながら、図12−15で示される具体的なベクトルおよびパックドデータ要素のサイズは図示の目的のために用いられるに過ぎないことに注意されるべきである。本発明の根本的な原理は、任意のベクトルまたはパックドデータ要素のサイズを用いて実装されうる。図12−15を参照すると、ソース1およびソース2オペランド(それぞれ1205−1505および1201−1501)はSIMDパックドデータレジスタであってよく、ソース3オペランド1203−1503はSIMDパックドデータレジスタまたはメモリ内の位置であってよい。結合した加算−加算オペレーションに反応し、ベクトルフォーマットに応じてラウンド制御がセットされる。本明細書で説明される実施形態において、ラウンド制御は、図8AのクラスAの命令テンプレート(非メモリアクセスラウンドタイプオペレーション810を含む)、または、図8BのクラスBの命令テンプレート(非メモリアクセス書き込みマスク制御、部分ラウンド制御タイプオペレーション812を含む)に従ってセットされてよい。
図12に示されるように、ソース2オペランドの最下位32ビットを占有する初期のパックドデータ要素(例えば1201における値7を有するパックドデータ要素)は、ソース3オペランドからの対応するパックドデータ要素(例えば1203における値15を有するパックドデータ要素)に加算されて第1の結果データ要素を生成する。第1の結果データ要素は丸められてソース1/デスティネーションオペランドの対応するパックドデータ要素(例えば1205における値8を有するパックドデータ要素)に加算され、第2の結果データ要素を生成する。第2の結果データ要素は丸められてソース1/デスティネーションオペランド1207の同じパックドデータ要素位置(例えば値−16を有するパックドデータ要素1215)にライトバックされる。一実施形態において、即値バイト値はオペレーション/命令と共にエンコードされ、即値の最下位の3ビット1209それぞれは1またはゼロを含み、結合した加算−加算オペレーションのための各オペランドの別々のパックドデータ要素のそれぞれに正か負の値を割り当てる。即値バイトの即値ビット[7:3]1211はソース3のレジスタまたはメモリ内の位置をエンコードする。結合した加算−加算オペレーションは対応ソースオペランドの別々のパックドデータ要素のそれぞれに対して反復し、各ソースオペランドは複数のパックドデータ要素を有する(例えば対応するオペランドのセットに対し、各々が512ビットのベクトルオペランド長を持つ16個のパックドデータ要素を有し、各パックドデータ要素は32ビット幅である)。
別の実施形態は4つのパックドデータオペランドを含む。図12と同様に、図13はソース2オペランド1301の最下位32ビットを占有する初期のパックドデータ要素を示す。初期のパックドデータ要素はソース3オペランド1303からの対応するパックドデータ要素に加算されて第1の結果データ要素を生成する。第1の結果データ要素は丸められてソース1オペランド1305の対応するパックドデータ要素に加算され、第2の結果データ要素を生成する。図12と対照的に、第2の結果データ要素は丸められた後に、第4のパックドデータオペランド、デスティネーションオペランド1307の対応するパックドデータ要素(例えば値−16を有するパックドデータ要素1315)に書き込まれる。一実施形態において、即値バイト値はオペレーション/命令と共にエンコードされ、最下位の3ビット1309はそれぞれ1またはゼロを含み、結合した加算−加算オペレーションのための各オペランドの別々のパックドデータ要素のそれぞれに正か負の値を割り当てる。即値バイトの即値ビット[7:3]1311はソース3のレジスタまたはメモリ内の位置をエンコードする。結合した加算−加算オペレーションは対応ソースオペランドの別々のパックドデータ要素のそれぞれに対して反復し、各ソースオペランドは複数のパックドデータ要素を有する(例えば対応するオペランドのセットに対し、各々が512ビットのベクトルオペランド長を持つ16個のパックドデータ要素を有し、各パックドデータ要素は32ビット幅である)。
図14は、32ビットのパックドデータ要素幅を有する書き込みマスクレジスタK1 1419の加算を含む代替的な実施形態を示す。書き込みマスクレジスタK1の下位16ビットは1およびゼロの混合を含む。書き込みマスクレジスタK1における下位16ビット位置のそれぞれは複数のパックドデータ要素位置の1つに対応する。ソース1/デスティネーションオペランド1407における各パックドデータ要素位置に対し、書き込みマスクレジスタK1における対応ビットはオペレーションの結果がデスティネーションに書き込まれるか否かを制御する。例えば、書き込みマスクが0であると、その場合にオペレーションの結果はデスティネーションパックドデータ要素位置(例えば値6を有するパックドデータ要素1421)に書き込まれない。書き込みマスクが1であると、その場合にオペレーションの結果はパックドデータ要素位置(例えば値−16を有するパックドデータ要素1415)に書き込まれる。
別の実施形態において、図15に示されるように、(例えば4つのパックドデータオペランドを有する実施形態に対し)ソース1/デスティネーションオペランド1405は追加のソースオペランド、ソース1オペランド1505と置換される。それらの実施形態においてデスティネーションオペランド1507は、複数のパックドデータ要素位置のうちマスクレジスタK1の対応ビット位置がゼロであるもの(例えば値6を有するパックドデータ要素1521)のオペレーションの前からのソース1オペランドのコンテンツを含み、複数のパックドデータ要素位置のうちマスクレジスタK1の対応ビット位置が1であるもの(例えば値−16を有するパックドデータ要素1515)のオペレーションの結果を含む。
上述した結合した加算−加算命令の実施形態によれば、複数のオペランドは図12−15および9Aに関して次のようにエンコードされうる。デスティネーションオペランド1207−1507(また図12および14のソース1/デスティネーションオペランド)はパックドデータレジスタであり、Regフィールド944にエンコードされる。ソース2オペランド1201−1501はパックドデータレジスタでありVVVVフィールド920にエンコードされる。一実施形態において、ソース3オペランド1203−1503はパックドデータレジスタであり、別の実施形態においては32ビット浮動小数点パックドデータのメモリ位置である。ソース3オペランドは即値フィールド872またはR/Mフィールド946にエンコードされてよい。
図16は、一実施形態に従って結合した加算−加算オペレーションを実行する間にプロセッサによりたどられる例示的段階を示すフロー図である。方法は上述のアーキテクチャのコンテキスト内で実装されてよいが、如何なる特定のアーキテクチャに限定されるものでもない。段階1601において、デコードユニット(例えばデコードユニット140)は、結合した加算−加算オペレーションが実行されるべきであると判断させる命令を受信してデコードする。命令は、それぞれN個のパックドデータ要素のアレイを有する3または4のソースパックドデータオペランドのセットを指定してよい。複数のパックドデータオペランドのそれぞれにおける各パックドデータ要素の値は、即値バイトを有するビット位置内の対応する値に応じて正か負である(例えば、ソース3オペランド内の即値バイトにおける最下位の3ビットは各々1またはゼロを含み、結合した加算−加算オペレーションに対する各オペランドの複数のパックドデータ要素のそれぞれに正か負の値をそれぞれ割り当てる)。
段階1603において、デコードユニット140は複数のレジスタ(例えば物理レジスタファイルユニット158の複数のレジスタ)またはメモリ(例えばメモリユニット170)内の複数の位置にアクセスする。物理レジスタファイルユニット158における複数のレジスタまたはメモリユニット170内の複数のメモリ位置は、命令により指定されるレジスタアドレスに応じてアクセスされうる。例えば、結合した加算−加算オペレーションは、SRC1、SRC2、SRC3およびDESTレジスタのアドレスを含んでよい。SRC1は第1のソースレジスタのアドレスであり、SRC2は第2のソースレジスタのアドレスであり、SRC3は第3のソースレジスタのアドレスである。DESTは、結果データが格納されるデスティネーションレジスタのアドレスである。いくつかの実装において、SRC1により参照される格納位置はまた結果を格納するのに用いられ、SRC1/DESTと称される。いくつかの実装においてSRC1、SRC2、SRC3およびDESTのいずれか1つまたは全ては、プロセッサのアドレッシング可能メモリスペースにおけるメモリ位置を定義する。例えば、SRC3はメモリユニット170におけるメモリ位置を識別し、SRC2およびSRC1/DESTは物理レジスタファイルユニット158における第1および第2レジスタをそれぞれ識別する。本明細書での記載の簡略化のために、複数の実施形態は物理レジスタファイルへのアクセスに関して説明される。しかしながら、これらのアクセスは代わりにメモリに対して行われてよい。
段階1605において、実行ユニット(例えば実行エンジンユニット150)はアクセスされるデータ上で結合した加算−加算オペレーションを実行することが可能とされる。結合した加算−加算オペレーションに応じて、ソース2オペランドの初期のパックドデータ要素はソース3オペランドからの対応するパックドデータ要素に加算されて第1の結果データ要素を生成する。第1の結果データ要素は丸められソース1/デスティネーションオペランドの対応するパックドデータ要素に加算され、第2の結果データ要素を生成する。第2の結果データ要素は丸められ、ソース1/デスティネーションオペランドの同じパックドデータ要素位置にライトバックされる。4つのパックドデータオペランドを伴う実施形態に関し、第2の結果データ要素は丸められた後に第4のパックドデータオペランド、デスティネーションオペランドの対応するパックドデータ要素に書き込まれる。一実施形態において、即値バイト値はソース3オペランドにエンコードされ、最下位の3ビットはそれぞれ1またはゼロを含み、結合した加算−加算オペレーションのための各オペランドの別々のパックドデータ要素のそれぞれに正か負の値を割り当てる。即値ビット[7:3]はソース3のレジスタをエンコードする。
書き込みマスクレジスタを含む実施形態に関し、ソース1/デスティネーションオペランドにおける各パックドデータ要素位置はそれぞれ、書き込みマスクレジスタにおける対応ビット位置がゼロまたは1であることに応じて、ソース1/デスティネーション内の当該パックドデータ要素位置の内容、あるいは、オペレーションの結果を含む。結合した加算−加算オペレーションは複数の対応ソースオペランドの別々のパックドデータ要素ごとに反復し、各ソースオペランドは複数のパックドデータ要素を含む。命令の要求に従って、ソース1/デスティネーションオペランドまたはデスティネーションオペランドは、結合した加算−加算オペレーションの結果が格納される物理レジスタファイルユニット158内のレジスタを指定してよい。段階1607において結合した加算−加算オペレーションの結果は、命令の要求に従って物理レジスタファイルユニット158またはメモリユニット170内の位置に戻されて格納されてよい。
図17は結合した加算−加算オペレーションの実装に関する例示的データフローを示す。一実施形態において、処理ユニット1701の実行ユニット1705は結合した加算−加算ユニット1705であり、物理レジスタファイルユニット1703に結合されて別々のソースレジスタから複数のソースオペランドを受信する。一実施形態において、結合した加算−加算ユニットは、第1、第2および第3のソースオペランドにより指定されるレジスタに格納された複数のパックドデータ要素上で結合した加算−加算オペレーションを実行するよう動作可能である。
結合した加算−加算ユニットは更に、複数のソースオペランドのそれぞれからの複数のパックドデータ要素上の処理用にサブ回路(すなわち算術ロジックユニット)を有する。各サブ回路はソース2オペランド(1201−1501)からの1つのパックドデータ要素をソース3オペランド(1203−1503)の対応するパックドデータ要素に加算して第1の結果データ要素を生成する。第1の結果データ要素はそれぞれ、3または4のソースオペランドを有する命令に従って丸められ、ソース1/デスティネーションオペランドまたはソース1オペランド(1205−1505)の対応するパックドデータ要素に加算され、第2の結果データ要素を生成する。第2の結果データ要素は丸められ、ソース1/デスティネーションオペランドまたはデスティネーションオペランド(1207−1507)の対応するパックドデータ要素位置にライトバックされる。オペレーションの完了の後、ソース1/デスティネーションオペランドまたはデスティネーションオペランド内の結果は、例えばライトバックまたはリタイアステージにおいて、物理レジスタファイルユニット1703にライトバックされてよい。
図18は結合した加算−加算オペレーションの実装に関する代替的なデータフローを示す。図17と同様に、処理ユニット1801の実行ユニット1807は結合した加算−加算ユニット1807であり、第1、第2および第3のソースオペランドにより指定される複数のレジスタに格納された複数のパックドデータ要素上で結合した加算−加算オペレーションを実行するよう動作可能である。一実施形態において、スケジューラ1805は物理レジスタファイルユニット1803に結合されて別々のソースレジスタからの複数のソースオペランドを受信し、スケジューラは結合した加算−加算ユニット1807に結合される。スケジューラ1805は物理レジスタファイルユニット1803における別々のソースレジスタからの複数のソースオペランドを受信し、結合した加算−加算オペレーションの実行のために、結合した加算−加算ユニット1807に対してソースオペランドをディスパッチする。
単一の結合した加算−加算命令の実行のために利用可能な2つの結合した加算−加算ユニットも2つのサブ回路も存在しない一実施形態においてスケジューラ1805は、結合した加算−加算ユニットに命令を2回ディスパッチし、第1の命令が完了するまで第2の命令をディスパッチしない(すなわちスケジューラ1805は結合した加算−加算命令をディスパッチし、ソース2オペランド(1201−1501)からの1つのパックドデータ要素がソース3オペランド(1203−1503)の対応するパックドデータ要素に加算されるのを待って第1の結果データ要素を生成し、スケジューラは次に結合した加算−加算命令を再度ディスパッチして第1の結果データ要素はそれぞれ3または4のソースオペランドを有する命令に従って丸められ、ソース1/デスティネーションオペランドまたはソース1オペランド(1205−1505)の対応するパックドデータ要素に加算され、第2の結果データ要素を生成する)。第2の結果データ要素は丸められ、ソース1/デスティネーションオペランドまたはデスティネーションオペランド(1207−1507)の対応するパックドデータ要素位置にライトバックされる。オペレーションの完了の後、ソース1/デスティネーションオペランドまたはデスティネーションオペランド内の結果は、例えばライトバックまたはリタイアステージにおいて、物理レジスタファイルユニット1803にライトバックされてよい。
図19は、結合した加算−加算オペレーションの実装に関する別の代替的なデータフローを示す。図18と同様に、処理ユニット1901の実行ユニット1907は結合した加算−加算ユニット1907であり、第1、第2および第3のソースオペランドにより指定される複数のレジスタに格納された複数のパックドデータ要素上で結合した加算−加算オペレーションを実行するよう動作可能である。一実施形態において、物理レジスタファイルユニット1903は、また結合した加算−加算ユニット1905である(また第1、第2および第3のソースオペランドにより指定された複数のレジスタに格納された複数のパックドデータ要素上で結合した加算−加算オペレーションを実行するよう動作可能な)追加の実行ユニットに結合され、2つの結合した加算−加算ユニットは連続する(すなわち結合した加算−加算ユニット1905の出力は結合した加算−加算ユニット1907の入力に結合される)。
一実施形態において、第1の結合した加算−加算ユニット(すなわち結合した加算−加算ユニット1905)はソース2オペランド(1201−1501)からの1つのパックドデータ要素と、ソース3オペランド(1203−1503)の対応するパックドデータ要素との加算を実行して第1の結果データ要素を生成する。一実施形態において、それぞれ3または4のソースオペランドを有する命令に従って第1の結果データ要素が丸められた後、第2の結合した加算−加算ユニット(すなわち結合した加算−加算ユニット1907)は第1の結果データ要素とソース1/デスティネーションオペランドまたはソース1オペランド(1205−1505)の対応するパックドデータ要素との加算を実行して第2の結果データ要素を生成する。第2の結果データ要素は丸められ、ソース1/デスティネーションオペランドまたはデスティネーションオペランド(1207−1507)の対応するパックドデータ要素位置にライトバックされる。オペレーションの完了の後、ソース1/デスティネーションオペランドまたはデスティネーションオペランド内の結果は、例えばライトバックまたはリタイアステージにおいて、物理レジスタファイルユニット1903にライトバックされてよい。
詳細な説明を通じて、説明の目的のために、様々な特定の詳細が、本発明の完全な理解を提供するために記載された。しかし、当業者には本発明がこれら具体的な詳細のいくつかがなくても実施され得ることが明らかであろう。特定の例において、周知の構造および機能は、本発明の主題を不明瞭にするのを避けるべく、精巧詳細に説明されていない。従って、本発明の範囲および趣旨は、以下の特許請求の範囲の観点から判断されるべきである。