説明

マルチスレッド処理のためのスレッド選択

【課題】アクティブなスレッドが各サイクルでプログラム命令を発行することを可能にする。
【解決手段】マルチスレッディングプロセッサ4は、種々のプログラムスレッド10からのプログラム命令をインターリーブして、細粒度マルチスレッディングを実行する。スレッドパフォーマンス監視回路機構30は、個々のプログラムスレッドのパフォーマンスパラメーターを監視して、パフォーマンス値を生成する。発行制御回路機構28は、これらのパフォーマンス値を読み取り、スレッド切り替えイベントが発生する際に、いずれのプログラムスレッドを次に選択してアクティブとするべきかを判定する。測定されるパフォーマンスパラメーターは、プログラムスレッドが、プロセッサ内の実行回路機構12による実行のためのプログラム命令を提供することが可能な、サイクルの比率を含み得る。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ処理システムの分野に関する。より詳細には、本発明は、マルチスレッド処理システム内での実行のための、プログラムスレッドの選択に関する。
【背景技術】
【0002】
粗粒度マルチスレッディングおよび/または細粒度マルチスレッディングを利用する処理システムが提供されることは既知である。粗粒度マルチスレッディングでは、種々のプログラムスレッドを、種々の時間でアクティブとするように選択することができる。細粒度マルチスレッディングでは、種々のプログラムスレッドからのプログラム命令は、互いにインターリーブされて、実行される絶え間なく続くプログラム命令として、実行機構に供給される。実行のためのプログラムスレッドは、細粒度マルチスレッディングで同時にインターリーブ可能なプログラムスレッドよりも多く存在する場合が多い。したがって、所定の時間に、いずれのプログラムスレッドをアクティブとするかに関しての選択が行なわれる。
【発明の概要】
【発明が解決しようとする課題】
【0003】
単純な選択機構では、実行のために、種々のプログラムスレッドを、粗粒度レベルで順番に選択することができる。この手法に関する問題は、現在アクティブなプログラムスレッドからのプログラム命令がインターリーブされる場合、各プログラムスレッドが、各サイクルで、実行のためのプログラム命令を発行することができない場合があることである。例えば、プログラムスレッド内でのプログラム命令間のデータ依存性は、プログラム命令が、発行可能となる前に、先行のプログラム命令の完了を待機してストールすることを要求する場合がある。現在アクティブである異なるプログラムスレッドが、別のプログラムスレッドがストールしているサイクルを使用することができる場合がある可能性がある。しかしながら、同時にアクティブである多数のプログラムスレッドが、全て、著しい量のストールを被り、したがって、アクティブなスレッドが各サイクルでプログラム命令を発行することが不可能であるため、データ処理システムのリソースが非効率的に使用され得る可能性もある。
【課題を解決するための手段】
【0004】
一態様によれば、本発明は、
プログラム命令を実行するように構成される実行回路機構と、
この実行回路機構に結合され、複数個のプログラムスレッドの中からプログラム命令を選択して、実行回路機構に発行されるプログラム命令のシーケンスを形成するように構成される、発行制御回路機構であって、この発行制御回路機構は、複数個のプログラムスレッドの種々のプログラムスレッドからのプログラム命令が、そのシーケンス内にインターリーブされるように、プログラム命令を選択するように構成される、発行制御回路機構と、
発行制御回路機構に結合され、複数個のパフォーマンス値を測定するように構成され、これら複数個のパフォーマンス値のそれぞれが、複数個のスレッドのうちの1つの、パフォーマンスパラメーターを示す、スレッドパフォーマンス監視回路機構と、
を含む、データ処理のための装置であって、
この発行制御回路機構が、複数個のパフォーマンス値に基づいて、複数個のプログラムスレッドのうちのいずれかから、実行回路機構に発行されるべきプログラム命令を選択するように構成される、装置を提供する。
【0005】
本技術は、上記の問題を認識し、複数個のパフォーマンス値を測定する働きをするスレッドパフォーマンス監視回路機構を提供するが、これらのパフォーマンスのそれぞれは、複数個のスレッドのうちの1つの、パフォーマンスパラメーターを示す。いずれのプログラムスレッドをアクティブとするかを選択する働きをする発行制御回路機構は、次にこれらのパフォーマンス値を使用して、実行回路機構を利用することができる効率性が改善され得る方法で、いずれのスレッドをアクティブとするべきかを選択することができる。
【0006】
パフォーマンス監視回路機構の値は、多種多様なパフォーマンスパラメーターを監視し得ることが理解されよう。しかしながら、一部の実施形態では、パフォーマンス値は、プログラムスレッドのそれぞれに関して、そのスレッドのプログラム命令が発行のために利用可能であったサイクルの比率を示す。ストールを被ることが稀なプログラムスレッドは、高比率のサイクルが、そのプログラムスレッドからのプログラム命令が発行のために利用可能であったサイクルであることを示す、パフォーマンス値を有することになる。反対に、顕著なデータ依存性ハザードおよび/または分岐予測ミスを被るプログラムスレッドは、プログラムスレッドがプログラム命令を発行することが可能なサイクルの比率が、比較的低いことを示す、パフォーマンス値を有することになる。
【0007】
そのようなパフォーマンス値の関連の中で、発行制御回路機構は、プログラム命令が発行されるべき次のプログラムスレッドを、そのプログラムスレッドが、同時にアクティブとなる1つ以上のプログラムスレッドを補完するように、選択することができる。具体的には、アクティブなプログラムスレッドが一体となって組み合わされることにより、それらがプログラム命令を発行することが可能となるサイクルの比率が、それらの間でほぼ完全な1となることを、それらのパフォーマンス値が示す場合には、効率的である。それゆえ、プログラム命令が発行のために利用可能なサイクルの比率が一体となって、実質的に完全な1となるように、高比率のサイクル上でのプログラム命令利用可能性を示すパフォーマンス値を有するプログラムスレッドは、低比率のサイクル上でプログラム命令が利用可能であることを示すパフォーマンス値を有するプログラムスレッドと適合することができる(すなわち、それらは一体となって、実質的に全てのサイクル上で、プログラム命令を発行することができる)。
【0008】
プログラムスレッドの測定されたパフォーマンス特性を適合させることにより、非効率的に実行リソースを過少利用するプログラムスレッドが組み合わされる状況、ならびに実行リソースに関して互いに非効率的に競合するプログラムスレッドが組み合わされる状況を回避することが可能になる。適用可能な別の選択基準は、予測され使用される発行サイクルの組み合わされた比率が、完全な1以上になることである。
【0009】
プログラムスレッドが、いずれのタイトルでもプログラム命令を発行することが不可能である様々な理由が存在し得る。具体的なそのような状況としては、命令間のオペランド依存性、およびスレッド内の発行される次の命令が、例えば分岐予測ミスの結果として、未だにメモリから読み出されていないことが挙げられる。特定のプログラムスレッドが、所定のサイクルで、次の命令を発行することが不可能である他の理由も存在し得る。
【0010】
スレッドパフォーマンス監視回路機構は、アクティブなプログラムスレッドのそれぞれに関連するカウンタを含み得、このカウンタは、各サイクルで、対応するスレッドが発行のために利用可能なプログラム命令を有するか否かに基づいて、カウント値を累算するように構成される。累算カウント値は、発行のために命令が利用可能であるサイクル、または反対に、発行のために命令が利用不可能であるサイクルのいずれかをカウントすることが可能である。これらのカウントの双方を使用して、そのプログラムスレッドが利用することが可能であった、利用可能なサイクルの比率を示すことができる。この測定パフォーマンスを使用して、そのプログラムスレッドが次に選択される際の、そのプログラムスレッドの挙動が予測され、したがって、補完的処理要求を有する組み合わせでの実行のためのプログラムスレッドを選択するために、発行制御回路機構によって使用することができる。
【0011】
このカウンタは、既定の累算期間にわたってカウント値を累算し、その後カウント値をリセットして、累算を再開するように構成することができる。このことは、アクティブなプログラムスレッドに関するパフォーマンス値が判定される測定期間を、効率的に形成する。この既定の累算期間は、ユーザー設定可能パラメーターにすることができ、それにより、パフォーマンス監視回路機構を、実行されているプログラムスレッドのタイプに同調させることができる。
【0012】
特定のプログラムスレッドが、そのパフォーマンス特性が他のプログラムスレッドと不適合であることにより、決して実行のために選択されない状況を回避するため、一部の実施形態では、発行制御回路機構は、パフォーマンス値とは無関係に、発行制御回路機構によって作成された既定のスレッド選択数よりも多くプログラム命令が選択されていないプログラムスレッドから、プログラム命令を発行のために選択するように構成することができる。それゆえ、パフォーマンス値の使用は、過度に長期間、非アクティブであったプログラムスレッドの場合には、無効化される。
【0013】
本技術は、インオーダーの実行環境に関して特に有用であるが、これは、インオーダーの実行環境は、典型的には、実行のためにアウトオブオーダーでプログラム命令を選択することが可能な柔軟性が欠如しているため、プログラムスレッドのストールを起こす傾向がより強いためである。
【0014】
アクティブなプログラムスレッドに関するプログラム命令を、命令キュー内に便宜的に保持することにより、実行可能命令のプールを形成することができる。
【0015】
発行制御回路機構は、スレッド切り替えイベントが発生すると、アクティブとするべき次のプログラムスレッドの選択を実行する(同様に、現在アクティブなスレッドを実行からフラッシュする)ことができる。スレッド切り替えイベントは、キャッシュメモリ内でのミス、タイマー誘因イベント、変換索引バッファ内でのミス、外部割込み、またはスレッド自体が別のスレッドに実行を譲渡するべきであることを指示する命令を実行することのうちの1つ以上を含み得る。
【0016】
発行制御回路機構は、単一発行動作または複数発行動作に対応する実行環境内で使用することができる。
【0017】
発行制御回路機構は、多数のプログラムスレッドをインターリーブすることができるが、比較的少量の追加的オーバーヘッドを有しながらも、実行リソースの活用を顕著に改善する能力を有する細粒度インターリーブは、2つのプログラムスレッドが、発行制御回路機構によってインターリーブされる場合に達成することができる。
【0018】
上記は、好ましい実施形態を説明しており、この好ましい実施形態では、パフォーマンス値は、プログラムスレッドが発行のためのプログラム命令を提供することができる、サイクルの比率を示すことが理解されよう。パフォーマンス監視回路機構によって測定されるパフォーマンス値は、種々の形態をとることが可能である。演算パイプライン、ベクトル処理パイプライン、読み込み/格納パイプラインなどのような、種々のタイプの複数実行パイプラインに対応する処理環境では、測定されているパフォーマンス値は、これらの種々のパイプラインを利用する、所定のプログラムスレッド内のプログラム命令の比率を示すことが可能である。この方法で、プログラムスレッドを、それらが補完的なパイプライン使用のパターンを有した場合に、共に使用するために選択することが可能であり、例えば演算パイプラインを多用したプログラムスレッドを、読み込み/格納パイプラインを多用したプログラムスレッドと同時にアクティブとするように選択することにより、その2つのスレッドは、実行機構内での同じパイプラインの使用に関して競合することがない。パフォーマンス値の更なる例もまた、可能である。
【0019】
別の態様によれば、本発明は、
プログラム命令を実行するための実行手段と、
複数個のプログラムスレッドの中からプログラム命令を選択して、実行手段に発行されるプログラム命令のシーケンスを形成するための、実行手段に結合された発行制御手段であって、この発行制御手段は、複数個のプログラムスレッドの種々のプログラムスレッドからのプログラム命令が、そのシーケンス内にインターリーブされるように、プログラム命令を選択する、発行制御手段と、
複数個のパフォーマンス値を測定するための、発行制御手段に結合されたスレッドパフォーマンス監視手段であって、これら複数個のパフォーマンス値のそれぞれが、複数個のスレッドのうちの1つの、パフォーマンスパラメーターを示す、スレッドパフォーマンス監視手段と、
を含む、データ処理のための装置であって、
この発行制御手段が、複数個のパフォーマンス値に基づいて、複数個のプログラムスレッドのうちのいずれかから、実行手段に発行されるべきプログラム命令を選択する、装置を提供する。
【0020】
更なる態様によれば、本発明は、
発行されるプログラム命令のシーケンスを形成するために、複数個のプログラムスレッドの中からプログラム命令を選択する工程であって、この選択する工程は、複数個のプログラムスレッドの種々のプログラムスレッドからのプログラム命令が、そのシーケンス内にインターリーブされるように、プログラム命令を選択するように作用する、工程と、
発行されるプログラム命令を実行する工程と、
複数個のパフォーマンス値を測定する工程であって、これら複数個のパフォーマンス値のそれぞれが、複数個のスレッドのうちの1つの、パフォーマンスパラメーターを示す、工程と、
を含む、データ処理のための方法であって、
選択する工程が、複数個のパフォーマンス値に基づいて、複数個のプログラムスレッドのうちのいずれかから、実行手段に発行されるべきプログラム命令を選択する、方法を提供する。
【0021】
本発明の、上記の目的、特徴、および有利点、ならびに他の目的、特徴、および有利点は、添付の図面と関連して理解されるべき、以下の例示的な実施形態の詳細な説明から、明らかとなるであろう。
【図面の簡単な説明】
【0022】
【図1】粗粒度マルチスレッディングおよび細粒度マルチスレッディングを使用する、データ処理のための装置を概略的に示す図である。
【図2】スレッド選択を制御するための、発行制御回路機構、パフォーマンス監視回路機構、および発行キューを概略的に示す図である。
【図3】パフォーマンス値の収集を概略的に示す流れ図である。
【図4】スレッド選択を概略的に示す流れ図である。
【発明を実施するための形態】
【0023】
図1は、メモリ6に結合されたプロセッサコア4を含む、データ処理のための装置を概略的に示す。メモリ6は、操作されるオペランドデータ8、および複数のプログラムスレッドを形成するプログラム命令10を格納する。これらのプログラムスレッドのそれぞれは、プログラム命令のシーケンスを含む。実行されるプログラム命令10が複数個のプログラムスレッドに分割され得る、このタイプの配列は、本技術分野のものと類似する。本技術の複数スレッディングを利用して、プロセッサ4が、プログラマーの視点からは、対応するプログラムスレッドをそれぞれが個別に実行する複数プロセッサとして表れることを可能にし得る。プログラムスレッドがもはやアクティブではない場合、そのデータをプロセッサ4からフラッシュすることができ(例えば、レジスタの内容、プログラムカウンタ値、ポインタ、および他の状態データ)、対象のプログラムスレッドが再開される際に、この状態データがプロセッサ4に復元され、実行は、プログラマーの視点からは、その実行が継続的であり、そのプログラムスレッドがプロセッサ4を占用していたかのように見える方法で、継続される。
【0024】
プロセッサ4は、実行回路機構12を含み、この実行回路機構12は、この実施例では、演算データ経路14、パイプライン回路機構16、および命令デコーダ18などの要素を含む。この回路機構12の表示は定型的なものであり、実際には、実行回路機構12は、多種多様な形態をとることが可能であり、例えば、演算パイプライン、読み込み/格納パイプライン、単一命令多重データパイプラインなどのような、それぞれが特定の形態のプログラム命令に合わせて調整された、複数の実行パイプラインを含むことが理解されよう。プロセッサコア4は、メモリ6からのデータ値を格納することができるキャッシュメモリ20を含む。プログラムスレッド切り替えイベントが生じ得る1つの理由は、このキャッシュメモリ20内でのキャッシュミスによるものである。そのようなキャッシュミスは、典型的には、メモリ8への長い待ち時間のメモリ読み出しが必要となり、したがって、このキャッシュミスを解決し、必要なデータがキャッシュ20内に読み出される間、異なるプログラムスレッドの実行に切り替えることがより効率的となる。
【0025】
プロセッサ4は、メモリ6からプログラム命令を先取りし、それらを発行キュー24に供給するための、先取り回路機構22を含み、この発行キュー24で、それらのプログラム命令は、発行可能プログラム命令のプールを形成する。先取り回路機構22は、アクティブであり、かつプログラム命令が読み出されるべき2つの異なるプログラムスレッドのプログラム命令をそれぞれ指定する、2つのプログラムカウンタ値を利用することができる。分岐予測回路機構26を使用して、既知の技術により、読み出された命令内での条件分岐を予測することができる。そのような分岐予測が正しいことは保証されず、したがって、分岐予測ミスは、実行回路機構12が実行のためのプログラム命令を受理することが可能な全ての処理サイクルで、現在アクティブなプログラムスレッドからのプログラム命令が、発行キュー24からの発行に利用可能となり得ない、1つの理由である。
【0026】
図1には、発行制御回路機構28およびスレッドパフォーマンス監視回路機構30もまた示される。発行制御回路機構28は、発行キュー24からのいずれのプログラム命令を、各プログラムサイクルで、実行回路機構12に発行するかを制御する。発行制御回路機構28は、それゆえ、現在アクティブなプログラムスレッド間で、実行回路機構に発行されるプログラム命令をインターリーブすることによって、細粒度マルチスレッディングを実行することができる。いずれの時間においても、アクティブである複数個のプログラムスレッド、典型的には2つのプログラムスレッドが存在する。発行制御回路機構28はまた、所定の時間にいずれのプログラムスレッドをアクティブとするべきかを選択することにも関与する。非アクティブなプログラムスレッドは、そのコンテキストデータ(例えば、レジスタの内容、ポインタなど)を、非使用時に、プロセッサ4内の特殊目的メモリに保存させる。この状態データは、そのプログラムスレッドが発行制御回路機構28によって選択され、アクティブとなる際に、急速に復元することができる。
【0027】
発行制御回路機構28は、任意の所定の時間に、いずれのプログラムスレッドを選択してアクティブとするべきかを判定する際に、スレッドパフォーマンス監視回路機構30によって測定されたパフォーマンス値に応答する。発行制御回路機構28が、現在アクティブなスレッドをフラッシュし(退去させ)、アクティブとなる新たなプログラムスレッドを選択することを引き起こす、スレッド切り替えイベントは、様々な形態をとる可能性がある。前述のように、これらの形態のうちの1つは、キャッシュ20内でのキャッシュミスの場合がある。スレッド切り替えイベントの別の形態は、ウォッチドッグタイマーに由来する誘因などの、タイマー誘因イベントの場合がある。別の形態のスレッド切り替えイベントは、プログラムスレッド内での、そのプログラムスレッドが自ら退去するべきであることを指定するプログラム命令の実行、すなわち、別のスレッドへの譲渡イベントである場合がある。更なるスレッド切り替えイベントとしては、変換索引バッファ内でのミス、および外部割込みが挙げられる。
【0028】
スレッドパフォーマンス監視回路機構30は、現在アクティブなプログラムスレッドの、1つ以上のパフォーマンスパラメーターを監視する。これらの測定パフォーマンスパラメーターを使用して、いずれのプログラムスレッドが、共にアクティブとなるように選択された場合に、互いに補完することになるかを予測することができる。発行制御回路機構28は、それゆえ、対象のプログラムスレッドが最後に実行された際のパフォーマンスパラメーターを示す、これらの測定パフォーマンス値に依存して、アクティブとされるべき次のプログラムスレッドを選択するように構成される。測定することができるパフォーマンスパラメーターの1つの形態は、所定のプログラムスレッドが、発行するために利用可能なプログラム命令を提供することが可能であった、サイクルの比率を示すものであり、例えば、プログラム命令が全てのサイクルで発行のために利用可能であることを妨げる、データインターロック、分岐予測ミスを、プログラムスレッドが被る可能性である。
【0029】
パフォーマンス値およびパフォーマンスパラメーターの他の形態もまた、可能である。これらのパフォーマンス値およびパフォーマンスパラメーターは、個々のプログラムスレッド、およびそのプログラムスレッドの特性に関する。発行制御回路機構28は、プログラムスレッドの実際の実行中にリアルタイムで測定された、これらの特性を利用して、実行回路機構12をより効率的に活用するために、アクティブとなるように選択される次のプログラムスレッドを判定する。
【0030】
図2は、発行キュー24、発行制御回路機構28、およびスレッドパフォーマンス監視回路機構30を概略的に示す。発行キュー34は、先取りユニット22からプログラム命令を受け取り、実行回路機構12にプログラム命令を供給する。実行回路機構12への命令の供給は、プログラム命令の発行である。この実施例では、発行キュー24は、現在アクティブな2つのスレッドTA、TBからのプログラム命令の発行をインターリーブすることにより、細粒度マルチスレディング(FGNT)を達成することができる。現在アクティブなスレッドTA、TBのいずれかに生じるデータインターロックを示す信号が、発行キュー24に供給されることにより、個々のプログラムスレッドは、そのプログラムスレッド内でのデータハザードが生じる場合には、ストールすることができる。ストールしていないプログラムスレッドは、望ましくは、他方のプログラムスレッドがストールしているサイクルを利用して、プログラム命令の発行を継続し、それゆえ、実行回路機構12を効率的に活用することが可能であるべきである。
【0031】
発行キュー24が実行回路機構12にプログラム命令を発行することができる各サイクルで、信号TA AVおよび信号TB AVが生成され、パフォーマンス監視回路機構30内の各カウンタ32、34に供給されて、それぞれ、スレッドAが、発行に利用可能な命令を、そのサイクルで有したか否か、およびスレッドBが、発行に利用可能な命令を、その処理サイクルで有したか否かを示すことができる。既定の累算期間にわたる、これらのカウンタ32、34内の累算値は、それゆえ、対象のプログラムスレッドが、発行のために利用可能なプログラム命令を提供することが可能であった、サイクルの比率を示す、パフォーマンスパラメーターを提供することになる。
【0032】
また、パフォーマンス監視回路機構内には、サイクルカウンタ36および累算期間レジスタ38も存在する。累算期間レジスタ38は、カウンタ32、34がそれらの値を累算する時間枠であって、またそれゆえパフォーマンスパラメーターが測定される時間枠を規定する、ユーザー設定可能な累算期間値を格納する。コンパレータ40は、累算期間レジスタ38の内容を、サイクルカウンタ36と比較して、これらが等しい場合、カウンタ32、34をリセットして、これらをゼロにするためのリセット信号、およびカウンタ32、34から、累算カウント値の一部分を、パフォーマンス値レジスタ42のうちの対応する1つへとコピーするためのコピー信号を発行する。
【0033】
全累算カウントを、パフォーマンス値として格納することができる可能性があるが、実際には、このことは、過度に高い感度限界を提供し、このデータを格納するオーバーヘッドは、正当化されない。それゆえ、累算値の最上位ビット部分を、パフォーマンス値として格納することによって、対象のスレッドのパフォーマンスパラメーターに関する十分な情報を獲得することができる。最上位ビット部分は、累算期間レジスタ38内に格納された、現在設定されている累算期間に基づいて選択される幅を有し得る。累算期間が短い場合には、異なるプログラムスレッドのパフォーマンスに関するパフォーマンスパラメーター情報が捕捉されることを確実に区別するために、より多くの最上位ビット部分を抽出する必要がある。マルチプレクサー44は、カウンタ32、34からの値を、適切なパフォーマンス値レジスタ42内に導く働きをする。この実施例では、8つのプログラムスレッドが対応される。任意の所定の時間にアクティブであるプログラムスレッドTA、TBは、これら8つのプログラムスレッドのうちのいずれかであり得る。したがって、パフォーマンス値は、コピー信号がコンパレータ40によって生成されると、マルチプレクサー44によって導かれることにより、パフォーマンス値レジスタ42のうちの適切な1つ内に格納される。パフォーマンス値レジスタ42内に格納されたパフォーマンス値は、それゆえ、対象のプログラムスレッドがアクティブであった最後の機会にパフォーマンス監視回路機構30によって測定されたパフォーマンス値を表す。
【0034】
発行制御回路機構28は、パフォーマンスレジスタ42からのパフォーマンス値と、前述のようなスレッド切り替えイベントを示す信号とを受け取る、次スレッド選択回路機構46を含む。非アクティブスレッドレジスタ48は、現在非アクティブなスレッドのスレッド識別子を、それらの最遅活動時間の順で格納する。現在アクティブなスレッドは、それらのスレッド識別子を、アクティブスレッドレジスタ50、52内に格納させる。非アクティブスレッドレジスタ48はまた、対象の非アクティブなスレッドに関する状態データが配置された、プロセッサ4の特殊目的オンチップメモリ内の位置を示す、ポインタ値も格納することができる。
【0035】
現在アクティブなスレッドがフラッシュされ、非アクティブにされると、そのスレッドは、非アクティブスレッドレジスタ48内の、リスト済み非アクティブスレッドの末尾に加えられる。この時点で、次スレッド選択回路機構46は、アクティブを維持するプログラムスレッドのパフォーマンス値を検討し、そのパフォーマンス値から示されるような、そのアクティブなプログラムスレッドによって使用されていない、プログラムの発行のために利用可能なサイクルの比率を判定する。それゆえ、アクティブを維持するプログラムスレッドが、0.75の比率を示すパフォーマンス値を有する場合には、このアクティブなプログラムスレッドは、0.25のパフォーマンスを示すパフォーマンス値を有したプログラムスレッドと同時のアクティブに、良好に適合するが、これは、それらのプログラムスレッドが一体に組み合わされて、完全な1の使用の比率を示すためである。次スレッド選択回路機構46は、非アクティブスレッドレジスタ48内に識別されたスレッドに関連するパフォーマンス値を順番に検索し、それらのうちのいずれが、アクティブを維持しているプログラムスレッドと同時のアクティブに適していることを示すパフォーマンス値を有するかを判定するように構成される。この適合性は、使用される発行サイクルの比率を示すパフォーマンス値の組み合わせが、完全な1を超過する最小値(または別法として、完全な1以上の値)であるとして、判断され得る。現在非アクティブな2つのプログラムスレッドのパフォーマンス値が、アクティブを維持しているプログラムスレッドのパフォーマンス値と、等しく良好に適合する場合には、最も長く非アクティブであった、非アクティブなプログラムスレッドを、次のプログラムスレッドとして選択することができる。任意の所定の時間に、いずれのプログラムスレッドをアクティブとするべきかを選択する際の、この発行制御回路機構28の動作は、粗粒度マルチスレッディング(CGMT)を実行する。
【0036】
次スレッド選択回路機構46は、所定のプログラムスレッドが、恒久的に非アクティブを維持することがないようにするための機構を更に含む。したがって、発行制御回路機構28は、パフォーマンス値レジスタ42内のパフォーマンス値とは独立して、プログラムスレッドが、発行制御回路機構28によって作成された既定のスレッド選択数よりも多く選択されていない場合には、アクティブとされる次のスレッドとして、そのプログラムスレッドを選択する。このことにより、プログラムスレッドは、いかに他のプログラムスレッドと不適合であろうとも、少なくともある程度の実行時間を獲得することが、効率的に保証される。
【0037】
この例示的な実施形態での命令キュー24は、プログラムスレッドのそれぞれの中からのインオーダーな命令発行を実行する。アウトオブオーダーな命令発行を実行する他の実施形態もまた、それが更なる複雑性に対応するために適切である場合には、可能である。命令キュー24は、各サイクル上で、単一のプログラム命令を発行することができ、または他の実施形態では、各サイクル上で、複数のプログラム命令を発行することができる。
【0038】
図3は、パフォーマンス値を収集する際の、パフォーマンス監視回路機構30の動作を概略的に示す流れ図である。工程54では、処理は、各処理サイクルが開始されるまで待機する。次に工程56は、現在の累算期間が終了しているか否かを判定する。現在の累算期間が終了している場合には、工程58が、カウンタ32、34からの累算値の最上位ビット部分を、パフォーマンス値レジスタ42のうちの適切な1つへとコピーする。次に工程60は、カウンタ32、34をリセットし、処理は工程54に戻る。
【0039】
工程56での判定が、累算期間が終了していないという場合には、処理は工程62に進み、この工程62で、現在アクティブなスレッドTA、TBのそれぞれに関する累算値は、そのプログラムスレッドが、このサイクル中での発行のために利用可能な命令を有する場合には、1増加される。プログラムスレッドは、データハザード、または分岐予測ミスが発生することによって、そのプログラムスレッドに関するプログラム命令が依然としてメモリ6から読み出し中であり、未だ命令キュー24に到達していないなどの理由により、発行のために利用可能な命令を有さない場合がある。
【0040】
図4は、スレッド切り替えイベントに応答して、発行制御回路機構28によって実行されるようなスレッド選択を、概略的に示す流れ図である。工程64では、処理は、スレッド切り替えイベント発生するまで待機する。次に工程66は、退去するスレッド、およびその関連する状態データをフラッシュする。工程68は、いずれかの現在非アクティブなスレッドが、スレッド選択命令の最大許容数を超えて選択されていないかを判定する。そのようなスレッドが識別された場合には、工程70は、実行されるべき次のスレッドとして、そのスレッドを強制的に選択させ、処理は工程64に戻る。
【0041】
工程68での判定が、スレッド選択の最大許容数を超えて選択されていない現在非アクティブなプログラムスレッドが存在しないというものである場合には、処理は工程72に進み、この工程72で、非アクティブを維持するべきスレッドのパフォーマンス値の合計が読み取られる。アクティブを維持するべきスレッドが1つのみ存在する(すなわち、2つのプログラムスレッドをインターリーブするシステム)場合、この工程72は、単に、アクティブを維持しているプログラムスレッドに関するパフォーマンス値の読み取りとすることができる。しかしながら、3つ以上のプログラムスレッドが、任意の所定の時間でアクティブであるように対応され、それゆえ複数のプログラムスレッドがアクティブを維持するべき場合には、工程72は、それらのパフォーマンス値を合計することができる。
【0042】
次に工程74は、アクティブを維持しているプログラムスレッドの要求を所与として、次の選択スレッドのために利用可能となる、発行スロットの利用可能部分を算出する。次に工程76は、完全な1を超過する、必要とされる発行スロットの最小の総合比率を作り出す、発行スロットの推定必要比率を有する新たなスレッドを、そのパフォーマンス値から識別する。これらの2つのスロットは、それらが予測通りに実行し、その一方で実行リソースに関して互いに不当に競合することがない場合には、実質的に、実行回路機構12を完全に活用することになる。次に工程78は、識別されたスレッドを選択し、処理は工程64に戻る。
【符号の説明】
【0043】
4 ・・・プロセッサ
10・・・プログラム命令
12・・・実行回路機構
14・・・演算データ回路
20・・・実行回路機構

【特許請求の範囲】
【請求項1】
プログラム命令を実行するように構成される実行回路機構と、
前記実行回路機構に結合され、複数個のプログラムスレッドの中からプログラム命令を選択して、前記実行回路機構に発行されるプログラム命令のシーケンスを形成するように構成される、発行制御回路機構であって、前記発行制御回路機構は、前記複数個のプログラムスレッドの種々のプログラムスレッドからのプログラム命令が、前記シーケンス内にインターリーブされるように、前記プログラム命令を選択するように構成される、発行制御回路機構と、
発行制御回路機構に結合され、複数個のパフォーマンス値を測定するように構成され、前記複数個のパフォーマンス値のそれぞれが、前記複数個のスレッドのうちの1つの、パフォーマンスパラメーターを示す、スレッドパフォーマンス監視回路機構と、
を含む、データ処理のための装置であって、
前記発行制御回路機構が、前記複数個のパフォーマンス値に基づいて、前記複数個のプログラムスレッドのうちのいずれかから、前記実行回路機構に発行されるべきプログラム命令を選択するように構成される、装置。
【請求項2】
前記発行制御回路機構が、発行サイクルのシーケンスの各発行サイクルで、発行のためのプログラム命令を選択し、前記複数個のパフォーマンス値が、前記複数個のプログラムスレッドのうちのそれぞれ1つに関して、前記複数個のプログラムスレッドのうちの前記1つのプログラム命令が発行のために利用可能な、前記発行サイクルのシーケンス内の発行サイクルの比率を示す、請求項1に記載の装置。
【請求項3】
前記発行制御回路機構が、現在選択されているそれらのプログラムスレッドと組み合わせて、前記パフォーマンス値によってプログラム命令の発行が予測される発行サイクルの比率が、完全な1を超える最小値であるように、プログラム命令が発行される次のプログラムスレッドを選択する、請求項2に記載の装置。
【請求項4】
前記発行制御回路機構が、現在選択されているそれらのプログラムスレッドと組み合わせて、プログラム命令が発行される発行サイクルの比率が、完全な1以上であるように、プログラム命令が発行される次のプログラムスレッドを選択する、請求項2に記載の装置。
【請求項5】
前記発行制御回路機構が、
(i)前記複数個のプログラムスレッドのうちの前記1つから発行される次の命令が、未だ利用可能ではないオペランド値に対するデータ依存性を有する場合、および
(ii)前記複数個のプログラムスレッドのうちの前記1つから発行される次の命令が、前記次の命令を格納するメモリから読み出されることを未だ完了していない場合
のいずれか一方の場合には、前記複数個のプログラムスレッドのうちの前記1つのプログラム命令が、発行サイクルでの発行のために利用不可能であると判定するように構成される、請求項2に記載の装置。
【請求項6】
前記スレッドパフォーマンス監視回路機構が、プログラム命令を発行するように選択された各プログラムスレッドに関するカウンタを含み、前記カウンタは、前記複数個のプログラムスレッドのうちの対応するプログラムスレッドが、発行のために利用可能なプログラム命令を有するか否かに基づいて、カウント値を累算するように構成される、請求項2に記載の装置。
【請求項7】
前記カウンタが、既定の累算期間にわたって前記カウント値を累算し、その後前記カウント値がリセットされ、累算が再開されるように構成される、請求項6に記載の装置。
【請求項8】
前記既定の累算期間が、ユーザー設定可能なパラメーターである、請求項7に記載の装置。
【請求項9】
前記発行制御回路機構が、前記複数個のパフォーマンス値とは無関係に、前記発行制御回路機構によって作成された既定のスレッド選択数よりも多くプログラム命令が選択されていないプログラムスレッドから、プログラム命令を発行のために選択するように構成される、請求項1に記載の装置。
【請求項10】
前記発行制御回路機構が、前記複数個のプログラムスレッドのそれぞれの中から、インオーダーのプログラム命令を実行するように構成される、請求項1に記載の装置。
【請求項11】
前記複数個のプログラムスレッドのそれぞれのプログラム命令を格納して、実行可能な命令のプールを形成するように構成される、発行キュー回路機構を含む、請求項1に記載の装置。
【請求項12】
前記発行制御回路機構が、スレッド切り替えイベントの発生まで、前記複数個のプログラムスレッドのうちの所定の1つから、発行されるプログラム命令を選択することを継続するように構成され、スレッド切り替えイベントが発生すると、前記発行制御回路機構が、前記複数個のパフォーマンス値に基づいて、前記複数個のプログラムスレッドのうちのいずれかから、前記実行回路機構に発行されるべきプログラム命令を選択する、請求項1に記載の装置。
【請求項13】
前記スレッド切り替えイベントが、
(i)キャッシュメモリ内でのミス、
(ii)タイマー誘因イベント、
(iii)別のスレッドへの譲渡イベント、
(iv)変換索引バッファ内でのミス、および
(v)外部割込み要求、
のうちの少なくとも1つである、請求項12に記載の装置。
【請求項14】
前記発行制御回路機構が、一度に、1つ以上のプログラム命令を、前記実行回路機構に発行するように構成される、請求項1に記載の装置。
【請求項15】
前記発行制御回路機構が、2つのプログラムスレッドからのプログラム命令をインターリーブするように構成される、請求項1に記載の装置。
【請求項16】
プログラム命令を実行するための実行手段と、
複数個のプログラムスレッドの中からプログラム命令を選択して、前記実行手段に発行されるプログラム命令のシーケンスを形成するための、前記実行手段に結合された発行制御手段であって、前記発行制御手段は、前記複数個のプログラムスレッドの種々のプログラムスレッドからのプログラム命令が、前記シーケンス内にインターリーブされるように、前記プログラム命令を選択する、発行制御手段と、
複数個のパフォーマンス値を測定するための、発行制御手段に結合されたスレッドパフォーマンス監視手段であって、前記複数個のパフォーマンス値のそれぞれが、前記複数個のスレッドのうちの1つの、パフォーマンスパラメーターを示す、スレッドパフォーマンス監視手段と、
を含む、データ処理のための装置であって、
前記発行制御手段が、前記複数個のパフォーマンス値に基づいて、前記複数個のプログラムスレッドのうちのいずれかから、前記実行手段に発行されるべきプログラム命令を選択する、装置。
【請求項17】
発行されるプログラム命令のシーケンスを形成するために、複数個のプログラムスレッドの中からプログラム命令を選択する工程であって、前記選択する工程は、前記複数個のプログラムスレッドの種々のプログラムスレッドからのプログラム命令が、前記シーケンス内にインターリーブされるように、前記プログラム命令を選択するように作用する、工程と、
前記発行されるプログラム命令を実行する工程と、
複数個のパフォーマンス値を測定する工程であって、前記複数個のパフォーマンス値のそれぞれが、前記複数個のスレッドのうちの1つの、パフォーマンスパラメーターを示す、工程と、
を含む、データ処理のための方法であって、
前記選択する工程が、前記複数個のパフォーマンス値に基づいて、前記複数個のプログラムスレッドのうちのいずれかから、前記実行手段に発行されるべきプログラム命令を選択する、方法。
【請求項18】
前記選択する工程が、発行サイクルのシーケンスの各発行サイクルで、発行のためのプログラム命令を選択し、前記複数個のパフォーマンス値が、前記複数個のプログラムスレッドのうちのそれぞれ1つに関して、前記複数個のプログラムスレッドのうちの前記1つのプログラム命令が発行のために利用可能な、前記発行サイクルのシーケンス内の発行サイクルの比率を示す、請求項16に記載の方法。
【請求項19】
前記選択する工程が、現在選択されているそれらのプログラムスレッドと組み合わせて、前記パフォーマンス値によってプログラム命令の発行が予測される発行サイクルの比率が、完全な1を超える最小値であるように、プログラム命令が発行される次のプログラムスレッドを選択する、請求項18に記載の方法。
【請求項20】
前記選択する工程が、現在選択されているそれらのプログラムスレッドと組み合わせて、プログラム命令が発行される発行サイクルの比率が、完全な1以上であるように、プログラム命令が発行される次のプログラムスレッドを選択する、請求項18に記載の方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate