![]() 一般作業負荷およびグラフィックス作業負荷を処理するための統合プロセッサアーキテクチャ
专利摘要:
1つ以上の制御ユニットと、複数の第1の実行ユニットと、1つ以上の第2の実行ユニットとを備えるプロセッサである。プロセッサ命令セットに適合するフェッチされた命令が、第1の実行ユニットに送られる。第2の命令セット(プロセッサ命令セットとは異なる)に適合するフェッチされた命令が、第2の実行ユニットに送られる。第2の実行ユニットは、グラフィックス演算を実行するように構成され、またはJavaバイトコード、マネージドコード、ビデオ/オーディオ処理演算、暗号化/復号化演算などの実行のような他の特殊な機能を実行するように構成されてもよい。第2の実行ユニットは、コプロセッサのように動作するように構成されてもよい。単一の制御ユニットが、すべての実行ユニットに対するフェッチ、デコード、およびスケジューリングを処理してもよい。他の形態として、マルチ制御ユニットが、実行ユニットの異なるサブセットを処理してもよい。 公开号:JP2011508918A 申请号:JP2010539420 申请日:2008-12-03 公开日:2011-03-17 发明作者:フランク マイケル 申请人:グローバルファウンドリーズ・インコーポレイテッド; IPC主号:G06F9-38
专利说明:
[0001] 本発明は、一般に、単一のプロセッサにおいて汎用処理および特化処理(グラフィックスレンダリングなど)を実行するためのシステムおよび方法に関する。] 背景技術 [0002] 現在のパーソナルコンピュータ(PC)のアーキテクチャは、単一プロセッサ(Intel8088)システムから発展を遂げてきた。作業負荷は、単純なユーザプログラムおよびオペレーティングシステム機能から、グラフィックユーザインタフェース、マルチタスクオペレーティングシステム、マルチメディアアプリケーションなどの複雑な組み合わせのものへと高度化してきた。ほとんどのPCには、CPUからグラフィックスの演算処理にかかる負荷を軽減して、CPUを制御集約的なタスクに集中させることができるように、一般にGPUと呼ばれる特殊なグラフィックスプロセッサが含まれている。GPUは、典型的に、PCのI/Oバスに位置する。加えて、最近、GPUは、コンピュータによる大規模並列処理タスクを実行するために使用されてきた。その結果、最新のコンピュータシステムには、異なる作業負荷特性に最も適した2つの複雑な処理ユニットがあり、各処理ユニットは、独自のプログラミングパラダイムおよび命令セットを有する。典型的なアプリケーションのシナリオでは、いずれの処理ユニットも十分に利用されていない。しかしながら、各処理ユニットは、大量の電力を消費し、基板のスペースを占めてしまう。] 発明が解決しようとする課題 [0003] 従来のx86プロセッサは、3Dグラフィックスで実行される種類の演算処理にあまり適していない。したがって、グラフィックスアクセラレータハードウェアの補助がなければ、3Dグラフィックスに関わるソフトウェアアプリケーションの動きは、典型的に、x86プロセッサ上で非常に低速になる。グラフィックスハードウェアによる高速化により、グラフィックス処理タスクの動作速度は上がるが、タスクを指定するコマンド/データが、コンピュータのソフトウェアインフラストラクチャ(オペレーティングシステムおよびデバイスドライバを含む)を介してアクセラレータに送られるため、ソフトウェアアプリケーションは、アクセラレータでのグラフィックスタスクの実行が要求されると、待ち時間が長くなる。多数の小さなグラフィックスタスクに関わるソフトウェアアプリケーションでは、通信待ち時間がこのように長くなることでオーバーヘッドが大きくなるため、グラフィックスアクセラレータの活用レベルが極端に低減しうる。] 課題を解決するための手段 [0004] いくつかの実施形態において、プロセッサが、複数の実行ユニットと、グラフィックス実行ユニット(GEU)と、制御ユニットとを含む。制御ユニットは、GEUおよび複数の実行ユニットに結合され、システムメモリから(例えば、命令キャッシュを経由して)命令ストリームをフェッチするように構成される。命令ストリームは、プロセッサ命令セットに適合する第1の命令と、グラフィックス演算を実行するための第2の命令とを含む。プロセッサ命令セットは、少なくとも汎用処理命令セットを含む命令セットである。「第2の命令」は、1つ以上のグラフィックス命令を含む。グラフィックス命令の例には、ピクセルにピクセルシェーディングを実行するための命令、ジオメトリプリミティブにジオメトリシェーディングを実行するための命令、およびジオメトリプリミティブにピクセルシェーディングを実行するための命令が挙げられる。制御ユニットは、第1の命令および第2の命令を復号化し、複数の実行ユニットで復号化された第1の命令の少なくとも1つのサブセットの実行をスケジューリングし、GEUで復号化された第2の命令の少なくとも1つのサブセットの実行をスケジューリングするように構成される。プロセッサは、第1の命令および第2の命令に対して統合メモリ空間を使用するように構成されてもよく、すなわち、第1の命令で使用されるアドレスおよび第2の命令で使用されるアドレスは、同一のメモリ空間を参照する。1つの実施形態において、プロセッサはまた、インタフェースユニットと、リクエストルータとを含む。インタフェースユニットは、復号化された第2の命令をリクエストルータを経由してGEUに転送するように構成され、GEUは、コプロセッサの方式で動作するように構成される。リクエストルータは、プロセッサからシステムメモリ(またはノースブリッジのような中間デバイス)へメモリアクセスリクエストをルーティングしてもよい。] [0005] 1つの実施形態において、プロセッサはまた、Javaバイトコードを実行するための実行ユニットを含む。この実施形態において、制御ユニットは、フェッチされた命令ストリームにおいて任意のJavaバイトコードを特定し、この実行ユニットで実行するためにJavaバイトコードをスケジューリングするように構成される。] [0006] 別の実施形態において、プロセッサはまた、マネージドコードを実行するための実行ユニットを含む。この実施形態において、制御ユニットは、フェッチされた命令ストリームの任意のマネージドコードを特定し、この実行ユニットで実行するためのマネージドコードをスケジューリングするように構成される。] [0007] 1つの実施形態において、GEUは、頂点シェーダ、ジオメトリシェーダ、ラスタライザ、およびピクセルシェーダの1つ以上を含む。] [0008] いくつかの実施形態において、プロセッサが、複数の第1の実行ユニットと、1つ以上の第2の実行ユニットと、第1の制御ユニットと、第2の制御ユニットとを含む。制御ユニットは、複数の第1の実行ユニットに結合され、第1の命令ストリームをフェッチするように構成される。第1の命令ストリームは、汎用プロセッサ命令セットに適合する第1の命令を含む。制御ユニットは、第1の命令を復号化し、複数の実行ユニットで復号化された第1の命令の少なくとも1つのサブセットの実行をスケジューリングするように構成される。第2の制御ユニットは、1つ以上の第2の実行ユニットに結合され、第2の命令ストリームをフェッチするように構成される。第2の命令ストリームは、プロセッサ命令セットとは異なる第2の命令セットに適合する第2の命令を含む。第2の制御ユニットは、第2の命令を復号し、1つ以上の第2の実行ユニットで復号化された第2の命令の少なくとも1つのサブセットの実行をスケジューリングするように構成される。1つの実施形態において、プロセッサは、第1の命令および第2の命令が同一のメモリ空間をアドレス指定するように構成される。] [0009] 1つの実施形態において、プロセッサはまた、インタフェースユニットと、リクエストルータとを含む。インタフェースユニットは、復号化された第2の命令をリクエストルータを経由して1つ以上の第2の実行ユニットに転送するように構成される。1つ以上の第2の実行ユニットは、コプロセッサとして動作するように構成されてもよい。] [0010] さまざまな実施形態において、第2の命令は、1つ以上のグラフィックス命令(すなわち、グラフィックス演算を実行するための命令)、Javaバイトコード、マネージドコード、ビデオ処理命令、マトリックス/ベクトル演算命令、暗号化/復号化命令、オーディオ処理命令、またはこれらのタイプの命令の任意の組み合わせを含んでもよい。] [0011] 1つの実施形態において、1つ以上の第2の実行ユニットの少なくとも1つが、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ、およびピクセルと頂点の両方に対する統合されたシェーダとを含む] [0012] いくつかの実施形態において、プロセッサが、複数の第1の実行ユニットと、1つ以上の第2の実行ユニットと、制御ユニットとを含んでもよい。制御ユニットは、複数の第1の実行ユニットおよび1つ以上の第2の実行ユニットに結合され、命令ストリームをフェッチするように構成される。命令ストリームは、プロセッサ命令セットに適合する第1の命令と、プロセッサ命令セットとは異なる第2の命令セットに適合する第2の命令とを含む。制御ユニットは、第1の命令を復号化し、複数の第1の実行ユニットで復号化された第1の命令の少なくとも1つのサブセットの実行をスケジューリングし、第2の命令を復号化し、1つ以上の第2の実行ユニットで復号化された第2の命令の少なくとも1つのサブセットの実行をスケジューリングするようにさらに構成される。プロセッサは、第1の命令および第2の命令が同一のメモリ空間をアドレス指定するように構成されてもよい。] [0013] 好ましい実施形態の以下の詳細な説明を、以下の図面とともに考慮すると、本発明をより深く理解できる。] [0014] 本発明には、さまざまな修正例を施し、別の形態とる余地があるが、本発明の特定の実施形態が図面に一例として示されており、本明細書において詳細に記載される。しかしながら、図面および図面の詳細な説明は、本発明を開示された特定の形態に限定することを意図したものではなく、逆に、本発明は、添付の特許請求の範囲によって規定される本発明の趣旨および範囲内にあるあらゆる修正例、均等物、および代替物に及ぶものであることを理解されたい。] 図面の簡単な説明 [0015] 単一のフェッチ/デコード/スケジュールユニットを有し、プロセッサ命令セットおよび第2の命令セットを含む統合された命令セットをサポートするように構成されたプロセッサの1つの実施形態を示す図。 多数のコプロセッサのような実行ユニットが、インタフェースおよびリクエストルータを介してFDSユニットに結合される、単一のフェッチ/デコード/スケジュール(FDS)ユニットを有するプロセッサの1つの実施形態を示す図。 プロセッサ命令セットおよび第2の命令セット(例えば、グラフィックス命令)から混合された命令を有するフェッチされた命令ストリームを示す図。 2つのフェッチ/デコード/スケジュール(FDS)ユニット、すなわち、第1の実行ユニットセットをターゲットにした命令を復号化するための第1のFDSユニットと、第2の実行ユニットセットをターゲットにした命令を復号化するための第2のFDSユニットを有するプロセッサの1つの実施形態を示す図。 多数のコプロセッサのような実行ユニットが、インタフェースおよびリクエストルータを介してFDSユニットに結合される、2つのフェッチ/デコード/スケジュール(FDS)ユニットを有するプロセッサの1つの実施形態を示す図。 2つのFDSユニットによってそれぞれフェッチされる第1および第2の命令ストリームの一例を示す図。 グラフィックス実行ユニット(GEU)の1つの実施形態を示す図。] 実施例 [0016] 図1は、プロセッサ100の1つの実施形態を示す。プロセッサ100は、命令キャッシュ110と、フェッチ/デコード/スケジュール(FDS)ユニット114と、実行ユニット122−1〜122−N(Nは正の整数)、ロード/ストアユニット150と、レジスタファイル160と、データキャッシュ170とを含む。さらに、プロセッサ100は、1つ以上の追加の実行ユニットを含み、例えば、グラフィックス演算を実行するためのグラフィックス実行ユニット(GEU)130、Javaバイトコードを実行するためのJavaバイトコードユニット(JBU)134、マネージドコードを実行するためのマネージドコードユニット(MCU)138、暗号化および復号化演算を実行するための暗号化/復号化ユニット(EDU)142、ビデオ処理演算を実行するためのビデオ実行ユニット、および整数および/または浮動小数点マトリックスおよびベクトル演算を実行するためのマトリックス数値演算ユニットの1つ以上を含む。いくつかの実施形態において、JBU134およびMCU138は、含まれなくてもよい。その代わり、Javaバイトコードおよび/またはマネージドコードは、FDSユニット114内で処理されてもよい。例えば、FDSユニット114は、汎用プロセッサ命令セットの命令にJavaバイトコードまたはマネージドコードを復号化してもよく、またはマイクロコードルーチンのコールに復号化してもよい。] 図1 [0017] Javaバイトコードは、Sun Microsystems,Inc.によって定義されたJava Virtual Machineによって実行される命令の形式である。マネージドコードは、MicrosoftのCLR Virtual Machineによって実行される命令の形式である。] [0018] 命令キャッシュ110は、システムメモリから新しくアクセスされた命令のコピーを格納する。(システムメモリはプロセッサ100の外部にある。)FDSユニット114は、命令キャッシュ110から命令のストリームSをフェッチする。ストリームSの命令は、プロセッサ100によってサポートされた統合された命令セットUから引き出された命令である。統合された命令セットは、(a)プロセッサ命令セットPの命令と、(b)プロセッサ命令セットPとは別個の第2の命令セットQの命令とを含む。] [0019] 「プロセッサ命令セット」という用語は、本明細書において使用する場合、整数および浮動小数点演算、論理演算、ビット操作、分岐およびメモリアクセスを実行するための命令など、汎用処理命令の少なくとも1つのセットを含む任意の命令セットである。「プロセッサ命令セット」はまた、他の命令、例えば、整数ベクトルおよび/または浮動小数点ベクトルに同時命令複数データ(SIMD:simultaneous−instruction multiple−data)演算を実行するための命令を含んでもよい。] [0020] いくつかの実施形態において、プロセッサ命令セットPは、IntelのIA−32命令セットや、AMDによって定義されたAMD−64TMのようなx86命令セットを含んでもよい。他の実施形態において、プロセッサ命令セットPは、MIPSプロセッサ、SPARCプロセッサ、ARMプロセッサ、PowerPCプロセッサなどのプロセッサの命令セットを含んでもよい。プロセッサ命令セットPは、命令セットアーキテクチャで定義されてもよい。] [0021] 1つの実施形態において、第2の命令セットQは、グラフィックス演算を実行するための命令セットを含む。別の実施形態において、第2の命令セットQは、Javaバイトコードを含む。さらなる別の実施形態において、第2の命令セットQは、マネージドコードを含む。より一般には、第2の命令セットQは、1つ以上の命令セット、例えば、グラフィックス演算を実行するための命令セット、Javaバイトコード、マネージドコード、暗号化および復号化演算を実行するための命令セット、ビデオ処理演算を実行するための命令セット、およびマトリックスおよびベクトル演算を実行するための命令セットの1つ以上を含んでもよい。これらの命令セットの1つ以上の異なる組み合わせに相当するさまざまな実施形態が想定される。] [0022] プログラマは、プロセッサ100用のプログラムを組み立てるさい、プロセッサ命令セットPの命令と、第2の命令セットQの命令とを自由に組み合わせることができる。このように、フェッチされた命令のストリームSは、プロセッサ命令セットPおよび第2の命令セットQからの命令の組み合わせを含んでもよい。ストリームS内のこのような命令の組み合わせの一例が、第2の命令セットQがグラフィックス命令のセットである特殊なケースの図3に示されている。例示的なストリーム300は、プロセッサ命令セットPからの命令I0、I1、I3、...と、第2の命令セットQからの命令G0、G1、G2、...とを含む。別の実施形態において、プロセッサ100は、マルチスレッディング(またはハイパースレッディング)を実行してもよい。各スレッドは、組み合わせた命令を含んでもよく、またはソース命令セットPおよびQの1つから命令を含んでもよい。] 図3 [0023] 上述したように、いくつかの実施形態において、第2の命令セットQは、グラフィックス演算を実行するための命令セットを含んでもよい。例えば、第2の命令セットQは、頂点に頂点シェーディングを実行するための命令と、ジオメトリプリミティブ(三角形など)にジオメトリシェーディングを実行するための命令と、ジオメトリプリミティブのラスタ化を実行するための命令と、ピクセルにピクセルシェーディングを実行するための命令とを含んでもよい。1つの実施形態において、第2の命令セットQは、Direct3D10APIに適合する命令セットを含んでもよい。(「API」は、「アプリケーションプログラミングインタフェース」または「アプリケーションプログラマのインタフェース」の頭字語である。)別の実施形態において、第2の命令セットQは、OpenGL APIに適合する命令セットを含んでもよい。] [0024] FDSユニット114は、フェッチされた命令ストリームを実行可能な演算(op)に復号化する。各フェッチされた命令が、1つ以上のopに復号化される。フェッチされた命令の一部(例えば、より複雑な命令の一部)が、マイクロコードROMにアクセスすることによって復号化されてもよい。さらに、フェッチされた命令の一部が、1対1の方式で復号化されてもよく、すなわち、命令により、この命令に特有の単一のopが得られる。例えば、フェッチされた命令の一部が、結果的に得られたopがフェッチされた命令と同一である(または類似する)ように復号化されてもよい。1つの実施形態において、グラフィックス命令、Javaバイトコード、マネージドコード、暗号化/復号化コード、および浮動小数点命令が、1対1の方式で1命令につき1つのopを発生するように復号化されてもよい。] [0025] FDSユニット114は、実行ユニット122−1〜122−Nと、1つ以上の追加の実行ユニットと、ロード/ストアユニット150とを含む実行ユニットで実行するためのopをスケジューリングする。GEU130を含むこれらの実施形態において、FDSユニット114は、ストリームSの(第2の命令セットQの)任意のグラフィックス命令を特定し、GEU130において実行するためのグラフィックス命令(すなわち、グラフィックス命令を復号化することから得られたop)をスケジューリングする。] [0026] JBU134を含むこれらの実施形態において、FDSユニット114は、フェッチされた命令のストリームSにおいて任意のJavaバイトコードを特定し、JBU134において実行するためのJavaバイトコードをスケジューリングする。] [0027] MCU138を含むこれらの実施形態において、FDSユニット114は、フェッチされた命令のストリームSにおいて任意のマネージドコードを特定し、MCU138において実行するためのマネージドコードをスケジューリングする。] [0028] EDUユニット142を含むこれらの実施形態において、FDSユニット114は、フェッチされた命令のストリームSの任意の暗号化または復号化命令を特定し、EDUユニット142において実行するための命令をスケジューリングする。] [0029] 上述したように、FDSユニット114は、フェッチされた命令のストリームSの各命令を1つ以上のopに復号化し、実行ユニットの適切なもので実行するための1つ以上のopをスケジューリングする。いくつかの実施形態において、FDSユニット114は、スーパースカラー演算、アウトオブオーダー(OOO)実行、マルチスレッド実行、投機的実行、分岐予想、またはこれらの任意の組み合わせに対して構成される。このように、さまざまな実施形態において、FDSユニット114は、実行ユニットの利用可能性を決定するための論理、2つ以上のopの処理が可能な2つ以上の実行ユニットが利用可能であれば、2つ以上のopを(所与のクロックサイクルで)並列に送り出すための論理、opのアウトオブオーダー実行をスケジューリングし、opのインオーダーリタイアメントを保証するための論理、複数のスレッドおよび/または複数のプロセス間のコンテクストスイッチングを実行するための論理、および現在実行中のコードタイプに特化した定義されていない命令にトラップを発生するための論理などのさまざまな組み合わせを含んでもよい。] [0030] ロード/ストアユニット150は、データキャッシュ170に結合され、メモリ書き込みおよびメモリ読み取り演算を実行するように構成される。メモリ書き込み演算のために、ロード/ストアユニット150は、物理アドレスおよび関連する書き込みデータを発生してもよい。物理アドレスおよび書き込みデータは、データキャッシュ170へ後で送信するためのストアキュー(図示せず)に入力されてもよい。メモリ読み取りデータは、データキャッシュ170から(または最新のストアの場合にストアキューにあるエントリから)ロード/ストアユニット150に供給されてもよい。] [0031] 実行ユニット122−1〜122−Nは、1つ以上の整数パイプラインと、1つ以上の浮動小数点ユニットとを含んでもよい。1つ以上の整数パイプラインは、整数演算(加算、減算、乗算、および除算など)を実行するためのリソースと、論理演算(AND、OR、および否定など)、ビット操作(シフトおよび循環シフトなど)とを含んでもよい。いくつかの実施形態において、1つ以上の整数パイプラインのリソースが、SIMD整数演算を実行するように動作可能である。1つ以上の浮動小数点ユニットは、浮動小数点演算を実行するためのリソースを含んでもよい。いくつかの実施形態において、1つ以上の浮動小数点ユニットのリソースは、SIMD浮動小数点演算を実行するように動作可能である。] [0032] 1つの実施形態のセットにおいて、実行ユニット122−1〜122−Nは、整数および/または浮動小数点SIMD演算を実行するように構成された1つ以上のSIMDユニットを含む。] [0033] 図1に示すように、実行ユニットは、送出バス118および結果バス155に結合されてもよい。実行ユニットは、FDSユニット114から送出バス118を経由してopを受信し、結果バス155を経由してレジスタファイル160に実行の結果を送る。レジスタファイル160は、フィードバック経路158に結合されることで、レジスタファイル160からのデータは、実行ユニットへソースオペランドとして供給されうる。バイパス経路157は、結果バス155とフィードバック経路との間を結合し、実行の結果が、レジスタファイル160を迂回し、ひいては、実行ユニットへソースオペランドとしてより直接供給されうる。レジスタファイル160は、アーキテクチャ化レジスタのセット用の物理ストレージを含んでもよい。] 図1 [0034] 上述したように、実行ユニット122−1〜122−Nは、1つ以上の浮動小数点ユニットを含んでもよい。各浮動小数点ユニットは、浮動小数点命令(例えば、x87浮動小数点命令、またはIEEE754/854に準拠する浮動小数点命令)を実行するように構成されてもよい。各浮動小数点ユニットは、加算器ユニット、乗算器ユニット、除算/平方根ユニットなどを含んでもよい。各浮動小数点ユニットは、コプロセッサのように動作してもよく、FDSユニット114は、浮動小数点命令を浮動小数点ユニットに直接送り出す。浮動小数点ユニットは、浮動小数点レジスタのセット(図示せず)用のストレージを含んでもよい。] [0035] 上述したように、プロセッサ100は、プロセッサ命令セットPおよび第2の命令セットQを含む統合された命令セットUをサポートする。統合された命令セットUは、プロセッサ命令セットPの命令(以下、「P命令」)および第2の命令セットQの命令(以下、「Q命令」)が同一のメモリ空間をアドレス指定するように規定される。このようにして、プログラムのP部分が、プログラムのQ部分と高速通信する場合、プログラマはプログラムを組み立てることが容易である。例えば、P命令が、メモリ場所(またはレジスタファイル160のレジスタ)に書き込みしてもよく、後続のQ命令が、このメモリ場所(またはレジスタ)から読み出されうる。プログラムが、単一のプロセッサ(すなわち、プロセッサ100)で実行されるため、プログラムのP部分とQ部分との間で通信を行うために、オペレーティングシステムの機能を呼び出す必要がない。] [0036] 上述したように、プログラマは、プロセッサ100にプログラムを組み立てるとき、P命令とQ命令を自由に組み合わせてもよい。プログラマは、実行効率を上げるため、例えば、並列に機能する実行ユニットを可能な限り多く保つために、統合された命令セットUからの命令を出してもよい。] [0037] 1つの実施形態において、プロセッサ100は、単一の集積回路上で構成されてもよい。別の実施形態において、プロセッサ100は、複数の集積回路を含んでもよい。] [0038] <図2> 図2は、プロセッサ200の1つの実施形態を示す。プロセッサ200は、リクエストルータ210と、命令キャッシュ214と、フェッチ/デコード/スケジュール(FDS)ユニット217と、実行ユニット220−1〜220−Nと、ロード/ストアユニット224と、インタフェース228と、レジスタファイル232と、データキャッシュ236とを含む。さらに、プロセッサ200は、1つ以上の追加の実行ユニットを含み、例えば、グラフィックス演算を実行するためのグラフィックス実行ユニット(GEU)250、Javaバイトコードを実行するためのJavaバイトコードユニット(JBU)254、マネージドコードを実行するためのマネージドコードユニット(MCU)258と、暗号化および復号化演算を実行するための暗号化/復号化ユニット(EDU)262、ビデオ処理演算を実行するためのビデオ実行ユニット、および整数および/または浮動小数点マトリックスおよびベクトル演算を実行するためのマトリックス数値演算ユニットの1つ以上を含む。いくつかの実施形態において、JBU254およびMCU258は含まれなくてもよい。その代わり、Javaバイトコードおよび/またはマネージドコードは、FDSユニット217内で処理されてもよい。例えば、FDSユニット217は、Javaバイトコードまたはマネージドコードを汎用プロセッサ命令セットの命令に復号化してもよく、またはマイクロコードルーチンのコールに復号化してもよい。] 図2 [0039] リクエストルータ210は、命令キャッシュ214と、インタフェース228と、データキャッシュ236と、1つ以上の追加の実行ユニット(GEU250、JBU254、MCU258、およびEDU262など)に結合される。さらに、リクエストルータ210が、1つ以上の外部バスと結合されるように構成される。例えば、リクエストルータ210は、ノースブリッジとの通信を行いやすいようにフロントサイドバスに結合されるように構成されてもよい。いくつかの実施形態において、リクエストルータは、ハイパートランスポート(HT)バスに結合されるように構成されてもよい。] [0040] リクエストルータ210は、命令キャッシュ214およびデータキャッシュ236からシステムメモリへ(例えば、ノースブリッジを経由して)メモリアクセスリクエストをルーティングし、システムメモリから命令キャッシュ214へ命令をルーティングし、およびシステムメモリからデータキャッシュ236へデータをルーティングするように構成される。加えて、リクエストルータ210は、インタフェース228と、GEU250、JBU254、MCU258、およびEDU262などの1つ以上の追加の実行ユニットとの間で命令およびデータをルーティングするように構成される。1つ以上の追加の実行ユニットは、「コプロセッサのように」動作してもよい。例えば、追加の実行ユニットの所与の1つに、命令が送信されてもよい。所与のユニットは、独立して命令を実行してもよく、インタフェースユニット228に完了の指示を戻してもよい。] [0041] 命令キャッシュ214は、FDSユニット217から命令のリクエストを受信し、リクエストルータ210を経由して(システムメモリから最終的に命令の)メモリアクセスリクエストをアサートする。命令キャッシュ214は、システムメモリから新しくアクセスされた命令のコピーを格納する。] [0042] FDSユニット217は、命令キャッシュ214から命令ストリームをフェッチし、実行ユニット220−1〜220−N、ロード/ストアユニット224、および1つ以上の追加の実行ユニットを含む)フェッチされた命令の各々を1つ以上のopに復号化し、(実行ユニットで実行するためのopをスケジューリングする。実行ユニットが利用可能になるため、FDSユニット217は、送出バス218を経由して実行ユニットにopを送る。] [0043] いくつかの実施形態において、プロセッサ200は、上述したように、プロセッサ命令セットPおよび第2の命令セットQを含む統合された命令セットUをサポートするように構成される。このように、フェッチされたストリームの命令は、統合された命令セットUから引き出される。上述したように、プロセッサ命令セットPは、汎用処理命令の少なくとも1つのセットを含む。プロセッサ命令セットPはまた、整数および/または浮動小数点SIMD命令を含んでもよい。上述したように、第2の命令セットQは、1つ以上の命令セット、例えば、グラフィックス演算を実行するための命令セット、Javaバイトコード、マネージドコード、暗号化および復号化演算を実行するための命令セット、ビデオ処理演算を実行するための命令セット、およびマトリックスおよびベクトル演算を実行するための命令セットの1つ以上を含んでもよい。フェッチされた命令ストリームは、例えば、図3に示すように、プロセッサ命令セットPおよび第2の命令セットQからの命令の組み合わせであってもよい。] 図3 [0044] 上述したように、FDSユニット217は、フェッチされた命令の各々を1つ以上のopに復号化する。フェッチされた命令の一部(例えば、より複雑な命令の一部)が、マイクロコードROMにアクセスすることによって復号化されてもよい。さらに、フェッチされた命令の一部が、1対1の方式で復号化されてもよい。例えば、フェッチされた命令の一部は、結果的に得られたopが、フェッチされた命令と同一である(または類似する)ように復号化されてもよい。いくつかの実施形態において、1つ以上の追加の実行ユニットに対応する任意の命令が、1対1の方式で復号化されてもよい。1つの実施形態において、グラフィックス命令、Javaバイトコード、マネージドコード、暗号化/復号化コード、および浮動小数点命令は、1対1の方式で復号化されてもよい。] [0045] さらに、上述したように、FDSユニット217は、実行ユニットで実行するためのopをスケジューリングする。GEU250を含むこれらの実施形態において、FDSユニット217は、フェッチされた命令ストリームの任意のグラフィックス命令を特定し、GEU250において実行するためのグラフィックス命令(すなわち、グウラフィックス命令を復号化することから得られたop)をスケジューリングする。FDSユニット217は、各グラフィックス命令をインタフェース228へ送ってもよく、各グラフィックス命令は、インタフェース228からリクエストルータ210を介してGEU250へ転送される。1つの実施形態において、GEU250は、プライベート命令ソースから独立した同時実行のローカル命令ストリームを実行するように構成されてもよい。FDSユニット217から転送された演算は、ローカル命令ストリーム内の特定のルーチンを実行させてもよい。] [0046] JBU254を含むこれらの実施形態において、FDSユニット217は、フェッチされた命令ストリームの任意のJavaバイトコードを特定し、JBU254において実行するためのJavaバイトコードをスケジューリングする。FDSユニット217は、各Javaバイトコードをインタフェースユニットに送ってもよく、各Javaバイトコードは、インタフェースユニットからリクエストルータ210を介してJBU254に転送される。] [0047] MCU258を含むこれらの実施形態において、FDSユニット217は、フェッチされた命令ストリームの任意のマネージドコードを特定し、MCU258において実行するためのマネージドコードをスケジューリングする。FDSユニット217は、各マネージドコード命令をインタフェース228に送っても良く、各マネージドコード命令は、インタフェース228からリクエストルータ210を介してMCU258に転送される。] [0048] EDU262を含むこれらの実施形態において、FDSユニット217は、フェッチされた命令ストリームの任意の暗号化または復号化命令を特定し、EDU262おいて実行するためのこれらの命令をスケジューリングする。FDSユニット217は、各暗号化または復号化命令をインタフェース228に送ってもよく、各暗号化または復号化命令は、インタフェース228からリクエストルータ210を介してEDU262に転送される。] [0049] GEU250、JBU254、MCU258、およびEDU262の各々は、opを受信し、opを実行し、インタフェースユニット228にopの完了を指示する情報を送信する。GEU250、JBU254、MCU258、およびEDU262の各々は、実行の結果を格納するための独自の内部レジスタを有する。] [0050] 上述したように、FDSユニット217は、フェッチされた命令ストリームの各命令を1つ以上のopを復号化し、さまざまな実行ユニットで実行するための1つ以上のopをスケジューリングする。いくつかの実施形態において、FDSユニット217は、スーパースカラー演算、アウトオブオーダー(OOO)実行、マルチスレッド実行、投機的実行、分岐予想、またはこれらの任意の組み合わせに対して構成される。このように、FDSユニット217は、実行ユニットの利用可能性をモニタリングするための論理、2つ以上のopの処理が可能な2つ以上の実行ユニットが利用可能なときはいつでも、2つ以上のopを(所与のクロックサイクルで)並列に送り出すための論理、opのアウトオブオーダー実行をスケジューリングし、opのインオーダーリタイアメントを保証するための論理、複数のスレッドおよび/または複数のプロセス間のコンテクストスイッチングを実行するための論理を含んでもよい。] [0051] ロード/ストアユニット224は、ロード/ストアバス226を経由してデータキャッシュ236に結合され、メモリ書き込みおよびメモリ読み取り演算を実行するように構成される。メモリ書き込み演算のために、ロード/ストアユニット224は、物理アドレスおよび書き込みデータを発生してもよい。物理アドレスおよび書き込みデータは、データキャッシュ236へ後で送信するためのストアキュー(図示せず)に入力されてもよい。メモリ読み取りデータは、データキャッシュ236から(または最新のストアの場合にストアキューにあるエントリから)ロード/ストアユニット224に供給されてもよい。] [0052] 実行ユニット220−1〜220−Nは、例えば、上述したように、プロセッサ100と接続するさいに、1つ以上の整数パイプラインと、1つ以上の浮動小数点ユニットとを含んでもよい。いくつかの実施形態において、実行ユニット220−1〜220−Nは、整数および/または浮動小数点SIMD演算を実行するように構成された1つ以上のSIMDユニットを含んでもよい。] [0053] 図2に示すように、実行ユニット220−1〜220−N、ロード/ストアユニット224、およびインタフェース228は、送出バス218および結果バス230に結合されてもよい。実行ユニット220−1〜220−N、ロード/ストアユニット224、およびインタフェース228は、送出バス218を経由してFDSユニット217からopを受信し、結果バス230を経由してレジスタファイル232に実行の結果を送る。レジスタファイル232は、フィードバック経路234に結合されることで、レジスタファイル232からのデータを、ソースオペランドとして実行ユニット220−1〜220−N、ロード/ストアユニット224、およびインタフェース228に供給可能になる。バイパス経路231は、結果バス230と、フィードバック234との間に結合されて、実行の結果が、レジスタファイル232を迂回し、ソースオペランドとしてより直接供給されうる。レジスタファイル232は、アーキテクチャ化レジスタのセット用の物理ストレージを含んでもよい。] 図2 [0054] 上述したように、プロセッサ200は、プロセッサ命令セットPおよび第2の命令セットQを含む統合された命令セットUをサポートするように構成される。統合された命令セットUは、プロセッサ命令セットPの命令(以下、「P命令」)および第2の命令セットQの命令(以下、「Q命令」)が同一のメモリ空間をアドレス指定するように規定される。このようにして、プログラムのP部分が、プログラムのQ部分と高速通信する場合、プログラマはプログラムを組み立てることが容易である。例えば、P命令が、メモリ場所(またはレジスタファイル160のレジスタ)に書き込みしてもよく、後続のQ命令が、このメモリ場所(またはレジスタ)から読み出されうる。プログラムが、単一のプロセッサ(すなわち、プロセッサ200)で実行されるため、プログラムのP部分とQ部分との間で通信を行うために、オペレーティングシステムの機能を呼び出す必要がない。] [0055] 上述したように、プログラマは、プロセッサ200にプログラムを組み立てるとき、P命令とQ命令を自由に組み合わせてもよい。プログラマは、実行効率を上げるため、例えば、並列に機能する実行ユニットを可能な限り多く保つために、統合された命令セットUからの命令を出してもよい。] [0056] 1つの実施形態において、プロセッサ200は、単一の集積回路上に構成されてもよい。別の実施形態において、プロセッサ100は、複数の集積回路を含んでもよい。例えば、1つの実施形態において、図2のリクエストルータ210およびリクエストルータ210の左側にある要素は、単一の集積回路上に構成されてもよく、1つ以上の追加の実行ユニット(リクエストルータ210の右側に示す)は、1つ以上の追加の集積回路上に構成されてもよい。] 図2 [0057] <図4> 図4は、プロセッサ400の1つの実施形態を示す。プロセッサ400は、命令キャッシュ410と、フェッチ/デコード/スケジュール(FDS)ユニット414および418と、実行ユニット426−1〜426−N、ロード/ストアユニット430と、レジスタファイル464と、データキャッシュ468とを含む。さらに、プロセッサ400は、1つ以上の以下のような1つ以上の追加の実行ユニット、例えば、グラフィックス演算を実行するためのグラフィックス実行ユニット(GEU)450、Javaバイトコードを実行するためのJavaバイトコードユニット(JBU)454、マネージドコードを実行するためのマネージドコードユニット(MCU)458、および暗号化および復号化演算を実行するための暗号化/復号化ユニット(EDU)460を含む。いくつかの実施形態において、JBU454およびMCU458は含まれなくてもよい。その代わり、Javaバイトコードおよび/またはマネージドコードは、FDSユニット414内で処理されてもよい。例えば、FDSユニット414は、汎用プロセッサ命令セットの命令にJavaバイトコードまたはマネージドコードを復号化してもよく、またはマイクロコードルーチンのコールに復号化してもよい。] 図4 [0058] 命令キャッシュ410は、システムメモリから新しくアクセスされた命令のコピーを格納する。(システムメモリはプロセッサ400の外部にある。)FDSユニット414は、命令キャッシュ110から命令のストリームS1をフェッチし、FDSユニット418は、命令キャッシュ110から命令のストリームS2をフェッチする。いくつかの実施形態において、ストリームS1の命令は、上述したように、プロセッサ命令セットPから引き出され、ストリームS2の命令は、上述したように、第2の命令セットQから引き出される。図6は、ストリームS1の一例610と、ストリームS2の一例620とを示す。命令I0、I1、I2、I3、...は、プロセッサ命令セットPの命令である。命令V0、V1、V2、V3、...は、第2の命令セットQの命令である。] 図6 [0059] 上述したように、プロセッサ命令セットPは、汎用処理命令の少なくとも1つのセットを含む。プロセッサ命令セットPはまた、整数および/または浮動小数点SIMD命令を含んでもよい。] [0060] 上述したように、第2の命令セットQは、1つ以上の命令セット、例えば、グラフィックス演算を実行するための命令セット、Javaバイトコード、マネージドコード、暗号化および復号化演算を実行するための命令セット、ビデオ処理演算を実行するための命令セット、およびマトリックスおよびベクトル演算を実行するための命令セットの1つ以上を含んでもよい。] [0061] FDSユニット414は、フェッチされた命令ストリームS1を実行可能な演算(op)に復号化する。ストリームS1の各命令は、1つ以上のopに復号化される。命令の一部(例えば、より複雑な命令の一部)は、マイクロコードROMにアクセスすることによって復号化されてもよい。さらに、命令の一部は、1対1の方式で復号化されてもよい。例えば、フェッチされた命令の一部が、結果的に得られたopが、フェッチされた命令と同一である(または類似する)ように復号化されてもよい。1つの実施形態において、ストリームS1の任意の浮動小数点命令が、1対1の方式で復号化されてもよい。FDSユニット414は、実行ユニット426−1〜426−Nおよびロード/ストアユニット430で実行するためのop(ストリームS1の復号化から得られる)をスケジューリングする。] [0062] FDSユニット418は、フェッチされた命令のストリームS2を実行可能な演算(op)に復号化する。ストリームS2の各命令は、1つ以上のopに復号化される。ストリームS2の命令の一部(またはすべて)が、1対1の方式で復号化されてもよい。例えば、フェッチされた命令の一部が、結果的に得られたopが、フェッチされた命令と同一である(または類似する)ように復号化されてもよい。1つの実施形態において、ストリームS2の任意のグラフィックス命令、Javaバイトコード、マネージドコード、または暗号化/復号化コードが、1対1の方式で復号化されてもよい。FDSユニット418は、1つ以上の追加の実行ユニット(GEU450、JBU454、MCU458、およびEDU460など)で実行するためのop(ストリームS2の復号化から得られる)をスケジューリングする。] [0063] GEU450を含むこれらの実施形態において、FDSユニット418は、ストリームS2の任意のグラフィックス命令を特定し、GEU450において実行するためのグラフィックス命令(すなわち、グラフィックス命令を復号化することから得られたop)をスケジューリングする。] [0064] JBU454を含むこれらの実施形態において、FDSユニット418は、フェッチされた命令ストリームの任意のJavaバイトコードを特定し、JBU454において実行するためのJavaバイトコードをスケジューリングする。] [0065] MCU458を含むいくつかの実施形態において、FDSユニット418は、ストリームS2の任意のマネージドコードを特定し、MCU458において実行するためのマネージドコードをスケジューリングする。] [0066] EDUユニット460を含むこれらの実施形態において、FDSユニット418は、ストリームS2の任意の暗号化または復号化命令を特定し、EDUユニット460において実行するための命令をスケジューリングする。] [0067] 上述したように、FDSユニット414および418は、ストリームS1およびS2の命令をopにそれぞれ復号化し、実行ユニットの適切なユニットで実行するためのopをスケジューリングする。いくつかの実施形態において、FDSユニット414は、スーパースカラー演算、アウトオブオーダー(OOO)実行、マルチスレッド実行、投機的実行、分岐予想、またはこれらの任意の組み合わせに対して構成される。FDSユニット418は、同様に構成されてもよい。このように、さまざまな実施形態において、FDSユニット414および/またはFDSユニット418は、実行ユニットの利用可能性を決定するための論理、2つ以上のopの処理が可能な2つ以上の実行ユニットが利用可能であれば、2つ以上のopを(所与のクロックサイクルで)並列に送り出すための論理、opのアウトオブオーダー実行をスケジューリングし、opのインオーダーリタイアメントを保証するための論理、複数のスレッドおよび/または複数のプロセス間のコンテクストスイッチングを実行するための論理などのさまざまな組み合わせを含んでもよい。] [0068] ロード/ストアユニット430は、データキャッシュ468に結合され、メモリ書き込みおよびメモリ読み取り演算を実行するように構成される。メモリ書き込み演算のために、ロード/ストアユニット430は、物理アドレスおよび関連する書き込みデータを発生してもよい。物理アドレスおよび書き込みデータは、データキャッシュ468へ後で送信するためのストアキュー(図示せず)に入力されてもよい。メモリ読み取りデータは、データキャッシュ468から(または最新のストアの場合にストアキューにあるエントリから)ロード/ストアユニット430に供給されてもよい。] [0069] 実行ユニット426−1〜426−Nは、1つ以上の整数パイプラインと、1つ以上の浮動小数点ユニットとを含んでもよい。1つ以上の整数パイプラインは、整数演算(加算、減算、乗算、および除算など)を実行するためのリソースと、論理演算(AND、OR、および否定など)、ビット操作(シフトおよび循環シフトなど)とを含んでもよい。いくつかの実施形態において、1つ以上の整数パイプラインのリソースが、SIMD整数演算を実行するように動作可能である。1つ以上の浮動小数点ユニットは、浮動小数点演算を実行するためのリソースを含んでもよい。いくつかの実施形態において、1つ以上の浮動小数点ユニットのリソースは、SIMD浮動小数点演算を実行するように動作可能である。] [0070] 1つの実施形態のセットにおいて、実行ユニット426−1〜426−Nは、整数および/または浮動小数点SIMD演算を実行するように構成された1つ以上のSIMDユニットを含む。] [0071] 図4に示すように、実行ユニット426−1〜426−Nおよびロード/ストアユニット430は、送出バス420および結果バス462に結合されてもよい。実行ユニット426−1〜426−Nおよびロード/ストアユニット430は、送出バス420を経由してFDSユニット414からopを受信し、結果バス462を経由してレジスタファイル464に実行の結果を送る。1つ以上の追加のユニット(GEU450、JBU454、MCU458、およびEDU460など)は、送出バス422を経由してFDSユニット418からopを受信し、結果バス462を経由してレジスタファイルに実行の結果を送る。レジスタファイル464は、フィードバック経路472に結合されることで、レジスタファイル464からのデータを、ソースオペランドとして実行ユニット(実行ユニット426−1〜426−N、ロード/ストアユニット430、および1つ以上の追加の実行ユニットを含む)に供給可能になる。] 図4 [0072] バイパス経路470は、結果バス462とフィードバック経路472との間を結合することで、実行の結果が、レジスタファイル464を迂回し、実行ユニットへソースオペランドとしてより直接供給できる。レジスタファイル464は、アーキテクチャ化レジスタのセット用の物理ストレージを含んでもよい。] [0073] いくつかの実施形態において、FDSユニット418は、1つ以上の追加の実行ユニットおよびロード/ストアユニット430に加えて、実行ユニット426−1〜426−N(またはこれらのユニットのいくつかのサブセット)にopを送り出すように構成される。このように、送出バス422は、1つ以上の追加の実行ユニットおよびロード/ストアユニット430への結合に加えて、1つ以上の実行ユニット426−1〜426−Nに結合されてもよい。] [0074] 上述したように、実行ユニット426−1〜426−Nは、1つ以上の浮動小数点ユニットを含んでもよい。各浮動小数点ユニットは、浮動小数点命令(例えば、x87浮動小数点命令、またはIEEE754/854に準拠する浮動小数点命令)を実行するように構成されてもよい。各浮動小数点ユニットは、加算器ユニット、乗算器ユニット、除算/平方根ユニットなどを含んでもよい。各浮動小数点ユニットは、コプロセッサのように動作してもよく、FDSユニット114は、浮動小数点命令を浮動小数点ユニットに直接送り出す。浮動小数点ユニットは、浮動小数点レジスタのセット(図示せず)用のストレージを含んでもよい。] [0075] 上述したように、いくつかの実施形態において、プロセッサ400は、プロセッサ命令セットPおよび第2の命令セットQをサポートする。プロセッサ命令セットPの命令(以下、「P命令」)および第2の命令セットQの命令(以下、「Q命令」)が、同一のメモリ空間をアドレス指定することに留意されたい。このように、2つのスレッドが、システムメモリまたは内部レジスタ(すなわち、レジスタファイル464のレジスタ)を介して高速通信する場合、プログラマが、P命令を用いて第1のプログラムスレッドを組み立て、Q命令を用いて第2のプログラムを組み立てることが容易になる。スレッドが単一のプロセッサ(すなわち、プロセッサ400)で実行されるため、2つのスレッド間で通信を行うために、オペレーティングシステムの機能を呼び出す必要がない。] [0076] 1つの実施形態において、プロセッサ400は、単一の集積回路上で構成されてもよい。別の実施形態において、プロセッサ400は、複数の集積回路を含んでもよい。例えば、1つ以上の追加の実行ユニットは、1つ以上の集積回路において実現されてもよい。] [0077] <図5> 図5は、プロセッサ500の1つの実施形態を示す。プロセッサ500は、リクエストルータ510と、命令キャッシュ514と、フェッチ/デコード/スケジュール(FDS)ユニット518および522と、実行ユニット526−1〜526−N、ロード/ストアユニット530と、インタフェース534と、レジスタファイル538と、データキャッシュ542とを含む。さらに、プロセッサ500は、1つ以上の以下のような1つ以上の追加の実行ユニット、例えば、グラフィックス演算を実行するためのグラフィックス実行ユニット(GEU)550、Javaバイトコードを実行するためのJavaバイトコードユニット(JBU)554、マネージドコードを実行するためのマネージドコードユニット(MCU)558、および暗号化および復号化演算を実行するための暗号化/復号化ユニット(EDU)562を含む いくつかの実施形態において、JBU554およびMCU558は含まれなくてもよい。その代わり、Javaバイトコードおよび/またはマネージドコードは、FDSユニット518内で処理されてもよい。例えば、FDSユニット518は、汎用プロセッサ命令セットの命令にJavaバイトコードまたはマネージドコードを復号化してもよく、またはマイクロコードルーチンのコールに復号化してもよい。] 図5 [0078] リクエストルータ510は、命令キャッシュ514と、インタフェース534と、データキャッシュ542と、1つ以上の追加の実行ユニット(GEU550、JBU554、MCU558、およびEDU562など)に結合される。さらに、リクエストルータ510が、1つ以上の外部バスと結合されるように構成される。例えば、リクエストルータ510は、ノースブリッジとの通信を行いやすいようにフロントサイドバスに結合されるように構成されてもよい。いくつかの実施形態において、リクエストルータは、ハイパートランスポート(HT)バスに結合されるように構成されてもよい。] [0079] リクエストルータ510は、命令キャッシュ514およびデータキャッシュ542からシステムメモリへ(例えば、ノースブリッジを経由して)メモリアクセスリクエストをルーティングし、システムメモリから命令キャッシュ514へ命令をルーティングし、およびシステムメモリからデータキャッシュ542へデータをルーティングするように構成される。加えて、リクエストルータ510は、インタフェース534と、1つ以上の追加の実行ユニット(GEU550、JBU554、MCU558、およびEDU562などの)との間で命令およびデータをルーティングするように構成される。1つ以上の追加の実行ユニットは、「コプロセッサのような」方式で動作してもよい。] [0080] 命令キャッシュ514は、システムメモリから新しくアクセスされた命令のコピーを格納する。(システムメモリはプロセッサ500の外部にある。)FDSユニット518は、命令キャッシュ514から第1の命令ストリームをフェッチし、FDSユニット522は、命令キャッシュ514から第2の命令ストリームをフェッチする。いくつかの実施形態において、第1のストリームの命令は、上述したように、プロセッサ命令セットPから引き出され、第2のストリームの命令は、上述したように、第2の命令セットQから引き出される。図6は、第1のストリームの一例610および第2のストリームの一例620を示す。命令I0、I1、I2、I3、...は、プロセッサ命令セットPの命令である。命令V0、V1、V2、V3、...は、第2の命令セットQの命令である。] 図6 [0081] 上述したように、プロセッサ命令セットPは、汎用処理命令の少なくとも1つのセットを含む。プロセッサ命令セットPはまた、整数および/または浮動小数点SIMD命令を含んでもよい。] [0082] 上述したように、第2の命令セットQは、1つ以上の命令セット、例えば、グラフィックス演算を実行するための命令セット、Javaバイトコード、マネージドコード、暗号化および復号化演算を実行するための命令セット、ビデオ処理演算を実行するための命令セット、およびマトリックスおよびベクトル演算を実行するための命令セットの1つ以上を含んでもよい。] [0083] FDSユニット518は、フェッチされた第1の命令ストリームを実行可能な演算(op)に復号化する。第1のストリームの各命令は、1つ以上のopに復号化される。命令の一部(例えば、より複雑な命令の一部)は、マイクロコードROMにアクセスすることによって復号化されてもよい。さらに、命令の一部は、1対1の方式で復号化されてもよい。例えば、フェッチされた命令の一部が、結果的に得られたopが、フェッチされた命令と同一である(または類似する)ように復号化されてもよい。1つの実施形態において、第1のストリームの任意の浮動小数点命令が、1対1の方式で復号化されてもよい。FDSユニット518は、実行ユニット526−1〜526−Nおよびロード/ストアユニット430で実行するためのop(第1のストリームの復号化から得られる)をスケジューリングする。] [0084] FDSユニット522は、フェッチされた命令の第2のストリームを実行可能な演算(op)に復号化する。第2のストリームの各命令は、1つ以上のopに復号化される。第2のストリームの命令の一部(またはすべて)が、1対1の方式で復号化されてもよい。例えば、1つの実施形態において、第2のストリームの任意のグラフィックス命令、Javaバイトコード、マネージドコード、または暗号化/復号化コードが、1対1の方式で復号化されてもよい。FDSユニット522は、1つ以上の追加の実行ユニット(GEU550、JBU554、MCU558、およびEDU562など)で実行するためのop(第2のストリームの復号化から得られる)をスケジューリングする。FDS522は、送出バス523、インタフェースユニット534、およびリクエストルータ510を経由して1つ以上の追加の実行ユニットにopを送り出す。] [0085] GEU550を含むこれらの実施形態において、FDSユニット522は、第2のストリームの任意のグラフィックス命令を特定し、GEUで実行するためのグラフィックス命令(すなわち、グラフィックス命令の復号化から得られたop)をスケジューリングする。FDSユニット522は、各グラフィックス命令をインタフェース534へ送ってもよく、各グラフィックス命令は、インタフェース534からリクエストルータ510を介してGEU550へ転送される。] [0086] JBU554を含むこれらの実施形態において、FDSユニット522は、第2のストリームの任意のJavaバイトコードを特定し、JBU554において実行するためのJavaバイトコードをスケジューリングする。FDSユニット522は、各Javaバイトコード命令をインタフェース534に送っても良く、各Javaバイトコード命令は、インタフェース534からリクエストルータ510を介してJBU554に転送される。] [0087] MCU558を含むこれらの実施形態において、FDSユニット522は、第2のストリームの任意のマネージドコードを特定し、MCU558において実行するためのマネージドコードをスケジューリングする。FDSユニット522は、各マネージドコード命令をインタフェース534に送ってもよく、各マネージドコード命令は、インタフェース534からリクエストルータ510を介してMCU558に転送される。] [0088] EDUユニット562を含むこれらの実施形態において、FDSユニット522は、第2のストリームの任意の暗号化または復号化命令を特定し、EDUユニット562において実行するための命令をスケジューリングする。FDSユニット522は、各暗号化または復号化命令をインタフェース534に送ってもよく、各暗号化または復号化命令は、インタフェース534からリクエストルータ510を介してEDU562に転送される。] [0089] 1つ以上の追加の実行ユニット(GEU550、JBU554、MCU558、およびEDU562)の各々は、opを受信し、opを実行し、リクエストルータ510を経由してインタフェース534にopの完了を指示する情報を戻す。] [0090] 上述したように、FDSユニット518および522は、第1および第2のストリームの命令をopに復号化し、実行ユニットの適切なユニットで実行するためのopをスケジューリングする。いくつかの実施形態において、FDSユニット518は、スーパースカラー演算、アウトオブオーダー(OOO)実行、マルチスレッド実行、投機的実行、分岐予想、またはこれらの任意の組み合わせに対して構成される。FDSユニット522は、同様に構成されてもよい。このように、さまざまな実施形態において、FDSユニット518および/またはFユニット522は、実行ユニットの利用可能性を決定するための論理、2つ以上のopの処理が可能な2つ以上の実行ユニットが利用可能であれば、2つ以上のopを(所与のクロックサイクルで)並列に送り出すための論理、opのアウトオブオーダー実行をスケジューリングし、opのインオーダーリタイアメントを保証するための論理、複数のスレッドおよび/または複数のプロセス間のコンテクストスイッチングを実行するための論理などのさまざまな組み合わせを含んでもよい。] [0091] ロード/ストアユニット530は、データキャッシュ542に結合され、メモリ書き込みおよびメモリ読み取り演算を実行するように構成される。メモリ書き込み演算のために、ロード/ストアユニット530は、物理アドレスおよび関連する書き込みデータを発生してもよい。物理アドレスおよび書き込みデータは、データキャッシュ542へ後で送信するためのストアキュー(図示せず)に入力されてもよい。メモリ読み取りデータは、データキャッシュ542から(または最新のストアの場合にストアキューにあるエントリから)ロード/ストアユニット530に供給されてもよい。] [0092] 実行ユニット526−1〜526−Nは、1つ以上の整数パイプラインと、1つ以上の浮動小数点ユニットとを含んでもよい。1つ以上の整数パイプラインは、整数演算(加算、減算、乗算、および除算など)を実行するためのリソースと、論理演算(AND、OR、および否定など)、ビット操作(シフトおよび循環シフトなど)とを含んでもよい。いくつかの実施形態において、1つ以上の整数パイプラインのリソースが、SIMD整数演算を実行するように動作可能である。1つ以上の浮動小数点ユニットは、浮動小数点演算を実行するためのリソースを含んでもよい。いくつかの実施形態において、1つ以上の浮動小数点ユニットのリソースは、SIMD浮動小数点演算を実行するように動作可能である。] [0093] 1つの実施形態のセットにおいて、実行ユニット526−1〜526−Nは、整数および/または浮動小数点SIMD演算を実行するように構成された1つ以上のSIMDを含む。] [0094] 図5に示すように、実行ユニット526−1〜526−Nおよびロード/ストアユニット430は、送出バス519および結果バス536に結合されてもよい。実行ユニット526−1〜526−Nおよびロード/ストアユニット530は、送出バス519を経由してFDSユニット518からopを受信し、結果バス536を経由してレジスタファイル538に実行の結果を送る。1つ以上の追加のユニット(GEU550、JBU554、MCU558、およびEDU562など)は、送出バス523、インタフェース534、およびリクエストルータ510を経由してFDSユニット522からopを受信し、リクエストルータ510を経由してインタフェース534に各op実行の完了を指示する情報を送る。] 図5 [0095] レジスタファイル538は、フィードバック経路546に結合されることで、レジスタファイル538からのデータを、ソースオペランドとして実行ユニット(実行ユニット526−1〜526−N、ロード/ストアユニット530、および1つ以上の追加の実行ユニットを含む)に供給可能になる。] [0096] バイパス経路544は、結果バス536とフィードバック経路544との間を結合し、実行の結果が、レジスタファイル538を迂回し、実行ユニットへソースオペランドとしてより直接供給されうる。レジスタファイル538は、アーキテクチャ化レジスタのセット用の物理ストレージを含んでもよい。] [0097] いくつかの実施形態において、FDSユニット522は、1つ以上の追加の実行ユニットおよびロード/ストアユニット530に加えて、実行ユニット456−1〜526−N(またはこれらのユニットのいくつかのサブセット)にopを送るように構成される。このように、送出バス523は、ロード/ストアユニット530およびインタフェース534に加えて、実行ユニット526−1〜526−Nの1つ以上に結合されてもよい。] [0098] 上述したように、実行ユニット526−1〜526−Nは、1つ以上の浮動小数点ユニットを含んでもよい。各浮動小数点ユニットは、浮動小数点命令(例えば、x87浮動小数点命令、またはIEEE754/854に準拠する浮動小数点命令)を実行するように構成されてもよい。各浮動小数点ユニットは、加算器ユニット、乗算器ユニット、除算/平方根ユニットなどを含んでもよい。各浮動小数点ユニットは、コプロセッサのように動作してもよく、FDSユニット518は、浮動小数点命令を浮動小数点ユニットに直接送り出す。] [0099] 上述したように、いくつかの実施形態において、プロセッサ500は、プロセッサ命令セットPおよび第2の命令セットQをサポートする。プロセッサ命令セットPの命令および第2の命令セットQの命令が、同一のメモリ空間をアドレス指定することに留意されたい。このように、2つのスレッドが、システムメモリまたは内部レジスタ(すなわち、レジスタファイル538のレジスタ)を介して高速通信する場合、プログラマが、P命令を用いて第1のプログラムスレッドを組み立て、Q命令を用いて第2のプログラムを組み立てることが容易になる。スレッドが単一のプロセッサ(すなわち、プロセッサ500)で実行されるため、2つのスレッド間で通信を行うために、オペレーティングシステムの機能を呼び出す必要がない。] [0100] 1つの実施形態において、プロセッサ500は、単一の集積回路上に構成されてもよい。別の実施形態において、プロセッサ500は、複数の集積回路を含んでもよい。例えば、1つ以上の追加の実行ユニットは、1つ以上の集積回路において実現されてもよい。] [0101] 上述したように、いくつかの実施形態において、プロセッサ100、200、300、および400の任意(またはすべて)が、DirectXなどの業界標準グラフィックスAPIの所与のバージョンに適合する命令を実行可能なグラフィックス実行ユニット(GEU)を含んでもよい。API規格の後続する更新が、ソフトウェアに実装されてもよい。(これは、グラフィックスAPIの新しいバージョンをサポートするために、グラフィックスアクセラレータおよびそれらのオンボードGPUのデザインを変更するという従来の高コストのやり方とは対比的である。)] [0102] プロセッサ100、200、300、および400のいくつかの実施形態において、命令およびデータが同一のメモリに格納される。他の実施形態において、命令およびデータは、異なるメモリに格納される。] [0103] <グラフィックス実行ユニット> グラフィックス実行ユニット(例えば、GEU130、GEU250、GEU450、およびGEU550)のさまざまな上述した実施形態は、図7のGEU700によって実現されてもよい。GEU700は、グラフィックス命令セットの命令を受信し、グラフィックス命令の受信に応答してグラフィックス演算を実行するように構成される。1つの実施形態において、GEU700は、入力ユニット715と、頂点シェーダ720と、ジオメトリシェーダ720と、ラスタ化ユニット735と、ピクセルシェーダ740と、出力/マージユニット745とを含むパイプラインとしてまとめられる。GEU700は、ストリーム出力ユニット730を含んでもよい。] 図7 [0104] 入力ユニット715は、入力データストリームを受信し、受信したグラフィックス命令によって決定されるようなグラフィックプリミティブ(三角形、線、および点など)にデータをアセンブルするように構成される。入力ユニット715は、グラフィックスパイプラインの残りにグラフィックスプリミティブを供給する。] [0105] 頂点シェーダ720は、受信したグラフィックス命令によって決定される頂点で動作するように構成される。例えば、頂点シェーダ720は、頂点で変形、スキニング、およびライティングを実行するようにプログラミングされてもよい。いくつかの実施形態において、頂点シェーダ720は、頂点シェーダに供給される各入力頂点に対して単一の出力頂点を生成する。いくつかの実施形態において、頂点シェーダ720は、受信したグラフィックス命令の一部として供給された1つ以上の頂点シェーダを受信し、頂点で1つ以上の頂点シェーダプログラムを実行するように構成される。] [0106] ジオメトリシェーダ725は、受信したグラフィックス命令によって決定されるような全プリミティブ(例えば、三角形、線、または点)を処理する。各入力プリミティブに対して、ジオメトリシェーダは、入力プリミティブを破棄し、または1つ以上の新しいプリミティブを出力として発生する。1つの実施形態において、ジオメトリシェーダはまた、ジオメトリ増幅および非増幅を実行するように構成される。いくつかの実施形態において、ジオメトリシェーダ725は、受信したグラフィックス命令の一部として1つ以上のジオメトリシェーダプログラムを受信し、プリミティブに1つ以上のジオメトリシェーダプログラムを実行するように構成される。] [0107] ストリーム出力ユニット730は、グラフィックスパイプラインからシステムメモリにストリームとしてプリミティブデータを出力するために構成される。この出力機能は、受信したグラフィックス命令によって制御される。メモリに送信されたデータストリームは、入力データとしてグラフィックスパイプラインに戻されうる(戻されることが望ましい場合)。] [0108] ラスタ化ユニット735は、ジオメトリシェーダ725からプリミティブを受信し、グラフィックス命令によって決定されるようなピクセルにプリミティブをラスタ化するように構成される。ラスタ化は、所与のプリミティブにわたったピクセル位置で選択された頂点成分を補間することを伴う。ラスタ化はまた、視錐台にプリミティブをクリッピングし、透視除算演算を実行し、およびビューポートに頂点をマッピングすることを含んでもよい。] [0109] ピクセルシェーダユニット740は、所与のプリミティブにおいて各ピクセルに対してパーピクセルデータ(色など)を発生する。例えば、ピクセルシェーダ740は、パーピクセルライティングを適用してもよい。いくつかの実施形態において、ピクセルシェーダユニット740は、受信したグラフィックス命令の一部として1つ以上のピクセルシェーダプログラムを受信し、1つ以上のピクセルシェーダプログラムをピクセルごとに実行するように構成される。ラスタ化ユニットは、ラスタ化プロセスの一部として1つ以上のピクセルシェーダプログラムの実行を呼び出してもよい。] [0110] 出力ユニット745は、1つ以上の出力データタイプ(例えば、ピクセルシェーダ値、深度情報、およびステンシル情報)と、ターゲットバッファおよび深度/ステンシルバッファのコンテントとを結合して、最終パイプライン出力を生成するように構成される。] [0111] いくつかの実施形態において、GEU700はまた、テクスチャサンプラ737と、テクスチャキャッシュ738とを含む。テクスチャサンプラ737は、システムメモリからテクスチャキャッシュ738を経由してテクセルデータにアクセスし、テクセルデータ(例えば、MIPMAPデータ)にテクスチャ補間を実行して、テクスチャマッピングをサポートするように構成される。テクスチャサンプラによって得られた補間データは、ピクセルシェーダ740に与えられてもよい。] [0112] いくつかの実施形態において、GEU700は、並列処理用に構成されてもよい。例えば、GEU700は、頂点ストリーム、プリミティブストリーム、ピクセルストリームでより効率的に動作するためにパイプライン処理されてもよい。さらに、GEU700内のさまざまなユニットが、ベクトルオペランドで動作するように構成されてもよい。例えば、1つの実施形態において、GEU700は、64要素ベクトルをサポートしてもよく、この場合、各要素は、単精度浮動小数点(32ビット)数である。] [0113] <マルチコア> 本明細書に記載するプロセッサ実施形態の任意のものが、複数のコアを有するように構成されてもよい。例えば、プロセッサ100は、図1に示す要素を各々が含む複数のコアを含んでもよい。各コアは、独自の専用テクスチャメモリと、L1キャッシュとを有してもよい。プロセッサ200、300、および400は、複数のコアを有するように同様に構成されてもよい。マルチコアアーキテクチャの場合、プロセッサのコア数を増やすだけで、将来的に性能を向上させることができる。] 図1 [0114] マルチコア実施形態の任意のものにおいて、プロセッサ内のコアの1つ以上が、製造時の不備が原因で欠陥品になる可能性がある。このように、プロセッサは、プロセッサが残りの「良品」のコアで動作しうるように、欠陥品であると決定されたプロセッサ内の任意のコアを無効にする論理を含んでもよい。] [0115] いくつかの実施形態において、マルチコア実施例におけるマルチコアが、1つ以上のコプロセッサの共通のセットを共有してもよいことに留意されたい。] [0116] いくつかの実施形態において、汎用処理とグラフィックスレンダリングとの間の負荷バランシングが、汎用処理タスクを実行しているスレッド数と、グラフィックスレンダリングタスクを実行しているスレッド数とのバランスをとることによって、マルチスレッドのマルチコアプロセッサで達成されてもよい。このように、プログラマは、負荷バランシングをより明確に制御してもよい。マルチスレッドのソフトウェアデザインが、OOO処理の機会の数を減らす傾向があるため、各コアは、AMDによって製造されたOpteronプロセッサのようなプロセッサと比較して、OOO処理の複雑性を低減させて構成されてもよい。各コアは、複数のスレッド間でスイッチングするように構成されてもよい。スレッドのスイッチングは、メモリおよび命令アクセスの待ち時間を隠す傾向がある。] [0117] いくつかの実施形態において、プロセッサの内部のRAMまたはプロセッサの内部のキャッシュメモリ場所(L1キャッシュ場所)が、コア間の通信を行うために、メモリ空間のいくつかの部分にマッピングされてもよい。このように、1つのコアで実行するスレッドが、予約済みのアドレスレンジのアドレスに書き込みを行ってもよい。次に、書き込みデータは、対応するRAM場所またはキャッシュメモリ場所に格納される。次に、別のコア(または場合によっては、同一のコア)で実行する別のスレッドが、同一のアドレスから読み取られうる。このように、システムメモリへのアクセスに関連する長い待ち時間なしに、スレッド間およびコア間の通信が達成されてもよい。] [0118] いくつかの実施形態において、マルチコアプロセッサ内のスレッド間の通信が、プロセッサの内部にあり、FIFOのように挙動する非メモリマッピング場所のセットを用いて達成されてもよい。次に、命令セットは、多数の命令を含み、各命令は、暗黙的なソースまたはターゲットとしてFIFOに依存する。例えば、命令セットは、FIFOからのデータの読み込みを暗黙的に指定するロード命令を含んでもよい。FIFOが現在空であれば、現在のスレッドは中断されてもよく、またはトラップがアサートされてもよい。同様に、命令セットは、FIFOにデータの格納を暗黙的に指定するストア命令を含んでもよい。FIFOが現在満杯であれば、現在のスレッドは中断されてもよく、またはトラップがアサートされてもよい。] [0119] 本願は、一般に、プロセッサに応用可能であってもよい。]
权利要求:
請求項1 複数の実行ユニットと、グラフィックス実行ユニット(GEU)と、前記GEUおよび前記複数の実行ユニットに結合され、命令ストリームをフェッチするように構成された第1のユニットとを備え、前記命令ストリームがプロセッサ命令セットに適合する第1の命令とグラフィックス演算を実行するための第2の命令とを含み、前記第2の命令がピクセルについてピクセルシェーディングを実行するための少なくとも1つの命令を含み、前記第1のユニットが、前記第1の命令および前記第2の命令をデコードし、前記複数の実行ユニットについて前記デコードされた第1の命令の少なくとも一つのサブセットの実行をスケジューリングし、前記GEUについて前記デコードされた第2の命令の少なくとも1つのサブセットの実行をスケジューリングするように構成される、プロセッサ。 請求項2 前記第1の命令および前記第2の命令が同一のメモリ空間にアドレス指定する、請求項1に記載のプロセッサ。 請求項3 インタフェースユニットと、リクエストルータとをさらに備え、前記インタフェースユニットが、前記リクエストルータを経由して前記GEUに前記デコードされた第2の命令を転送するように構成され、前記GEUがコプロセッサ方式で動作するように構成される、請求項1に記載のプロセッサ。 請求項4 前記第2の命令がジオメトリプリミティブにジオメトリシェーディングを実行するための命令を含む、請求項1に記載のプロセッサ。 請求項5 前記第2の命令がジオメトリプリミティブにピクセルシェーディングを実行するための命令を含む、請求項1に記載のプロセッサ。 請求項6 複数の第1の実行ユニットと、1つ以上の第2の実行ユニットと、前記複数の第1の実行ユニットに結合され、第1の命令ストリームをフェッチするように構成された第3のユニットと、前記1つ以上の第2の実行ユニットに結合され、第2の命令ストリームをフェッチするように構成された第4のユニットとを備え、前記第1の命令ストリームが、プロセッサ命令セットに適合する第1の命令を含み、前記第3のユニットが、前記第1の命令をデコードし、前記複数の実行ユニットについて前記デコードされた第1の命令の少なくとも1つのサブセットの実行をスケジューリングするように構成され、前記第2の命令ストリームが、前記プロセッサ命令セットとは異なる第2の命令セットに適合する第2の命令を含み、前記第4のユニットが、前記第2の命令をデコードし、前記1つ以上の第2の実行ユニットについて前記デコードされた第2の命令の少なくとも1つのサブセットの実行をスケジューリングするように構成される、プロセッサ。 請求項7 前記第1の命令および前記第2の命令が同一のメモリ空間にアドレス指定する、請求項6に記載のプロセッサ。 請求項8 インタフェースユニットと、リクエストルータとをさらに備え、前記インタフェースユニットが前記リクエストルータを経由して前記1つ以上の第2の実行ユニットに前記デコードされた第2の命令を転送するように構成され、前記1つ以上の第2の実行ユニットがコプロセッサとして動作するように構成される、請求項6に記載のプロセッサ。 請求項9 複数の第1の実行ユニットと、1つ以上の第2の実行ユニットと、前記複数の第1の実行ユニットおよび前記1つ以上の第2の実行ユニットに結合され、命令ストリームをフェッチするように構成された制御ユニットとを備え、前記命令ストリームが、プロセッサ命令セットに適合する第1の命令と、前記プロセッサ命令セットとは異なる第2の命令セットに適合する第2の命令とを含み、前記制御ユニットが、前記第1の命令をデコードし、前記複数の第1の実行ユニットについて前記デコードされた第1の命令の少なくとも1つのサブセットの実行をスケジューリングし、前記第2の命令をデコードし、前記1つ以上の第2の実行ユニットについて前記デコードされた第2の命令の少なくとも1つのサブセットの実行をスケジューリングするようにさらに構成される、プロセッサ。 請求項10 インタフェースユニットと、リクエストルータとをさらに備え、前記インタフェースユニットが前記リクエストルータを経由して前記1つ以上の第2の実行ユニットに前記デコードされた第2の命令を転送するように構成され、前記1つ以上の第2の実行ユニットがコプロセッサ方式で動作するように構成される、請求項9に記載のプロセッサ。
类似技术:
公开号 | 公开日 | 专利标题 US10564975B2|2020-02-18|Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines US20190114176A1|2019-04-18|Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions JP6143872B2|2017-06-07|装置、方法、およびシステム US9639365B2|2017-05-02|Indirect function call instructions in a synchronous parallel thread processor JP5474014B2|2014-04-16|サブワード実行を用いるvliwベースのアレイプロセッサで条件付き実行をサポートする方法及び装置 EP3314398B1|2020-08-05|Reuse of decoded instruction blocks in a block based architecture EP2524303B1|2019-08-07|Mapping between registers used by multiple instruction sets US7437534B2|2008-10-14|Local and global register partitioning technique KR101842058B1|2018-03-27|푸싱형 버퍼 복사 및 저장 기능성을 제공하기 위한 명령어 및 논리 JP3149348B2|2001-03-26|代理命令を用いる並列処理システム及び方法 KR101804008B1|2017-12-01|벡터 산개-op 및 집결-op 기능을 제공하는 명령어 및 로직 US10067768B2|2018-09-04|Execution of divergent threads using a convergence barrier KR101321655B1|2013-10-30|믹스된 정밀도 명령 실행을 갖는 프로그래머블 스트리밍 프로세서 US8970608B2|2015-03-03|State objects for specifying dynamic state EP2483772B1|2015-11-11|Trap handler architecture for a parallel processing unit US10109099B2|2018-10-23|Method and apparatus for efficient use of graphics processing resources in a virtualized execution enviornment US5452426A|1995-09-19|Coordinating speculative and committed state register source data and immediate source data in a processor EP1137984B1|2003-07-23|A multiple-thread processor for threaded software applications US10360039B2|2019-07-23|Predicted instruction execution in parallel processors with reduced per-thread state information including choosing a minimum or maximum of two operands based on a predicate value EP3314401B1|2020-02-12|Block-based architecture with parallel execution of successive blocks JP3547139B2|2004-07-28|プロセッサ US20200210341A1|2020-07-02|Prefetch kernels on data-parallel processors US8069340B2|2011-11-29|Microprocessor with microarchitecture for efficiently executing read/modify/write memory operand instructions US9459876B2|2016-10-04|System, method, and computer program product for managing divergences and synchronization points during thread block execution by using a double sided queue for token storage US9830158B2|2017-11-28|Speculative execution and rollback
同族专利:
公开号 | 公开日 US20090160863A1|2009-06-25| TW200929063A|2009-07-01| CN101981543A|2011-02-23| GB2468461A|2010-09-08| GB201011501D0|2010-08-25| KR20100110831A|2010-10-13| DE112008003470T5|2010-10-28| WO2009082428A1|2009-07-02|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题
法律状态:
优先权:
[返回顶部]
申请号 | 申请日 | 专利标题 相关专利
Sulfonates, polymers, resist compositions and patterning process
Washing machine
Washing machine
Device for fixture finishing and tension adjusting of membrane
Structure for Equipping Band in a Plane Cathode Ray Tube
Process for preparation of 7 alpha-carboxyl 9, 11-epoxy steroids and intermediates useful therein an
国家/地区
|