説明

プロセッサ内のマルチスレッド間通信

【課題】プロセッサコアで実行するマルチスレッドにおいて、非常に低いオーバーヘッドでスレッド間の同期を可能にする。
【解決手段】SMT動作実施形態において、第2のスレッドの実行中に、第1のスレッドに関連するレジスタにアクセスする方法を含む。この方法は、ソースオペランドに関連する同期インジケータが第2のスレッドのプロデューサ演算が終っていないことを示す場合、第2のスレッドのレジスタファイルからソースオペランドにアクセスする第1のスレッドの命令を実行しないようにし、同期インジケータが第2のスレッドのプロデューサ演算が終了したことを示す場合、命令を実行する段階を備える。他の実施形態において、マルチコアであってもよい。

【発明の詳細な説明】
【背景技術】
【0001】
プロセッサは、命令およびデータをマシンに伝送して異なる要求の演算を実行させるための多数の構造および複雑な制御技術を有する非常に複雑なマシンになってきた。性能を高めるべく、命令レベルの並列性(ILP)を利用するプロセッサもある。このような技術は、性能を高める一方で、消費電力を増大させ、設計をより複雑にしうる。したがって、スレッドレベルの並列性(TLP)を支持しかつ利用するアーキテクチャによって多数のスレッドを協働させる設計になっているプロセッサもある。このようなプロセッサは、マルチコア、例えば、小さいインオーダーの同時マルチスレッド(SMT)コアなどの小さいコアを多数含むこともよくある。
【0002】
しかしながら、このようなインオーダーのコアは、ILPを利用したアウトオブオーダーのコアに比べて効果が劣ることがある。すなわち、インオーダーのプロセッサのアーキテクチャでは、並列アプリケーショなら効率よく管理できるが、シングルスレッドアプリケーション、および、並列アプリケーションのシリアルコード部分は効率よく実行できないことがある。したがって、特定のプロセッサは、効率を高めながらも複雑さを最小限に維持すべく、このようなアプリケーションをばらばらにしてきめ細かなスレッドを実行しうる。しかしながら、第1のスレッドが第2のスレッドの情報を用いようとすると、過度なオーバーヘッドが起きうる。
【図面の簡単な説明】
【0003】
【図1】本発明の一実施形態における方法のフローチャートである。
【0004】
【図2】本発明の一実施形態におけるスコアボードのブロック図である。
【0005】
【図3】本発明の一実施形態における命令実行の実装のブロック図である。
【0006】
【図4】本発明の一実施形態におけるフローマーク情報を生成する方法を示すフローチャートである。
【0007】
【図5】本発明の一実施形態におけるシステムのブロック図である。
【発明を実施するための最良の形態】
【0008】
さまざまな実施形態において、プロセッサコアで実行するマルチスレッドは、他のスレッドに関連するレジスタファイル内の値にアクセスしうる。このような通信チャネルによって、実施形態は、効果的な同時マルチスレッド(SMT)動作を提供しうる。一例としては、第1および第2のスレッドは、SMTプロセッサなどの単一のインオーダープロセッサコアで実行しうる。第1のスレッドによって生成されたデータ値が第2のスレッドによってアクセスでき、また、第2のスレッドによって生成されたデータ値が第1のスレッドによってアクセスできるプロデューサ/コンシューマモデルを実現すべく制御が行われる。各スレッドは、実行中に他のスレッドの設計上のレジスタ状態を読み取ることができ、それによって非常に低いオーバーヘッドでスレッド間の同期が可能になる。
【0009】
アクセス時において、所定のレジスタ内の正しい値を読み取ることを保証すべく、同時制御が行われてよく、その結果、コンシューマスレッドは、プロデューサスレッドから正しいデータを読み取る。さまざまな実施形態では、命令の発行に関連して用いられるようなスコアボード構造は、同期インジケータを含みうる。より詳しくは、第1のスレッドのレジスタごとのスコアボード構造におけるエントリのそれぞれは、第2のスレッドの対応するレジスタの同期インジケータを含み、また、第2のスレッドのレジスタごとのスコアボード構造におけるエントリのそれぞれは、第1のスレッドの対応するレジスタの同期インジケータを含みうる。このインジケータを使用することにより、他のスレッドにおける対応するプロデューサ命令が実行されるまではコンシューマ命令が進行しないようにするので、プロデューサレジスタファイルにおいて所望の値を得ることができる。このような同期制御を利用すべく、実施形態は、命令に関連するフロー情報を提供する。例えば、フラグまたはフローマークは、命令の内容を備えうる。一実施形態では、命令は、オペコードと、ソースおよびデスティネーションオペランドと、ソースおよびデスティネーションオペランドのそれぞれのフローマークとを含みうる。以下に詳しく述べるように、さまざまな機構が対応する命令のフローマークの生成を処理しうる。例えば、コンパイラサポートが提供されることにより、命令セットアーキテクチャ(ISA)に提供された命令サポートに従い、このようなフローマークがコンパイル中に生成されうる。他の実装では、ハードウェアまたはソフトウェアのオプティマイザなどの最適化機構がコードのフロー制御を分析し、しかるべくフローマークを生成してよい。このような方法で、マルチスレッドは、命令粒度で同期化しうる。
【0010】
さまざまな機能は、本発明の実施形態により提供されるレジスタアクセスおよび同期化を利用しうる。例えば、低オーバーヘッドのスレッド生成機構は、他のスレッドのレジスタファイルのアクセスを利用しうる。このような方法で、既存のスレッドのコンテキストから生成されたスレッドのコンテキストへのすべてのレジスタをコピーする代償を防ぐことができる。それによって、生成されたスレッドの適切なコンシューマ命令は、既存のスレッドのレジスタファイルからオペランドを読み取るべくマーキングされてもよい。
【0011】
さまざまな実施形態によれば、2つのきめ細かなスレッド間の共同実行に付随するオーバーヘッドは、低下しうる。したがって、複数の実施形態は、マルチスレッドを生成すると共に、投機的マルチスレッディングをサポートすることに関連して用いられてよい。さらに、複数の実施形態は、他のスレッドの実行中に生じる特定のタスクを処理すべく初期化されうる、いわゆるヘルパースレッドに関連して用いられてもよい。しかしながら、本発明の範囲は、この点に関して限定されることはなく、レジスタアクセスおよび同期機構は、異なるプロセッサアーキテクチャ、システムなどを含む多くの異なる実装において用いられうる。
【0012】
図1を参照すると、本発明の一実施形態における方法のフローチャートが示されている。図1に示すように、方法10は、第2のスレッドのレジスタファイルにおける情報にアクセスしうる第1のスレッドの命令を実行するよう用いられうる。図1に示すように、方法10は、実行のために第1のスレッドの命令を受信することから始まってよい(ブロック20)。例えば、プロセッサの命令デコーダは、命令を受信してデコードしうる。一実施形態では、命令は、ソース/デスティネーションオペランドの識別と共に、実行されるべき演算のタイプを示すオペコードを含みうる。さらに、命令は、ソース/デスティネーションオペランドが、第2のスレッドに関連するレジスタファイルなどのリモートレジスタファイルからアクセスされるか、または、当該リモートレジスタファイルに供給されるかを示す情報を含みうる。本願明細書中ではリモートレジスタファイルと記載しているが、ローカルレジスタファイル、および、リモートレジスタファイルは、例えば、多数のインオーダーコアを含むマルチまたはメニーコアプロセッサなどの、プロセッサのシングルコアに存在しうることに留意されたい。
【0013】
さらに図1を参照すると、次に、リモートスレッドから命令のソースオペランドが得られるかどうかが決定される(ひし形30)。すなわち、フローマーク情報(一実施形態における)に基づき、SMTコア内のレジスタファイルを含む第2のスレッドなどのリモートスレッドからソースオペランドが得られるかどうかが決定されてよい。ソースオペランドが得られる場合、制御はひし形40へと進み、このようなリモートソースオペランドのすべてに関連する同期インジケータはアクティブかどうかが決定されてよい。すなわち、所定のレジスタにおける値の可用性に関する状態情報を識別するスコアボードまたは他の記憶装置は、リモートレジスタファイルから得られるすべてのソースオペランドが所望の値を含むかどうかを決定すべく分析されうる。換言すると、第1のスレッドの従属命令が従属している演算をプロデューサスレッドが完了しているかどうか、が決定されてよい。同期インジケータがアクティブでない場合、ひし形40をループバックして、同期インジケータが現れるまで命令の実行を保留してよい。同期インジケータが現れるということは、リモートレジスタに所望の値が存在するということであり、制御は、以下に述べるひし形45へと進む。
【0014】
なおも図1を参照すると、リモートスレッドからソースオペランドが得られないことが決定されるか(ひし形30)、または、すべてのリモートソースオペランドに関連する同期インジケータがアクティブである(ひし形40で決定されたように)場合、制御はひし形45へと進み、ローカルスレッド(すなわち第1のスレッド)からソースオペランドが得られるかどうかが決定されてよい。ソースオペランドが得られる場合、制御はひし形50へと進み、すべてのローカルソースオペランドに関連するレディインジケータがアクティブかどうかが決定されてよい。例えば、同じスレッドからの従属演算が正しい値を用いて実行されることができるように、第1のスレッドの前のプロデューサ命令が終了していることを示すインジケータがアクティブかどうかを決定すべく、スコアボードはアクセスされうる。アクティブでない場合、ひし形50をループバックしてよい。
【0015】
制御は、ひし形45および50の両方からブロック60へと進み、実行のための命令が発行されうる。例えば、アロケータ、予約ステーション、または、スコアボードまたは同様の状態記憶装置を含む他の構造などの命令発行器は、実行のための命令を発行してよい。したがって、整数ユニット、浮動小数点演算ユニット、または、他のこのようなユニットなどの実行ユニットは、特に識別されたレジスタファイルから示されるソースオペランドにアクセスしてよい(ブロック70)。したがって、ローカルソースオペランドに関しては、スレッドに関連するローカルレジスタファイルは、ソースオペランドを得るためにアクセスされてよく、一方、リモートオペランドに関しては、リモートレジスタファイルなどの第2のスレッドに関連するレジスタファイルがアクセスされてよい。
【0016】
さらに図1を参照すると、命令が実行されうる(ブロック80)。例えば、所望の結果を得るべく2つのソースオペランドが追加され、例えば、第1のレジスタファイルのデスティネーションオペランドなどのデスティネーションオペランドに格納されうる。命令がうまく実行されたことによって、さまざまなインジケータがアップデートされうる(ブロック90)。より詳しくは、スコアボードにおいて、レディおよび同期インジケータが規定どおりにアップデートされてよい。上述の例に続き、デスティネーションオペランドはローカルオペランドであることが示される場合、デスティネーションレジスタに関連するレディインジケータがしかるべく設定されうる。さらに、当該レジスタの同期インジケータがリセットされて値が同期されていないことが示されうる。それに代わってデスティネーションオペランドが遠隔で使用されることが示される場合、リモート(例えば第2の)レジスタファイルの同期インジケータがしかるべく設定されてよい。さらに、ローカルレジスタファイルのレディインジケータが設定されてよい。このような方法で、リモートスレッドおよびローカルスレッドの両方がソースオペランドとしてのデスティネーションオペランドにアクセスできることにより、同じスレッド内、および、異なるスレッド間の両方で効果的なプロデューサ/コンシューマ演算が可能になる。図1の実施形態における特定の実装について示したが、本発明の範囲は、この点に関して限定されるものではないことを理解されたい。
【0017】
プロセッサ内に存在するさまざまな構造により、本発明の一実施形態におけるレジスタアクセスおよび同期機構が実現する。図2を参照すると、マルチスレッド間の同期のためのサポートを含む、本発明の一実施形態におけるスコアボードのブロック図が示されている。図2に示すように、スコアボード100は、プロセッサコア内にある記憶装置であってよく、多数のレジスタファイルのレジスタに関連する状態情報を格納するエントリを含みうる。詳しくは、図2に示される実施形態では、第1のスレッドおよび第2のスレッドのそれぞれは、そのレジスタファイル内のレジスタごとのエントリを含みうる。したがって、図2に示すように、第1のスレッド110は、複数のエントリ112aから112n(まとめてエントリ112と呼ぶ)を有しうる。各エントリ112は、レジスタ識別子(ID)を用いてインデックス付けされてよく、各エントリは、状態情報を有してよい。図2に示す特定の実施形態では、レディインジケータ114aから114n(まとめてレディインジケータ114と呼ぶ)、および、同期インジケータ116aから116n(まとめて同期インジケータ116と呼ぶ)が存在しうる。レディインジケータ114は、識別されたレジスタに格納される対応するオペランドが当該スレッドのコンシューマ演算に用いられる準備ができているかどうかを示すのに用いられ、一方、同期インジケータ116は、ローカルスレッドによりアクセスされるべきリモートオペランドは、ローカルスレッドによりアクセスされる準備ができているか、すなわち、(リモート)プロデューサスレッドのプロデューサ命令は、適切な値を実行し、所望の位置に格納したかどうかを示すために用いられてよい。第2のスレッド120は、そのレジスタファイルのレジスタにそれぞれ関連する複数のエントリ122aから122n(まとめてエントリ122と呼ぶ)を含んでもよいことに留意されたい。同様に、各エントリ122は、対応するレディインジケータ124aから124n(まとめてレディインジケータ124と呼ぶ)、および、同期インジケータ126aから126n(まとめて同期インジケータ126と呼ぶ)を含みうる。スレッドごとに別々のエントリを用いることに代わり、スコアボードは、マルチスレッドの各対応するレジスタのために単一のエントリを有するようになっていてもよく、当該単一のエントリは、各スレッドに関連する異なる部分を有する。
【0018】
さらに、図2の実施形態では、特定の構成を示しているが、本発明の範囲は、この点に関して限定されるものではなく、さまざまな実施形態では、異なるスレッドのレジスタファイルに関連して状態情報を異なる方法で生成、格納、および、使用することも実現されてよいと理解されたい。例えば、異なるプロセッサアーキテクチャは、異なる制御設定を有し、命令を分析してプロセッサの1つ以上の実行ユニットに発行しうる。いくつかのプロセッサは、デコードされた命令が、実行可能となるために必要とされるさまざまなリソースを有するかどうかを決定し、また、インオーダーまたはアウトオブオーダーで、どの命令が実行ユニットに提供されるかを選択するアロケータ、予約ステーション、スコアボード、コントローラ、および、他のさまざまなロジックを有しうる。さまざまな実施形態では、スコアボード100は、所定のプロセッサアーキテクチャで利用可能ないかなる形態の命令発行器の一部であってもよいし、あるいは、そのような命令発行器、または、スコアボード100に存在する情報に基づき命令の発行を決定しうる他のそのようなロジックに結合されてもよい。
【0019】
上述のごとく、さまざまな実施形態において、命令に関連するフロー情報が分析されることにより、命令は、他のスレッドのレジスタにある情報にアクセスすることであるかどうか、および/または、命令の結果は、異なるスレッドによってアクセスされうるかどうか、が決定されてよい。図3を参照すると、本発明の一実施形態における命令実行の実装を示すブロック図が示されている。図3に示すように、システム200は、着信データに対しさまざまな演算を実行する実行ユニット230を含みうる。図3に示される実施形態では、実行ユニット230には、第1のレジスタファイル220、および、第2のレジスタファイル225が結合されうる。図3の実施形態では、第1のレジスタファイル220は、第1のスレッドに関連し、第2のレジスタファイル225は、第2のスレッドに関連しうる。図3の実施形態では、別々のレジスタファイルとして示されているが、いくつかの実装においては、第1のスレッドと論理的に関連付けられた第1の部分と、第2のスレッドと論理的に関連付けられた第2の部分とを有するグローバルレジスタファイルが存在してもよいと理解されたい。図3に示すように、実行ユニット230によって実行される第1のスレッドからの命令205は、加算演算、乗算、または、他の演算などの命令のタイプを識別するオペコードを含みうる。命令205は、結果の行き先、すなわち、第1のレジスタraxに対応しうるデスティネーションオペランドをさらに識別しうる。このデスティネーションオペランドに関連付けられたローカリティインジケータは、図3ではREMOTE_DESTとして識別される。図3に示すように、このローカリティインジケータは、デスティネーションオペランドがリモートスレッド、すなわち、図3の例における第2のスレッドにより最近アクセスされ、同様にローカルスレッド内のコンシューマ命令によってもアクセスされうることを示す値1を有する。さらに図に示すように、命令205は、2つのソースオペランド、すなわち、レジスタrbxにアクセスする第1のソースオペランド(SRC1)も識別する。このソースオペランドのローカリティインジケータ(すなわちREMOTE_SRC)は、値1に設定されているので、このソースオペランドは、リモートレジスタファイル、すなわち、レジスタファイル225からアクセスされうる。同様に、第2のソースオペランド(すなわちREMOTE_SRC)用のローカリティインジケータが値0に設定されているときは、命令205は、第2のレジスタrexにアクセスする第2のソースオペランド(SRC2)を含み、これは、第1のレジスタファイル220から得られる。
【0020】
ソースオペランドの1つは、異なるレジスタファイル、すなわち、第2のレジスタファイル225からアクセスされるので、命令205は、そのソースオペランドに関連する同期インジケータがアクティブになる(設定されるなど)までは進行しないようにされてよい。さらに、命令205は、第2のソースオペランドに関連するレディインジケータもアクティブになるまで進行しないようにされうる。したがって、図3に示すように、スコアボード100は、第1のソースオペランドに関連した第1のエントリ112bと、第2のオペランドに関連した第2のエントリ112cとを含む。レディインジケータ114cの値が設定され、同期インジケータ116bの値も設定された場合、命令205は、実行ユニット230に発行されうる。これによって、第1のレジスタファイル225におけるレジスタrbx、および、第2のレジスタファイル220におけるレジスタrexに適切な値が存在するようになる。したがって、実行ユニット230は、第1のレジスタファイル220からrexを読み出し、第2のレジスタファイル225からrbxを読み出す。命令の実行が完了したら、結果は、第1のレジスタファイル220のデスティネーションレジスタraxに格納されてよい。さらに、さまざまなレディおよび同期インジケータがアップデートされうる。詳しくは、図3に示すように、実行後、第1のスレッドに関連するエントリ112aがアップデートされることにより、値1を有するレディインジケータ114aと、値0を有する同期インジケータ116aとを有するようになる。さらに、第2のスレッドに関連するエントリ126aは、値1に設定される対応する同期インジケータ116aを有することにより、第2のスレッドのコンシューマ命令のためのソースオペランドとして機能する適切な値がレジスタrax内に存在することを示しうる。図3の実施形態における特定の実装を示したが、本発明の範囲は、この点に関して限定されるものではない。
【0021】
さらに、図3に示すように、システム200内にコントローラ250が存在しうる。コントローラ250は、各スレッドから実行ユニット230への命令の発行を処理するためのさまざまなハードウェア、ソフトウェア、ファームウェア、または、それらの組合せを有しうる。図3に示すように、コントローラ250は、スコアボード100に結合されて、内部のさまざまなエントリに存在する状態情報を分析することによって、所定の命令のソースオペランドは、関連するレディおよび/または同期インジケータの分析に基づき、実行の準備ができているかどうかが決定されうる。一実施形態では、コントローラ250は、命令のソースオペランドが利用可能な場合に命令の発行を可能にするロジック機能を実装しうる。例えば、一実施形態では、複数のローカルソースが示される(すなわち、ソースオペランドに関連するローカリティインジケータがローカルに指示する(例えば論理ロウ値を有する))場合、ロジック機能は、ローカルソースオペランドのためのレディインジケータを分析する論理積演算であってよく、それらがどちらもレディ状態であるかどうかを決定する。ローカルソースが示されない場合、両方のレディインジケータが、例えば、レディ状態を示す論理ハイの状態に設定されるまで、命令は保留される。その代わりに、2つのソースオペランドのうちの1つが遠隔起点であることが示される場合、論理演算は、ローカルオペランドのためのローカルレディインジケータ、および、リモートオペランドのためのローカル同期インジケータがチェックされる論理積演算に対応するので、どちらもオペランドの可用性を示すかどうかが決定されうる。オペランドの可用性を示す場合、演算は進行し、そうでない場合、これらのソースオペランドの両方が関連するレディおよび同期インジケータにより示されるように準備完了になるまで、コントローラ250は、演算を保留してよい。特定の実施形態に関して説明したが、本発明の範囲はこの点において限定されるものではなく、ソースオペランドがコンシューマ命令で用いられるように準備完了かどうかを決定するスコアボード、または、他の構造において、情報を分析する多くの異なる方法が実現可能である。例えば、他の実装では、デュアルコアまたはメニーコアプロセッサなどのマルチコアプロセッサが本発明の複数の実施形態を同様に実装しうる。このような実装のいくつかでは、第1のコアで実行する第1のスレッドは、他のコアで実行する異なるスレッドに関連するレジスタファイルにアクセスしてよい。しかしながら、そうすることによって、所定のスレッドの実行中に、このようなリモートレジスタファイルにアクセスする場合に一定量のオーバーヘッドが増大することがある。
【0022】
したがって、命令、すなわち、さまざまなソースおよびデスティネーションオペランドのフラグまたはフローマークに関連するフロー情報に基づき、異なるレジスタファイルの軽いアクセス、および、同期が可能になる。さまざまな実施態様では、異なる構成要素は、スレッド、および、対応するコード、例えば、ダイナミックオプティマイザ、コンパイラ、ハードウェアオプティマイザなどを生成しうる。このようなコードを生成するどんな構成要素も、適切なフローマークを有する命令をマークしうる。さらに、構成要素は、製造者/コンシューマの関係に関与するレジスタは、コンシューマスレッドによって読み出されるまではプロデューサのスレッドでは再定義されないことを保証しうる。さまざまな実施形態では、同期ポイントは、スレッド間に設定されることにより、コンシューマスレッドが関連する値を読み終わるまでは、プロデューサ素スレッドが進行しないようにしうる。本発明の範囲は、この点において限定されるものではないが、いくつかの実施形態では、同期ポイントは、上述の同期インジケータを用いて実装されうる。例えば、図3の実施形態に記載されるフローマークは、1つのローカルまたは遠隔地に1つのオペランドが存在するかどうかを示す1ビットインジケータでありうるが、他の実施形態では、このようなローカリティインジケータは、上記のようなスレッドの3つ以上にオペランドが存在することを示すマルチビットインジケータにまで拡張されうる。すなわち、いくつかの実装では、所定のコアまたはマルチコアにおいて3つ以上のスレッドが実行中であってよい。どのスレッドの実行中でも他のスレッドに関連するレジスタファイルは、スコアボードまたは他のそのような構造における命令および情報内のフローマークに従いアクセスされることができ、その結果、例えば、これらのマルチスレッドに関連するレジスタファイルに付随する同期インジケータによって、リモートオペランドの可用性を示しうる。
【0023】
いくつかの実施形態では、ダイナミックオプティマイザによってコードトレースが生成されうる。しかしながら、他の実施態様では、コンパイラベースのサポート、または、他の機構が用いられて適切なフローマーク情報を伴う命令が生成されうる。図4を参照すると、本発明の一実施形態におけるフローマーク情報を生成する方法のフローチャートが示される。図4に示すように、方法300は、第1および第2のスレッドの同期インジケータ初期化して非同期状態にすることから始まってよい(ブロック310)。例えば、2つのスレッドは、ダイナミックオプティマイザにより生成されたコードトレースでありうる。さらに、これら複数のトレースは、シングルプロセッサコアにおける異なるスレッド、すなわち、第1および第2のスレッドによって同時に実行されうる。さまざまなオペランドの正しい属性を保証すべく、例えば、いくつかの実施形態において、同期インジケータは、論理値0などの非同期状態に初期化されてよい。これらのトレースは、ダイナミックオプティマイザによって識別されるので、オプティマイザは、レジスタをプロデューサ/コンシューマ方式に関連して制御することができ、したがって、オペランドが同期されうる同期ポイントの存在を制御しうることに留意されたい。遠隔で消費されるレジスタは、プロデューサのスレッドで何度も定義されうるが、オプティマイザは、コンシューマに用いられる直前のレジスタの定義がプロデューサ/コンシューマの関係を設定する定義であることを保証してよい。
【0024】
さらに図4を参照すると、次の制御は、ひし形320へと進み、オペランドが単一のスレッドだけによって生産も消費もされるかどうかが決定されうる。オペランドが単一のスレッドで用いられる場合、制御は、ブロック330へと進んでよく、そこでは、オペランドを用いた命令のフローマークに使用のローカリティが示されうる。特に、このオペランドがソースまたはデスティネーションオペランドとして用いられる場合、対応するローカリティインジケータ、すなわち、フローマークは、そのオペランドがローカルにのみ用いられていることを示すリセット状態(論理0など)にあってよい。
【0025】
さらに図4を参照すると、ひし形320のようにならず、1つのオペランドがマルチスレッドにより用いられていることが決定された場合、制御はひし形340へと進んでよい。ひし形340において、識別されたオペランドは、他のスレッドにより消費されるべきデスティネーションオペランドであるかどうかが決定されうる。デスティネーションオペランドである場合、制御はブロック350へと進み、デスティネーションオペランドの最近の識別(すなわち、コンシューマスレッドに用いられる直前の識別)が到着するまで、デスティネーションオペランドのローカルな使用がプロデューサ命令のフローマークを用いてしかるべく識別されうる。この直前の識別が到着したら、制御はブロック360へと進み、この命令がフローマークにより識別されることにより、デスティネーションオペランドの遠隔使用が示される。換言すると、この命令は、セット状態(論理1など)におけるデスティネーションオペランドのためのローカリティインジケータを有しうる。制御は、ブロック360からひし形370へと進み、ソースオペランドが他のスレッドによって生産されるかどうかが決定されうる。生産されない場合、制御は、上述のブロック330へと戻り、オペランドに関連するフローマークはローカル(すなわち論理値0)であるとして示されてよい。
【0026】
さらに図4を参照すると、ひし形370のようにならず、ソースオペランドが他のスレッドによって生産されることが決定された場合、制御はブロック380へと進んでよく、同じスレッドにおける命令がレジスタを再定義するまで、スレッドのコンシューマ命令のフローマークにリモートソースオペランドの使用が示されうる(ブロック380)。すなわち、コンシューマスレッドの命令は、コンシューマスレッドがレジスタを再定義するまで、リモートレジスタファイル内のデータ値にアクセスしてよい。このようなイベントが起きた場合、制御は、ブロック390へと進み、ソースオペランドのローカルな使用が、コンシューマ命令のフローマーク内に示されうる。すなわち、コンシューマ命令が、同じスレッドの直前の命令のためのソースオペランドとして使用される異なる値を書き込むようレジスタを再定義したとき、同じスレッドの直前の命令は、それらに関連するフローマークを有するので、ソースオペランドがローカルに得られたことが示されうる。図4の実施形態における特定の実装を例示したが、本発明の範囲は、その点に関して限定されるものではない。
【0027】
したがって、さまざまな実施形態において、同じコアで動作する2つのスレッドは、互いのレジスタの直接アクセスによって同期化しうる。レジスタレベルで情報にアクセスすることにより、メモリを間接的に介して異なるスレッドから情報を取得することによる同期オーバーヘッドを低下させることができ、メモリ帯域幅の問題が軽減されうる。コア内にあるレジスタファイルのレジスタを用いることによって、同じコアで動作する2つのスレッド間で64ビットまたは128ビット値の通信が可能になる。このような方法で、新たに生成されたスレッドが、既存のスレッドのレジスタファイルから直接読み出されうるので、新たに生成されるスレッドに対してレジスタ状態を再現する必要はないだろう。本発明の範囲はこの点において限定されるものではないが、複数の実施形態は、例えば、投機的マルチスレッディング、ヘルパースレッド処理、および、ランアヘッドスレッドなどのきめ細かなスレッドパラダイムに用いられうる。したがって、第1のレジスタファイルの設計状態を再現するためのコピーまたは他の命令が回避されうるので、上記のようなスレッド内の命令は、減少しうる。あるいは、これらの追加のスレッドは、他のスレッドのレジスタファイルから必要とされる情報を直接得ることもできる。
【0028】
実施形態は、多くの他のシステムタイプに実装されうる。図5を参照すると、本発明の一実施形態におけるシステムのブロック図が示される。図5に示すように、マルチプロセッサ500は、ポイントツーポイント相互接続システムであって、ポイントツーポイント相互接続550を介して結合される第1のプロセッサ570および第2のプロセッサ580を含む。図5に示すように、プロセッサ570および580のそれぞれは、第1および第2のプロセッサコア(すなわちプロセッサコア574aおよび574b、プロセッサコア584aおよび584b)を有するマルチコアプロセッサでありうる。各コアは、異なるスレッドによりそれぞれ用いられる複数のレジスタファイルを含みうることに留意されたい。さらに、各コアは、例えば、本発明の一実施形態におけるフローマークおよび同期インジケータによって、コンシューマスレッドによるプロデューサスレッドのレジスタファイルへの直接アクセスを可能にするハードウェア、ソフトウェア、または、ファームウェアを含みうる。また、さらに、いくつかの実施態様では、プロセッサコア574aで動作するスレッドは、プロセッサコア574bで動作するスレッドに関連するレジスタファイルにアクセスでき、プロセッサコア574bで動作するスレッドは、プロセッサコア574aで動作するスレッドに関連するレジスタファイルにアクセスできる。
【0029】
第1のプロセッサ570は、ポイントツーポイント(P−P)インターフェース576および578をさらに含む。同様に、第2のプロセッサ580は、P−Pインターフェース586および588を含む。図5に示すように、メモリコントローラハブ(MCH)572および582は、それぞれのメモリ、すなわち、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部でありうるメモリ532およびメモリ534にプロセッサを結合する。
【0030】
第1のプロセッサ570および第2のプロセッサ580は、P−P相互接続552および554をそれぞれ介してチップセット590に結合されてよい。図5に示すように、チップセット590は、P−Pインターフェース594および598を含む。さらに、チップセット590は、チップセット590と、高性能グラフィックエンジン538とを接続するインターフェース592を含む。一実施形態では、グラフィックエンジン538とチップセット590とを接続するためにAGP(Advanced Graphics Port)バス539が用いられうる。AGPバス539は、カリフォルニア州サンタクララのインテル社により1998年5月4日に発表された、AGP(Accelerated Graphics Port)インターフェース仕様改訂版2.0に準拠しうる。あるいは、ポイントツーポイント相互接続539が、それらの構成要素を接続してもよい。
【0031】
次に、チップセット590は、インターフェース596を介して第1のバス516に接続されうる。一実施形態では、第1のバス516は、1995年6月に発表されたPCIローカルバス仕様生産バージョン改訂版2.1、または、PCI Express(登録商標)バスなどのバス、あるいは、他の第三世代入出力(I/O)相互接続バスによって定義されるようなPCI(Peripheral Component Interconnect)バスであってよいが、本発明の範囲は、それらに限定されない。
【0032】
図5に示すように、さまざまなI/Oデバイス514は、第1のバス516を第2のバス520に接続するバスブリッジ518と共に、第1のバス516に接続されてよい。一実施形態では、第2のバス520は、ローピンカウント(LPC)バスでありうる。一実施形態では、さまざまなデバイスは、例えば、キーボード/マウス522、通信デバイス526、および、コード530を含みうるディスクドライブまたは他の大容量記憶装置などのデータ記憶装置528を有する第2のバス520に接続されてよい。さらに、オーディオI/O524は、第2のバス520に接続されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図5のポイントツーポイントアーキテクチャに代わり、システムは、マルチドロップバス、または、そのような他のアーキテクチャを実装しうる。
【0033】
実施形態は、コードに実装され、命令を記憶する記憶媒体に格納されうる。命令は、当該命令を実行するようシステムをプログラムするために用いられうる。記憶媒体は、これらに限定されないが、フロッピーディスク、光ディスク、CD−ROM(コンパクトディスクリードオンリーメモリ)、CD−RW(書き換え可能CD)、光磁気ディスク、ROM(リードオンリーメモリ)などの半導体デバイス、DRAM(ダイナミックランダムアクセスメモリ)などのRAM(ランダムアクセスメモリ)、SRAM(スタティックRAM)、EPROM(消去可能プログラマブルROM)、フラッシュメモリ、EEPROM(電気的消去可能PROM)、磁気または光カード、または、電子命令を格納するのに適したいかなるタイプの媒体を含みうる。
【0034】
これまで限定された数の実施形態を参照して本発明を説明してきたが、そこから多くの修正および変更が可能であることは当業者には明らかであろう。添付の請求項は、このような修正および変更も本発明の真の趣旨および範囲内にあるとしてすべて包含することが意図される。

【特許請求の範囲】
【請求項1】
第1のスレッドの命令をコアで実行する間に、前記コアから第2のスレッドのレジスタファイルにアクセスし、前記第1のスレッドの前記命令のためのソースオペランドを取得する段階を備える方法。
【請求項2】
前記ソースオペランドにより識別されたレジスタに関連する同期インジケータが、前記第2のスレッドのプロデューサ演算が終っていないことを示す第1の状態にある場合、前記第1のスレッドの前記命令を実行させない段階と、
前記レジスタに関連する前記同期インジケータが、前記第2のスレッドの前記プロデューサ演算の終了を示す第2の状態にある場合、前記第1のスレッドの前記命令を実行する段階と、
をさらに備える、請求項1に記載の方法。
【請求項3】
前記プロデューサ演算が終了した後、前記レジスタに対するスコアボードのエントリに前記同期インジケータをセットする段階をさらに備える、請求項2に記載の方法。
【請求項4】
前記プロデューサ演算が終了した後、前記第1のスレッドに関連する前記レジスタのための前記スコアボードの前記エントリに前記同期インジケータをセットし、前記第2のスレッドに関連する前記レジスタのための前記スコアボードの前記エントリに前記同期インジケータをリセットする段階をさらに備える、請求項3に記載の方法。
【請求項5】
前記コアにおいて、前記第2のスレッドの前記プロデューサ演算と、前記第1のスレッドの前記命令とを実行する段階をさらに備え、前記コアは、前記第1のスレッドおよび前記第2のスレッドの両方が実行される共通コアを含む、請求項2に記載の方法。
【請求項6】
前記第1のスレッドの前記命令をデコードする段階をさらに備え、
前記命令は、前記ソースオペランド用の位置インジケータを含み、前記位置インジケータは、前記第2のスレッドの前記レジスタファイルのレジスタにおける前記ソースオペランドの位置を示す、請求項1に記載の方法。
【請求項7】
前記第1のスレッドの前記命令の結果をデスティネーションレジスタに格納し、前記第1のスレッドの前記命令における対応するデスティネーションオペランド用の位置インジケータに基づき、前記デスティネーションレジスタ用の同期インジケータをアップデートする段階をさらに備える、請求項6に記載の方法。
【請求項8】
第1のスレッドの第1のレジスタファイルにおけるレジスタにそれぞれ対応するエントリを格納する記憶装置を備え、前記エントリのそれぞれは、第2のスレッドの第2のレジスタファイルの対応するレジスタをデスティネーションオペランドとして使用するための前記第2のスレッドのプロデューサ演算が終了しているかどうかを示す同期インジケータを含む、装置。
【請求項9】
前記第2のスレッドが、前記第2のレジスタファイルの前記対応するレジスタを前記デスティネーションオペランドとして用いる命令を実行した後、前記対応するレジスタに対するエントリの前記第1のスレッドの前記同期インジケータをアップデートするコントローラをさらに備え、前記命令は、前記第1のスレッドによる前記対応するレジスタの使用を示す前記デスティネーションオペランド用の位置インジケータを含む、請求項8に記載の装置。
【請求項10】
前記記憶装置は、コアのスコアボードを有する、請求項8に記載の装置。
【請求項11】
前記コアは、前記第1のレジスタファイル、および、前記第2のレジスタファイルを用いて、前記第1のスレッド、および、前記第2のスレッドを同時に実行する、請求項10に記載の装置。
【請求項12】
前記コアは、前記第1のスレッドの実行中に、前記第2のレジスタファイルにアクセスする、請求項11に記載の装置。
【請求項13】
前記コアは、前記第1のスレッドの命令のソースオペランド用の位置インジケータに基づき、前記第2のレジスタファイルにアクセスする、請求項12に記載の装置。
【請求項14】
前記コアは、前記対応するレジスタに対するエントリの前記同期インジケータにさらに基づき、前記第2のレジスタファイルにアクセスする、請求項13に記載の装置。
【請求項15】
コアをさらに備え、前記コアは、前記記憶装置と、前記第1のレジスタファイルと、前記第2のレジスタファイルと、実行ユニットとを有し、前記実行ユニットは、命令のローカリティインジケータに基づき、前記第2のレジスタファイルのレジスタから、前記第1のスレッドの前記命令を実行するためのソースオペランドを取得する、請求項8に記載の装置。
【請求項16】
前記第2のレジスタファイルの前記レジスタに関連するエントリの前記同期インジケータが、前記2のスレッドのプロデューサ命令が終了していない状態を示す場合、前記第1のスレッドの前記命令は実行されない、請求項15に記載の装置。
【請求項17】
第1のスレッドのデータを格納する複数のレジスタを有する第1のレジスタファイルと、
第2のスレッドのデータを格納する複数のレジスタを有する第2のレジスタファイルと、
前記第1のレジスタファイルおよび前記第2のレジスタファイルに接続され、前記第1のスレッドおよび前記第2のスレッドの命令を実行する実行ユニットと、
前記実行ユニットに接続されたダイナミックランダムアクセスメモリ(DRAM)と、
を備え、
前記実行ユニットは、前記第1のレジスタファイルにアクセスし、前記第2のスレッドの命令を実行するためのソースオペランドを取得する、
システム。
【請求項18】
前記実行ユニットは、前記第2のスレッドの前記命令のフラグに基づき、前記第1のレジスタファイルにアクセスし、前記フラグは、前記第1のレジスタファイルに前記ソースオペランドが存在することを示す、請求項17に記載のシステム。
【請求項19】
前記実行ユニットに接続された命令発行器をさらに備え、前記命令発行器は、前記ソースオペランドに関連するレジスタに付随する同期インジケータがアクティブになるまで、前記第2のスレッドの前記命令の割り当てを保留する、請求項18に記載のシステム。
【請求項20】
前記命令発行器は、前記第1のスレッドのプロデューサ命令が実行された後、前記レジスタに付随する前記同期インジケータを書き込む、請求項19に記載のシステム。
【請求項21】
前記命令発行器は、前記第1のスレッドの前記プロデューサ命令が実行された後、前記レジスタに付随するレディインジケータをさらに書き込む、請求項20に記載のシステム。
【請求項22】
前記命令発行器は、前記同期インジケータ、および、前記レディインジケータを前記レジスタに対応するスコアボードのエントリに書き込む、請求項21に記載のシステム。
【請求項23】
前記実行ユニットと、前記第1のレジスタファイルと、前記第2のレジスタファイルとを有する第1のコアをさらに備え、前記第1のコアは、前記第1のスレッドおよび前記第2のスレッドの命令を処理する、請求項17に記載のシステム。
【請求項24】
第2の実行ユニット、および、第3のレジスタファイルを有する第2のコアをさらに備え、前記第2のコアは、第3のスレッドの命令を処理し、前記第1のレジスタファイルおよび前記第2のレジスタファイルの少なくとも1つにアクセスして前記第3のスレッドで用いられるソースオペランドを取得する、請求項23に記載のシステム。
【請求項25】
前記第1のレジスタファイル、および、前記第2のレジスタファイルを含む統合レジスタファイルをさらに備える、請求項17に記載のシステム。
【請求項26】
命令を格納する機械可読媒体であって、前記命令は、実行されると、機械に方法を実行させ、前記方法は、
前記命令が第1のスレッドを示すレジスタソースオペランドのフラグを含む場合、第2のスレッドの命令を実行するための前記レジスタソースオペランドを取得するために前記第1のスレッドのレジスタファイルにアクセスする段階を備える、機械可読媒体。
【請求項27】
前記方法は、前記命令が前記第2のスレッドを示す前記レジスタソースオペランドのフラグを含む場合、前記第1のスレッドの命令を実行するための前記レジスタソースオペランドを取得するために前記第2のスレッドのレジスタファイルにアクセスする段階をさらに備える、請求項26に記載の機械可読媒体。
【請求項28】
前記方法は、前記レジスタソースオペランドにより識別されたレジスタに関連して、前記第1のスレッドのプロデューサ演算の終了を示すインジケータがアクティブになるまで、前記第2のスレッドの前記命令を実行しないようにする段階をさらに備える請求項26に記載の機械可読媒体。
【請求項29】
前記方法は、前記命令が前記第1のスレッドを示すレジスタデスティネーションオペランドのフラグを含む場合、前記第2のスレッドの前記命令を実行した後、前記第2のスレッドの前記命令の前記レジスタデスティネーションオペランドにより識別されたレジスタに関連する同期インジケータをアクティブにする段階をさらに備える、請求項26に記載の機械可読媒体。
【請求項30】
前記方法は、前記第2のスレッドに前記第1のスレッドの状態を複写せずに、前記第1のスレッドから前記第2のスレッドを生成し、前記第2のスレッドの前記命令の実行中に、前記第1のスレッドの前記レジスタファイルに前記第2のスレッドをアクセスさせる段階をさらに備える、請求項26に記載の機械可読媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2012−38328(P2012−38328A)
【公開日】平成24年2月23日(2012.2.23)
【国際特許分類】
【出願番号】特願2011−210843(P2011−210843)
【出願日】平成23年9月27日(2011.9.27)
【分割の表示】特願2009−524212(P2009−524212)の分割
【原出願日】平成18年10月27日(2006.10.27)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.フロッピー
【出願人】(591003943)インテル・コーポレーション (1,101)
【Fターム(参考)】