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