(57)【要約】  １つ以上の制御ユニットと、複数の第１の実行ユニットと、１つ以上の第２の実行ユニットとを備えるプロセッサである。プロセッサ命令セットに適合するフェッチされた命令が、第１の実行ユニットに送られる。第２の命令セット（プロセッサ命令セットとは異なる）に適合するフェッチされた命令が、第２の実行ユニットに送られる。第２の実行ユニットは、グラフィックス演算を実行するように構成され、またはＪａｖａバイトコード、マネージドコード、ビデオ／オーディオ処理演算、暗号化／復号化演算などの実行のような他の特殊な機能を実行するように構成されてもよい。第２の実行ユニットは、コプロセッサのように動作するように構成されてもよい。単一の制御ユニットが、すべての実行ユニットに対するフェッチ、デコード、およびスケジューリングを処理してもよい。他の形態として、マルチ制御ユニットが、実行ユニットの異なるサブセットを処理してもよい。【選択図】図１
2011508918.tif 000002
【特許請求の範囲】
【請求項１】
複数の実行ユニットと、
グラフィックス実行ユニット（ＧＥＵ）と、
前記ＧＥＵおよび前記複数の実行ユニットに結合され、命令ストリームをフェッチするように構成された第１のユニットとを備え、前記命令ストリームがプロセッサ命令セットに適合する第１の命令とグラフィックス演算を実行するための第２の命令とを含み、前記第２の命令がピクセルについてピクセルシェーディングを実行するための少なくとも１つの命令を含み、前記第１のユニットが、前記第１の命令および前記第２の命令をデコードし、前記複数の実行ユニットについて前記デコードされた第１の命令の少なくとも一つのサブセットの実行をスケジューリングし、前記ＧＥＵについて前記デコードされた第２の命令の少なくとも１つのサブセットの実行をスケジューリングするように構成される、プロセッサ。
【請求項２】
前記第１の命令および前記第２の命令が同一のメモリ空間にアドレス指定する、請求項１に記載のプロセッサ。
【請求項３】
インタフェースユニットと、リクエストルータとをさらに備え、前記インタフェースユニットが、前記リクエストルータを経由して前記ＧＥＵに前記デコードされた第２の命令を転送するように構成され、前記ＧＥＵがコプロセッサ方式で動作するように構成される、請求項１に記載のプロセッサ。
【請求項４】
前記第２の命令がジオメトリプリミティブにジオメトリシェーディングを実行するための命令を含む、請求項１に記載のプロセッサ。
【請求項５】
前記第２の命令がジオメトリプリミティブにピクセルシェーディングを実行するための命令を含む、請求項１に記載のプロセッサ。
【請求項６】
複数の第１の実行ユニットと、
１つ以上の第２の実行ユニットと、
前記複数の第１の実行ユニットに結合され、第１の命令ストリームをフェッチするように構成された第３のユニットと、
前記１つ以上の第２の実行ユニットに結合され、第２の命令ストリームをフェッチするように構成された第４のユニットとを備え、
前記第１の命令ストリームが、プロセッサ命令セットに適合する第１の命令を含み、前記第３のユニットが、前記第１の命令をデコードし、前記複数の実行ユニットについて前記デコードされた第１の命令の少なくとも１つのサブセットの実行をスケジューリングするように構成され、
前記第２の命令ストリームが、前記プロセッサ命令セットとは異なる第２の命令セットに適合する第２の命令を含み、前記第４のユニットが、前記第２の命令をデコードし、前記１つ以上の第２の実行ユニットについて前記デコードされた第２の命令の少なくとも１つのサブセットの実行をスケジューリングするように構成される、プロセッサ。
【請求項７】
前記第１の命令および前記第２の命令が同一のメモリ空間にアドレス指定する、請求項６に記載のプロセッサ。
【請求項８】
インタフェースユニットと、リクエストルータとをさらに備え、前記インタフェースユニットが前記リクエストルータを経由して前記１つ以上の第２の実行ユニットに前記デコードされた第２の命令を転送するように構成され、前記１つ以上の第２の実行ユニットがコプロセッサとして動作するように構成される、請求項６に記載のプロセッサ。
【請求項９】
複数の第１の実行ユニットと、
１つ以上の第２の実行ユニットと、
前記複数の第１の実行ユニットおよび前記１つ以上の第２の実行ユニットに結合され、命令ストリームをフェッチするように構成された制御ユニットとを備え、前記命令ストリームが、プロセッサ命令セットに適合する第１の命令と、前記プロセッサ命令セットとは異なる第２の命令セットに適合する第２の命令とを含み、前記制御ユニットが、前記第１の命令をデコードし、前記複数の第１の実行ユニットについて前記デコードされた第１の命令の少なくとも１つのサブセットの実行をスケジューリングし、前記第２の命令をデコードし、前記１つ以上の第２の実行ユニットについて前記デコードされた第２の命令の少なくとも１つのサブセットの実行をスケジューリングするようにさらに構成される、プロセッサ。
【請求項１０】
インタフェースユニットと、リクエストルータとをさらに備え、前記インタフェースユニットが前記リクエストルータを経由して前記１つ以上の第２の実行ユニットに前記デコードされた第２の命令を転送するように構成され、前記１つ以上の第２の実行ユニットがコプロセッサ方式で動作するように構成される、請求項９に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、単一のプロセッサにおいて汎用処理および特化処理（グラフィックスレンダリングなど）を実行するためのシステムおよび方法に関する。
【背景技術】
【０００２】
現在のパーソナルコンピュータ（ＰＣ）のアーキテクチャは、単一プロセッサ（Ｉｎｔｅｌ８０８８）システムから発展を遂げてきた。作業負荷は、単純なユーザプログラムおよびオペレーティングシステム機能から、グラフィックユーザインタフェース、マルチタスクオペレーティングシステム、マルチメディアアプリケーションなどの複雑な組み合わせのものへと高度化してきた。ほとんどのＰＣには、ＣＰＵからグラフィックスの演算処理にかかる負荷を軽減して、ＣＰＵを制御集約的なタスクに集中させることができるように、一般にＧＰＵと呼ばれる特殊なグラフィックスプロセッサが含まれている。ＧＰＵは、典型的に、ＰＣのＩ／Ｏバスに位置する。加えて、最近、ＧＰＵは、コンピュータによる大規模並列処理タスクを実行するために使用されてきた。その結果、最新のコンピュータシステムには、異なる作業負荷特性に最も適した２つの複雑な処理ユニットがあり、各処理ユニットは、独自のプログラミングパラダイムおよび命令セットを有する。典型的なアプリケーションのシナリオでは、いずれの処理ユニットも十分に利用されていない。しかしながら、各処理ユニットは、大量の電力を消費し、基板のスペースを占めてしまう。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
従来のｘ８６プロセッサは、３Ｄグラフィックスで実行される種類の演算処理にあまり適していない。したがって、グラフィックスアクセラレータハードウェアの補助がなければ、３Ｄグラフィックスに関わるソフトウェアアプリケーションの動きは、典型的に、ｘ８６プロセッサ上で非常に低速になる。グラフィックスハードウェアによる高速化により、グラフィックス処理タスクの動作速度は上がるが、タスクを指定するコマンド／データが、コンピュータのソフトウェアインフラストラクチャ（オペレーティングシステムおよびデバイスドライバを含む）を介してアクセラレータに送られるため、ソフトウェアアプリケーションは、アクセラレータでのグラフィックスタスクの実行が要求されると、待ち時間が長くなる。多数の小さなグラフィックスタスクに関わるソフトウェアアプリケーションでは、通信待ち時間がこのように長くなることでオーバーヘッドが大きくなるため、グラフィックスアクセラレータの活用レベルが極端に低減しうる。
【課題を解決するための手段】
【０００４】
いくつかの実施形態において、プロセッサが、複数の実行ユニットと、グラフィックス実行ユニット（ＧＥＵ）と、制御ユニットとを含む。制御ユニットは、ＧＥＵおよび複数の実行ユニットに結合され、システムメモリから（例えば、命令キャッシュを経由して）命令ストリームをフェッチするように構成される。命令ストリームは、プロセッサ命令セットに適合する第１の命令と、グラフィックス演算を実行するための第２の命令とを含む。プロセッサ命令セットは、少なくとも汎用処理命令セットを含む命令セットである。「第２の命令」は、１つ以上のグラフィックス命令を含む。グラフィックス命令の例には、ピクセルにピクセルシェーディングを実行するための命令、ジオメトリプリミティブにジオメトリシェーディングを実行するための命令、およびジオメトリプリミティブにピクセルシェーディングを実行するための命令が挙げられる。制御ユニットは、第１の命令および第２の命令を復号化し、複数の実行ユニットで復号化された第１の命令の少なくとも１つのサブセットの実行をスケジューリングし、ＧＥＵで復号化された第２の命令の少なくとも１つのサブセットの実行をスケジューリングするように構成される。プロセッサは、第１の命令および第２の命令に対して統合メモリ空間を使用するように構成されてもよく、すなわち、第１の命令で使用されるアドレスおよび第２の命令で使用されるアドレスは、同一のメモリ空間を参照する。１つの実施形態において、プロセッサはまた、インタフェースユニットと、リクエストルータとを含む。インタフェースユニットは、復号化された第２の命令をリクエストルータを経由してＧＥＵに転送するように構成され、ＧＥＵは、コプロセッサの方式で動作するように構成される。リクエストルータは、プロセッサからシステムメモリ（またはノースブリッジのような中間デバイス）へメモリアクセスリクエストをルーティングしてもよい。
【０００５】
１つの実施形態において、プロセッサはまた、Ｊａｖａバイトコードを実行するための実行ユニットを含む。この実施形態において、制御ユニットは、フェッチされた命令ストリームにおいて任意のＪａｖａバイトコードを特定し、この実行ユニットで実行するためにＪａｖａバイトコードをスケジューリングするように構成される。
【０００６】
別の実施形態において、プロセッサはまた、マネージドコードを実行するための実行ユニットを含む。この実施形態において、制御ユニットは、フェッチされた命令ストリームの任意のマネージドコードを特定し、この実行ユニットで実行するためのマネージドコードをスケジューリングするように構成される。
【０００７】
１つの実施形態において、ＧＥＵは、頂点シェーダ、ジオメトリシェーダ、ラスタライザ、およびピクセルシェーダの１つ以上を含む。
【０００８】
いくつかの実施形態において、プロセッサが、複数の第１の実行ユニットと、１つ以上の第２の実行ユニットと、第１の制御ユニットと、第２の制御ユニットとを含む。制御ユニットは、複数の第１の実行ユニットに結合され、第１の命令ストリームをフェッチするように構成される。第１の命令ストリームは、汎用プロセッサ命令セットに適合する第１の命令を含む。制御ユニットは、第１の命令を復号化し、複数の実行ユニットで復号化された第１の命令の少なくとも１つのサブセットの実行をスケジューリングするように構成される。第２の制御ユニットは、１つ以上の第２の実行ユニットに結合され、第２の命令ストリームをフェッチするように構成される。第２の命令ストリームは、プロセッサ命令セットとは異なる第２の命令セットに適合する第２の命令を含む。第２の制御ユニットは、第２の命令を復号し、１つ以上の第２の実行ユニットで復号化された第２の命令の少なくとも１つのサブセットの実行をスケジューリングするように構成される。１つの実施形態において、プロセッサは、第１の命令および第２の命令が同一のメモリ空間をアドレス指定するように構成される。
【０００９】
１つの実施形態において、プロセッサはまた、インタフェースユニットと、リクエストルータとを含む。インタフェースユニットは、復号化された第２の命令をリクエストルータを経由して１つ以上の第２の実行ユニットに転送するように構成される。１つ以上の第２の実行ユニットは、コプロセッサとして動作するように構成されてもよい。
【００１０】
さまざまな実施形態において、第２の命令は、１つ以上のグラフィックス命令（すなわち、グラフィックス演算を実行するための命令）、Ｊａｖａバイトコード、マネージドコード、ビデオ処理命令、マトリックス／ベクトル演算命令、暗号化／復号化命令、オーディオ処理命令、またはこれらのタイプの命令の任意の組み合わせを含んでもよい。
【００１１】
１つの実施形態において、１つ以上の第２の実行ユニットの少なくとも１つが、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ、およびピクセルと頂点の両方に対する統合されたシェーダとを含む
【００１２】
いくつかの実施形態において、プロセッサが、複数の第１の実行ユニットと、１つ以上の第２の実行ユニットと、制御ユニットとを含んでもよい。制御ユニットは、複数の第１の実行ユニットおよび１つ以上の第２の実行ユニットに結合され、命令ストリームをフェッチするように構成される。命令ストリームは、プロセッサ命令セットに適合する第１の命令と、プロセッサ命令セットとは異なる第２の命令セットに適合する第２の命令とを含む。制御ユニットは、第１の命令を復号化し、複数の第１の実行ユニットで復号化された第１の命令の少なくとも１つのサブセットの実行をスケジューリングし、第２の命令を復号化し、１つ以上の第２の実行ユニットで復号化された第２の命令の少なくとも１つのサブセットの実行をスケジューリングするようにさらに構成される。プロセッサは、第１の命令および第２の命令が同一のメモリ空間をアドレス指定するように構成されてもよい。
【００１３】
好ましい実施形態の以下の詳細な説明を、以下の図面とともに考慮すると、本発明をより深く理解できる。
【００１４】
本発明には、さまざまな修正例を施し、別の形態とる余地があるが、本発明の特定の実施形態が図面に一例として示されており、本明細書において詳細に記載される。しかしながら、図面および図面の詳細な説明は、本発明を開示された特定の形態に限定することを意図したものではなく、逆に、本発明は、添付の特許請求の範囲によって規定される本発明の趣旨および範囲内にあるあらゆる修正例、均等物、および代替物に及ぶものであることを理解されたい。
【図面の簡単な説明】
【００１５】
【図１】単一のフェッチ／デコード／スケジュールユニットを有し、プロセッサ命令セットおよび第２の命令セットを含む統合された命令セットをサポートするように構成されたプロセッサの１つの実施形態を示す図。
【図２】多数のコプロセッサのような実行ユニットが、インタフェースおよびリクエストルータを介してＦＤＳユニットに結合される、単一のフェッチ／デコード／スケジュール（ＦＤＳ）ユニットを有するプロセッサの１つの実施形態を示す図。
【図３】プロセッサ命令セットおよび第２の命令セット（例えば、グラフィックス命令）から混合された命令を有するフェッチされた命令ストリームを示す図。
【図４】２つのフェッチ／デコード／スケジュール（ＦＤＳ）ユニット、すなわち、第１の実行ユニットセットをターゲットにした命令を復号化するための第１のＦＤＳユニットと、第２の実行ユニットセットをターゲットにした命令を復号化するための第２のＦＤＳユニットを有するプロセッサの１つの実施形態を示す図。
【図５】多数のコプロセッサのような実行ユニットが、インタフェースおよびリクエストルータを介してＦＤＳユニットに結合される、２つのフェッチ／デコード／スケジュール（ＦＤＳ）ユニットを有するプロセッサの１つの実施形態を示す図。
【図６】２つのＦＤＳユニットによってそれぞれフェッチされる第１および第２の命令ストリームの一例を示す図。
【図７】グラフィックス実行ユニット（ＧＥＵ）の１つの実施形態を示す図。
【発明を実施するための形態】
【００１６】
図１は、プロセッサ１００の１つの実施形態を示す。プロセッサ１００は、命令キャッシュ１１０と、フェッチ／デコード／スケジュール（ＦＤＳ）ユニット１１４と、実行ユニット１２２−１〜１２２−Ｎ（Ｎは正の整数）、ロード／ストアユニット１５０と、レジスタファイル１６０と、データキャッシュ１７０とを含む。さらに、プロセッサ１００は、１つ以上の追加の実行ユニットを含み、例えば、グラフィックス演算を実行するためのグラフィックス実行ユニット（ＧＥＵ）１３０、Ｊａｖａバイトコードを実行するためのＪａｖａバイトコードユニット（ＪＢＵ）１３４、マネージドコードを実行するためのマネージドコードユニット（ＭＣＵ）１３８、暗号化および復号化演算を実行するための暗号化／復号化ユニット（ＥＤＵ）１４２、ビデオ処理演算を実行するためのビデオ実行ユニット、および整数および／または浮動小数点マトリックスおよびベクトル演算を実行するためのマトリックス数値演算ユニットの１つ以上を含む。いくつかの実施形態において、ＪＢＵ１３４およびＭＣＵ１３８は、含まれなくてもよい。その代わり、Ｊａｖａバイトコードおよび／またはマネージドコードは、ＦＤＳユニット１１４内で処理されてもよい。例えば、ＦＤＳユニット１１４は、汎用プロセッサ命令セットの命令にＪａｖａバイトコードまたはマネージドコードを復号化してもよく、またはマイクロコードルーチンのコールに復号化してもよい。
【００１７】
Ｊａｖａバイトコードは、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ．によって定義されたＪａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅによって実行される命令の形式である。マネージドコードは、ＭｉｃｒｏｓｏｆｔのＣＬＲ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅによって実行される命令の形式である。
【００１８】
命令キャッシュ１１０は、システムメモリから新しくアクセスされた命令のコピーを格納する。（システムメモリはプロセッサ１００の外部にある。）ＦＤＳユニット１１４は、命令キャッシュ１１０から命令のストリームＳをフェッチする。ストリームＳの命令は、プロセッサ１００によってサポートされた統合された命令セットＵから引き出された命令である。統合された命令セットは、（ａ）プロセッサ命令セットＰの命令と、（ｂ）プロセッサ命令セットＰとは別個の第２の命令セットＱの命令とを含む。
【００１９】
「プロセッサ命令セット」という用語は、本明細書において使用する場合、整数および浮動小数点演算、論理演算、ビット操作、分岐およびメモリアクセスを実行するための命令など、汎用処理命令の少なくとも１つのセットを含む任意の命令セットである。「プロセッサ命令セット」はまた、他の命令、例えば、整数ベクトルおよび／または浮動小数点ベクトルに同時命令複数データ（ＳＩＭＤ：ｓｉｍｕｌｔａｎｅｏｕｓ−ｉｎｓｔｒｕｃｔｉｏｎ  ｍｕｌｔｉｐｌｅ−ｄａｔａ）演算を実行するための命令を含んでもよい。
【００２０】
いくつかの実施形態において、プロセッサ命令セットＰは、ＩｎｔｅｌのＩＡ−３２命令セットや、ＡＭＤによって定義されたＡＭＤ−６４ＴＭのようなｘ８６命令セットを含んでもよい。他の実施形態において、プロセッサ命令セットＰは、ＭＩＰＳプロセッサ、ＳＰＡＲＣプロセッサ、ＡＲＭプロセッサ、ＰｏｗｅｒＰＣプロセッサなどのプロセッサの命令セットを含んでもよい。プロセッサ命令セットＰは、命令セットアーキテクチャで定義されてもよい。
【００２１】
１つの実施形態において、第２の命令セットＱは、グラフィックス演算を実行するための命令セットを含む。別の実施形態において、第２の命令セットＱは、Ｊａｖａバイトコードを含む。さらなる別の実施形態において、第２の命令セットＱは、マネージドコードを含む。より一般には、第２の命令セットＱは、１つ以上の命令セット、例えば、グラフィックス演算を実行するための命令セット、Ｊａｖａバイトコード、マネージドコード、暗号化および復号化演算を実行するための命令セット、ビデオ処理演算を実行するための命令セット、およびマトリックスおよびベクトル演算を実行するための命令セットの１つ以上を含んでもよい。これらの命令セットの１つ以上の異なる組み合わせに相当するさまざまな実施形態が想定される。
【００２２】
プログラマは、プロセッサ１００用のプログラムを組み立てるさい、プロセッサ命令セットＰの命令と、第２の命令セットＱの命令とを自由に組み合わせることができる。このように、フェッチされた命令のストリームＳは、プロセッサ命令セットＰおよび第２の命令セットＱからの命令の組み合わせを含んでもよい。ストリームＳ内のこのような命令の組み合わせの一例が、第２の命令セットＱがグラフィックス命令のセットである特殊なケースの図３に示されている。例示的なストリーム３００は、プロセッサ命令セットＰからの命令Ｉ０、Ｉ１、Ｉ３、．．．と、第２の命令セットＱからの命令Ｇ０、Ｇ１、Ｇ２、．．．とを含む。別の実施形態において、プロセッサ１００は、マルチスレッディング（またはハイパースレッディング）を実行してもよい。各スレッドは、組み合わせた命令を含んでもよく、またはソース命令セットＰおよびＱの１つから命令を含んでもよい。
【００２３】
上述したように、いくつかの実施形態において、第２の命令セットＱは、グラフィックス演算を実行するための命令セットを含んでもよい。例えば、第２の命令セットＱは、頂点に頂点シェーディングを実行するための命令と、ジオメトリプリミティブ（三角形など）にジオメトリシェーディングを実行するための命令と、ジオメトリプリミティブのラスタ化を実行するための命令と、ピクセルにピクセルシェーディングを実行するための命令とを含んでもよい。１つの実施形態において、第２の命令セットＱは、Ｄｉｒｅｃｔ３Ｄ１０  ＡＰＩに適合する命令セットを含んでもよい。（「ＡＰＩ」は、「アプリケーションプログラミングインタフェース」または「アプリケーションプログラマのインタフェース」の頭字語である。）別の実施形態において、第２の命令セットＱは、ＯｐｅｎＧＬ  ＡＰＩに適合する命令セットを含んでもよい。
【００２４】
ＦＤＳユニット１１４は、フェッチされた命令ストリームを実行可能な演算（ｏｐ）に復号化する。各フェッチされた命令が、１つ以上のｏｐに復号化される。フェッチされた命令の一部（例えば、より複雑な命令の一部）が、マイクロコードＲＯＭにアクセスすることによって復号化されてもよい。さらに、フェッチされた命令の一部が、１対１の方式で復号化されてもよく、すなわち、命令により、この命令に特有の単一のｏｐが得られる。例えば、フェッチされた命令の一部が、結果的に得られたｏｐがフェッチされた命令と同一である（または類似する）ように復号化されてもよい。１つの実施形態において、グラフィックス命令、Ｊａｖａバイトコード、マネージドコード、暗号化／復号化コード、および浮動小数点命令が、１対１の方式で１命令につき１つのｏｐを発生するように復号化されてもよい。
【００２５】
ＦＤＳユニット１１４は、実行ユニット１２２−１〜１２２−Ｎと、１つ以上の追加の実行ユニットと、ロード／ストアユニット１５０とを含む実行ユニットで実行するためのｏｐをスケジューリングする。ＧＥＵ１３０を含むこれらの実施形態において、ＦＤＳユニット１１４は、ストリームＳの（第２の命令セットＱの）任意のグラフィックス命令を特定し、ＧＥＵ１３０において実行するためのグラフィックス命令（すなわち、グラフィックス命令を復号化することから得られたｏｐ）をスケジューリングする。
【００２６】
ＪＢＵ１３４を含むこれらの実施形態において、ＦＤＳユニット１１４は、フェッチされた命令のストリームＳにおいて任意のＪａｖａバイトコードを特定し、ＪＢＵ１３４において実行するためのＪａｖａバイトコードをスケジューリングする。
【００２７】
ＭＣＵ１３８を含むこれらの実施形態において、ＦＤＳユニット１１４は、フェッチされた命令のストリームＳにおいて任意のマネージドコードを特定し、ＭＣＵ１３８において実行するためのマネージドコードをスケジューリングする。
【００２８】
ＥＤＵユニット１４２を含むこれらの実施形態において、ＦＤＳユニット１１４は、フェッチされた命令のストリームＳの任意の暗号化または復号化命令を特定し、ＥＤＵユニット１４２において実行するための命令をスケジューリングする。
【００２９】
上述したように、ＦＤＳユニット１１４は、フェッチされた命令のストリームＳの各命令を１つ以上のｏｐに復号化し、実行ユニットの適切なもので実行するための１つ以上のｏｐをスケジューリングする。いくつかの実施形態において、ＦＤＳユニット１１４は、スーパースカラー演算、アウトオブオーダー（ＯＯＯ）実行、マルチスレッド実行、投機的実行、分岐予想、またはこれらの任意の組み合わせに対して構成される。このように、さまざまな実施形態において、ＦＤＳユニット１１４は、実行ユニットの利用可能性を決定するための論理、２つ以上のｏｐの処理が可能な２つ以上の実行ユニットが利用可能であれば、２つ以上のｏｐを（所与のクロックサイクルで）並列に送り出すための論理、ｏｐのアウトオブオーダー実行をスケジューリングし、ｏｐのインオーダーリタイアメントを保証するための論理、複数のスレッドおよび／または複数のプロセス間のコンテクストスイッチングを実行するための論理、および現在実行中のコードタイプに特化した定義されていない命令にトラップを発生するための論理などのさまざまな組み合わせを含んでもよい。
【００３０】
ロード／ストアユニット１５０は、データキャッシュ１７０に結合され、メモリ書き込みおよびメモリ読み取り演算を実行するように構成される。メモリ書き込み演算のために、ロード／ストアユニット１５０は、物理アドレスおよび関連する書き込みデータを発生してもよい。物理アドレスおよび書き込みデータは、データキャッシュ１７０へ後で送信するためのストアキュー（図示せず）に入力されてもよい。メモリ読み取りデータは、データキャッシュ１７０から（または最新のストアの場合にストアキューにあるエントリから）ロード／ストアユニット１５０に供給されてもよい。
【００３１】
実行ユニット１２２−１〜１２２−Ｎは、１つ以上の整数パイプラインと、１つ以上の浮動小数点ユニットとを含んでもよい。１つ以上の整数パイプラインは、整数演算（加算、減算、乗算、および除算など）を実行するためのリソースと、論理演算（ＡＮＤ、ＯＲ、および否定など）、ビット操作（シフトおよび循環シフトなど）とを含んでもよい。いくつかの実施形態において、１つ以上の整数パイプラインのリソースが、ＳＩＭＤ整数演算を実行するように動作可能である。１つ以上の浮動小数点ユニットは、浮動小数点演算を実行するためのリソースを含んでもよい。いくつかの実施形態において、１つ以上の浮動小数点ユニットのリソースは、ＳＩＭＤ浮動小数点演算を実行するように動作可能である。
【００３２】
１つの実施形態のセットにおいて、実行ユニット１２２−１〜１２２−Ｎは、整数および／または浮動小数点ＳＩＭＤ演算を実行するように構成された１つ以上のＳＩＭＤユニットを含む。
【００３３】
図１に示すように、実行ユニットは、送出バス１１８および結果バス１５５に結合されてもよい。実行ユニットは、ＦＤＳユニット１１４から送出バス１１８を経由してｏｐを受信し、結果バス１５５を経由してレジスタファイル１６０に実行の結果を送る。レジスタファイル１６０は、フィードバック経路１５８に結合されることで、レジスタファイル１６０からのデータは、実行ユニットへソースオペランドとして供給されうる。バイパス経路１５７は、結果バス１５５とフィードバック経路との間を結合し、実行の結果が、レジスタファイル１６０を迂回し、ひいては、実行ユニットへソースオペランドとしてより直接供給されうる。レジスタファイル１６０は、アーキテクチャ化レジスタのセット用の物理ストレージを含んでもよい。
【００３４】
上述したように、実行ユニット１２２−１〜１２２−Ｎは、１つ以上の浮動小数点ユニットを含んでもよい。各浮動小数点ユニットは、浮動小数点命令（例えば、ｘ８７浮動小数点命令、またはＩＥＥＥ７５４／８５４に準拠する浮動小数点命令）を実行するように構成されてもよい。各浮動小数点ユニットは、加算器ユニット、乗算器ユニット、除算／平方根ユニットなどを含んでもよい。各浮動小数点ユニットは、コプロセッサのように動作してもよく、ＦＤＳユニット１１４は、浮動小数点命令を浮動小数点ユニットに直接送り出す。浮動小数点ユニットは、浮動小数点レジスタのセット（図示せず）用のストレージを含んでもよい。
【００３５】
上述したように、プロセッサ１００は、プロセッサ命令セットＰおよび第２の命令セットＱを含む統合された命令セットＵをサポートする。統合された命令セットＵは、プロセッサ命令セットＰの命令（以下、「Ｐ命令」）および第２の命令セットＱの命令（以下、「Ｑ命令」）が同一のメモリ空間をアドレス指定するように規定される。このようにして、プログラムのＰ部分が、プログラムのＱ部分と高速通信する場合、プログラマはプログラムを組み立てることが容易である。例えば、Ｐ命令が、メモリ場所（またはレジスタファイル１６０のレジスタ）に書き込みしてもよく、後続のＱ命令が、このメモリ場所（またはレジスタ）から読み出されうる。プログラムが、単一のプロセッサ（すなわち、プロセッサ１００）で実行されるため、プログラムのＰ部分とＱ部分との間で通信を行うために、オペレーティングシステムの機能を呼び出す必要がない。
【００３６】
上述したように、プログラマは、プロセッサ１００にプログラムを組み立てるとき、Ｐ命令とＱ命令を自由に組み合わせてもよい。プログラマは、実行効率を上げるため、例えば、並列に機能する実行ユニットを可能な限り多く保つために、統合された命令セットＵからの命令を出してもよい。
【００３７】
１つの実施形態において、プロセッサ１００は、単一の集積回路上で構成されてもよい。別の実施形態において、プロセッサ１００は、複数の集積回路を含んでもよい。
【００３８】
＜図２＞
図２は、プロセッサ２００の１つの実施形態を示す。プロセッサ２００は、リクエストルータ２１０と、命令キャッシュ２１４と、フェッチ／デコード／スケジュール（ＦＤＳ）ユニット２１７と、実行ユニット２２０−１〜２２０−Ｎと、ロード／ストアユニット２２４と、インタフェース２２８と、レジスタファイル２３２と、データキャッシュ２３６とを含む。さらに、プロセッサ２００は、１つ以上の追加の実行ユニットを含み、例えば、グラフィックス演算を実行するためのグラフィックス実行ユニット（ＧＥＵ）２５０、Ｊａｖａバイトコードを実行するためのＪａｖａバイトコードユニット（ＪＢＵ）２５４、マネージドコードを実行するためのマネージドコードユニット（ＭＣＵ）２５８と、暗号化および復号化演算を実行するための暗号化／復号化ユニット（ＥＤＵ）２６２、ビデオ処理演算を実行するためのビデオ実行ユニット、および整数および／または浮動小数点マトリックスおよびベクトル演算を実行するためのマトリックス数値演算ユニットの１つ以上を含む。いくつかの実施形態において、ＪＢＵ２５４およびＭＣＵ２５８は含まれなくてもよい。その代わり、Ｊａｖａバイトコードおよび／またはマネージドコードは、ＦＤＳユニット２１７内で処理されてもよい。例えば、ＦＤＳユニット２１７は、Ｊａｖａバイトコードまたはマネージドコードを汎用プロセッサ命令セットの命令に復号化してもよく、またはマイクロコードルーチンのコールに復号化してもよい。
【００３９】
リクエストルータ２１０は、命令キャッシュ２１４と、インタフェース２２８と、データキャッシュ２３６と、１つ以上の追加の実行ユニット（ＧＥＵ２５０、ＪＢＵ２５４、ＭＣＵ２５８、およびＥＤＵ２６２など）に結合される。さらに、リクエストルータ２１０が、１つ以上の外部バスと結合されるように構成される。例えば、リクエストルータ２１０は、ノースブリッジとの通信を行いやすいようにフロントサイドバスに結合されるように構成されてもよい。いくつかの実施形態において、リクエストルータは、ハイパートランスポート（ＨＴ）バスに結合されるように構成されてもよい。
【００４０】
リクエストルータ２１０は、命令キャッシュ２１４およびデータキャッシュ２３６からシステムメモリへ（例えば、ノースブリッジを経由して）メモリアクセスリクエストをルーティングし、システムメモリから命令キャッシュ２１４へ命令をルーティングし、およびシステムメモリからデータキャッシュ２３６へデータをルーティングするように構成される。加えて、リクエストルータ２１０は、インタフェース２２８と、ＧＥＵ２５０、ＪＢＵ２５４、ＭＣＵ２５８、およびＥＤＵ２６２などの１つ以上の追加の実行ユニットとの間で命令およびデータをルーティングするように構成される。１つ以上の追加の実行ユニットは、「コプロセッサのように」動作してもよい。例えば、追加の実行ユニットの所与の１つに、命令が送信されてもよい。所与のユニットは、独立して命令を実行してもよく、インタフェースユニット２２８に完了の指示を戻してもよい。
【００４１】
命令キャッシュ２１４は、ＦＤＳユニット２１７から命令のリクエストを受信し、リクエストルータ２１０を経由して（システムメモリから最終的に命令の）メモリアクセスリクエストをアサートする。命令キャッシュ２１４は、システムメモリから新しくアクセスされた命令のコピーを格納する。
【００４２】
ＦＤＳユニット２１７は、命令キャッシュ２１４から命令ストリームをフェッチし、実行ユニット２２０−１〜２２０−Ｎ、ロード／ストアユニット２２４、および１つ以上の追加の実行ユニットを含む）フェッチされた命令の各々を１つ以上のｏｐに復号化し、（実行ユニットで実行するためのｏｐをスケジューリングする。実行ユニットが利用可能になるため、ＦＤＳユニット２１７は、送出バス２１８を経由して実行ユニットにｏｐを送る。
【００４３】
いくつかの実施形態において、プロセッサ２００は、上述したように、プロセッサ命令セットＰおよび第２の命令セットＱを含む統合された命令セットＵをサポートするように構成される。このように、フェッチされたストリームの命令は、統合された命令セットＵから引き出される。上述したように、プロセッサ命令セットＰは、汎用処理命令の少なくとも１つのセットを含む。プロセッサ命令セットＰはまた、整数および／または浮動小数点ＳＩＭＤ命令を含んでもよい。上述したように、第２の命令セットＱは、１つ以上の命令セット、例えば、グラフィックス演算を実行するための命令セット、Ｊａｖａバイトコード、マネージドコード、暗号化および復号化演算を実行するための命令セット、ビデオ処理演算を実行するための命令セット、およびマトリックスおよびベクトル演算を実行するための命令セットの１つ以上を含んでもよい。フェッチされた命令ストリームは、例えば、図３に示すように、プロセッサ命令セットＰおよび第２の命令セットＱからの命令の組み合わせであってもよい。
【００４４】
上述したように、ＦＤＳユニット２１７は、フェッチされた命令の各々を１つ以上のｏｐに復号化する。フェッチされた命令の一部（例えば、より複雑な命令の一部）が、マイクロコードＲＯＭにアクセスすることによって復号化されてもよい。さらに、フェッチされた命令の一部が、１対１の方式で復号化されてもよい。例えば、フェッチされた命令の一部は、結果的に得られたｏｐが、フェッチされた命令と同一である（または類似する）ように復号化されてもよい。いくつかの実施形態において、１つ以上の追加の実行ユニットに対応する任意の命令が、１対１の方式で復号化されてもよい。１つの実施形態において、グラフィックス命令、Ｊａｖａバイトコード、マネージドコード、暗号化／復号化コード、および浮動小数点命令は、１対１の方式で復号化されてもよい。
【００４５】
さらに、上述したように、ＦＤＳユニット２１７は、実行ユニットで実行するためのｏｐをスケジューリングする。ＧＥＵ２５０を含むこれらの実施形態において、ＦＤＳユニット２１７は、フェッチされた命令ストリームの任意のグラフィックス命令を特定し、ＧＥＵ２５０において実行するためのグラフィックス命令（すなわち、グウラフィックス命令を復号化することから得られたｏｐ）をスケジューリングする。ＦＤＳユニット２１７は、各グラフィックス命令をインタフェース２２８へ送ってもよく、各グラフィックス命令は、インタフェース２２８からリクエストルータ２１０を介してＧＥＵ２５０へ転送される。１つの実施形態において、ＧＥＵ２５０は、プライベート命令ソースから独立した同時実行のローカル命令ストリームを実行するように構成されてもよい。ＦＤＳユニット２１７から転送された演算は、ローカル命令ストリーム内の特定のルーチンを実行させてもよい。
【００４６】
ＪＢＵ２５４を含むこれらの実施形態において、ＦＤＳユニット２１７は、フェッチされた命令ストリームの任意のＪａｖａバイトコードを特定し、ＪＢＵ２５４において実行するためのＪａｖａバイトコードをスケジューリングする。ＦＤＳユニット２１７は、各Ｊａｖａバイトコードをインタフェースユニットに送ってもよく、各Ｊａｖａバイトコードは、インタフェースユニットからリクエストルータ２１０を介してＪＢＵ２５４に転送される。
【００４７】
ＭＣＵ２５８を含むこれらの実施形態において、ＦＤＳユニット２１７は、フェッチされた命令ストリームの任意のマネージドコードを特定し、ＭＣＵ２５８において実行するためのマネージドコードをスケジューリングする。ＦＤＳユニット２１７は、各マネージドコード命令をインタフェース２２８に送っても良く、各マネージドコード命令は、インタフェース２２８からリクエストルータ２１０を介してＭＣＵ２５８に転送される。
【００４８】
ＥＤＵ２６２を含むこれらの実施形態において、ＦＤＳユニット２１７は、フェッチされた命令ストリームの任意の暗号化または復号化命令を特定し、ＥＤＵ２６２おいて実行するためのこれらの命令をスケジューリングする。ＦＤＳユニット２１７は、各暗号化または復号化命令をインタフェース２２８に送ってもよく、各暗号化または復号化命令は、インタフェース２２８からリクエストルータ２１０を介してＥＤＵ２６２に転送される。
【００４９】
ＧＥＵ２５０、ＪＢＵ２５４、ＭＣＵ２５８、およびＥＤＵ２６２の各々は、ｏｐを受信し、ｏｐを実行し、インタフェースユニット２２８にｏｐの完了を指示する情報を送信する。ＧＥＵ２５０、ＪＢＵ２５４、ＭＣＵ２５８、およびＥＤＵ２６２の各々は、実行の結果を格納するための独自の内部レジスタを有する。
【００５０】
上述したように、ＦＤＳユニット２１７は、フェッチされた命令ストリームの各命令を１つ以上のｏｐを復号化し、さまざまな実行ユニットで実行するための１つ以上のｏｐをスケジューリングする。いくつかの実施形態において、ＦＤＳユニット２１７は、スーパースカラー演算、アウトオブオーダー（ＯＯＯ）実行、マルチスレッド実行、投機的実行、分岐予想、またはこれらの任意の組み合わせに対して構成される。このように、ＦＤＳユニット２１７は、実行ユニットの利用可能性をモニタリングするための論理、２つ以上のｏｐの処理が可能な２つ以上の実行ユニットが利用可能なときはいつでも、２つ以上のｏｐを（所与のクロックサイクルで）並列に送り出すための論理、ｏｐのアウトオブオーダー実行をスケジューリングし、ｏｐのインオーダーリタイアメントを保証するための論理、複数のスレッドおよび／または複数のプロセス間のコンテクストスイッチングを実行するための論理を含んでもよい。
【００５１】
ロード／ストアユニット２２４は、ロード／ストアバス２２６を経由してデータキャッシュ２３６に結合され、メモリ書き込みおよびメモリ読み取り演算を実行するように構成される。メモリ書き込み演算のために、ロード／ストアユニット２２４は、物理アドレスおよび書き込みデータを発生してもよい。物理アドレスおよび書き込みデータは、データキャッシュ２３６へ後で送信するためのストアキュー（図示せず）に入力されてもよい。メモリ読み取りデータは、データキャッシュ２３６から（または最新のストアの場合にストアキューにあるエントリから）ロード／ストアユニット２２４に供給されてもよい。
【００５２】
実行ユニット２２０−１〜２２０−Ｎは、例えば、上述したように、プロセッサ１００と接続するさいに、１つ以上の整数パイプラインと、１つ以上の浮動小数点ユニットとを含んでもよい。いくつかの実施形態において、実行ユニット２２０−１〜２２０−Ｎは、整数および／または浮動小数点ＳＩＭＤ演算を実行するように構成された１つ以上のＳＩＭＤユニットを含んでもよい。
【００５３】
図２に示すように、実行ユニット２２０−１〜２２０−Ｎ、ロード／ストアユニット２２４、およびインタフェース２２８は、送出バス２１８および結果バス２３０に結合されてもよい。実行ユニット２２０−１〜２２０−Ｎ、ロード／ストアユニット２２４、およびインタフェース２２８は、送出バス２１８を経由してＦＤＳユニット２１７からｏｐを受信し、結果バス２３０を経由してレジスタファイル２３２に実行の結果を送る。レジスタファイル２３２は、フィードバック経路２３４に結合されることで、レジスタファイル２３２からのデータを、ソースオペランドとして実行ユニット２２０−１〜２２０−Ｎ、ロード／ストアユニット２２４、およびインタフェース２２８に供給可能になる。バイパス経路２３１は、結果バス２３０と、フィードバック２３４との間に結合されて、実行の結果が、レジスタファイル２３２を迂回し、ソースオペランドとしてより直接供給されうる。レジスタファイル２３２は、アーキテクチャ化レジスタのセット用の物理ストレージを含んでもよい。
【００５４】
上述したように、プロセッサ２００は、プロセッサ命令セットＰおよび第２の命令セットＱを含む統合された命令セットＵをサポートするように構成される。統合された命令セットＵは、プロセッサ命令セットＰの命令（以下、「Ｐ命令」）および第２の命令セットＱの命令（以下、「Ｑ命令」）が同一のメモリ空間をアドレス指定するように規定される。このようにして、プログラムのＰ部分が、プログラムのＱ部分と高速通信する場合、プログラマはプログラムを組み立てることが容易である。例えば、Ｐ命令が、メモリ場所（またはレジスタファイル１６０のレジスタ）に書き込みしてもよく、後続のＱ命令が、このメモリ場所（またはレジスタ）から読み出されうる。プログラムが、単一のプロセッサ（すなわち、プロセッサ２００）で実行されるため、プログラムのＰ部分とＱ部分との間で通信を行うために、オペレーティングシステムの機能を呼び出す必要がない。
【００５５】
上述したように、プログラマは、プロセッサ２００にプログラムを組み立てるとき、Ｐ命令とＱ命令を自由に組み合わせてもよい。プログラマは、実行効率を上げるため、例えば、並列に機能する実行ユニットを可能な限り多く保つために、統合された命令セットＵからの命令を出してもよい。
【００５６】
１つの実施形態において、プロセッサ２００は、単一の集積回路上に構成されてもよい。別の実施形態において、プロセッサ１００は、複数の集積回路を含んでもよい。例えば、１つの実施形態において、図２のリクエストルータ２１０およびリクエストルータ２１０の左側にある要素は、単一の集積回路上に構成されてもよく、１つ以上の追加の実行ユニット（リクエストルータ２１０の右側に示す）は、１つ以上の追加の集積回路上に構成されてもよい。
【００５７】
＜図４＞
図４は、プロセッサ４００の１つの実施形態を示す。プロセッサ４００は、命令キャッシュ４１０と、フェッチ／デコード／スケジュール（ＦＤＳ）ユニット４１４および４１８と、実行ユニット４２６−１〜４２６−Ｎ、ロード／ストアユニット４３０と、レジスタファイル４６４と、データキャッシュ４６８とを含む。さらに、プロセッサ４００は、１つ以上の以下のような１つ以上の追加の実行ユニット、例えば、グラフィックス演算を実行するためのグラフィックス実行ユニット（ＧＥＵ）４５０、Ｊａｖａバイトコードを実行するためのＪａｖａバイトコードユニット（ＪＢＵ）４５４、マネージドコードを実行するためのマネージドコードユニット（ＭＣＵ）４５８、および暗号化および復号化演算を実行するための暗号化／復号化ユニット（ＥＤＵ）４６０を含む。いくつかの実施形態において、ＪＢＵ４５４およびＭＣＵ４５８は含まれなくてもよい。その代わり、Ｊａｖａバイトコードおよび／またはマネージドコードは、ＦＤＳユニット４１４内で処理されてもよい。例えば、ＦＤＳユニット４１４は、汎用プロセッサ命令セットの命令にＪａｖａバイトコードまたはマネージドコードを復号化してもよく、またはマイクロコードルーチンのコールに復号化してもよい。
【００５８】
命令キャッシュ４１０は、システムメモリから新しくアクセスされた命令のコピーを格納する。（システムメモリはプロセッサ４００の外部にある。）ＦＤＳユニット４１４は、命令キャッシュ１１０から命令のストリームＳ１をフェッチし、ＦＤＳユニット４１８は、命令キャッシュ１１０から命令のストリームＳ２をフェッチする。いくつかの実施形態において、ストリームＳ１の命令は、上述したように、プロセッサ命令セットＰから引き出され、ストリームＳ２の命令は、上述したように、第２の命令セットＱから引き出される。図６は、ストリームＳ１の一例６１０と、ストリームＳ２の一例６２０とを示す。命令Ｉ０、Ｉ１、Ｉ２、Ｉ３、．．．は、プロセッサ命令セットＰの命令である。命令Ｖ０、Ｖ１、Ｖ２、Ｖ３、．．．は、第２の命令セットＱの命令である。
【００５９】
上述したように、プロセッサ命令セットＰは、汎用処理命令の少なくとも１つのセットを含む。プロセッサ命令セットＰはまた、整数および／または浮動小数点ＳＩＭＤ命令を含んでもよい。
【００６０】
上述したように、第２の命令セットＱは、１つ以上の命令セット、例えば、グラフィックス演算を実行するための命令セット、Ｊａｖａバイトコード、マネージドコード、暗号化および復号化演算を実行するための命令セット、ビデオ処理演算を実行するための命令セット、およびマトリックスおよびベクトル演算を実行するための命令セットの１つ以上を含んでもよい。
【００６１】
ＦＤＳユニット４１４は、フェッチされた命令ストリームＳ１を実行可能な演算（ｏｐ）に復号化する。ストリームＳ１の各命令は、１つ以上のｏｐに復号化される。命令の一部（例えば、より複雑な命令の一部）は、マイクロコードＲＯＭにアクセスすることによって復号化されてもよい。さらに、命令の一部は、１対１の方式で復号化されてもよい。例えば、フェッチされた命令の一部が、結果的に得られたｏｐが、フェッチされた命令と同一である（または類似する）ように復号化されてもよい。１つの実施形態において、ストリームＳ１の任意の浮動小数点命令が、１対１の方式で復号化されてもよい。ＦＤＳユニット４１４は、実行ユニット４２６−１〜４２６−Ｎおよびロード／ストアユニット４３０で実行するためのｏｐ（ストリームＳ１の復号化から得られる）をスケジューリングする。
【００６２】
ＦＤＳユニット４１８は、フェッチされた命令のストリームＳ２を実行可能な演算（ｏｐ）に復号化する。ストリームＳ２の各命令は、１つ以上のｏｐに復号化される。ストリームＳ２の命令の一部（またはすべて）が、１対１の方式で復号化されてもよい。例えば、フェッチされた命令の一部が、結果的に得られたｏｐが、フェッチされた命令と同一である（または類似する）ように復号化されてもよい。１つの実施形態において、ストリームＳ２の任意のグラフィックス命令、Ｊａｖａバイトコード、マネージドコード、または暗号化／復号化コードが、１対１の方式で復号化されてもよい。ＦＤＳユニット４１８は、１つ以上の追加の実行ユニット（ＧＥＵ４５０、ＪＢＵ４５４、ＭＣＵ４５８、およびＥＤＵ４６０など）で実行するためのｏｐ（ストリームＳ２の復号化から得られる）をスケジューリングする。
【００６３】
ＧＥＵ４５０を含むこれらの実施形態において、ＦＤＳユニット４１８は、ストリームＳ２の任意のグラフィックス命令を特定し、ＧＥＵ４５０において実行するためのグラフィックス命令（すなわち、グラフィックス命令を復号化することから得られたｏｐ）をスケジューリングする。
【００６４】
ＪＢＵ４５４を含むこれらの実施形態において、ＦＤＳユニット４１８は、フェッチされた命令ストリームの任意のＪａｖａバイトコードを特定し、ＪＢＵ４５４において実行するためのＪａｖａバイトコードをスケジューリングする。
【００６５】
ＭＣＵ４５８を含むいくつかの実施形態において、ＦＤＳユニット４１８は、ストリームＳ２の任意のマネージドコードを特定し、ＭＣＵ４５８において実行するためのマネージドコードをスケジューリングする。
【００６６】
ＥＤＵユニット４６０を含むこれらの実施形態において、ＦＤＳユニット４１８は、ストリームＳ２の任意の暗号化または復号化命令を特定し、ＥＤＵユニット４６０において実行するための命令をスケジューリングする。
【００６７】
上述したように、ＦＤＳユニット４１４および４１８は、ストリームＳ１およびＳ２の命令をｏｐにそれぞれ復号化し、実行ユニットの適切なユニットで実行するためのｏｐをスケジューリングする。いくつかの実施形態において、ＦＤＳユニット４１４は、スーパースカラー演算、アウトオブオーダー（ＯＯＯ）実行、マルチスレッド実行、投機的実行、分岐予想、またはこれらの任意の組み合わせに対して構成される。ＦＤＳユニット４１８は、同様に構成されてもよい。このように、さまざまな実施形態において、ＦＤＳユニット４１４および／またはＦＤＳユニット４１８は、実行ユニットの利用可能性を決定するための論理、２つ以上のｏｐの処理が可能な２つ以上の実行ユニットが利用可能であれば、２つ以上のｏｐを（所与のクロックサイクルで）並列に送り出すための論理、ｏｐのアウトオブオーダー実行をスケジューリングし、ｏｐのインオーダーリタイアメントを保証するための論理、複数のスレッドおよび／または複数のプロセス間のコンテクストスイッチングを実行するための論理などのさまざまな組み合わせを含んでもよい。
【００６８】
ロード／ストアユニット４３０は、データキャッシュ４６８に結合され、メモリ書き込みおよびメモリ読み取り演算を実行するように構成される。メモリ書き込み演算のために、ロード／ストアユニット４３０は、物理アドレスおよび関連する書き込みデータを発生してもよい。物理アドレスおよび書き込みデータは、データキャッシュ４６８へ後で送信するためのストアキュー（図示せず）に入力されてもよい。メモリ読み取りデータは、データキャッシュ４６８から（または最新のストアの場合にストアキューにあるエントリから）ロード／ストアユニット４３０に供給されてもよい。
【００６９】
実行ユニット４２６−１〜４２６−Ｎは、１つ以上の整数パイプラインと、１つ以上の浮動小数点ユニットとを含んでもよい。１つ以上の整数パイプラインは、整数演算（加算、減算、乗算、および除算など）を実行するためのリソースと、論理演算（ＡＮＤ、ＯＲ、および否定など）、ビット操作（シフトおよび循環シフトなど）とを含んでもよい。いくつかの実施形態において、１つ以上の整数パイプラインのリソースが、ＳＩＭＤ整数演算を実行するように動作可能である。１つ以上の浮動小数点ユニットは、浮動小数点演算を実行するためのリソースを含んでもよい。いくつかの実施形態において、１つ以上の浮動小数点ユニットのリソースは、ＳＩＭＤ浮動小数点演算を実行するように動作可能である。
【００７０】
１つの実施形態のセットにおいて、実行ユニット４２６−１〜４２６−Ｎは、整数および／または浮動小数点ＳＩＭＤ演算を実行するように構成された１つ以上のＳＩＭＤユニットを含む。
【００７１】
図４に示すように、実行ユニット４２６−１〜４２６−Ｎおよびロード／ストアユニット４３０は、送出バス４２０および結果バス４６２に結合されてもよい。実行ユニット４２６−１〜４２６−Ｎおよびロード／ストアユニット４３０は、送出バス４２０を経由してＦＤＳユニット４１４からｏｐを受信し、結果バス４６２を経由してレジスタファイル４６４に実行の結果を送る。１つ以上の追加のユニット（ＧＥＵ４５０、ＪＢＵ４５４、ＭＣＵ４５８、およびＥＤＵ４６０など）は、送出バス４２２を経由してＦＤＳユニット４１８からｏｐを受信し、結果バス４６２を経由してレジスタファイルに実行の結果を送る。レジスタファイル４６４は、フィードバック経路４７２に結合されることで、レジスタファイル４６４からのデータを、ソースオペランドとして実行ユニット（実行ユニット４２６−１〜４２６−Ｎ、ロード／ストアユニット４３０、および１つ以上の追加の実行ユニットを含む）に供給可能になる。
【００７２】
バイパス経路４７０は、結果バス４６２とフィードバック経路４７２との間を結合することで、実行の結果が、レジスタファイル４６４を迂回し、実行ユニットへソースオペランドとしてより直接供給できる。レジスタファイル４６４は、アーキテクチャ化レジスタのセット用の物理ストレージを含んでもよい。
【００７３】
いくつかの実施形態において、ＦＤＳユニット４１８は、１つ以上の追加の実行ユニットおよびロード／ストアユニット４３０に加えて、実行ユニット４２６−１〜４２６−Ｎ（またはこれらのユニットのいくつかのサブセット）にｏｐを送り出すように構成される。このように、送出バス４２２は、１つ以上の追加の実行ユニットおよびロード／ストアユニット４３０への結合に加えて、１つ以上の実行ユニット４２６−１〜４２６−Ｎに結合されてもよい。
【００７４】
上述したように、実行ユニット４２６−１〜４２６−Ｎは、１つ以上の浮動小数点ユニットを含んでもよい。各浮動小数点ユニットは、浮動小数点命令（例えば、ｘ８７浮動小数点命令、またはＩＥＥＥ７５４／８５４に準拠する浮動小数点命令）を実行するように構成されてもよい。各浮動小数点ユニットは、加算器ユニット、乗算器ユニット、除算／平方根ユニットなどを含んでもよい。各浮動小数点ユニットは、コプロセッサのように動作してもよく、ＦＤＳユニット１１４は、浮動小数点命令を浮動小数点ユニットに直接送り出す。浮動小数点ユニットは、浮動小数点レジスタのセット（図示せず）用のストレージを含んでもよい。
【００７５】
上述したように、いくつかの実施形態において、プロセッサ４００は、プロセッサ命令セットＰおよび第２の命令セットＱをサポートする。プロセッサ命令セットＰの命令（以下、「Ｐ命令」）および第２の命令セットＱの命令（以下、「Ｑ命令」）が、同一のメモリ空間をアドレス指定することに留意されたい。このように、２つのスレッドが、システムメモリまたは内部レジスタ（すなわち、レジスタファイル４６４のレジスタ）を介して高速通信する場合、プログラマが、Ｐ命令を用いて第１のプログラムスレッドを組み立て、Ｑ命令を用いて第２のプログラムを組み立てることが容易になる。スレッドが単一のプロセッサ（すなわち、プロセッサ４００）で実行されるため、２つのスレッド間で通信を行うために、オペレーティングシステムの機能を呼び出す必要がない。
【００７６】
１つの実施形態において、プロセッサ４００は、単一の集積回路上で構成されてもよい。別の実施形態において、プロセッサ４００は、複数の集積回路を含んでもよい。例えば、１つ以上の追加の実行ユニットは、１つ以上の集積回路において実現されてもよい。
【００７７】
＜図５＞
図５は、プロセッサ５００の１つの実施形態を示す。プロセッサ５００は、リクエストルータ５１０と、命令キャッシュ５１４と、フェッチ／デコード／スケジュール（ＦＤＳ）ユニット５１８および５２２と、実行ユニット５２６−１〜５２６−Ｎ、ロード／ストアユニット５３０と、インタフェース５３４と、レジスタファイル５３８と、データキャッシュ５４２とを含む。さらに、プロセッサ５００は、１つ以上の以下のような１つ以上の追加の実行ユニット、例えば、グラフィックス演算を実行するためのグラフィックス実行ユニット（ＧＥＵ）５５０、Ｊａｖａバイトコードを実行するためのＪａｖａバイトコードユニット（ＪＢＵ）５５４、マネージドコードを実行するためのマネージドコードユニット（ＭＣＵ）５５８、および暗号化および復号化演算を実行するための暗号化／復号化ユニット（ＥＤＵ）５６２を含む いくつかの実施形態において、ＪＢＵ５５４およびＭＣＵ５５８は含まれなくてもよい。その代わり、Ｊａｖａバイトコードおよび／またはマネージドコードは、ＦＤＳユニット５１８内で処理されてもよい。例えば、ＦＤＳユニット５１８は、汎用プロセッサ命令セットの命令にＪａｖａバイトコードまたはマネージドコードを復号化してもよく、またはマイクロコードルーチンのコールに復号化してもよい。
【００７８】
リクエストルータ５１０は、命令キャッシュ５１４と、インタフェース５３４と、データキャッシュ５４２と、１つ以上の追加の実行ユニット（ＧＥＵ５５０、ＪＢＵ５５４、ＭＣＵ５５８、およびＥＤＵ５６２など）に結合される。さらに、リクエストルータ５１０が、１つ以上の外部バスと結合されるように構成される。例えば、リクエストルータ５１０は、ノースブリッジとの通信を行いやすいようにフロントサイドバスに結合されるように構成されてもよい。いくつかの実施形態において、リクエストルータは、ハイパートランスポート（ＨＴ）バスに結合されるように構成されてもよい。
【００７９】
リクエストルータ５１０は、命令キャッシュ５１４およびデータキャッシュ５４２からシステムメモリへ（例えば、ノースブリッジを経由して）メモリアクセスリクエストをルーティングし、システムメモリから命令キャッシュ５１４へ命令をルーティングし、およびシステムメモリからデータキャッシュ５４２へデータをルーティングするように構成される。加えて、リクエストルータ５１０は、インタフェース５３４と、１つ以上の追加の実行ユニット（ＧＥＵ５５０、ＪＢＵ５５４、ＭＣＵ５５８、およびＥＤＵ５６２などの）との間で命令およびデータをルーティングするように構成される。１つ以上の追加の実行ユニットは、「コプロセッサのような」方式で動作してもよい。
【００８０】
命令キャッシュ５１４は、システムメモリから新しくアクセスされた命令のコピーを格納する。（システムメモリはプロセッサ５００の外部にある。）ＦＤＳユニット５１８は、命令キャッシュ５１４から第１の命令ストリームをフェッチし、ＦＤＳユニット５２２は、命令キャッシュ５１４から第２の命令ストリームをフェッチする。いくつかの実施形態において、第１のストリームの命令は、上述したように、プロセッサ命令セットＰから引き出され、第２のストリームの命令は、上述したように、第２の命令セットＱから引き出される。図６は、第１のストリームの一例６１０および第２のストリームの一例６２０を示す。命令Ｉ０、Ｉ１、Ｉ２、Ｉ３、．．．は、プロセッサ命令セットＰの命令である。命令Ｖ０、Ｖ１、Ｖ２、Ｖ３、．．．は、第２の命令セットＱの命令である。
【００８１】
上述したように、プロセッサ命令セットＰは、汎用処理命令の少なくとも１つのセットを含む。プロセッサ命令セットＰはまた、整数および／または浮動小数点ＳＩＭＤ命令を含んでもよい。
【００８２】
上述したように、第２の命令セットＱは、１つ以上の命令セット、例えば、グラフィックス演算を実行するための命令セット、Ｊａｖａバイトコード、マネージドコード、暗号化および復号化演算を実行するための命令セット、ビデオ処理演算を実行するための命令セット、およびマトリックスおよびベクトル演算を実行するための命令セットの１つ以上を含んでもよい。
【００８３】
ＦＤＳユニット５１８は、フェッチされた第１の命令ストリームを実行可能な演算（ｏｐ）に復号化する。第１のストリームの各命令は、１つ以上のｏｐに復号化される。命令の一部（例えば、より複雑な命令の一部）は、マイクロコードＲＯＭにアクセスすることによって復号化されてもよい。さらに、命令の一部は、１対１の方式で復号化されてもよい。例えば、フェッチされた命令の一部が、結果的に得られたｏｐが、フェッチされた命令と同一である（または類似する）ように復号化されてもよい。１つの実施形態において、第１のストリームの任意の浮動小数点命令が、１対１の方式で復号化されてもよい。ＦＤＳユニット５１８は、実行ユニット５２６−１〜５２６−Ｎおよびロード／ストアユニット４３０で実行するためのｏｐ（第１のストリームの復号化から得られる）をスケジューリングする。
【００８４】
ＦＤＳユニット５２２は、フェッチされた命令の第２のストリームを実行可能な演算（ｏｐ）に復号化する。第２のストリームの各命令は、１つ以上のｏｐに復号化される。第２のストリームの命令の一部（またはすべて）が、１対１の方式で復号化されてもよい。例えば、１つの実施形態において、第２のストリームの任意のグラフィックス命令、Ｊａｖａバイトコード、マネージドコード、または暗号化／復号化コードが、１対１の方式で復号化されてもよい。ＦＤＳユニット５２２は、１つ以上の追加の実行ユニット（ＧＥＵ５５０、ＪＢＵ５５４、ＭＣＵ５５８、およびＥＤＵ５６２など）で実行するためのｏｐ（第２のストリームの復号化から得られる）をスケジューリングする。ＦＤＳ５２２は、送出バス５２３、インタフェースユニット５３４、およびリクエストルータ５１０を経由して１つ以上の追加の実行ユニットにｏｐを送り出す。
【００８５】
ＧＥＵ５５０を含むこれらの実施形態において、ＦＤＳユニット５２２は、第２のストリームの任意のグラフィックス命令を特定し、ＧＥＵで実行するためのグラフィックス命令（すなわち、グラフィックス命令の復号化から得られたｏｐ）をスケジューリングする。ＦＤＳユニット５２２は、各グラフィックス命令をインタフェース５３４へ送ってもよく、各グラフィックス命令は、インタフェース５３４からリクエストルータ５１０を介してＧＥＵ５５０へ転送される。
【００８６】
ＪＢＵ５５４を含むこれらの実施形態において、ＦＤＳユニット５２２は、第２のストリームの任意のＪａｖａバイトコードを特定し、ＪＢＵ５５４において実行するためのＪａｖａバイトコードをスケジューリングする。ＦＤＳユニット５２２は、各Ｊａｖａバイトコード命令をインタフェース５３４に送っても良く、各Ｊａｖａバイトコード命令は、インタフェース５３４からリクエストルータ５１０を介してＪＢＵ５５４に転送される。
【００８７】
ＭＣＵ５５８を含むこれらの実施形態において、ＦＤＳユニット５２２は、第２のストリームの任意のマネージドコードを特定し、ＭＣＵ５５８において実行するためのマネージドコードをスケジューリングする。ＦＤＳユニット５２２は、各マネージドコード命令をインタフェース５３４に送ってもよく、各マネージドコード命令は、インタフェース５３４からリクエストルータ５１０を介してＭＣＵ５５８に転送される。
【００８８】
ＥＤＵユニット５６２を含むこれらの実施形態において、ＦＤＳユニット５２２は、第２のストリームの任意の暗号化または復号化命令を特定し、ＥＤＵユニット５６２において実行するための命令をスケジューリングする。ＦＤＳユニット５２２は、各暗号化または復号化命令をインタフェース５３４に送ってもよく、各暗号化または復号化命令は、インタフェース５３４からリクエストルータ５１０を介してＥＤＵ５６２に転送される。
【００８９】
１つ以上の追加の実行ユニット（ＧＥＵ５５０、ＪＢＵ５５４、ＭＣＵ５５８、およびＥＤＵ５６２）の各々は、ｏｐを受信し、ｏｐを実行し、リクエストルータ５１０を経由してインタフェース５３４にｏｐの完了を指示する情報を戻す。
【００９０】
上述したように、ＦＤＳユニット５１８および５２２は、第１および第２のストリームの命令をｏｐに復号化し、実行ユニットの適切なユニットで実行するためのｏｐをスケジューリングする。いくつかの実施形態において、ＦＤＳユニット５１８は、スーパースカラー演算、アウトオブオーダー（ＯＯＯ）実行、マルチスレッド実行、投機的実行、分岐予想、またはこれらの任意の組み合わせに対して構成される。ＦＤＳユニット５２２は、同様に構成されてもよい。このように、さまざまな実施形態において、ＦＤＳユニット５１８および／またはＦユニット５２２は、実行ユニットの利用可能性を決定するための論理、２つ以上のｏｐの処理が可能な２つ以上の実行ユニットが利用可能であれば、２つ以上のｏｐを（所与のクロックサイクルで）並列に送り出すための論理、ｏｐのアウトオブオーダー実行をスケジューリングし、ｏｐのインオーダーリタイアメントを保証するための論理、複数のスレッドおよび／または複数のプロセス間のコンテクストスイッチングを実行するための論理などのさまざまな組み合わせを含んでもよい。
【００９１】
ロード／ストアユニット５３０は、データキャッシュ５４２に結合され、メモリ書き込みおよびメモリ読み取り演算を実行するように構成される。メモリ書き込み演算のために、ロード／ストアユニット５３０は、物理アドレスおよび関連する書き込みデータを発生してもよい。物理アドレスおよび書き込みデータは、データキャッシュ５４２へ後で送信するためのストアキュー（図示せず）に入力されてもよい。メモリ読み取りデータは、データキャッシュ５４２から（または最新のストアの場合にストアキューにあるエントリから）ロード／ストアユニット５３０に供給されてもよい。
【００９２】
実行ユニット５２６−１〜５２６−Ｎは、１つ以上の整数パイプラインと、１つ以上の浮動小数点ユニットとを含んでもよい。１つ以上の整数パイプラインは、整数演算（加算、減算、乗算、および除算など）を実行するためのリソースと、論理演算（ＡＮＤ、ＯＲ、および否定など）、ビット操作（シフトおよび循環シフトなど）とを含んでもよい。いくつかの実施形態において、１つ以上の整数パイプラインのリソースが、ＳＩＭＤ整数演算を実行するように動作可能である。１つ以上の浮動小数点ユニットは、浮動小数点演算を実行するためのリソースを含んでもよい。いくつかの実施形態において、１つ以上の浮動小数点ユニットのリソースは、ＳＩＭＤ浮動小数点演算を実行するように動作可能である。
【００９３】
１つの実施形態のセットにおいて、実行ユニット５２６−１〜５２６−Ｎは、整数および／または浮動小数点ＳＩＭＤ演算を実行するように構成された１つ以上のＳＩＭＤを含む。
【００９４】
図５に示すように、実行ユニット５２６−１〜５２６−Ｎおよびロード／ストアユニット４３０は、送出バス５１９および結果バス５３６に結合されてもよい。実行ユニット５２６−１〜５２６−Ｎおよびロード／ストアユニット５３０は、送出バス５１９を経由してＦＤＳユニット５１８からｏｐを受信し、結果バス５３６を経由してレジスタファイル５３８に実行の結果を送る。１つ以上の追加のユニット（ＧＥＵ５５０、ＪＢＵ５５４、ＭＣＵ５５８、およびＥＤＵ５６２など）は、送出バス５２３、インタフェース５３４、およびリクエストルータ５１０を経由してＦＤＳユニット５２２からｏｐを受信し、リクエストルータ５１０を経由してインタフェース５３４に各ｏｐ実行の完了を指示する情報を送る。
【００９５】
レジスタファイル５３８は、フィードバック経路５４６に結合されることで、レジスタファイル５３８からのデータを、ソースオペランドとして実行ユニット（実行ユニット５２６−１〜５２６−Ｎ、ロード／ストアユニット５３０、および１つ以上の追加の実行ユニットを含む）に供給可能になる。
【００９６】
バイパス経路５４４は、結果バス５３６とフィードバック経路５４４との間を結合し、実行の結果が、レジスタファイル５３８を迂回し、実行ユニットへソースオペランドとしてより直接供給されうる。レジスタファイル５３８は、アーキテクチャ化レジスタのセット用の物理ストレージを含んでもよい。
【００９７】
いくつかの実施形態において、ＦＤＳユニット５２２は、１つ以上の追加の実行ユニットおよびロード／ストアユニット５３０に加えて、実行ユニット４５６−１〜５２６−Ｎ（またはこれらのユニットのいくつかのサブセット）にｏｐを送るように構成される。このように、送出バス５２３は、ロード／ストアユニット５３０およびインタフェース５３４に加えて、実行ユニット５２６−１〜５２６−Ｎの１つ以上に結合されてもよい。
【００９８】
上述したように、実行ユニット５２６−１〜５２６−Ｎは、１つ以上の浮動小数点ユニットを含んでもよい。各浮動小数点ユニットは、浮動小数点命令（例えば、ｘ８７浮動小数点命令、またはＩＥＥＥ７５４／８５４に準拠する浮動小数点命令）を実行するように構成されてもよい。各浮動小数点ユニットは、加算器ユニット、乗算器ユニット、除算／平方根ユニットなどを含んでもよい。各浮動小数点ユニットは、コプロセッサのように動作してもよく、ＦＤＳユニット５１８は、浮動小数点命令を浮動小数点ユニットに直接送り出す。
【００９９】
上述したように、いくつかの実施形態において、プロセッサ５００は、プロセッサ命令セットＰおよび第２の命令セットＱをサポートする。プロセッサ命令セットＰの命令および第２の命令セットＱの命令が、同一のメモリ空間をアドレス指定することに留意されたい。このように、２つのスレッドが、システムメモリまたは内部レジスタ（すなわち、レジスタファイル５３８のレジスタ）を介して高速通信する場合、プログラマが、Ｐ命令を用いて第１のプログラムスレッドを組み立て、Ｑ命令を用いて第２のプログラムを組み立てることが容易になる。スレッドが単一のプロセッサ（すなわち、プロセッサ５００）で実行されるため、２つのスレッド間で通信を行うために、オペレーティングシステムの機能を呼び出す必要がない。
【０１００】
１つの実施形態において、プロセッサ５００は、単一の集積回路上に構成されてもよい。別の実施形態において、プロセッサ５００は、複数の集積回路を含んでもよい。例えば、１つ以上の追加の実行ユニットは、１つ以上の集積回路において実現されてもよい。
【０１０１】
上述したように、いくつかの実施形態において、プロセッサ１００、２００、３００、および４００の任意（またはすべて）が、ＤｉｒｅｃｔＸなどの業界標準グラフィックスＡＰＩの所与のバージョンに適合する命令を実行可能なグラフィックス実行ユニット（ＧＥＵ）を含んでもよい。ＡＰＩ規格の後続する更新が、ソフトウェアに実装されてもよい。（これは、グラフィックスＡＰＩの新しいバージョンをサポートするために、グラフィックスアクセラレータおよびそれらのオンボードＧＰＵのデザインを変更するという従来の高コストのやり方とは対比的である。）
【０１０２】
プロセッサ１００、２００、３００、および４００のいくつかの実施形態において、命令およびデータが同一のメモリに格納される。他の実施形態において、命令およびデータは、異なるメモリに格納される。
【０１０３】
＜グラフィックス実行ユニット＞
グラフィックス実行ユニット（例えば、ＧＥＵ１３０、ＧＥＵ２５０、ＧＥＵ４５０、およびＧＥＵ５５０）のさまざまな上述した実施形態は、図７のＧＥＵ７００によって実現されてもよい。ＧＥＵ７００は、グラフィックス命令セットの命令を受信し、グラフィックス命令の受信に応答してグラフィックス演算を実行するように構成される。１つの実施形態において、ＧＥＵ７００は、入力ユニット７１５と、頂点シェーダ７２０と、ジオメトリシェーダ７２０と、ラスタ化ユニット７３５と、ピクセルシェーダ７４０と、出力／マージユニット７４５とを含むパイプラインとしてまとめられる。ＧＥＵ７００は、ストリーム出力ユニット７３０を含んでもよい。
【０１０４】
入力ユニット７１５は、入力データストリームを受信し、受信したグラフィックス命令によって決定されるようなグラフィックプリミティブ（三角形、線、および点など）にデータをアセンブルするように構成される。入力ユニット７１５は、グラフィックスパイプラインの残りにグラフィックスプリミティブを供給する。
【０１０５】
頂点シェーダ７２０は、受信したグラフィックス命令によって決定される頂点で動作するように構成される。例えば、頂点シェーダ７２０は、頂点で変形、スキニング、およびライティングを実行するようにプログラミングされてもよい。いくつかの実施形態において、頂点シェーダ７２０は、頂点シェーダに供給される各入力頂点に対して単一の出力頂点を生成する。いくつかの実施形態において、頂点シェーダ７２０は、受信したグラフィックス命令の一部として供給された１つ以上の頂点シェーダを受信し、頂点で１つ以上の頂点シェーダプログラムを実行するように構成される。
【０１０６】
ジオメトリシェーダ７２５は、受信したグラフィックス命令によって決定されるような全プリミティブ（例えば、三角形、線、または点）を処理する。各入力プリミティブに対して、ジオメトリシェーダは、入力プリミティブを破棄し、または１つ以上の新しいプリミティブを出力として発生する。１つの実施形態において、ジオメトリシェーダはまた、ジオメトリ増幅および非増幅を実行するように構成される。いくつかの実施形態において、ジオメトリシェーダ７２５は、受信したグラフィックス命令の一部として１つ以上のジオメトリシェーダプログラムを受信し、プリミティブに１つ以上のジオメトリシェーダプログラムを実行するように構成される。
【０１０７】
ストリーム出力ユニット７３０は、グラフィックスパイプラインからシステムメモリにストリームとしてプリミティブデータを出力するために構成される。この出力機能は、受信したグラフィックス命令によって制御される。メモリに送信されたデータストリームは、入力データとしてグラフィックスパイプラインに戻されうる（戻されることが望ましい場合）。
【０１０８】
ラスタ化ユニット７３５は、ジオメトリシェーダ７２５からプリミティブを受信し、グラフィックス命令によって決定されるようなピクセルにプリミティブをラスタ化するように構成される。ラスタ化は、所与のプリミティブにわたったピクセル位置で選択された頂点成分を補間することを伴う。ラスタ化はまた、視錐台にプリミティブをクリッピングし、透視除算演算を実行し、およびビューポートに頂点をマッピングすることを含んでもよい。
【０１０９】
ピクセルシェーダユニット７４０は、所与のプリミティブにおいて各ピクセルに対してパーピクセルデータ（色など）を発生する。例えば、ピクセルシェーダ７４０は、パーピクセルライティングを適用してもよい。いくつかの実施形態において、ピクセルシェーダユニット７４０は、受信したグラフィックス命令の一部として１つ以上のピクセルシェーダプログラムを受信し、１つ以上のピクセルシェーダプログラムをピクセルごとに実行するように構成される。ラスタ化ユニットは、ラスタ化プロセスの一部として１つ以上のピクセルシェーダプログラムの実行を呼び出してもよい。
【０１１０】
出力ユニット７４５は、１つ以上の出力データタイプ（例えば、ピクセルシェーダ値、深度情報、およびステンシル情報）と、ターゲットバッファおよび深度／ステンシルバッファのコンテントとを結合して、最終パイプライン出力を生成するように構成される。
【０１１１】
いくつかの実施形態において、ＧＥＵ７００はまた、テクスチャサンプラ７３７と、テクスチャキャッシュ７３８とを含む。テクスチャサンプラ７３７は、システムメモリからテクスチャキャッシュ７３８を経由してテクセルデータにアクセスし、テクセルデータ（例えば、ＭＩＰ  ＭＡＰデータ）にテクスチャ補間を実行して、テクスチャマッピングをサポートするように構成される。テクスチャサンプラによって得られた補間データは、ピクセルシェーダ７４０に与えられてもよい。
【０１１２】
いくつかの実施形態において、ＧＥＵ７００は、並列処理用に構成されてもよい。例えば、ＧＥＵ７００は、頂点ストリーム、プリミティブストリーム、ピクセルストリームでより効率的に動作するためにパイプライン処理されてもよい。さらに、ＧＥＵ７００内のさまざまなユニットが、ベクトルオペランドで動作するように構成されてもよい。例えば、１つの実施形態において、ＧＥＵ７００は、６４要素ベクトルをサポートしてもよく、この場合、各要素は、単精度浮動小数点（３２ビット）数である。
【０１１３】
＜マルチコア＞
本明細書に記載するプロセッサ実施形態の任意のものが、複数のコアを有するように構成されてもよい。例えば、プロセッサ１００は、図１に示す要素を各々が含む複数のコアを含んでもよい。各コアは、独自の専用テクスチャメモリと、Ｌ１キャッシュとを有してもよい。プロセッサ２００、３００、および４００は、複数のコアを有するように同様に構成されてもよい。マルチコアアーキテクチャの場合、プロセッサのコア数を増やすだけで、将来的に性能を向上させることができる。
【０１１４】
マルチコア実施形態の任意のものにおいて、プロセッサ内のコアの１つ以上が、製造時の不備が原因で欠陥品になる可能性がある。このように、プロセッサは、プロセッサが残りの「良品」のコアで動作しうるように、欠陥品であると決定されたプロセッサ内の任意のコアを無効にする論理を含んでもよい。
【０１１５】
いくつかの実施形態において、マルチコア実施例におけるマルチコアが、１つ以上のコプロセッサの共通のセットを共有してもよいことに留意されたい。
【０１１６】
いくつかの実施形態において、汎用処理とグラフィックスレンダリングとの間の負荷バランシングが、汎用処理タスクを実行しているスレッド数と、グラフィックスレンダリングタスクを実行しているスレッド数とのバランスをとることによって、マルチスレッドのマルチコアプロセッサで達成されてもよい。このように、プログラマは、負荷バランシングをより明確に制御してもよい。マルチスレッドのソフトウェアデザインが、ＯＯＯ処理の機会の数を減らす傾向があるため、各コアは、ＡＭＤによって製造されたＯｐｔｅｒｏｎプロセッサのようなプロセッサと比較して、ＯＯＯ処理の複雑性を低減させて構成されてもよい。各コアは、複数のスレッド間でスイッチングするように構成されてもよい。スレッドのスイッチングは、メモリおよび命令アクセスの待ち時間を隠す傾向がある。
【０１１７】
いくつかの実施形態において、プロセッサの内部のＲＡＭまたはプロセッサの内部のキャッシュメモリ場所（Ｌ１キャッシュ場所）が、コア間の通信を行うために、メモリ空間のいくつかの部分にマッピングされてもよい。このように、１つのコアで実行するスレッドが、予約済みのアドレスレンジのアドレスに書き込みを行ってもよい。次に、書き込みデータは、対応するＲＡＭ場所またはキャッシュメモリ場所に格納される。次に、別のコア（または場合によっては、同一のコア）で実行する別のスレッドが、同一のアドレスから読み取られうる。このように、システムメモリへのアクセスに関連する長い待ち時間なしに、スレッド間およびコア間の通信が達成されてもよい。
【０１１８】
いくつかの実施形態において、マルチコアプロセッサ内のスレッド間の通信が、プロセッサの内部にあり、ＦＩＦＯのように挙動する非メモリマッピング場所のセットを用いて達成されてもよい。次に、命令セットは、多数の命令を含み、各命令は、暗黙的なソースまたはターゲットとしてＦＩＦＯに依存する。例えば、命令セットは、ＦＩＦＯからのデータの読み込みを暗黙的に指定するロード命令を含んでもよい。ＦＩＦＯが現在空であれば、現在のスレッドは中断されてもよく、またはトラップがアサートされてもよい。同様に、命令セットは、ＦＩＦＯにデータの格納を暗黙的に指定するストア命令を含んでもよい。ＦＩＦＯが現在満杯であれば、現在のスレッドは中断されてもよく、またはトラップがアサートされてもよい。
【産業上の利用可能性】
【０１１９】
本願は、一般に、プロセッサに応用可能であってもよい。
【図１】
2011508918.tif 000003
【図２】
2011508918.tif 000004
【図３】
2011508918.tif 000005
【図４】
2011508918.tif 000006
【図５】
2011508918.tif 000007
【図６】
2011508918.tif 000008
【図７】
2011508918.tif 000009
【国際調査報告】
2011508918.tif 000010
2011508918.tif 000011
2011508918.tif 000012