(57)【特許請求の範囲】
【請求項１】
ソースライトマスクレジスタオペランド、ソースベクトルレジスタオペランド、デスティネーションライトマスクレジスタオペランド及びオペコードを指定する単一のベクトルパックコンフリクトテスト命令に応じて、コンピュータプロセッサ内で、ベクトルパックコンフリクトテストを実行する方法であって、
前記単一のベクトルパックコンフリクトテスト命令を実行することにより、
前記ソースベクトルレジスタオペランドの各データ要素で、前記ソースライトマスクレジスタオペランドからのデータに論理的ＡＮＤを実行し、
前記ソースベクトルレジスタオペランドのデータ要素毎に、当該データ要素と、前記ソースライトマスクレジスタオペランドからのデータとの論理的ＡＮＤの実行結果に基づいて、前記ソースベクトルレジスタオペランドのデータ要素に関連するコンフリクトが存在することを示すかを判断することにより、コンフリクトチェック結果を生成し、
前記ソースライトマスクレジスタオペランドからの前記データで、前記コンフリクトチェック結果に論理的ＡＮＤを実行する段階と、
前記ソースライトマスクレジスタオペランドからのデータで、前記コンフリクトチェック結果に前記論理的ＡＮＤを実行した結果を、前記デスティネーションライトマスクレジスタオペランドに格納する段階とを備える、方法。
【請求項２】
前記ソースライトマスクレジスタオペランドのデータのサイズが前記ソースベクトルレジスタオペランドの各データ要素のサイズより小さい場合において、ゼロ拡張されたデータが前記ソースベクトルレジスタオペランドの各データ要素と同じサイズになるように、前記ソースライトマスクレジスタオペランドのデータをゼロ拡張する段階をさらに備える、請求項１に記載の方法。
【請求項３】
前記ソースライトマスクレジスタオペランドの前記ゼロ拡張されたデータを、前記ソースベクトルレジスタオペランドと同じ数及びサイズのデータ要素を有する一時ベクトルレジスタにブロードキャストする段階をさらに備える、請求項２に記載の方法。
【請求項４】
前記ソースベクトルレジスタオペランドは、１２８ビット、２５６ビットまたは５１２ビットのサイズである、請求項１から３のいずれか１項に記載の方法。
【請求項５】
前記デスティネーションライトマスクレジスタは、６４ビットである、請求項１から４のいずれか１項に記載の方法。
【請求項６】
前記デスティネーションライトマスクレジスタは、１６ビットである、請求項１から４のいずれか１項に記載の方法。
【請求項７】
前記ソースベクトルレジスタオペランドの複数のデータ要素は、８ビット、１６ビット、３２ビット、６４ビット、１２８ビットまたは２５６ビットのサイズである、請求項１に記載の方法。
【請求項８】
請求項１から７のいずれか１項に記載の方法を実行するコンピュータプロセッサ。
【請求項９】
前記単一のベクトルパックコンフリクトテスト命令を含み、請求項１から７のいずれか１項に記載の方法をコンピュータプロセッサに実行させるためのプログラム。
【請求項１０】
請求項９に記載のプログラムを格納する機械可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、概して、コンピュータプロセッサアーキテクチャに関し、より詳細には、実行時に特定の結果を引き起こす複数の命令に関する。
【背景技術】
【０００２】
命令セット、または命令セットアーキテクチャ（ＩＳＡ）は、プログラミングに関するコンピュータアーキテクチャの一部であり、複数のネイティブデータ型、複数の命令、レジスタアーキテクチャ、複数のアドレッシングモード、メモリアーキテクチャ、割込み及び例外処理、及び外部入力及び出力（Ｉ／Ｏ）を含み得る。命令という用語は、概して、本明細書では、プロセッサのデコーダが複数のマクロ複数の命令を復号した結果である複数のマイクロ命令またはｍｉｃｒｏ−ｏｐと対照的に、実行のためにプロセッサに付与された複数の命令であるマクロ命令をいうことが理解されよう。
【０００３】
命令セットアーキテクチャは、ＩＳＡを実装するプロセッサの内部設計であるマイクロアーキテクチャとは区別される。異なるマイクロアーキテクチャを有する複数のプロセッサは、共通の命令セットを共有することができる。例えば、複数のインテル社製ペンティアム（登録商標）４プロセッサ、インテル社製コアプロセッサ、及びアドバンストマイクロデバイセズ社（カリフォルニア州サニーベール）製プロセッサは、ｘ８６命令セットのほぼ同一のバージョン（より新しいバージョンにはいくつかの拡張が追加されている）を実装するが、異なる内部設計を有する。例えば、そのＩＳＡの同じレジスタアーキテクチャを異なるマイクロアーキテクチャに複数の異なる態様で実装することができる。こういったマイクロアーキテクチャは、複数の専用物理的レジスタ及び１つまたは複数の動的に割り付けられる物理的レジスタを含む周知技術を用いており、動的に割り付けられる物理的レジスタは、レジスタリネーミング機構などを用いる（例えば、米国特許第５，４４６，９１２号に記載のレジスタエイリアステーブル（ＲＡＴ）、リオーダバッファ（ＲＯＢ）及びリタイアメントレジスタファイルの使用、米国特許第５，２０７，１３２号に記載のレジスタの複数マップ及びプールの使用）。他に指定されない限り、レジスタアーキテクチャ、レジスタファイル及びレジスタという用語は、ソフトウェア／プログラマに可視であり、複数の命令がレジスタを指定する態様をいう。特異性が求められる場合、形容詞的論理的、アーキテクチャ的、またはソフトウェア可視性が、レジスタアーキテクチャにおいて複数のレジスタ／ファイルを示すために使用されるが、複数の異なる形容詞が、所与のマイクロアーキテクチャ（例えば、物理的レジスタ、リオーダバッファ、リタイアメントレジスタ、レジスタプール）において複数のレジスタを指定するために使用される。
【０００４】
命令セットは、１つまたは複数の命令フォーマットを含む。所与の命令フォーマットは、とりわけ、実行されるオペレーション及びそのオペレーションの実行対象であるオペランドを指定するための複数の様々なフィールド（ビット数、複数のビットの位置）を定義する。所与の命令は、所与の命令フォーマットを用いて表現され、オペレーション及び複数のオペランドを指定する。命令ストリームは、複数の命令の具体的なシーケンスであり、ここで、シーケンス内の各命令は、命令フォーマット内の命令の発生である。
【０００５】
科学、金融、自動ベクトル化された汎用、ＲＭＳ（認識、マイニング及び合成）／ビジュアル及びマルチメディアアプリケーション（例えば、２Ｄ／３Ｄグラフィクス、画像処理、ビデオ圧縮／解凍、音声認識アルゴリズム及びオーディオ操作）は、多くの場合、同じオペレーションが多数のデータ項目に対して実行されることを必要とする（「データ並列化」と称される）。単一命令複数データ（ＳＩＭＤ）は、複数のデータ項目に対して、プロセッサに同じオペレーションを実行させる命令のタイプを指す。ＳＩＭＤ技術は、レジスタ内の複数のビットを、その各々が別々の値を表す固定サイズの多数のデータ要素に論理的に分割することができるプロセッサに、特に適している。例えば、６４ビットレジスタの複数のビットは、その各々が別々の１６ビット値を表す４つの別々の１６ビットデータ要素に対してオペレーションされるソースオペランドとして、指定されてもよい。別の例として、２５６ビットレジスタの複数のビットは、４つの別々の６４ビットのパックデータ要素（クワッドワード（Ｑ）サイズのデータ要素）、８つの別々の３２ビットのパックデータ要素（ダブルワード（Ｄ）サイズのデータ要素）、１６の別々の１６ビットのパックデータ要素（ワード（Ｗ）サイズのデータ要素）、または３２の別々の８ビットのデータ要素（バイト（Ｂ）サイズのデータ要素）としてオペレーションされるソースオペランドとして、指定されてもよい。このタイプのデータは、パックデータ型またはベクトルデータ型と称され、このデータ型のオペランドは、パックデータオペランドまたはベクトルオペランドと称される。言い換えると、パックデータ項目またはベクトルは、複数のパックデータ要素のシーケンスを指し、パックデータオペランドまたはベクトルオペランドは、ＳＩＭＤ命令のソースまたはデスティネーションオペランドである（パックデータ命令またはベクトル命令としても知られる）。
【０００６】
例として、ＳＩＭＤ命令の１つの型は、同じサイズで同じ数の複数のデータ要素を有し、かつ、同じデータ要素の順序であるデスティネーションベクトルオペランド（結果ベクトルオペランドとも称される）を生成するために、２つのソースベクトルオペランドに対して縦方向に実行されるべき単一のベクトルオペレーションを指定する。デスティネーションベクトルオペランドのデータ要素は、デスティネーションまたは結果データ要素と称され、ソースベクトルオペランドのデータ要素は、ソースデータ要素と称される。これらのソースベクトルオペランドは、同じサイズであり、かつ、同じ幅の複数のデータ要素を含むので、これらは、同じ数のデータ要素を含む。２つのソースベクトルオペランド内の同じビット位置の複数のソースデータ要素は、複数のデータ要素のペアを形成する（対応するデータ要素とも称され、つまり各ソースオペランドのデータ要素位置０のデータ要素が対応し、各ソースオペランドのデータ要素位置１のデータ要素が対応するなど）。当該ＳＩＭＤ命令により指定されるオペレーションは、結果データ要素のマッチング数を生成するためにソースデータ要素のこれらのペアの各々に対して別々に実行されるため、ソースデータ要素の各ペアは、対応する結果データ要素を有する。オペレーションは、縦方向であるので、かつ、結果ベクトルオペランドは、同じサイズであり、同じ数のデータ要素を有し、結果データ要素がソースベクトルオペランドと同じデータ要素の順序に格納されているので、結果データ要素は、ソースベクトルオペランド内のソースデータ要素のそれらの対応するペアとして、結果ベクトルオペランドの同じビット位置にある。この例示的なタイプのＳＩＭＤ命令に加えて、様々な他のタイプのＳＩＭＤ命令がある（例えば、１つだけを有するまたは２つより多くのソースベクトルオペランドを有する、横方向にオペレーションする、異なるサイズ結果ベクトルオペランドを生成する、異なるサイズのデータ要素を有する、及び／または異なるデータ要素の順序を有する）。デスティネーションベクトルオペランド（またはデスティネーションオペランド）という用語は、命令によって指定されたオペレーションを実行した直接的な結果として定義されると理解すべきである。この命令は、そのデスティネーションオペランドをある位置（それが当該命令によって指定されたレジスタまたはメモリアドレスであるかを問わず）に格納することを含むことにより、別の命令によって（その別の命令によりその同じ位置を指定することによって）、ソースオペランドとしてアクセス可能となる。
【０００７】
ｘ８６、ＭＭＸ（商標）、ストリーミングＳＩＭＤ拡張命令（ＳＳＥ）、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４．１及びＳＳＥ４．２を含む命令セットを有する複数のインテル（登録商標）コア（商標）プロセッサに採用されているようなＳＩＭＤ技術により、アプリケーション性能が大幅に改善された（コア及びＭＭＸは、カリフォルニア州サンタクララのインテル・コーポレーションの登録商標または商標である）。アドバンストベクトル拡張（ＡＶＸ）（ＡＶＸ１及びＡＶＸ２）と称され、ＶＥＸ符号化スキームを用いるＳＩＭＤ拡張命令のさらなるセットが、リリース及び／または公開されている（例えば、インテル（登録商標）６４及びＩＡ−３２アーキテクチャソフトウェア開発者マニュアル（２０１１年１０月）を参照、及び、インテル（登録商標）アドバンストベクトル拡張プログラミングリファレンス（２０１１年６月）を参照のこと）。
【図面の簡単な説明】
【０００８】
本発明は例として示されるものであって、複数の添付図面の複数の図に限定されるものではなく、ここで、複数の同様の参照符号は、複数の類似要素を示す。
【図１】ＶＰＴＥＳＴＣＯＮＦのオペレーションの例示的な図を示す。
【図２】は、プロセッサ内でＶＰＴＥＳＴＣＯＮＦ命令を実行する実施形態を示す。
【図３】ＶＰＴＥＳＴＣＯＮＦ命令を処理するための方法の実施形態を示す。
【図４】ブロードキャストの例示的なプロセスを示す。
【図５】ＶＰＢＲＯＡＤＣＡＳＴＭオペレーションの例示的な図を示す。
【図６】プロセッサにおけるＶＰＢＲＯＡＤＣＡＳＴＭ命令実行の実施形態を示す。
【図７】ＶＰＢＲＯＡＤＣＡＳＴＭ命令を処理するための方法の実施形態を示す。
【図８】本発明の一実施形態に係る１つのアクティブビットベクトルライトマスク要素の数、ベクトルサイズ及びデータ要素サイズとの間の相関関係を示す。
【図９】本発明の一実施形態に係るレジスタアーキテクチャ９００のブロック図である。
【図１０Ａ】本発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。
【図１０Ｂ】本発明の複数の実施形態に係るプロセッサ内に含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。
【図１１Ａ】コアがチップ内のいくつかのロジックブロック（同じタイプ及び／または複数の異なるタイプの他のコアを含む）の１つとなる、より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。
【図１１Ｂ】コアがチップ内のいくつかのロジックブロック（同じタイプ及び／または複数の異なるタイプの他のコアを含む）の１つとなる、より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。
【図１２】本発明の複数の実施形態に係る、１つより多くのコアを有してよく、集積メモリコントローラを有してよく、集積グラフィクスを有してもよいプロセッサ１２００のブロック図である。
【図１３】例示的なコンピュータアーキテクチャのブロック図である。
【図１４】例示的なコンピュータアーキテクチャのブロック図である。
【図１５】例示的なコンピュータアーキテクチャのブロック図である。
【図１６】例示的なコンピュータアーキテクチャのブロック図である。
【図１７】本発明の複数の実施形態に係る、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比させるブロック図である。
【図１８】複数のビットベクトルのセットを比較した複数の出力結果を示す。
【発明を実施するための形態】
【０００９】
以下の説明において、多数の具体的な詳細が示される。しかしながら、本発明の実施形態は、これらの具体的な詳細事項を伴うことなく実施可能であると理解される。複数の他の例では、この説明の理解を妨げないように、周知の回路、構造、及び技術は、詳細に示されていない。
【００１０】
本明細書における「一実施形態」、「実施形態」、「例示的な実施形態」等の複数の記載は、記載された実施形態が、特定の機能、構造または特性を含む場合があるが、各実施形態が必ずしもその特定の機能、構造または特性を含むものではないことを示す。さらに、そのような複数の用語は、必ずしも同じ実施形態を意味するものではない。さらに、特定の機能、構造、または特性が実施形態に関連して記載される場合、これらは、明記されているか否かに関わらず、複数の他の実施形態に関連するそのような機能、構造、または特性に関わる当業者の知識の範囲内であるものと思われる。
【００１１】
［概要］
【００１２】
以下の説明において、命令セットアーキテクチャ内のこの特定の命令の複数のオペレーションを記載する前に、説明が必要となり得るいくつかの項目がある。１つのそのような項目は、「ライトマスクレジスタ」と称され、これは、概して、条件付きで要素ごとの計算オペレーションを制御するオペランドを叙述するために使用される（以下、マスクレジスタという用語も使用可能であり、以下で説明される「Ｋ」レジスタのようなライトマスクレジスタを意味する）。以下で使用されるように、ライトマスクレジスタは、ライトマスクレジスタの各アクティブビットがＳＩＭＤ処理中のベクトルレジスタのパックデータ要素のオペレーション／更新を管理する複数のビット（１６、３２、６４など）を格納する。典型的には、プロセッサコアに利用可能な１つまたは複数のライトマスクレジスタがある。
【００１３】
命令セットアーキテクチャは、ベクトルオペレーションを指定する及びこれらのベクトルレジスタから複数のソースレジスタ及び／または複数のデスティネーションレジスタを選択するためのフィールドを有する、少なくともいくつかのＳＩＭＤ命令を含む（例示的なＳＩＭＤ命令は１つまたは複数のベクトルレジスタの複数のコンテンツに対して実行されるベクトルオペレーション、及び複数のベクトルレジスタの１つに格納されるべき当該ベクトルオペレーションの結果を指定してもよい）。本発明の異なる実施形態は、複数の異なるサイズのベクトルレジスタを有してもよく、より多い／より少ない／異なるサイズの複数のデータ要素をサポートしてもよい。
【００１４】
ＳＩＭＤ命令（例えば、バイト、ワード、ダブルワード、クワッドワード）で指定された複数のマルチビットデータ要素のサイズは、ベクトルレジスタ内で複数の「データ要素位置」のビット位置を判断し、ベクトルオペランドのサイズは、データ要素の数を判断する。パックデータ要素は、特定の位置に格納されたデータを指す。言い換えると、デスティネーションオペランドにおける複数のデータ要素のサイズ及びデスティネーションオペランドのサイズ（デスティネーションオペランド内のビットの合計数）に応じて（または言い換えると、デスティネーションオペランドのサイズ及びデスティネーションオペランド内のデータ要素の数に応じて）、結果ベクトルオペランド内の複数のマルチビットデータ要素位置の複数のビット位置は、変化する（例えば、結果ベクトルオペランドのためのデスティネーションがベクトルレジスタである場合（この説明において、複数のベクトルレジスタ及び複数のパックデータ要素レジスタは、交換可能に使用される）、次にデスティネーションベクトルレジスタ内の複数のマルチビットデータ要素位置のビット位置が、変化する）。例えば、複数のマルチビットデータ要素の複数のビット位置は、３２ビットの複数のデータ要素に対してオペレーションするベクトルオペレーション（データ要素位置０はビット位置３１：０を占有し、データ要素位置１はビット位置６３：３２を占有するなど）と、６４ビットの複数のデータ要素に対してオペレーションするベクトルオペレーション（データ要素位置０はビット位置６３：０を占有し、データ要素位置１はビット位置１２７：６４を占有するなど）との間で異なる。
【００１５】
さらに、図８に示すように、本発明の一実施形態に係る１つのアクティブビットベクトルライトマスク要素の数及びベクトルサイズ及びデータ要素サイズとの間には、相関がある。１２８ビット、２５６ビット、５１２ビットのベクトルサイズが示されるが、他の幅も可能である。８ビットバイト（Ｂ）、１６ビットワード（Ｗ）、３２ビットダブルワード（Ｄ）または単精度浮動小数点、及び６４ビットクワッドワード（Ｑ）または倍精度浮動小数点のデータ要素サイズが考慮されるが、他の幅もまた可能である。示されるように、ベクトルサイズが１２８ビットである際に、ベクトルデータ要素サイズが８ビットである際は１６ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが１６ビットである際は８ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが３２ビットである際は４ビットがマスキングのために使用されてもよく、及びベクトルデータ要素サイズが６４ビットの際は２ビットがマスキングのために使用されてもよい。ベクトルサイズが２５６ビットである際に、パックデータ要素の幅が８ビットの際は３２ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが１６ビットである際は１６ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが３２ビットである際は８ビットがマスキングのために使用されてもよく、及びベクトルデータ要素サイズが６４ビットである際は４ビットがマスキングのために使用されてもよい。ベクトルサイズが５１２ビットである際に、ベクトルデータ要素サイズが８ビットである際は６４ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが１６ビットである際は３２ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが３２ビットである際は１６ビットがマスキングのために使用されてもよく、及びベクトルデータ要素サイズが６４ビットである際は８ビットがマスキングのために使用されてもよい。
【００１６】
ベクトルサイズ及びデータ要素サイズの組み合わせに応じて、全６４ビットまたは６４ビットのサブセットのみのいずれかが、ライトマスクとして使用されてもよい。概して、単一の要素ごとのマスキング制御ビットが使用される際には、マスキングに使用されるベクトルライトマスクレジスタ内のビット数（アクティブビット）は、ビットでのベクトルデータ要素サイズで除算されたビットでのベクトルサイズに等しい。
【００１７】
上記のように、ライトマスクレジスタは、ベクトルレジスタ（またはメモリ位置）内の要素に対応するマスクビットを含み、オペレーションが実行されるべき要素を記録する。この理由のため、ベクトルレジスタに関しては、これらのマスクビットに対して類似した挙動を複製する共通のオペレーションを有し、概して、複数のライトマスクレジスタ内で、これらのマスクビットを調整可能にすることが望ましい。
【００１８】
我々が効率的にベクトル化したい重要なアルゴリズムのパターンは、「スパース更新」である。ここで、我々は、間接的にアドレスされるメモリ位置に対して、読み出し、修正、書き込みオペレーションを実行する（例えば、Ａ［Ｂ［ｉ］］をロードし、これに何らかを加算し、値をＡ［Ｂ［ｉ］］に戻して格納する。）これのベクトル化は、我々のＩＳＡ及びハードウェアが直接サポートする集約、修正、分散オペレーションの実行を伴い、１６個のｉの連続値の場合、１６個のＡ［Ｂ［ｉ］］を集約し、ＳＩＭＤ計算を実行し、複数の新たな値を戻して分散する。しかしながら、このベクトル化は、単一の集約／分散命令が各メモリ位置にただ一度アクセスすることを想定している。例えば、Ｂ［ｉ］の２つの連続値が同じである場合、第２のものに対する読み出し、修正、書き込みは、第１のものに依存し、これらをＳＩＭＤ態様で同時に実行することは、依存性に反し、誤った解答を出すという結果をもたらす。
【００１９】
ベクトルレジスタ内の各要素の等価性を、「より初期の」（ＬＳＢにより近い）複数の要素と比較することが可能である。命令は、これらの比較結果を、複数のビットベクトルのセットとして出力する。これは、図１８に示される。複製の情報があるとして、コードはベクトル化されることができ、複数の固有のインデックスで複数の要素のサブセットを判断し、これらをＳＩＭＤ態様で計算した後、複数の残りの要素に対してリトライするべくループバックすることにより、メモリを介してさらに依存性を高める。疑似コードでは、これは、以下の通りである。
for (i=0; i<N; i+=SIMD_WIDTH){
indices = vload (&B[i]);
comparisons = vpconflict (indices);
elements_left_mask = all_ones;
do {
do_these = Compute_Mask_of_Unique_Remaining_Indices (comparisons, elements_left_mask);
Gather_Compute_Scatter (indices, do_these);
elements_left_mask ^= do_these;
} while (elements_left_mask != 0);
}
【００２０】
Ｃｏｍｐｕｔｅ＿Ｍａｓｋ＿ｏｆ＿Ｕｎｉｑｕｅ＿Ｒｅｍａｉｎｉｎｇ＿Ｉｎｄｉｃｅｓ関数は、本開示の１つの焦点である。このオペレーションは、以下の処理を実行する必要がある。
【００２１】
（１）ｅｌｅｍｅｎｔｓ＿ｌｅｆｔ＿ｍａｓｋを、インデックスと同じサイズとなるようにゼロ拡張した後、「ｃｏｍｐａｒｉｓｏｎｓ」の各要素で結果に論理的ＡＮＤを実行する。これにより、前のｄｏ−ｗｈｉｌｅループの複数のイタレーションで既に算出されたあらゆる要素に対するコンフリクトが破棄される。これを現在行うために、我々は、マスクを汎用レジスタに移動させた後、これをベクトルレジスタにブロードキャストする必要がある。
【００２２】
（２）ゼロへの等価性について、（１）の結果の各要素をテストする。要素がゼロの場合、これはコンフリクトがなく、我々は、当該要素に対応する出力マスクレジスタ内にビットを設定する。
【００２３】
（３）ｅｌｅｍｅｎｔｓ＿ｌｅｆｔ＿ｍａｓｋで、（２）の結果に論理的ＡＮＤを実行する。これにより、既に処理されたあらゆる要素が破棄される。これは、最大で５つの命令が必要な場合がある。
【００２４】
上述された機能の全てを実行する単一命令（ｖｐｔｅｓｔｃｏｎｆ  ｋ１，ｋ２，ｚｍｍ１）が、以下に詳述される。この命令は、我々が本開示の初めに示した疑似コード内のＣｏｍｐｕｔｅ＿Ｍａｓｋ＿ｏｆ＿Ｕｎｉｑｕｅ＿Ｒｅｍａｉｎｉｎｇ＿Ｉｎｄｉｃｅｓ関数全体を置換する。これにより、疑似コードは、以下のように変化する。
for (i=0; i<N; i+=SIMD_WIDTH) {
indices = vload (&B[i]);
comparisons = vpconflict (indices);
elements_left_mask = all_ones;
do {
do_these = vptestconf (elements_left_mask, comparisons);
Gather_Compute_Scatter (indices, do_these);
elements_left_mask ^= do_these;
} while (elements_left_mask != 0);
}
【００２５】
この命令は、（互いにコンフリクトすることなく）並列に進行し得る複数のイタレーションの連続する複数のベクトルに対応する複数のマスクを計算するために、用いられてもよい。言い換えると、第１のグループは、全ての要素が１に設定された前のイタレーション（リードツーライト）とコンフリクトしないマスクに対応し、これらは、並列に進行することができる。第２のイタレーションでは、第１のマスクなどによってカバーされなかった複数のイタレーションに対応する複数の要素を考慮するだけでよい。
【００２６】
以下は、命令セットのベクトルパックテストコンフリクト（「ＶＰＴＥＳＴＣＯＮＦ」）命令と総称される命令の複数の実施形態、及び、いくつかの異なる態様で有益であるそのような命令を実行するために用いられ得る複数のシステム、アーキテクチャ及び命令フォーマット等の複数の実施形態である。ＶＰＴＥＳＴＣＯＮＦの実行により、ソースマスクオペランドからのデータが、ソースパックデータオペランドの各データ要素で論理的「ＡＮＤ」された後、コンフリクトチェック結果を生成するために、複数の論理的「ＡＮＤ」オペレーションのいずれがコンフリクトを示すかが判断され、ソースマスクオペランドからのデータによるコンフリクトチェック結果で別の論理的「ＡＮＤ」が実行される。第２の「ＡＮＤ」の結果は、デスティネーションマスクオペランドのようなデスティネーション位置に格納される。いくつかの実施形態では、マスクオペランドは、詳しく上述されたように、ライトマスクレジスタである。いくつかの実施形態では、ソースマスクオペランドは、ソースパックデータオペランドの各データ要素と同じサイズになるようにゼロ拡張される。
【００２７】
図１は、ＶＰＴＥＳＴＣＯＮＦのオペレーションの例示的な図を示す。示された例では、ソースライトマスクレジスタ１０１からのデータは、ＡＮＤロジック１０５（０）−（Ｎ）を用いて、パックデータソースの複数のデータ要素１０３（０）−（Ｎ）で論理的「ＡＮＤされ」る。ソースレジスタ１０１は、ライトマスクレジスタでなくてもよく、汎用レジスタまたはパックデータレジスタのような任意の他のストレージエンティティたり得る。しかしながら、理解を容易ならしめるために、本明細書ではソースライトマスクレジスタが用いられる。図は個別の複数のソースライトマスクレジスタを示すが、いくつかの実施形態では、このデータは、パックデータソース１０３と同じサイズの一時パックデータレジスタに格納される。このレジスタへの書き込みは、本明細書で詳しく後述されるブロードキャスト命令により実現され得る。いくつかの実施形態では、ソースライトマスクレジスタのデータは、データは、パックデータソース１０３の各パックデータ要素と同じサイズになるまでゼロ拡張される。このＡＮＤ実行により、詳しく前述された例示的なシナリオで既に算出されたあらゆる要素に対するコンフリクトが破棄される。
【００２８】
各ＡＮＤ実行オペレーションの結果は、次に、ＡＮＤの結果がゼロか否かを判断するロジック１０７（０）−１０７（Ｎ）が適用される。結果がゼロの場合、当該要素と他の複数のデータ要素との間にコンフリクトはない。これらの判断の結果は、一時結果レジスタ１０９において、一時結果レジスタ１０９の対応する複数のビット位置に格納される。例えば、パックデータソース１０３のデータ要素０がソースライトマスクレジスタ１０１のデータでＡＮＤされた後、コンフリクト判断がロジック１０７（０）によってなされた場合、これが、データ要素位置０に対するコンフリクト結果である。このコンフリクト判断は、このため、一時結果レジスタ１０９のビット位置０に格納される。いくつかの実施形態では、「１」は、コンフリクトがなく、かつ、他で「０」が用いられている場合に、設定される。
【００２９】
一時結果レジスタ１０９の複数のコンテンツは、既に処理されたあらゆる要素を破棄するために、ソースライトマスクレジスタ１０１からのデータで、ロジック１１１を用いて論理的ＡＮＤされる。このＡＮＤ実行の結果は、デスティネーションライトマスクレジスタ１１３に格納される。
【００３０】
［ＶＰＴＥＳＴＣＯＮＦの例示的なフォーマット］
この命令の例示的なフォーマットは、「ＶＰＴＥＳＴＣＯＮＦ  Ｋ１，Ｋ２，Ｒ２」であり、ここで、デスティネーションオペランドＫ１は、ライトマスクレジスタであり、Ｋ２は、ソースライトマスクレジスタであり、ソースオペランドＲ２は、ベクトル（パックデータ）レジスタ（１２８、２５６、５１２ビットレジスタ等のような）であり、ＶＰＴＥＳＴＣＯＮＦは、命令のオペコードである。前述したように、命令は、複数のライトマスクレジスタだけではなく、他の複数のレジスタと共にさらに機能する。
【００３１】
［ＶＰＴＥＳＴＣＯＮＦを実行する例示的な複数の方法］
図２は、プロセッサにおけるＶＰＴＥＳＴＣＯＮＦ命令実行の実施形態を示す。ソースライトマスクレジスタオペランド、ソースベクトルレジスタオペランド、オペランド及びデスティネーションライトマスクレジスタを有するＶＰＴＥＳＴＣＯＮＦ命令は、２０１でフェッチされる。
【００３２】
ＶＰＴＥＳＴＣＯＮＦ命令は、２０３で、復号ロジックにより復号される。命令のフォーマットに応じて、データ変換の有無、書き込み及び／または取得を行うレジスタ、アクセスするメモリアドレス等のような様々なデータが、このステージで解釈されてもよい。
【００３３】
２０５において、複数のソースオペランド値が取得／読み出される。例えば、ソースベクトルレジスタが、読み出される。複数のソースオペランドの一方または両方がメモリオペランドである場合、当該オペランドに関連付けられた複数のデータ要素が取得される。いくつかの実施形態では、メモリからの複数のデータ要素は、一時レジスタに格納される。このステージで、いくつかの実施形態では、必要に応じて、ソースライトマスクデータは、ソースベクトルレジスタ内のデータ要素と同じサイズになるようにゼロ拡張される。いくつかの実施形態では、（ゼロ拡張された）ソースライトマスクデータは、ソースベクトルレジスタと同じサイズの一時ベクトルレジスタにブロードキャストされる。
【００３４】
ＶＰＴＥＳＴＣＯＮＦ命令（または、複数のマイクロオペレーションなどのような命令を備える複数のオペレーション）は、２０７で、１つまたは複数の機能ユニットのような実行リソースによって実行されることにより、ソースマスクオペランドからのデータに、ソースパックデータオペランドの各データ要素で論理的「ＡＮＤ」を実行した後、コンフリクトチェック結果を生成するために、複数の論理的「ＡＮＤ」オペレーションのいずれがコンフリクトを示すかを判断し、ソースマスクオペランドからのデータで、コンフリクトチェック結果に論理的「ＡＮＤを実行」する。
【００３５】
第２の「ＡＮＤ」の結果は、２０９で、デスティネーションマスクオペランドのようなデスティネーション位置に格納される。２０７と２０９は別々に示されるが、いくつかの実施形態では、それらは命令の実行の一部として、一緒に実行される。
【００３６】
図３は、ＶＰＴＥＳＴＣＯＮＦ命令を処理するための方法の実施形態を示す。この実施形態では、オペレーション２０１−２０５の全てではないとしても、いくつかは以前に実行されているが、しかしながら、それらは以下に提示される詳細を不明瞭にしないために示されていないものと仮定される。例えば、フェッチ及び復号は示されておらず、またオペランド取得も示されていない。
【００３７】
３０１では、ソースライトマスクレジスタのデータは、パックデータソースの複数のパックデータ要素及び複数のデスティネーションオペランドと同じサイズに（必要な場合には）ゼロ拡張される。例えば、ソースライトマスクレジスタが８ビットで値がｘ０１であり、パックデータソース及びデスティネーションの複数のデータ要素が１６ビットである場合、ソースライトマスクレジスタのデータは、８ビット拡張され、ｘ０００１となる。このステージで、ブロードキャストがさらに行われてもよい。
【００３８】
図４は、このブロードキャストのための例示的なプロセスを示す。いくつかの実施形態では、ソースライトマスクレジスタの（ゼロ拡張された）データは、４０１で、汎用レジスタに移動される。ソースライトマスクレジスタの（ゼロ拡張された）データは、４０３で、ソースパックデータ要素レジスタと同じサイズの一時パックデータ要素（ベクトル）レジスタにブロードキャストされる。
【００３９】
３０３では、パックデータソースの各データ要素で、（ゼロ拡張された）ソースライトマスクレジスタの複数のコンテンツに、論理的ＡＮＤが実行される。ブロードキャストが実行された場合、３０３で、ソースパックデータ要素レジスタに対し、対応するデータ要素位置ごとに、一時パックデータ要素レジスタのＡＮＤを実行する。
【００４０】
３０５で、各ＡＮＤオペレーションの結果である値がゼロであるか否かが、判断される。ＡＮＤオペレーションの結果、ゼロである値の各々に対し、３０７で、一時ストレージ位置の対応するビット位置に、「１」が書き込まれる。ＡＮＤオペレーションの結果である値がゼロ以外の各々に対し、３０９で、「０」が、一時ストレージ位置の対応するビット位置に書き込まれる。
【００４１】
３１１で、一時ストレージ位置の複数の値は、ソースライトマスクレジスタの（ゼロ拡張された）データでＡＮＤを実行し、３１３で、当該ＡＮＤ実行の複数の結果は、デスティネーションライトマスクレジスタに格納される。
【００４２】
以下は、命令セットのベクトルパックテストコンフリクト（「ＶＰＢＲＯＡＤＣＡＳＴＭ」）命令と総称される命令の複数の実施形態、及びいくつかの異なる態様で有益であるそのような命令を実行するために用いられ得る複数のシステム、アーキテクチャ及び命令フォーマット等の複数の実施形態である。ＶＰＢＲＯＡＤＣＡＳＴＭの実行により、サイズＭのマスクレジスタは、サイズＮ（Ｎ＞Ｍ）の複数の要素で、ベクトルレジスタにブロードキャストされる。例えば、ＶＰＢＲＯＡＤＣＡＳＴＭＷ２Ｄは、１６ビットの複数のマスクを、ベクトルレジスタデスティネーションの全てのダブルワードパックデータ要素にブロードキャストする。バイトツーバイト（Ｂ２Ｂ）、バイトツーワード（Ｂ２Ｗ）、ワードツーワード（Ｗ２Ｗ）、ワードツークワッドワード（Ｗ２Ｑ）、ダブルワードツーダブルワード（Ｄ２Ｄ）、ダブルワードツークワッドワード（Ｄ２Ｗ）及びクワッドワードツークワッドワード（Ｑ２Ｑ）等のような、この命令の多くの形式があってもよい。
【００４３】
図５は、ＶＰＢＲＯＡＤＣＡＳＴＭオペレーションの例示的な図を示す。示された例では、（ゼロ拡張された）ソースライトマスクレジスタ５０１からのデータは、パックデータ（ベクトル）レジスタデスティネーション５０３の複数のデータ要素位置にブロードキャストされる。
【００４４】
［ＶＰＢＲＯＡＤＣＡＳＴＭの例示的なフォーマット］
この命令の例示的なフォーマットは、「ＶＰＢＲＯＡＤＣＡＳＴＭ｛ｋ２｝Ｒ１，Ｋ１」であり、ここで、ソースオペランドＫ１は、ライトマスクレジスタであり、デスティネーションオペランドＲ２は、ベクトル（パックデータ）レジスタ（１２８、２５６、５１２ビットレジスタ等のような）であり、ＶＰＢＲＯＡＤＣＡＳＴＭは、命令のオペコードである。前述したように、命令は、複数のライトマスクレジスタだけではなく、他の複数のレジスタと共にさらに機能する。Ｋ２は、詳しく上述された態様で用いられ得る、選択的なライトマスクである。特に、このライトマスクの各ビット位置は、ブロードキャストの書き込みをブロックするために用いられてもよい。例えば、最下位ビット位置が０の場合、デスティネーションレジスタの最下位データ要素位置は、ソースライトマスクレジスタに書き込まれた（ゼロ拡張された）データを有さない。オペコードは、さらに、データ転送のタイプＢ２Ｂ、Ｂ２Ｗ等の表示を有してもよい。これは、行われるべきゼロ拡張の量を判断するために用いられてもよい。
【００４５】
［ＶＰＢＲＯＡＤＣＡＳＴＭを実行する例示的な複数の方法］
図６は、プロセッサでＶＰＢＲＯＡＤＣＡＳＴＭ命令を実行する実施形態を示す。ソースライトマスクレジスタオペランド及びデスティネーションベクトルレジスタを有するＶＰＢＲＯＡＤＣＡＳＴＭ命令は、６０１でフェッチされる。
【００４６】
ＶＰＢＲＯＡＤＣＡＳＴＭ命令は、６０３で、復号ロジックにより復号される。命令のフォーマットに応じて、データ変換の有無、書き込み及び／または取得を行うレジスタ、アクセスするメモリアドレス等のような様々なデータが、このステージで解釈されてもよい。
【００４７】
６０５において、ソースオペランド値が取得／読み出される。例えば、ソースライトマスクレジスタが、読み出される。
【００４８】
ＶＰＢＲＯＡＤＣＡＳＴＭ命令（または複数のマイクロオペレーションなどのような命令を備える複数のオペレーション）は、６０７で、ソースライトマスクオペランドのデータが、デスティネーションベクトルレジスタのデータ要素と同じサイズになるように、ソースライトマスクオペランドのデータを（必要な場合に）ゼロ拡張するために、１つまたは複数の機能ユニットのような実行リソースによって実行される。
【００４９】
ソースライトマスクレジスタの（ゼロ拡張された）データは、６０９で、デスティネーションベクトルレジスタの各データ要素位置にブロードキャスト（格納）される。６０７と６０９は別々に示されるが、いくつかの実施形態では、それらは命令の実行の一部として、一緒に実行される。
【００５０】
図７は、ＶＰＢＲＯＡＤＣＡＳＴＭ命令を処理するための方法の実施形態を示す。この実施形態では、オペレーション６０１−６０５の全てではないとしても、いくつかは以前に実行されているが、しかしながら、それらは以下に提示する詳細を不明瞭にしないために、示されていないものと仮定される。例えば、フェッチ及び復号は示されておらず、またオペランド取得も示されていない。
【００５１】
７０１では、ソースライトマスクレジスタのデータは、パックデータデスティネーションの複数のパックデータ要素と同じサイズに（必要な場合には）ゼロ拡張される。例えば、ソースライトマスクレジスタが８ビットで値がｘ０１であり、パックデータデスティネーションの複数のデータ要素が１６ビットである場合、ソースライトマスクレジスタのデータは、８ビット拡張され、ｘ０００１となる。
【００５２】
ソースライトマスクの（ゼロ拡張された）データは、７０３で、デスティネーションレジスタの最下位データ要素位置に書き込まれる。
【００５３】
７０５で、これがデスティネーション位置の最上位データ要素位置であるかが判断される。イエスの場合、７０７で、ブロードキャストは終了する。いくつかの実施形態では、最下位データ要素位置に書き込んだ後、この段階は、スキップされる。
【００５４】
ノーの場合は、ライトマスクの（ゼロ拡張された）データが、７０９で、デスティネーションレジスタの次の最下位データ要素位置に書き込まれる。７０５で、これがデスティネーション位置の最上位データ要素位置であるかが判断される。
【００５５】
上述された図７についての説明は、連続的なプロセスとして示されるが、いくつかの実施形態では、デスティネーションレジスタの複数のデータ要素位置は、並列に書き込まれる。さらに、上述されたように、ライトマスクレジスタは、いくつかの実施形態では、複数のデータ要素位置への書き込みを阻止するためにさらに用いられてもよい。
【００５６】
［例示的な命令フォーマット］
【００５７】
本明細書に記載される命令の複数の実施形態は、異なる複数のフォーマットで具現されてもよい。さらに、例示的なシステム、アーキテクチャ、及びパイプラインが以下に詳述される。命令（複数の場合もある）の実施形態は、そのようなシステム、アーキテクチャ、及びパイプライン上で実行することができるが、詳述されるものに限定されるものではない。
【００５８】
［例示的なレジスタアーキテクチャ］
【００５９】
図９は、本発明の一実施形態に係るレジスタアーキテクチャ９００のブロック図である。図示した実施形態には、５１２ビット幅の３２本のベクトルレジスタ９１０が存在する。これらの複数のレジスタは、ｚｍｍ０−ｚｍｍ３１として記載される。下位１６本のｚｍｍレジスタの下位２５６ビットは、複数のレジスタｙｍｍ０−１６の上にオーバーレイされている。下位１６本のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、複数のレジスタｘｍｍ０−１５の上にオーバーレイされている。
【００６０】
［複数の汎用レジスタ９２５］
示された実施形態では、複数のメモリオペランドにアドレスする既存の複数のｘ８６アドレッシングモードと共に用いられる１６本の６４ビット汎用レジスタが存在する。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、及びＲ８−Ｒ１５という名称によって参照される。
【００６１】
［ＭＭＸパック型整数フラットレジスタファイル９５０がエイリアスされるスカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）９４５］
示された実施形態では、ｘ８７スタックは、ｘ８７命令セット拡張を用いて３２／６４／８０ビット浮動小数点データに対してスカラ浮動小数点の複数のオペレーションを実行するために用いられる８エレメントスタックであり、複数のＭＭＸレジスタは、６４ビットパック型整数データに対して複数のオペレーションを実行し、ＭＭＸ及びＸＭＭレジスタの間で実行されるいくつかのオペレーションのための複数のオペランドを保持するために用いられる。
【００６２】
本発明の複数の代替的な実施形態は、より幅の広い、または狭い複数のレジスタを使用しうる。さらに、本発明の複数の代替的な実施形態は、より多くの、より少ない、または異なるレジスタファイル及びレジスタを用い得る。
【００６３】
複数の例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ
【００６４】
複数のプロセッサコアは、複数の異なる態様で、複数の異なる目的のために、複数の異なるプロセッサにおいて実装され得る。例えば、そのような複数のコアの複数の実装は、１）汎用計算向けの汎用インオーダコア、２）汎用計算向けの高性能の汎用アウトオブオーダコア、３）主にグラフィクス及び／または科学用途（スループット）計算向けの特定用途向けコアを含んでもよい。複数の異なるプロセッサの実装は、１）汎用計算向けの１つまたは複数の汎用インオーダコア及び／または汎用計算向けの１つまたは複数の汎用アウトオブオーダコアを含むＣＰＵ、並びに２）主にグラフィクス及び／または科学用途（スループット）向けの１つまたは複数の特定用途向けコアを含むコプロセッサを含んでもよい。そのような複数の異なるプロセッサは、複数の異なるコンピュータシステムアーキテクチャをもたらし、複数の異なるコンピュータシステムアーキテクチャは、１）ＣＰＵとは別のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージにおける別のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、場合によっては、集積グラフィクス及び／または科学用途（スループット）ロジックのような特定用途向けロジック、または特定用途向けコア等と称される）、及び４）同じダイ上に、説明されたＣＰＵ（場合によっては、アプリケーションコアまたはアプリケーションプロセッサと称される）、上述されたコプロセッサ、及びさらなる機能性を含み得るシステムオンチップを含んでもよい。次に、複数の例示的なコアアーキテクチャが説明された後、複数の例示的なプロセッサ及びコンピュータアーキテクチャが説明される。
【００６５】
［例示的な複数のコアアーキテクチャ］
［インオーダ及びアウトオブオーダコアのブロック図］
【００６６】
図１０Ａは、本発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図１０Ｂは、本発明の複数の実施形態に係るプロセッサ内に含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図１０Ａ−Ｂにおける複数の実線のボックスは、インオーダパイプライン及びインオーダコアを示し、選択的に追加された複数の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行／実行パイプライン及びコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様が説明される。
【００６７】
図１０Ａでは、プロセッサパイプライン１０００が、フェッチステージ１００２、長さ復号ステージ１００４、復号ステージ１００６、配分ステージ１００８、リネームステージ１０１０、スケジュール（ディスパッチまたは発行としても知られる）ステージ１０１２、レジスタ読み出し／メモリ読み出しステージ１０１４、実行ステージ１０１６、ライトバック／メモリ書き込みステージ１０１８、例外処理ステージ１０２２、及びコミットステージ１０２４を含む。
【００６８】
図１０Ｂは、実行エンジンユニット１０５０と結合されるフロントエンドユニット１０３０を含むプロセッサコア１０９０を示し、両方ともメモリユニット１０７０と結合されている。コア１０９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッドあるいは代替的なコアタイプであってもよい。さらに他のオプションとして、コア１０９０は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用計算グラフィクス処理ユニット（ＧＰＧＰＵ）コア、グラフィクスコアなどのような特定用途向けコアであってもよい。
【００６９】
フロントエンドユニット１０３０は、命令キャッシュユニット１０３４と結合される分岐予測ユニット１０３２を含み、命令キャッシュユニット１０３４は命令トランスレーションルックアサイドバッファ（ＴＬＢ）１０３６と結合され、命令トランスレーションルックアサイドバッファ１０３６は命令フェッチユニット１０３８と結合され、命令フェッチユニット１０３８は復号ユニット１０４０と結合される。復号ユニット１０４０（またはデコーダ）は、複数の命令を復号し、１つまたは複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または、元の命令から復号され、もしくは別の方法でそれを反映し、もしくはそれから派生する他の制御信号を、出力として生成してもよい。復号ユニット１０４０は、複数の様々な異なるメカニズムを用いて実装され得る。複数の適切なメカニズムの例は、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ（ＰＬＡ）、複数のマイクロコードリードオンリメモリ（ＲＯＭ）等を含むが、これらに限定されない。一実施形態では、コア１０９０は、複数の特定のマクロ命令に対するマイクロコードを（例えば、復号ユニット１０４０、そうでなければフロントエンドユニット１０３０内に）格納する、マイクロコードＲＯＭまたは他の媒体を含む。復号ユニット１０４０は、実行エンジンユニット１０５０内のリネーム／アロケータユニット１０５２と結合される。
【００７０】
実行エンジンユニット１０５０は、リタイアメントユニット１０５４及び１つまたは複数のスケジューラユニット１０５６のセットと結合されるリネーム／アロケータユニット１０５２を含む。スケジューラユニット１０５６は、複数のリザベーションステーション、中央命令ウィンドウ等を含む、任意の数の異なるスケジューラを表す。スケジューラユニット１０５６は、物理的レジスタファイルユニット１０５８に結合される。物理的レジスタファイルユニット１０５８の各々は、１つまたは複数の物理的レジスタファイルを表し、それらの異なるいくつかが、スカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインタ）等のような、１つまたは複数の異なるデータ型を格納する。一実施形態では、物理的レジスタファイルユニット１０５８は、ベクトルレジスタユニット及びスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理的レジスタファイルユニット１０５８は、リタイアメントユニット１０５４によってオーバラップされていることにより、レジスタリネーミング及びアウトオブオーダ実行が実装され得る複数の様々な態様を示す例えば、リオーダバッファならびにリタイアメントレジスタファイルを用いる、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いる、レジスタマップ及び複数のレジスタのプールを用いる等）。リタイアメントユニット１０５４及び物理的レジスタファイルユニット１０５８は、実行クラスタ１０６０と結合される。実行クラスタ１０６０は、１つまたは複数の実行ユニット１０６２のセット及び１つまたは複数のメモリアクセスユニット１０６４のセットを含む。実行ユニット１０６２は、複数の様々なオペレーション（例えば、シフト、加算、減算、乗算）を、複数の様々な型のデータ（例えば、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行してもよい。いくつかの実施形態は、複数の具体的な機能または複数の機能の複数のセット専用の、多数の実行ユニットを含み得るが、他の実施形態は、１つだけの実行ユニット、または、その全てで全ての機能を実行し得る複数の実行ユニットを含み得る。スケジューラユニット1056、物理的レジスタファイルユニット1058及び実行クラスタ1060は、複数である場合もあるものとして示されるが、その理由は、複数の特定の実施形態は、特定の複数の型のデータ／オペレーションに対して、複数の別のパイプラインを生成するからである（例えば、各々が自己のスケジューラユニット、物理的レジスタファイルユニット及び／または実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点/パック型整数/パック型浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び／またはメモリアクセスパイプラインであり、個別のメモリアクセスパイプラインの場合、パイプラインの実行クラスタのみがメモリアクセスユニット1064を有する複数の特定の実施形態が実装される）。複数の別の���イプラインが使用される場合、これらのパイプラインのうち１つまたは複数は、アウトオブオーダ発行／実行であり、残りはインオーダであり得ることを理解されたい。
【００７１】
複数のメモリアクセスユニット１０６４のセットは、メモリユニット１０７０と結合される。メモリユニット１０７０は、二次（Ｌ２）キャッシュユニット１０７６と結合されるデータキャッシュユニット１０７４と結合される、データＴＬＢユニット１０７２を含む。例示的な一実施形態では、メモリアクセスユニット１０６４は、メモリユニット１０７０内のデータＴＬＢユニット１０７２と各々結合される、ロードユニット、ストアアドレスユニット、及びストアデータユニットを含んでもよい。命令キャッシュユニット１０３４は、メモリユニット１０７０内の二次（Ｌ２）キャッシュユニット１０７６とさらに結合される。Ｌ２キャッシュユニット１０７６は、１つまたは複数の他のレベルのキャッシュと結合され、最終的にメインメモリと結合される。
【００７２】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン１０００を実装し得る。１）命令フェッチ１０３８が、フェッチ及び長さ復号ステージ１００２及び１００４を実行する、２）復号ユニット１０４０が、復号ステージ１００６を実行する、３）リネーム／アロケータユニット１０５２が、配分ステージ１００８及びリネームステージ１０１０を実行する、４）スケジューラユニット１０５６が、スケジュールステージ１０１２を実行する、５）物理的レジスタファイルユニット１０５８及びメモリユニット１０７０が、レジスタ読み出し／メモリ読み出しステージ１０１４を実行し、実行クラスタ１０６０が、実行ステージ１０１６を実行する、６）メモリユニット１０７０及び物理的レジスタファイルユニット１０５８が、ライトバック／メモリ書き込みステージ１０１８を実行する、７）複数の様々なユニットが、例外処理ステージ１０２２に関わり得る、ならびに８）リタイアメントユニット１０５４及び物理的レジスタファイルユニット１０５８が、コミットステージ１０２４を実行する。
【００７３】
コア１０９０は、本明細書に記載される命令を含む、１つまたは複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンに追加されたいくつかの拡張を有する）、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズ（ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ）のＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングス（ＡＲＭ  Ｈｏｌｄｉｎｇｓ）のＡＲＭ命令セット（ＮＥＯＮのような任意追加の拡張を有する））をサポートしてもよい。一実施形態では、コア１０９０はパックデータ命令セット拡張をサポートするためのロジック（例えば、前述のＡＶＸ１、ＡＶＸ２、及び／または総称ベクトル向け命令フォーマットのいくつかの形（Ｕ＝０及び／またはＵ＝１））を含み、それによって多くのマルチメディアアプリケーションによって用いられる複数のオペレーションは、パックデータを用いて実行されることが可能となる。
【００７４】
コアは、マルチスレッディング（複数のオペレーションまたはスレッドの２つまたはそれより多くの並列なセットを実行すること）をサポートしてもよく、時分割マルチスレッディング、同時マルチスレッディング（ここで、単一の物理的コアは、物理的コアが同時マルチスレッディングを実行する複数のスレッドの各々に、論理コアを提供する）、またはこれらの組み合わせ（例えば、時分割フェッチ及び復号、その後、インテル（登録商標）ハイパースレッディングテクノロジーでのような同時マルチスレッディング）を含む複数の様々な態様で、これを実行してもよいことを理解されたい。
【００７５】
アウトオブオーダ実行との関連で、レジスタリネーミングを説明するが、レジスタリネーミングは、インオーダアーキテクチャで用いられ得ることを理解されたい。図示されたプロセッサの実施形態は、個別の命令及びデータキャッシュユニット１０３４／１０７４及び共有Ｌ２キャッシュユニット１０７６をさらに含むが、複数の代替的な実施形態は、命令及びデータの両方のための、例えば、一次（Ｌ１）内部キャッシュのような単一の内部キャッシュ、または複数のレベルの内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュと、コア及び／またはプロセッサの外部にある外部キャッシュとの組み合わせを含み得る。代替的に、キャッシュの全てが、コア及び／またはプロセッサの外部にあり得る。
【００７６】
［具体的な、例示的インオーダコアアーキテクチャ］
【００７７】
図１１Ａ−Ｂは、コアが、チップ内のいくつかのロジックブロック（同じタイプ及び／または複数の異なるタイプの複数の他のコアを含む）の１つになるであろう、より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。複数のロジックブロックは、アプリケーションに応じて、高帯域幅の相互接続ネットワーク（例えば、リングネットワーク）を介していくつかの固定機能ロジック、メモリＩ／Ｏインタフェース、及び他の必要なＩ／Ｏロジックと通信する。
【００７８】
図１１Ａは、本発明の複数の実施形態に係る、単一のプロセッサコアのブロック図であって、そのオンダイ相互接続ネットワーク１１０２への接続、及びその二次（Ｌ２）キャッシュのローカルサブセット１１０４を伴う。一実施形態では、命令デコーダ１１００が、パックデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ１１０６が、スカラ及びベクトルユニットに入るキャッシュメモリへの低レイテンシアクセスを可能にする。一実施形態では（設計を単純にするために）、スカラユニット１１０８及びベクトルユニット１１１０が、個別のレジスタセット（それぞれ、スカラレジスタ１１１２及びベクトルレジスタ１１１４）を用い、それらの間で転送されたデータはメモリに書き込まれ、その後、一次（Ｌ１）キャッシュ１１０６からリードバックされるが、本発明の複数の代替的な実施形態は、異なるアプローチを用いてもよい（例えば、単一のレジスタセットを用いるか、またはデータを、ライトバックまたはリードバックすることなく、２つのレジスタファイルの間で転送することを可能にする通信経路を含む）。
【００７９】
Ｌ２キャッシュのローカルサブセット１１０４は、１つのプロセッサコアあたり１つずつ、個別のローカルサブセットに分割されたグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュのそれ自身のローカルサブセット１１０４へのダイレクトアクセス経路を有する。プロセッサコアによって読み出されたデータは、そのＬ２キャッシュサブセット１１０４内に格納され、他のプロセッサコアがそれら自身のローカルＬ２キャッシュサブセットにアクセスするのと並列に、迅速にアクセスされることができる。プロセッサコアによって書き込まれたデータは、必要に応じて、それ自身のＬ２キャッシュサブセット１１０４内に格納され、他のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを保証する。リングネットワークは、双方向性であり、複数のプロセッサコア、Ｌ２キャッシュ、及び他のロジックブロックのような複数のエージェントが、チップ内で互いに通信することを可能にする。各リングデータパスは、１つの方向につき１０１２ビット幅である。
【００８０】
図１１Ｂは、本発明の複数の実施形態に係る図１１Ａにおけるプロセッサコアの一部の拡大図である。図１１Ｂは、Ｌ１キャッシュ１１０６の一部であるＬ１データキャッシュ１１０６Ａ、ならびにベクトルユニット１１１０及び複数のベクトルレジスタ１１１４に関する更なる詳細を含む。具体的には、ベクトルユニット１１１０は、整数、単精度浮動小数、及び倍精度浮動小数命令のうちの１つまたは複数を実行する、１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ  １１２８参照）である。ＶＰＵは、スウィズルユニット１１２０によるレジスタ入力のスウィズル、数値変換ユニット１１２２Ａ−Ｂによる数値変換、及び複製ユニット１１２４によるメモリ入力に対する複製をサポートする。
【００８１】
［集積メモリコントローラ及びグラフィクスを有するプロセッサ］
【００８２】
図１２は、本発明の複数の実施形態に係るプロセッサ１２００のブロック図であり、これは、１つより多くのコアを有してよく、集積メモリコントローラを有してよく、集積グラフィクスを有してもよい。図１２における複数の実線のボックスは、単一のコア１２０２Ａ、システムエージェント１２１０、１つまたは複数のバスコントローラユニット１２１６のセットを備えるプロセッサ１２００を示し、選択的に追加された複数の破線のボックスは、複数のコア１２０２Ａ−Ｎ、システムエージェントユニット１２１０内の１つまたは複数の集積メモリコントローラユニット１２１４のセット、及び特定用途向けロジック１２０８を備える代替的なプロセッサ１２００を示す。
【００８３】
したがって、プロセッサ１２００の複数の異なる実装には、１）（１つまたは複数のコアを含み得る）集積グラフィクス及び／または科学用途（スループット）ロジックである特定用途向けロジック１２０８、及び１つまたは複数の汎用コア（例えば、複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、これら２つの組み合わせ）である複数のコア１２０２Ａ−Ｎを有するＣＰＵ、２）主にグラフィクス及び／または科学用途（スループット）を目的とする多数の特定用途向けコアである複数のコア１２０２Ａ−Ｎを有するコプロセッサ、及び３）多数の汎用インオーダコアである複数のコア１２０２Ａ−Ｎを有するコプロセッサが含まれ得る。それゆえ、プロセッサ１２００は、汎用プロセッサ、コプロセッサ、または例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用グラフィクス処理ユニット）、ハイスループット多集積コア（ＭＩＣ）コプロセッサ（３０個またはそれより多くのコアを含む）、組み込みプロセッサなどのような特定用途向けプロセッサであってもよい。プロセッサは、１つまたは複数のチップ上で実装され得る。プロセッサ１２００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳのような、多数の処理技術のいずれかを用いた１つまたは複数の基板の一部であってもよく、及び／またはその上に実装されてもよい。
【００８４】
メモリ階層は、複数のコア内の１つまたは複数のレベルのキャッシュ、複数の共有キャッシュユニット１２０６のセットまたはこれらの１つまたは複数、及び複数の集積メモリコントローラユニット１２１４のセットに結合された外部メモリ（図示せず）を含む。共有キャッシュユニット１２０６のセットは、二次（Ｌ２）、三次（Ｌ３）、四次（Ｌ４）、または他のレベルのキャッシュ等のような１つまたは複数の中レベルキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、及び／またはこれらの組み合わせを含んでもよい。一実施形態では、リングベースの相互接続ユニット１２１２が、集積グラフィクスロジック１２０８、複数の共有キャッシュユニット１２０６のセット、及びシステムエージェントユニット１２１０／集積メモリコントローラユニット１２１４を相互接続するが、複数の代替的な実施形態は、そのようなユニットを相互接続する任意の数の周知技術を用いてもよい。一実施形態では、１つまたは複数のキャッシュユニット１２０６とコア１２０２Ａ−Ｎとの間において、コヒーレンシが維持される。
【００８５】
いくつかの実施形態では、複数のコア１２０２Ａ−Ｎのうちの１つまたは複数は、マルチスレッディングが可能である。システムエージェント１２１０は、複数のコア１２０２Ａ−Ｎを調整及びオペレーションするそれらの複数のコンポーネントを含む。システムエージェントユニット１２１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを含んでもよい。ＰＣＵは、コア１２０２Ａ−Ｎ及び集積グラフィクスロジック１２０８の電力状態の調整に必要なロジック及び複数のコンポーネントであってもよく、またはそれらを含んでもよい。ディスプレイユニットは、１つまたは複数の外部接続されたディスプレイを駆動するためのものである。
【００８６】
複数のコア１２０２Ａ−Ｎは、アーキテクチャ命令セットに関して同種または異種とすることができ、言い換えると、コア１２０２Ａ−Ｎのうちの２つまたはそれより多くは、同じ命令セットを実行可能であってもよく、その他は、その命令セットまたは異なる命令セットのサブセットのみ実行可能であってもよい。
【００８７】
［例示的なコンピュータアーキテクチャ］
図１３−１６は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、グラフィクスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯式メディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスのための当技術分野で既知の他の複数のシステム設計及び構成も、適切である。概して、本明細書において開示されるように、プロセッサ及び／または他の実行ロジックを組み込むことが可能な多種多様なシステムまたは電子デバイスが、概して適切である。
【００８８】
ここで、図１３を参照すると、本発明の一実施形態に係るシステム１３００のブロック図が示される。システム１３００は、コントローラハブ１３２０と結合される、１つまたは複数のプロセッサ１３１０、１３１５を含んでもよい。一実施形態では、コントローラハブ１３２０は、グラフィクスメモリコントローラハブ（ＧＭＣＨ）１３９０及び入出力ハブ（ＩＯＨ）１３５０（個別のチップ上に存在することができる）を含む。ＧＭＣＨ１３９０は、メモリと、メモリ１３４０及びコプロセッサ１３４５が結合されたグラフィクスコントローラとを含む。ＩＯＨ１３５０は、入出力（Ｉ／Ｏ）デバイス１３６０を、ＧＭＣＨ１３９０に結合する。代替的に、メモリコントローラ及びグラフィクスコントローラの一方または両方は、（本明細書に記載されるように）プロセッサ内部に集積され、メモリ１３４０及びコプロセッサ１３４５は、プロセッサ１３１０と、ＩＯＨ１３５０を備える単一のチップ内のコントローラハブ１３２０とに、直接結合される。
【００８９】
図１３では、複数の追加のプロセッサ１３１５が選択的な性質であることが、破線で表されている。各プロセッサ１３１０、１３１５は、本明細書に記載される処理コアのうちの１つまたは複数を含んでもよく、プロセッサ１２００の何らかのバージョンであってもよい。
【００９０】
メモリ１３４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、またはその２つの組み合わせであってもよい。少なくとも１つの実施形態のために、コントローラハブ１３２０は、フロントサイドバス（ＦＳＢ）のようなマルチドロップバス、クイックパスインタコネクト（ＱＰＩ）のようなポイントツーポイントインタフェース、または同様の接続部１３９５を介して、プロセッサ１３１０、１３１５と通信する。
【００９１】
一実施形態では、コプロセッサ１３４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどのような特定用途向けプロセッサである。一実施形態では、コントローラハブ１３２０は、集積グラフィクスアクセラレータを含んでもよい。
【００９２】
物理リソース１３１０、１３１５の間には、アーキテクチャ上、マイクロアーキテクチャ上、熱的、電力消費等の複数の特性を含む様々な利点の基準に関して、様々な相違がある。
【００９３】
一実施形態では、プロセッサ１３１０は、一般的なタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数のコプロセッサ命令が、複数の命令内に組み込まれ得る。プロセッサ１３１０は、これらのコプロセッサ命令を、取り付けられたコプロセッサ１３４５によって実行されるべき型のものであると認識する。従って、プロセッサ１３１０は、コプロセッサバスまたは他のインタコネクト上において、これらの複数のコプロセッサ命令（または複数のコプロセッサ命令を表す複数の制御信号）を、コプロセッサ１３４５に発行する。コプロセッサ１３４５は、受信されたコプロセッサ命令を受け付け、これを実行する。
【００９４】
ここで、図１４を参照すると、本発明の実施形態に係る、第１のより具体的な、例示的なシステム１４００のブロック図が示される。図１４に示されるように、マルチプロセッサシステム１４００は、ポイントツーポイント相互接続システムであり、ポイントツーポイントインタコネクト１４５０を介して結合される第１のプロセッサ１４７０及び第２のプロセッサ１４８０を含む。プロセッサ１４７０及び１４８０の各々はプロセッサ１２００の何らかのバージョンであってもよい。本発明の一実施形態では、プロセッサ１４７０及び１４８０は、それぞれ、プロセッサ１３１０及び１３１５であり、コプロセッサ１４３８は、コプロセッサ１３４５である。他の実施形態では、プロセッサ１４７０及び１４８０は、それぞれ、プロセッサ１３１０及びコプロセッサ１３４５である。
【００９５】
プロセッサ１４７０及び１４８０は、集積メモリコントローラ（ＩＭＣ）ユニット１４７２及び１４８２をそれぞれ含むことが示される。プロセッサ１４７０は、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース１４７６及び１４７８をさらに含み、同様に、第２のプロセッサ１４８０は、Ｐ−Ｐインタフェース１４８６及び１４８８を含む。プロセッサ１４７０、１４８０は、ポイントツーポイント（Ｐ−Ｐ）インタフェース１４５０を介し、Ｐ−Ｐインタフェース回路１４７８、１４８８を用いて、情報を交換できる。図１４に示されるように、ＩＭＣ１４７２及び１４８２はプロセッサをそれぞれのメモリ、すなわち、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部たり得るメモリ１４３２及びメモリ１４３４に結合する。
【００９６】
プロセッサ１４７０、１４８０の各々は、ポイントツーポイントインタフェース回路１４７６、１４９４、１４８６、１４９８を用い、個々のＰ−Ｐインタフェース１４５２、１４５４を介して、チップセット１４９０と情報を交換してもよい。チップセット１４９０は、高性能インタフェース１４３９を介してコプロセッサ１４３８と、選択的に情報を交換してもよい。一実施形態では、コプロセッサ１４３８は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどのような特定用途向けプロセッサである。
【００９７】
共有キャッシュ（図示せず）は、いずれかのプロセッサ内または両方のプロセッサの外部に含まれるが、プロセッサが低電力モードに置かれた場合に、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納され得るように、Ｐ−Ｐ相互接続を介して、複数のプロセッサとさらに接続されてもよい。
【００９８】
チップセット１４９０は、インタフェース１４９６を介して第１のバス１４１６と結合されてもよい。一実施形態では、第１のバス１４１６は、ペリフェラルコンポーネントインタコネクト（ＰＣＩ）バス、またはＰＣＩエクスプレスバス、または別の第３世代Ｉ／Ｏ相互接続バスのようなバスであってもよいが、本発明の範囲はこれに限定されるものではない。
【００９９】
図１４に示されるように、複数の様々なＩ／Ｏデバイス１４１４が、第１のバス１４１６を第２のバス１４２０に結合するバスブリッジ１４１８とともに、第１のバス１４１６に結合されてもよい。一実施形態では、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィクスアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット等のような）、フィールドプログラマブルゲートアレイ、あるいは任意の他のプロセッサのような１つまたは複数の追加のプロセッサ１４１５が、第１のバス１４１６に結合される。一実施形態では、第２のバス１４２０はローピンカウント（ｌｏｗ  ｐｉｎ  ｃｏｕｎｔ、ＬＰＣ）バスであってもよい。一実施形態では、例えば、キーボード及び／またはマウス１４２２、通信デバイス１４２７、ならびに命令／コード及びデータ１４３０を含んでもよいディスクドライブまたは他の大容量ストレージデバイス等のようなストレージユニット１４２８を含む、様々なデバイスが第２のバス１４２０に結合されてもよい。さらに、オーディオＩ／Ｏ１４２４が第２のバス１４２０に結合されてもよい。なお、他の複数のアーキテクチャが、適用可能である。例えば、図１４のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
【０１００】
ここで、図１５を参照すると、本発明の実施形態に係る第２のより具体的な例示的システム１５００のブロック図が示される。図１４及び１５における複数の同様の要素は、同様の参照番号を有し、図１４の複数の特定の態様は、図１５の他の態様を不明瞭にすることを回避するために、図１５から省かれている。
【０１０１】
図１５は、プロセッサ１４７０、１４８０は集積メモリ及びＩ／Ｏ制御ロジック（「ＣＬ」）１４７２及び１４８２をそれぞれ含んでもよいことを示している。それゆえ、ＣＬ１４７２、１４８２は集積メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図１５は、メモリ１４３２、１４３４が、ＣＬ１４７２、１４８２と結合されるだけではなく、Ｉ／Ｏデバイス１５１４が制御ロジック１４７２、１４８２と結合されることも示している。レガシーＩ／Ｏデバイス１５１５は、チップセット１４９０と結合されている。
【０１０２】
ここで、図１６を参照すると、本発明の実施形態に係るＳｏＣ１６００のブロック図が示される。図１２における複数の同様の要素は、同様の参照番号を有する。また、複数の破線ボックスは、より高度なＳｏＣにおける複数のオプションの機能である。図１６では、相互接続ユニット１６０２は、１つまたは複数のコア２０２Ａ−Ｎのセット、及び共有キャッシュユニット１２０６を含むアプリケーションプロセッサ１６１０、システムエージェントユニット１２１０、バスコントローラユニット１２１６、集積メモリコントローラユニット１２１４、集積グラフィクスロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含み得る複数のコプロセッサ１６２０のセットまたはそのうちの１つまたは複数、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１６３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット１６３２、及び１つまたは複数の外部ディスプレイと結合するためのディスプレイユニット１６４０と結合されている。一実施形態では、コプロセッサ１６２０は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、組み込みプロセッサなどのような特定用途向けプロセッサを含む。
【０１０３】
本明細書で開示する複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような複数の実装アプローチの組み合わせにより実装されてもよい。本発明の複数の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性及び不揮発性メモリ、及び／または複数のストレージ要素を含む）、少なくとも１つの入力デバイス、及び少なくとも１つの出力デバイスを備える複数のプログラマブルシステム上で実行する複数のコンピュータプログラムまたはプログラムコードとして実装され得る。
【０１０４】
本明細書に記載される機能を実行し、出力情報を生成するための命令を入力するために、図１４に示されるコード１４３０のようなプログラムコードが適用されてもよい。出力情報は、既知の様式で、１つまたは複数の出力デバイスに適用され得る。この用途の目的のため、処理システムは、例えば、デジタルシグナルプロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサのようなプロセッサを有する何らかのシステムを含む。
【０１０５】
プログラムコードは、処理システムと通信を行う高水準の手続き型またはオブジェクト指向のプログラミング言語で実装されてもよい。また、プログラムコードは、所望される場合、アセンブリ言語または機械言語で実装されてもよい。実際に、本明細書で説明される複数のメカニズムは、何らかの特定のプログラミング言語に限定されない。いずれの場合であっても、言語はコンパイラ型またはインタープリタ型言語であってもよい。
【０１０６】
少なくとも１つの実施形態の１つまたは複数の態様は、機械によって読み出されると、当該機械に本明細書で説明される複数の技術を実行するロジックを作成させる、プロセッサ内の様々なロジックを表す機械可読媒体に格納された複数の代表的な命令によって実装されてもよい。「ＩＰコア」として知られたそのような複数の表現は、有形の機械可読媒体上に格納され、様々な顧客、または実際にロジックまたはプロセッサを作成する複数の製造機械にロードする複数の製造設備に提供され得る。
【０１０７】
そのような機械可読記憶媒体は、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、書き換え可能コンパクトディスク（ＣＤ−ＲＷ）、及び光磁気ディスク等、その他のタイプのディスクを含むストレージ媒体、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、及び相変化メモリ（ＰＣＭ）等の半導体デバイス、磁気もしくは光カード、または複数の電子的命令を格納するのに適切なその他のタイプの媒体を含む、機械またはデバイスにより製造または形成される、非一時的で有形の複数の構成の物品を含み得るが、これらに限定されない。
【０１０８】
従って、本発明の複数の実施形態は、本明細書で説明される複数の構造、複数の回路、複数の装置、複数のプロセッサ、及び／または複数のシステム機能を定義する、ハードウェア記述言語（ＨＤＬ）のような複数の命令を含む、または設計データを含む、非一時的な有形の機械可読媒体も含む。そのような複数の実施形態は、プログラム製品とも称され得る。
【０１０９】
［エミュレーション（バイナリトランスレーション、コードモーフィング等を含む）］
【０１１０】
場合によっては、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換するために、用いられてもよい。例えば、命令コンバータは、命令を、コアにより処理されることになる他の１つまたは複数の命令にトランスレート（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて）、モーフィング、エミュレート、または変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせにおいて実装され得る。命令コンバータは、プロセッサ上にあってもよく、プロセッサ外にあってもよく、または一部がプロセッサ上で一部がプロセッサ外にあってもよい。
【０１１１】
図１７は、本発明の複数の実施形態に係る、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比させるブロック図である。図示される実施形態では、命令コンバータは、ソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装され得る。図１７は、少なくとも１つのｘ８６命令セットコアを備えるプロセッサ１７１６によってネイティブに実行され得るｘ８６バイナリコード１７０６を生成するために、高水準言語１７０２のプログラムが、ｘ８６コンパイラ１７０４を用いてコンパイルされてもよいことを示している。少なくとも１つのｘ８６命令セットコアを備えるプロセッサ１７１６は、少なくとも１つのｘ８６命令セットコアを備えるインテル社製プロセッサと実質的に同じ結果を達成するために、（１）インテルｘ８６命令セットコアの命令セットの大部分、あるいは（２）少なくとも１つのｘ８６命令セットコアを備えるインテル社製プロセッサ上で動作することを目的としたアプリケーションまたは他のソフトウェアのオブジェクトコードバージョンを互換的に実行するか、または別の方法で処理することによって、少なくとも１つのｘ８６命令セットコアを備えるインテル社製プロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表す。ｘ８６コンパイラ１７０４は、さらなる連係処理を用いて、または用いずに、少なくとも１つのｘ８６命令セットコアを備えるプロセッサ１７１６上で実行することができるｘ８６バイナリコード１７０６（例えば、オブジェクトコード）を生成するコンパイラを表す。同様に、図１７は、高水準言語１７０２のプログラムが代替的命令セットコンパイラ１７０８を用いてコンパイルされることにより、少なくとも１つのｘ８６命令セットコアを有さないプロセッサ１７１４（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セットを実行するか、及び／またはカリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セットを実行するコアを有するプロセッサ）によってネイティブに実行され得る代替的命令セットバイナリコード１７１０が生成され得ることを示す。命令コンバータ１７１２は、ｘ８６バイナリコード１７０６を、ｘ８６命令セットコアを備えないプロセッサ１７１４によってネイティブに実行され得るコードに変換するために用いられる。この変換されたコードは、代替的な命令セットバイナリコード１７１０と同じ可能性は低い。なぜなら、これが可能な命令コンバータは、製作が難しいからである。しかしながら、変換されたコードは、一般的なオペレーションを実現し、代替的な命令セットからの命令で構成される。それゆえ、命令コンバータ１７１２は、エミュレーション、シミュレーションまたは任意の他の処理を通じて、ｘ８６命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがｘ８６バイナリコード１７０６を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
本実施形態の例を下記の各項目として示す。
［項目１］
ソースライトマスクレジスタオペランド、ソースベクトルレジスタオペランド、デスティネーションライトマスクレジスタオペランド及びオペコードを含む単一のベクトルパックコンフリクトテスト命令に応じて、コンピュータプロセッサ内で、ベクトルパックコンフリクトテストを実行する方法であって、
前記単一のベクトルパックコンフリクトテスト命令を実行することにより、
前記ソースベクトルレジスタオペランドの各データ要素で、前記ソースライトマスクレジスタオペランドからのデータに論理的ＡＮＤを実行し、
前記論理的ＡＮＤの複数のオペレーションのいずれがコンフリクトを示すかを判断することにより、コンフリクトチェック結果を生成し、
前記ソースライトマスクレジスタオペランドからの前記データで、前記コンフリクトチェック結果に論理的ＡＮＤを実行する段階と、
前記ソースライトマスクレジスタオペランドからのデータで、前記コンフリクトチェック結果に前記論理的ＡＮＤを実行した前記結果を、前記デスティネーションライトマスクレジスタオペランドに格納する段階とを備える、方法。
［項目２］
ゼロ拡張されたデータが前記ソースベクトルレジスタオペランドの各データ要素と同じサイズになるように、前記ソースライトマスクレジスタオペランドのデータをゼロ拡張する段階をさらに備える、項目１に記載の方法。
［項目３］
前記ソースライトマスクレジスタオペランドの前記ゼロ拡張されたデータを、前記ソースベクトルレジスタオペランドと同じ数及びサイズのデータ要素を有する一時ベクトルレジスタにブロードキャストする段階をさらに備える、項目２に記載の方法。
［項目４］
前記ソースベクトルレジスタオペランドは、１２８ビット、２５６ビットまたは５１２ビットのサイズである、項目１から３のいずれか１項に記載の方法。
［項目５］
前記デスティネーションライトマスクレジスタは、６４ビットである、項目１から４のいずれか１項に記載の方法。
［項目６］
前記デスティネーションライトマスクレジスタは、１６ビットである、項目１から４のいずれか１項に記載の方法。
［項目７］
前記ソースベクトルレジスタオペランドの複数のデータ要素は、８ビット、１６ビット、３２ビット、６４ビット、１２８ビットまたは２５６ビットのサイズである、項目１に記載の方法。
［項目８］
コンピュータプロセッサにおいて、ソースライトマスクレジスタオペランド、デスティネーションベクトルレジスタオペランド及びオペコードを含む単一のベクトルパックブロードキャスト命令に応じて、データのブロードキャストを実行する方法であって、
ゼロ拡張されたデータが前記デスティネーションベクトルレジスタオペランドの各データ要素と同じサイズになるように、前記ソースライトマスクレジスタオペランドのデータをゼロ拡張する段階と、
前記ソースライトマスクレジスタオペランドの前記ゼロ拡張されたデータを、前記デスティネーションベクトルレジスタオペランドの各データ要素位置に格納する段階とを備える、方法。
［項目９］
前記デスティネーションベクトルレジスタオペランドは、１２８ビット、２５６ビットまたは５１２ビットのサイズである、項目８に記載の方法。
［項目１０］
前記ソースライトマスクレジスタオペランドは、６４ビットである、項目８または９に記載の方法。
［項目１１］
前記ソースライトマスクレジスタオペランドは、１６ビットである、項目８または９に記載の方法。
［項目１２］
ソースベクトルレジスタオペランドの複数のデータ要素は、８ビット、１６ビット、３２ビット、６４ビット、１２８ビットまたは２５６ビットのサイズである、項目９に記載の方法。
［項目１３］
前記ベクトルパックブロードキャスト命令は、第２のライトマスクソースレジスタをさらに備える、項目８から１２のいずれか１項に記載の方法。
［項目１４］
前記第２のライトマスクソースレジスタの複数のビット値に基づいて、前記ソースライトマスクレジスタオペランドの前記データを、前記デスティネーションベクトルレジスタオペランドの少なくとも１つのデータ要素位置に格納することを選択的に回避する段階をさらに備える、項目１３に記載の方法。
［項目１５］
ソースライトマスクレジスタオペランド、デスティネーションベクトルレジスタオペランド及びオペコードを含む単一のベクトルパックブロードキャスト命令を復号するハードウェアデコーダと、
ゼロ拡張されたデータが前記デスティネーションベクトルレジスタオペランドの各データ要素と同じサイズになるように、前記ソースライトマスクレジスタオペランドのデータをゼロ拡張し、前記ソースライトマスクレジスタオペランドの前記ゼロ拡張されたデータを前記デスティネーションベクトルレジスタオペランドの各データ要素位置に格納する実行ロジックとを備える、装置。
［項目１６］
前記デスティネーションベクトルレジスタオペランドは、１２８ビット、２５６ビットまたは５１２ビットのサイズである、項目１５に記載の装置。
［項目１７］
前記ソースライトマスクレジスタオペランドは、６４ビットである、項目１５または１６に記載の装置。
［項目１８］
前記ソースライトマスクレジスタオペランドは、１６ビットである、項目１５または１６に記載の装置。
［項目１９］
前記ベクトルパックブロードキャスト命令は、第２のライトマスクソースレジスタをさらに備える、項目１５から１８のいずれか１項に記載の装置。
［項目２０］
前記実行ロジックは、さらに、前記第２のライトマスクソースレジスタの複数のビット値に基づいて、前記ソースライトマスクレジスタオペランドの前記データを、前記デスティネーションベクトルレジスタオペランドの少なくとも１つのデータ要素位置に格納することを選択的に回避する、項目１９に記載の装置。
【図１】
0006055549.tif 000002
【図２】
0006055549.tif 000003
【図３】
0006055549.tif 000004
【図４】
0006055549.tif 000005
【図５】
0006055549.tif 000006
【図６】
0006055549.tif 000007
【図７】
0006055549.tif 000008
【図８】
0006055549.tif 000009
【図９】
0006055549.tif 000010
【図１０Ａ】
0006055549.tif 000011
【図１０Ｂ】
0006055549.tif 000012
【図１１Ａ】
0006055549.tif 000013
【図１１Ｂ】
0006055549.tif 000014
【図１２】
0006055549.tif 000015
【図１３】
0006055549.tif 000016
【図１４】
0006055549.tif 000017
【図１５】
0006055549.tif 000018
【図１６】
0006055549.tif 000019
【図１７】
0006055549.tif 000020
【図１８】
0006055549.tif 000021