(57)【特許請求の範囲】
【請求項１】
第１のスレッドの命令をコアで実行する間に、第２のスレッドのレジスタファイルのレジスタにおけるソースオペランドの位置を示す前記ソースオペランドの位置インジケータと、かつデスティネーションオペランドが前記第２のスレッドによってアクセスされるべきことを示す前記デスティネーションオペランドの位置インジケータと、を含む前記命令をデコードしたことに応じて、前記コアが前記第２のスレッドの前記レジスタファイルにアクセスして、前記第１のスレッドの前記命令のためのソースオペランドを取得する段階と、
前記命令の実行の結果を前記デスティネーションオペランドとして前記第１のスレッドのレジスタファイルに格納する段階と、
を備える方法。
【請求項２】
前記ソースオペランドにより識別されたレジスタに関連する同期インジケータが、前記第２のスレッドのプロデューサ演算が終っていないことを示す第１の状態にある場合、前記第１のスレッドの前記命令を実行させない段階と、
前記レジスタに関連する前記同期インジケータが、前記第２のスレッドの前記プロデューサ演算の終了を示す第２の状態にある場合、前記第１のスレッドの前記命令を実行する段階と、
をさらに備える、請求項１に記載の方法。
【請求項３】
前記プロデューサ演算が終了した後、前記レジスタに対するスコアボードのエントリに前記同期インジケータをセットする段階をさらに備える、請求項２に記載の方法。
【請求項４】
前記プロデューサ演算が終了した後、前記第１のスレッドに関連する前記レジスタのための前記スコアボードの前記エントリに前記同期インジケータをセットし、前記第２のスレッドに関連する前記レジスタのための前記スコアボードの前記エントリに前記同期インジケータをリセットする段階をさらに備える、請求項３に記載の方法。
【請求項５】
前記コアにおいて、前記第２のスレッドの前記プロデューサ演算と、前記第１のスレッドの前記命令とを実行する段階をさらに備える、請求項２に記載の方法。
【請求項６】
前記第１のスレッドの前記命令の結果を、前記第１のスレッドの前記レジスタファイルのデスティネーションレジスタに格納し、前記第１のスレッドの前記命令におけるデスティネーションオペランドの位置インジケータに基づき、前記デスティネーションレジスタ用の同期インジケータをアップデートする段階をさらに備える、請求項１に記載の方法。
【請求項７】
第１のスレッドの第１のレジスタファイルにおけるレジスタにそれぞれ対応するエントリを格納し、前記エントリのそれぞれは、
第２のスレッドの第２のレジスタファイルの対応するレジスタをデスティネーションオペランドとして使用するための前記第２のスレッドのプロデューサ演算が終了しているかどうかを示す同期インジケータおよび、
前記第１のレジスタファイルにおける前記レジスタに格納されたオペランドが、前記第１のスレッドのコンシューマ演算のみによって用いられるかどうかを示すレディインジケータを含む、記憶装置と、
前記第２のスレッドが、前記第２のレジスタファイルの前記対応するレジスタを前記デスティネーションオペランドとして用いる命令を実行した後、前記対応するレジスタに対するエントリの前記第１のスレッドの前記同期インジケータをアップデートするコントローラと、を備え、
前記命令は、前記第１のスレッドによる前記対応するレジスタの使用を示す前記デスティネーションオペランド用のローカリティインジケータを含む、
装置。
【請求項８】
コアは、前記第１のレジスタファイル、および、前記第２のレジスタファイルを用いて、前記第１のスレッド、および、前記第２のスレッドを同時に実行し、
前記第１のスレッドの実行中に前記第２のレジスタファイルにアクセスする、
請求項７に記載の装置。
【請求項９】
コアは、前記第１のスレッドの命令のソースオペランド用の位置インジケータおよび前記対応するレジスタに対するエントリの前記同期インジケータに基づき、前記第２のレジスタファイルにアクセスする、請求項７に記載の装置。
【請求項１０】
コアをさらに備え、前記コアは、前記記憶装置と、前記第１のレジスタファイルと、前記第２のレジスタファイルと、実行ユニットとを有し、前記実行ユニットは、前記第１のスレッドの前記命令のローカリティインジケータに基づき、前記第２のレジスタファイルのレジスタから、前記第１のスレッドの前記命令を実行するためのソースオペランドを取得する、請求項７に記載の装置。
【請求項１１】
前記第２のレジスタファイルの前記レジスタに関連するエントリの前記同期インジケータが、前記第２のスレッドのプロデューサ命令が終了していない状態を示す場合、前記第１のスレッドの前記命令は実行されない、請求項１０に記載の装置。
【請求項１２】
第１のスレッドのデータを格納する複数のレジスタを有する第１のレジスタファイルと、
第２のスレッドのデータを格納する複数のレジスタを有する第２のレジスタファイルと、
前記第１のレジスタファイルおよび前記第２のレジスタファイルに接続され、前記第１のスレッドおよび前記第２のスレッドの命令を実行する実行ユニットと、
前記実行ユニットに接続された命令発行器と、
前記実行ユニットに接続されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）と、
を備え、
前記実行ユニットは、前記第１のレジスタファイルにおけるソースオペランドの存在を示す、前記第２のスレッドの前記命令の位置インジケータに基づいて、前記第１のレジスタファイルにアクセスし、前記第２のスレッドの命令を実行するための前記ソースオペランドを取得し、
前記命令発行器は、前記ソースオペランドに関連するレジスタに付随する同期インジケータがアクティブになるまで、前記第２のスレッドの前記命令の割り当てを保留し、前記第１のスレッドのプロデューサ命令が実行された後、前記レジスタに付随する前記同期インジケータを書き込み、
前記プロデューサ命令は、デスティネーションオペランドがリモートスレッドにアクセスされたことを示す、前記プロデューサ命令の前記デスティネーションオペランド用の位置インジケータを含む、
システム。
【請求項１３】
前記命令発行器は、前記第１のスレッドの前記プロデューサ命令が実行された後、前記レジスタに付随するレディインジケータをさらに書き込む、請求項１２に記載のシステム。
【請求項１４】
前記命令発行器は、前記同期インジケータ、および、前記レディインジケータを前記レジスタに対応するスコアボードのエントリに書き込む、請求項１３に記載のシステム。
【請求項１５】
前記実行ユニットと、前記第１のレジスタファイルと、前記第２のレジスタファイルとを有する第１のコアをさらに備え、前記第１のコアは、前記第１のスレッドおよび前記第２のスレッドの命令を処理する、請求項１２に記載のシステム。
【請求項１６】
第２の実行ユニット、および、第３のレジスタファイルを有する第２のコアをさらに備え、前記第２のコアは、第３のスレッドの命令を処理し、前記第１のレジスタファイルおよび前記第２のレジスタファイルの少なくとも１つにアクセスして前記第３のスレッドで用いられるソースオペランドを取得する、請求項１５に記載のシステム。
【請求項１７】
前記第１のレジスタファイル、および、前記第２のレジスタファイルを含む統合レジスタファイルをさらに備える、請求項１２に記載のシステム。
【請求項１８】
第２のスレッドの命令が、第１のスレッドを示す第１のレジスタソースオペランドの位置インジケータを含む場合、
前記第１のスレッドのレジスタファイルにアクセスして、前記第２のスレッドの前記命令において識別される前記第１のレジスタソースオペランドを、コアにおける前記命令の実行のために取得する段階をコンピュータに実行させ、
前記第２のスレッドの命令は、レジスタデスティネーションオペランドが前記第１のスレッドによってアクセスされるべきことを示す前記レジスタデスティネーションオペランドの位置インジケータを含む、
プログラム。
【請求項１９】
前記第１のスレッドの前記命令が、前記第２のスレッドを示す第２のレジスタソースオペランドの位置インジケータを含む場合、
前記第２のスレッドのレジスタファイルにアクセスして、前記第１のスレッドの命令において識別される前記第２のレジスタソースオペランドを、前記第１のスレッドの命令を実行するために取得する段階をさらにコンピュータに実行させる、
請求項１８に記載のプログラム。
【請求項２０】
前記第１のレジスタソースオペランドにより識別されたレジスタに関連するインジケータが、アクティブになるまで、前記第２のスレッドの前記命令を実行しないようにする段階をさらにコンピュータに実行させ、
前記第１のレジスタソースオペランドにより識別された前記レジスタに関連するインジケータは、前記第１のスレッドのプロデューサ演算の終了を示す
請求項１８に記載のプログラム。
【請求項２１】
前記第２のスレッドの前記命令を実行した後、前記第２のスレッドの前記命令の前記レジスタデスティネーションオペランドにより識別されたレジスタに関連する同期インジケータをアクティブにする段階をさらにコンピュータに実行させる、請求項１８に記載のプログラム。
【請求項２２】
前記第２のスレッドに前記第１のスレッドの状態を複写せずに、前記第１のスレッドから前記第２のスレッドを生成し、前記第２のスレッドの前記命令の実行中に、前記第１のスレッドの前記レジスタファイルに前記第２のスレッドをアクセスさせる段階をさらにコンピュータに実行させる、請求項１８に記載のプログラム。
【発明の詳細な説明】
【背景技術】
【０００１】
プロセッサは、命令およびデータをマシンに伝送して異なる要求の演算を実行させるための多数の構造および複雑な制御技術を有する非常に複雑なマシンになってきた。性能を高めるべく、命令レベルの並列性（ＩＬＰ）を利用するプロセッサもある。このような技術は、性能を高める一方で、消費電力を増大させ、設計をより複雑にしうる。したがって、スレッドレベルの並列性（ＴＬＰ）を支持しかつ利用するアーキテクチャによって多数のスレッドを協働させる設計になっているプロセッサもある。このようなプロセッサは、マルチコア、例えば、小さいインオーダーの同時マルチスレッド（ＳＭＴ）コアなどの小さいコアを多数含むこともよくある。
【０００２】
しかしながら、このようなインオーダーのコアは、Ｉ Ｌ Ｐ を利用したアウトオブオーダーのコアに比べて効果が劣ることがある。すなわち、インオーダーのプロセッサのアーキテクチャでは、並列アプリケーションなら効率よく管理できるが、シングルスレッドアプリケーション、および、並列アプリケーションのシリアルコード部分は効率よく実行できないことがある。したがって、特定のプロセッサは、効率を高めながらも複雑さを最小限に維持すべく、このようなアプリケーションをばらばらにしてきめ細かなスレッドを実行しうる。しかしながら、第１のスレッドが第２のスレッドの情報を用いようとすると、過度なオーバーヘッドが起きうる。
【図面の簡単な説明】
【０００３】
【図１】本発明の一実施形態における方法のフローチャートである。
【０００４】
【図２】本発明の一実施形態におけるスコアボードのブロック図である。
【０００５】
【図３】本発明の一実施形態における命令実行の実装のブロック図である。
【０００６】
【図４】本発明の一実施形態におけるフローマーク情報を生成する方法を示すフローチャートである。
【０００７】
【図５】本発明の一実施形態におけるシステムのブロック図である。
【発明を実施するための最良の形態】
【０００８】
さまざまな実施形態において、プロセッサコアで実行するマルチスレッドは、他のスレッドに関連するレジスタファイル内の値にアクセスしうる。このような通信チャネルによって、実施形態は、効果的な同時マルチスレッド（ＳＭＴ）動作を提供しうる。一例としては、第１および第２のスレッドは、ＳＭＴプロセッサなどの単一のインオーダープロセッサコアで実行しうる。第１のスレッドによって生成されたデータ値が第２のスレッドによってアクセスでき、また、第２のスレッドによって生成されたデータ値が第１のスレッドによってアクセスできるプロデューサ／コンシューマモデルを実現すべく制御が行われる。各スレッドは、実行中に他のスレッドの設計上のレジスタ状態を読み取ることができ、それによって非常に低いオーバーヘッドでスレッド間の同期が可能になる。
【０００９】
アクセス時において、所定のレジスタ内の正しい値を読み取ることを保証すべく、同時制御が行われてよく、その結果、コンシューマスレッドは、プロデューサスレッドから正しいデータを読み取る。さまざまな実施形態では、命令の発行に関連して用いられるようなスコアボード構造は、同期インジケータを含みうる。より詳しくは、第１のスレッドのレジスタごとのスコアボード構造におけるエントリのそれぞれは、第２のスレッドの対応するレジスタの同期インジケータを含み、また、第２のスレッドのレジスタごとのスコアボード構造におけるエントリのそれぞれは、第１のスレッドの対応するレジスタの同期インジケータを含みうる。このインジケータを使用することにより、他のスレッドにおける対応するプロデューサ命令が実行されるまではコンシューマ命令が進行しないようにするので、プロデューサレジスタファイルにおいて所望の値を得ることができる。このような同期制御を利用すべく、実施形態は、命令に関連するフロー情報を提供する。例えば、フラグまたはフローマークは、命令の内容を備えうる。一実施形態では、命令は、オペコードと、ソースおよびデスティネーションオペランドと、ソースおよびデスティネーションオペランドのそれぞれのフローマークとを含みうる。以下に詳しく述べるように、さまざまな機構が対応する命令のフローマークの生成を処理しうる。例えば、コンパイラサポートが提供されることにより、命令セットアーキテクチャ（ＩＳＡ）に提供された命令サポートに従い、このようなフローマークがコンパイル中に生成されうる。他の実装では、ハードウェアまたはソフトウェアのオプティマイザなどの最適化機構がコードのフロー制御を分析し、しかるべくフローマークを生成してよい。このような方法で、マルチスレッドは、命令粒度で同期化しうる。
【００１０】
さまざまな機能は、本発明の実施形態により提供されるレジスタアクセスおよび同期化を利用しうる。例えば、低オーバーヘッドのスレッド生成機構は、他のスレッドのレジスタファイルのアクセスを利用しうる。このような方法で、既存のスレッドのコンテキストから生成されたスレッドのコンテキストへのすべてのレジスタをコピーする代償を防ぐことができる。それによって、生成されたスレッドの適切なコンシューマ命令は、既存のスレッドのレジスタファイルからオペランドを読み取るべくマーキングされてもよい。
【００１１】
さまざまな実施形態によれば、２つのきめ細かなスレッド間の共同実行に付随するオーバーヘッドは、低下しうる。したがって、複数の実施形態は、マルチスレッドを生成すると共に、投機的マルチスレッディングをサポートすることに関連して用いられてよい。さらに、複数の実施形態は、他のスレッドの実行中に生じる特定のタスクを処理すべく初期化されうる、いわゆるヘルパースレッドに関連して用いられてもよい。しかしながら、本発明の範囲は、この点に関して限定されることはなく、レジスタアクセスおよび同期機構は、異なるプロセッサアーキテクチャ、システムなどを含む多くの異なる実装において用いられうる。
【００１２】
図１を参照すると、本発明の一実施形態における方法のフローチャートが示されている。図１に示すように、方法１０は、第２のスレッドのレジスタファイルにおける情報にアクセスしうる第1のスレッドの命令を実行するよう用いられうる。図１に示すように、方法１０は、実行のために第１のスレッドの命令を受信することから始まってよい（ブロック２０）。例えば、プロセッサの命令デコーダは、命令を受信してデコードしうる。一実施形態では、命令は、ソース／デスティネーションオペランドの識別と共に、実行されるべき演算のタイプを示すオペコードを含みうる。さらに、命令は、ソース／デスティネーションオペランドが、第２のスレッドに関連するレジスタファイルなどのリモートレジスタファイルからアクセスされるか、または、当該リモートレジスタファイルに供給されるかを示す情報を含みうる。本願明細書中ではリモートレジスタファイルと記載しているが、ローカルレジスタファイル、および、リモートレジスタファイルは、例えば、多数のインオーダーコアを含むマルチまたはメニーコアプロセッサなどの、プロセッサのシングルコアに存在しうることに留意されたい。
【００１３】
さらに図１を参照すると、次に、リモートスレッドから命令のソースオペランドが得られるかどうかが決定される（ひし形３０）。すなわち、フローマーク情報（一実施形態における）に基づき、ＳＭＴコア内のレジスタファイルを含む第２のスレッドなどのリモートスレッドからソースオペランドが得られるかどうかが決定されてよい。ソースオペランドが得られる場合、制御はひし形４０へと進み、このようなリモートソースオペランドのすべてに関連する同期インジケータはアクティブかどうかが決定されてよい。すなわち、所定のレジスタにおける値の可用性に関する状態情報を識別するスコアボードまたは他の記憶装置は、リモートレジスタファイルから得られるすべてのソースオペランドが所望の値を含むかどうかを決定すべく分析されうる。換言すると、第１のスレッドの従属命令が従属している演算をプロデューサスレッドが完了しているかどうか、が決定されてよい。同期インジケータがアクティブでない場合、ひし形４０をループバックして、同期インジケータが現れるまで命令の実行を保留してよい。同期インジケータが現れるということは、リモートレジスタに所望の値が存在するということであり、制御は、以下に述べるひし形４５へと進む。
【００１４】
なおも図１を参照すると、リモートスレッドからソースオペランドが得られないことが決定されるか（ひし形３０）、または、すべてのリモートソースオペランドに関連する同期インジケータがアクティブである（ひし形４０で決定されたように）場合、制御はひし形４５へと進み、ローカルスレッド（すなわち第１のスレッド）からソースオペランドが得られるかどうかが決定されてよい。ソースオペランドが得られる場合、制御はひし形５０へと進み、すべてのローカルソースオペランドに関連するレディインジケータがアクティブかどうかが決定されてよい。例えば、同じスレッドからの従属演算が正しい値を用いて実行されることができるように、第１のスレッドの前のプロデューサ命令が終了していることを示すインジケータがアクティブかどうかを決定すべく、スコアボードはアクセスされうる。アクティブでない場合、ひし形５０をループバックしてよい。
【００１５】
制御は、ひし形４５および５０の両方からブロック６０へと進み、実行のための命令が発行されうる。例えば、アロケータ、予約ステーション、または、スコアボードまたは同様の状態記憶装置を含む他の構造などの命令発行器は、実行のための命令を発行してよい。したがって、整数ユニット、浮動小数点演算ユニット、または、他のこのようなユニットなどの実行ユニットは、特に識別されたレジスタファイルから示されるソースオペランドにアクセスしてよい（ブロック７０）。したがって、ローカルソースオペランドに関しては、スレッドに関連するローカルレジスタファイルは、ソースオペランドを得るためにアクセスされてよく、一方、リモートオペランドに関しては、リモートレジスタファイルなどの第２のスレッドに関連するレジスタファイルがアクセスされてよい。
【００１６】
さらに図１を参照すると、命令が実行されうる（ブロック８０）。例えば、所望の結果を得るべく２つのソースオペランドが追加され、例えば、第１のレジスタファイルのデスティネーションオペランドなどのデスティネーションオペランドに格納されうる。命令がうまく実行されたことによって、さまざまなインジケータがアップデートされうる（ブロック９０）。より詳しくは、スコアボードにおいて、レディおよび同期インジケータが規定どおりにアップデートされてよい。上述の例に続き、デスティネーションオペランドはローカルオペランドであることが示される場合、デスティネーションレジスタに関連するレディインジケータがしかるべく設定されうる。さらに、当該レジスタの同期インジケータがリセットされて値が同期されていないことが示されうる。それに代わってデスティネーションオペランドが遠隔で使用されることが示される場合、リモート（例えば第２の）レジスタファイルの同期インジケータがしかるべく設定されてよい。さらに、ローカルレジスタファイルのレディインジケータが設定されてよい。このような方法で、リモートスレッドおよびローカルスレッドの両方がソースオペランドとしてのデスティネーションオペランドにアクセスできることにより、同じスレッド内、および、異なるスレッド間の両方で効果的なプロデューサ／コンシューマ演算が可能になる。図１の実施形態における特定の実装について示したが、本発明の範囲は、この点に関して限定されるものではないことを理解されたい。
【００１７】
プロセッサ内に存在するさまざまな構造により、本発明の一実施形態におけるレジスタアクセスおよび同期機構が実現する。図２を参照すると、マルチスレッド間の同期のためのサポートを含む、本発明の一実施形態におけるスコアボードのブロック図が示されている。図２に示すように、スコアボード１００は、プロセッサコア内にある記憶装置であってよく、多数のレジスタファイルのレジスタに関連する状態情報を格納するエントリを含みうる。詳しくは、図２に示される実施形態では、第１のスレッドおよび第２のスレッドのそれぞれは、そのレジスタファイル内のレジスタごとのエントリを含みうる。したがって、図２に示すように、第１のスレッド１１０は、複数のエントリ１１２ａから１１２ｎ（まとめてエントリ１１２と呼ぶ）を有しうる。各エントリ１１２は、レジスタ識別子（ＩＤ）を用いてインデックス付けされてよく、各エントリは、状態情報を有してよい。図２に示す特定の実施形態では、レディインジケータ１１４ａから１１４ｎ（まとめてレディインジケータ１１４と呼ぶ）、および、同期インジケータ１１６ａから１１６ｎ（まとめて同期インジケータ１１６と呼ぶ）が存在しうる。レディインジケータ１１４は、識別されたレジスタに格納される対応するオペランドが当該スレッドのコンシューマ演算に用いられる準備ができているかどうかを示すのに用いられ、一方、同期インジケータ１１６は、ローカルスレッドによりアクセスされるべきリモートオペランドは、ローカルスレッドによりアクセスされる準備ができているか、すなわち、（リモート）プロデューサスレッドのプロデューサ命令は、適切な値を実行し、所望の位置に格納したかどうかを示すために用いられてよい。第２のスレッド１２０は、そのレジスタファイルのレジスタにそれぞれ関連する複数のエントリ１２２ａから１２２ｎ（まとめてエントリ１２２と呼ぶ）を含んでもよいことに留意されたい。同様に、各エントリ１２２は、対応するレディインジケータ１２４ａから１２４ｎ（まとめてレディインジケータ１２４と呼ぶ）、および、同期インジケータ１２６ａから１２６ｎ（まとめて同期インジケータ１２６と呼ぶ）を含みうる。スレッドごとに別々のエントリを用いることに代わり、スコアボードは、マルチスレッドの各対応するレジスタのために単一のエントリを有するようになっていてもよく、当該単一のエントリは、各スレッドに関連する異なる部分を有する。
【００１８】
さらに、図２の実施形態では、特定の構成を示しているが、本発明の範囲は、この点に関して限定されるものではなく、さまざまな実施形態では、異なるスレッドのレジスタファイルに関連して状態情報を異なる方法で生成、格納、および、使用することも実現されてよいと理解されたい。例えば、異なるプロセッサアーキテクチャは、異なる制御設定を有し、命令を分析してプロセッサの１つ以上の実行ユニットに発行しうる。いくつかのプロセッサは、デコードされた命令が、実行可能となるために必要とされるさまざまなリソースを有するかどうかを決定し、また、インオーダーまたはアウトオブオーダーで、どの命令が実行ユニットに提供されるかを選択するアロケータ、予約ステーション、スコアボード、コントローラ、および、他のさまざまなロジックを有しうる。さまざまな実施形態では、スコアボード１００は、所定のプロセッサアーキテクチャで利用可能ないかなる形態の命令発行器の一部であってもよいし、あるいは、そのような命令発行器、または、スコアボード１００に存在する情報に基づき命令の発行を決定しうる他のそのようなロジックに結合されてもよい。
【００１９】
上述のごとく、さまざまな実施形態において、命令に関連するフロー情報が分析されることにより、命令は、他のスレッドのレジスタにある情報にアクセスすることであるかどうか、および／または、命令の結果は、異なるスレッドによってアクセスされうるかどうか、が決定されてよい。図３を参照すると、本発明の一実施形態における命令実行の実装を示すブロック図が示されている。図３に示すように、システム２００は、着信データに対しさまざまな演算を実行する実行ユニット２３０を含みうる。図３に示される実施形態では、実行ユニット２３０には、第１のレジスタファイル２２０、および、第２のレジスタファイル２２５が結合されうる。図３の実施形態では、第１のレジスタファイル２２０は、第１のスレッドに関連し、第２のレジスタファイル２２５は、第２のスレッドに関連しうる。図３の実施形態では、別々のレジスタファイルとして示されているが、いくつかの実装においては、第１のスレッドと論理的に関連付けられた第１の部分と、第２のスレッドと論理的に関連付けられた第２の部分とを有するグローバルレジスタファイルが存在してもよいと理解されたい。図３に示すように、実行ユニット２３０によって実行される第１のスレッドからの命令２０５は、加算演算、乗算、または、他の演算などの命令のタイプを識別するオペコードを含みうる。命令２０５は、結果の行き先、すなわち、第１のレジスタｒａｘに対応しうるデスティネーションオペランドをさらに識別しうる。このデスティネーションオペランドに関連付けられたローカリティインジケータは、図３ではＲＥＭＯＴＥ＿ＤＥＳＴとして識別される。図３に示すように、このローカリティインジケータは、デスティネーションオペランドがリモートスレッド、すなわち、図３の例における第２のスレッドにより最近アクセスされ、同様にローカルスレッド内のコンシューマ命令によってもアクセスされうることを示す値１を有する。さらに図に示すように、命令２０５は、２つのソースオペランド、すなわち、レジスタｒｂｘにアクセスする第１のソースオペランド（ＳＲＣ１）も識別する。このソースオペランドのローカリティインジケータ（すなわちＲＥＭＯＴＥ＿ＳＲＣ）は、値１に設定されているので、このソースオペランドは、リモートレジスタファイル、すなわち、レジスタファイル２２５からアクセスされうる。同様に、第２のソースオペランド（すなわちＲＥＭＯＴＥ＿ＳＲＣ）用のローカリティインジケータが値０に設定されているときは、命令２０５は、第２のレジスタｒｅｘにアクセスする第２のソースオペランド（ＳＲＣ２）を含み、これは、第１のレジスタファイル２２０から得られる。
【００２０】
ソースオペランドの１つは、異なるレジスタファイル、すなわち、第２のレジスタファイル２２５からアクセスされるので、命令２０５は、そのソースオペランドに関連する同期インジケータがアクティブになる（設定されるなど）までは進行しないようにされてよい。さらに、命令２０５は、第２のソースオペランドに関連するレディインジケータもアクティブになるまで進行しないようにされうる。したがって、図３に示すように、スコアボード１００は、第１のソースオペランドに関連した第１のエントリ１１２ｂと、第２のオペランドに関連した第２のエントリ１１２ｃとを含む。レディインジケータ１１４ｃの値が設定され、同期インジケータ１１６ｂの値も設定された場合、命令２０５は、実行ユニット２３０に発行されうる。これによって、第１のレジスタファイル２２５におけるレジスタｒｂｘ、および、第２のレジスタファイル２２０におけるレジスタｒｅｘに適切な値が存在するようになる。したがって、実行ユニット２３０は、第１のレジスタファイル２２０からｒｅｘを読み出し、第２のレジスタファイル２２５からｒｂｘを読み出す。命令の実行が完了したら、結果は、第１のレジスタファイル２２０のデスティネーションレジスタｒａｘに格納されてよい。さらに、さまざまなレディおよび同期インジケータがアップデートされうる。詳しくは、図３に示すように、実行後、第１のスレッドに関連するエントリ１１２ａがアップデートされることにより、値１を有するレディインジケータ１１４ａと、値０を有する同期インジケータ１１６ａとを有するようになる。さらに、第２のスレッドに関連するエントリ１２６ａは、値１に設定される対応する同期インジケータ１１６ａを有することにより、第２のスレッドのコンシューマ命令のためのソースオペランドとして機能する適切な値がレジスタｒａｘ内に存在することを示しうる。図３の実施形態における特定の実装を示したが、本発明の範囲は、この点に関して限定されるものではない。
【００２１】
さらに、図３に示すように、システム２００内にコントローラ２５０が存在しうる。コントローラ２５０は、各スレッドから実行ユニット２３０への命令の発行を処理するためのさまざまなハードウェア、ソフトウェア、ファームウェア、または、それらの組合せを有しうる。図３に示すように、コントローラ２５０は、スコアボード１００に結合されて、内部のさまざまなエントリに存在する状態情報を分析することによって、所定の命令のソースオペランドは、関連するレディおよび／または同期インジケータの分析に基づき、実行の準備ができているかどうかが決定されうる。一実施形態では、コントローラ２５０は、命令のソースオペランドが利用可能な場合に命令の発行を可能にするロジック機能を実装しうる。例えば、一実施形態では、複数のローカルソースが示される（すなわち、ソースオペランドに関連するローカリティインジケータがローカルに指示する（例えば論理ロウ値を有する））場合、ロジック機能は、ローカルソースオペランドのためのレディインジケータを分析する論理積演算であってよく、それらがどちらもレディ状態であるかどうかを決定する。ローカルソースが示されない場合、両方のレディインジケータが、例えば、レディ状態を示す論理ハイの状態に設定されるまで、命令は保留される。その代わりに、２つのソースオペランドのうちの１つが遠隔起点であることが示される場合、論理演算は、ローカルオペランドのためのローカルレディインジケータ、および、リモートオペランドのためのローカル同期インジケータがチェックされる論理積演算に対応するので、どちらもオペランドの可用性を示すかどうかが決定されうる。オペランドの可用性を示す場合、演算は進行し、そうでない場合、これらのソースオペランドの両方が関連するレディおよび同期インジケータにより示されるように準備完了になるまで、コントローラ２５０は、演算を保留してよい。特定の実施形態に関して説明したが、本発明の範囲はこの点において限定されるものではなく、ソースオペランドがコンシューマ命令で用いられるように準備完了かどうかを決定するスコアボード、または、他の構造において、情報を分析する多くの異なる方法が実現可能である。例えば、他の実装では、デュアルコアまたはメニーコアプロセッサなどのマルチコアプロセッサが本発明の複数の実施形態を同様に実装しうる。このような実装のいくつかでは、第１のコアで実行する第１のスレッドは、他のコアで実行する異なるスレッドに関連するレジスタファイルにアクセスしてよい。しかしながら、そうすることによって、所定のスレッドの実行中に、このようなリモートレジスタファイルにアクセスする場合に一定量のオーバーヘッドが増大することがある。
【００２２】
したがって、命令、すなわち、さまざまなソースおよびデスティネーションオペランドのフラグまたはフローマークに関連するフロー情報に基づき、異なるレジスタファイルの軽いアクセス、および、同期が可能になる。さまざまな実施態様では、異なる構成要素は、スレッド、および、対応するコード、例えば、ダイナミックオプティマイザ、コンパイラ、ハードウェアオプティマイザなどを生成しうる。このようなコードを生成するどんな構成要素も、適切なフローマークを有する命令をマークしうる。さらに、構成要素は、製造者／コンシューマの関係に関与するレジスタは、コンシューマスレッドによって読み出されるまではプロデューサのスレッドでは再定義されないことを保証しうる。さまざまな実施形態では、同期ポイントは、スレッド間に設定されることにより、コンシューマスレッドが関連する値を読み終わるまでは、プロデューサ素スレッドが進行しないようにしうる。本発明の範囲は、この点において限定されるものではないが、いくつかの実施形態では、同期ポイントは、上述の同期インジケータを用いて実装されうる。例えば、図３の実施形態に記載されるフローマークは、1つのローカルまたは遠隔地に１つのオペランドが存在するかどうかを示す１ビットインジケータでありうるが、他の実施形態では、このようなローカリティインジケータは、上記のようなスレッドの３つ以上にオペランドが存在することを示すマルチビットインジケータにまで拡張されうる。すなわち、いくつかの実装では、所定のコアまたはマルチコアにおいて３つ以上のスレッドが実行中であってよい。どのスレッドの実行中でも他のスレッドに関連するレジスタファイルは、スコアボードまたは他のそのような構造における命令および情報内のフローマークに従いアクセスされることができ、その結果、例えば、これらのマルチスレッドに関連するレジスタファイルに付随する同期インジケータによって、リモートオペランドの可用性を示しうる。
【００２３】
いくつかの実施形態では、ダイナミックオプティマイザによってコードトレースが生成されうる。しかしながら、他の実施態様では、コンパイラベースのサポート、または、他の機構が用いられて適切なフローマーク情報を伴う命令が生成されうる。図４を参照すると、本発明の一実施形態におけるフローマーク情報を生成する方法のフローチャートが示される。図４に示すように、方法３００は、第１および第２のスレッドの同期インジケータ初期化して非同期状態にすることから始まってよい（ブロック３１０）。例えば、２つのスレッドは、ダイナミックオプティマイザにより生成されたコードトレースでありうる。さらに、これら複数のトレースは、シングルプロセッサコアにおける異なるスレッド、すなわち、第１および第２のスレッドによって同時に実行されうる。さまざまなオペランドの正しい属性を保証すべく、例えば、いくつかの実施形態において、同期インジケータは、論理値０などの非同期状態に初期化されてよい。これらのトレースは、ダイナミックオプティマイザによって識別されるので、オプティマイザは、レジスタをプロデューサ／コンシューマ方式に関連して制御することができ、したがって、オペランドが同期されうる同期ポイントの存在を制御しうることに留意されたい。遠隔で消費されるレジスタは、プロデューサのスレッドで何度も定義されうるが、オプティマイザは、コンシューマに用いられる直前のレジスタの定義がプロデューサ／コンシューマの関係を設定する定義であることを保証してよい。
【００２４】
さらに図４を参照すると、次の制御は、ひし形３２０へと進み、オペランドが単一のスレッドだけによって生産も消費もされるかどうかが決定されうる。オペランドが単一のスレッドで用いられる場合、制御は、ブロック３３０へと進んでよく、そこでは、オペランドを用いた命令のフローマークに使用のローカリティが示されうる。特に、このオペランドがソースまたはデスティネーションオペランドとして用いられる場合、対応するローカリティインジケータ、すなわち、フローマークは、そのオペランドがローカルにのみ用いられていることを示すリセット状態（論理０など）にあってよい。
【００２５】
さらに図４を参照すると、ひし形３２０のようにならず、１つのオペランドがマルチスレッドにより用いられていることが決定された場合、制御はひし形３４０へと進んでよい。ひし形３４０において、識別されたオペランドは、他のスレッドにより消費されるべきデスティネーションオペランドであるかどうかが決定されうる。デスティネーションオペランドである場合、制御はブロック３５０へと進み、デスティネーションオペランドの最近の識別（すなわち、コンシューマスレッドに用いられる直前の識別）が到着するまで、デスティネーションオペランドのローカルな使用がプロデューサ命令のフローマークを用いてしかるべく識別されうる。この直前の識別が到着したら、制御はブロック３６０へと進み、この命令がフローマークにより識別されることにより、デスティネーションオペランドの遠隔使用が示される。換言すると、この命令は、セット状態（論理１など）におけるデスティネーションオペランドのためのローカリティインジケータを有しうる。制御は、ブロック３６０からひし形３７０へと進み、ソースオペランドが他のスレッドによって生産されるかどうかが決定されうる。生産されない場合、制御は、上述のブロック３３０へと戻り、オペランドに関連するフローマークはローカル（すなわち論理値０）であるとして示されてよい。
【００２６】
さらに図４を参照すると、ひし形３７０のようにならず、ソースオペランドが他のスレッドによって生産されることが決定された場合、制御はブロック３８０へと進んでよく、同じスレッドにおける命令がレジスタを再定義するまで、スレッドのコンシューマ命令のフローマークにリモートソースオペランドの使用が示されうる（ブロック３８０）。すなわち、コンシューマスレッドの命令は、コンシューマスレッドがレジスタを再定義するまで、リモートレジスタファイル内のデータ値にアクセスしてよい。このようなイベントが起きた場合、制御は、ブロック３９０へと進み、ソースオペランドのローカルな使用が、コンシューマ命令のフローマーク内に示されうる。すなわち、コンシューマ命令が、同じスレッドの直前の命令のためのソースオペランドとして使用される異なる値を書き込むようレジスタを再定義したとき、同じスレッドの直前の命令は、それらに関連するフローマークを有するので、ソースオペランドがローカルに得られたことが示されうる。図４の実施形態における特定の実装を例示したが、本発明の範囲は、その点に関して限定されるものではない。
【００２７】
したがって、さまざまな実施形態において、同じコアで動作する２つのスレッドは、互いのレジスタの直接アクセスによって同期化しうる。レジスタレベルで情報にアクセスすることにより、メモリを間接的に介して異なるスレッドから情報を取得することによる同期オーバーヘッドを低下させることができ、メモリ帯域幅の問題が軽減されうる。コア内にあるレジスタファイルのレジスタを用いることによって、同じコアで動作する２つのスレッド間で６４ビットまたは１２８ビット値の通信が可能になる。このような方法で、新たに生成されたスレッドが、既存のスレッドのレジスタファイルから直接読み出されうるので、新たに生成されるスレッドに対してレジスタ状態を再現する必要はないだろう。本発明の範囲はこの点において限定されるものではないが、複数の実施形態は、例えば、投機的マルチスレッディング、ヘルパースレッド処理、および、ランアヘッドスレッドなどのきめ細かなスレッドパラダイムに用いられうる。したがって、第１のレジスタファイルの設計状態を再現するためのコピーまたは他の命令が回避されうるので、上記のようなスレッド内の命令は、減少しうる。あるいは、これらの追加のスレッドは、他のスレッドのレジスタファイルから必要とされる情報を直接得ることもできる。
【００２８】
実施形態は、多くの他のシステムタイプに実装されうる。図５を参照すると、本発明の一実施形態におけるシステムのブロック図が示される。図５に示すように、マルチプロセッサ５００は、ポイントツーポイント相互接続システムであって、ポイントツーポイント相互接続５５０を介して結合される第１のプロセッサ５７０および第２のプロセッサ５８０を含む。図５に示すように、プロセッサ５７０および５８０のそれぞれは、第１および第２のプロセッサコア（すなわちプロセッサコア５７４ａおよび５７４ｂ、プロセッサコア５８４ａおよび５８４ｂ）を有するマルチコアプロセッサでありうる。各コアは、異なるスレッドによりそれぞれ用いられる複数のレジスタファイルを含みうることに留意されたい。さらに、各コアは、例えば、本発明の一実施形態におけるフローマークおよび同期インジケータによって、コンシューマスレッドによるプロデューサスレッドのレジスタファイルへの直接アクセスを可能にするハードウェア、ソフトウェア、または、ファームウェアを含みうる。また、さらに、いくつかの実施態様では、プロセッサコア５７４ａで動作するスレッドは、プロセッサコア５７４ｂで動作するスレッドに関連するレジスタファイルにアクセスでき、プロセッサコア５７４ｂで動作するスレッドは、プロセッサコア５７４ａで動作するスレッドに関連するレジスタファイルにアクセスできる。
【００２９】
第１のプロセッサ５７０は、ポイントツーポイント（Ｐ−Ｐ）インターフェース５７６および５７８をさらに含む。同様に、第２のプロセッサ５８０は、Ｐ−Ｐインターフェース５８６および５８８を含む。図５に示すように、メモリコントローラハブ（ＭＣＨ）５７２および５８２は、それぞれのメモリ、すなわち、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部でありうるメモリ５３２およびメモリ５３４にプロセッサを結合する。
【００３０】
第１のプロセッサ５７０および第２のプロセッサ５８０は、Ｐ−Ｐ相互接続５５２および５５４をそれぞれ介してチップセット５９０に結合されてよい。図５に示すように、チップセット５９０は、Ｐ−Ｐインターフェース５９４および５９８を含む。さらに、チップセット５９０は、チップセット５９０と、高性能グラフィックエンジン５３８とを接続するインターフェース５９２を含む。一実施形態では、グラフィックエンジン５３８とチップセット５９０とを接続するためにＡＧＰ（Ａｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）バス５３９が用いられうる。ＡＧＰバス５３９は、カリフォルニア州サンタクララのインテル社により１９９８年５月４日に発表された、ＡＧＰ（Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）インターフェース仕様改訂版２．０に準拠しうる。あるいは、ポイントツーポイント相互接続５３９が、それらの構成要素を接続してもよい。
【００３１】
次に、チップセット５９０は、インターフェース５９６を介して第１のバス５１６に接続されうる。一実施形態では、第１のバス５１６は、１９９５年６月に発表されたＰＣＩローカルバス仕様生産バージョン改訂版２．１、または、ＰＣＩ  Ｅｘｐｒｅｓｓ（登録商標）バスなどのバス、あるいは、他の第三世代入出力（Ｉ／Ｏ）相互接続バスによって定義されるようなＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスであってよいが、本発明の範囲は、それらに限定されない。
【００３２】
図５に示すように、さまざまなＩ／Ｏデバイス５１４は、第１のバス５１６を第２のバス５２０に接続するバスブリッジ５１８と共に、第１のバス５１６に接続されてよい。一実施形態では、第２のバス５２０は、ローピンカウント（ＬＰＣ）バスでありうる。一実施形態では、さまざまなデバイスは、例えば、キーボード／マウス５２２、通信デバイス５２６、および、コード５３０を含みうるディスクドライブまたは他の大容量記憶装置などのデータ記憶装置５２８を有する第２のバス５２０に接続されてよい。さらに、オーディオＩ／Ｏ５２４は、第２のバス５２０に接続されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図５のポイントツーポイントアーキテクチャに代わり、システムは、マルチドロップバス、または、そのような他のアーキテクチャを実装しうる。
【００３３】
実施形態は、コードに実装され、命令を記憶する記憶媒体に格納されうる。命令は、当該命令を実行するようシステムをプログラムするために用いられうる。記憶媒体は、これらに限定されないが、フロッピーディスク、光ディスク、ＣＤ−ＲＯＭ（コンパクトディスクリードオンリーメモリ）、ＣＤ−ＲＷ（書き換え可能ＣＤ）、光磁気ディスク、ＲＯＭ（リードオンリーメモリ）などの半導体デバイス、ＤＲＡＭ（ダイナミックランダムアクセスメモリ）などのＲＡＭ（ランダムアクセスメモリ）、ＳＲＡＭ（スタティックＲＡＭ）、ＥＰＲＯＭ（消去可能プログラマブルＲＯＭ）、フラッシュメモリ、ＥＥＰＲＯＭ（電気的消去可能ＰＲＯＭ）、磁気または光カード、または、電子命令を格納するのに適したいかなるタイプの媒体を含みうる。
【００３４】
これまで限定された数の実施形態を参照して本発明を説明してきたが、そこから多くの修正および変更が可能であることは当業者には明らかであろう。添付の請求項は、このような修正および変更も本発明の真の趣旨および範囲内にあるとしてすべて包含することが意図される。以下に本発明の実施形態の例を示す。
［実施形態１］
第１のスレッドの命令をコアで実行する間に、前記コアから第２のスレッドのレジスタファイルにアクセスし、前記第１のスレッドの前記命令のためのソースオペランドを取得する段階を備える方法。
［実施形態２］
前記ソースオペランドにより識別されたレジスタに関連する同期インジケータが、前記第２のスレッドのプロデューサ演算が終っていないことを示す第１の状態にある場合、前記第１のスレッドの前記命令を実行させない段階と、
前記レジスタに関連する前記同期インジケータが、前記第２のスレッドの前記プロデューサ演算の終了を示す第２の状態にある場合、前記第１のスレッドの前記命令を実行する段階と、
をさらに備える、実施形態１に記載の方法。
［実施形態３］
前記プロデューサ演算が終了した後、前記レジスタに対するスコアボードのエントリに前記同期インジケータをセットする段階をさらに備える、実施形態２に記載の方法。
［実施形態４］
前記プロデューサ演算が終了した後、前記第１のスレッドに関連する前記レジスタのための前記スコアボードの前記エントリに前記同期インジケータをセットし、前記第２のスレッドに関連する前記レジスタのための前記スコアボードの前記エントリに前記同期インジケータをリセットする段階をさらに備える、実施形態３に記載の方法。
［実施形態５］
前記コアにおいて、前記第２のスレッドの前記プロデューサ演算と、前記第１のスレッドの前記命令とを実行する段階をさらに備え、前記コアは、前記第１のスレッドおよび前記第２のスレッドの両方が実行される共通コアを含む、実施形態２に記載の方法。
［実施形態６］
前記第１のスレッドの前記命令をデコードする段階をさらに備え、
前記命令は、前記ソースオペランド用の位置インジケータを含み、前記位置インジケータは、前記第２のスレッドの前記レジスタファイルのレジスタにおける前記ソースオペランドの位置を示す、実施形態１に記載の方法。
［実施形態７］
前記第１のスレッドの前記命令の結果をデスティネーションレジスタに格納し、前記第１のスレッドの前記命令における対応するデスティネーションオペランド用の位置インジケータに基づき、前記デスティネーションレジスタ用の同期インジケータをアップデートする段階をさらに備える、実施形態６に記載の方法。
［実施形態８］
第１のスレッドの第１のレジスタファイルにおけるレジスタにそれぞれ対応するエントリを格納する記憶装置を備え、前記エントリのそれぞれは、第２のスレッドの第２のレジスタファイルの対応するレジスタをデスティネーションオペランドとして使用するための前記第２のスレッドのプロデューサ演算が終了しているかどうかを示す同期インジケータを含む、装置。
［実施形態９］
前記第２のスレッドが、前記第２のレジスタファイルの前記対応するレジスタを前記デスティネーションオペランドとして用いる命令を実行した後、前記対応するレジスタに対するエントリの前記第１のスレッドの前記同期インジケータをアップデートするコントローラをさらに備え、前記命令は、前記第１のスレッドによる前記対応するレジスタの使用を示す前記デスティネーションオペランド用の位置インジケータを含む、実施形態８に記載の装置。
［実施形態１０］
前記記憶装置は、コアのスコアボードを有する、実施形態８に記載の装置。
［実施形態１１］
前記コアは、前記第１のレジスタファイル、および、前記第２のレジスタファイルを用いて、前記第１のスレッド、および、前記第２のスレッドを同時に実行する、実施形態１０に記載の装置。
［実施形態１２］
前記コアは、前記第１のスレッドの実行中に、前記第２のレジスタファイルにアクセスする、実施形態１１に記載の装置。
［実施形態１３］
前記コアは、前記第１のスレッドの命令のソースオペランド用の位置インジケータに基づき、前記第２のレジスタファイルにアクセスする、実施形態１２に記載の装置。
［実施形態１４］
前記コアは、前記対応するレジスタに対するエントリの前記同期インジケータにさらに基づき、前記第２のレジスタファイルにアクセスする、実施形態１３に記載の装置。
［実施形態１５］
コアをさらに備え、前記コアは、前記記憶装置と、前記第１のレジスタファイルと、前記第２のレジスタファイルと、実行ユニットとを有し、前記実行ユニットは、命令のローカリティインジケータに基づき、前記第２のレジスタファイルのレジスタから、前記第１のスレッドの前記命令を実行するためのソースオペランドを取得する、実施形態８に記載の装置。
［実施形態１６］
前記第２のレジスタファイルの前記レジスタに関連するエントリの前記同期インジケータが、前記２のスレッドのプロデューサ命令が終了していない状態を示す場合、前記第１のスレッドの前記命令は実行されない、実施形態１５に記載の装置。
［実施形態１７］
第１のスレッドのデータを格納する複数のレジスタを有する第１のレジスタファイルと、
第２のスレッドのデータを格納する複数のレジスタを有する第２のレジスタファイルと、
前記第１のレジスタファイルおよび前記第２のレジスタファイルに接続され、前記第１のスレッドおよび前記第２のスレッドの命令を実行する実行ユニットと、
前記実行ユニットに接続されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）と、
を備え、
前記実行ユニットは、前記第１のレジスタファイルにアクセスし、前記第２のスレッドの命令を実行するためのソースオペランドを取得する、
システム。
［実施形態１８］
前記実行ユニットは、前記第２のスレッドの前記命令のフラグに基づき、前記第１のレジスタファイルにアクセスし、前記フラグは、前記第１のレジスタファイルに前記ソースオペランドが存在することを示す、実施形態１７に記載のシステム。
［実施形態１９］
前記実行ユニットに接続された命令発行器をさらに備え、前記命令発行器は、前記ソースオペランドに関連するレジスタに付随する同期インジケータがアクティブになるまで、前記第２のスレッドの前記命令の割り当てを保留する、実施形態１８に記載のシステム。
［実施形態２０］
前記命令発行器は、前記第１のスレッドのプロデューサ命令が実行された後、前記レジスタに付随する前記同期インジケータを書き込む、実施形態１９に記載のシステム。
［実施形態２１］
前記命令発行器は、前記第１のスレッドの前記プロデューサ命令が実行された後、前記レジスタに付随するレディインジケータをさらに書き込む、実施形態２０に記載のシステム。
［実施形態２２］
前記命令発行器は、前記同期インジケータ、および、前記レディインジケータを前記レジスタに対応するスコアボードのエントリに書き込む、実施形態２１に記載のシステム。
［実施形態２３］
前記実行ユニットと、前記第１のレジスタファイルと、前記第２のレジスタファイルとを有する第１のコアをさらに備え、前記第１のコアは、前記第１のスレッドおよび前記第２のスレッドの命令を処理する、実施形態１７に記載のシステム。
［実施形態２４］
第２の実行ユニット、および、第３のレジスタファイルを有する第２のコアをさらに備え、前記第２のコアは、第３のスレッドの命令を処理し、前記第１のレジスタファイルおよび前記第２のレジスタファイルの少なくとも１つにアクセスして前記第３のスレッドで用いられるソースオペランドを取得する、実施形態２３に記載のシステム。
［実施形態２５］
前記第１のレジスタファイル、および、前記第２のレジスタファイルを含む統合レジスタファイルをさらに備える、実施形態１７に記載のシステム。
［実施形態２６］
命令を格納する機械可読媒体であって、前記命令は、実行されると、機械に方法を実行させ、前記方法は、
前記命令が第１のスレッドを示すレジスタソースオペランドのフラグを含む場合、第２のスレッドの命令を実行するための前記レジスタソースオペランドを取得するために前記第１のスレッドのレジスタファイルにアクセスする段階を備える、機械可読媒体。
［実施形態２７］
前記方法は、前記命令が前記第２のスレッドを示す前記レジスタソースオペランドのフラグを含む場合、前記第１のスレッドの命令を実行するための前記レジスタソースオペランドを取得するために前記第２のスレッドのレジスタファイルにアクセスする段階をさらに備える、実施形態２６に記載の機械可読媒体。
［実施形態２８］
前記方法は、前記レジスタソースオペランドにより識別されたレジスタに関連して、前記第１のスレッドのプロデューサ演算の終了を示すインジケータがアクティブになるまで、前記第２のスレッドの前記命令を実行しないようにする段階をさらに備える実施形態２６に記載の機械可読媒体。
［実施形態２９］
前記方法は、前記命令が前記第１のスレッドを示すレジスタデスティネーションオペランドのフラグを含む場合、前記第２のスレッドの前記命令を実行した後、前記第２のスレッドの前記命令の前記レジスタデスティネーションオペランドにより識別されたレジスタに関連する同期インジケータをアクティブにする段階をさらに備える、実施形態２６に記載の機械可読媒体。
［実施形態３０］
前記方法は、前記第２のスレッドに前記第１のスレッドの状態を複写せずに、前記第１のスレッドから前記第２のスレッドを生成し、前記第２のスレッドの前記命令の実行中に、前記第１のスレッドの前記レジスタファイルに前記第２のスレッドをアクセスさせる段階をさらに備える、請求項２６に記載の機械可読媒体。
【図１】
0005283739.tif 000002
【図２】
0005283739.tif 000003
【図３】
0005283739.tif 000004
【図４】
0005283739.tif 000005
【図５】
0005283739.tif 000006