(57)【要約】【課題】ステータス依存演算の性能を向上させる複数のシステム、方法、装置の実施形態が、詳述される。【解決手段】実施形態において、ハードウェア装置は、命令をデコードするデコーダハードウェアと、デコーダハードウェアによってデコードされた命令に関連付けられた少なくとも１つのソースオペランドからデータを取得するオペランド取得ハードウェアと、少なくとも１つのステータスビットを含む結果を生成し、結果及び少なくとも１つのステータスビットを単一のデスティネーション物理格納位置に格納させるべく、デコードされた命令を実行する実行ハードウェアと、を備え、少なくとも１つのステータスビット及び結果は、単一のレジスタの読み出しを通してアクセス可能である。【選択図】図１
2017016640.tif 000002
【特許請求の範囲】
【請求項１】
命令をデコードするデコーダハードウェアと、
前記デコーダハードウェアによってデコードされた前記命令に関連付けられた少なくとも１つのソースオペランドからデータを取得するオペランド取得ハードウェアと、
少なくとも１つのステータスビットを含む結果を生成し、前記結果及び少なくとも１つのステータスビットを単一のデスティネーション物理格納位置に格納させるべく、前記デコードされた命令を実行する実行ハードウェアと、
を備え、
前記少なくとも１つのステータスビット及び結果は、単一の、物理レジスタの読み出しを通してアクセス可能である、ハードウェア装置。
【請求項２】
前記命令のアーキテクチャレジスタを物理レジスタにマッピングし、前記ハードウェア装置のステータスレジスタを前記物理レジスタにマッピングするレジスタリネーミングハードウェアをさらに備える、請求項１に記載のハードウェア装置。
【請求項３】
前記物理レジスタは、複数の最下位ビット及びステータスビットのデータを複数の最上位ビットに格納する、請求項１または２に記載のハードウェア装置。
【請求項４】
前記物理レジスタは、複数の最上位ビット及びステータスビットのデータを複数の最下位ビットに格納する、請求項１または２に記載のハードウェア装置。
【請求項５】
前記少なくとも１つのステータスビットは、キャリー、サイン、オーバーフロー、パリティ、ゼロ、及びアジャストの少なくとも１つに対する複数のビットを含む、請求項１から４のいずれか１項に記載のハードウェア装置。
【請求項６】
前記命令は、条件付き分岐、条件付きジャンプ、条件付き移動、及び条件付きメモリオペレーションの１つである、請求項１から５のいずれか１項に記載のハードウェア装置。
【請求項７】
前記命令を示すオペコードを含む前記命令は、前記少なくとも１つのステータスビットを、前記結果と共に、前記単一のデスティネーション物理格納位置に格納させる、請求項１から６のいずれか１項に記載のハードウェア装置。
【請求項８】
前記命令を示すデスティネーションオペランドを含む前記命令は、前記少なくとも１つのステータスビットを、前記結果と共に、前記単一のデスティネーション物理格納位置に格納させる、請求項１から７のいずれか１項に記載のハードウェア装置。
【請求項９】
命令をデコードするデコーダハードウェアと、
前記デコーダハードウェアによってデコードされた前記命令に関連付けられた少なくとも１つのソースオペランドからデータを取得するオペランド取得ハードウェアと、
少なくとも１つのソース物理レジスタのステータス条件の評価に基づいて、前記命令のオペレーションを条件に応じて実行すべく、前記デコードされた命令を実行する実行ハードウェアと、
を備え、
前記ソースオペランドは、データに加えて少なくとも１つのステータスビットを含む、
ハードウェア装置。
【請求項１０】
前記命令のアーキテクチャレジスタを物理レジスタにマッピングし、前記ハードウェア装置のステータスレジスタを前記物理レジスタにマッピングするレジスタリネーミングハードウェアをさらに備える、請求項９に記載のハードウェア装置。
【請求項１１】
前記物理レジスタは、複数の最下位ビット及びステータスビットのデータを複数の最上位ビットに格納する、請求項９または１０に記載のハードウェア装置。
【請求項１２】
前記物理レジスタは、複数の最上位ビット及びステータスビットのデータを複数の最下位ビットに格納する、請求項９から１１のいずれか１項に記載のハードウェア装置。
【請求項１３】
少なくとも１つのステータスビットは、キャリー、サイン、オーバーフロー、パリティ、ゼロ、及びアジャストの少なくとも１つに対する複数のビットを含む、請求項９から１２のいずれか１項に記載のハードウェア装置。
【請求項１４】
前記命令は、条件付き分岐、条件付きジャンプ、条件付き移動、及び条件付きメモリオペレーションの１つである、請求項９から１３のいずれか１項に記載のハードウェア装置。
【請求項１５】
前記命令を示すオペコードを含む前記命令は、少なくとも１つのステータスビット及びデータを含む前記ソース物理レジスタからステータス情報を読み出す、請求項９から１４のいずれか１項に記載のハードウェア装置。
【請求項１６】
前記命令は、前記ソース物理レジスタが少なくとも１つのステータスビット及びデータを格納することのインジケーションを含む、請求項９から１５のいずれか１項に記載のハードウェア装置。
【請求項１７】
前記命令は、デスティネーションオペランドを含む、請求項９から１６のいずれか１項に記載のハードウェア装置。
【請求項１８】
前記命令は、オフセットオペランドを含む、請求項９から１７のいずれか１項に記載のハードウェア装置。
【請求項１９】
命令をデコードするデコーダ手段と、
前記デコーダ手段によってデコードされた前記命令に関連付けられた少なくとも１つのソースオペランドからデータを取得するオペランド取得手段と、
少なくとも１つのステータスビットを含む結果を生成し、前記結果及び少なくとも１つのステータスビットを単一のデスティネーション物理格納位置に格納させるべく、前記デコードされた命令を実行する実行手段と、
を備え、
前記少なくとも１つのステータスビット及び結果は、単一の、物理レジスタの読み出しを通してアクセス可能である、ハードウェア装置。
【請求項２０】
前記命令のアーキテクチャレジスタを物理レジスタにマッピングし、前記ハードウェア装置のステータスレジスタを前記物理レジスタにマッピングするレジスタリネーミング手段をさらに備える、請求項１９に記載のハードウェア装置。
【請求項２１】
前記物理レジスタは、複数の最下位ビット及びステータスビットのデータを複数の最上位ビットに格納する、請求項１９または２０に記載のハードウェア装置。
【請求項２２】
前記物理レジスタは、複数の最上位ビット及びステータスビットのデータを複数の最下位ビットに格納する、請求項１９または２０に記載のハードウェア装置。
【請求項２３】
前記少なくとも１つのステータスビットは、キャリー、サイン、オーバーフロー、パリティ、ゼロ、及びアジャストの少なくとも１つに対する複数のビットを含む、請求項１９から２２のいずれか１項に記載のハードウェア装置。
【請求項２４】
前記命令は、条件付き分岐、条件付きジャンプ、条件付き移動、及び条件付きメモリオペレーションの１つである、請求項１９から２３のいずれか１項に記載のハードウェア装置。
【請求項２５】
前記命令を示すオペコードを含む前記命令は、前記少なくとも１つのステータスビットを、前記結果と共に、前記単一のデスティネーション物理格納位置に格納させる、請求項１９から２４のいずれか１項に記載のハードウェア装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書において説明される様々な実施形態は、プロセッサアーキテクチャに関する。
【背景技術】
【０００２】
大半のアーキテクチャにおいて、ＲＦＬＡＧＳのような、演算の複数のステータスフラグを指すアーキテクチャレジスタは、１つだけ存在する。このことは、より大きな性能及び／又はエネルギ効率性のために複数の命令をリオーダするコンパイラ又はバイナリトランスレータの能力を制限する。
【図面の簡単な説明】
【０００３】
本発明は、例として示されるものであって、複数の添付図面の複数の図において限定されるものではなく、ここで、同様の参照符号は、同様の要素を示す。
【図１】ハードウェアプロセッサ（又はプロセッサコア）内の複数のレジスタの実施形態を示す。
【図２】複数のステータス消費命令の命令フォーマットの例示的な複数の実施形態を示す。
【図３】プロセッサにおけるステータス消費命令の実行方法の実施形態を示す。
【図４】複数のステータス書き込み命令の命令フォーマットの例示的な複数の実施形態を示す。
【図５】プロセッサにおけるステータス書き込み命令の実行方法の実施形態を示す。
【図６Ａ】本発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。
【図６Ｂ】本発明の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。
【図７Ａ】より詳細な、例示的なインオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック（同じタイプ及び／又は異なるタイプの複数の他のコアを含む）の中の１つたり得る。
【図７Ｂ】より詳細な、例示的なインオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック（同じタイプ及び／又は異なるタイプの複数の他のコアを含む）の中の１つたり得る。
【図８】本発明の複数の実施形態に係る、１つより多くのコアを有してよく、集積メモリコントローラを有してよく、集積グラフィクスを有してよい、プロセッサ８００のブロック図である。
【図９】例示的なコンピュータアーキテクチャのブロック図である。
【図１０】例示的なコンピュータアーキテクチャのブロック図である。
【図１１】例示的なコンピュータアーキテクチャのブロック図である。
【図１２】例示的なコンピュータアーキテクチャのブロック図である。
【図１３】本発明の複数の実施形態に係る、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比させるブロック図である。
【発明を実施するための形態】
【０００４】
以下の説明において、多数の具体的な詳細が示される。しかしながら、本発明の複数の実施形態は、これらの具体的な詳細を伴うことなく実施可能であることが理解される。本明細書における「一実施形態」、「実施形態」、「例示的な実施形態」等の記載は、説明される実施形態が、特定の機能、構造、又は特性を含んでよいが、各実施形態が当該特定の機能、構造、又は特性を必ずしも含むものではないことを示す。さらに、このような語句は、必ずしも同じ実施形態を参照するものではない。さらに、特定の機能、構造、又は特性が実施形態に関連して説明される場合、これらは、明記されているか否かに関わらず、複数の他の実施形態に関連して、このような機能、構造、又は特性に影響を与えることは、当業者の知識の範囲内であるものと考えられる。
【０００５】
単一のフラグ（条件コードレジスタ）のみを有することに対する１つの解決手段は、各（潜在的に行われる）フラグ生成演算の２つのバリアントを提供することである。例えば、ＲＯＲ命令は、右回転し、かつ、キャリーフラグを更新するが、ＲＯＲＸは、いずれのフラグにも影響することなく右回転する。これにより、何らかのコンパイラベースのリオーダが、特に、その複数のフラグ結果が消費されないためにそれらの抑制が不可能な複数の命令について、可能となる。
【０００６】
他の解決手段は、複数のアーキテクチャフラグレジスタを提供することである。例えば、ＲＦＬＡＧＳ０、ＲＦＬＡＧＳ１、ＲＦＬＡＧＳ２、及びＲＦＬＡＧＳ３が想像できよう。プロデューサ及びコンシューマ命令の両方は、次に、彼らがどのフラグレジスタを参照することを望むかを（２ビットで）指定することができる。これは、２ビットをプロデューサ毎、すなわちほぼ演算命令毎に、かつコンシューマ（例えば、条件付き分岐、条件付き移動）毎に、追加することを必要とする。さらに、アウトオブオーダプロセッサにおいては、これら４つのフラグレジスタは、リネーミングされなければならない。
【０００７】
図１は、ハードウェアプロセッサ（又はプロセッサコア）内の複数のレジスタの実施形態を示す。本実施形態において、プロセッサ状態についてのステータス情報を格納するステータスレジスタ１０１が存在する。このレジスタは、限定されるものではないが、（ＦＬＡＧＦＳ、ＥＦＬＡＧＳ、又はＲＦＬＡＧＳのような）ＦＬＡＧＳレジスタ、プログラムステータスワード（ＰＳＷ）、条件コード（ＣＣ）レジスタ等を含む多数の異なる名称を有してよい。ステータスレジスタに格納される複数のステータスビット（又はフラグ）の例は、限定されるものではないが、キャリー（Ｃ）、パリティ（Ｐ）、アジャスト（Ａ）、ゼロ（Ｚ）、サイン（Ｓ）、及びオーバーフロー（Ｏ）のインジケーションを含む。ステータスレジスタを通して、命令は、複数のステータスビットのうち１つ又は複数を評価することによって、前の命令の結果に基づいてアクションを起こしてよい。命令の実行は、命令自体の複数の結果に基づいて、ステータスレジスタ７０１の複数のステータスビットをセットする。例えば、Ｃフラグのような、ステータスレジスタの特定の複数のビット（フラグ）のみがいくつかの回転命令にセットされ、Ａ、Ｚ、Ｓ、及びＰは影響されない。
【０００８】
複数の物理データレジスタ１  １０３からＮ１０９も存在する。いくつかの実施形態において、物理データレジスタ１０３、１０９の数は、プログラマにとってアーキテクチャ的に可視なものより多い。これらの実施形態において、複数の物理レジスタは、命令実行パイプラインの一部をリネーミングする間に、アーキテクチャレジスタに割り当てられる。
【０００９】
データレジスタのデータ部分１０７及び１１３のサイズは、実装に応じて異なる。例えば、データ部分は、８ビット、１６ビット、３２ビット、６４ビット、１２８ビット、２５６ビット、５１２ビット、１，０２４ビット等であってよい。データ部分は、整数、浮動小数点、又はパック（整数もしくは浮動小数点）データ値を格納するために用いられてもよい。
【００１０】
ステータスをプロセッサ、例えばアウトオブオーダプロセッサに実装する態様は、各物理データレジスタ１０３及び１０９を、演算のステータスフラグ結果（Ｃ、Ｏ、Ｓ、Ｐ、Ａ、及びＺ）を含むように拡張する。例えば、６４ビットデータレジスタに対し、この拡張は、物理的な７０ビットレジスタをもたらすことができる。より大きいレジスタは、データ部分１０７及び１１３に付属するフラグ１０５及び１１１として示され、これにより、これらは、演算結果と物理的に同じ位置にある。プロセッサ内のリネーミングハードウェアは、アーキテクチャレジスタが物理レジスタにリネーミングするのと同じ態様で、物理レジスタにリネーミングする。このように、データレジスタは、物理レジスタの第１の６４ビットを指し、ステータスは、物理レジスタのフラグ部分を指す。これらのレジスタは、リトルエンディアンフォーマット（データが最下位ビットにあり、ステータスビットが最上位ビットに格納される）で示され、複数の他の実施形態において、データ及びステータスビットのストレージは、反対の態様で格納される。
【００１１】
以下の従来技術の例を検討する。「ｓｕｂ  ｒａｘ，＄７」という命令により７がＲＡＸから減算される場合、アーキテクチャレジスタＲＡＸに対する結果の値は、フラグ結果と共に物理レジスタ（例えばＰ３９）に書き込まれる。このように、ＲＡＸレジスタ及びステータスレジスタの両方は、ここで、物理レジスタＰ３９を指す。次に、ここで、「ａｄｄ  ｒｂｘ，＄３」という命令が、その結果を物理レジスタＰ４０に書き込む。ここで、ＲＢＸレジスタ及びステータスレジスタの両方は、物理レジスタＰ４０を指す。ＲＡＸレジスタは、さらに物理レジスタＰ３９を指す。残念ながら、減算命令のフラグ結果は、Ｐ３９においてハードウェアにさらに存在するが、ソフトウェアにはこれにアクセスする方法が現在存在しない。
【００１２】
（条件付き分岐のような）複数の新たなステータス消費命令、及び、望ましいステータスの結果と同時に生成される結果を保持するアーキテクチャレジスタを当該複数の命令に参照させることによって、これらが消費するステータスビットのソースとしてどの物理レジスタが機能すべきかを指定する、当該複数の命令の実行の複数の実施形態が、以下、詳述される。これは、次の命令がステータスレジスタを上書きしたか否かに関わらず、次の命令によって特定のアーキテクチャレジスタがまだ上書きされていない限り、実行可能である。例えば、ステータスレジスタが上書きされる場合でさえ、物理データレジスタによって格納されるステータスビットは、条件付き決定を行うために用いられる。勿論、複数の既存の命令は、何ら変更を加えることなく、ステータスレジスタを継続して用いてよい。
【００１３】
いくつかの実施形態において、複数のステータス消費命令は、条件が指す演算の複数の結果（ステータス情報）をどのアーキテクチャレジスタが保持するかを示すべく、それらのエンコードにおいてレジスタフィールドを有する。例えば、新たな命令「ｊｎｅ  ｒｃｘ．ｆ，Ｌ２」は、ＲＣＸの整数値を生成した同じ命令によって生成された複数のフラグに対する「不等」テストを評価する（「．ｆ」は、複数のフラグが格納されていることを示す）。例示のアセンブリ言語規定として、物理レジスタの整数結果は、アーキテクチャ的にＲＣＸによって「ＲＣＸ」として参照され、同じ物理レジスタのフラグ結果は、「ＲＣＸ．Ｆ」として参照される。なお、ソフトウェアは、ここで、比較的低いハードウェアコストで、アーキテクチャ整数レジスタと同数のフラグ結果レジスタへのアクセスを有する。勿論、いくつかの実施形態において、このフラグ結果の特徴は、複数の利用可能なアーキテクチャレジスタのサブセットに限定される。
【００１４】
なお、分岐及び／又はジャンプ以外に、複数の条件付き命令も提供されてよい。例えば、条件付き移動及び条件付きメモリオペレーションは、（ステータスレジスタに加えて）ＲＣＸ．Ｆから複数のフラグを消費するように指定されてよい。
【００１５】
図２は、複数のステータス消費命令の命令フォーマットの例示的な複数の実施形態を示す。ステータス書き込み命令の第１のタイプ２０１は、命令の実行が、オペレーションが実行されるべきか否かを決定するソースオペランド２０７の少なくとも１つのステータスビットを評価するものであることを示すオペコード２０３を含む。例えば、ソース２０７からデスティネーション２０５への条件付き移動は、セットされた複数のステータスビットのうち１つ又は複数に基づいて実行されなければならない。
【００１６】
ステータス書き込み命令の第２のタイプ２１１は、オペレーションが実行されるべきであることを示すステータス消費命令に対するオペコード２１３を含む。ソースオペランド２１７は、それがステータス情報を格納することのインジケーションを含む。例えば、ｓｏｕｒｃｅ．ｆは、当該ソースが消費されるべきステータスデータを含むことを示すために用いられてよい。デスティネーション２１５は、オペレーションのデスティネーションである。
【００１７】
ステータス書き込み命令の第３のタイプ２２１は、命令の実行が、オペレーションが実行されるべきか否かを決定する明示フラグ位置（ソースオペランド）２２３の少なくとも１つのステータスビットを評価するものであることを示すオペコード２２３を含む。例えば、オフセット２２５への条件付きジャンプは、セットされた複数のステータスビットのうち１つ又は複数に基づいて実行されなければならない。
【００１８】
ステータス書き込み命令の第４のタイプ２３１は、命令の実行が、オペレーションが実行されるべきか否かを決定する少なくとも１つのステータスビットを評価するものであることを示すオペコード２３３を含む。明示フラグ位置（ソースオペランド）２３３は、それがデータに加えてステータス情報を格納することを示す。例えば、ｓｏｕｒｃｅ．ｆは、ソースが消費されるべきステータスデータを含むことを示すために用いられてよい。例えば、オフセット２３５への条件付きジャンプは、セットされた複数のステータスビットのうち１つ又は複数に基づいて実行されなければならない。
【００１９】
図３は、プロセッサにおけるステータス消費命令の実行方法の実施形態を示す。例示的なパイプライン及びプロセッサ（又はコア）が、複数の後述される図において詳述される。さらに、複数のステータス消費命令の例示的な命令フォーマットが、詳細に上述されている。
【００２０】
ステータス消費命令は、３０１において、フェッチハードウェアによってフェッチされる。典型的には、複数の命令は、フェッチ前に命令キャッシュに格納される。
【００２１】
フェッチされた命令は、３０３において、デコードハードウェアによってデコードされる。命令のデコードは、どの命令が実行されるべきか、及びフェッチする複数のオペランドを決定する。いくつかの実施形態において、命令は、マイクロオペレーションにデコードされる。
【００２２】
いくつかの実施形態において、レジスタリネーミングは、３０５において、リネーミング／配分ハードウェアによって、命令の複数のオペランドのうち１つ又は複数において実行される。例えば、ソースオペランドは、アーキテクチャレジスタから物理レジスタにマッピングされる。複数のソースオペランド値は、３０７において、物理レジスタファイル又はメモリから取得される。
【００２３】
デコードされたステータス消費命令は、３０９において、取得されたソースオペランドにおいて、機能ユニット（実行ハードウェア）によって実行される。例えば、ジャンプノットゼロ（ＪＮＺ）が実行される。デコードされたステータス消費命令の実行は、取得されたソースからのステータス情報を見ることによって、ステータス条件が満たされているか否かを決定させる。ＪＮＺの例において、ジャンプは、（ゼロフラグのような）ゼロステータスがソースオペランドのステータス部分にセットされない場合に実行される。
【００２４】
上述の図はハードウェアについて説明されたが、方法の複数の態様のうち１つ又は複数は、例えばエミュレートの一部として、ソフトウェアで実行されてよい。例えば、デコーダは、ハードウェアではなくソフトウェア又はファームウェアで実装されてよい。
【００２５】
複数の新たなステータス書き込み命令、及び、複数のステータス結果と同時に生成された結果を保持するアーキテクチャレジスタを当該複数の命令に参照させることによって、どの物理レジスタがステータス情報のデスティネーションとして機能すべきかを指定する、当該複数の命令の実行の複数の実施形態が、以下、詳述される。
【００２６】
図４は、複数のステータス書き込み命令の命令フォーマットの例示的な複数の実施形態を示す。ステータス書き込み命令の第１のタイプ４０１は、命令の実行が、デスティネーションオペランド４０５に関連付けられた単一のデスティネーション物理格納位置に、少なくとも１つのステータスビットを結果と共に格納させるものであることを示すオペコード４０３を含む。ステータス書き込み命令４０１の第１のタイプは、典型的には、少なくとも１つのソースオペランド４０７をさらに含む。このような命令の例は、ＳＵＢ．Ｆ  ＤＳＴ、ＳＲＣであり、ＳＵＢ．Ｆのオペコードは、このタイプの命令が通常の減算命令と異なり、ステータス情報をデスティネーション（ＤＳＴ）に格納するものであることを示す。
【００２７】
ステータス書き込み命令の第２のタイプ４１１は、命令のオペコード４１３と、命令の結果及びそのステータス情報が単一のデスティネーション物理位置に格納されるべきであることを示すデスティネーションオペランド４１５とを含む。ステータス書き込み命令４１１の第２のタイプは、典型的には、少なくとも１つのソースオペランド４１７をさらに含む。このような命令の例は、ＳＵＢ  ＤＳＴ．Ｆ、ＳＲＣであり、ＤＳＴ．Ｆのデスティネーションは、このタイプの命令が、通常の減算と異なり、ステータス情報をデスティネーション（ＤＳＴ）に格納するものであることを示す。
【００２８】
ステータス書き込み命令の第３のタイプ４２１は、命令のオペコード４２３及びデスティネーションオペランド４２５を含む。このタイプのステータス書き込み命令は、ステータス情報が、結果と共に単一のデスティネーション物理位置に格納されるべきではないことを示すものではない。ステータス書き込み命令４１１の第３のタイプは、典型的には、少なくとも１つのソースオペランド４１７をさらに含む。このような命令の例は、ＳＵＢ  ＤＳＴ、ＳＲＣである。非ステータス書き込み命令の複数のバリアントは、命令の実行が複数のアクセス可能なステータスビットを提供するものではないことを記述するＳＵＢＸのような異なるオペコードを有してよい。このように、本明細書において詳述される複数の実施形態は、フラグ生成及びフラグ抑制を行う複数の命令の変形の両方を含む命令セットアーキテクチャと相反するものではない。例えば、ＳＵＢ命令はステータスレジスタを書き込み、ＳＵＢＸ命令は書き込まない。本明細書において詳述される複数の実施形態において、両方の命令バリアントは、整数結果及びフラグ結果の両方を、デスティネーション物理レジスタに書き込む。しかしながら、ＳＵＢバリアントのみが、命令のデスティネーション位置を指すようにステータスレジスタをリネーミングする。上述の例において、ＳＵＢは、ＳＵＢＸによって置換されてよく、（ＪＮＥのような）消費命令は、ＲＣＸ．Ｆをさらに消費してよい。ＳＵＢ及びＳＵＢＸの両方は、ここで、デスティネーションとして物理レジスタＰ３９を配分してよい。この両方とも、減算の整数結果をＰ３９に書き込んでよく、この両方とも、減算のフラグ結果をＰ３９に書き込んでよい。この両方とも、アーキテクチャレジスタＲＣＸをＰ３９にリネーミングしてよい。しかし、ＳＵＢのみが、ステータスレジスタをＰ３９にリネーミングしてよい。ＲＣＸが次に、他の命令によってリネーミングされるまで、新たな条件付き分岐は、ＲＣＸ．Ｆを消費してよい。
【００２９】
図５は、プロセッサにおけるステータス書き込み命令の実行方法の実施形態を示す。例示的なパイプライン及びプロセッサ（又はコア）が、複数の後述される図において詳述される。さらに、複数のステータス書き込み命令の例示的な命令フォーマットが、詳細に上述されている。
【００３０】
ステータス書き込み命令は、５０１において、フェッチハードウェアによってフェッチされる。典型的には、複数の命令は、フェッチ前に命令キャッシュに格納される。
【００３１】
フェッチされた命令は、５０３において、デコードハードウェアによってデコードされる。命令のデコードは、どの命令が実行されるべきか、及びフェッチする複数のオペランドを決定する。いくつかの実施形態において、命令は、マイクロオペレーションにデコードされる。
【００３２】
いくつかの実施形態において、レジスタリネーミングは、５０５において、リネーミング／配分ハードウェアによって、命令の複数のオペランドのうち１つ又は複数において実行される。例えば、デスティネーションオペランドは、アーキテクチャレジスタから物理レジスタにマッピングされる。複数のソースオペランド値は、５０７において、物理レジスタファイル又はメモリから取得される。
【００３３】
デコードされたステータス書き込み命令は、５０９において、取得されたソースオペランドにおいて、機能ユニット（実行ハードウェア）によって実行される。例えば、減算が実行される。デコードされたステータス書き込み命令の実行は、結果を演算させ、（詳細に上述されたように、Ｃ、Ｏ、Ｓ、Ｐ、Ａ、及びＺのような）ステータス情報を生成させる。
【００３４】
（リタイアメントハードウェアのような）ライトバックハードウェアは、５１１において、デコードされたステータス書き込み命令の実行結果及びステータス情報を、単一のデスティネーションレジスタに格納する。リネーミングを用いるプロセッサ（コア）において、レジスタは、アーキテクチャ的バージョンから物理的バージョンにマッピングされる。さらに、（ＦＬＡＧＳレジスタのような）ステータス情報は、ステータス及びデータの両方を有する物理レジスタにマッピングされる。
【００３５】
上述の図はハードウェアについて説明されたが、方法の複数の態様のうち１つ又は複数は、例えばエミュレートの一部として、ソフトウェアで実行されてよい。例えば、デコーダは、ハードウェアではなくソフトウェア又はファームウェアで実装されてよい。
【００３６】
本明細書において詳述される事項は、ソフトウェアが既に隠されたハードウェアの物理状態にアクセスすることを可能とすることによって、プログラムのアーキテクチャ状態を増加させる。これは、内容をスイッチすることの示唆を含み、通常の態様で処理されてよい。例えば、追加の状態は、例えばＸＳＡＶＥを用いて、オペレーティングシステムによって保存及び復元されてよい。代わりに、この機能は、複数のトランザクション領域内（例えば、ＸＢＥＧＩＮ及びＸＥＮＤ間の複数の領域）のみにおいて利用されてよく、これにより、追加のアーキテクチャ状態は、アトミックな態様で生成及び消費の両方がなされる。又は、新たなアーキテクチャ状態は、複数のトラップ及び割り込みがランタイム管理ソフトウェア又はファームウェア層によって妨害される動的バイナリ変換を介して生成されたコードに限定されるなど、ランタイムソフトウェアによって管理されてよい。
【００３７】
上述された複数の命令は、多数の利点を提供する。典型的には、ステータスレジスタの複数のフラグ（キャリー、オーバーフロー、サイン、ゼロ等）に対して、単一のアーキテクチャ値のみが存在する。ゆえに、多くの場合、コンパイラ又はバイナリトランスレータが、フラグ演算をループの上、及びその外に配置することは不可能である。以下の例を検討する。
【数１】
2017016640.tif 000003
疑似アセンブリにおいて、これは、以下のようになる。
【数２】
2017016640.tif 000004
【００３８】
特に、ＲＡＸ及びＲＢＸの比較はループ内で行われるため、これは、常に同じ結果を生成するにも関わらず、１０００回実行されることに留意されたい。その複数のステータス（フラグ）結果は、後続の必要なループインデックス比較によって上書きされる。両方の比較命令は、次の複数のコンシューマ（条件付き分岐）に必要とされる複数のフラグを生成する。
【００３９】
ここで、デスティネーションステータス書き込み及び消費命令を用いて、上述の例は、以下のようにコンパイル（又はバイナリ変換）されてよい。
【数３】
2017016640.tif 000005
2017016640.tif 000006
【００４０】
ＲＡＸのＲＢＸとの比較は、ループの上に移されている。ＲＣＸ．Ｆ（ステータス情報を有するデスティネーションレジスタ）の値は、一度算出され、１０００回用いられる。コンパイラは、ループ内で実行されるいずれの命令のデスティネーションとしても、整数レジスタＲＣＸを用いておらず（かつ、用いなくてよく）、これは、そのように用いることによってＲＣＸ．Ｆ及びＲＣＸが上書きされ得るからである。
【００４１】
なお、上述のコードは、まだ最適ではない。ループの上に比較を移動させることによって、上述された他の条件付き分岐（ＪＮＥ）にジャンプする最後の条件付き分岐（ＪＬ）を回避することのような、さらなる最適化が可能となる。従って、以下のようになる。
【数４】
2017016640.tif 000007
【００４２】
上述のＲＣＸ．Ｆを生成する命令は、３つのオペランド（非破壊的ソース）命令として書き込まれることがあり、これにより、ソース（ＲＡＸ及びＲＢＸ）は上書きされない。これは、本発明の複数の実施形態に直交（ｏｒｔｈｏｇｏｎａｌ）する。上述された単一の減算は、複数の非破壊的ソース命令が所与の命令セットアーキテクチャ（ＩＳＡ）において利用可能でない場合には、「ｍｏｖ  ｒｃｘ，  ｒａｘ；  ｓｕｂ  ｒｃｘ，  ｒｂｘ；」と置換されてよい。
【００４３】
上述された加算、減算、及び比較は全て、ステータスレジスタを更新する。上述された条件付きジャンプＪＧＥも、ステータスレジスタの複数のステータスフラグによって決定される条件を指す。
【００４４】
本明細書において詳述される複数の実施形態は、以下詳述されるものを含む多数の異なるアーキテクチャで実行されてよい。
【００４５】
例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ
複数のプロセッサコアは、複数の異なる態様で、複数の異なる目的のために、複数の異なるプロセッサにおいて実装されてよい。例えば、このような複数のコアの実装は、１）汎用演算向けの汎用インオーダコア、２）汎用演算向けの高性能汎用アウトオブオーダコア、３）主にグラフィクス及び／又は科学（スループット）演算向けの特定用途向けコアを含んでよい。複数の異なるプロセッサの実装は、１）汎用演算向けの１つ又は複数の汎用インオーダコア及び／又は汎用演算向けの１つ又は複数の汎用アウトオブオーダコアを含むＣＰＵ、並びに２）主にグラフィクス及び／又は科学（スループット）向けの１つ又は複数の特定用途向けコアを含むコプロセッサを含んでよい。このような複数の異なるプロセッサは、複数の異なるコンピュータシステムアーキテクチャをもたらし、これらは、１）ＣＰＵとは別のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージにおける別のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、このようなコプロセッサは、場合によっては、集積グラフィクス及び／又は科学（スループット）ロジックのような特定用途向けロジック、又は特定用途向けコア等と称される）、及び４）同じダイ上に、説明されたＣＰＵ（場合によっては、アプリケーションコア又はアプリケーションプロセッサと称される）、上述されたコプロセッサ、及び追加の機能性を含み得るシステムオンチップを含んでよい。次に、複数の例示的なコアアーキテクチャが説明された後、複数の例示的なプロセッサ及びコンピュータアーキテクチャが説明される。
【００４６】
例示的なコアアーキテクチャ
インオーダ及びアウトオブオーダコアのブロック図
図６Ａは、本発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図６Ｂは、本発明の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図６Ａ−Ｂにおける複数の実線のボックスは、インオーダパイプライン及びインオーダコアを示し、任意に追加された複数の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行／実行パイプライン及びコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様が説明される。
【００４７】
図６Ａにおいて、プロセッサパイプライン６００が、フェッチステージ６０２、長さデコードステージ６０４、デコードステージ６０６、配分ステージ６０８、リネーミングステージ６１０、スケジューリング（ディスパッチ又は発行としても知られる）ステージ６１２、レジスタ読み出し／メモリ読み出しステージ６１４、実行ステージ６１６、ライトバック／メモリ書き込みステージ６１８、例外処理ステージ６２２、及びコミットステージ６２４を含む。
【００４８】
図６Ｂは、実行エンジンユニット６５０と連結されるフロントエンドユニット６３０を含むプロセッサコア６９０を示し、両方ともメモリユニット６７０と連結されている。コア６９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、又はハイブリッドあるいは代替的なコアタイプであってよい。さらに他の選択肢として、コア６９０は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用演算グラフィクス処理ユニット（ＧＰＧＰＵ）コア、グラフィクスコア等のような特定用途向けコアであってよい。
【００４９】
フロントエンドユニット６３０は、命令キャッシュユニット６３４と連結される分岐予測ユニット６３２を含み、命令キャッシュユニット６３４は命令トランスレーションルックアサイドバッファ（ＴＬＢ）６３６と連結され、命令トランスレーションルックアサイドバッファ６３６は命令フェッチユニット６３８と連結され、命令フェッチユニット６３８はデコードユニット６４０と連結される。デコードユニット６４０（又はデコーダ）は、複数の命令をデコードし、１つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は、元の命令からデコードされ、もしくは別の方法でそれを反映し、もしくはそれから派生する他の制御信号を、出力として生成してよい。デコードユニット６４０は、様々な異なるメカニズムを用いて実装されてよい。適切なメカニズムの例は、限定されるものではないが、複数のルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）等を含む。一実施形態において、コア６９０は、複数の特定のマクロ命令に対するマイクロコードを（例えば、デコードユニット６４０に、さもなければフロントエンドユニット６３０内に）格納する、マイクロコードＲＯＭ又は他の媒体を含む。デコードユニット６４０は、実行エンジンユニット６５０内のリネーミング／アロケータユニット６５２と連結される。
【００５０】
実行エンジンユニット６５０は、リタイアメントユニット６５４及び１つ又は複数のスケジューラユニット６５６のセットと連結されるリネーミング／アロケータユニット６５２を含む。スケジューラユニット６５６は、複数の予約ステーション、中央命令ウィンドウ等を含む、任意の数の異なるスケジューラを表す。スケジューラユニット６５６は、物理レジスタファイルユニット６５８に連結される。各物理レジスタファイルユニット６５８は、１つ又は複数の物理レジスタファイルを表し、これらのうち異なるものは、スカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行されるべき次の命令のアドレスである命令ポインタ）等のような１つ又は複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット６５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供してよい。物理レジスタファイルユニット６５８は、リタイアメントユニット６５４によって重ねられて、（例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いる、フューチャファイル、ヒストリバッファ、及びリタイアメントレジスタファイルを用いる、レジスタマップ及び複数のレジスタのプールを用いる等で）レジスタリネーミング及びアウトオブオーダ実行が実装され得る様々な態様を示す。リタイアメントユニット６５４及び物理レジスタファイルユニット６５８は、実行クラスタ６６０に連結される。実行クラスタ６６０は、１つ又は複数の実行ユニット６６２のセット及び１つ又は複数のメモリアクセスユニット６６４のセットを含む。実行ユニット６６２は、複数の様々なオペレーション（例えば、シフト、加算、減算、乗算）を、複数の様々なタイプのデータ（例えば、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行してよい。いくつかの実施形態は、複数の特定の機能又は複数の機能の複数のセット専用の、多数の実行ユニットを含み得るが、他の実施形態は、１つだけの実行ユニット、又は、それら全てで全ての機能を実行する複数の実行ユニットを含んでよい。スケジューラユニット６５６、物理レジスタファイルユニット６５８、及び実行クラスタ６６０は、複数である可能性があるとして示されるが、その理由は、複数の特定の実施形態は、特定の複数のタイプのデータ／オペレーションに対して、複数の別のパイプラインを形成するからである（例えば、各々がそれら独自のスケジューラユニット、物理レジスタファイルユニット及び／又は実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点/パック型整数/パック型浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び／又はメモリアクセスパイプラインであり、個別のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット６６４を有する複数の特定の実施形態が実装される）。複数の別のパイプラインが使用される場合��これらのパイプラインのうち１つ又は複数は、アウトオブオーダ発行／実行であってよく、残りはインオーダであってよいことを理解されたい。
【００５１】
メモリアクセスユニット６６４のセットは、メモリユニット６７０と連結され、メモリユニット６７０は、２次（Ｌ２）キャッシュユニット６７６と連結されるデータキャッシュユニット６７４と連結されるデータＴＬＢユニット６７２を含む。例示的な一実施形態において、メモリアクセスユニット６６４は、ロードユニット、ストアアドレスユニット、及びストアデータユニットを含んでよく、それらの各々はメモリユニット６７０内のデータＴＬＢユニット６７２に連結される。命令キャッシュユニット６３４は、メモリユニット６７０内の２次（Ｌ２）キャッシュユニット６７６とさらに連結される。Ｌ２キャッシュユニット６７６は、１つ又は複数の他のレベルのキャッシュと連結され、最終的にメインメモリと連結される。
【００５２】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン６００を実装してよい。１）命令フェッチ６３８が、フェッチステージ６０２及び長さデコードステージ６０４を実行する、２）デコードユニット６４０が、デコードステージ６０６を実行する、３）リネーミング／アロケータユニット６５２が、配分ステージ６０８及びリネーミングステージ６１０を実行する、４）スケジューラユニット６５６が、スケジューリングステージ６１２を実行する、５）物理レジスタファイルユニット６５８及びメモリユニット６７０が、レジスタ読み出し／メモリ読み出しステージ６１４を実行し、実行クラスタ６６０が、実行ステージ６１６を実行する、６）メモリユニット６７０及び物理レジスタファイルユニット６５８が、ライトバック／メモリ書き込みステージ６１８を実行する、７）複数の様々なユニットが、例外処理ステージ６２２に関わり得る、ならびに８）リタイアメントユニット６５４及び物理レジスタファイルユニット６５８が、コミットステージ６２４を実行する。
【００５３】
コア６９０は、本明細書において説明される命令を含む１つ又は複数の命令セット（例えば、ｘ８６命令セット（複数のより新たなバージョンと共に追加された、いくつかの拡張を有する）カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングスの（ＮＥＯＮのような任意の追加的な拡張を有する）ＡＲＭ命令セット）をサポートしてよい。一実施形態において、コア６９０は、パック型データ命令セット拡張をサポートするためのロジック（例えば、ＡＶＸ１、ＡＶＸ２）を含み、これにより、多くのマルチメディアアプリケーションによって用いられる複数のオペレーションは、パック型データを用いて実行可能となる。
【００５４】
コアは、マルチスレッディング（複数のオペレーション又はスレッドの２つ又はそれより多くの並列なセットを実行すること）をサポートしてよく、時分割マルチスレッディング、同時マルチスレッディング（ここで、単一の物理コアは、物理コアが同時マルチスレッディングを実行する複数のスレッドの各々に、論理コアを提供する）、又はこれらの組み合わせ（例えば、時分割フェッチ及びデコード、その後、インテル（登録商標）ハイパースレッディングテクノロジーでのような同時マルチスレッディング）を含む複数の様々な態様で、これを実行してよいことを理解されたい。
【００５５】
アウトオブオーダ実行との関連でレジスタリネーミングを説明するが、レジスタリネーミングは、インオーダアーキテクチャで利用可能であることを理解されたい。プロセッサの図示された実施形態は、個別の命令及びデータキャッシュユニット６３４／６７４及び共有Ｌ２キャッシュユニット６７６をさらに含むが、複数の代替的な実施形態は、命令及びデータの両方のための、例えば、１次（Ｌ１）内部キャッシュ又はマルチレベルの内部キャッシュのような単一の内部キャッシュを有してよい。いくつかの実施形態において、システムは内部キャッシュと、コア及び／又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。代わりに、全てのキャッシュは、コア及び／又はプロセッサの外部にあってよい。
【００５６】
具体的な例示的インオーダコアアーキテクチャ
図７Ａ−Ｂは、より詳細な、例示的なインオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック（同じタイプ及び／又は異なるタイプの複数の他のコアを含む）の中の１つであり得る。複数の論理ブロックは、アプリケーションに応じて、高帯域幅の相互接続ネットワーク（例えば、リングネットワーク）を介していくつかの固定機能ロジック、メモリＩ／Ｏインタフェース、及び他の必要なＩ／Ｏロジックと通信を行う。
【００５７】
図７Ａは、本発明の複数の実施形態に係る、単一のプロセッサコアのブロック図であって、そのオンダイ相互接続ネットワーク７０２への接続、及びその２次（Ｌ２）キャッシュのローカルサブセット７０４と共に示す。一実施形態において、命令デコーダ７００が、パック型データ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ７０６は、スカラ及びベクトルユニットに入るキャッシュメモリへの低レイテンシアクセスを可能にする。一実施形態において（設計を単純化するために）、スカラユニット７０８及びベクトルユニット７１０が、個別のレジスタセット（それぞれ、スカラレジスタ７１２及びベクトルレジスタ７１４）を用い、それらの間で転送されたデータはメモリに書き込まれ、次に、１次（Ｌ１）キャッシュ７０６からリードバックされるが、本発明の代替的な複数の実施形態は、異なるアプローチを用いてよい（例えば、単一のレジスタセットを用いるか、又はデータをライトバックもリードバックもすることなく、２つのレジスタファイル間で転送することを可能にする通信パスを含む）。
【００５８】
Ｌ２キャッシュのローカルサブセット７０４は、１つのプロセッサコア毎に１つずつ、個別のローカルサブセットに分割されたグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュのそれ独自のローカルサブセット７０４へのダイレクトアクセスパスを有する。プロセッサコアによって読み出されたデータは、そのＬ２キャッシュサブセット７０４内に格納され、他のプロセッサコアがそれら独自のローカルＬ２キャッシュサブセットへのアクセスと並列に、迅速にアクセスされることができる。プロセッサコアによって書き込まれたデータは、必要に応じて、それ独自のＬ２キャッシュサブセット７０４内に格納され、他のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを保証する。リングネットワークは、双方向性であることにより、複数のプロセッサコア、Ｌ２キャッシュ、及び他の論理ブロックのような複数のエージェントが、チップ内で互いに通信を行うことを可能にする。各リングデータパスは、１つの方向毎に１０１２ビット幅である。
【００５９】
図７Ｂは、本発明の複数の実施形態に係る図７Ａにおけるプロセッサコアの一部の拡大図である。図７Ｂは、Ｌ１キャッシュ７０６の一部であるＬ１データキャッシュ７０６Ａ、ならびにベクトルユニット７１０及び複数のベクトルレジスタ７１４に関するさらなる詳細を含む。具体的には、ベクトルユニット７１０は、整数、単精度浮動小数、及び倍精度浮動小数命令のうち１つ又は複数を実行する、１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ７２８を参照）である。ＶＰＵは、スウィズルユニット７２０によるレジスタ入力のスウィズル、数値変換ユニット７２２Ａ−Ｂによる数値変換、及び複製ユニット７２４によるメモリ入力に対する複製をサポートする。書き込みマスクレジスタ７２６によれば、結果的な複数のベクトルの書き込みを叙述することが可能となる。
【００６０】
集積メモリコントローラ及びグラフィクスを有するプロセッサ
図８は、本発明の複数の実施形態に係る、１つより多くのコアを有してよく、集積メモリコントローラを有してよく、集積グラフィクスを有してよい、プロセッサ８００のブロック図である。図８における複数の実線のボックスは、単一のコア８０２Ａ、システムエージェント８１０、１つ又は複数のバスコントローラユニット８１６のセットを備えるプロセッサ８００を示し、任意に追加された複数の破線のボックスは、複数のコア８０２Ａ−Ｎ、システムエージェントユニット８１０内の１つ又は複数の集積メモリコントローラユニット８１４のセット、及び特定用途向けロジック８０８を備える代替的なプロセッサ８００を示す。
【００６１】
従って、プロセッサ８００の複数の異なる実装は、１）（１つ又は複数のコアを含み得る）集積グラフィクス及び／又は科学（スループット）ロジックである特定用途向けロジック８０８、及び１つ又は複数の汎用コア（例えば、複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、これら２つの組み合わせ）である複数のコア８０２Ａ−Ｎを有するＣＰＵ、２）主にグラフィクス及び／又は科学（スループット）を目的とする多数の特定用途向けコアである複数のコア８０２Ａ−Ｎを有するコプロセッサ、及び３）多数の汎用インオーダコアである複数のコア８０２Ａ−Ｎを有するコプロセッサを含んでよい。従って、プロセッサ８００は、汎用プロセッサ、コプロセッサ、又は例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用グラフィクス処理ユニット）、ハイスループット多集積コア（ＭＩＣ）コプロセッサ（３０個又はそれより多くのコアを含む）、組み込みプロセッサ等のような特定用途向けプロセッサであってよい。プロセッサは、１つ又は複数のチップ上に実装されてよい。プロセッサ８００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、又はＮＭＯＳのような、多数の処理技術のいずれかを用いた１つ又は複数の基板の一部であってよく、及び／又はその上に実装されてよい。
【００６２】
メモリ階層は、複数のコア内の１つ又は複数のレベルのキャッシュ、複数の共有キャッシュユニット８０６のセット又はこれらの１つ又は複数、及び複数の集積メモリコントローラユニット８１４のセットに連結された外部メモリ（不図示）を含む。共有キャッシュユニット８０６のセットは、２次（Ｌ２）、３次（Ｌ３）、４次（Ｌ４）、又は他のレベルのキャッシュ等のような１つ又は複数の中レベルキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、及び／又はこれらの組み合わせを含んでよい。一実施形態において、リングベースの相互接続ユニット８１２が、集積グラフィクスロジック８０８、複数の共有キャッシュユニット８０６のセット、及びシステムエージェントユニット８１０／集積メモリコントローラユニット８１４を相互接続するが、複数の代替的な実施形態は、このようなユニットを相互接続する任意の数の周知技術を用いてよい。一実施形態において、１つ又は複数のキャッシュユニット８０６とコア８０２−Ａ−Ｎとの間において、コヒーレンシが維持される。
【００６３】
いくつかの実施形態において、複数のコア８０２Ａ−Ｎのうち１つ又は複数は、マルチスレッディングが可能である。システムエージェント８１０は、複数のコア８０２Ａ−Ｎを調整及びオペレーションするそれらの複数のコンポーネントを含む。システムエージェントユニット８１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを含んでよい。ＰＣＵは、コア８０２Ａ−Ｎ及び集積グラフィクスロジック８０８の電力状態の調整に必要なロジック及び複数のコンポーネントであってよく、又はそれらを含んでよい。ディスプレイユニットは、１つ又は複数の外部接続されたディスプレイを駆動するためのものである。
【００６４】
コア８０２Ａ−Ｎは、アーキテクチャ命令セットに関して同種又は異種とすることができ、すなわち、コア８０２Ａ−Ｎのうちの２つ又はそれより多くは、同じ命令セットを実行可能であってよく、その他は、その命令セット又は異なる命令セットのサブセットのみ実行可能であってよい。
【００６５】
例示的なコンピュータアーキテクチャ
図９−１２は、複数の例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィクスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスのための、当技術分野で既知の他の複数のシステム設計及び構成も適している。概して、本明細書において開示されるように、プロセッサ及び／又は他の実行ロジックを組み込むことが可能な多様なシステム又は電子デバイスが、概して適切である。
【００６６】
ここで、図９を参照すると、本発明の一実施形態に係るシステム９００のブロック図が示される。システム９００は、コントローラハブ９２０と連結される、１つ又は複数のプロセッサ９１０、９１５を含んでよい。一実施形態において、コントローラハブ９２０は、グラフィクスメモリコントローラハブ（ＧＭＣＨ）９９０及び入出力ハブ（ＩＯＨ）９５０（複数の個別のチップ上にあってよい）を含む。ＧＭＣＨ９９０は、メモリ９４０及びコプロセッサ９４５が連結されたメモリ及びグラフィクスコントローラを含む。ＩＯＨ９５０は、複数の入出力（Ｉ／Ｏ）デバイス９６０をＧＭＣＨ９９０に連結する。代わりに、メモリ及びグラフィクスコントローラの一方又は両方は、（本明細書において説明されるように）プロセッサ内に一体化され、メモリ９４０及びコプロセッサ９４５は、プロセッサ９１０と、ＩＯＨ９５０を備える単一のチップのコントローラハブ９２０とに、直接連結される。
【００６７】
複数の追加のプロセッサ９１５は、図９において破線で表されることにより、任意である性質が示されている。各プロセッサ９１０、９１５は、本明細書において説明される処理コアのうち１つ又は複数を含んでよく、プロセッサ８００の何らかのバージョンであってよい。
【００６８】
メモリ９４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、又はその２つの組み合わせであってよい。少なくとも１つの実施形態のために、コントローラハブ９２０は、フロントサイドバス（ＦＳＢ）のようなマルチドロップバス、クイックパスインタコネクト（ＱＰＩ）のようなポイントツーポイントインタフェース、又は同様の接続部９９５を介して、プロセッサ９１０、９１５と通信する。
【００６９】
一実施形態において、コプロセッサ９４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ等のような特定用途向けプロセッサである。一実施形態において、コントローラハブ９２０は、集積グラフィクスアクセラレータを含んでよい。
【００７０】
物理リソース９１０、９１５の間には、アーキテクチャ上、マイクロアーキテクチャ上、熱的、電力消費等の複数の特性を含む様々な利点の基準に関して、様々な相違がある。
【００７１】
一実施形態において、プロセッサ９１０は、一般的なタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数のコプロセッサ命令が、複数の命令内に組み込まれてよい。プロセッサ９１０は、これらのコプロセッサ命令が、取り付けられたコプロセッサ９４５によって実行されるべきタイプのものと認識する。従って、プロセッサ９１０は、コプロセッサバス又は他の相互接続において、これらの複数のコプロセッサ命令（又は複数のコプロセッサ命令を表す複数の制御信号）を、コプロセッサ９４５に発行する。コプロセッサ９４５は、複数の受信されたコプロセッサ命令を受理し、これらを実行する。
【００７２】
ここで、図１０を参照すると、本発明の実施形態に係る、第１のより具体的な例示的システム１０００のブロック図が示される。図１０に示されるように、マルチプロセッサシステム１０００は、ポイントツーポイントインタコネクトシステムであり、ポイントツーポイントインタコネクト１０５０を介して連結される第１のプロセッサ１０７０及び第２のプロセッサ１０８０を含む。プロセッサ１０７０及び１０８０の各々はプロセッサ８００の何らかのバージョンであってよい。本発明の一実施形態において、プロセッサ１０７０及び１０８０は、それぞれ、プロセッサ９１０及び９１５であり、コプロセッサ１０３８は、コプロセッサ９４５である。他の実施形態において、プロセッサ１０７０及び１０８０は、それぞれ、プロセッサ９１０及びコプロセッサ９４５である。
【００７３】
プロセッサ１０７０及び１０８０は、集積メモリコントローラ（ＩＭＣ）ユニット１０７２及び１０８２をそれぞれ含むことが示される。プロセッサ１０７０は、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース１０７６及び１０７８をさらに含み、同様に、第２のプロセッサ１０８０は、Ｐ−Ｐインタフェース１０８６及び１０８８を含む。プロセッサ１０７０、１０８０は、Ｐ−Ｐインタフェース回路１０７８、１０８８を用いて、ポイントツーポイント（Ｐ−Ｐ）インタフェース１０５０を介して情報を交換してよい。図１０に示されるように、ＩＭＣ１０７２及び１０８２は、プロセッサをそれぞれのメモリ、すなわち、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部たり得るメモリ１０３２及びメモリ１０３４に連結する。
【００７４】
プロセッサ１０７０、１０８０の各々は、ポイントツーポイントインタフェース回路１０７６、１０９４、１０８６、１０９８を用いて、個々のＰ−Ｐインタフェース１０５２、１０５４を介して、チップセット１０９０と情報を交換してよい。チップセット１０９０は、高性能インタフェース１０３９を介してコプロセッサ１０３８と、任意に情報を交換してよい。一実施形態において、コプロセッサ１０３８は、例えば、ハイスループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ等のような特定用途向けプロセッサである。
【００７５】
共有キャッシュ（不図示）は、いずれかのプロセッサに含まれてよく、又は両方のプロセッサの外部にあってよいが、Ｐ−Ｐ相互接続を介して複数のプロセッサとなおも接続され、これにより、プロセッサが低電力モードに置かれた場合に、いずれか又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納可能となる。
【００７６】
チップセット１０９０は、インタフェース１０９６を介して第１のバス１０１６に連結されてよい。一実施形態において、第１のバス１０１６は、ペリフェラルコンポーネントインタコネクト（ＰＣＩ）バス、又はＰＣＩエクスプレスバス、又は他の第３世代Ｉ／Ｏ相互接続バスのようなバスであってもよいが、本発明の範囲はこれに限定されるものではない。
【００７７】
図１０に示されるように、複数の様々なＩ／Ｏデバイス１０１４が、第１のバス１０１６を第２のバス１０２０に連結するバスブリッジ１０１８と共に、第１のバス１０１６に連結されてよい。一実施形態において、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵ、（例えば、グラフィクスアクセラレータ又はデジタル信号処理（ＤＳＰ）ユニットのような）アクセラレータ、フィールドプログラマブルゲートアレイ、又は任意の他のプロセッサのような１つ又は複数の追加のプロセッサ１０１５が、第１のバス１０１６に連結される。一実施形態において、第２のバス１０２０はローピンカウント（ＬＰＣ）バスであってよい。一実施形態において、例えば、キーボード及び／又はマウス１０２２、通信デバイス１０２７、ならびに複数の命令／コード及びデータ１０３０を含み得るディスクドライブ又は他の大容量ストレージデバイスのようなストレージユニット１０２８を含、様々なデバイスが、第２のバス１０２０に連結されてよい。さらに、オーディオＩ／Ｏ１０２４が、第２のバス１０２０に連結されてよい。なお、他の複数のアーキテクチャが、適用可能である。例えば、図１０のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は他のこのようなアーキテクチャを実装してよい。
【００７８】
ここで、図１１を参照すると、本発明の実施形態に係る第２のより具体的な例示的システム１１００のブロック図が示される。図１０及び１１における複数の同様の要素は、同様の参照番号を有し、図１０の複数の特定の態様は、図１１の複数の他の態様への妨げとならないよう、図１１から省略されている。
【００７９】
図１１は、プロセッサ１０７０、１０８０がそれぞれ集積メモリ及びＩ／Ｏ制御ロジック（「ＣＬ」）１０７２及び１０８２を含んでよいことを示す。従って、ＣＬ１０７２、１０８２は、集積メモリコントローラユニットを含み、かつ、Ｉ／Ｏ制御ロジックを含む。図１１は、メモリ１０３２、１０３４がＣＬ１０７２、１０８２と連結されるのみならず、Ｉ／Ｏデバイス１１１４も制御ロジック１０７２、１０８２と連結されることも示す。レガシＩ／Ｏデバイス１１１５は、は、チップセット１０９０と連結される。
【００８０】
ここで、図１２を参照すると、本発明の実施形態に係るＳｏＣ１２００のブロック図が示される。図８における複数の同様の要素は、同様の参照番号を有する。また、複数の破線ボックスは、より高度なＳｏＣにおける任意の機能である。図１２において、相互接続ユニット１２０２は、１つ又は複数のコア２０２Ａ−Ｎのセット、及び共有キャッシュユニット８０６を含むアプリケーションプロセッサ１２１０、システムエージェントユニット８１０、バスコントローラユニット８１６、集積メモリコントローラユニット８１４、集積グラフィクスロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含み得る複数のコプロセッサ１２２０のセット又はそのうちの１つ又は複数、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１２３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット１２３２、及び１つ又は複数の外部ディスプレイと連結するためのディスプレイユニット１２４０と連結される。一実施形態において、コプロセッサ１２２０は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、組み込みプロセッサ等のような特定用途向けプロセッサを含む。
【００８１】
本明細書において開示される複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はこのような複数の実装アプローチの組み合わせにより実装されてよい。本発明の複数の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性及び不揮発性メモリ、及び／又は複数のストレージ要素を含む）、少なくとも１つの入力デバイス、及び少なくとも１つの出力デバイスを備える複数のプログラマブルシステム上で実行する複数のコンピュータプログラム又はプログラムコードとして実装されてよい。
【００８２】
本明細書において説明される複数の機能を実行し、出力情報を生成する複数の命令を入力すべく、図１０に示されるコード１０３０のようなプログラムコードが適用されてよい。出力情報は、既知の態様で、１つ又は複数の出力デバイスに適用されてよい。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサのようなプロセッサを有する何らかのシステムを含む。
【００８３】
プログラムコードは、処理システムと通信を行う高水準の手続き型又はオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、望ましい場合には、アセンブリ又は機械言語で実装されてもよい。実際に、本明細書において説明される複数のメカニズムは、その範囲において、何らかの特定のプログラミング言語に限定されるものではない。いずれの場合であっても、言語は、コンパイラ型又はインタプリタ型言語であってよい。
【００８４】
少なくとも１つの実施形態の１つ又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に格納された代表的な複数の命令によって実装されてよく、これらは、機械によって読み出された場合に、本明細書において説明される複数の技術を実行するロジックを、機械に製造させる。「ＩＰコア」として知られるこのような複数の表現は、有形の機械可読媒体に格納されてよく、様々な顧客、又は実際にロジック又はプロセッサを作成する複数の製造機械にロードする複数の製造設備に供給されてよい。
【００８５】
このような機械可読記憶媒体は、ハードディスクと、フロッピ（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、書き換え可能コンパクトディスク（ＣＤ−ＲＷ）、及び光磁気ディスクのような任意の他のタイプのディスクを含む記憶媒体、リードオンリメモリ（ＲＯＭ）と、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）のようなランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、及び相変化メモリ（ＰＣＭ）のような半導体デバイス、磁気もしくは光カード、又は複数の電子的命令を格納するのに適切な任意の他のタイプの媒体を含む、機械又はデバイスにより製造又は形成される、非一時的で有形の複数の構成の物品を含んでよいが、これらに限定されるものではない。
【００８６】
従って、本発明の複数の実施形態は、本明細書において説明される複数の構造、回路、装置、複数のプロセッサ、及び／又はシステム機能を定義するハードウェア記述言語（ＨＤＬ）のような複数の命令又は設計データを含む、非一時的な有形の機械可読媒体をさらに含む。このような複数の実施形態は、プログラム製品と称されてもよい。
【００８７】
エミュレート（バイナリ変換、コードモーフィング等を含む）
いくつかの場合において、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換するために用いられてよい。例えば、命令コンバータは、コアによって処理されるべき１つ又は複数の他の命令に、命令をトランスレート（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて）、モーフィング、エミュレート、又は変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせにおいて実装されてよい。命令コンバータは、プロセッサ上にあってよく、プロセッサ外にあってよく、又は、一部がプロセッサ上かつ一部がプロセッサ外にあってよい。
【００８８】
図１３は、本発明の複数の実施形態に係る、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比させるブロック図である。図示された実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代わりに、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されてよい。図１３は、少なくとも１つのｘ８６命令セットコアを備えるプロセッサ１３１６によってネイティブで実行可能なｘ８６バイナリコード１３０６を生成すべく、高水準言語１３０２のプログラムが、ｘ８６コンパイラ１３０４を用いてコンパイルされてよいことを示す。少なくとも１つのｘ８６命令セットコアを備えるプロセッサ１３１６は、少なくとも１つのｘ８６命令セットコアを備えるインテル社製プロセッサと実質的に同じ結果を実現すべく、（１）インテルｘ８６命令セットコアの命令セットの大部分、又は（２）少なくとも１つのｘ８６命令セットコアを備えるインテル社製プロセッサで動作することを目的としたアプリケーション又は他のソフトウェアのオブジェクトコードバージョンを互換的に実行するか、又は別の方法で処理することによって、少なくとも１つのｘ８６命令セットコアを備えるインテル社製プロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表す。ｘ８６コンパイラ１３０４は、追加のリンク処理を用いて、又はこれ用いることなく、少なくとも１つのｘ８６命令セットコアを備えるプロセッサ１３１６上で実行可能なｘ８６バイナリコード１３０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図１３は、高水準言語１３０２のプログラムが代替的な命令セットコンパイラ１３０８を用いてコンパイルされることにより、少なくとも１つのｘ８６命令セットコアを有さないプロセッサ１３１４（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セットを実行するか、及び／又はカリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セットを実行するコアを有するプロセッサ）によってネイティブで実行され得る代替的な命令セットバイナリコード１３１０が生成されてよいことを示す。命令コンバータ１３１２は、ｘ８６バイナリコード１３０６を、ｘ８６命令セットコアを備えないプロセッサ１３１４によってネイティブで実行可能なコードに変換するために用いられる。この変換されたコードは、代替的な命令セットバイナリコード１３１０と同じである可能性は低い。なぜなら、これが可能な命令コンバータの製作は難しいからである。しかしながら、変換されたコードは、一般的なオペレーションを実現し、代替的な命令セットからの命令で構成される。従って、命令コンバータ１３１２は、エミュレート、シミュレーション又は任意の他の処理を通して、ｘ８６命令セットプロセッサ又はコアを有さないプロセッサ又は他の電子デバイスがｘ８６バイナリコード１３０６を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
【図１】
2017016640.tif 000008
【図２】
2017016640.tif 000009
【図３】
2017016640.tif 000010
【図４】
2017016640.tif 000011
【図５】
2017016640.tif 000012
【図６Ａ】
2017016640.tif 000013
【図６Ｂ】
2017016640.tif 000014
【図７Ａ】
2017016640.tif 000015
【図７Ｂ】
2017016640.tif 000016
【図８】
2017016640.tif 000017
【図９】
2017016640.tif 000018
【図１０】
2017016640.tif 000019
【図１１】
2017016640.tif 000020
【図１２】
2017016640.tif 000021
【図１３】
2017016640.tif 000022
【外国語明細書】
2017016640000001.pdf