(57)【特許請求の範囲】
【請求項１】
縮小されるべき複数のデータ要素値を格納する値ベクトルレジスタと、
前記値ベクトルレジスタ内のどの値が互いに関連しているかを示す複数のインデックス値を格納するインデックスベクトルレジスタと、
前記インデックスベクトルレジスタ内の前記複数のインデックス値によって示されるように互いに関連付けられる前記値ベクトルレジスタからのデータ要素値を結合させることによって、前記値ベクトルレジスタ内の前記データ要素値に対してリダクション演算を実行する単一命令複数データ縮小論理（ＳＩＭＤ縮小論理）と、
前記ＳＩＭＤ縮小論理によって生成される前記リダクション演算の結果を格納する累算ベクトルレジスタと、を備え、
前記リダクション演算を実行するために、前記ＳＩＭＤ縮小論理は、同じインデックス値を有するデータ要素値の複数群を決定し、且つ複数の結果を生成するために前記同じインデックス値を有するデータ要素を結合させ、前記複数の結果の各々は、前記同じインデックス値を共有する一群のデータ要素値の算術結合を有する、プロセッサ。
【請求項２】
前記ＳＩＭＤ縮小論理は、前記累算ベクトルレジスタの特定のデータ要素位置内に各結果を格納する、請求項１に記載のプロセッサ。
【請求項３】
前記ＳＩＭＤ縮小論理は、前記同じインデックス値を共有する要素値に対して複数の結合反復を実行することによって前記リダクション演算を実行し、前記複数の結合反復の各々は、最終反復において最終結果が得られるまで複数対のデータ要素値を結合する、請求項２に記載のプロセッサ。
【請求項４】
前記累算ベクトルレジスタ内の各特定データ要素位置は、前記インデックスベクトルレジスタ内の前記同じインデックス値の他のものに対して最上位位置を有する関連するインデックス値の位置に対応する位置又は前記インデックスベクトルレジスタ内の前記同じインデックス値の他のものに対して最下位位置を有する関連するインデックス値の位置に対応する位置を有する、請求項２または３に記載のプロセッサ。
【請求項５】
縮小されるべき複数のデータ要素値を格納する値ベクトルレジスタと、
前記値ベクトルレジスタ内のどの値が互いに関連しているかを示す複数のインデックス値を格納するインデックスベクトルレジスタと、
前記インデックスベクトルレジスタ内の前記複数のインデックス値によって示されるように互いに関連付けられる前記値ベクトルレジスタからのデータ要素値を結合させることによって、前記値ベクトルレジスタ内の前記データ要素値に対してリダクション演算を実行する単一命令複数データ縮小論理（ＳＩＭＤ縮小論理）と、
前記ＳＩＭＤ縮小論理によって生成される前記リダクション演算の結果を格納する累算ベクトルレジスタと、を備えるプロセッサであって、
前記値ベクトルレジスタ内の前記データ要素値の各々は、前記プロセッサ内のＳＩＭＤレーンに関連し、前記リダクション演算を実行することは、
前記レーンの各々にわたってコンフリクトを計算してコンフリクト結果を生成することと、前記コンフリクト結果をコンフリクトデスティネーションレジスタに格納することとを更に有する、プロセッサ。
【請求項６】
前記リダクション演算を実行することは、
ビット列を生成するために、各レーンを、左及び右の子の縮小ツリー内のそれぞれの子と同じインデックス値でマークすることを更に有する、請求項５に記載のプロセッサ。
【請求項７】
前記リダクション演算を実行することは、
前記ビット列を、前記左の子をアクティブとしてマークする又は前記右の子をアクティブとしてマークするマスクとして使用することを更に有する、請求項６に記載のプロセッサ。
【請求項８】
前記リダクション演算は、各レーンについて、前記マスクが前記左の子をアクティブとしてマークする場合、右側に等しいインデックス値を有する左端レーンを示す又は前記マスクが前記右の子をアクティブとしてマークする場合、左側に等しいインデックス値を有する右端レーンを示す最上位１のビット‐インデックスを計算することを更に有する、請求項７に記載のプロセッサ。
【請求項９】
前記リダクション演算は、前記マスクが前記左の子をアクティブとしてマークする場合、左の子と整列するように右の子を移動させ又は前記マスクが前記右の子をアクティブとしてマークする場合、右の子と整列するように左の子を移動させて、一時的な結果を生成することと、前記一時的な結果を一時的な位置に置くことと、を更に有する、請求項８に記載のプロセッサ。
【請求項１０】
元のデータを使用してリダクション演算を前記一時的な結果に適用し、左と右の子を結合して新しい結果を生成することと、前記マスクが前記左の子をアクティブとしてマークする場合、前記新しい結果を前記左の子に関連付けられる前記レーンに配置すること又は前記マスクが前記右の子をアクティブとしてマークする場合、前記新しい結果を前記右の子に関連付けられる前記レーンに配置することと、を更に備える、請求項９に記載のプロセッサ。
【請求項１１】
前記リダクション演算を実行することは、更に、
前記マスクが前記左の子をアクティブとしてマークする場合、前記マスクと前記コンフリクト結果とのビット単位のＡＮＤ演算を実行することにより、１つ又は複数の右の子に関連する前記コンフリクトデスティネーションレジスタ内のビットをクリアすることと、将来の反復における考慮から前記右の子を除去することと、を有する、又は、前記マスクが前記右の子をアクティブとしてマークする場合、前記マスクと前記コンフリクト結果とのビット単位のＡＮＤ演算を実行することにより、１つ又は複数の左の子に関連する前記コンフリクトデスティネーションレジスタ内のビットをクリアすることと、将来の反復における考慮から前記左の子を除去することと、を有する、請求項９または１０に記載のプロセッサ。
【請求項１２】
前記ＳＩＭＤ縮小論理は、前記同じインデックス値を有するデータ要素値の複数群を決定し、且つ複数の結果を生成するために前記同じインデックス値を有する前記データ要素を加算することによって前記データ要素を結合させ、前記複数の結果の各々は前記同じインデックス値を共有する一群のデータ要素値の合計を有する、請求項１に記載のプロセッサ。
【請求項１３】
縮小されるべき複数のデータ要素値を値ベクトルレジスタに格納することと、
前記値ベクトルレジスタ内のどの値がインデックスベクトルレジスタにおいて互いに関連付けられているかを示す複数のインデックス値を格納することと、
前記インデックスベクトルレジスタ内の前記複数のインデックス値によって示されるように互いに関連付けられる前記値ベクトルレジスタからのデータ要素値を結合させることによって、前記値ベクトルレジスタ内の前記データ要素値に対してリダクション演算を実行することと、
前記リダクション演算の結果を累算ベクトルレジスタに格納することと、を備え、
前記リダクション演算を実行するために、同じインデックス値を有するデータ要素値の複数群を決定することと、複数の結果を生成するために前記同じインデックス値を有するデータ要素を結合することとを備え、前記複数の結果の各々は、前記同じインデックス値を共有する一群のデータ要素値の算術結合を有する、方法。
【請求項１４】
前記累算ベクトルレジスタの特定のデータ要素位置内に各結果を格納することを更に備える、請求項１３に記載の方法。
【請求項１５】
前記同じインデックス値を共有する要素値に対して複数の結合反復を実行することによって前記リダクション演算を実行することを更に備え、前記複数の結合反復の各々は、最終反復において最終結果が得られるまで複数対のデータ要素値を結合する、請求項１４に記載の方法。
【請求項１６】
前記累算ベクトルレジスタ内の各特定データ要素位置は、前記インデックスベクトルレジスタ内の前記同じインデックス値の他のものに対して最上位位置を有する関連するインデックス値の位置に対応する位置又は前記インデックスベクトルレジスタ内の前記同じインデックス値の他のものに対して最下位位置を有する関連するインデックス値の位置に対応する位置を有する、請求項１４または１５に記載の方法。
【請求項１７】
縮小されるべき複数のデータ要素値を値ベクトルレジスタに格納することと、
前記値ベクトルレジスタ内のどの値がインデックスベクトルレジスタにおいて互いに関連付けられているかを示す複数のインデックス値を格納することと、
前記インデックスベクトルレジスタ内の前記複数のインデックス値によって示されるように互いに関連付けられる前記値ベクトルレジスタからのデータ要素値を結合させることによって、前記値ベクトルレジスタ内の前記データ要素値に対してリダクション演算を実行することと、
前記リダクション演算の結果を累算ベクトルレジスタに格納することと、を備え、
前記値ベクトルレジスタ内の前記データ要素値の各々は、プロセッサ内のＳＩＭＤレーンに関連し、前記リダクション演算を実行することは、
前記レーンの各々にわたってコンフリクトを計算してコンフリクト結果を生成することと、前記コンフリクト結果をコンフリクトデスティネーションレジスタに格納することとを更に有する、方法。
【請求項１８】
前記リダクション演算を実行することは、
ビット列を生成するために、各レーンを、左及び右の子の縮小ツリー内のそれぞれの子と同じインデックス値でマークすることを更に有する、請求項１７に記載の方法。
【請求項１９】
前記リダクション演算を実行することは、
前記ビット列を、前記左の子をアクティブとしてマークする又は前記右の子をアクティブとしてマークするマスクとして使用することを更に有する、請求項１８に記載の方法。
【請求項２０】
前記リダクション演算は、各レーンについて、前記マスクが前記左の子をアクティブとしてマークする場合、右側に等しいインデックス値を有する左端レーンを示す又は前記マスクが前記右の子をアクティブとしてマークする場合、左側に等しいインデックス値を有する右端レーンを示す最上位１のビット‐インデックスを計算することを更に有する、請求項１９に記載の方法。
【請求項２１】
前記リダクション演算は、前記マスクが前記左の子をアクティブとしてマークする場合、左の子と整列するように右の子を移動させ又は前記マスクが前記右の子をアクティブとしてマークする場合、右の子と整列するように左の子を移動させて、一時的な結果を生成すること、前記一時的な結果を一時的な位置に置くことと、を更に有する、請求項２０に記載の方法。
【請求項２２】
元のデータを使用してリダクション演算を前記一時的な結果に適用し、左と右の子を結合して新しい結果を生成することと、前記マスクが前記左の子をアクティブとしてマークする場合、前記新しい結果を前記左の子に関連付けられる前記レーンに配置すること又は前記マスクが前記右の子をアクティブとしてマークする場合、前記新しい結果を前記右の子に関連付けられる前記レーンに配置することと、を更に備える、請求項２１に記載の方法。
【請求項２３】
前記リダクション演算を実行することは、更に、
前記マスクが前記左の子をアクティブとしてマークする場合、前記マスクと前記コンフリクト結果とのビット単位のＡＮＤ演算を実行することにより、１つ又は複数の右の子に関連する前記コンフリクトデスティネーションレジスタ内のビットをクリアすることと、将来の反復における考慮から前記右の子を除去することと、を有する、或いは、前記マスクが前記右の子をアクティブとしてマークする場合、前記マスクと前記コンフリクト結果とのビット単位のＡＮＤ演算を実行することにより、１つ又は複数の左の子に関連する前記コンフリクトデスティネーションレジスタ内のビットをクリアすることと、将来の反復における考慮から前記左の子を除去することと、を有する、請求項２１または２２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概してコンピュータプロセッサの分野に関する。より具体的には、本発明は、１組のベクトル要素にリダクション演算を実行する方法及び装置に関する。
【背景技術】
【０００２】
命令セット又は命令セットアーキテクチャ（ＩＳＡ、ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ）は、プログラミングに関連するコンピュータアーキテクチャの一部であり、ネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割り込み及び例外処理、並びに外部入力及び出力（Ｉ／Ｏ、ｉｎｐｕｔ  ａｎｄ  ｏｕｔｐｕｔ）を含む。本明細書では、「命令」という用語は、一般に、マクロ命令、すなわち、実行のためにプロセッサに提供される命令を指し、マイクロ命令又はマイクロ演算、すなわち、プロセッサのデコーダがマクロ命令を復号して得られるもの、を指すわけではないことに留意されたい。マイクロ命令又はマイクロ演算は、プロセッサ上の実行ユニットに、マクロ命令に関連する論理を実装するように演算を実行するために命令するように構成されることができる。
【０００３】
ＩＳＡは、命令セットを実装するために使用される１組のプロセッサ設計技術であるマイクロアーキテクチャとは区別される。異なるマイクロアーキテクチャを有するプロセッサは、共通の命令セットを共有することができる。例えば、Ｉｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、Ｉｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサ、及びカリフォルニア州サニーベールのアドバンスドマイクロデバイセズ社（Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ、Ｉｎｃ．）のプロセッサは、ｘ８６命令セットとほぼ同じバージョン（幾つかの拡張機能がより新しいバージョンに追加されている）を実装するが、異なる内部設計を有する。例えば、ＩＳＡの同じレジスタアーキテクチャは、専用の物理レジスタ、レジスタリネーミングメカニズム（例えば、レジスタエイリアステーブル（ＲＡＴ、Ｒｅｇｉｓｔｅｒ  Ａｌｉａｓ  Ｔａｂｌｅ）、リオーダバッファ（ＲＯＢ、Ｒｅｏｒｄｅｒ  Ｂｕｆｆｅｒ）及びリタイアメントレジスタファイルの使用）を使用する１つ又は複数の動的に割り当てられる物理レジスタを含む周知の技術を使用して、異なるマイクロアーキテクチャ内に異なる方法で実装されることができる。特記しない限り、本明細書では、レジスタアーキテクチャ、レジスタファイル、及びレジスタという用語は、ソフトウェア／プログラマに可視であるもの及び命令がレジスタを指定する方法を指すように使用される。区別が必要な場合、「論理的」、「アーキテクチャ的」、「ソフトウェア可視的」という形容詞が、レジスタアーキテクチャのレジスタ／ファイルを示すために使用され、一方、異なる形容詞が、所与のマイクロアーキテクチャのレジスタ（例えば、物理レジスタ、リオーダバッファ、リタイアメントレジスタ、レジスタプール）を指定するために使用されるであろう。
【０００４】
命令セットは、１つ又は複数の命令フォーマットを含む。所与の命令フォーマットは、とりわけ、実行される演算及びその演算が実行されるオペランドを指定するための様々なフィールド（ビット数、ビット位置）を定義する。幾つかの命令フォーマットは、命令テンプレート（又はサブフォーマット）の定義で更に分割される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの様々なサブセットを有するように定義されることができ（含まれているフィールドは、通常同じ順序であるが、少なくとも幾つかは、より少ないフィールドが含まれているために様々なビット位置を有する）且つ／又は所与のフィールドが別様に解釈されるように定義されることができる。所与の命令は、所与の命令フォーマットを使用して（且つ、定義されている場合、その命令フォーマットの命令テンプレートのうちの所定の１つで）表現され、演算及びオペランドを指定する。命令ストリームは、命令の特定のシーケンスであり、そのシーケンス内の各命令は、命令フォーマット（及び、定義されている場合、その命令フォーマットの命令テンプレートのうちの所与の１つ）の命令の出現である。
【０００５】
本発明のより良い理解は、以下の図面と併せて以下の詳細な説明から得られることができる。
【図面の簡単な説明】
【０００６】
【図１Ａ】本発明の実施形態による汎用ベクトルフレンドリー命令フォーマット及びその命令テンプレートを示すブロック図である。
【図１Ｂ】本発明の実施形態による汎用ベクトルフレンドリー命令フォーマット及びその命令テンプレートを示すブロック図である。
【０００７】
【図２Ａ】本発明の実施形態による例示的な特定ベクトルフレンドリー命令フォーマットを示すブロック図である。
【図２Ｂ】本発明の実施形態による例示的な特定ベクトルフレンドリー命令フォーマットを示すブロック図である。
【図２Ｃ】本発明の実施形態による例示的な特定ベクトルフレンドリー命令フォーマットを示すブロック図である。
【図２Ｄ】本発明の実施形態による例示的な特定ベクトルフレンドリー命令フォーマットを示すブロック図である。
【０００８】
【図３】本発明の１つの実施形態によるレジスタアーキテクチャのブロック図である。
【０００９】
【図４Ａ】本発明の実施形態による例示的なインオーダフェッチ、復号、リタイアパイプライン、及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。
【００１０】
【図４Ｂ】本発明の実施形態によるプロセッサに含まれるインオーダフェッチ、復号、リタイアコア及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの例示的な実施形態を示すブロック図である。
【００１１】
【図５Ａ】オンダイ相互接続ネットワークへのその接続と共に、単一のプロセッサコアのブロック図である。
【００１２】
【図５Ｂ】本発明の実施形態による図５Ａのプロセッサコアの一部の拡大図を示す。
【００１３】
【図６】本発明の実施形態による統合メモリコントローラ及びグラフィックスを有する単一コアプロセッサ及びマルチコアプロセッサのブロック図である。
【００１４】
【図７】本発明の１つの実施形態によるシステムのブロック図を示す。
【００１５】
【図８】本発明の１つの実施形態による第２のシステムのブロック図を示す。
【００１６】
【図９】本発明の１つの実施形態による第３のシステムのブロック図を示す。
【００１７】
【図１０】本発明の１つの実施形態によるシステムオンチップ（ＳｏＣ、ｓｙｓｔｅｍ  ｏｎ  ａ  ｃｈｉｐ）のブロック図を示す。
【００１８】
【図１１】本発明の実施形態によるソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図を示す。
【００１９】
【図１２】本発明の１つの実施形態によるコンフリクト検出演算がどのように実行され得るかを示す。
【００２０】
【図１３】値ベクトルレジスタ内のデータ要素にリダクション演算を実行する本発明の１つの実施形態を示す。
【００２１】
【図１４】コンフリクトがインデックス値を使用して検出され、ベクトルレジスタ内に格納される方法の追加の詳細を示す。
【００２２】
【図１５】本発明の１つの実施形態によるリダクション演算の実行に関する追加の詳細を示す。
【００２３】
【図１６】本発明の１つの実施形態による方法を示す。
【発明を実施するための形態】
【００２４】
以下の説明では、説明のために、以下に記載される本発明の実施形態の完全な理解を提供するために、多くの具体的な詳細が記載される。しかしながら、当業者には、本発明の実施形態は、これらの具体的な詳細の一部を使用せずに実施されることができることは明らかであろう。他の例では、本発明の実施形態の根本的な原理を不明瞭にすることを避けるために、周知の構造及びデバイスはブロック図の形態で示される。
【００２５】
＜例示的なプロセッサアーキテクチャ及びデータタイプ＞
命令セットは１つ又は複数の命令フォーマットを含む。所与の命令フォーマットは、とりわけ、実行される演算（オペコード）及びその演算が実行される対象のオペランドを指定する様々なフィールド（ビット数、ビットの位置）を定義する。幾つかの命令フォーマットは、命令テンプレート（又はサブフォーマット）の定義で更に分割される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの様々なサブセットを有するように定義されることができ（含まれているフィールドは、通常同じ順序であるが、少なくとも幾つかは、含まれているフィールドが少ないために様々なビット位置を有する）且つ／又は別様に解釈される所与のフィールドを有するように定義されることができる。従って、ＩＳＡの各命令は、所与の命令フォーマットを使用して（及び、定義される場合、その命令フォーマットの命令テンプレートのうちの所与の１つで）表現され、演算及びオペランドを指定するフィールドを含む。例えば、例示的なＡＤＤ命令は、特定のオペコードと、そのオペコードを指定するオペコードフィールド及びオペランド（ソース１／デスティネーション及びソース２）を選択するオペランドフィールドを含む命令フォーマットとを有し、そして命令ストリームにおけるこのＡＤＤ命令の出現は、特定のオペランドを選択するオペランドフィールドに特定の内容を有するであろう。アドバンストベクトル拡張（ＡＶＸ、Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ）（ＡＶＸ１及びＡＶＸ２）と呼ばれ、ベクトル拡張（ＶＥＸ、Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ）符号化スキームを使用する１組のＳＩＭＤ拡張が、存在し、リリースされ、且つ／又は公開されている（例えば、２０１１年１０月発行のインテル（登録商標）６４及びＩＡ−３２アーキテクチャソフトウェア開発者マニュアル及び２０１１年６月発行のインテル（登録商標）アドバンストベクトル拡張プログラミングリファレンスを参照）。
【００２６】
［例示的な命令フォーマット］
本明細書で説明される命令の実施形態は様々なフォーマットで具体化されることができる。更に、例示的なシステム、アーキテクチャ、及びパイプラインが以下に詳述される。命令の実施形態は、そのようなシステム、アーキテクチャ、及びパイプライン上で実行されることができるが、詳述されるものに限定されるものではない。
【００２７】
［Ａ．汎用ベクトルフレンドリー命令フォーマット］
ベクトルフレンドリー命令フォーマットは、ベクトル命令に適する命令フォーマットである（例えば、ベクトル演算に特化したフィールドが存在する）。ベクトル及びスカラー演算の両方がベクトルフレンドリー命令フォーマットによってサポートされる実施形態が説明されているが、代替的な実施形態は、ベクトルフレンドリー命令フォーマットでのベクトル演算のみを使用する。
【００２８】
図１Ａ〜図１Ｂは、本発明の実施形態による汎用ベクトルフレンドリー命令フォーマット及びその命令テンプレートを示すブロック図である。図１Ａは、本発明の実施形態による汎用ベクトルフレンドリー命令フォーマット及びそのクラスＡ命令テンプレートを示すブロック図であり、一方、図１Ｂは、本発明の実施形態による汎用ベクトルフレンドリー命令フォーマット及びそのクラスＢ命令テンプレートを示すブロック図である。具体的には、クラスＡ及びクラスＢ命令テンプレートが定義される汎用ベクトルフレンドリー命令フォーマット１００、それらの命令テンプレートの両方が非メモリアクセス１０５命令テンプレート及びメモリアクセス１２０命令テンプレートを含む。ベクトルフレンドリー命令フォーマットの文脈における汎用という用語は、どの特定の命令セットにも縛られない命令フォーマットを指す。
【００２９】
ベクトルフレンドリー命令フォーマットが次のもの、すなわち、３２ビット（４バイト）又は６４ビット（８バイト）データ要素幅（又はサイズ）を有する６４バイトベクトルオペランド長（又はサイズ）（従って、６４バイトのベクトルは、１６個のダブルワードサイズ要素又は代替的に８個のクォドワードサイズ要素の何れかから構成される）、１６ビット（２バイト）又は８ビット（１バイト）データ要素幅（又はサイズ）を有する６４バイトベクトルオペランド長（又はサイズ）、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、又は８ビット（１バイト）データ要素幅（又はサイズ）を有する３２バイトベクトルオペランド長（又はサイズ）、及び３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、又は８ビット（１バイト）データ要素幅（又はサイズ）を有する１６バイトベクトルオペランド長（又はサイズ）をサポートする本発明の実施形態が説明されることになるが、代替の実施形態は、より多くの、より少ない、及び／又は異なるデータ要素幅（例えば、１２８ビット（１６バイト）データ要素幅）を有する、より多くの、より少ない、及び／又は異なるベクトルオペランドサイズ（例えば、２５６バイトのベクトルオペランド）をサポートすることができる。
【００３０】
図１ＡのクラスＡ命令テンプレートは、１）非メモリアクセス１０５命令テンプレート内に、非メモリアクセス、全丸め制御型演算１１０命令テンプレート及び非メモリアクセス、データ変換型演算１１５命令テンプレートが示され、及び２）メモリアクセス１２０命令テンプレート内に、メモリアクセス、テンポラル（ｔｅｍｐｏｒａｌ）１２５命令テンプレート及びメモリアクセス、非テンポラル１３０命令テンプレートが示されていることを含む。図１ＢのクラスＢ命令テンプレートは、１）非メモリアクセス１０５命令テンプレート内に、非メモリアクセス、書き込みマスク制御、部分丸め制御型演算１１２命令テンプレート及び非メモリアクセス、書き込みマスク制御、ｖｓｉｚｅ型演算１１７命令テンプレートが示され、及び２）メモリアクセス１２０命令テンプレート内に、メモリアクセス、書き込みマスク制御１２７命令テンプレートが示されていることを含む。
【００３１】
汎用ベクトルフレンドリー命令フォーマット１００は、図１Ａ〜１Ｂに示される順序で以下に列挙される以下のフィールドを含む。
【００３２】
フォーマットフィールド１４０  −  このフィールドにおける特定の値（命令フォーマット識別子値）は、ベクトルフレンドリー命令フォーマットを一意的に識別し、従って、命令ストリームにおけるベクトルフレンドリー命令フォーマットでの命令の出現を一意的に識別する。従って、このフィールドは、汎用ベクトルフレンドリー命令フォーマットのみを有する命令セットには必要ないという意味で任意選択的である。
【００３３】
基本演算フィールド１４２  −  その内容は様々な基本演算を識別する。
【００３４】
レジスタインデックスフィールド１４４  −  その内容は、直接又はアドレス生成を介して、ソース及びデスティネーションオペランドの位置を、それらがレジスタであれメモリであれ、指定する。これらは、Ｐ×Ｑ（例えば、３２×５１２、１６×１２８、３２×１０２４、６４×１０２４）のレジスタファイルからＮ個のレジスタを選択するのに十分なビット数を含む。１つの実施形態では、Ｎは最大３つのソース及び１つのデスティネーションレジスタとすることができるが、代替の実施形態は、より多くの又はより少ないソース及びデスティネーションレジスタをサポートすることができる（例えば、そのソースのうちの１つがデスティネーションとしても機能する最大２つのソースをサポートすることができ、そのソースのうちの１つがデスティネーションとしても機能する最大３つのソースをサポートすることができ、最大２つのソース及び１つのデスティネーションをサポートすることができる）。
【００３５】
修飾子フィールド１４６  −  その内容は、メモリアクセスを指定する汎用ベクトル命令フォーマットでの命令の出現を、メモリアクセスを指定しないものから区別する、つまり、非メモリアクセス１０５命令テンプレートとメモリアクセス１２０命令テンプレートとを区別する。メモリアクセス演算は、メモリ階層を読み取り及び／又はそれに書き込む（場合によっては、レジスタ内の値を使用してソース及び／又はデスティネーションアドレスを指定する）が、非メモリアクセス演算はそうしない（例えば、ソース及びデスティネーションがレジスタである）。１つの実施形態では、このフィールドはまた、メモリアドレス計算を実行する３つの異なる方法の間から選択するが、代替的な実施形態は、メモリアドレス計算を実行するより多くの、より少ない、又は異なる方法をサポートすることができる。
【００３６】
増補演算フィールド１５０  −  その内容は、様々な異なる演算のうちのどれが基本演算に加えて実行されるべきかを識別する。このフィールドはコンテキスト固有である。本発明の１つの実施形態では、このフィールドは、クラスフィールド１６８と、アルファフィールド１５２と、ベータフィールド１５４とに分割される。増補演算フィールド１５０は、共通グループの演算が、２つ、３つ、又は４つの命令ではなく、単一の命令で実行されることを可能にする。
【００３７】
スケールフィールド１６０  −  その内容は、メモリアドレス生成のための（例えば、２ｓｃａｌｅ＊インデックス＋ベースを使用するアドレス生成のための）インデックスフィールドの内容のスケーリングを可能にする。
【００３８】
変位（Ｄｉｓｐｌａｃｅｍｅｎｔ）フィールド１６２Ａ  −  その内容は、メモリアドレス生成の一部として（例えば、２ｓｃａｌｅ＊インデックス＋ベース＋変位、を使用するアドレス生成のために）使用される。
【００３９】
変位係数フィールド１６２Ｂ（変位係数フィールド１６２Ｂの真上に変位フィールド１６２Ａが並置されているのは、一方又は他方が使用されることを示すことに留意されたい）  −  その内容は、アドレス生成の一部として（例えば、２ｓｃａｌｅ＊インデックス＋ベース＋スケーリングされた変位、を使用するアドレス生成のために）使用され、その内容は、メモリアクセスのサイズ（Ｎ）によりスケーリングされるべき変位係数を指定する。Ｎは、メモリアクセスにおけるバイト数である。冗長な下位ビットが無視され、従って、変位係数フィールドの内容は、有効アドレスを算出するのに使用される最終変位を生成するために、メモリオペランド合計サイズ（Ｎ）で乗算される。Ｎの値は、フルオペコードフィールド１７４（本明細書において後に説明される）及びデータ操作フィールド１５４Ｃに基づいて、プロセッサハードウェアにより実行時に決定される。変位フィールド１６２Ａ及び変位係数フィールド１６２Ｂは、それらが、非メモリアクセス１０５命令テンプレートのために使用されない、及び／又は、別の実施形態は、その２つのうちの１つのみを実装する可能性がある、又はそのどちらも実装する可能性が無い、という意味で任意選択的である。
【００４０】
データ要素幅フィールド１６４  −  その内容は、多数のデータ要素幅のうちのどれが（幾つかの実施形態では、全ての命令のために、他の実施形態では、命令のうちの一部のみのために）使用されるべきかを識別する。このフィールドは、１つのデータ要素幅のみがサポートされる場合、且つ／又は、データ要素幅がオペコードの或る態様を使用してサポートされる場合、それは必要ではないという意味で任意選択的である。
【００４１】
書き込みマスクフィールド１７０  −  その内容は、データ要素位置毎に、デスティネーションベクトルオペランドにおけるデータ要素位置が基本演算及び増補演算の結果を反映するかどうかを制御する。クラスＡ命令テンプレートは、マージ書き込みマスキングをサポートし、一方、クラスＢ命令テンプレートは、マージ書き込みマスキング及びゼロ化書き込みマスキングの両方をサポートする。マージする場合、ベクトルマスクは、（基本演算及び増補演算により指定される）任意の演算の実行中に、デスティネーション内の任意の組の要素を更新されないように保護することを可能にするが、他の１つの実施形態では、対応するマスクビットが０を有する場合には、デスティネーションの各要素の古い値を保存する。対照的に、ゼロ化する場合、ベクトルマスクは、（基本演算及び増補演算により指定される）任意の演算の実行中に、デスティネーション内の任意の組の要素がゼロ化されることを可能にするが、１つの実施形態では、対応するマスクビットが０値を有する場合、デスティネーションの要素が０に設定される。この機能のサブセットは、実行されている演算のベクトル長（つまり、修正されている要素の、最初から最後のものまでのスパン）を制御する能力である。しかしながら、修正される要素が連続である必要はない。従って、書き込みマスクフィールド１７０は、ロード、格納、算術、論理などを含む部分的なベクトル演算を可能にする。書き込みマスクフィールド１７０の内容が、使用される書き込みマスクを保持する多数の書き込みマスクレジスタの１つを選択する（従って、書き込みマスクフィールド１７０の内容は、実行されるべきマスキングを間接的に識別する）本発明の実施形態が説明されているが、代替的な実施形態では、その代わりに又は追加的に、マスク書き込みフィールド１７０の内容が、実行されるべきマスキングを直接指定することを可能にする。
【００４２】
即値フィールド１７２  −  その内容は即値の指定を可能にする。このフィールドは、即値をサポートしない汎用ベクトルフレンドリーフォーマットの実装には存在しない、及び即値を使用しない命令には存在しないという意味で任意選択的である。
【００４３】
クラスフィールド１６８  −  その内容は様々なクラスの命令を識別する。図１Ａ〜図１Ｂを参照すると、このフィールドの内容はクラスＡ及びクラスＢ命令の間の選択を行う。図１Ａ〜図１Ｂにおいて、特定の値がフィールド（例えば、図１Ａ〜図１Ｂにおいて、それぞれ、クラスフィールド１６８のクラスＡ  １６８Ａ及びクラスＢ  １６８Ｂ）に存在することを示すために、隅が丸い四角が使用される。
【００４４】
［クラスＡの命令テンプレート］
クラスＡの非メモリアクセス１０５命令テンプレートの場合、アルファフィールド１５２は、ＲＳフィールド１５２Ａとして解釈され、その内容は、様々な増補演算タイプのうちのどれが実行されるべきかを識別する（例えば、丸め１５２Ａ．１及びデータ変換１５２Ａ．２は、それぞれ、非メモリアクセス、丸め型演算１１０及び非メモリアクセス、データ変換型演算１１５命令テンプレートに対して指定される）。一方、ベータフィールド１５４は、指定された型の演算のどれが実行されるべきかを識別する。非メモリアクセス１０５命令テンプレートにおいて、スケールフィールド１６０、変位フィールド１６２Ａ、及び変位スケールフィールド１６２Ｂは存在しない。
【００４５】
［非メモリアクセス命令テンプレート−全丸め制御型演算］
非メモリアクセス、全丸め制御型演算１１０の命令テンプレートにおいて、ベータフィールド１５４は、丸め制御フィールド１５４Ａとして解釈され、その内容は静的丸めを提供する。記載されている本発明の実施形態では、丸め制御フィールド１５４Ａは、全浮動小数点例外抑制（ＳＡＥ、ｓｕｐｐｒｅｓｓ  ａｌｌ  ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ  ｅｘｃｅｐｔｉｏｎｓ）フィールド１５６及び丸め演算制御フィールド１５８を含むが、代替的な実施形態は、これらのコンセプトの両方をサポートすることができる、又はこれらのコンセプトの両方を同じフィールドに符号化することができる、或いは、これらのコンセプト／フィールドのうちの一方又は他方のみを有することができる（例えば、丸め演算制御フィールド１５８のみを有することができる）。
【００４６】
ＳＡＥフィールド１５６  −  その内容は例外イベント報告を無効にするか否かを識別する。ＳＡＥフィールド１５６の内容が、抑制が有効であることを示す場合、所与の命令は、如何なる種類の浮動小数点例外フラグも報告せず、且つ如何なる浮動小数点例外ハンドラも起動させない。
【００４７】
丸め演算制御フィールド１５８  −  その内容は、一群の丸め演算のうちのどちら（例えば、切り上げ、切り捨て、ゼロへの丸め、最近接への丸め）を実行するかを識別する。従って、丸め演算制御フィールド１５８は、命令毎の丸めモードの変更を可能にする。プロセッサが丸めモードを指定する制御レジスタを含む本発明の１つの実施形態では、丸め演算制御フィールドの１５０の内容はそのレジスタ値を上書きする。
【００４８】
［非メモリアクセス命令テンプレート  −  データ変換型演算］
非メモリアクセスデータ変換型演算１１５命令テンプレートにおいて、ベータフィールド１５４は、データ変換フィールド１５４Ｂとして解釈され、その内容は、多数のデータ変換（例えば、データ変換無し、スウィズル（ｓｗｉｚｚｌｅ）、ブロードキャスト）のうちのどれが実行されるべきかを識別する。
【００４９】
クラスＡのメモリアクセス１２０命令テンプレートの場合、アルファフィールド１５２は、エビクションヒント（ｅｖｉｃｔｉｏｎ  ｈｉｎｔ）フィールド１５２Ｂとして解釈され、その内容は、エビクションヒントのうちのどれが使用されるべきかを識別する（図１Ａにおいては、テンポラル１５２Ｂ．１及び非テンポラル１５２Ｂ．２が、それぞれ、メモリアクセス、テンポラル１２５命令テンプレート及びメモリアクセス、非テンポラル１３０命令テンプレートに対して指定される）。一方、ベータフィールド１５４は、データ操作フィールド１５４Ｃとして解釈され、その内容は、多数のデータ操作演算（プリミティブとしても知られる）のうちのどちら（例えば、無操作、ブロードキャスト、ソースのアップコンバージョン、及びデスティネーションのダウンコンバージョン）が実行されるべきかを識別する。メモリアクセス１２０命令テンプレートは、スケールフィールド１６０、並びに任意選択的に、変位フィールド１６２Ａ又は変位スケールフィールド１６２Ｂを含む。
【００５０】
ベクトルメモリ命令は、変換サポートを使用して、メモリからのベクトルロード及びメモリへのベクトル格納を実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素単位の様式でメモリから／へデータを転送し、実際に転送される要素は、書き込みマスクとして選択されるベクトルマスクの内容により規定される。
【００５１】
［メモリアクセス命令テンプレート  −  テンポラル］
テンポラルデータは、キャッシングから恩恵を得るのに十分に速やかに再利用される可能性が高いデータである。しかしながら、これはヒントであり、様々なプロセッサは、そのヒントを完全に無視することを含めて、それを様々な方法で実装することができる。
【００５２】
［メモリアクセス命令テンプレート  −  非テンポラル］
非テンポラルデータは、第１のレベルのキャッシュにおいて、キャッシングから恩恵を得るのに十分に速やかに再利用される可能性が低いデータであり、エビクションに優先度を与えるべきである。しかしながら、これはヒントであり、様々なプロセッサは、そのヒントを完全に無視することを含めて、それを様々な方法で実装することができる。
【００５３】
［クラスＢの命令テンプレート］
クラスＢの命令テンプレートの場合、アルファフィールド１５２は、書き込みマスク制御（Ｚ）フィールド１５２Ｃとして解釈され、その内容は、書き込みマスクフィールド１７０により制御される書き込みマスキングがマージであるべきか又はゼロ化であるべきかを識別する。
【００５４】
クラスＢの非メモリアクセス１０５命令テンプレートの場合、ベータフィールド１５４の一部はＲＬフィールド１５７Ａとして解釈され、その内容は、様々な増補演算型のうちのどれが実行されるべきかを識別する（例えば、丸め１５７Ａ．１及びベクトル長（ＶＳＩＺＥ、ｖｅｃｔｏｒ  ｌｅｎｇｔｈ）１５７Ａ．２が、それぞれ、非メモリアクセス、書き込みマスク制御、部分的丸め制御型演算１１２命令テンプレート及び非メモリアクセス、書き込みマスク制御、ＶＳＩＺＥ型演算１１７命令テンプレートに対して指定される）。一方、残りのベータフィールド１５４は指定された型の演算のうちのどれが実行されるべきかを識別する。非メモリアクセス１０５命令テンプレートにおいて、スケールフィールド１６０、変位フィールド１６２Ａ、及び変位スケールファイルド１６２Ｂは、存在しない。
【００５５】
非メモリアクセス、書き込みマスク制御、部分的丸め制御型演算１１２命令テンプレートにおいて、残りのベータフィールド１５４は、丸め演算フィールド１５９Ａとして解釈され、例外イベント報告が無効化される（所与の命令が何れの種類の浮動小数点例外フラグも報告せず、且つ何れの浮動小数点例外ハンドラも起動させない）。
【００５６】
丸め演算制御フィールド１５９Ａ  −  丸め演算制御フィールド１５８と同様に、その内容は、一群の丸め演算のうちのどちら（例えば、切り上げ、切り捨て、ゼロへの丸め、最近接への丸め）を実行すべきかを識別する。従って、丸め演算制御フィールド１５９Ａは命令毎に丸めモードの変更を可能にする。プロセッサが丸めモードを指定するための制御レジスタを含む本発明の１つの実施形態において、丸め演算制御フィールド１５０の内容はそのレジスタ値をオーバーライドする。
【００５７】
非メモリアクセス、書き込みマスク制御、ＶＳＩＺＥ型演算１１７命令テンプレートにおいて、残りのベータフィールド１５４は、ベクトル長フィールド１５９Ｂとして解釈され、その内容は、多数のデータベクトル長のうちのどちら（例えば、１２８、２５６、又は５１２バイト）が実行されるべきかを識別する。
【００５８】
クラスＢのメモリアクセス１２０命令テンプレートの場合、ベータフィールド１５４の一部は、ブロードキャストフィールド１５７Ｂとして解釈され、その内容は、ブロードキャスト型データ操作演算が実行されるべきか否かを識別するが、残りのベータフィールド１５４は、ベクトル長フィールド１５９Ｂとして解釈される。メモリアクセス１２０命令テンプレートは、スケールフィールド１６０及び、任意選択的に、変位フィールド１６２Ａ又は変位スケールフィールド１６２Ｂを含む。
【００５９】
汎用ベクトルフレンドリー命令フォーマット１００に関連して、フォーマットフィールド１４０、基本演算フィールド１４２、及びデータ要素幅フィールド１６４を含むフルオペコードフィールド１７４が示される。フルオペコードフィールド１７４がこれらのフィールドの全てを含む１つの実施形態が示されているが、それらの全てをサポートしない実施形態では、フルオペコードフィールド１７４は、これらのフィールドのうち、全てより少ないフィールドを含む。フルオペコードフィールド１７４は演算コード（オペコード）を提供する。
【００６０】
増補演算フィールド１５０、データ要素幅フィールド１６４、及び書き込みマスクフィールド１７０は、汎用ベクトルフレンドリー命令フォーマットにおいてこれらの機能が命令毎に指定されることを可能にする。
【００６１】
書き込みマスクフィールドとデータ要素幅フィールドとの組み合わせは、それらが様々なデータ要素幅に基づいてマスクが適用されることを可能にするという点で、型付き命令を生成する。
【００６２】
クラスＡ及びクラスＢ内に見られる様々な命令テンプレートは様々な状況で有益である。本発明の幾つかの実施形態では、様々なプロセッサ又はプロセッサ内の様々なコアは、クラスＡのみ、クラスＢのみ、又は両方のクラスをサポートすることができる。例えば、汎用計算向けの高性能汎用アウトオブオーダコアは、クラスＢのみをサポートすることができ、主にグラフィックス及び／又は科学（スループット）計算向けのコアはクラスＡのみをサポートすることができ、両方向けのコアは両方をサポートすることができる（もちろん、両方のクラスからのテンプレート及び命令の幾つかの混合を有しているが、両方のクラスからの全てのテンプレート及び命令を有するわけではないコアは、本発明の範囲内である）。また、単一のプロセッサは複数のコアを含むことができ、コアの全ては同じクラスをサポートする、又は、異なるコアは異なるクラスをサポートする。例えば、別個のグラフィックスコア及び汎用コアを有するプロセッサにおいて、主にグラフィックス及び／又は科学計算向けのグラフィックスコアのうちの１つは、クラスＡのみをサポートすることができるが、汎用コアのうちの１つ又は複数は、クラスＢのみをサポートする汎用計算向けの、アウトオブオーダ実行及びレジスタリネーミングを有する高性能汎用コアとすることができる。別個のグラフィックスコアを有さない別のプロセッサは、クラスＡ及びクラスＢの両方をサポートするもう１つの汎用インオーダ又はアウトオブオーダコアを含むことができる。もちろん、１つのクラスからの機能はまた、本発明の様々な実施形態において、他のクラスに実装されることができる。高級言語で記述されるプログラムは、１）実行のために対象プロセッサによってサポートされるクラスの命令のみを有する形式、又は２）全クラスの命令の様々な組み合わせを使用して記述される代替的なルーチンを有し、コードを現在実行しているプロセッサによってサポートされる命令に基づいて実行するためにルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能な形式にされるであろう（例えば、ジャストインタイムでコンパイルされる又は静的にコンパイルされる）。
【００６３】
［Ｂ．例示的な特定ベクトルフレンドリー命令フォーマット］
図２Ａは、本発明の実施形態による例示的な特定ベクトルフレンドリー命令フォーマットを示すブロック図である。図２Ａは、フィールドの位置、サイズ、解釈、及び順序、並びにそれらのフィールドのうちの幾つかの値を指定するという意味で具体的である特定ベクトルフレンドリー命令フォーマット２００を示す。特定ベクトルフレンドリー命令フォーマット２００は、ｘ８６命令セットを拡張するのに使用されることができ、従って、フィールドの幾つかは、既存のｘ８６命令セット及びそれらの拡張（例えば、ＡＶＸ）に使用されるものと同様又は同じである。このフォーマットは、拡張を有する既存のｘ８６命令セットのプレフィックス符号化フィールド、リアルオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、及び即値フィールドとの整合性を維持する。図２Ａのフィールドが対応付ける図１Ａまたは１Ｂのフィールドが図示されている。
【００６４】
本発明の実施形態が、例示的な目的で汎用ベクトルフレンドリー命令フォーマット１００との関連で、特定ベクトルフレンドリー命令フォーマット２００を参照して説明されているが、本発明は、特許請求の範囲を除き、特定ベクトルフレンドリー命令フォーマット２００に限定されるものではないことが理解されるべきである。例えば、汎用ベクトルフレンドリー命令フォーマット１００は、様々なフィールドの様々な可能なサイズを意図しているが、特定ベクトルフレンドリー命令フォーマット２００は特定のサイズのフィールドを有するものとして示されている。具体的な例として、データ要素幅フィールド１６４は特定ベクトルフレンドリー命令フォーマット２００で１ビットフィールドとして示されるが、本発明はそのように限定されるものではない（つまり、汎用ベクトルフレンドリー命令フォーマット１００はデータ要素幅フィールド１６４の他のサイズを意図する）。
【００６５】
汎用ベクトルフレンドリー命令フォーマット１００は、図２Ａに示される順序で以下に列挙される次のフィールドを含む。
【００６６】
ＥＶＥＸプレフィックス（バイト０〜３）２０２  −  ４バイトの形式で符号化される。
【００６７】
フォーマットフィールド１４０（ＥＶＥＸバイト０、ビット［７：０］）  −  第１バイト（ＥＶＥＸバイト０）はフォーマットフィールド１４０であり、０ｘ６２（本発明の１つの実施形態では、ベクトルフレンドリー命令フォーマットを識別するのに使用される固有の値）を保持する。
【００６８】
第２〜第４バイト（ＥＶＥＸバイト１〜３）は、特定の機能を提供する多数のビットフィールドを含む。
【００６９】
ＲＥＸフィールド２０５（ＥＶＥＸバイト１、ビット［７〜５］）  −  ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）、及び１５７ＢＥＸバイト１、ビット［５］−Ｂ）からなる。ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、及びＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同じ機能を提供し、１の補数形式を使用して符号化される。すなわち、ＺＭＭ０が１１１１Ｂと符号化され、ＺＭＭ１５が００００Ｂと符号化される。命令の他のフィールドは、当技術分野では知られているように、レジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ、ｂｂｂ）を符号化し、これにより、Ｒｒｒｒ、Ｘｘｘｘ、及びＢｂｂｂが、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、及びＥＶＥＸ．Ｂを加算することによって形成されることができる。
【００７０】
ＲＥＸ'フィールド２１０  −  これは、ＲＥＸ'フィールド２１０の第１の部分であり、拡張３２レジスタセットの上位１６個又は下位１６個の何れかを符号化するのに使用されるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ'）である。本発明の１つの実施形態では、このビットは、以下に示されるように他のものと共に、ＢＯＵＮＤ命令から（周知のｘ８６の３２ビットモードで）区別するために、ビット反転フォーマットで格納され、そのリアルオペコードバイトは、６２であるが、（以下に説明される）ＭＯＤ  Ｒ／ＭフィールドにおいてＭＯＤフィールドにおける１１の値を受け取らない。本発明の代替的な実施形態は、これ及び以下に示される他のビットを反転形式で格納しない。１の値は下位１６個のレジスタを符号化するのに使用される。言い換えれば、Ｒ'Ｒｒｒｒは、ＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ、及び他のフィールドからの他のＲＲＲを組み合わせて形成される。
【００７１】
オペコードマップフィールド２１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）  −  その内容は、暗黙の先頭のオペコードバイト（０Ｆ、０Ｆ３８、又は０Ｆ３）を符号化する。
【００７２】
データ要素幅フィールド１６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）  −  ＥＶＥＸ．Ｗという表記によって表される。ＥＶＥＸ．Ｗは、データ型（３２ビットのデータ要素又は６４ビットのデータ要素の何れか）の粒度（サイズ）を定義するのに使用される。
【００７３】
ＥＶＥＸ．ｖｖｖｖ２２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）  −  ＥＶＥＸ．ｖｖｖｖの役割は、１）ＥＶＥＸ．ｖｖｖｖは、反転（１の補数）の形式で指定される第１ソースレジスタオペランドを符号化し、２つ以上のソースオペランドを有する命令に有効であること、２）ＥＶＥＸ．ｖｖｖｖは、特定のベクトルシフトに対して１の補数形式で指定されるデスティネーションレジスタオペランドを符号化すること、又は、３）ＥＶＥＸ．ｖｖｖｖは何れのオペランドも符号化しない、フィールドはリザーブされ、１１１１ｂを保持すべきであること、を含むことができる。従って、ＥＶＥＸ．ｖｖｖｖフィールド２２０は、反転（１の補数）形式で格納される第１ソースレジスタ指定子の４つの下位ビットを符号化する。命令に応じて、追加の異なるＥＶＥＸビットフィールドが指定子サイズを３２レジスタに拡張するのに使用される。
【００７４】
ＥＶＥＸ．Ｕ１６８クラスフィールド（ＥＶＥＸバイト２、ビット［２］−Ｕ）  −  ＥＶＥＸ．Ｕ＝０の場合、クラスＡ又はＥＶＥＸ．Ｕ０を示し、ＥＶＥＸ．Ｕ＝１の場合、クラスＢ又はＥＶＥＸ．Ｕ１を示す。
【００７５】
プレフィックス符号化フィールド２２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）  −  基本演算フィールドに対して追加のビットを提供する。ＥＶＥＸプレフィックスフォーマットでのレガシＳＳＥ命令に対するサポートを提供することに加えて、これは、ＳＩＭＤプレフィックスをコンパクトにするという便益も有する（ＳＩＭＤプレフィックスを表すのに１バイトを必要とするのではなく、ＥＶＥＸプレフィックスは、２ビットのみを必要とする）。１つの実施形態では、レガシフォーマット及びＥＶＥＸプレフィックスフォーマットの両方でのＳＩＭＤプレフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を使用するレガシＳＳＥ命令をサポートするために、これらのレガシＳＩＭＤプレフィックスは、ＳＩＭＤプレフィックス符号化フィールドに符号化され、デコーダのＰＬＡに提供される前に実行時にレガシＳＩＭＤプレフィックスに拡張される（それにより、ＰＬＡは、修正せずにこれらのレガシ命令のレガシ及びＥＶＥＸフォーマットの両方を実行することができる）。より新たな命令は、ＥＶＥＸプレフィックス符号化フィールドの内容をオペコード拡張として直接使用することができるであろうが、特定の実施形態は、整合性のために同様の様式で拡張させるが、これらのレガシＳＩＭＤプレフィックスにより異なる意味が指定されることを可能にする。代替的な実施形態は、２ビットＳＩＭＤプレフィックス符号化をサポートし、従って、拡張を必要としないようにＰＬＡを再設計することができる。
【００７６】
アルファフィールド１５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ、また、ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．書き込みマスク制御、及びＥＶＥＸ．Ｎとしても知られ、αで示される）  −  前述のように、このフィールドは、コンテキスト固有である。
【００７７】
ベータフィールド１５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、また、ＥＶＥＸ．ｓ２−０、ＥＶＥＸ．ｒ２−０、ＥＶＥＸ．ｒｒｌ、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られ、βββで示される）  −  前述のように、このフィールドはコンテキスト固有である。
【００７８】
ＲＥＸ'フィールド２１０  −  これは、残りのＲＥＸ'フィールドであり、拡張３２レジスタセットの上位１６個又は下位１６個の何れかを符号化するのに使用されることができるＥＶＥＸ．Ｖ'ビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ'）である。このビットはビット反転フォーマットで格納される。値１は、下位１６個のレジスタを符号化するのに使用される。言い換えれば、Ｖ'ＶＶＶＶは、ＥＶＥＸ．Ｖ'とＥＶＥＸ．ｖｖｖｖとを組み合わせすることによって形成される。
【００７９】
書き込みマスクフィールド１７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）  −  前述のように、その内容は、書き込みマスクレジスタにおけるレジスタのインデックスを指定する。本発明の１つの実施形態において、特定の値ＥＶＥＸ．ｋｋｋ＝０００は、書き込みマスクが特定の命令に対して使用されないことを示唆する特定の動作を有する（これは、全て１に配線された書き込みマスク又はマスクするハードウェアを迂回するハードウェアの使用を含む様々な方式で実装されることができる）。
【００８０】
リアルオペコードフィールド２３０（バイト４）は、オペコードバイトとしても知られている。オペコードの一部はこのフィールドにおいて指定される。
【００８１】
ＭＯＤ  Ｒ／Ｍフィールド２４０（バイト５）は、ＭＯＤフィールド２４２、Ｒｅｇフィールド２４４、及びＲ／Ｍフィールド２４６を含む。前述したように、ＭＯＤフィールド２４２の内容は、メモリアクセス演算と非メモリアクセス演算とを区別する。Ｒｅｇフィールド２４４の役割は、デスティネーションレジスタオペランドもしくはソースレジスタオペランドの何れかを符号化すること、又は、オペコード拡張として扱われ、何れの命令オペランドを符号化するのにも使用されないことという２つの状況に要約されることができる。Ｒ／Ｍフィールド２４６の役割は、メモリアドレスを参照する命令オペランドを符号化すること、又は、デスティネーションレジスタオペランドもしくはソースレジスタオペランドの何れかを符号化することを含むことができる。
【００８２】
スケール、インデックス、ベース（ＳＩＢ）バイト（バイト６）  −  前述のように、スケールフィールドの１５０の内容は、メモリアドレス生成に使用される。ＳＩＢ．ｘｘｘ２５４及びＳＩＢ．ｂｂｂ２５６  −  これらのフィールドの内容は、レジスタインデックスＸｘｘｘ及びＢｂｂｂに関連して以前に参照されている。
【００８３】
変位フィールド１６２Ａ（バイト７〜１０）  −  ＭＯＤフィールド２４２が１０を保持する場合、バイト７〜１０は変位フィールド１６２Ａであり、レガシ３２ビット変位（ｄｉｓｐ３２）と同じように機能し、バイト粒度で機能する。
【００８４】
変位係数フィールド１６２Ｂ（バイト７）−ＭＯＤフィールド２４２が０１を保持する場合、バイト７は変位係数フィールド１６２Ｂである。このフィールドの位置は、バイト粒度で機能するレガシｘ８６命令セット８ビット変位（ｄｉｓｐ８）の位置と同じである。ｄｉｓｐ８は符号拡張されているので、−１２８から１２７バイトのオフセットの間のみでアドレス指定することができる。６４バイトのキャッシュラインに関して、ｄｉｓｐ８は、実際に有用な４つの値−１２８、−６４、０、及び６４のみに設定可能な８ビットを使用する。より広範囲が度々必要とされるので、ｄｉｓｐ３２が使用される。しかしながら、ｄｉｓｐ３２は、４バイトを必要とする。ｄｉｓｐ８及びｄｉｓｐ３２とは対照的に、変位係数フィールド１６２Ｂは、ｄｉｓｐ８の再解釈であり、変位係数フィールド１６２Ｂを使用する場合、実際の変位は、変位係数フィールドの内容にメモリオペランドアクセスのサイズ（Ｎ）を乗算することにより決定される。このタイプの変位は、ｄｉｓｐ８＊Ｎと称される。これは、平均命令長（単一のバイトが変位に使用されるが、はるかに大きい範囲を有する）を低減させる。そのような圧縮された変位は、有効変位がメモリアクセスの粒度の倍数であり、従って、アドレスオフセットの冗長下位ビットは符号化される必要はないという前提に基づくものである。言い換えれば、変位係数フィールド１６２Ｂは、レガシｘ８６命令セット８ビット変位の代わりとなる。従って、変位係数フィールド１６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８＊Ｎに多重定義されることを唯一の例外として、ｘ８６命令セット８ビット変位と同じ方式で符号化される（それで、ＭｏｄＲＭ／ＳＩＢ符号化規則において変更はない）。言い換えれば、符号化規則又は符号化長に変更はないが、ハードウェアによる変位値の解釈にのみ変更がある（ハードウェアは、バイト単位のアドレスオフセットを得るために、メモリオペランドのサイズにより変位をスケーリングする必要がある）。
【００８５】
即値フィールド１７２は前述のように動作する。
【００８６】
［フルオペコードフィールド］
図２Ｂは、本発明の１つの実施形態によるフルオペコードフィールド１７４を構成する特定ベクトルフレンドリー命令フォーマット２００のフィールドを示すブロック図である。具体的に、フルオペコードフィールド１７４は、フォーマットフィールド１４０、基本演算フィールド１４２、及びデータ要素幅（Ｗ）フィールド１６４を含む。基本演算フィールド１４２は、プレフィックス符号化フィールド２２５、オペコードマップフィールド２１５、及びリアルオペコードフィールド２３０を含む。
【００８７】
［レジスタインデックスフィールド］
図２Ｃは、本発明の１つの実施形態によるレジスタインデックスフィールド１４４を構成する特定ベクトルフレンドリー命令フォーマット２００のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド１４４は、ＲＥＸフィールド２０５、ＲＥＸ'フィールド２１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド２４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド２４６、ＶＶＶＶフィールド２２０、ｘｘｘフィールド２５４、及びｂｂｂフィールド２５６を含む。
【００８８】
［増補演算フィールド］
図２Ｄは、本発明の１つの実施形態による増補演算フィールド１５０を構成する特定ベクトルフレンドリー命令フォーマット２００のフィールドを示すブロック図である。クラス（Ｕ）フィールド１６８は、０を含む場合、ＥＶＥＸ．Ｕ０（クラスＡ  １６８Ａ）を表し、１を含む場合、ＥＶＥＸ．Ｕ１（クラスＢ  １６８Ｂ）を表す。Ｕ＝０であり、ＭＯＤフィールド２４２が１１を含む（非メモリアクセス演算を表す）場合、アルファフィールド１５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）はｒｓフィールド１５２Ａとして解釈される。ｒｓフィールド１５２Ａが１を含む場合（丸め１５２Ａ．１）、ベータフィールド１５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、丸め制御フィールド１５４Ａとして解釈される。丸め制御フィールド１５４Ａは、１ビットのＳＡＥフィールド１５６及び２ビットの丸め演算フィールド１５８を含む。ｒｓフィールド１５２Ａが０を含む場合（データ変換１５２Ａ．２）、ベータフィールド１５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ変換フィールド１５４Ｂとして解釈される。Ｕ＝０であり、ＭＯＤフィールド２４２が００、０１、又は１０を含む（メモリアクセス演算を表す）場合、アルファフィールド１５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、エビクションヒント（ＥＨ）フィールド１５２Ｂとして解釈され、ベータフィールド１５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ操作フィールド１５４Ｃとして解釈される。
【００８９】
Ｕ＝１の場合、アルファフィールド１５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、書き込みマスク制御（Ｚ）フィールド１５２Ｃとして解釈される。Ｕ＝１であり、ＭＯＤフィールド２４２が１１を含む（非メモリアクセス演算を表す）場合、ベータフィールド１５４（ＥＶＥＸバイト３、ビット［４］−Ｓ０）の一部は、ＲＬフィールド１５７Ａとして解釈され、フィールド１５７Ａが１を含む場合（丸め１５７Ａ．１）、残りのベータフィールド１５４（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）は丸め演算フィールド１５９Ａとして解釈される。一方、ＲＬフィールド１５７Ａが０を含む場合（ＶＳＩＺＥ１５７．Ａ２）、残りのベータフィールド１５４（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）は、ベクトル長フィールド１５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）として解釈される。Ｕ＝１であり、ＭＯＤフィールド２４２が００、０１、又は１０を含む（メモリアクセス演算を表す）場合、ベータフィールド１５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ベクトル長フィールド１５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）及びブロードキャストフィールド１５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）として解釈される。
【００９０】
［Ｃ．例示的なレジスタアーキテクチャ］
図３は、本発明の１つの実施形態によるレジスタアーキテクチャ３００のブロック図である。図示されている実施形態には、５１２ビット幅の３２個のベクトルレジスタ３１０が存在し、これらのレジスタは、ｚｍｍ０〜ｚｍｍ３１として参照される。下位１６個のｚｍｍレジスタの下位２５６ビットは、レジスタｙｍｍ０〜１６上に重ね合わされる。下位１６個のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０〜１５上に重ね合わされる。特定ベクトルフレンドリー命令フォーマット２００は、以下の表に示されるように、重ね合わされたこれらのレジスタファイルに対して演算する。
【表１】
0006699845.tif 000002
【００９１】
言い換えれば、ベクトル長フィールド１５９Ｂは、最大長と、１つ又は複数の他のより短い長さとの間で選択し、そのようなより短い長さの各々は、直前の長さの半分の長さであり、ベクトル長フィールド１５９Ｂを有しない命令テンプレートは、最大のベクトル長に対して演算する。更に、１つの実施形態では、特定ベクトルフレンドリー命令フォーマット２００のクラスＢの命令テンプレートは、パックド又はスカラー単精度／倍精度浮動小数点データ及びパックド又はスカラー整数データに対して演算する。スカラー演算は、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタ内の最下位のデータ要素位置に対して実行される演算であり、それより上位のデータ要素位置は、実施形態に応じて、命令前に存在したもののままにされるか又はゼロ化されるかの何れかである。
【００９２】
書き込みマスクレジスタ３１５  −  図示されている実施形態では、それぞれサイズが６４ビットの８個の書き込みマスクレジスタ（ｋ０〜ｋ７）が存在する。代替的な実施形態では、書き込みマスクレジスタ３１５は、サイズが１６ビットである。前述のように、本発明の１つの実施形態では、ベクトルマスクレジスタｋ０は、書き込みマスクとして使用されることができない。通常、ｋ０を示すであろう符号化が書き込みマスクに対して使用される場合、符号化は、０ｘＦＦＦＦに配線された書き込みマスクを選択し、その命令に対して書き込みマスキングを実際上無効にする。
【００９３】
汎用レジスタ３２５  −  図示されている実施形態では、メモリオペランドをアドレス指定するために既存のｘ８６アドレスモードと共に使用される１６個の６４ビットの汎用レジスタが存在する。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、及びＲ８〜Ｒ１５という名称により参照される。
【００９４】
ＭＭＸパックド整数フラットレジスタファイル３５０がエイリアスされるスカラー浮動小数点スタックレジスタファイル（ｘ８７スタック）３４５  −  図示されている実施形態では、ｘ８７スタックは、ｘ８７命令セット拡張を使用して３２／６４／８０ビットの浮動小数点データに対してスカラー浮動小数点演算を実行するのに使用される８要素スタックであり、一方、ＭＭＸレジスタは、６４ビットパックド整数データに対して演算を実行すると共に、ＭＭＸレジスタとＸＭＭレジスタとの間で実行される幾つかの演算用のオペランドを保持するのに使用される。
【００９５】
本発明の代替的な複数の実施形態は、より広い又はより狭いレジスタを使用することができる。更に、本発明の代替的な実施形態は、より多くの、より少ない、又は異なるレジスタファイル及びレジスタを使用することができる。
【００９６】
［Ｄ．例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ］
プロセッサコアは、種々の目的で、種々のプロセッサにおいて、且つ種々の方法で実装されることができる。例えば、そのようなコアの実装は、１）汎用コンピューティング向けの汎用インオーダコア、２）汎用コンピューティング向けの高性能汎用アウトオブオーダコア、３）主としてグラフィックス及び／又は科学（スループット）コンピューティング向けの専用コアを含むことができる。種々のプロセッサの実装は、１）汎用コンピューティング向けの１つもしくは複数の汎用インオーダコア及び／又は汎用コンピューティング向けの１つもしくは複数の汎用アウトオブオーダコアを含むＣＰＵ、並びに２）主としてグラフィックス及び／又は科学（スループット）向けの１つ又は複数の専用コアを含むコプロセッサを含むことができる。そのような種々のプロセッサは、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内にある別個のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、統合グラフィックス論理及び／もしくは科学（スループット）論理などの専用論理又は専用コアと呼ばれることがある）、並びに４）説明したＣＰＵ（アプリケーションコア又はアプリケーションプロセッサと呼ばれることがある）、上述のコプロセッサ、及び追加の機能を同じダイ上に含むことができるシステムオンチップ、を含むことができる種々のコンピュータシステムアーキテクチャをもたらす。例示的なコアアーキテクチャを次に説明し、その後、例示的なプロセッサ及びコンピュータアーキテクチャを説明する。
【００９７】
図４Ａは、本発明の実施形態による例示的なインオーダパイプライン及び例示的なレジスタリネーム、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図４Ｂは、インオーダアーキテクチャコアの例示的な実施形態及び本発明の実施形態によるプロセッサに含まれる例示的なレジスタリネーム、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図４Ａ及び図４Ｂにおける実線のボックスは、インオーダパイプライン及びインオーダコアを示し、一方、破線のボックスの任意選択的追加は、レジスタリネーム、アウトオブオーダ発行／実行パイプライン及びコアを示す。インオーダの態様はアウトオブオーダの態様のサブセットであることを考慮して、アウトオブオーダの態様を説明することにする。
【００９８】
図４Ａにおいて、プロセッサパイプライン４００は、フェッチステージ４０２、長さ復号ステージ４０４、復号ステージ４０６、アロケーションステージ４０８、リネームステージ４１０、スケジューリング（ディスパッチ又は発行としても知られている）ステージ４１２、レジスタ読み出し／メモリ読み出しステージ４１４、実行ステージ４１６、書き戻し／メモリ書き込みステージ４１８、例外処理ステージ４２２、及びコミットステージ４２４を含む。
【００９９】
図４Ｂは、実行エンジンユニット４５０に結合されるフロントエンドユニット４３０を含むプロセッサコア４９０を示し、その両方ともメモリユニット４７０に結合される。コア４９０は、縮小命令セットコンピューティング（ＲＩＳＣ、ｒｅｄｕｃｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｉｎｇ）コア、複合命令セットコンピューティング（ＣＩＳＣ、ｃｏｍｐｌｅｘ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｉｎｇ）コア、超長命令語（ＶＬＩＷ、ｖｅｒｙ  ｌｏｎｇ  ｉｎｓｔｒｕｃｔｉｏｎ  ｗｏｒｄ）コア、又はハイブリッドもしくは代替的なコアタイプとすることができる。更に別の選択肢として、コア４９０は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット（ＧＰＧＰＵ、ｇｅｎｅｒａｌ  ｐｕｒｐｏｓｅ  ｃｏｍｐｕｔｉｎｇ  ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）コア、グラフィックスコア、又は同様のものなどの専用コアとすることができる。
【０１００】
フロントエンドユニット４３０は、命令キャッシュユニット４３４に結合される分岐予測ユニット４３２を含み、命令キャッシュユニット４３４は、命令トランスレーションルックアサイドバッファ（ＴＬＢ、ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ）４３６に結合され、命令ＴＬＢ４３６は、命令フェッチユニット４３８に結合され、命令フェッチユニット４３８は、復号ユニット４４０に結合される。復号ユニット４４０（デコーダ）は、命令を復号することができ、元の命令から復号される、又はそうでなければ、元の命令を表す、もしくは元の命令から派生される１つ又は複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成することができる。復号ユニット４４０は、様々な異なるメカニズムを使用して実装されることができる。適したメカニズムの例としては、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ、ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ａｒｒａｙ）、マイクロコードリードオンリメモリ（ＲＯＭ、ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）などを含むが、これらに限定されるものではない。１つの実施形態では、コア４９０は、或る特定のマクロ命令用のマイクロコードを（例えば、復号ユニット４４０に、又はそうでなければ、フロントエンドユニット４３０内に）格納するマイクロコードＲＯＭ又は他の媒体を含む。復号ユニット４４０は、実行エンジンユニット４５０内のリネーム／アロケータユニット４５２に結合される。
【０１０１】
実行エンジンユニット４５０は、リタイアメントユニット４５４及び１組の１つ又は複数のスケジューラユニット４５６に結合されるリネーム／アロケータユニット４５２を含む。スケジューラユニット４５６は、予約ステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット４５６は、物理レジスタファイルユニット４５８に結合される。物理レジスタファイルユニット４５８のそれぞれは、１つ又は複数の物理レジスタファイルを表し、物理レジスタファイルのうちの異なるものは、スカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行されるべき次の命令のアドレスである命令ポインタ）などのような、１つ又は複数の異なるデータタイプを格納する。１つの実施形態では、物理レジスタファイルユニット４５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラーレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供することができる。物理レジスタファイルユニット４５８は、（例えば、リオーダバッファ及びリタイアメントレジスタファイルを使用して、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを使用して、レジスタマップ及びレジスタのプールを使用して、などで）レジスタリネーミング及びアウトオブオーダ実行が実装されることができる様々な方式を示すようにリタイアメントユニット４５４によりオーバラップされる。リタイアメントユニット４５４及び物理レジスタファイルユニット４５８は、実行クラスタ４６０に結合される。実行クラスタ４６０は、１組の１つ又は複数の実行ユニット４６２及び１組の１つ又は複数のメモリアクセスユニット４６４を含む。実行ユニット４６２は、様々なタイプのデータ（例えば、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して、様々な演算（例えば、シフト、加算、減算、乗算）を実行することができる。幾つかの実施形態は、特定の機能又は複数組の機能に専用の多数の実行ユニットを含むことができるが、他の実施形態は、全ての機能を全て実行するたった１つの実行ユニット又は複数の実行ユニットを含むことができる。スケジューラユニット４５６、物理レジスタファイルユニット４５８、及び実行クラスタ４６０は、複数である可能性があるとして示される。それは、特定の実施形態は、或る特定のタイプのデータ／演算に対して別個のパイプライン（例えば、それぞれがそれら自身のスケジューラユニット、物理レジスタファイルユニット、及び／又は実行クラスタを有する、スカラー整数パイプライン、スカラー浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／又はメモリアクセスパイプライン  −  別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット４６４を有する或る特定の実施形態が実装される）を作成するからである。別個のパイプラインが使用される場合、これらのパ��プラインのうちの１つ又は複数はアウトオブオーダ発行／実行とすることができ、残りはインオーダとすることができることも理解されるべきである。
【０１０２】
１組のメモリアクセスユニット４６４は、レベル２（Ｌ２、ｌｅｖｅｌ  ２）キャッシュユニット４７６に結合されるデータキャッシュユニット４７４に結合されるデータＴＬＢユニット４７２を含むメモリユニット４７０に結合される。１つの例示的な実施形態では、メモリアクセスユニット４６４は、ロードユニット、アドレス格納ユニット、及びデータ格納ユニットを含むことができ、それらのそれぞれは、メモリユニット４７０内のデータＴＬＢユニット４７２に結合される。命令キャッシュユニット４３４は、メモリユニット４７０内のレベル２（Ｌ２）キャッシュユニット４７６に更に結合される。Ｌ２キャッシュユニット４７６は、１つ又は複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
【０１０３】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン４００を実装することができる。１）命令フェッチ４３８がフェッチ及び長さ復号ステージ４０２及び４０４を実行し、２）復号ユニット４４０が復号ステージ４０６を実行し、３）リネーム／アロケータユニット４５２がアロケーションステージ４０８及びリネーミングステージ４１０を実行し、４）スケジューラユニット４５６がスケジューリングステージ４１２を実行し、５）物理レジスタファイルユニット４５８及びメモリユニット４７０がレジスタ読み取り／メモリ読み取りステージ４１４を実行し、実行クラスタ４６０が実行ステージ４１６を実行し、６）メモリユニット４７０及び物理レジスタファイルユニット４５８が書き戻し／メモリ書き込みステージ４１８を実行し、７）様々なユニットが例外処理ステージ４２２に関与し得、且つ８）リタイアメントユニット４５４及び物理レジスタファイルユニット４５８がコミットステージ４２４を実行する。
【０１０４】
コア４９０は、本明細書で説明される命令を含む１つ又は複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンに加えられた幾つかの拡張を有する）、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズ社のＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングス社の（ＮＥＯＮのような任意選択的な追加の拡張を有する）ＡＲＭ命令セット）をサポートすることができる。１つの実施形態では、コア４９０は、パックドデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートする論理を含み、それにより、多くのマルチメディアアプリケーションにより使用される複数の演算がパックドデータを使用して実行されることを可能にする。
【０１０５】
コアは、マルチスレッディング（２つ以上の組の演算又はスレッドを並列に実行すること）をサポートすることができ、タイムスライスドマルチスレッディング、同時マルチスレッディング（単一の物理コアは、物理コアが同時にマルチスレッディングしているスレッドのそれぞれに対して論理コアを提供する）、又はこれらの組み合わせ（例えば、インテル（登録商標）ハイパースレッディングテクノロジなどでのタイムスライスドフェッチ及び復号化並びにその後の同時マルチスレッディング）を含む様々な方法でサポートすることができることが理解されるべきである。
【０１０６】
レジスタリネーミングがアウトオブオーダ実行との関連で説明されるが、レジスタリネーミングは、インオーダアーキテクチャでも使用されることができることが理解されるべきである。プロセッサの図示の実施形態は、別個の命令及びデータキャッシュユニット４３４／４７４及び共有のＬ２キャッシュユニット４７６も含むが、代替的な実施形態は、例えば、レベル１（Ｌ１、Ｌｅｖｅｌ  １）内部キャッシュ又は複数のレベルの内部キャッシュのような、命令及びデータの両方用の単一の内部キャッシュを有することができる。幾つかの実施形態では、システムは、内部キャッシュと、コア及び／又はプロセッサの外部に存在する外部キャッシュとの組み合わせを含むことができる。代替的に、キャッシュの全ては、コア及び／又はプロセッサの外部とすることができる。
【０１０７】
図５Ａ〜５Ｂは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、そのインオーダコアは、チップ内の幾つかの論理ブロック（同じタイプ及び／又は異なるタイプの他のコアを含む）のうちの１つであろう。論理ブロックは、高帯域幅相互接続ネットワーク（例えば、リングネットワーク）を介して、用途に応じて、幾つかの固定の機能論理、メモリＩ／Ｏインターフェース、及び他の必要なＩ／Ｏ論理と通信する。
【０１０８】
図５Ａは、本発明の複数の実施形態によるオンダイ相互接続ネットワーク５０２との接続及びそのレベル２（Ｌ２）キャッシュ５０４のローカルサブセットとの、単一のプロセッサコアのブロック図である。１つの実施形態では、命令デコーダ５００は、パックドデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ５０６は、スカラーユニット及びベクトルユニットへのキャッシュメモリに低レイテンシーアクセスを可能にする。（設計を簡略化するために）１つの実施形態では、スカラーユニット５０８及びベクトルユニット５１０は、別個のレジスタセット（それぞれ、スカラーレジスタ５１２及びベクトルレジスタ５１４）を使用し、それらの間で転送されるデータはメモリに書き込まれ、次に、レベル１（Ｌ１）キャッシュ５０６から読み戻されるが、本発明の代替的な実施形態は、異なるアプローチを使用する（例えば、単一のレジスタセットを使用する、又は、データを、書き込み及び読み戻しせずに、２つのレジスタファイル間で転送することを可能にする通信経路を含む）ことができる。
【０１０９】
Ｌ２キャッシュのローカルサブセット５０４は、プロセッサコア毎に１つの別個のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、それ自身のＬ２キャッシュのローカルサブセット５０４への直接アクセス経路を有する。プロセッサコアにより読み取られるデータは、そのＬ２キャッシュサブセット５０４に格納され、他のプロセッサコアがそれら自身のローカルＬ２キャッシュサブセットにアクセスすることと並列に、迅速にアクセスされることができる。プロセッサコアにより書き込まれるデータは、それ自身のＬ２キャッシュサブセット５０４に格納され、必要であれば、他のサブセットからフラッシュされる。リングネットワークは共有データに対して整合性を確保する。リングネットワークは、プロセッサコア、Ｌ２キャッシュ、及び他の論理ブロックなどのエージェントがチップ内で互いに通信することを可能にするために双方向である。各リングデータ経路は方向毎に１０１２ビット幅である。
【０１１０】
図５Ｂは、本発明の実施形態による図５Ａのプロセッサコアの一部の拡大図である。図５Ｂは、Ｌ１キャッシュ５０６のＬ１データキャッシュ５０６Ａ部分、並びに、ベクトルユニット５１０及びベクトルレジスタ５１４に関するさらなる詳細を含む。具体的には、ベクトルユニット５１０は、１６−ｗｉｄｅベクトル処理ユニット（ＶＰＵ、ｖｅｃｔｏｒ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）（１６−ｗｉｄｅＡＬＵ５２８を参照）であり、整数命令、単精度浮動命令、及び倍精度浮動命令のうちの１つ又は複数を実行する。ＶＰＵは、スウィズルユニット５２０によるレジスタ入力のスウィズル、数値変換ユニット５２２Ａ〜Ｂによる数値変換、及び複製ユニット５２４によるメモリ入力への複製をサポートする。書き込みマスクレジスタ５２６は、結果として生じるベクトル書き込みを断定することを可能にする。
【０１１１】
図６は、本発明の実施形態による２つ以上のコアを有することができ、統合メモリコントローラを有することができ、且つ統合グラフィックスを有することができるプロセッサ６００のブロック図である。図６の実線のボックスは、単一コア６０２Ａ、システムエージェント６１０、１組の１つ又は複数のバスコントローラユニット６１６を有するプロセッサ６００を示し、一方、破線のボックスの任意選択的な追加は、複数のコア６０２Ａ〜Ｎ、システムエージェントユニット６１０内の１組の１つ又は複数の統合メモリコントローラユニット６１４、及び専用論理６０８を有する代替的なプロセッサ６００を示す。
【０１１２】
従って、プロセッサ６００の様々な実装は、１）統合グラフィックス及び／又は（１つ又は複数のコアを含むことができる）科学（スループット）論理である専用論理６０８と１つ又は複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、その２つの組み合わせ）であるコア６０２Ａ〜Ｎとを有するＣＰＵ、２）主にグラフィックス及び／又は科学（スループット）向けの多数の専用コアであるコア６０２Ａ〜Ｎを有するコプロセッサ、並びに３）多数の汎用インオーダコアであるコア６０２Ａ〜Ｎを有するコプロセッサを含むことができる。従って、プロセッサ６００は、汎用プロセッサ、コプロセッサ、又は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、ハイスループット多集積コア（ＭＩＣ、ｍａｎｙ  ｉｎｔｅｇｒａｔｅｄ  ｃｏｒｅ）コプロセッサ（３０以上のコアを含む）、組み込みプロセッサなどの専用プロセッサとすることができる。プロセッサは１つ又は複数のチップ上に実装されることができる。プロセッサ６００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ，又はＮＭＯＳなどの多数の処理技術のうちの任意のものを使用して、１つもしくは複数の基板の一部とすることができ、及び／又はその上に実装されることができる。
【０１１３】
メモリ階層は、コア内の１つ又は複数のレベルのキャッシュ、１組の１つ又は複数の共有キャッシュユニット６０６、及び１組の統合メモリコントローラユニット６１４に結合される外部メモリ（図示せず）を含む。１組の共有キャッシュユニット６０６は、レベル２（Ｌ２）、レベル３（Ｌ３、ｌｅｖｅｌ  ３）、レベル４（Ｌ４、ｌｅｖｅｌ  ４）、又は他のレベルのキャッシュなどの１つ又は複数の中間レベルのキャッシュ、最終レベルのキャッシュ（ＬＬＣ、ｌａｓｔ  ｌｅｖｅｌ  ｃａｃｈｅ）、及び／又はこれらの組み合わせを含むことができる。１つの実施形態において、リングベース相互接続ユニット６１２は、統合グラフィックス論理６０８、１組の共有キャッシュユニット６０６、及びシステムエージェントユニット６１０／統合メモリコントローラユニット６１４を相互接続するが、代替的な実施形態は、そのようなユニットを相互接続する任意の数の周知技術を使用することができる。１つの実施形態において、整合性は、１つ又は複数のキャッシュユニット６０６とコア６０２Ａ〜Ｎとの間で維持される。
【０１１４】
幾つかの実施形態では、１つ又は複数のコア６０２Ａ〜Ｎはマルチスレッディングすることができる。システムエージェント６１０は、コア６０２Ａ〜Ｎを連係及び動作させる構成要素を含む。システムエージェントユニット６１０は、例えば、電力制御ユニット（ＰＣＵ、ｐｏｗｅｒ  ｃｏｎｔｒｏｌ  ｕｎｉｔ）及びディスプレイユニットを含むことができる。ＰＣＵは、コア６０２Ａ〜Ｎ及び統合グラフィックス論理６０８の電力状態を調整するのに必要な論理及び構成要素とすることができる又はそれらを含むことができる。ディスプレイユニットは１つ又は複数の外部接続ディスプレイを駆動するためのものである。
【０１１５】
コア６０２Ａ〜Ｎはアーキテクチャ命令セットの観点から同種又は異種とすることができる。すなわち、２つ以上のコア６０２Ａ〜Ｎは同じ命令セットを実行可能とすることができるが、他のものは、その命令セット又は異なる命令セットのサブセットのみを実行可能とすることができる。
【０１１６】
図７〜１０は例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ、ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスについて当技術分野において既知の他のシステム設計及び構成も適している。概して、本明細書に開示されるようなプロセッサ及び／又は他の実行論理を組み込むことができる非常に多くの様々なシステム又は電子デバイスは概ね適している。
【０１１７】
図７を参照すると、本発明の１つの実施形態によるシステム７００のブロック図が示されている。システム７００は、コントローラハブ７２０に結合される１つ又は複数のプロセッサ７１０、７１５を含むことができる。１つの実施形態において、コントローラハブ７２０は、グラフィックスメモリコントローラハブ（ＧＭＣＨ、ｇｒａｐｈｉｃｓ  ｍｅｍｏｒｙ  ｃｏｎｔｒｏｌｌｅｒ  ｈｕｂ）７９０及び入力／出力ハブ（ＩＯＨ、Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｈｕｂ）７５０（別個のチップ上に存在することができる）を含み、ＧＭＣＨ７９０は、メモリ７４０及びコプロセッサ７４５が結合されるメモリ及びグラフィックスコントローラを含み、ＩＯＨ７５０は、入力／出力（Ｉ／Ｏ、ｉｎｐｕｔ／ｏｕｔｐｕｔ）デバイス７６０をＧＭＣＨ７９０に結合する。代替的に、メモリ及びグラフィックスコントローラの一方又は両方は、（本明細書で説明されているように）プロセッサ内に集積され、メモリ７４０及びコプロセッサ７４５は、プロセッサ７１０及び、ＩＯＨ７５０と共に単一チップ内にあるコントローラハブ７２０に直接結合される。
【０１１８】
追加のプロセッサ７１５の任意選択的な特性は、図７において破線で示されている。それぞれのプロセッサ７１０、７１５は、本明細書で説明される処理コアのうちの１つ又は複数を含むことができ、プロセッサ６００の或るバージョンとすることができる。
【０１１９】
メモリ７４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ、ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、相変化メモリ（ＰＣＭ、ｐｈａｓｅ  ｃｈａｎｇｅ  ｍｅｍｏｒｙ）、又はその２つの組み合わせとすることができる。少なくとも１つの実施形態では、コントローラハブ７２０は、フロントサイドバス（ＦＳＢ、ｆｒｏｎｔｓｉｄｅ  ｂｕｓ）のようなマルチドロップバス、ＱｕｉｃｋＰａｔｈ相互接続（ＱＰＩ、ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）のようなポイントツーポイントインターフェース、又は同様の接続７９５を介して、プロセッサ７１０、７１５と通信する。
【０１２０】
１つの実施形態では、コプロセッサ７４５は、例えば、高スループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ、又は同様のもののような専用プロセッサである。１つの実施形態では、コントローラハブ７２０は統合グラフィックスアクセラレータを含むことができる。
【０１２１】
アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、電力消費特性、及び同様のものを含む利点の様々な基準の観点から、物理リソース７１０、７１５の間に様々な相違が存在する可能性がある。
【０１２２】
１つの実施形態では、プロセッサ７１０は、一般的なタイプのデータ処理演算を制御する命令を実行する。命令内に、コプロセッサ命令を組み込むことができる。プロセッサ７１０は、これらのコプロセッサ命令を、付属のコプロセッサ７４５により実行されるべきタイプであるとして認識する。従って、プロセッサ７１０は、コプロセッサ７４５に対して、コプロセッサバス又は他の相互接続上にこれらのコプロセッサ命令（又は、コプロセッサ命令を表す制御信号）を発行する。コプロセッサ７４５は、受信したコプロセッサ命令を受理し実行する。
【０１２３】
図８を参照すると、本発明の実施形態による第１のより具体的な例示的システム８００のブロック図が示されている。図８に示されているように、マルチプロセッサシステム８００はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続８５０を介して結合される第１のプロセッサ８７０及び第２のプロセッサ８８０を含む。プロセッサ８７０及び８８０のそれぞれはプロセッサ６００の或るバージョンとすることができる。本発明の１つの実施形態では、プロセッサ８７０及び８８０は、それぞれ、プロセッサ７１０及び７１５であり、一方、コプロセッサ８３８はコプロセッサ７４５である。別の実施形態では、プロセッサ８７０及び８８０は、それぞれ、プロセッサ７１０及びコプロセッサ７４５である。
【０１２４】
統合メモリコントローラ（ＩＭＣ、ｉｎｔｅｇｒａｔｅｄ  ｍｅｍｏｒｙ  ｃｏｎｔｒｏｌｌｅｒ）ユニット８７２及び８８２をそれぞれ含むプロセッサ８７０及び８８０が示されている。プロセッサ８７０は、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ―Ｐ、ｐｏｉｎｔ−ｔｏ−ｐｏｉｎｔ）インターフェース８７６及び８７８も含み、同様に、第２プロセッサ８８０はＰ−Ｐインターフェース８８６及び８８８を含む。プロセッサ８７０、８８０は、Ｐ―Ｐインターフェース回路８７８、８８８を使用して、ポイントツーポイント（Ｐ―Ｐ）インターフェース８５０を介して情報を交換することができる。図８に示されているように、ＩＭＣ８７２及び８８２は、プロセッサをそれぞれのメモリ、すなわち、メモリ８３２及びメモリ８３４に結合する。それらのメモリは、それぞれのプロセッサにローカルに接続されるメインメモリの部分とすることができる。
【０１２５】
プロセッサ８７０、８８０は、それぞれ、ポイントツーポイントインターフェース回路８７６、８９４、８８６、８９８を使用して、個別のＰ−Ｐインターフェース８５２、８５４を介して、チップセット８９０と情報を交換することができる。チップセット８９０は、高性能インターフェース８３９を介して、コプロセッサ８３８と任意選択的に情報を交換することができる。１つの実施形態では、コプロセッサ８３８は、例えば、高スループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ、又は同様のもののような専用プロセッサである。
【０１２６】
共有キャッシュ（図示せず）は、何れかのプロセッサ内に又は両方のプロセッサの外部に含まれることができるが、プロセッサが低電力モードに置かれている場合、何れか又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納されることができるように、Ｐ―Ｐ相互接続を介してプロセッサに接続されることができる。
【０１２７】
チップセット８９０は、インターフェース８９６を介して第１バス８１６に結合されることができる。１つの実施形態では、第１のバス８１６は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス、又は、ＰＣＩエクスプレスバスもしくは別の第３世代のＩ／Ｏ相互接続バスのようなバスとすることができるが、本発明の範囲はそのように限定されるものではない。
【０１２８】
図８に示されているように、様々なＩ／Ｏデバイス８１４は、第１のバス８１６を第２のバス８２０に結合させるバスブリッジ８１８と共に、第１のバス８１６に結合されることができる。１つの実施形態では、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックスアクセラレータ又はデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイ、又は任意の他のプロセッサのような１つ又は複数の追加のプロセッサ８１５は、第１のバス８１６に結合される。１つの実施形態では、第２のバス８２０は、ローピンカウント（ＬＰＣ、ｌｏｗ  ｐｉｎ  ｃｏｕｎｔ）バスとすることができる。１つの実施形態では、例えば、キーボード及び／又はマウス８２２、通信デバイス８２７、並びに命令／コード及びデータ８３０を含むことができるディスクドライブ又は他の大容量記憶デバイスのような記憶ユニット８２８を含む様々なデバイスが、第２のバス８２０に結合されることができる。更に、オーディオＩ／Ｏ８２４は第２のバス８２０に結合されることができる。他のアーキテクチャが可能であることに留意されたい。例えば、図８のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバス又は他のそのようなアーキテクチャを実装することができる。
【０１２９】
図９を参照すると、本発明の実施形態による第２のより具体的な例示的システム９００のブロック図が示されている。図８及び図９における同様の要素は同様の参照番号を有し、図９の他の態様を分かりにくくすることを避けるために、図８の或る特定の態様が図９から省略されている。
【０１３０】
図９は、プロセッサ８７０、８８０が、それぞれ、統合メモリ及びＩ／Ｏ制御論理（「ＣＬ、ｃｏｎｔｒｏｌ  ｌｏｇｉｃ」）８７２及び８８２を含むことができることを示す。従って、ＣＬ８７２、８８２は、統合メモリコントローラユニットを含み、Ｉ／Ｏ制御論理を含む。図９は、メモリ８３２、８３４がＣＬ８７２、８８２に結合されているだけでなく、Ｉ／Ｏデバイス９１４もまた制御論理８７２、８８２に結合されておることを示す。レガシＩ／Ｏデバイス９１５はチップセット８９０に結合される。
【０１３１】
図１０を参照すると、本発明の実施形態によるＳｏＣ１０００のブロック図が示されている。図６における同様の要素は同様の参照番号を有する。また、破線のボックスは、より先進のＳｏＣにおける任意選択的な機能である。図１０において、相互接続ユニット１００２は、１つ又は複数のコア６０２Ａ〜Ｎのセット及び共有キャッシュユニット６０６を含むアプリケーションプロセッサ１０１０と、システムエージェントユニット６１０と、バスコントローラユニット６１６と、統合メモリコントローラユニット６１４と、統合グラフィックス論理、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含むことができる１組の１つ又は複数のコプロセッサ１０２０と、スタティックランダムアクセスメモリ（ＳＲＡＭ、ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）ユニット１０３０と、ダイレクトメモリアクセス（ＤＭＡ、ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）ユニット１０３２と、１つ又は複数の外部ディスプレイに結合されるディスプレイユニット１０４０とに結合される。１つの実施形態において、コプロセッサ１０２０は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、組み込みプロセッサ、又は同様のものなどの専用プロセッサを含む。
【０１３２】
本明細書において開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装アプローチの組み合わせで実装されることができる。本発明の実施形態は、少なくとも１つのプロセッサ、（揮発性もしくは不揮発性メモリ及び／又は記憶要素を含む）記憶システム、少なくとも１つの入力デバイス、及び少なくとも１つの出力デバイスを備えるプログラマブルシステム上で実行するコンピュータプログラム又はプログラムコードとして実装されることができる。
【０１３３】
図８に図示されているコード８３０のようなプログラムコードは、本明細書において説明されている機能を実行し、出力情報を生成するように入力命令に適用されることができる。出力情報は、既知の方法で１つ又は複数の出力デバイスに適用されることができる。本出願の目的のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ、ａｐｐｌｉｃａｔｉｏｎ  ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）又はマイクロプロセッサのようなプロセッサを有する任意のシステムを含む。
【０１３４】
プログラムコードは、処理システムと通信するために高水準手順又はオブジェクト指向のプログラミング言語で実装されることができる。プログラムコードはまた、所望であれば、アセンブリ又は機械言語で実装されることができる。実際に、本明細書で説明されるメカニズムは、範囲において、如何なる特定のプログラミング言語に限定されるものではない。何れの場合においても、言語はコンパイル型又はインタプリタ型の言語とすることができる。
【０１３５】
少なくとも１つの実施形態の１つ又は複数の態様は、プロセッサ内の様々な論理を表す機械可読媒体上に格納される典型的命令によって実装されることができ、典型的命令は、機械に読み取られる場合、本明細書で説明されている技法を実行させるように機械に論理を作成させる。「ＩＰコア」として知られるそのような表現は、有形の機械可読媒体上に格納され、実際に論理又はプロセッサを作る製造機械にロードするために様々な顧客又は製造設備に供給されることができる。
【０１３６】
そのような機械可読記憶媒体は、機械又はデバイスによって製造又は形成される物品の非一時的な有形の装置を含むことができるが、これに限定されるものではない。これらの装置は、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ、ｃｏｍｐａｃｔ  ｄｉｓｋ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、再書込み可能コンパクトディスク（ＣＤ−ＲＷ、ｃｏｍｐａｃｔ  ｄｉｓｋ  ｒｅｗｒｉｔａｂｌｅ）、及び光磁気ディスクを含む他の任意のタイプのディスク、読み出し専用メモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ、ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭ、ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、フラッシュメモリ、電気的消去可能プログラマブル読み出し専用メモリ（ＥＥＰＲＯＭ、ｅｌｅｃｔｒｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、相変化メモリ（ＰＣＭ）のような半導体デバイス、磁気カードもしくは光カード、又は電子命令を格納に適する他の任意のタイプの媒体などを含む。
【０１３７】
従って、本発明の実施形態は、命令を保持する非一時的な有形の機械可読媒体、又は、本明細書で説明される構造、回路、装置、プロセッサ、及び／もしくはシステムの機能を定義するハードウェア記述言語（ＨＤＬ）のような設計データを保持する非一時的な有形の機械可読媒体も含む。そのような実施形態はプログラム製品としても呼ばれることができる。
【０１３８】
幾つかの場合において、命令変換器が、命令をソース命令セットからターゲット命令セットに変換するのに使用されることができる。例えば、命令変換器は、命令を、コアにより処理される１つ又は複数の他の命令に、（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して）トランスレートする、モーフィングする、エミュレートする、又は、それらでなければ、変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されることができる。命令変換器は、プロセッサ上に、プロセッサ外に、又は、部分的にプロセッサ上に且つ部分的にプロセッサ外に存在することができる。
【０１３９】
図１１は、本発明の実施形態によるソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令変換器の使用を対比するブロック図である。図示されている実施形態では、命令変換器はソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されることができる。図１１は、高水準言語１１０２でのプログラムが、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１１１６によりネイティブで実行されることができるｘ８６バイナリコード１１０６を生成するようにｘ８６コンパイラ１１０４を使用してコンパイルされることができることを示す。少なくとも１つのｘ８６命令セットコアを有するプロセッサ１１１６は、少なくとも１つのｘ８６命令セットコアを有するインテルプロセッサと実質的に同じ結果を達成するために、（１）インテルｘ８６命令セットコアの命令セットの大部分、又は（２）少なくとも１つのｘ８６命令セットコアを有するインテルプロセッサ上で実行することを目的とするアプリケーション又は他のソフトウェアのオブジェクトコードバージョンを、互換性を有するように実行する又は、そうでなければ、処理することにより、少なくとも１つのｘ８６命令セットコアを有するインテルプロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表す。ｘ８６コンパイラ１１０４は、追加のリンケージ処理の有無に関わらず、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１１１６上で実行されることができるｘ８６バイナリコード１１０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図１１は、少なくとも１つのｘ８６命令セットコアを有さないプロセッサ１１１４（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズ社のＭＩＰＳ命令セットを実行する、及び／又はカリフォルニア州サニーベールのＡＲＭホールディングス社のＡＲＭ命令セットを実行するコアを有するプロセッサ）によってネイティブで実行されることができる代替の命令セットバイナリコード１１１０を生成するために、高水準言語１１０２のプログラムが、代替の命令セットコンパイラ１１０８を使用してコンパイルされることができることを示す。命令変換器１１１２は、ｘ８６バイナリコード１１０６を、ｘ８６命令セットコアを有さないプロセッサ１１１４によりネイティブで実行されることができるコードに変換するのに使用される。この変換されたコードは、代替の命令セットバイナリコード１１１０と同じである可能性は低い。それは、これを可能にする命令変換器の作成は難しいからであるが、しかしながら、変換されたコードは、演算を全般的に達成し、代替の命令セットからの命令で構成される。従って、命令変換器１１１２は、エミュレーション、シミュレーション、又は任意の他の処理を介して、ｘ８６命令セットプロセッサもしくはコアを有さないプロセッサ又は他の電子デバイスがｘ８６バイナリコード１１０６を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
【０１４０】
＜１組のベクトル要素にリダクション演算を実行する方法及び装置＞
「スパース更新」は、ベクトル化が有益であろう重要なアルゴリズムのパターンである。ここで、読み出し−修正−書き込み演算は、間接的にアドレスされるメモリ位置に実行されることができる（例えば、Ａ［Ｂ［ｉ］］をロードし、それに何らかを追加し、その値を元の場所Ａ［Ｂ［ｉ］］に格納する）。このタイプの演算をベクトル化することは、収集−変更−分散演算を実行することを伴う。一例として、このような演算は、収集演算を介してｉの１６個の連続する値に対してＡ［Ｂ［ｉ］］の形式の１６個の間接ロードを実行し、単一命令複数データ（ＳＩＭＤ、ｓｉｎｇｌｅ  ｉｎｓｔｒｕｃｔｉｏｎ  ｍｕｌｔｉｐｌｅ  ｄａｔａ）計算を実行し、値を元のメモリに分散することを伴うことができる。しかしながら、このベクトル化は、単一の収集／分散命令が各メモリ位置に１回だけアクセスするであろうことを仮定している。例えば、Ｂ［ｉ］の２つの連続する値が同じであるならば、第２のものに対する読み出し−修正−書き込みは第１のものに依存する。そのため、これらをＳＩＭＤ方法で同時に行うことは、これらの依存性に反し、誤った結果が生じる可能性がある。
【０１４１】
本発明の１つの実施形態は、重複を検出するためにベクトルレジスタ内の要素を比較するＶＰＣＯＮＦＬＩＣＴのようなコンフリクト検出命令を利用する。具体的には、命令は、ベクトルレジスタ入力の各要素を、その入力の全ての先行する要素（例えば、最下位ビット（ＬＳＢ、ｌｅａｓｔ  ｓｉｇｎｉｆｉｃａｎｔ  ｂｉｔ）に近い全ての要素）との等値性をテストすることができ、これらの比較の結果を１組のビットベクトルとして出力する。コンフリクト検出命令は、或る要素が同じＳＩＭＤレジスタ内の他の要素を巻き込むデータ依存性を有するか否かを判断する方法を提供する。
【０１４２】
図１２は、１組のデータ要素１２００〜１２０３を備える入力ベクトルレジスタ１２２０及びコンフリクト検出命令の結果１２１０〜１２１３を格納する出力レジスタ１２３０を有する例を示す。動作中、コンフリクト検出命令は、データ要素１２００〜１２０３の各々を、それに先行するデータ要素と比較する。第１の要素１２００は（それに先行する要素がないので）別の要素と比較されず、その結果は、出力ベクトルレジスタ１２３０の第１の要素に００００として格納され、コンフリクトの無いことを示す。第２の要素１２０１は第１の要素１２００と比較される。要素が等しくないので、結果は、出力ベクトルレジスタ１２３０の第２の位置１２１１に格納される００００（コンフリクト無し）である。第３の要素１２０２は第１の要素１２００と等しいので、０００１という結果が出力ベクトルレジスタ１２３０の第３の出力位置１２１２に格納される。１つの実施形態では、０００１は２進値であり、結果の第１の位置における１は、第３の要素１２０２が入力ベクトルレジスタ１２２０の第１の要素１２００と等しいことを示す。最後に、第４の要素１２０３が、第１の要素１２００及び第３の要素１２０２の両方と等しいので、０１０１の値が出力ベクトルレジスタ１２３０の第４の位置１２１３に設定される（第１のビット位置の第１の１が第１のデータ要素１２００と等価であり、第３のビット位置の第２の１が第３のデータ要素１２０２と等しいことを示す）。
【０１４３】
ＳＩＭＤレジスタの別個の要素内で重複した値を識別する能力は、ＳＩＭＤレジスタ要素間の可能なデータ依存性が、そうでなければ、ベクトル化を妨げるかもしれない場合でも、スカラーコードをベクトル化することを可能にする。例えば、固有のインデックスを有する要素のサブセットを決定し、ＳＩＭＤの方法でそれらを計算し、且つ残りの要素を再試行するためにループバックすることによって、従って同じインデックスを有する要素に対しての計算をシリアル化することによって、依存関係を強制できる。上記の例では、最初の２つの要素が同時に計算され、続いて、３番目の要素が単独で（第１の要素の出力値から入力値を取得して）、最後の要素が単独で（３番目の要素の出力値からの入力値を取得して）計算されるであろう。このアプローチは、Ｎ個のデータ要素の配列に演算（「Ｃｏｍｐｕｔｅ」）を実行し、反復毎にＳＩＭＤ＿ＷＩＤＴＨ要素に対して演算するためにベクトル化する次の例示的ループで表される。
【数１】
0006699845.tif 000003
【０１４４】
Ｃｏｍｐｕｔｅ＿Ｍａｓｋ＿ｏｆ＿Ｕｎｉｑｕｅ＿Ｒｅｍａｉｎｉｎｇ＿Ｉｎｄｉｃｅｓ関数の説明は、簡潔にするために省略されている。
【０１４５】
上記のコード例はベクトル化されているが、ループのベクトル化されたバージョンは、スカラー同等物より低いパフォーマンスになる場合があり、ベクトル化が有益か否かを予測することは困難である。具体的には、ベクトル化によってもたらされる性能向上は、インデックスＳＩＭＤレジスタ内の幾つの要素（「インデックス」）が重複値を有するかに依存する。このアプローチは、任意の所与のインデックスの少数のインスタンスがある場合、つまり少数の反復のｗｈｉｌｅループを有することが普通の場合、良く機能する。しかしながら、同じインデックスの多数のインスタンスがある場合、ｗｈｉｌｅループの最大反復回数はＳＩＭＤ幅に等しいので、実行時間はスカラー実行より悪くなる可能性がある。
【０１４６】
これらの問題に対処するために、以下に説明する本発明の実施形態は、ＳＩＭＤレジスタ内の要素に対して、複数のツリー縮小を、固有のインデックス値毎に１つの縮小を、並列に実行する技法を含む。このアプローチでは、最大でｌｏｇ２ＳＩＭＤ＿ＷＩＤＴＨの計算ステップを有する。具体的には、本発明の或る特定の実施形態は、ＳＩＭＤレジスタ内に任意の順序を有する１組の値にわたって並列に任意の数のバイナリツリー縮小を実行することができる。ＶＰＣＯＮＦＬＩＣＴのようなコンフリクト検出命令の情報豊富な出力は、ＳＩＭＤ要素の対からの部分的な結果を反復的に識別し、同じインデックスと結合させるために使用されることができる。このアプローチでは、新しい命令ＶＰＯＰＣＮＴが、インデックスを共有する各要素が順序付けられることを可能にするので、使用されることができる。ＶＰＯＰＣＮＴ命令の１つの実施形態は、各ＳＩＭＤ要素内の設定されたビット（すなわち、１）の数をカウントする。
【０１４７】
単一のＳＩＭＤレジスタ内には、１つ又は複数の縮小パターンを介して結合される必要がある複数の値が存在する可能性がある。例えば、アプリケーションは、全ての「ａ」値が合計され、且つ全ての「ｂ」値が合計されることで、ただ２つの値｛ａ０＋ａ１＋ａ２＋ａ３＋ａ４、ｂ０＋ｂ１＋ｂ２｝を生じるように結合される必要がある単一のＳＩＭＤレジスタ内の１組の値｛ａ０、ｂ０、ａ１、ａ２、ｂ１、ａ３、ａ４、ｂ２｝を有することができる。これを行う複数の方法が存在するが、２つの入力（例えば、プロセッサ内の加算命令）のみを有するリダクション演算を仮定して、最も効率的な方法は、ＳＩＭＤレジスタの要素にわたって複数のバイナリツリー縮小を並列に実行することである。
【０１４８】
本発明の実施形態は、（Ａ）独立の縮小のそれぞれについてリダクション演算をシリアル化すること、又は（Ｂ）関連する「インデックス」ベクトル内の各固有のインデックス値のインスタンス数をカウントすることの何れも必要とせずに、ベクトルレジスタのレーンにわたって複数のレジスタ内縮小を実行する問題に対処する。これは、以下に詳細に説明するように、独立の縮小を識別する第１の出力を生成し、バイナリ縮小ツリー内の左対右の子を識別するために使用されることができる第２の出力を生成することによって達成されることができる。１つの実施形態では、第１の出力はＶＰＣＯＮＦＬＩＣＴ命令を使用して生成され、第２の出力はＶＰＯＰＣＮＴ命令を使用して生成される。
【０１４９】
図１３に図示されているように、ＳＩＭＤツリー縮小論理１３０５の１つの実施形態は、入力として、縮小（例えば合計）されるべき値を含む「値」ベクトルレジスタ１３０２と、「値」ベクトル内のどの値（又はレーン）が互いに関連付けられているかを示す「インデックス」ベクトルレジスタ１３０１との２つのベクトルレジスタを採用する。「インデックス」ベクトルレジスタ１３０１内の２つのレーンが等しい値を有するならば、それらは同じツリー縮小に関与する。「インデックス」ベクトルレジスタ１３０１内の２つのレーンが異なる値を有するならば、それらは別個の縮小に関与する。ＳＩＭＤツリー縮小論理１３０５の出力は、その縮小に関連するインデックス値のインスタンスを含む左端のレーン（すなわち、最上位バイトに最も近い）における各縮小の結果を含む累算ベクトルレジスタ１３０３である。
【０１５０】
本明細書に開示された実施形態は、各レジスタの最上位ビット／バイトが「左」側にあり、最下位ビット／バイトが「右」側にある配置を利用するが、本発明の基本的な原理は、そのような配置に限定されるものではない。例えば、代替の実施形態では、最下位ビット／バイトが「左」側にあり、最上位ビット／バイトが「右」側にある。この実施形態では、本開示における「左」又は「左端」の如何なる参照も、「右」又は「右端」で置き換えることが可能であり、逆も可能である。
【０１５１】
図１３の例において、インデックスベクトルレジスタ１３０１内の値Ａ、Ｂ、Ｃ、及びＤは任意の（固有の）整数値を表す。図１３はまた、各反復（反復０〜２が示されている）で、値ベクトル１３０２からの異なる組の値がリダクション演算を実行するためにＳＩＭＤツリー縮小論理によってどのように合計されるかを示す。例えば、インデックスベクトルレジスタ１３０１内のＡの各インスタンスは、縮小されるべき値ベクトルレジスタ内の１組の値ｄ１５、ｄ１４、ｄ８、ｄ３、及びｄ０を識別する。最後の反復の後、これらの値は合計されて単一の値αを形成し、αは、蓄積ベクトル１３０３の左端のデータ要素位置に格納される（インデックスベクトル内の左端のＡの位置と一致する）。βの値は、インデックスベクトルからＢ（ｄ１３、ｄ１１、ｄ１０、ｄ９、ｄ６、ｄ５、ｄ４、及びｄ１）の各インスタンスに関連する値を使用して同様に形成され、βの最終値は累算ベクトルレジスタ１３０３の左から３番目のデータ要素位置に格納される（インデックスベクトルの左端のＢの位置と一致する）。
【０１５２】
以下の擬似コードは、インデックス値に基づいてＳＩＭＤツリー縮小論理１３０５によって実行されることができるレジスタ内ツリー縮小を表す。
【数２】
0006699845.tif 000004
【０１５３】
動作中、ベクトルレジスタ「ｖａｌｕｅ＿ｖｅｃ」（値ベクトルレジスタ１３０２）は、縮小されるべき値を含み、ベクトルレジスタ「ｉｎｄｅｘ＿ｖｅｃ」（インデックスベクトルレジスタ１３０１）は、これらの値のインデックス又は関連付けを含む。例えば、１つの実施形態では、「ｉｎｄｅｘ＿ｖｅｃ」内の等しい値は、「ｖａｌｕｅ＿ｖｅｃ」内の対応する値が同じ縮小に属することを意味する。ＶＥＣ＿ＯＰ関数は、縮小で通常使用されるであろう任意の演算を表し、縮小は、典型的には、整数加算などの可換的結合的演算である。角括弧付きの左側の値（例えば、「ｃｎｔ＿ｖｅｃ｛ｅｏ＿ｍａｓｋ｝」）は、マスクの下で実行されるベクトル演算を表す。「ｉ＿ｖｅｃ｛ｅｏ＿ｍａｓｋ｝」演算では、全ての非アクティブなレーンをゼロ化する必要がある。「ａｃｃｕｍ＿ｖｅｃ｛ｅｏ＿ｍａｓｋ｝」演算では、全ての非アクティブレーンは「ａｃｃｕｍ＿ｖｅｃ」の前の値を保持する必要がある。
【０１５４】
完了後、「ａｃｃｕｍ＿ｖｅｃ」ベクトルは、並列して発生した全ての縮小の結果を、「ｉｎｄｅｘ＿ｖｅｃ」に含まれる各固有値に対して１つ、保持する。各縮小の結果は、（図１３に示されるように）「ｉｎｄｅｘ＿ｖｅｃ」における縮小に関連するインデックス値を有した「ａｃｃｕｍ＿ｖｅｃ」レジスタ１３０３の左端のレーン（ＭＳＢに最も近い）に存在するであろう。
【０１５５】
「インデックス」ベクトルの全ての値が固有である（すなわち、「コンフリクトがない」場合の）状況では、これらの技法のコスト（ＶＰＣＯＮＦＬＩＣＴ及び偽となるであろう初期の「ｗｈｉｌｅ」ループ条件テスト並びにループバックブランチのコスト）はかなり低い。「インデックス」ベクトルの全ての値が同じ場合（すなわち、「最もコンフリクトがある」場合）、これらの技法は「ｌｏｇ２Ｎ」回反復する。ここで、Ｎはベクトル幅である。これは、各縮小が実際上シリアル化される（例えば、各縮小において一度に１つの値／レーンを累算する）ので、Ｎ回の反復をその代わりに実行するであろう前述の先の実施形態とは対照的である。一般に、本発明の実施形態は、「値」ベクトル１３０２にわたって並列に任意の数の縮小を実行するために「Ｏ（ｌｏｇ２Ｎ）」反復を実行する。ここで、Ｎは、最多のインスタンスを有する「インデックス」ベクトル１３０１内の値のインスタンスの数である。例えば、図１３において、値「Ｂ」は、合計でＮ＝８のインスタンスを有し、「インデックス」ベクトル内に最多のインスタンスを有する（Ａの５つのインスタンス、Ｃの１つのインスタンス、及びＤの２つのインスタンスが存在する）。この例では、本明細書に記載の技法は３（ｌｏｇ２Ｎ）回反復するであろうが、前のアルゴリズムは８（Ｎ）回反復するであろう。
【０１５６】
具体的な例が、今、図１４及び図１５に関して説明される。明確にするために、この詳細な例示的な実行は図１３に示される例に従う。本明細書で使用される場合、最下位ビット（ＬＳＢ）及び最下位レーン（ＬＳＬ）は図示されている右端の値である（例えば、ベクトルレジスタ＝｛レーン１５、レーン１４、…、レーン０｝）。マスク値の場合、明確にするためにビットを視覚的にグループ化するために下線が使用される。
【０１５７】
第１のコンフリクト検出演算（例えば、ＶＰＣＯＮＦＬＩＣＴ）の結果と共に入力値は以下のようであり、ここで、Ａ、Ｂ、Ｃ、及びＤは固有で且つ任意の整数値を表し、ｄ０〜ｄ１５は縮小に伴う値を表す。
【数３】
0006699845.tif 000005
【０１５８】
図１４は、出力ベクトルレジスタ１４０２内の初期の「ｖｃ＿ｖｅｃ」値を生成するコンフリクト検出演算（例えば、ＶＰＣＯＮＦＬＩＣＴで実装される）を示す。図示の実施形態では、出力ベクトルレジスタ１４０２は、１６個のデータ要素を格納し、各々は、インデックスデータレジスタ内に格納されているインデックスデータ要素の１つにそれぞれ関連付けられ、その要素の値は、対応するレーンに関連付けられている先のコンフリクトを表す。上述したように、インデックスベクトルレジスタ１３０１内の各要素は、最下位レーン／ビットにより近い他の全ての要素と比較される。従って、位置＃４のインデックスデータ要素（この例ではＢ）は、位置＃３（Ａ）、位置＃２（Ｄ）、位置＃１（Ｂ）、及び位置＃０（Ａ）のデータ要素と比較される。データ要素が最下位レーンにより近いデータ要素の何れかと等しいならば、対応するビットが出力ベクトルレジスタ１４０２内に設定される。例えば、インデックスベクトルレジスタ１３０１の左から２番目のＢは、出力１１００１１１００１０を生成し、１はインデックスベクトルレジスタ１３０１内の他のＢの位置を示す。次に、この値は、図示のように、出力ベクトルレジスタ１４０２（この例では１６進値０ｘ０６７２によって表される）の、比較が実行されるＢの位置に対応する位置に格納される。同様の演算が、インデックスベクトルレジスタ１３０１に格納される各インデックス値に対して実行される。
【０１５９】
次に、出力ベクトルレジスタ１３０２内の「ｖｃ＿ｖｅｃ」値の中に設定された少なくとも１つのビットがある限り、上述の「ｗｈｉｌｅ」ループが反復される。図示された例のために、リダクション演算は加算（例えば、ＶＥＣ＿ＯＰ＝ｖｐａｄｄ）である。その結果、反復０の結果は次のようになる。
【数４】
0006699845.tif 000006
【０１６０】
図１５は、ｐｃ＿ｖｅｃ値がどのように反復０に対して決定され、ベクトルレジスタ１５０１内にデータ要素として格納されるかを示す。具体的には、ｐｃ＿ｖｅｃベクトルレジスタ１５０１内の各データ要素は、インデックスベクトルレジスタ１３０１内のインデックスに対応し、インデックスベクトルレジスタ１３０１内の最下位レーン／ビットのより近くに格納されているインデックス値のインスタンスの数に等しい値を有する。例えば、ｐｃ＿ｖｅｃベクトルレジスタ１５０１の左端の値４は、インデックスベクトルレジスタ１３０１のインデックスＡの左端のインスタンスに関連付けられ、インデックスベクトルレジスタ１３０１にインデックスＡの（すなわち、Ａの左端インスタンスの右側に）４つの他のインスタンスがあることを示す。同様に、ｐｃ＿ｖｅｃベクトルレジスタ１５０１の値７は、インデックスベクトルレジスタ内の対応する位置に位置するインデックスＢのインスタンス（図示の例では左から２つの位置）に関連付けられる。値７は、インデックスベクトルレジスタ１３０１の右側に格納されているインデックスＢのインスタンスが７つ存在することを示す。
【０１６１】
更に、図１５は、ｅｏ＿ｍａｓｋレジスタ１５０２内のビットがどのように更新されるかを示す。具体的には、各インデックス値に関連付けられるビットは、インデックスベクトルレジスタ１３０１内の右側のインデックス値の奇数個の他のインスタンスを示すために１に設定される。従って、所与のインデックス値に対して、そのインデックス値に関連するビットは、ｅｏ＿ｍａｓｋレジスタ１５０２内で１と０との間で交替する。
【０１６２】
反復０に続いて、出力ベクトルレジスタ１４０２内に「ｖｃ＿ｖｅｃ」値に設定されたビットがまだ存在するので、別の反復が実行される（「反復１」）。
【数５】
0006699845.tif 000007
【０１６３】
反復１の後、出力ベクトルレジスタ１４０２内に「ｖｃ＿ｖｅｃ」値に設定されたビットが存在するので、別の反復が実行される。
【数６】
0006699845.tif 000008
【０１６４】
出力ベクトルレジスタ１４０２内の「ｖｃ＿ｖｅｃ」は全てゼロを含むので、ループは終了する。ループの結果は次のようになる。入力は参照のために繰り返されている。
【数７】
0006699845.tif 000009
【０１６５】
値は、どのレーンが最終縮小結果を表すかを強調するためにｉｎｄｅｘ＿ｖｅｃにおいて太字にされており、値は、ｉｎｄｅｘ＿ｖｅｃの太字に一致するように上記のａｃｃｕｍ＿ｖｅｃにおいて太字にされている。各縮小の結果は、その縮小に関連するインデックス値を有する左端のレーンにあることに留意されたい。この例では、左端のインデックス値「Ａ」は結果「ｄ１５＋ｄ１４＋ｄ８＋ｄ３＋ｄ０」（レーン１５）に関連付けられ、左端のインデックス値「Ｂ」は結果「ｄ１３＋ｄ１１＋ｄ１０＋ｄ９＋ｄ６＋ｄ５＋ｄ４＋ｄ１」（レーン１３）に関連付けられ、左端のインデックス値「Ｃ」は結果「ｄ１２」（レーン１２）に関連付けられ、左端のインデックス値「Ｄ」は結果「ｄ７＋ｄ２」（レーン７）に関連付けられる。これは、「反復２の後」とマークされている図１３の表されている最終状態と一致する。
【０１６６】
左端のレーン（又は最上位レーン（ＭＳＬ、ｍｏｓｔ  ｓｉｇｎｉｆｉｃａｎｔ  ｌａｎｅ））に結果を有することは、分散命令の定義の故に幾つかのアーキテクチャ（例えばＩＡなど）において有利である。分散命令内の複数の要素が同じインデックスを有する（すなわち、同じメモリ位置に書き込む）場合、左端のレーン（ＭＳＬ）の値は如何なる他のものをも上書きする。この特定の実施形態の場合、左端が選ばれるが、本発明の基本的な原理は、結果のために左端のレーンを使用することに限定されるものではない。所与のインデックス値に対する結果は、そのインデックス値に関連付けられる左端又は右端のレーンの何れかに格納されることができる。なぜなら、分散命令は、重複が起きる場合、そのインデックス値に関連付けられる左端又は右端の値の何れかを選ぶことによって、決定論的結果を与えるようにしばしば定義されるからである。上記に提示される例示的なコードでは、所与のインデックス値に関連付けられる左端のレーンが選ばれる。
【０１６７】
本発明の１つの実施形態による方法が図１６に示されている。この方法は、上述したアーキテクチャの文脈内で実装されることができるが、如何なる特定のシステム又はプロセッサアーキテクチャに限定されるものではない。
【０１６８】
１６０１において、コンフリクトがインデックスレーンにわたって検出され（例えば、最下位ビット／レーン側に等しいインデックス値）、その結果がＶＣ＿ＶＥＣレジスタに格納される。例えば、１つの実施形態では、コンフリクトは、ＶＰＣＯＮＦＬＩＣＴのようなコンフリクト検出命令を使用して検出される（例えば、図１２及び関連するテキストを参照）。
【０１６９】
何らかのコンフリクトが存在するかどうかの判定が１６０２で行われる。これは、例えば、ＶＣ＿ＶＥＣが現在設定されている幾つかのビットを有するかどうかをチェックすることによって判定されることができる。そうでなければ、プロセスは終了する。そうであれば、１６０３において、同じインデックス値を有するレーンは、それぞれの縮小ツリー内の左及び右の子としてマークされる。１つの実施形態では、これは、（上述のように）ＶＰＯＰＣＮＴ（ＶＣ＿ＶＥＣ）＆０ｘ１によって達成される。１つの実施形態では、このビット列は、左の子をアクティブとしてマークするマスク（レーン毎のＬＳＢ）として使用される（例えば、左の子は右側に対して奇数個のコンフリクトを有し、一方、右の子は偶数個を有する）。
【０１７０】
１６０４において、各レーンについて、ビットインデックスが、このレーンの右（ＬＳＬ）側に同じインデックス値を有する左端レーン（ＭＳＬ）を示す最上位１を求めて計算される。１６０５において、右の子は左の子と整列するように移動され、結果は一時的な場所に置かれる。１つの実施形態では、これはベクトル順序変更／シャッフル命令を使用して達成される。
【０１７１】
１６０６において、リダクション演算が、元のデータを使用して１６０５からの一時的な結果に適用されて左及び右の子を結合し、その結果を左の子のレーンに配置する。１６０７において、１６０３で生成されたマスクは、ブロードキャストされ、ＶＣ−ＶＥＣレジスタ内の現在の値とビット単位で論理積をとり、ＶＣ−ＶＥＣレジスタを更新し、それによって右の子に関連するＶＣ＿ＶＥＣレジスタ内のビットをクリアする（すなわち、将来の反復においてこれらの子を考慮から除外する）。次に、処理は１６０２に戻り、何らかのコンフリクトが残っているかどうかを判定する（例えば、ＶＣ＿ＶＥＣが１に設定された幾つかのビットを有するかどうかをチェックする）。そうでなければ、処理は終了し、そうであれば、１６０３から１６０７までの別の反復が実行される。
【０１７２】
上記の技法の１つの用途は、「ヒストグラム」形式の演算にあり、その一例を以下に示す。ヒストグラム演算は、画像処理を含む様々なアプリケーションで一般的である。
【数８】
0006699845.tif 000010
【０１７３】
上記の「ヒストグラム」ループのようなループでは、このループの素朴なベクトル化を妨げる複雑な要因は、「ｂ［ｊ］」及び「ｂ［ｋ］」の値が等しい可能性があり、単一の単純なベクトル化ループ反復の中で「ａ」の同じ要素に関して競合状態を引き起こす。これは、「コンフリクト」と呼ばれる。上記の手法の使用は、コンフリクトする全ての値を固有のインデックス値毎に単一の値に最初に結合（縮小）することによって全てのコンフリクトを除去する。
【０１７４】
上記の単純なヒストグラムの場合、「インデックス」ベクトルはベクトル幅「ｂ［ｉ］」値であり、「値」ベクトルは全てのレーンで「１」の値を有するであろう。「＋＝」演算の右辺が単に「１」の定数ではなく計算の結果であったならば、「値」ベクトルはそのベクトル化計算の結果を保持するであろう。その場合、我々の縮小ループが、上記のヒストグラムループをベクトル化するために収集及び分散命令と併せて使用されることができるであろう。
【０１７５】
上述の本明細書では、本発明の実施形態を、その具体的な例示的実施形態を参照して説明してきた。しかしながら、様々な修正及び変更が、添付の特許請求の範囲に記載された本発明のより広い精神及び範囲から逸脱することなく、実施形態に対して行われ得ることが明らかであろう。従って、本明細書及び本図面は、限定的意味ではなく例示的な意味で考慮されるべきである。
【０１７６】
本発明の実施形態は、上述した様々なステップを含むことができる。ステップは、汎用又は専用プロセッサにステップを実行させるために使用される機械実行可能命令で具現化されることができる。代替的に、これらのステップは、ステップを実行するハードウェアで実現されている論理を含む特定のハードウェア構成要素によって、又はプログラムされたコンピュータ構成要素とカスタムハードウェア構成要素との任意の組み合わせによって実行されることができる。
【０１７７】
本明細書で説明されるように、命令は、或る特定の動作を実行するように構成された、又は所定の機能もしくは非一時的コンピュータ可読媒体に具現化されメモリに格納されたソフトウェア命令を有する特定用途向け集積回路（ＡＳＩＣ）のようなハードウェアの特定の構成を指すことができる。従って、図に示されている技法は、１つ又は複数の電子デバイス（例えば、エンドステーション、ネットワーク要素など）に格納され且つ実行されるコード及びデータを使用して実装されることができる。そのような電子デバイスは、非一時的コンピュータ機械可読通信媒体（例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、読み出し専用メモリ、フラッシュメモリデバイス、相変化メモリ）及び一時的コンピュータ機械可読通信媒体（例えば、搬送波、赤外線信号、デジタル信号などのような伝播信号の電気的、光学的、音響的、又は他の形体）のようなコンピュータの機械可読媒体を使用してコード及びデータを格納し、且つそれらを（内部的に且つ／又はネットワーク上の他の電子デバイスに）伝送する。更に、そのような電子デバイスは、典型的には、１つ又は複数の記憶デバイス（非一時的機械可読記憶媒体）、ユーザ入力／出力デバイス（例えば、キーボード、タッチスクリーン、及び／又はディスプレイ）、及びネットワーク接続のような１つ又は複数の他の構成要素に結合される１組の１つ又は複数のプロセッサを含む。一組のプロセッサと他の構成要素との結合は、典型的には、１つ又は複数のバス及びブリッジ（バスコントローラとも呼ばれる）を介する。記憶装置及びネットワークトラフィックを搬送する信号は、それぞれ、１つ又は複数の機械可読記憶媒体及び機械可読通信媒体を表す。従って、所与の電子デバイスの記憶装置は、典型的には、その電子デバイスの１組の１つ又は複数のプロセッサ上で実行するコード及び／又はデータを格納する。もちろん、本発明の実施形態の１つ又は複数の部分は、ソフトウェア、ファームウェア、及び／又はハードウェアの様々な組み合わせを使用して実装されることができる。この詳細な説明を通して、説明の目的のために、本発明の完全な理解を提供するために多数の具体的な詳細が明記された。しかしながら、当業者には、本発明がこれらの具体的な詳細の幾つかがなくても実施され得ることは明らかであろう。或る特定の例では、周知の構造及び機能は、本発明の主題を不明瞭にすることを避けるために、細かい詳細においては記載されなかった。従って、本発明の範囲及び精神は、以下の特許請求の範囲の観点から判断されるべきである。
【図１Ａ】
0006699845.tif 000011
【図１Ｂ】
0006699845.tif 000012
【図２Ａ】
0006699845.tif 000013
【図２Ｂ】
0006699845.tif 000014
【図２Ｃ】
0006699845.tif 000015
【図２Ｄ】
0006699845.tif 000016
【図３】
0006699845.tif 000017
【図４Ａ】
0006699845.tif 000018
【図４Ｂ】
0006699845.tif 000019
【図５Ａ】
0006699845.tif 000020
【図５Ｂ】
0006699845.tif 000021
【図６】
0006699845.tif 000022
【図７】
0006699845.tif 000023
【図８】
0006699845.tif 000024
【図９】
0006699845.tif 000025
【図１０】
0006699845.tif 000026
【図１１】
0006699845.tif 000027
【図１２】
0006699845.tif 000028
【図１３】
0006699845.tif 000029
【図１４】
0006699845.tif 000030
【図１５】
0006699845.tif 000031
【図１６】
0006699845.tif 000032