(57)【特許請求の範囲】
【請求項１】
第１の命令ストリーム内の第１の一連の命令をスケジューラユニットから受信し、前記第１の一連の命令をコプロセッサユニットへ供給し、前記第１の一連の命令に対応する第１の一連の実行結果を前記コプロセッサユニットから受信するように構成される第１のプロセッサ機能ユニットを含む複数のプロセッサ機能ユニットと、前記複数のプロセッサ機能ユニットによって実行された命令をリタイヤさせるように構成されるリタイヤメントユニットと、を備えた装置であって、
前記第１の一連の実行結果の送信は前記コプロセッサユニットによって開始され、前記第１のプロセッサ機能ユニットは前記第１の一連の実行結果を前記リタイヤメントユニットに供給して前記第１の一連の命令のリタイヤメントを生じさせるように構成されるリタイヤメントユニットインタフェースを含む装置。
【請求項２】
前記装置は前記スケジューラユニットを備え、複数のプロセッサ機能ユニットはロードストアユニットを含み、前記スケジューラユニットは前記第１の命令ストリームから第２の一連の命令をフェッチすると共に前記複数のプロセッサ機能ユニットの１つを選択して前記第２の一連の命令を実行するように構成され、前記第１のプロセッサ機能ユニットは前記スケジューラユニットから前記第１の一連の命令を受信するように構成されるスケジューラユニットインタフェースを含み、前記第１のプロセッサ機能ユニットは前記コプロセッサユニットとの通信に専用のプロセッサ機能ユニットであり、前記リタイヤメントユニットインタフェースは前記第１の一連の実行結果を直接的に前記リタイヤメントユニットに供給するように構成される請求項１の装置。
【請求項３】
前記第１のプロセッサ機能ユニットは前記コプロセッサユニット上で実行中のスレッドの実行状態を前記コプロセッサユニットで保存するように構成されている請求項１の装置。
【請求項４】
前記第１のプロセッサ機能ユニットは前記装置上で実行中の１つ以上のスレッドに関連する情報を記憶するように構成されるレジスタバンクを含み、前記１つ以上のスレッドは前記コプロセッサ上で実行中の対応するスレッドを有する請求項１の装置。
【請求項５】
前記コプロセッサユニットを含む複数のコプロセッサユニットを更に備え、
前記第１のプロセッサ機能ユニットは、前記複数のコプロセッサユニットの種々のコプロセッサユニットに複数の一連の命令を供給し、前記複数のコプロセッサユニットの種々のコプロセッサユニットから対応する複数の一連の実行結果を受信するように構成され、
前記第１のプロセッサ機能ユニットは、経路付け情報を維持すると共に前記複数の一連の命令を前記経路付け情報に基いて前記複数のコプロセッサユニットの種々のコプロセッサユニットへ経路付けるように更に構成されている請求項１の装置。
【請求項６】
前記第１のプロセッサ機能ユニットは前記第１の一連の命令が完了したかどうかを特定する情報を記憶するように構成されている請求項１の装置。
【請求項７】
コンパニオンプロセッサユニット内のコプロセッサインタフェースユニットから、前記コンパニオンプロセッサユニットによって共有される命令ストリームからの命令を受信するように構成されるコンパニオンプロセッサインタフェースユニットと、
当該受信した命令を実行して第１の一連の実行結果を生成すると共に前記コンパニオンプロセッサインタフェースユニットを介しての前記コンパニオンプロセッサユニットへの前記第１の一連の実行結果の伝達を開始するように構成される処理コアと、を備えたコプロセッサユニットであって、
前記コプロセッサインタフェースユニットは当該伝達された第１の一連の実行結果を直接的に前記コンパニオンプロセッサユニットのリタイヤメントユニットに供給して前記受信した命令のリタイヤメントを生じさせるように構成されるリタイヤメントユニットインタフェースを含み、前記リタイヤメントユニットは前記コンパニオンプロセッサユニット内の複数のプロセッサ機能ユニットによって実行された命令をリタイヤさせるように構成されるコプロセッサユニット。
【請求項８】
前記コプロセッサユニットは前記コンパニオンプロセッサユニット上で実行中のスレッドをサスペンド及びレジュームするように構成されている請求項７のコプロセッサユニット。
【請求項９】
前記コプロセッサユニットは前記受信した命令を実施するためのマイクロコード命令を生成するように構成されている請求項７のコプロセッサユニット。
【請求項１０】
スケジューラユニット、複数のプロセッサ機能ユニット、及びリタイヤメントユニットを備えた装置であって、
前記複数のプロセッサ機能ユニットは、命令ストリーム内の第１の一連の命令を前記スケジューラユニットから受信し、前記第１の一連の命令をコプロセッサユニットへ供給し、前記第１の一連の命令に対応する第１の一連の実行結果を前記コプロセッサユニットから受信するように構成される第１のプロセッサ機能ユニットを含み、前記第１の一連の実行結果の送信は前記コプロセッサユニットによって開始され、前記リタイヤメントユニットは前記複数のプロセッサ機能ユニットによって実行された命令をリタイヤさせるように構成され、前記第１のプロセッサ機能ユニットは前記第１の一連の実行結果を直接的に前記リタイヤメントユニットに供給して前記第１の一連の命令のリタイヤメントを生じさせるように構成されるリタイヤメントユニットインタフェースを含み、前記第１のプロセッサ機能ユニットは前記コプロセッサユニットとの通信に専用のプロセッサ機能ユニットである装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、概してコンピュータ処理に関し、更に特定的には命令ストリームを共有するプロセッサユニット及びコプロセッサユニット上で命令を実行することに関する。
【発明の概要】
【課題を解決するための手段】
【０００２】
コプロセッサユニット上で命令を実行するための種々の技術が開示される。
【０００３】
１つの実施形態では、コプロセッサユニットに結合される第１のプロセッサ機能ユニットを含む装置が開示される。１つの実施形態では、第１のプロセッサ機能ユニットは、スケジューラユニットから、第１の命令ストリーム内の第１の一連の命令を受信し、そして第１の一連の命令をコプロセッサユニットへ供給するように構成される。次いで、第１のプロセッサ機能ユニットは、コプロセッサユニットから、第１の一連の命令に対応する第１の一連の実行結果を受信するように構成され、ここでは、コプロセッサユニットが第１の一連の実行結果の送信を開始する。特定の実施形態においては、装置は、第１のプロセッサ機能ユニットをコプロセッサユニットに結合すると共にパケットベースのプロトコルを実装する共有バス回路を含む。幾つかの実施形態では、パケットベースのプロトコルは、ハイパートランスポートプロトコル又はＰＣＩエクスプレスプロトコルである。他の実施形態においては、第１のプロセッサ機能ユニットは、コプロセッサユニット内に配置される翻訳ルックアサイドバッファ（ＴＬＢ）内のエントリを変更するように構成される。
【０００４】
他の実施形態では、プロセッサインタフェースユニット及び処理コアを含むコプロセッサユニットが開示される。プロセッサインタフェースユニットは、コンパニオンプロセッサユニット内のコプロセッサインタフェースユニットから命令を受信するように構成され、ここでは、命令は、コンパニオンプロセッサユニットによって共有される命令ストリームからのものである。処理コアは、受信した命令を実行して、第１の一連の実行結果を生成すると共にプロセッサインタフェースユニットを介してのコンパニオンプロセッサユニットへの第１の一連の実行結果の伝達を開始するように構成される。特定の実施形態においては、処理コアは、ＴＬＢを含み、そしてコンパニオンプロセッサ上で実行中のオペレーティングシステムへプロセッサインタフェースを介してページフォールトの表示を送信し、オペレーティングシステムがページフォールトを使用可能にしたことの表示をプロセッサインタフェースを介して受信するように構成される。種々の実施形態において、処理コアはページテーブルウォークを実行するように構成される。幾つかの実施形態では、コプロセッサは、メモリのコヒーレントビューをコンパニオンプロセッサユニットと共有する。
【０００５】
他の実施形態では、コプロセッサユニット及びコンパニオンプロセッサユニットを含むコンピュータシステムによって実行可能なプログラム命令を記憶している有形的コンピュータ可読メモリ媒体が開示される。記憶されているプログラム命令は、各々が第１の一連のオプコードの１つを有する第１の一連のプログラム命令を含み、ここでは、第１の一連のプログラム命令は、コンパニオンプロセッサユニット内の１つ以上の機能ユニットによって実行可能である。記憶されているプログラム命令はまた、各々が第２の一連のオプコードの１つを有する第２の一連のプログラム命令を含み、ここでは、第２の一連のプログラム命令は、コプロセッサユニット内で実行可能である。コンパニオンプロセッサユニットは、第２の一連のプログラム命令内のプログラム命令を受信することに応答して、コプロセッサユニットに結合されているコンパニオンプロセッサユニットのコプロセッサインタフェースユニットへそれらの命令を供給するように構成される。コプロセッサインタフェースユニットは、第２の一連の命令内のプログラム命令を伝達すると共に伝達された命令の実行結果のコプロセッサユニット開始の送信を次いで受信するように構成される。
【図面の簡単な説明】
【０００６】
以下の詳細な説明は添付の図面を参照しており、これを簡単に説明しておく。
【０００７】
【図１】図１はコンピュータシステムの１つの実施形態のブロック図である。
【０００８】
【図２】図２はプロセッサユニット及び１つ以上のコプロセッサユニットを含むプロセッササブシステムの１つの実施形態のブロック図である。
【０００９】
【図３】図３はコプロセッサインタフェースユニットを含むプロセッサユニットの１つの実施形態のブロック図である。
【００１０】
【図４】図４はコプロセッサユニットの１つの実施形態のブロック図である。
【００１１】
【図５】図５はコプロセッサインタフェースの１つの実施形態のブロック図である。
【００１２】
【図６Ａ】図６Ａはコプロセッサユニットの種々の実施形態のブロック図（その１）である。
【図６Ｂ】図６Ｂはコプロセッサユニットの種々の実施形態のブロック図（その２）である。
【図６Ｃ】図６Ｃはコプロセッサユニットの種々の実施形態のブロック図（その３）である。
【図６Ｄ】図６Ｄはコプロセッサユニットの種々の実施形態のブロック図（その４）である。
【００１３】
【図７】図７はコプロセッサインタフェースを介してコプロセッサ上で命令を実行するための方法の１つの実施形態のフローチャートである。
【００１４】
【図８】図８はコプロセッサ上でスレッドを切り換えるための方法の１つの実施形態のフローチャートである。
【００１５】
【図９】図９は仮想アドレス空間を用いるコプロセッサユニットによって実施される方法の１つの実施形態のフローチャートである。
【００１６】
【図１０】図１０は第１のプロセッサ機能ユニットによって実施される方法の１つの実施形態のフローチャートである。
【００１７】
【図１１】図１１はコプロセッサユニットによって実施される方法の１つの実施形態のフローチャートである。
【００１８】
【図１２】図１２はコンピュータ可読媒体の１つの実施形態のブロック図である。
【発明を実施するための形態】
【００１９】
本明細書は「１つの実施形態」又は「実施形態」への参照を含む。「１つの実施形態において」又は「実施形態において」の語句の出現は、必ずしも同一の実施形態を参照しない。特定の特徴、構成、又は特性は、本開示と合致する任意の適切な様態で組み合わされてよい。
【００２０】
用語集。以下の幾つかの段落は、本開示（添付の特許請求の範囲を含む）において見出される用語に対する定義及び／又は文脈を提供する。
【００２１】
「備える、備えた(comprising)。」この用語は非制約的(open-ended)である。添付の特許請求の範囲において用いられるように、この用語は追加的な構成及びステップを排除しない。「第１のプロセッサ機能ユニット…を備えた装置」と記載している請求項を考える。当該請求項は、追加的な構成要素（例えば第２のプロセッサ機能ユニット、キャッシュ、等）を含むということから当該装置を除外しない。
【００２２】
「コンピュータシステム。」この用語は、当該分野においてその普通の且つ認められている意味を有し、各々が１つ以上のプロセッサユニット及びメモリを含む互いに動作している１つ以上の計算デバイスを含む。
【００２３】
「構成される、構成された(configured)。」ここで用いられるように、この用語は、ハードウエア又はソフトウエアの特定の一片が、動作させられるときに特定の単一又は複数のタスクを実行するように配置されていることを意味する。従って、タスクＡを実行するように「構成される」コンピュータシステムは、そのコンピュータシステムがそのコンピュータシステムの動作の間にタスクＡを実行し若しくは実行するために用いられ得る回路、メモリ内に記憶されるプログラム命令、又は他の構造を含んでいることを意味する。同様に、タスクＢを実行するによう「構成される」コンピュータプログラムは、コンピュータシステムによって実行される場合にタスクＢを実行する命令を含む。
【００２４】
「ソフトウエア。」この用語は、当該分野においてその普通の且つ認められている意味を有し、任意の形態のコンピュータプログラムを含み、プログラムは、コンピュータシステムの動作を指示する命令のセット(sets of instructions)を含む。
【００２５】
「ソフトウエアアプリケーション。」この用語は広義にソフトウエアのインスタンス(instance)を参照する。コンピュータバックアッププログラムは、ある種のソフトウエアアプリケーションである。「ソフトウエアアプリケーション」の用語はまた、オペレーティングシステム上で実行中のプログラムに加えてオペレーティングシステムを含む。
【００２６】
「プロセッサユニット。」この用語は、当該分野においてその普通の且つ認められている意味を有し、プログラム命令を実行するように構成される任意の回路（例えば中央処理ユニット（ＣＰＵ））を少なくとも含む。ここで用いられるように、プロセッサユニットは、「主」プロセッサユニット又はコプロセッサユニットを参照する。コプロセッサユニットと連携して動作する主プロセッサユニットは、「ホスト」又は「コンパニオン」プロセッサユニットと称されることがある。プロセッサユニットは、単一のダイ上に１つ以上の処理「コア」を有していてよい。加えて、プロセッサユニットは、多重ダイにわたって分散されていてよい。
【００２７】
「処理コア(Processing core)。」この用語は、当該分野においてその普通の且つ認められている意味を有し、プロセッサユニット内の複数の処理回路の１つ（例えばＣＰＵ）を含む。例えば、プロセッサコアは、多重コア（チップレベル多重プロセッサ）デバイスの１つのコアを参照してよい。
【００２８】
「コプロセッサユニット。」この用語は、コンパニオンプロセッサの機能を補完するために用いられる任意のプロセッサユニットを広く参照する。命令ストリームをコンパニオンプロセッサと共有するコプロセッサユニットは、コンパニオンプロセッサの命令ストリームから分離される命令ストリームを受信するアクセレレータユニットとは異なる。
【００２９】
「命令(Instruction)。」この用語は、当該分野においてその普通の且つ認められている意味を有し、動作の幾つかのセット(some set of operations)を実行するようにプロセッサユニット又はコアに指示する一連のビット(a set of bits)を少なくとも含む。命令は、種々の実施形態において、命令識別子（例えばオプコード(opcodes)）、即時データ(immediate data)（例えばオペランド）、アドレス、等を含み得る。
【００３０】
「命令ストリーム。」この用語は、プロセッサユニット又はコアへ供給される時系列に連続した(consecutive-in-time)命令のシーケンス（例えばソフトウエアアプリケーションからの）を表していてよい。命令ストリームは、アドレス空間内で連続する(consecutive)命令の他に、何らかの元の順序に対して順序外で実行される命令をも含むことができる。
【００３１】
「実行結果(Execution results)。」この用語は、プロセッサユニット又はコアが実行中の命令の結果として生じる状態における任意の変化を広く参照する。例えば、実行結果は、結果値(resultant value)（例えば加算の合計）、状態／完了通知、例外の表示（例えばページフォールトを表示するフラグ）、指令(command)（例えば処理ユニットに実行中のスレッドをサスペンドするように伝えること）、等を含んでいてよい。
【００３２】
「スケジューラユニット(Scheduler unit)。」この用語は、実行のための命令を準備するプロセッサユニット又はコア内の回路を広く参照する（例えば、プロセッサユニット又はコア内での実行のための命令をフェッチし(fetches)、復号化し、及び／又はスケジューリングする回路、あるいはプロセッサユニット又はコア内の適切な機能ユニットに命令を指示する回路）。
【００３３】
「機能ユニット。」この用語は、当該分野においてその普通の且つ認められている意味を有し、命令を実行し又は命令がその利益のために実行されることを生じさせるプロセッサユニット又はコア内の任意の回路を広く参照する。プロセッサユニット又はコアは、各々が特定の機能（例えば固定小数点演算命令、浮動小数点演算命令、ロード／ストア命令、等）を専ら実行する多重機能ユニットを含んでいてよい。「機能ユニット」は、例えば、実行結果のコプロセッサ開始の送信を受信し、そして命令をリタイヤする(retires)回路を含む。
【００３４】
「共有バス回路(Shared bus circuit)。」この用語は、３つ以上のデバイスによって共有されるバス回路を参照する。従って、共有バス回路は、２つのデバイスの間にある「点対点(point-to-point)」バスとは異なる。
【００３５】
「メモリアクセスデバイス。」この用語は、１つ以上の処理ユニットがメモリにアクセスすることを可能にする回路（典型的にはディスクリートチップ）を広く参照する。
【００３６】
「スレッド(Thread)。」ここで用いられるように、この用語は、プログラムの他の側面とは独立して実行され得るプログラムの一部を参照する。
【００３７】
「多重スレッドにされた(Multithreaded)。」この用語は、多重スレッドの同時的な実行を支持するプロセッサユニット又はコアの能力を参照する。
【００３８】
「対応するスレッド(Corresponding thread)。」この用語は、異なるプロセッサユニット又はコア上で実行中の関連するスレッドを広く参照する。例えば、プロセッサ上で実行中のスレッドが、他のプロセッサ上で実行を開始するスレッドを起動する場合、これらのスレッドの各々は、他方に対して「対応する」ものとして説明される。互いに通信している一方で異なるプロセッサユニット又はコア上で実行中のスレッドもまた、「対応するスレッド」であり得る。
【００３９】
「レジューム(Resume)。」この用語は、多重スレッドにされたプロセッサ又はコア上のスレッドの実行を再起動する作用を参照する。
【００４０】
「サスペンド(Suspend)。」この用語は、多重スレッドにされたプロセッサ又はコア上のスレッドの実行を停止する作用を参照する。
【００４１】
「翻訳ルックアサイドバッファ(Translation Lookaside Buffer)（ＴＬＢ）。」この用語は、当該分野においてその普通の且つ認められている意味を有し、仮想アドレスの物理アドレスへの翻訳を記憶しているキャッシュ(cache)を含む。
【００４２】
「ページテーブルウォーク(Page table walk)。」この用語は、当該分野においてその普通の且つ認められている意味を有し、ＴＬＢ内での翻訳を探す(locate)ことができなかった後にメモリ内の物理アドレスへの仮想アドレスの翻訳を調べる(looking up)プロセスを含む。
【００４３】
次に図１を参照すると、コンピュータシステム１００の１つの実施形態が図示されている。本開示は、コンピュータシステム内に含まれるプロセッサユニット及びコプロセッサユニットの種々の実施形態を説明する。開示されるコンピュータシステムは、任意の適切な種類の計算デバイスであってよい。図示されるように、コンピュータシステム１００は、相互接続１６０（例えばシステムバス）を介してメモリ１２０と単一又は複数のＩ／Ｏインタフェース１４０とに結合されるプロセッササブシステム１８０を含む。単一又は複数のＩ／Ｏインタフェース１４０は１つ以上のＩ／Ｏデバイス１５０に結合される。コンピュータシステム１００は任意の様々な種類のデバイスであってよく、限定はされないが、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ若しくはノートブックコンピュータ、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、消費者デバイス、例えば携帯電話機、ページャ(pager)、又はパーソナルデータアシスタント（ＰＤＡ）を含む。コンピュータシステム１００はまた、記憶デバイス、スイッチ、モデム、ルータ、等のような任意の種類のネットワークされた周辺デバイスを含んでいてよい。便宜上、図１には単一のコンピュータシステム１００が示されているが、システム１００は、一緒に動作する２つ以上のコンピュータシステムとして実装されてもよい。
【００４４】
プロセッササブシステム１８０は、１つ以上のプロセッサ又は処理ユニットを含んでいてよい。例えば、プロセッササブシステム１８０は、１つ以上のコプロセッサユニットに結合される１つ以上のプロセッサユニットを含んでいてよい。コンピュータシステム１００の種々の実施形態においては、プロセッササブシステム１８０の多重インスタンスが相互接続１６０に結合されていてよい。種々の実施形態においては、プロセッササブシステム１８０（又は１８０内の各プロセッサユニット）は、キャッシュ又は他の形態のオンボードメモリを含んでいてよい。プロセッササブシステム１８０は、以下の図２と併せて更に詳細に下記で説明される。
【００４５】
メモリ１２０はプロセッササブシステム１８０によって使用可能である。メモリ１２０は、ハードディスクストレージ、フロッピディスクストレージ、リムーバルディスクストレージ、フラッシュメモリ、ランダムアクセスメモリ（ＲＡＭ−ＳＲＡＭ、ＥＤＯ＿ＲＡＭ、ＳＤＲＡＭ、ＤＤＲ＿ＳＤＲＡＭ、ラムバス(Rambus)（登録商標）ＲＡＭ、等）、ＲＯＭ（ＰＲＯＭ、ＥＥＰＲＯＭ、等）その他の種々の物理メモリ媒体を用いて実装することができる。コンピュータシステム１００内のメモリはメモリ１２０に限定されない。むしろ、コンピュータシステム１００は、種々の種類／位置のメモリを含む「メモリサブシステム」を有するものと言うことができる。例えば、コンピュータシステム１００のメモリサブシステムは、１つの実施形態においては、メモリ１２０、プロセッササブシステム１８０内のキャッシュメモリ、及びＩ／Ｏデバイス１５０のストレージ（例えばハードドライブ、ストレージアレイ、等）を含んでいてよい。従って、「メモリサブシステム」の語句は、コンピュータシステム１００内で可能な様々な種類のメモリ媒体を代表する。幾つかの実施形態においては、メモリサブシステムはプロセッササブシステム１８０によって実行可能なプログラム命令を記憶する。
【００４６】
Ｉ／Ｏインタフェース１４０は、種々の実施形態に従って他のデバイスと結合し且つ通信するように構成される様々な種類のインタフェースの任意のものであってよい。１つの実施形態では、Ｉ／Ｏインタフェース１４０は、フロントサイドバスから１つ以上のバックサイドバスへのブリッジチップである。Ｉ／Ｏインタフェース１４０は、１つ以上の対応するバス又は他のインタフェースを介して１つ以上のＩ／Ｏデバイス１５０に結合されていてよい。Ｉ／Ｏデバイスの例は、ストレージデバイス（ハードドライブ、光学ドライブ、リムーバブルフラッシュドライブ、ストレージアレイ、ＳＡＮ、又はそれらに関連する制御器）、又は他のデバイス（例えばグラフィックス、ユーザインタフェースデバイス、等）を含む。１つの実施形態では、コンピュータシステム１００は、ネットワークインタフェースデバイスを介してネットワークに結合される。
【００４７】
【００４８】
【００４９】
次に図２を参照すると、プロセッササブシステム１８０の１つの実施形態が示されている。図示されるように、プロセッササブシステム１８０は、プロセッサユニット２２０と、コプロセッサユニット２６０Ａ及び２６０Ｂと、メモリ制御器２８０とを含み、これらは全て相互接続２４０（例えば点対点又は共有バス回路）を介して互いに結合されている。１つの実施形態では、プロセッサユニット２２０及びコプロセッサユニット２６０は同じダイ上に配置されていてよい。他の実施形態においては、プロセッサユニット２２０及びコプロセッサユニット２６０は別々のダイ上に配置されていてよい。コプロセッサユニット２６０Ｂ及びメモリ制御器２８０は、プロセッササブシステム１８０の全ての実施形態がこれらのブロックを含む必要がないことを示すために、破線で示されている（サブシステム１８０の他の構成要素が必須であると言っているわけではない）。例えば、プロセッサユニット２２０は単一のコプロセッサユニット（例えば２６０Ａ）のみに結合されていてよく、代替的には、ユニット２２０は多重コプロセッサユニット（例えば２６０Ａ及び２６０Ｂ）に結合されていてもよい。他の実施形態では、追加的なコプロセッサユニットが可能である。種々の実施形態において、プロセッサユニット２２０及びコプロセッサユニット２６０は共通のメモリ制御器２８０を共有していてよい。メモリ制御器２８０は、例えば、主システムメモリ（例えばメモリ１２０）へアクセスするように構成され得る。他の実施形態においては、各プロセッサユニット２２０及びコプロセッサユニット２６０は、それぞれのメモリ制御器に結合されていてよい。
【００５０】
１つの実施形態においては、プロセッサユニット２２０は、１つ以上の実行ユニットを含み得る汎用プロセッサユニット（例えば中央処理ユニット（ＣＰＵ））である。あるいは、ユニット２２０はグラフィックスプロセッサのような専用プロセッサであってよい。１つの実施形態においては、プロセッサユニット２２０は、メモリ制御器２８０を用いてメモリ１２０からフェッチされた命令を実行するように構成される。ユニット２２０のアーキテクチャは種々の特徴を有していてよく、例えば、パイプライン化されたものであってよい。他の実施形態では、プロセッサユニット２２０は、多重スレッドを同時に実行するための多重スレッド化されたアーキテクチャを実装していてよい。プロセッサユニット２２０は、限定はしないが、特定用途命令の他、オペレーティングシステム命令を実行することができる。これらの命令は、単なる一例としては仮想メモリを含む任意の数の特徴の実装を可能にし得る。
【００５１】
図２に示されるように、プロセッサユニット２２０はコンパニオンプロセッサとして１つ以上のコプロセッサユニット２６０に結合されていてよく、ユニット２２０が命令をコプロセッサユニット２６０へ供給することを可能にしている。コンパニオンプロセッサユニット２２０からコプロセッサユニット２６０へ供給される命令は、共通の命令ストリーム内にあってよい（即ち、ユニット２２０は実行すべき命令をフェッチして、それらフェッチされた命令の特定の命令を実行のためにユニット２６０へ供給する）。プロセッサユニット２２０から単一又は複数のコプロセッサユニット２６０へ供給される特定の命令は、単一又は複数のコプロセッサユニット２６０の動作を制御するためにプロセッサユニット２２０内の機能ユニットによって生成される「制御」命令であってよい。プロセッサユニット２２０は、図３と共に以下に更に詳細に説明される。
【００５２】
コプロセッサユニット２６０Ａ及び２６０Ｂは、プロセッサユニット２２０の作業を実行することを支援するために用いられてよい。プロセッサユニット２２０と同様に、コプロセッサユニット２６０は、いかなる特定の機能又はアーキテクチャにも限定されない。種々の実施形態において、コプロセッサユニット２６０Ａ及び２６０Ｂは、汎用プロセッサ又は専用プロセッサ（例えばグラフィックスプロセッサユニット（ＧＰＵ）、ビデオ復号化プロセッサ、暗号化プロセッサ、キューマネージャ(queue managers)、等）であってよい。１つの実施形態では、コプロセッサユニット２６０は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）として実装されてよい。幾つかの実施形態では、コプロセッサユニット２６０はパイプライン化されていてよい。コプロセッサユニット２６０は、幾つかの実施形態では、マルチスレッド化されたアーキテクチャを用いる。種々の実施形態において、コプロセッサユニット２６０は、ユニット２２０から受信された特定の命令を実行するために、マイクロコード命令を実行するように構成されていてよい。特定の実施形態においては、コプロセッサユニット２６０は、仮想メモリの使用によって支持されてよい。コプロセッサユニット２６０は、図４と共に以下に更に詳細に説明される。
【００５３】
相互接続２４０は、１つの実施形態においては、プロセッサユニット２２０をコプロセッサユニット２６０に結合する共有バス回路である。１つの実施形態では、相互接続２４０は、ハイパートランスポート(Hyper Transport)又はＰＣＩエクスプレス(PCI-Express)のようなパケットベースのプロトコルを介してプロセッサユニット２２０がコプロセッサユニット２６０と通信することを可能にする「仮想トンネル(virtual tunnel)」を実装していてよい。幾つかの実施形態では、相互接続２４０はフロントサイドバスであってよい。１つの実施形態では、コプロセッサユニット２６０は、ノースブリッジ型(Northbridge-type)デバイスを介してプロセッサユニット２２０と結合されていてよい。
【００５４】
１つの実施形態では、メモリ制御器２８０は、プロセッサユニット２２０及び／又はコプロセッサユニット２６０がメモリ（例えばメモリ１２０）へアクセスするためのインタフェースを提供するように構成される。メモリ制御器２８０は、例えば、命令をフェッチし又はデータをロード及びストアするために用いられてよい。１つの実施形態では、プロセッサユニット２２０は、メモリ制御器２８０を用いて、プロセッサユニット２２０又はコプロセッサユニット２６０内での実行のための命令をフェッチすることができる。他の実施形態では、コプロセッサユニット２６０がメモリ制御器２８０を用いてそれ自身の命令又はデータをフェッチしてよい。
【００５５】
特定の実施形態においては、プロセッサユニット２２０及びコプロセッサユニット２６０は、共有メモリ（例えばメモリ１２０）に対するコヒーレンス(coherence)を達成するように構成され、共有メモリ内においては、プロセッサユニット２２０及び／又はコプロセッサユニット２６０は、それらのそれぞれのプロセッサ内にストアされているキャッシュされたエントリを変更する（例えば無効にし又は更新する）。１つの実施形態では、プロセッサユニット２２０及びコプロセッサユニット２６０は「スヌーピング(snooping)」プロトコルを実装しており、スヌーピングプロトコルにおいては、各プロセッサがメモリバス（例えば相互接続１６０）を監視して、キャッシュされたエントリを無効にし／更新するかどうかを決定する。代替的な実施形態においては、プロセッサユニット２２０及びコプロセッサユニット２６０は、キャッシュされたエントリがいつ無効にされ又は更新されるべきかを互いに表示する。幾つかの実施形態では、プロセッサユニット２２０及びコプロセッサユニット２６０は、仮想メモリのコヒーレントビュー(coherent view)を共有するように構成される。例えば、プロセッサユニット２２０及びコプロセッサユニット２６０は、プロセッサの１つ（例えばプロセッサユニット２２０）上で実行中のオペレーティングシステムによって作成される共通ページテーブルに対して個別のＴＬＢを維持することができる。
【００５６】
次に図３を参照すると、プロセッサユニット２２０が示されている。プロセッサユニット２２０は、１つ以上のコプロセッサユニット２６０に結合されていてよいコンパニオンプロセッサの１つの実施形態である。図示されるように、プロセッサユニット２２０は、スケジューラユニット３１０と、固定小数点ユニット３２０Ａ及び浮動小数点ユニット３２０Ｂと、ロードストアユニット（ＬＳＵ）３３０と、コプロセッサインタフェースユニット３５０と、リタイヤメントユニット(retirement unit)３６０とを含む。図示される実施形態においては、スケジューラユニット３１０はプロセッサユニット２２０内の命令キャッシュ３４０に結合されているが、他の実施形態は命令キャッシュ３４０を含まないかもしれない。同様に、ＬＳＵ３３０は図３に示されるデータキャッシュ３４５に結合されている。ユニット２２０の他の実施形態はキャッシュ３４５を含まないかもしれない。種々の実施形態において、プロセッサユニット２２０は１つ以上の機能ユニットを含む。尚、図３に示される機能ユニット３２０、３３０、及び３５０は例示的なものであって、従って種々の実施形態においてプロセッサユニット２２０内に含まれていないことがある。種々の実施形態において、プロセッサユニット２２０は、単一の機能ユニット３２０又は複数の機能ユニット３２０（図示されるような）を含んでいてよい。幾つかの実施形態では、プロセッサユニット２２０は複数のコプロセッサインタフェースユニット３５０を含んでいてよく、この場合、各コプロセッサインタフェースユニット３５０は１つ以上のコプロセッサユニット２６０に結合される。１つの実施形態では、コプロセッサインタフェースユニット３５０は、プロセッサユニット２２０に対して外部に配置されていてよい。
【００５７】
プロセッサユニット２２０は、複数のスレッド（例えば４スレッド）を実行するように構成されるマルチスレッド化されたプロセッサユニットであってよい。種々のスレッドの命令は、スケジューラユニット３１０を介して実行のためにユニット３２０、３３０、又は３５０へ発送される。以下に説明されるように、コプロセッサインタフェースユニット３５０は、それが受信する命令を実行のためにコプロセッサユニット２６０へ供給し、次いで実行結果のコプロセッサ開始の送信(coprocessor-initiated transmission)を受信するように構成される。利用可能な場合には、ユニット３２０、３３０、及び３５０は実行結果をリタイヤメントユニット３６０へ供給する。
【００５８】
スケジューラユニット３１０は、後続のブロック内での実行のために命令を準備するため、命令をフェッチしそして復号化する論理を含んでいてよい。１つの実施形態では、スケジューラユニット３１０は、命令キャッシュ３４０からの命令をフェッチする論理を含んでいてよい。スケジューラユニット３１０はまた、命令キャッシュミス(instruction cache misses)及び、仮想命令フェッチアドレスの物理アドレスへの翻訳(translation)を処理する論理を実装していてよい（例えば、スケジューラユニット３１０は、命令翻訳ルックアサイドバッファ(Instruction Translation Lookaside Buffer)（ＩＴＬＢ）又は、ページテーブルウォークを実行するハードウエアを含んでいてよい）。幾つかの実施形態では、スケジューラユニット３１０は、復号化された命令を命令内の情報に基いてユニット３２０、３３０、及び３５０へ経路付けてよい。例えば、スケジューラユニット３１０は、命令内の動作コード（オプコード(opcode)）に基づいて命令をコプロセッサインタフェース３５０へ経路付けてよい。種々の実施形態において、スケジューラユニット３１０は種々のスケジューリング技術を実装していてよい。例えば１つの実施形態では、スケジューラユニット３１０は、命令を待ち行列に入れてよく(may queue)、そしてそれらを順序外実行(out-of-order execution)（ＯｏＯＥ）アルゴリズムを用いてスケジューリングしてよい。加えて幾つかの実施形態では、スケジューラユニット３１０は、ブランチの結末(branch outcome)を予測し且つ／又は目標アドレスをフェッチする論理を含んでいてよい。
【００５９】
固定小数点ユニット３２０Ａ及び浮動小数点ユニット３２０Ｂは、プロセッサユニット２２０の１つの実施形態において存在し得る機能ユニットの単なる典型にすぎない。これらのユニットは、様々な種類の命令に対して実行し且つ結果を生成する論理を含んでいてよい。例えば、種々の命令が算術的な、論理的な、又はシフトの動作を実行することができる。種々の実施形態において、ユニット３２０は、そのような動作を実行するための１つ以上の算術論理ユニット（ＡＬＵ）を含んでいてよい。
【００６０】
ロードストアユニット３３０は、ロード命令及びストア命令を実行するための倫理を含む。１つの実施形態では、ロードストアユニット３３０は、データキャッシュ３４５へデータをロードすること及びストアすることを処理する論理を含んでいてよい。特定の実施形態においては、ロードストアユニット３３０は、データキャッシュミス及び、仮想アドレスの物理アドレスへの翻訳を処理する論理を実装していてよい（例えば、ロードストアユニット３３０は、データ翻訳ルックアサイドバッファ（ＤＴＬＢ）又は、ページテーブルウォークを実行するハードウエアを含んでいてよい）。
【００６１】
コプロセッサインタフェースユニット３５０は、命令３５２を１つ以上のコプロセッサユニット２６０へ供給すると共に対応する実行結果３５４を受信する機能ユニットである。種々の実施形態において、命令３５２は、ユニット３５０によって受信される命令（例えばユニット３１０から）の他に、ユニット３５０によって生成される指令／命令を含んでいてよい。例えば、コプロセッサインタフェースユニット３５０は、スケジューラユニット３１０からの命令ストリームに付随する一連の命令３５２を受信することができ、そして一連の命令３５２をコプロセッサユニット２６０へ供給することができ、コプロセッサユニット２６０において一連の実行結果３５４が生成される。この例では、プロセッサユニット２２０の命令ストリームからの命令をコプロセッサユニット２６０が実行している。加えて、コプロセッサインタフェースユニット３５０は、プロセッサユニット２２０の命令ストリームの一部ではないコプロセッサユニット２６０への命令又は指令３５２を供給することができる。そのような命令／指令は、プロセッサユニット２２０に対するコプロセッサユニット２６０の動作及び／又は同期を制御するための他、任意の他の適切な目的のために用いられてよい。いずれにしても、一旦コプロセッサユニット２６０が一連の実行結果３５４を生成したならば、コプロセッサインタフェースユニット３５０が一連の実行結果３５４を受信する。１つの実施形態では、ユニット３５０は実行結果３５４をリタイヤメントユニット３６０へ供給する。コプロセッサインタフェースユニット３５０は、図５と共に以下に更に詳細に説明される。
【００６２】
１つの実施形態においては、リタイヤメントユニット３６０は、ユニット３２０、３３０、及び３５０から受信される実行結果をリタイヤさせるための論理を含んでいる。幾つかの実施形態では、リタイヤメントユニット３６０は、状態情報を記憶するために１つ以上のレジスタバンク(register banks)に結合されていてよく（又は１つ以上のレジスタバンクを物理的に含んでいてよく）、この場合、リタイヤメントユニット３６０は、実行結果が受信されるときにレジスタ内の状態情報を更新してよい。１つの実施形態では、この状態情報は、実行中のスレッドを識別するデータ（例えばスレッドＩＤ）又は実行中のスレッドの対応するプロセスを識別するデータ（例えばプロセスＩＤ）を含んでいてよい。他の実施形態では、状態情報は、１つ以上のコプロセッサユニット２６０上で実行中のスレッドの状態情報を含んでいてよい。種々の実施形態において、リタイヤメントユニット３６０は、一連の命令をそれらが順序外実行（ＯｏＯＥ）の後に受信されるときに待ち行列に入れそしてそれらをリタイヤメントの間に再順序付ける論理を含んでいてよい。他の実施形態においては、リタイヤメントユニット３６０は、種々の命令の実行の間にスローされた例外(exceptions thrown)（例えばページフォールト例外(page fault exception)）を処理するためのトラップ論理(trap logic)を含んでいてよい。
【００６３】
次に図４を参照すると、コプロセッサユニット２６０が示されている。コプロセッサユニット２６０は、相互接続２４０を介してプロセッサユニット２２０と結合され得るコプロセッサユニットの１つの実施形態である。１つの実施形態では、相互接続２４０は、周辺デバイス又は特別の機能を実行する処理回路を制御する個別のバスであってよい。図示されるように、コプロセッサユニット２６０は、相互接続４３０を介して互いに結合されるコンパニオンプロセッサインタフェース４２０及び処理コア４４０を含む。１つの例示的な実施形態では、処理コア４４０は、機能ユニット４４２及びレジスタバンク４４４を含んでいてよい。他の実施形態では、処理コア４４０は、メモリ制御器２８０に結合されると共にキャッシュ４４６を含んでいてよい。コンパニオンプロセッサインタフェース４２０は、命令３５２を受信しそして実行結果３５４をプロセッサユニット２２０のコプロセッサインタフェースユニット３５０へ送信するように構成される。レジスタバンク４４４及びキャッシュ４４６並びにメモリ制御器２８０への接続は破線で示されており、コプロセッサユニット２６０が種々の様態で実装され得ることを表示している（例えば幾つかの実施形態では、所望に応じて種々のブロックが含まれあるいは除外されてよい）。尚、コプロセッサユニット２６０は単一の処理コア４４０及び単一の機能ユニット４４２を含むように図示されているが、コプロセッサユニット２６０は、種々の実施形態において、複数の処理コア４４０及び／又は複数の機能ユニット４４２を含んでいてよい。他の実施形態においては、コプロセッサユニット２６０は、追加的なコプロセッサユニットに付随していてよい。
【００６４】
コンパニオンプロセッサインタフェース４２０は、コプロセッサユニット２６０とプロセッサユニット２２０のコプロセッサインタフェースユニット３５０との間でのインタフェースである。１つの実施形態では、コンパニオンプロセッサインタフェース４２０は、受信した命令３５２を実行前に命令キュー内に記憶しそしてそれらを命令が次いで実行される処理コア４４０へ転送するように構成されていてよい。他の実施形態においては、コンパニオンプロセッサインタフェース４２０は、実行結果３５４を処理コア４４０による生成の後に他のキュー内へ記憶するように構成されていてよく、そして実行結果３５４をコプロセッサインタフェースユニット３５０へ送信してよい。１つの実施形態では、コンパニオンプロセッサインタフェース４２０は、コプロセッサインタフェースユニット３５０を介して実行結果３５４に対する要求を送信しているプロセッサユニット２２０に応答して、実行結果３５４をコプロセッサインタフェースユニット３５０へ送信してよい。代替的な実施形態においては、コンパニオンプロセッサインタフェース４２０は、実行結果が利用可能であることを条件として、即ち送信を開始するための明示的な命令をプロセッサユニット２２０から受信することなしに、実行結果３５４の送信を開始してよい。
【００６５】
処理コア４４０は、１つ以上の機能ユニット４４２を用いて命令３５２を実行し実行結果３５４を生成するように構成されている。命令３５２は、複雑さが変化することがあり、また種々の実行要求を有しているであろう。１つの実施形態では、処理コア４４０は、メモリ又はレジスタアクセスを必要としない命令３５２（例えば即時データ(immediate data)のみを含む命令）を実行してよい。他の実施形態では、処理コア４４０は、命令３５２を実行するときにレジスタバンク４４４にアクセスしてよい。幾つかの実施形態において、処理コア４４０は、メモリ制御器２８０を用いてオンボードキャッシュ又はメモリ１２０にアクセスする命令（例えばロード／ストア命令のようなアドレス情報を含む命令）を実行してよい。幾つかの実施形態では、処理コア４４０は、メモリ１２０へアクセスするときに仮想アドレスを物理アドレスへ翻訳してよい。
【００６６】
処理コア４４０は、種々のソースからの命令を実行することができる。１つの実施形態では、処理コア４４０は、プロセッサユニット２２０によってもたらされる命令３５２のみを実行してよい。他の実施形態においては、処理コア４４０は、プロセッサユニット２２０からの最初の一連の命令３５２を受信した後の追加的な命令をフェッチしてよい。種々の実施形態において、処理コア４４０は、実行前の命令３５２からマイクロコード命令を生成してよい。
【００６７】
上述したように、命令３５２は、１つの実施形態では、プロセッサユニット２２０の命令ストリームの一部である一連の命令を含んでいてよい。コプロセッサユニット２６０へ供給される命令は、例えば、それらがユニット２６０内で（例えば特定の機能ユニット４４２上で）実行可能であることを指定するコプロセッサオプコードを含んでいてよい。他の実施形態においては、命令３５２は、コプロセッサユニット２６０の実行を制御するユニット３５０によって生成される命令／指令（即ちプロセッサユニット２２０の命令ストリームに付随しない命令）であってよい。例えば１つの実施形態では、そのような指令は、プロセッサユニット２２０とコプロセッサユニット２６０の通信（例えばコンパニオンプロセッサインタフェース４２０の調整の側面）を制御するために実行可能であってよい。他の実施形態においては、これらの指令は、記憶されているデータ（例えばレジスタバンク４４４又はキャッシュ４４６内に）を変更すること（即ち更新し又は無効にすること）、メモリアクセスを管理すること（例えばＴＬＢ内の翻訳を更新し又は無効にすること）、実行中スレッドの状態情報（例えば拡張された保存指令（ＥＸＳＡＶＥ））を保存すること、等のような種々の動作を実行するように処理コア４４０に命令してよい。
【００６８】
実行結果３５４は、命令３５２を実行することの結果として生成される種々の情報の任意のものを含んでいてよい。１つの実施形態では、実行結果３５４は、生成された結果値を含んでいてよい（例えば一連の暗号化命令は一連の暗号化されたデータを生成してよい）。他の実施形態においては、実行結果３５４は、状態／完了通知情報（例えば処理コア４４０上で実行中の特定のスレッドの完了を表示する）を含んでいてよい。他の実施形態においては、実行結果３５４は、例外又はフォールト情報（例えばページフォールト表示）を含んでいてよい。幾つかの実施形態では、実行結果３５４は、コプロセッサインタフェースユニット３５０の動作を制御するための指令（例えばプロセッサユニット２２０及びコプロセッサユニット２６０の通信を制御する指令）を含んでいてよい。
【００６９】
コプロセッサユニット２６０の種々の実施形態は、図６Ａ〜６Ｄと共に以下に更に詳細に説明される。
【００７０】
次に図５を参照すると、コプロセッサインタフェースユニット３５０が示されている。コプロセッサインタフェースユニット３５０は、プロセッサユニット２２０をコプロセッサユニット２６０に結合するためのコプロセッサインタフェースユニットの１つの実施形態である。図示されるように、コプロセッサインタフェースユニット３５０は、スケジューラインタフェースユニット５１０と、経路付けインタフェースユニット５２０と、リタイヤメントインタフェースユニット５３０と、コプロセッサ指令ユニット５４０と、レジスタバンク５５０とを含む。経路付けインタフェースユニット５２０は、図示される実施形態においては、経路付けテーブル５２４を含む。ユニット３５０の種々の実施形態において、レジスタバンク５５０及び／又は経路付けテーブル５２４は、それらのそれぞれの破線によって示されるように含まれていてよい（又は含まれていなくてよい）。
【００７１】
上述したように、コプロセッサインタフェースユニット３５０は、プロセッサユニット２２０の命令ストリームからの命令をコプロセッサユニット２６０へ供給するように構成される。１つの実施形態では、コプロセッサインタフェースユニット３５０は、スケジューラインタフェースユニット５１０を介して命令を受信し、そして経路付けインタフェースユニット５２０を介してコプロセッサユニット２６０へ命令３５２を送信する。一旦コプロセッサユニット２６０が命令を実行したら、経路付けインタフェースユニット５２０が実行結果３５４を受信し、次いでコプロセッサインタフェースユニット３５０は、リタイヤメントインタフェースユニット５３０を介してリタイヤメントユニット３６０へ実行結果を供給する。
【００７２】
経路付けインタフェースユニット５２０は、１つの実施形態では、バストラフィック（例えば命令／指令３５２及び実行結果３５４）を生成し且つ相互接続２４０を介して受信するインタフェースである。幾つかの実施形態では、経路付けインタフェースユニット５２０は、ハイパートランスポート(Hyper Transport)、ＰＣＩエクスプレス(PCI Express)、クイックパス(Quick Path)、等のようなパケットベースの通信プロトコルを用いる。特定の実施形態においては、経路付けインタフェースユニット５２０は、経路付け情報を経路付けテーブル５２４内に記憶してよく、経路付けテーブル５２４は、多重コプロセッサユニット２６０に対するソースアドレス情報及び宛先アドレス情報を記憶することができる。
【００７３】
コプロセッサ指令ユニット５４０は、１つの実施形態では、プロセッサユニット２２０の命令ストリームの一部ではない命令／指令を生成するように構成される。例えば、コプロセッサ指令ユニット５４０は、図４に関連して上述したようなコプロセッサユニット２６０の動作を制御する指令を生成してよい。幾つかの実施形態では、コプロセッサ指令ユニット５４０は、相互接続２４０及び／又はコンパニオンプロセッサインタフェース４２０の動作を制御する指令（例えばハイパートランスポート通信パラメータ等を調節する指令）を生成してよい。種々の実施形態において、コプロセッサ指令ユニット５４０は、外部表示、例えばスケジューラユニット３１０、リタイヤメントユニット３６０、等に応答して指令を生成してよい。他の実施形態においては、コプロセッサ指令ユニット５４０は、指令を生成するかどうかを決定するために、スケジューラインタフェースユニット５１０及び／又はリタイヤメントインタフェースユニット５３０に関連するトラフィックを解析することができる。
【００７４】
種々の実施形態において、コプロセッサインタフェースユニット３５０は、ユニット３５０の種々の動作に関連する情報を記憶するレジスタバンク５５０を含んでいる。例えばコプロセッサインタフェースユニット３５０は、対応するコプロセッサスレッドを有しているプロセッサユニット２２０上のスレッドに関連する情報を記憶してよい。幾つかの実施形態では、コプロセッサインタフェースユニット３５０は、実行中のコプロセッサスレッドに関連する情報、特定の一連の命令３５２に対する完了状態情報、等のような種々のコプロセッサユニット２６０に関連する情報を維持する。
【００７５】
種々の実施形態において、コプロセッサインタフェースユニット３５０は、特定のコプロセッサユニット２６０（例えばＣＰＵＩＤツリー内の）の種々の能力／機能性に関する情報（例えばレジスタバンク５５０及び／又はメモリ１２０内の）を維持する。幾つかの実施形態では、コプロセッサインタフェースユニット３５０はまた、プロセッサユニット２２０の命令ストリームからの任意の命令が、無効の様態にある(in an invalid manner)コプロセッサユニット２６０を参照すること（例えば存在しないコプロセッサユニット２６０を参照すること、コプロセッサユニット２６０の利用可能でない特徴を参照すること、等）を試みる場合に、例外をスローする(throw an exception)ように構成されていてもよい。
【００７６】
次に図６Ａ〜６Ｄを参照すると、コプロセッサユニット２６０の種々の実施形態を表す一連のブロック図が示されている。
【００７７】
図６Ａは多重スレッド化された処理コアを実装しているコプロセッサユニット２６０の１つの実施形態を示している。図示されるように、コプロセッサユニット２６０は、相互接続４３０を介して結合されるコンパニオンプロセッサインタフェース４２０及び処理コア４４０を含む。１つの実施形態では、処理コア４４０は、機能ユニット６１０Ａ、機能ユニット６１０Ｂ、及びレジスタバンク６２０を含む。幾つかの実施形態では、各機能ユニット６１０は、所与のスレッドに対する命令３５２を実行しそして対応する一連の実行結果３５４を生成するように構成される。特定の実施形態においては、レジスタバンク６２０は、特定のスレッドを示す情報（例えばスレッド識別、プロセス識別ＰＩＤ、コンテクスト識別ＣＩＤ、等）を記憶してよい。コプロセッサユニット２６０は多重機能ユニット６１０を伴う単一の処理コア４４０を有するように示されているが、コプロセッサユニット２６０は、他の実施形態では、複数の機能ユニット６１０を含む複数の処理コア４４０を含む。
【００７８】
上述したように、プロセッサユニット２２０上で実行中のスレッドは、コプロセッサユニット２６０上で実行中の特定のスレッドを呼び出し(invoke)且つ／又はそのスレッドと通信してよい。例えば１つの実施形態では、単一のコプロセッサスレッドのみが単一の対応するプロセッサスレッドとペアにされてよい。他の実施形態においては、多重コプロセッサスレッドが単一の対応するプロセッサスレッドとペアにされてよい。幾つかの実施形態において、単一のプロセッサスレッドは、多重機能ユニット６１０及び／又は多重コプロセッサユニット２６０上で実行中の対応する複数のコプロセッサスレッドとペアにされてよい。
【００７９】
種々の実施形態において、コプロセッサインタフェースユニット３５０は、対応するコプロセッサスレッドの実行を制御する命令／指令を供給する（例えばコプロセッサ指令ユニット５４０によって生成される命令／指令を介して）。例えばこれらの命令／指令は、コプロセッサユニット２６０上で実行中のスレッドをサスペンドし又はコプロセッサユニット２６０上で先行して実行中のスレッドの実行をレジュームする指示(directives)を含んでいてよい。種々の実施形態において、プロセッサユニット２２０上で実行中のオペレーティングシステムは、命令３５２を用いて新たなコプロセッサスレッドを初期化する。幾つかの実施形態では、命令３５２はコンテクストスイッチを実行するための指令を含んでいてよく、コンテクストスイッチにおいては、コプロセッサユニット２６０は、実行中のスレッドをサスペンドしそして他の非実行中スレッドに切り換える。そのような場合には、コプロセッサユニット２６０は、実行中のスレッドの状態を保存し且つ非実行中のスレッドの状態を復元するための命令を実行してよい（例えばＥＸＳＡＶＥ命令を用いて）。特定の実施形態においては、コプロセッサユニット２６０は、実行中のスレッドの記憶されている状態をレジスタバンク６２０からメモリ１２０へ転送する。１つの実施形態では、コプロセッサユニット２６０は、メモリ１２０へ直接的にアクセスして状態情報を記憶しまた検索する(retrieve)ことができる。他の実施形態では、コプロセッサユニット２６０は、プロセッサユニット２２０を介して状態情報を記憶しまた検索してよい。スレッド切り換えのための方法は、図８と共に以下に更に詳細に説明される。
【００８０】
幾つかの実施形態では、コプロセッサユニット２６０は、実行結果３５４を通して、対応するプロセッサスレッドの実行を制御してよい。１つの実施形態では、実行結果３５４は、対応するプロセッサスレッドをレジュームし且つ／又はサスペンドするために用いられる完了状態情報を含んでいてよい（例えばプロセッサスレッドは対応する実行中コプロセッサスレッドの未決の完了(pending completion)をブロックしてよい）。他の実施形態においては、実行結果３５４は、プロセッサスレッドをレジュームし且つ／又はサスペンドするための明示的な指令(explicit commands)を含んでいてよい（例えばプロセッサユニット２２０上でコンテクストスイッチを実行する場合に）。
【００８１】
図６Ｂはマイクロコード命令を実行中のコプロセッサユニット２６０の１つの実施形態を示している。図示されるように、コプロセッサユニット２６０は、相互接続４３０を介して結合されるコンパニオンプロセッサインタフェース４２０及び処理コア４４０を含む。図示される実施形態では、処理コア４４０は、マイクロコードアセンブラ６３０及び機能ユニット６１０を含む。一般的に、マイクロコードアセンブラ６３０は、一連の命令（例えば命令３５２）を受信しそして機能ユニット６１０上で実行可能な対応する一連のマイクロコード命令を生成するように構成される。マイクロコードアセンブラ６３０は、それが種々の実施形態においてコプロセッサユニット２６０内に含まれていてよい（又は含まれていなくてよい）ことを示すために、破線で示されている。例えばマイクロコードアセンブラ６３０は、プロセッサユニット２２０の命令ストリームから生成されるマイクロコードを命令３５２が含むように、プロセッサユニット２２０内（例えばコプロセッサインタフェース３５０内）に配置されてよい。
【００８２】
図６Ｃは仮想メモリを実装しているコプロセッサユニット２６０の１つの実施形態を示している。図示されるように、コプロセッサユニット２６０は、相互接続４３０を介して結合されるコンパニオンプロセッサインタフェース４２０及び処理コア４４０を含む。図示される実施形態では、処理コア４４０は、フェッチユニット６４０と、機能ユニット６１０と、ロードストアユニット（ＬＳＵ）６５０と、メモリ管理ユニット（ＭＭＵ）６６０とを含む。追加的に、フェッチユニット６４０及びＬＳＵ６５０は、それぞれ、命令翻訳ルックアサイドバッファ（ＩＴＬＢ）６４２及びデータ翻訳ルックアサイドバッファ（ＤＴＬＢ）６５２を含む。種々の実施形態において、ブロックの他の組み合わせが実装されて（実装されなくて）よく、例えばフェッチユニット６４０及び／又はＬＳＵ６５０は省略されてよく、ＩＴＬＢ６４２及びＤＴＬＢ６５２とは対照的に単一のＴＬＢが用いられてよく、等々である。
【００８３】
種々の実施形態において、コプロセッサユニット２６０は、追加的な情報をフェッチすることによって又はロード／ストア命令を実行することによってメモリにアクセスするように構成されていてよい。１つの実施形態では、フェッチユニット６４０及びＬＳＵ６５０は、それぞれＩＴＬＢ６４２及びＤＴＬＢ６５２内にキャッシュされた仮想メモリ翻訳を検索する。適切なＴＬＢ内で翻訳が見つからない場合に、メモリ管理ユニット（ＭＭＵ）６６０は、幾つかの実施形態では、翻訳に対するページテーブルウォークを実行するように構成される。特定の実施形態においては、ＭＭＵ６６０は、ページテーブルウォークを実行するのに先立ちその時点でのページテーブルのメモリアドレスを得るために、ＣＲ３レジスタ６６２を参照する。翻訳がページテーブル内に見つからない場合には、ＭＭＵ６６０は、幾つかの実施形態では、プロセッサユニット２２０上で実行中のオペレーティングシステムに対してページフォールト例外をスロー(throws)する。メモリにアクセスすると共にページテーブルウォークを実行するための方法は、図９と共に以下に更に詳細に説明される。
【００８４】
上述したように、プロセッサユニット２２０及びコプロセッサユニット２６０は、種々の実施形態において、メモリのコヒーレントビューを維持するように構成される。従って、命令３５２及び実行結果３５４は、メモリコヒーレンスを管理する指令を含んでいてよい。１つの実施形態では、命令３５２は、ＩＴＬＢ６４２及びＤＴＬＢ６５２内にキャッシュされた翻訳のようなキャッシュされたデータを変更する（例えば更新する／無効にする）ための指令を含んでいてよい。他の実施形態においては、命令３５２は、ＣＲ３レジスタ６６２を更新するための指令を含んでいてよい。同様に、種々の実施形態において、実行結果３５４は、プロセッサユニット２２０内（例えば命令キャッシュ３４０、データキャッシュ３４５、任意のＴＬＢ、等の範囲内）にキャッシュされたデータを更新し又は無効にするための指令を含んでいてよい。
【００８５】
図６Ｄはグラフィックスエンジンを実装しているコプロセッサユニット２６０の１つの実施形態を示している。図示されるように、コプロセッサユニット２６０は、相互接続４３０を介して結合されるコンパニオンプロセッサインタフェース４２０及び処理コア４４０を含む。追加的に、処理コア４４０は、グラフィカルフロントエンド６７０及びメモリ管理ユニット（ＭＭＵ）６６０を含む。図示される実施形態においては、グラフィカルフロントエンド６７０はグラフィカルバックエンド６９２に結合され、グラフィカルバックエンド６９２は次いでディスプレイユニット６９４に結合される。破線で示されるように、ＭＭＵ６６０は、メモリ１２０（例えばメモリ制御器２８０を介して）及び／又はローカルメモリ６８２にアクセスすることができる。処理コア４４０はグラフィカルフロントエンド６７０を含む一方で、１つの実施形態においては、処理コア４４０はグラフィカルバックエンド６９２を含んでいてよい。代替的には、グラフィカルバックエンド６９２は、どこか別の場所（例えばグラフィックスカード又はディスプレイユニット６９４内）にあってよい。
【００８６】
種々の実施形態において、コプロセッサユニット２６０は、プロセッサユニット２２０の命令ストリームからの専用のグラフィカル命令を実行する。一般的に、グラフィカルフロントエンド６７０は、画像描画(image rendering)に先立って生じる種々のグラフィカル動作、例えば多角形生成(polygon generation)、照明効果、又は当該分野において知られる他のグラフィカル動作を実行する。幾つかの実施形態では、グラフィカルフロントエンド６７０は、対応するグラフィカルバックエンド６９２に対するグラフィカル命令を生成する命令アセンブラ６７２を含んでいてよい。
【００８７】
次に図７を参照すると、方法７００のフローチャートが示されている。方法７００は、コプロセッサユニット２６０上で命令を実行するためにプロセッサユニット２２０によって実施される方法の１つの実施形態である。方法７００はステップ７１０で開始し、プロセッサユニット２２０が一連の命令をフェッチし、復号化し、そしてスケジューリングする。このとき、スケジューラユニット３１０は、種々の実施形態において、命令を復号化してそれらをそれらのそれぞれの機能ユニット（例えばユニット３２０、３３０、及び３５０）へ経路付ける。１つの実施形態では、命令がコプロセッサ命令に関連する特定のオプコードを含む場合、スケジューラユニット３１０は、命令をコプロセッサインタフェースユニット３５０へ経路付ける。代替的な実施形態においては、メモリアドレスの特定の範囲、ＰＩＤ、等のような他の基準に基いて、命令が経路付けられてよい。ステップ７２０では、コプロセッサインタフェースユニット３５０が一連の命令３５２をコプロセッサユニット２６０へ送信する（例えばハイパートランスポートプロトコル又はＰＣＩエクスプレスプロトコルを用い、コプロセッサユニット２６０に結合されるノースブリッジ型デバイスを介して）。ここで、コプロセッサユニット２６０は命令３５２を実行して対応する一連の実行結果３５４を生成する。コプロセッサインタフェースユニット３５０は、ステップ７３０において、コプロセッサユニットが開始した送信を介して実行結果３５４を受信し、そしてステップ７４０において、例えばリタイヤメントユニット３６０を介して対応する命令をリタイヤさせる。種々の実施形態において、リタイヤメントユニット３６０は、実行結果３５４の結果値を記憶しそして任意のスローされた例外を処理してよい。
【００８８】
次に図８を参照すると、方法８００のフローチャートが示されている。方法８００は、コプロセッサユニット２６０上でスレッドを切り換える方法の１つの実施形態である。例えばステップ８１０〜８４０は、プロセッサユニット２２０上で実行中のプロセッサスレッドが新たなスレッドを初期化し又はコプロセッサユニット２６０上にある既存のスレッドの実行をレジュームする場合に実行されてよい。プロセッサスレッドが新たな／既存のスレッドの未決の完了をサスペンドする場合には、プロセッサスレッドをレジュームするために、ステップ８５０〜８６０が実行されてよい。尚、方法８００は、種々の実施形態において様々な様態で実施されてよい（例えば方法８００は、ステップ８５０〜８６０を実行することを含んでいなくてよく、図示しない追加的なステップを含んでいてよい等々である）。
【００８９】
方法８００はステップ８１０で開始し、ステップ８１０では、プロセッサユニット２２０上で実行中のスレッドが、対応するコプロセッサスレッドの使用を要求する。１つの実施形態では、実行中のプロセッサスレッドは、オペレーティングシステムに対して例外をスローして新たな又は既存のスレッドをスケジューリングすることによって、この要求を表示する。
【００９０】
ステップ８２０では、利用可能なコプロセッサ資源が存在するかどうかをプロセッサユニット２２０が決定する。１つの実施形態では、プロセッサユニット２２０は、コプロセッサインタフェースユニット３５０内（例えばレジスタバンク５５０内）の情報にアクセスすることによって、この利用可能性を決定する。他の実施形態では、プロセッサユニット２２０は、コプロセッサ指令を介してコプロセッサユニット２６０に問い合わせる（queries）。コプロセッサ資源が利用可能である場合には、方法はステップ８４０へ進む。そうでない場合には、方法はステップ８３０へ進む。
【００９１】
ステップ８３０では、プロセッサユニット２２０は、実行中のコプロセッサスレッドをサスペンドするようにコプロセッサユニット２６０に指示する。種々の実施形態において、コプロセッサユニット２６０は、例えば状態をメモリ１２０内に直接記憶することによって、又は状態をプロセッサユニット２２０へ記憶のために送信することによって、サスペンドされている最中のスレッドの状態情報を記憶してよい。
【００９２】
ステップ８４０では、プロセッサユニット２２０のオペレーティングシステムは、コプロセッサユニット２６０上での実行のために要求されたスレッドをスケジューリングする。要求されたスレッドが既に実行中であった場合には、コプロセッサユニット２６０は、そのスレッドに関連する任意の以前の状態情報をロードしてよい。
【００９３】
要求されたコプロセッサスレッドの実行が一旦完了すると、コプロセッサユニット２６０は、この完了を示す実行結果３５４を生成してよい。ステップ８５０においてプロセッサスレッドがブロックした場合（即ちコプロセッサスレッドの未決の完了をプロセッサスレッドがブロックした場合）には、プロセッサユニット２２０は、ステップ８６０において、そのプロセッサスレッドの実行をレジュームする。尚、幾つかの実施形態では、コプロセッサユニット２６０は、プロセッサスレッドをレジュームするようにオペレーティングシステムに直接的に指示してよい（例えば対応するコプロセッサスレッドの実行を完了する場合に例外をスローすることによって）。
【００９４】
次に図９を参照すると、方法９００のフローチャートが示されている。方法９００は、仮想アドレス空間を用いるコプロセッサユニット２６０によって実施される方法の１つの実施形態である。
【００９５】
方法９００はステップ９１０で開始し、ステップ９１０では、仮想アドレスを物理アドレスへ翻訳するための要求をコプロセッサユニット２６０が作成する。例えばコプロセッサユニット２６０は、命令をフェッチし又はメモリにアクセスするときに仮想メモリ翻訳を実行してよい。
【００９６】
ステップ９２０では、コプロセッサＴＬＢ（例えばＩＴＬＢ６４２又はＤＴＬＢ６５２）内で仮想アドレスがヒットする（即ち存在する）かどうかをコプロセッサユニット２６０が決定する。ＴＬＢ内で仮想アドレスがヒットする場合には、ステップ９３０で翻訳を用いて対応する物理アドレスが決定される。一方、ＴＬＢ内で仮想アドレスがミスする場合には、方法９００はステップ９４０へ進む。
【００９７】
ステップ９４０では、コプロセッサユニット２６０がページテーブルウォークを実行して（例えばＭＭＵ６６０を用いて）対応する翻訳を探し出す。ステップ９５０においてページテーブル内で仮想アドレスがヒットする場合には、コプロセッサユニット２６０は、ステップ９６０において、ＴＬＢ内の翻訳をロードすると共に対応する物理アドレスを決定してよい。一方、ステップ９５０においてページテーブル内で仮想アドレスがミスする場合には、方法９００はステップ９７０へ進む。
【００９８】
ステップ９７０では、コプロセッサユニット２６０がプロセッサユニット２２０へページフォールトの信号を送る。１つの実施形態では、コプロセッサユニット２６０は、プロセッサユニット２２０上で実行中のオペレーティングシステムによって使い易い(serviceable)ページフォールト例外を含む実行結果３５４を生成する。幾つかの実施形態では、コプロセッサインタフェースユニット３５０は、オペレーティングシステムがいつページフォールトを使用可能にした(has serviced)かをコプロセッサユニット２６０へ通知してよい（例えばコプロセッサ指令ユニット５４０によって生成される指令を介して）。
【００９９】
次に図１０を参照すると、方法１０００のフローチャートが示されている。方法１０００は、第１のプロセッサ機能ユニット（例えばコプロセッサインタフェースユニット３５０）によって実施される方法の１つの実施形態である。ステップ１０１０では、第１のプロセッサ機能ユニットは、スケジューラユニット３１０からの第１の命令ストリーム内の第１の一連の命令（例えば命令３５２）を受信する。ステップ１０２０では、第１のプロセッサ機能ユニットは、第１の一連の命令をコプロセッサユニット（例えばユニット２６０）へ供給する。次いでコプロセッサユニット２６０は、命令３５２を実行して対応する一連の実行結果３５４を生成してよい。ステップ１０３０では、第１のプロセッサ機能ユニットは、第１の一連の命令に対応する第１の一連の実行結果（例えば実行結果３５４）を、送信を開始したコプロセッサユニット２６０から受信する。
【０１００】
次に図１１を参照すると、方法１１００のフローチャートが示されている。方法１１００は、コプロセッサユニット２６０によって実施される方法の１つの実施形態である。ステップ１１１０では、コプロセッサユニット２６０は、コンパニオンプロセッサインタフェースユニット（例えばコンパニオンプロセッサインタフェース４２０）で、コンパニオンプロセッサユニット（例えばプロセッサユニット２２０）内のコプロセッサインタフェースユニット（例えばコプロセッサインタフェースユニット３５０）からの命令３５２を受信する。ステップ１１２０では、コプロセッサユニット２６０は、受信した命令３５２を処理コア４４０上で実行して第１の一連の実行結果３５４を生成する。ステップ１１３０では、コプロセッサユニット２６０は、コンパニオンプロセッサインタフェース（例えばコンパニオンプロセッサインタフェース４２０）を介してのコンパニオンプロセッサユニット（例えばプロセッサユニット２２０）への第１の一連の実行結果３５４の伝達を開始する。
【０１０１】
次に図１２を参照すると、コンピュータ可読媒体１２１０が示されている。コンピュータ可読媒体１２１０は、プロセッサユニット２２０及びコプロセッサユニット２６０を含むコンピュータシステム１００によって実行可能な命令を記憶している製品の１つの実施形態である。図示されるように、コンピュータ可読媒体１２１０は、プロセッサユニット２２０内の１つ以上の機能ユニットによって実行可能な一連のプロセッサ命令１２２１と、コプロセッサユニット２６０によって実行される一連のコプロセッサ命令１２２２とを含む。図示される実施形態においては、セット１２２１内の各プロセッサ命令１２３１はプロセッサオプコードビット１２４１を含み、そしてセット１２２２内のコプロセッサ命令１２３２の各々はコプロセッサオプコードビット１２４２を含む。種々の実施形態において、命令１２３１及び１２３２はアドレスビット１２４４及び／又は即時データ１２４６を含んでいてよい。（言うまでもなく、図示されている以外の命令１２３１及び１２３２の配列が可能である。例えば、全ての命令が即時データ又はアドレスビットを必ずしも含む必要はない。
【０１０２】
スケジューラユニット３１０は、種々の基準を用いて命令をスケジューリング／経路付けしてよい。１つの実施形態では、スケジューラ３１０は、オプコードビットに基き命令を経路付ける（例えばプロセッサ命令１２３１はプロセッサオプコードビット１２４１を含みまたコプロセッサ命令１２３２はコプロセッサオプコードビット１２４２を含む）。他の実施形態においては、スケジューラユニット３１０は、アドレスビットに基き命令を経路付ける（例えば特定のアドレスがプロセッサ命令に付随している一方で他のものがコプロセッサ命令に付随している）。他の実施形態では、スケジューラ３１０は、プログラム１２２０内の命令の順序等のような他の基準に基いて命令を実行のためにスケジューリングする。
【０１０３】
コンピュータ可読媒体１２１０は、実行の間に用いられるプログラム命令及び／又はデータを記憶する様々な媒体の任意のものを含んでいてよい。１つの実施形態では、コンピュータ可読媒体１２１０は、コンピュータシステム１００のメモリサブシステムの種々の部分を含み得る有形的コンピュータ可読メモリ媒体のような製品であってよい。他の実施形態においては、有形的コンピュータ可読媒体１２１０は、磁気媒体（例えばディスク）又は光学的媒体（例えばＣＤ、ＤＶＤ、及び関連する技術、等）のような記憶媒体又はメモリ媒体を含んでいてよい。有形的コンピュータ可読媒体１２１０は、揮発性メモリ又は不揮発性メモリのいずれであってもよい。例えば、有形的コンピュータ可読媒体１２１０は、ＳＤＲＡＭ、ＤＤＲ＿ＳＤＲＡＭ、ＲＤＲＡＭ、ＳＲＡＭ、フラッシュメモリ、及び様々な種類のＲＯＭ、等であってよい（限定はしない）。例えば図１は、有形的コンピュータ記憶媒体（例えばメモリ１２０）を含んでおり、有形的コンピュータ記憶媒体は、プロセッサユニット２２０又はコプロセッサユニット２６０で実行可能なプログラム命令をそれぞれ記憶するために使用可能である。
【０１０４】
他の実施形態においては、コンピュータ可読媒体１２１０は、有線、ワイヤレス又はその両方であるかにかかわらず通信媒体、リンク、及び／又はシステム（例えばケーブル、ネットワーク、等）を介して伝達される電気的、電磁気的、又は光学的な信号のような信号上での命令及び／又はデータを記憶／符号化し得る非有形的媒体である。そのような信号は、前述の説明に従って実施又は実装される命令及び／又はデータを搬送することができる。例えばコンピュータシステム１００上で実行可能な命令は、様々な種類のコンピュータネットワークを介して伝達されてよい。
【０１０５】
特定の実施形態が上述のように説明されてきたが、特定の特徴に関して単一の実施形態のみが説明されているとしても、上述の実施形態は本開示の範囲を限定することを意図したものではない。開示において提供される特徴の例は、特に記述がない限り制限的であるよりもむしろ例示的であることが意図されている。以上の説明は、この開示の利益を享受する当業者にとって明らかであるような変更、修正、及び均等なものに及ぶことが意図されている。
【０１０６】
本開示の範囲は、ここに対処される課題のいずれか又は全部を軽減するか否かにかかわらず、ここに開示される任意の特徴若しくは特徴の組み合わせ（明示的であろうとなかろうと）又はそれらの任意の一般化を含む。従って、そのような特徴の任意の組み合わせに対して、この出願（又はそれに対して優先権を主張する出願）の手続の間に新たな請求項が作成されるかもしれない。特に、添付の特許請求の範囲に関連して、従属請求項からの特徴は独立請求項の特徴と組み合わされるかもしれず、また、それぞれの独立請求項からの特徴は、単に添付の特許請求の範囲に列挙されている特定の組み合わせだけでなく任意の適切な様態で組み合わされるかもしれない。
【図１】
0005676470.tif 000002
【図２】
0005676470.tif 000003
【図３】
0005676470.tif 000004
【図４】
0005676470.tif 000005
【図５】
0005676470.tif 000006
【図６Ａ】
0005676470.tif 000007
【図６Ｂ】
0005676470.tif 000008
【図６Ｃ】
0005676470.tif 000009
【図６Ｄ】
0005676470.tif 000010
【図７】
0005676470.tif 000011
【図８】
0005676470.tif 000012
【図９】
0005676470.tif 000013
【図１０】
0005676470.tif 000014
【図１１】
0005676470.tif 000015
【図１２】
0005676470.tif 000016