(57)【特許請求の範囲】
【請求項１】
プログラム命令を実行するように構成される実行回路機構と、
前記実行回路機構に結合され、複数個のプログラムスレッドの中からプログラム命令を選択して、前記実行回路機構に発行されるプログラム命令のシーケンスを形成するように構成される、発行制御回路機構と、
発行制御回路機構に結合され、複数個のパフォーマンス値を測定するように構成され、前記複数個のパフォーマンス値のそれぞれが、前記複数個のスレッドのうちの１つの、パフォーマンスパラメーターを示す、スレッドパフォーマンス監視回路機構と、
を含む、データ処理のための装置であって、
前記発行制御回路機構が、前記複数個のパフォーマンス値に基づいて、前記複数個のプログラムスレッドのうちのいずれかから、前記実行回路機構に発行されるべきプログラム命令を選択するように構成され、
前記発行制御回路機構が、発行サイクルのシーケンスの各発行サイクルで、発行のためのプログラム命令を選択し、前記複数個のパフォーマンス値が、前記複数個のプログラムスレッドのうちのそれぞれ１つに関して、前記複数個のプログラムスレッドのうちの前記１つのプログラム命令が発行のために利用可能な、前記発行サイクルのシーケンス内の発行サイクルの比率を示す、装置。
【請求項２】
前記発行制御回路機構が、現在選択されているそれらのプログラムスレッドと組み合わせて、発行可能なプログラム命令を発行するために必要な発行サイクルの、全発行サイクルに対する比率が、１を超える最小値になるように、プログラム命令が発行される次のプログラムスレッドを選択する、請求項１に記載の装置。
【請求項３】
前記発行制御回路機構が、現在選択されているそれらのプログラムスレッドと組み合わせて、発行可能なプログラム命令を発行するために必要な発行サイクルの、全発行サイクルに対する比率が、１以上になるように、プログラム命令が発行される次のプログラムスレッドを選択する、請求項１に記載の装置。
【請求項４】
前記発行制御回路機構が、
（ｉ）前記複数個のプログラムスレッドのうちの前記１つから発行される次の命令が、未だ利用可能ではないオペランド値に対するデータ依存性を有する場合、および
（ｉｉ）前記複数個のプログラムスレッドのうちの前記１つから発行される次の命令が、前記次の命令を格納するメモリから読み出されることを未だ完了していない場合
のいずれか一方の場合には、前記複数個のプログラムスレッドのうちの前記１つのプログラム命令が、発行サイクルでの発行のために利用不可能であると判定するように構成される、請求項１に記載の装置。
【請求項５】
前記スレッドパフォーマンス監視回路機構が、プログラム命令を発行するように選択された各プログラムスレッドに関するカウンタを含み、前記カウンタは、前記複数個のプログラムスレッドのうちの対応するプログラムスレッドが、発行のためにプログラム命令が利用可能である発行サイクル、または発行のためにプログラム命令が利用不可能である発行サイクルをカウントすることによって、カウント値を累算するように構成される、請求項１に記載の装置。
【請求項６】
前記カウンタが、既定の累算期間にわたって前記カウント値を累算し、その後前記カウント値がリセットされ、累算が再開されるように構成される、請求項５に記載の装置。
【請求項７】
前記既定の累算期間が、ユーザー設定可能なパラメーターである、請求項６に記載の装置。
【請求項８】
前記発行制御回路機構が、前記発行制御回路機構によって作成された既定のスレッド選択数よりも多くプログラム命令が選択されていないプログラムスレッドから、プログラム命令を発行のために選択するように構成される、請求項１に記載の装置。
【請求項９】
前記発行制御回路機構が、前記複数個のプログラムスレッドのそれぞれの中から、インオーダーのプログラム命令を実行するように構成される、請求項１に記載の装置。
【請求項１０】
前記複数個のプログラムスレッドのそれぞれのプログラム命令を格納して、実行可能な命令のプールを形成するように構成される、発行キュー回路機構を含む、請求項１に記載の装置。
【請求項１１】
前記発行制御回路機構が、スレッド切り替えイベントの発生まで、前記複数個のプログラムスレッドのうちの所定の１つから、発行されるプログラム命令を選択することを継続するように構成され、スレッド切り替えイベントが発生すると、前記発行制御回路機構が、前記複数個のパフォーマンス値に基づいて、前記複数個のプログラムスレッドのうちのいずれかから、前記実行回路機構に発行されるべきプログラム命令を選択する、請求項１に記載の装置。
【請求項１２】
前記スレッド切り替えイベントが、
（ｉ）キャッシュメモリ内でのミス、
（ｉｉ）タイマー誘因イベント、
（ｉｉｉ）別のスレッドへの譲渡イベント、
（ｉｖ）変換索引バッファ内でのミス、および
（ｖ）外部割込み要求、
のうちの少なくとも１つである、請求項１１に記載の装置。
【請求項１３】
前記発行制御回路機構が、一度に、１つ以上のプログラム命令を、前記実行回路機構に発行するように構成される、請求項１に記載の装置。
【請求項１４】
プログラム命令を実行するための実行手段と、
複数個のプログラムスレッドの中からプログラム命令を選択して、前記実行手段に発行されるプログラム命令のシーケンスを形成するための、前記実行手段に結合された発行制御手段と、
複数個のパフォーマンス値を測定するための、発行制御手段に結合されたスレッドパフォーマンス監視手段であって、前記複数個のパフォーマンス値のそれぞれが、前記複数個のスレッドのうちの１つの、パフォーマンスパラメーターを示す、スレッドパフォーマンス監視手段と、
を含む、データ処理のための装置であって、
前記発行制御手段が、前記複数個のパフォーマンス値に基づいて、前記複数個のプログラムスレッドのうちのいずれかから、前記実行手段に発行されるべきプログラム命令を選択し、
前記発行制御手段が、発行サイクルのシーケンスの各発行サイクルで、発行のためのプログラム命令を選択し、前記複数個のパフォーマンス値が、前記複数個のプログラムスレッドのうちのそれぞれ１つに関して、前記複数個のプログラムスレッドのうちの前記１つのプログラム命令が発行のために利用可能な、前記発行サイクルのシーケンス内の発行サイクルの比率を示す、装置。
【請求項１５】
発行制御手段によって、発行されるプログラム命令のシーケンスを形成するために、複数個のプログラムスレッドの中からプログラム命令を選択する工程と、
実行手段によって、前記発行されるプログラム命令を実行する工程と、
スレッドパフォーマンス監視手段によって、複数個のパフォーマンス値を測定する工程であって、前記複数個のパフォーマンス値のそれぞれが、前記複数個のスレッドのうちの１つの、パフォーマンスパラメーターを示す、工程と、
を含む、データ処理のための装置の作動方法であって、
前記選択する工程が、前記複数個のパフォーマンス値に基づいて、前記複数個のプログラムスレッドのうちのいずれかから、前記実行手段に発行されるべきプログラム命令を選択し、
前記選択する工程が、発行サイクルのシーケンスの各発行サイクルで、発行のためのプログラム命令を選択し、前記複数個のパフォーマンス値が、前記複数個のプログラムスレッドのうちのそれぞれ１つに関して、前記複数個のプログラムスレッドのうちの前記１つのプログラム命令が発行のために利用可能な、前記発行サイクルのシーケンス内の発行サイクルの比率を示す、方法。
【請求項１６】
前記選択する工程が、現在選択されているそれらのプログラムスレッドと組み合わせて、発行可能なプログラム命令を発行するために必要な発行サイクルの、全発行サイクルに対する比率が、１を超える最小値になるように、プログラム命令が発行される次のプログラムスレッドを選択する、請求項１５に記載の方法。
【請求項１７】
前記選択する工程が、現在選択されているそれらのプログラムスレッドと組み合わせて、発行可能なプログラム命令を発行するために必要な発行サイクルの、全発行サイクルに対する比率が、１以上になるように、プログラム命令が発行される次のプログラムスレッドを選択する、請求項１５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理システムの分野に関する。より詳細には、本発明は、マルチスレッド処理システム内での実行のための、プログラムスレッドの選択に関する。
【背景技術】
【０００２】
粗粒度マルチスレッディングおよび／または細粒度マルチスレッディングを利用する処理システムが提供されることは既知である。粗粒度マルチスレッディングでは、種々のプログラムスレッドを、種々の時間でアクティブとするように選択することができる。細粒度マルチスレッディングでは、種々のプログラムスレッドからのプログラム命令は、互いにインターリーブされて、実行される絶え間なく続くプログラム命令として、実行機構に供給される。実行のためのプログラムスレッドは、細粒度マルチスレッディングで同時にインターリーブ可能なプログラムスレッドよりも多く存在する場合が多い。したがって、所定の時間に、いずれのプログラムスレッドをアクティブとするかに関しての選択が行なわれる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
単純な選択機構では、実行のために、種々のプログラムスレッドを、粗粒度レベルで順番に選択することができる。この手法に関する問題は、現在アクティブなプログラムスレッドからのプログラム命令がインターリーブされる場合、各プログラムスレッドが、各サイクルで、実行のためのプログラム命令を発行することができない場合があることである。例えば、プログラムスレッド内でのプログラム命令間のデータ依存性は、プログラム命令が、発行可能となる前に、先行のプログラム命令の完了を待機してストールすることを要求する場合がある。現在アクティブである異なるプログラムスレッドが、別のプログラムスレッドがストールしているサイクルを使用することができる場合がある可能性がある。しかしながら、同時にアクティブである多数のプログラムスレッドが、全て、著しい量のストールを被り、したがって、アクティブなスレッドが各サイクルでプログラム命令を発行することが不可能であるため、データ処理システムのリソースが非効率的に使用され得る可能性もある。
【課題を解決するための手段】
【０００４】
一態様によれば、本発明は、
プログラム命令を実行するように構成される実行回路機構と、
この実行回路機構に結合され、複数個のプログラムスレッドの中からプログラム命令を選択して、実行回路機構に発行されるプログラム命令のシーケンスを形成するように構成される、発行制御回路機構であって、この発行制御回路機構は、複数個のプログラムスレッドの種々のプログラムスレッドからのプログラム命令が、そのシーケンス内にインターリーブされるように、プログラム命令を選択するように構成される、発行制御回路機構と、
発行制御回路機構に結合され、複数個のパフォーマンス値を測定するように構成され、これら複数個のパフォーマンス値のそれぞれが、複数個のスレッドのうちの１つの、パフォーマンスパラメーターを示す、スレッドパフォーマンス監視回路機構と、
を含む、データ処理のための装置であって、
この発行制御回路機構が、複数個のパフォーマンス値に基づいて、複数個のプログラムスレッドのうちのいずれかから、実行回路機構に発行されるべきプログラム命令を選択するように構成される、装置を提供する。
【０００５】
本技術は、上記の問題を認識し、複数個のパフォーマンス値を測定する働きをするスレッドパフォーマンス監視回路機構を提供するが、これらのパフォーマンスのそれぞれは、複数個のスレッドのうちの１つの、パフォーマンスパラメーターを示す。いずれのプログラムスレッドをアクティブとするかを選択する働きをする発行制御回路機構は、次にこれらのパフォーマンス値を使用して、実行回路機構を利用することができる効率性が改善され得る方法で、いずれのスレッドをアクティブとするべきかを選択することができる。
【０００６】
パフォーマンス監視回路機構の値は、多種多様なパフォーマンスパラメーターを監視し得ることが理解されよう。しかしながら、一部の実施形態では、パフォーマンス値は、プログラムスレッドのそれぞれに関して、そのスレッドのプログラム命令が発行のために利用可能であったサイクルの比率を示す。ストールを被ることが稀なプログラムスレッドは、高比率のサイクルが、そのプログラムスレッドからのプログラム命令が発行のために利用可能であったサイクルであることを示す、パフォーマンス値を有することになる。反対に、顕著なデータ依存性ハザードおよび／または分岐予測ミスを被るプログラムスレッドは、プログラムスレッドがプログラム命令を発行することが可能なサイクルの比率が、比較的低いことを示す、パフォーマンス値を有することになる。
【０００７】
そのようなパフォーマンス値の関連の中で、発行制御回路機構は、プログラム命令が発行されるべき次のプログラムスレッドを、そのプログラムスレッドが、同時にアクティブとなる１つ以上のプログラムスレッドを補完するように、選択することができる。具体的には、アクティブなプログラムスレッドが一体となって組み合わされることにより、それらがプログラム命令を発行することが可能となるサイクルの比率が、それらの間でほぼ完全な１となることを、それらのパフォーマンス値が示す場合には、効率的である。それゆえ、プログラム命令が発行のために利用可能なサイクルの比率が一体となって、実質的に完全な１となるように、高比率のサイクル上でのプログラム命令利用可能性を示すパフォーマンス値を有するプログラムスレッドは、低比率のサイクル上でプログラム命令が利用可能であることを示すパフォーマンス値を有するプログラムスレッドと適合することができる（すなわち、それらは一体となって、実質的に全てのサイクル上で、プログラム命令を発行することができる）。
【０００８】
プログラムスレッドの測定されたパフォーマンス特性を適合させることにより、非効率的に実行リソースを過少利用するプログラムスレッドが組み合わされる状況、ならびに実行リソースに関して互いに非効率的に競合するプログラムスレッドが組み合わされる状況を回避することが可能になる。適用可能な別の選択基準は、予測され使用される発行サイクルの組み合わされた比率が、完全な１以上になることである。
【０００９】
プログラムスレッドが、いずれのタイトルでもプログラム命令を発行することが不可能である様々な理由が存在し得る。具体的なそのような状況としては、命令間のオペランド依存性、およびスレッド内の発行される次の命令が、例えば分岐予測ミスの結果として、未だにメモリから読み出されていないことが挙げられる。特定のプログラムスレッドが、所定のサイクルで、次の命令を発行することが不可能である他の理由も存在し得る。
【００１０】
スレッドパフォーマンス監視回路機構は、アクティブなプログラムスレッドのそれぞれに関連するカウンタを含み得、このカウンタは、各サイクルで、対応するスレッドが発行のために利用可能なプログラム命令を有するか否かに基づいて、カウント値を累算するように構成される。累算カウント値は、発行のために命令が利用可能であるサイクル、または反対に、発行のために命令が利用不可能であるサイクルのいずれかをカウントすることが可能である。これらのカウントの双方を使用して、そのプログラムスレッドが利用することが可能であった、利用可能なサイクルの比率を示すことができる。この測定パフォーマンスを使用して、そのプログラムスレッドが次に選択される際の、そのプログラムスレッドの挙動が予測され、したがって、補完的処理要求を有する組み合わせでの実行のためのプログラムスレッドを選択するために、発行制御回路機構によって使用することができる。
【００１１】
このカウンタは、既定の累算期間にわたってカウント値を累算し、その後カウント値をリセットして、累算を再開するように構成することができる。このことは、アクティブなプログラムスレッドに関するパフォーマンス値が判定される測定期間を、効率的に形成する。この既定の累算期間は、ユーザー設定可能パラメーターにすることができ、それにより、パフォーマンス監視回路機構を、実行されているプログラムスレッドのタイプに同調させることができる。
【００１２】
特定のプログラムスレッドが、そのパフォーマンス特性が他のプログラムスレッドと不適合であることにより、決して実行のために選択されない状況を回避するため、一部の実施形態では、発行制御回路機構は、パフォーマンス値とは無関係に、発行制御回路機構によって作成された既定のスレッド選択数よりも多くプログラム命令が選択されていないプログラムスレッドから、プログラム命令を発行のために選択するように構成することができる。それゆえ、パフォーマンス値の使用は、過度に長期間、非アクティブであったプログラムスレッドの場合には、無効化される。
【００１３】
本技術は、インオーダーの実行環境に関して特に有用であるが、これは、インオーダーの実行環境は、典型的には、実行のためにアウトオブオーダーでプログラム命令を選択することが可能な柔軟性が欠如しているため、プログラムスレッドのストールを起こす傾向がより強いためである。
【００１４】
アクティブなプログラムスレッドに関するプログラム命令を、命令キュー内に便宜的に保持することにより、実行可能命令のプールを形成することができる。
【００１５】
発行制御回路機構は、スレッド切り替えイベントが発生すると、アクティブとするべき次のプログラムスレッドの選択を実行する（同様に、現在アクティブなスレッドを実行からフラッシュする）ことができる。スレッド切り替えイベントは、キャッシュメモリ内でのミス、タイマー誘因イベント、変換索引バッファ内でのミス、外部割込み、またはスレッド自体が別のスレッドに実行を譲渡するべきであることを指示する命令を実行することのうちの１つ以上を含み得る。
【００１６】
発行制御回路機構は、単一発行動作または複数発行動作に対応する実行環境内で使用することができる。
【００１７】
発行制御回路機構は、多数のプログラムスレッドをインターリーブすることができるが、比較的少量の追加的オーバーヘッドを有しながらも、実行リソースの活用を顕著に改善する能力を有する細粒度インターリーブは、２つのプログラムスレッドが、発行制御回路機構によってインターリーブされる場合に達成することができる。
【００１８】
上記は、好ましい実施形態を説明しており、この好ましい実施形態では、パフォーマンス値は、プログラムスレッドが発行のためのプログラム命令を提供することができる、サイクルの比率を示すことが理解されよう。パフォーマンス監視回路機構によって測定されるパフォーマンス値は、種々の形態をとることが可能である。演算パイプライン、ベクトル処理パイプライン、読み込み／格納パイプラインなどのような、種々のタイプの複数実行パイプラインに対応する処理環境では、測定されているパフォーマンス値は、これらの種々のパイプラインを利用する、所定のプログラムスレッド内のプログラム命令の比率を示すことが可能である。この方法で、プログラムスレッドを、それらが補完的なパイプライン使用のパターンを有した場合に、共に使用するために選択することが可能であり、例えば演算パイプラインを多用したプログラムスレッドを、読み込み／格納パイプラインを多用したプログラムスレッドと同時にアクティブとするように選択することにより、その２つのスレッドは、実行機構内での同じパイプラインの使用に関して競合することがない。パフォーマンス値の更なる例もまた、可能である。
【００１９】
別の態様によれば、本発明は、
プログラム命令を実行するための実行手段と、
複数個のプログラムスレッドの中からプログラム命令を選択して、実行手段に発行されるプログラム命令のシーケンスを形成するための、実行手段に結合された発行制御手段であって、この発行制御手段は、複数個のプログラムスレッドの種々のプログラムスレッドからのプログラム命令が、そのシーケンス内にインターリーブされるように、プログラム命令を選択する、発行制御手段と、
複数個のパフォーマンス値を測定するための、発行制御手段に結合されたスレッドパフォーマンス監視手段であって、これら複数個のパフォーマンス値のそれぞれが、複数個のスレッドのうちの１つの、パフォーマンスパラメーターを示す、スレッドパフォーマンス監視手段と、
を含む、データ処理のための装置であって、
この発行制御手段が、複数個のパフォーマンス値に基づいて、複数個のプログラムスレッドのうちのいずれかから、実行手段に発行されるべきプログラム命令を選択する、装置を提供する。
【００２０】
更なる態様によれば、本発明は、
発行されるプログラム命令のシーケンスを形成するために、複数個のプログラムスレッドの中からプログラム命令を選択する工程であって、この選択する工程は、複数個のプログラムスレッドの種々のプログラムスレッドからのプログラム命令が、そのシーケンス内にインターリーブされるように、プログラム命令を選択するように作用する、工程と、
発行されるプログラム命令を実行する工程と、
複数個のパフォーマンス値を測定する工程であって、これら複数個のパフォーマンス値のそれぞれが、複数個のスレッドのうちの１つの、パフォーマンスパラメーターを示す、工程と、
を含む、データ処理のための方法であって、
選択する工程が、複数個のパフォーマンス値に基づいて、複数個のプログラムスレッドのうちのいずれかから、実行手段に発行されるべきプログラム命令を選択する、方法を提供する。
【００２１】
本発明の、上記の目的、特徴、および有利点、ならびに他の目的、特徴、および有利点は、添付の図面と関連して理解されるべき、以下の例示的な実施形態の詳細な説明から、明らかとなるであろう。
【図面の簡単な説明】
【００２２】
【図１】粗粒度マルチスレッディングおよび細粒度マルチスレッディングを使用する、データ処理のための装置を概略的に示す図である。
【図２】スレッド選択を制御するための、発行制御回路機構、パフォーマンス監視回路機構、および発行キューを概略的に示す図である。
【図３】パフォーマンス値の収集を概略的に示す流れ図である。
【図４】スレッド選択を概略的に示す流れ図である。
【発明を実施するための形態】
【００２３】
図１は、メモリ６に結合されたプロセッサコア４を含む、データ処理のための装置を概略的に示す。メモリ６は、操作されるオペランドデータ８、および複数のプログラムスレッドを形成するプログラム命令１０を格納する。これらのプログラムスレッドのそれぞれは、プログラム命令のシーケンスを含む。実行されるプログラム命令１０が複数個のプログラムスレッドに分割され得る、このタイプの配列は、本技術分野のものと類似する。本技術の複数スレッディングを利用して、プロセッサ４が、プログラマーの視点からは、対応するプログラムスレッドをそれぞれが個別に実行する複数プロセッサとして表れることを可能にし得る。プログラムスレッドがもはやアクティブではない場合、そのデータをプロセッサ４からフラッシュすることができ（例えば、レジスタの内容、プログラムカウンタ値、ポインタ、および他の状態データ）、対象のプログラムスレッドが再開される際に、この状態データがプロセッサ４に復元され、実行は、プログラマーの視点からは、その実行が継続的であり、そのプログラムスレッドがプロセッサ４を占用していたかのように見える方法で、継続される。
【００２４】
プロセッサ４は、実行回路機構１２を含み、この実行回路機構１２は、この実施例では、演算データ経路１４、パイプライン回路機構１６、および命令デコーダ１８などの要素を含む。この回路機構１２の表示は定型的なものであり、実際には、実行回路機構１２は、多種多様な形態をとることが可能であり、例えば、演算パイプライン、読み込み／格納パイプライン、単一命令多重データパイプラインなどのような、それぞれが特定の形態のプログラム命令に合わせて調整された、複数の実行パイプラインを含むことが理解されよう。プロセッサコア４は、メモリ６からのデータ値を格納することができるキャッシュメモリ２０を含む。プログラムスレッド切り替えイベントが生じ得る１つの理由は、このキャッシュメモリ２０内でのキャッシュミスによるものである。そのようなキャッシュミスは、典型的には、メモリ８への長い待ち時間のメモリ読み出しが必要となり、したがって、このキャッシュミスを解決し、必要なデータがキャッシュ２０内に読み出される間、異なるプログラムスレッドの実行に切り替えることがより効率的となる。
【００２５】
プロセッサ４は、メモリ６からプログラム命令を先取りし、それらを発行キュー２４に供給するための、先取り回路機構２２を含み、この発行キュー２４で、それらのプログラム命令は、発行可能プログラム命令のプールを形成する。先取り回路機構２２は、アクティブであり、かつプログラム命令が読み出されるべき２つの異なるプログラムスレッドのプログラム命令をそれぞれ指定する、２つのプログラムカウンタ値を利用することができる。分岐予測回路機構２６を使用して、既知の技術により、読み出された命令内での条件分岐を予測することができる。そのような分岐予測が正しいことは保証されず、したがって、分岐予測ミスは、実行回路機構１２が実行のためのプログラム命令を受理することが可能な全ての処理サイクルで、現在アクティブなプログラムスレッドからのプログラム命令が、発行キュー２４からの発行に利用可能となり得ない、１つの理由である。
【００２６】
図１には、発行制御回路機構２８およびスレッドパフォーマンス監視回路機構３０もまた示される。発行制御回路機構２８は、発行キュー２４からのいずれのプログラム命令を、各プログラムサイクルで、実行回路機構１２に発行するかを制御する。発行制御回路機構２８は、それゆえ、現在アクティブなプログラムスレッド間で、実行回路機構に発行されるプログラム命令をインターリーブすることによって、細粒度マルチスレッディングを実行することができる。いずれの時間においても、アクティブである複数個のプログラムスレッド、典型的には２つのプログラムスレッドが存在する。発行制御回路機構２８はまた、所定の時間にいずれのプログラムスレッドをアクティブとするべきかを選択することにも関与する。非アクティブなプログラムスレッドは、そのコンテキストデータ（例えば、レジスタの内容、ポインタなど）を、非使用時に、プロセッサ４内の特殊目的メモリに保存させる。この状態データは、そのプログラムスレッドが発行制御回路機構２８によって選択され、アクティブとなる際に、急速に復元することができる。
【００２７】
発行制御回路機構２８は、任意の所定の時間に、いずれのプログラムスレッドを選択してアクティブとするべきかを判定する際に、スレッドパフォーマンス監視回路機構３０によって測定されたパフォーマンス値に応答する。発行制御回路機構２８が、現在アクティブなスレッドをフラッシュし（退去させ）、アクティブとなる新たなプログラムスレッドを選択することを引き起こす、スレッド切り替えイベントは、様々な形態をとる可能性がある。前述のように、これらの形態のうちの１つは、キャッシュ２０内でのキャッシュミスの場合がある。スレッド切り替えイベントの別の形態は、ウォッチドッグタイマーに由来する誘因などの、タイマー誘因イベントの場合がある。別の形態のスレッド切り替えイベントは、プログラムスレッド内での、そのプログラムスレッドが自ら退去するべきであることを指定するプログラム命令の実行、すなわち、別のスレッドへの譲渡イベントである場合がある。更なるスレッド切り替えイベントとしては、変換索引バッファ内でのミス、および外部割込みが挙げられる。
【００２８】
スレッドパフォーマンス監視回路機構３０は、現在アクティブなプログラムスレッドの、１つ以上のパフォーマンスパラメーターを監視する。これらの測定パフォーマンスパラメーターを使用して、いずれのプログラムスレッドが、共にアクティブとなるように選択された場合に、互いに補完することになるかを予測することができる。発行制御回路機構２８は、それゆえ、対象のプログラムスレッドが最後に実行された際のパフォーマンスパラメーターを示す、これらの測定パフォーマンス値に依存して、アクティブとされるべき次のプログラムスレッドを選択するように構成される。測定することができるパフォーマンスパラメーターの１つの形態は、所定のプログラムスレッドが、発行するために利用可能なプログラム命令を提供することが可能であった、サイクルの比率を示すものであり、例えば、プログラム命令が全てのサイクルで発行のために利用可能であることを妨げる、データインターロック、分岐予測ミスを、プログラムスレッドが被る可能性である。
【００２９】
パフォーマンス値およびパフォーマンスパラメーターの他の形態もまた、可能である。これらのパフォーマンス値およびパフォーマンスパラメーターは、個々のプログラムスレッド、およびそのプログラムスレッドの特性に関する。発行制御回路機構２８は、プログラムスレッドの実際の実行中にリアルタイムで測定された、これらの特性を利用して、実行回路機構１２をより効率的に活用するために、アクティブとなるように選択される次のプログラムスレッドを判定する。
【００３０】
図２は、発行キュー２４、発行制御回路機構２８、およびスレッドパフォーマンス監視回路機構３０を概略的に示す。発行キュー3４は、先取りユニット２２からプログラム命令を受け取り、実行回路機構１２にプログラム命令を供給する。実行回路機構１２への命令の供給は、プログラム命令の発行である。この実施例では、発行キュー２４は、現在アクティブな２つのスレッドＴＡ、ＴＢからのプログラム命令の発行をインターリーブすることにより、細粒度マルチスレディング（ＦＧNＴ）を達成することができる。現在アクティブなスレッドＴＡ、ＴＢのいずれかに生じるデータインターロックを示す信号が、発行キュー２４に供給されることにより、個々のプログラムスレッドは、そのプログラムスレッド内でのデータハザードが生じる場合には、ストールすることができる。ストールしていないプログラムスレッドは、望ましくは、他方のプログラムスレッドがストールしているサイクルを利用して、プログラム命令の発行を継続し、それゆえ、実行回路機構１２を効率的に活用することが可能であるべきである。
【００３１】
発行キュー２４が実行回路機構１２にプログラム命令を発行することができる各サイクルで、信号ＴＡ  ＡＶおよび信号ＴＢ  ＡＶが生成され、パフォーマンス監視回路機構３０内の各カウンタ３２、３４に供給されて、それぞれ、スレッドＡが、発行に利用可能な命令を、そのサイクルで有したか否か、およびスレッドＢが、発行に利用可能な命令を、その処理サイクルで有したか否かを示すことができる。既定の累算期間にわたる、これらのカウンタ３２、３４内の累算値は、それゆえ、対象のプログラムスレッドが、発行のために利用可能なプログラム命令を提供することが可能であった、サイクルの比率を示す、パフォーマンスパラメーターを提供することになる。
【００３２】
また、パフォーマンス監視回路機構内には、サイクルカウンタ３６および累算期間レジスタ３８も存在する。累算期間レジスタ３８は、カウンタ３２、３４がそれらの値を累算する時間枠であって、またそれゆえパフォーマンスパラメーターが測定される時間枠を規定する、ユーザー設定可能な累算期間値を格納する。コンパレータ４０は、累算期間レジスタ３８の内容を、サイクルカウンタ３６と比較して、これらが等しい場合、カウンタ３２、３４をリセットして、これらをゼロにするためのリセット信号、およびカウンタ３２、３４から、累算カウント値の一部分を、パフォーマンス値レジスタ４２のうちの対応する１つへとコピーするためのコピー信号を発行する。
【００３３】
全累算カウントを、パフォーマンス値として格納することができる可能性があるが、実際には、このことは、過度に高い感度限界を提供し、このデータを格納するオーバーヘッドは、正当化されない。それゆえ、累算値の最上位ビット部分を、パフォーマンス値として格納することによって、対象のスレッドのパフォーマンスパラメーターに関する十分な情報を獲得することができる。最上位ビット部分は、累算期間レジスタ３８内に格納された、現在設定されている累算期間に基づいて選択される幅を有し得る。累算期間が短い場合には、異なるプログラムスレッドのパフォーマンスに関するパフォーマンスパラメーター情報が捕捉されることを確実に区別するために、より多くの最上位ビット部分を抽出する必要がある。マルチプレクサー４４は、カウンタ３２、３４からの値を、適切なパフォーマンス値レジスタ４２内に導く働きをする。この実施例では、８つのプログラムスレッドが対応される。任意の所定の時間にアクティブであるプログラムスレッドＴＡ、ＴＢは、これら８つのプログラムスレッドのうちのいずれかであり得る。したがって、パフォーマンス値は、コピー信号がコンパレータ４０によって生成されると、マルチプレクサー４４によって導かれることにより、パフォーマンス値レジスタ４２のうちの適切な１つ内に格納される。パフォーマンス値レジスタ４２内に格納されたパフォーマンス値は、それゆえ、対象のプログラムスレッドがアクティブであった最後の機会にパフォーマンス監視回路機構３０によって測定されたパフォーマンス値を表す。
【００３４】
発行制御回路機構２８は、パフォーマンスレジスタ４２からのパフォーマンス値と、前述のようなスレッド切り替えイベントを示す信号とを受け取る、次スレッド選択回路機構４６を含む。非アクティブスレッドレジスタ４８は、現在非アクティブなスレッドのスレッド識別子を、それらの最遅活動時間の順で格納する。現在アクティブなスレッドは、それらのスレッド識別子を、アクティブスレッドレジスタ５０、５２内に格納させる。非アクティブスレッドレジスタ４８はまた、対象の非アクティブなスレッドに関する状態データが配置された、プロセッサ４の特殊目的オンチップメモリ内の位置を示す、ポインタ値も格納することができる。
【００３５】
現在アクティブなスレッドがフラッシュされ、非アクティブにされると、そのスレッドは、非アクティブスレッドレジスタ４８内の、リスト済み非アクティブスレッドの末尾に加えられる。この時点で、次スレッド選択回路機構４６は、アクティブを維持するプログラムスレッドのパフォーマンス値を検討し、そのパフォーマンス値から示されるような、そのアクティブなプログラムスレッドによって使用されていない、プログラムの発行のために利用可能なサイクルの比率を判定する。それゆえ、アクティブを維持するプログラムスレッドが、０．７５の比率を示すパフォーマンス値を有する場合には、このアクティブなプログラムスレッドは、０．２５のパフォーマンスを示すパフォーマンス値を有したプログラムスレッドと同時のアクティブに、良好に適合するが、これは、それらのプログラムスレッドが一体に組み合わされて、完全な１の使用の比率を示すためである。次スレッド選択回路機構４６は、非アクティブスレッドレジスタ４８内に識別されたスレッドに関連するパフォーマンス値を順番に検索し、それらのうちのいずれが、アクティブを維持しているプログラムスレッドと同時のアクティブに適していることを示すパフォーマンス値を有するかを判定するように構成される。この適合性は、使用される発行サイクルの比率を示すパフォーマンス値の組み合わせが、完全な１を超過する最小値（または別法として、完全な１以上の値）であるとして、判断され得る。現在非アクティブな２つのプログラムスレッドのパフォーマンス値が、アクティブを維持しているプログラムスレッドのパフォーマンス値と、等しく良好に適合する場合には、最も長く非アクティブであった、非アクティブなプログラムスレッドを、次のプログラムスレッドとして選択することができる。任意の所定の時間に、いずれのプログラムスレッドをアクティブとするべきかを選択する際の、この発行制御回路機構２８の動作は、粗粒度マルチスレッディング（ＣＧＭＴ）を実行する。
【００３６】
次スレッド選択回路機構４６は、所定のプログラムスレッドが、恒久的に非アクティブを維持することがないようにするための機構を更に含む。したがって、発行制御回路機構２８は、パフォーマンス値レジスタ４２内のパフォーマンス値とは独立して、プログラムスレッドが、発行制御回路機構２８によって作成された既定のスレッド選択数よりも多く選択されていない場合には、アクティブとされる次のスレッドとして、そのプログラムスレッドを選択する。このことにより、プログラムスレッドは、いかに他のプログラムスレッドと不適合であろうとも、少なくともある程度の実行時間を獲得することが、効率的に保証される。
【００３７】
この例示的な実施形態での命令キュー２４は、プログラムスレッドのそれぞれの中からのインオーダーな命令発行を実行する。アウトオブオーダーな命令発行を実行する他の実施形態もまた、それが更なる複雑性に対応するために適切である場合には、可能である。命令キュー２４は、各サイクル上で、単一のプログラム命令を発行することができ、または他の実施形態では、各サイクル上で、複数のプログラム命令を発行することができる。
【００３８】
図３は、パフォーマンス値を収集する際の、パフォーマンス監視回路機構３０の動作を概略的に示す流れ図である。工程５４では、処理は、各処理サイクルが開始されるまで待機する。次に工程５６は、現在の累算期間が終了しているか否かを判定する。現在の累算期間が終了している場合には、工程５８が、カウンタ３２、３４からの累算値の最上位ビット部分を、パフォーマンス値レジスタ４２のうちの適切な１つへとコピーする。次に工程６０は、カウンタ３２、３４をリセットし、処理は工程５４に戻る。
【００３９】
工程５６での判定が、累算期間が終了していないという場合には、処理は工程６２に進み、この工程６２で、現在アクティブなスレッドＴＡ、ＴＢのそれぞれに関する累算値は、そのプログラムスレッドが、このサイクル中での発行のために利用可能な命令を有する場合には、１増加される。プログラムスレッドは、データハザード、または分岐予測ミスが発生することによって、そのプログラムスレッドに関するプログラム命令が依然としてメモリ６から読み出し中であり、未だ命令キュー２４に到達していないなどの理由により、発行のために利用可能な命令を有さない場合がある。
【００４０】
図４は、スレッド切り替えイベントに応答して、発行制御回路機構２８によって実行されるようなスレッド選択を、概略的に示す流れ図である。工程６４では、処理は、スレッド切り替えイベント発生するまで待機する。次に工程６６は、退去するスレッド、およびその関連する状態データをフラッシュする。工程６８は、いずれかの現在非アクティブなスレッドが、スレッド選択命令の最大許容数を超えて選択されていないかを判定する。そのようなスレッドが識別された場合には、工程７０は、実行されるべき次のスレッドとして、そのスレッドを強制的に選択させ、処理は工程６４に戻る。
【００４１】
工程６８での判定が、スレッド選択の最大許容数を超えて選択されていない現在非アクティブなプログラムスレッドが存在しないというものである場合には、処理は工程７２に進み、この工程７２で、非アクティブを維持するべきスレッドのパフォーマンス値の合計が読み取られる。アクティブを維持するべきスレッドが１つのみ存在する（すなわち、２つのプログラムスレッドをインターリーブするシステム）場合、この工程７２は、単に、アクティブを維持しているプログラムスレッドに関するパフォーマンス値の読み取りとすることができる。しかしながら、３つ以上のプログラムスレッドが、任意の所定の時間でアクティブであるように対応され、それゆえ複数のプログラムスレッドがアクティブを維持するべき場合には、工程７２は、それらのパフォーマンス値を合計することができる。
【００４２】
次に工程７４は、アクティブを維持しているプログラムスレッドの要求を所与として、次の選択スレッドのために利用可能となる、発行スロットの利用可能部分を算出する。次に工程７６は、完全な１を超過する、必要とされる発行スロットの最小の総合比率を作り出す、発行スロットの推定必要比率を有する新たなスレッドを、そのパフォーマンス値から識別する。これらの２つのスロットは、それらが予測通りに実行し、その一方で実行リソースに関して互いに不当に競合することがない場合には、実質的に、実行回路機構１２を完全に活用することになる。次に工程７８は、識別されたスレッドを選択し、処理は工程６４に戻る。
【符号の説明】
【００４３】
４  ・・・プロセッサ
１０・・・プログラム命令
１２・・・実行回路機構
１４・・・演算データ回路
２０・・・実行回路機構
【図１】
0006022173.tif 000002
【図２】
0006022173.tif 000003
【図３】
0006022173.tif 000004
【図４】
0006022173.tif 000005