(57)【特許請求の範囲】
【請求項１】
プロセッサで第１のスレッドの第１のスレッドデエンファシス命令を実行する工程と、
前記第１のスレッドデエンファシス命令の実行に応答して、前記第１のスレッドに関連する待ち状態のメモリトランザクションの数と第１の閾値との比較を行う工程と、
前記比較に基づき前記第１のスレッドに関連する待ち状態のメモリトランザクションの数が前記第１の閾値を超えている場合、前記第１のスレッドの優先順位ステータスをデエンファシスする工程と、
前記第１のスレッドの前記優先順位ステータスがデエンファシスされている間、前記第１のスレッドに関連する待ち状態のメモリトランザクションの数における変化の表示を受信する工程と、
前記表示に応答して前記第１のスレッドに関連する待ち状態のメモリトランザクションの数が前記第１の閾値以下となった場合、前記第１のスレッドの前記優先順位ステータスをデエンファシスされる前の状態に復元する工程と、
を備える方法。
【請求項２】
前記第１のスレッドの前記優先順位ステータスのデエンファシスに応答して、前記第１のスレッドの実行を一時停止する工程をさらに備える、請求項１に記載の方法。
【請求項３】
前記第１のスレッドの前記優先順位ステータスがデエンファシスされる間、前記プロセッサで第２のスレッドを実行する工程をさらに備える、請求項１に記載の方法。
【請求項４】
前記第１のスレッドの前記優先順位ステータスに基づいて、前記プロセッサでプロセッサリソースを指定する工程をさらに備える、請求項１に記載の方法。
【請求項５】
前記第１のスレッドの前記優先順位ステータスのデエンファシスに応答して、前記第１のスレッドの実行を一時停止する工程と、
前記第１のスレッドの前記優先順位ステータスの復元に応答して、前記第１のスレッドの実行を再開する工程と、
を備える、請求項１に記載の方法。
【請求項６】
前記第１のスレッドに関連する待ち状態のメモリトランザクションの数は、前記第１のスレッドに関連するキャッシュミスの数に基づく、請求項１に記載の方法。
【請求項７】
前記第１のスレッドに関連する待ち状態のメモリトランザクションの数は、前記第１のスレッドに関連するノンキャッシャブル・メモリ・トランザクションの数に基づく、請求項１に記載の方法。
【請求項８】
前記第１のスレッドに関連する待ち状態のメモリトランザクションの数は、第１のメモリ・トランザクション・タイプに関連し、前記第１のメモリ・トランザクション・タイプは、前記第１のスレッドデエンファシス命令に基づく、請求項１に記載の方法。
【請求項９】
前記第１の閾値は、前記第１のスレッドデエンファシス命令のオペランドに基づく、請求項１に記載の方法。
【請求項１０】
前記第１のスレッドデエンファシス命令は、無演算命令である、請求項１に記載の方法。
【請求項１１】
前記プロセッサで第２のスレッドの第２のスレッドデエンファシス命令を受信する工程と、
前記第２のスレッドデエンファシス命令の受信に応答して、前記第２のスレッドに関連する待ち状態のメモリトランザクションの数と第２の閾値との間の第１の関係に基づき、前記第２のスレッドの優先順位ステータスをデエンファシスする工程と、
をさらに備える、請求項１に記載の方法。
【請求項１２】
複数のスレッドの命令を実行するように構成された命令パイプラインと、
前記複数のスレッドのそれぞれの優先順位レベルに基づいて、前記命令パイプラインで前記複数のスレッドの命令の実行をスケジューリングするように構成されたスレッド・スケジューラ・モジュールと、第１のスレッドデエンファシス命令の実行に応答して、第１のスレッドに関連する待ち状態のメモリトランザクションの数と第１の閾値とを比較して前記第１のスレッドに関連する待ち状態のメモリトランザクションの数が前記第１の閾値を超えている場合、前記複数のスレッドの前記第１のスレッドの優先順位ステータスをデエンファシスするように構成された優先順位制御モジュールと、を含むスレッド制御モジュールと、
を備え、前記優先順位制御モジュールは、前記第１のスレッドの前記優先順位ステータスがデエンファシスされている間、前記第１のスレッドに関連する待ち状態のメモリトランザクションの数における変化の表示を受信し、前記表示に応答して前記第１のスレッドに関連する待ち状態のメモリトランザクションの数が前記第１の閾値以下となった場合、前記第１のスレッドの前記優先順位ステータスをデエンファシスされる前の状態に復元するデバイス。
【請求項１３】
前記スレッド・スケジューラ・モジュールは、前記第１のスレッドの前記優先順位ステータスのデエンファシスに応答して、前記第１のスレッドの実行を一時停止するように構成される、請求項１２に記載のデバイス。
【請求項１４】
前記スレッド・スケジューラ・モジュールは、前記複数のスレッドのそれぞれの優先順位ステータスに基づいて、前記命令パイプラインのリソースを割り当てるように構成される、請求項１２に記載のデバイス。
【請求項１５】
前記命令パイプラインにおける第２の命令の実行に応答して、前記複数のスレッドの第２のスレッドの前記優先順位レベルを第１の状態に設定するように構成される優先順位制御モジュールであって、前記第２のスレッドの前記優先順位レベルは、前記第２のスレッドに関連する待ち状態のメモリトランザクションの数と第２の閾値との間の第１の関係に基づき、前記第１の状態に設定される優先順位制御モジュールを備える、請求項１２に記載のデバイス。
【請求項１６】
前記第１の閾値は、前記第１のスレッドデエンファシス命令のオペランドに基づく、請求項１２に記載のデバイス。
【請求項１７】
前記第１のスレッドに関連する待ち状態のメモリトランザクションの数は、前記第１のスレッドに関連するキャッシュミスの数に基づく、請求項１２に記載のデバイス。
【請求項１８】
前記第１のスレッドに関連する待ち状態のメモリトランザクションの数は、前記第１のスレッドに関連するノンキャッシャブル・メモリ・トランザクションの数に基づく、請求項１２に記載のデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、マルチスレッド型プロセッサに関し、より詳細には、マルチスレッド型プロセッサ用のスレッド管理に関する。
【背景技術】
【０００２】
キャッシュミスまたは他のメモリトランザクションによる命令パイプラインにおける機能停止は、プロセッサの効率を低下させる可能性がある。１つのスレッドによる命令パイプラインにおける機能停止が他のスレッドの実行を遅延させる可能性があるため、この問題は、マルチスレッド型プロセッサにおいて悪化する。複数のプロセッサが、プログラムフローとは無関係に、機能停止に関して命令パイプラインを監視し、機能停止に応答して、機能停止の原因となったスレッド以外のスレッドに優先順位を付与する。しかし、命令パイプラインにおける機能停止に関する監視は通常困難であり、プロセッサにおいてさらなるオーバヘッドが必要とされる。したがって、マルチスレッド型プロセッサにおいてプロセッサリソースをスレッドに割り当てるための改良した技術に対する需要がある。
【発明の概要】
【課題を解決するための手段】
【０００３】
プロセッサにおけるスレッドの実行のスケジューリングのための技術が開示される。この技術は、スレッドに関連するキャッシュミスなどの待ち状態のメモリトランザクションの数が閾値以下となるまで、スレッドをデエンファシスするスレッドのスレッドデエンファシス命令を実行することを含む。スレッドがデエンファシスされる間、プロセッサにおけるより高い優先順位を有する他のスレッドが実行されたり、システムリソースを指定されたりする。したがって、プロセッサにおける機能停止の確率が減少する。
【０００４】
一実施形態において、スレッドデエンファシス命令は、第１のスレッドに関連する待ち状態のメモリトランザクションの数が閾値を超える場合には、第１のスレッドの優先順位ステータスを変更することによって、第１のスレッドをデエンファシスするプログラムフローにおける命令である。一旦、待ち状態のメモリトランザクションの数が閾値以下になると、第１のスレッドの優先順位ステータスは、復元される。閾値は、スレッドデエンファシス命令のオペランドに基づいてもよく、または所定の値であってもよい。特定の実施形態において、閾値は、ゼロであり、したがって、スレッドデエンファシス命令は、スレッドに関連するすべての待ち状態のメモリトランザクションが決定されるまで、スレッドをデエンファシスする。
【０００５】
たとえば、スレッドは、特定のメモリ・トランザクション・タイプに関してデエンファシスされる。スレッドデエンファシス命令は、スレッドに関連するキャッシュミスの数に基づき、スレッドをデエンファシスすることができる。別のスレッドデエンファシス命令は、スレッドに関連するノンキャッシャブル・メモリ・アクセスの数（すなわち、ノンキャッシャブルとして識別されるアドレスへのメモリアクセスの数）に基づいて、スレッドをデエンファシスすることができる。別の実施形態は、メモリトランザクションの数以外の特性に基づいて、スレッドをデエンファシスしてもよい。さらに、別の実施形態は、スレッドに関連する「実行準備」ビットの変更などのその優先順位ステータス以外のスレッドの特性を変更することによって、スレッドをデエンファシスしてもよい。
【０００６】
デエンファシスされたスレッドには、プロセッサリソースに関して、他のスレッドより低い優先順位が与えられる。たとえば、一度に１つのみのスレッドが命令パイプラインに指定されるように、プロセッサが粗粒度マルチスレッディングを採用する場合には、他のスレッドに対してもはやデエンファシスされなくなるまで、デエンファシスされたスレッドは、命令パイプラインにおいて実行されない。異なるスレッドに関連する命令が命令パイプラインの異なるステージで一度に実行可能なように、プロセッサが細粒度マルチスレッディングを採用する場合には、そのステージで待ち状態にあるより高い優先順位スレッドに関連する命令が実行されるまで、命令パイプラインの特定のステージでデエンファシスされたプログラムに関連する命令は、実行されない。さらに、デエンファシスされたスレッドは、命令パイプラインの複数のステージに関する他のスレッドより低い優先順位を有してもよいし、他のステージに関してその優先順位を維持してもよい。
【０００７】
デエンファシスされたスレッドはまた、他のプロッセッサリソースの割り当てに関して、より低い優先順位を与えられる。たとえば、デエンファシスされたスレッドは、キャッシュアクセス、格納待ち行列アクセス、終了バッファエントリ、命令フェッチなどに関してより低い優先順位を与えられる。さらに、スレッドは、複数のスレッドに対してデエンファシスされてもよいし、他のスレッドに対して優先順位を維持してもよい。
【図面の簡単な説明】
【０００８】
【図１】データ処理デバイスの特定の実施形態のブロック図である。
【図２】図１のプロセッサの特定の実施形態のブロック図である。
【図３】図２のスレッド優先順位モジュールの特定の実施形態のブロック図である。
【図４】スレッドのスケジューリングの方法の特定の実施形態を表す図である。
【図５】スレッドのスケジューリングの方法の別の特定の実施形態を表す図である。
【図６】スレッドのスケジューリングの実施例の方法の特定の実施形態を表す図である。
【発明を実施するための形態】
【０００９】
図１を参照すると、データ処理デバイス１００の特定の実施形態のブロック図が示されている。データ処理デバイス１００は、プロセッサ１０２と、メモリコントローラ１０４と、メモリ１０６とを含む。プロセッサ１０２およびメモリコントローラはそれぞれ、バス１０５に接続される。メモリ１０６は、メモリコントローラ１０４への双方向の接続を含む。
【００１０】
メモリコントローラ１０４は、バス１０５を介してメモリアクセス情報を受信し、その情報に基づいて、メモリ１０６にアクセスする。メモリ１０６は、プロセッサ１０２で実行するための命令をはじめとするソフトウェアプログラムおよびルーチンを格納することができる。メモリ１０６は、ＲＡＭメモリなどの揮発性メモリであってもよく、またはフラッシュメモリまたはハードウェアドライブなどの不揮発性メモリであってもよい。特定の実施形態において、メモリ１０６およびメモリコントローラ１０４は、プロセッサ１０２と同一の半導体基板上に集積される。別の特定の実施形態において、メモリ１０６は、プロセッサ１０２およびメモリコントローラ１０４とは別の半導体基板上に集積される。
【００１１】
プロセッサ１０２は、マイクロプロセッサ、マイクロコントローラ、ＡＳＩＣなどであってもよい。プロセッサ１０２は、複数のスレッドを実行するように構成されるマルチスレッド型プロセッサである。スレッドは、異なるソフトウェアプログラムまたはルーチンに関連してもよく、または１つのソフトウェアプログラムまたはルーチンの異なるタスクに関連してもよく、またはその組み合わせに関連してもよい。
【００１２】
図１に示された実施形態において、プロセッサ１０２は、命令キャッシュ１１０と、スレッド制御モジュール１１２と、命令パイプライン１１４と、データキャッシュ１１６とを含む。命令キャッシュ１１０は、命令パイプライン１１４およびスレッド制御モジュール１１２にアクセス可能である。命令パイプライン１１４は、スレッド制御モジュール１１２にアクセス可能である。さらに、データキャッシュ１１６は、命令パイプライン１１４にアクセス可能である。
【００１３】
命令キャッシュ１１０は、プロセッサ１０２で実行するための命令を示す命令データを格納する。キャッシュされた命令データは、メモリ１０６に格納されたソフトウェアプログラムデータの複製であってもよい。
【００１４】
命令パイプライン１１４は、メモリアクセス、算術演算などのタスクを行うための命令を実行する。たとえば、特定の命令に応答して、命令パイプライン１１４は、データを検索するためにデータキャッシュ１１６にアクセスすることができる。別の命令に応答して、命令パイプライン１１４は、メモリコントローラ１０４を介してメモリ１０６からデータを要求し、データキャッシュ１１６に要求されたデータを格納することができる。
【００１５】
スレッド制御モジュール１１２は、各スレッドに関する優先順位ステータスをはじめとする各スレッドに関するステータスを示すための状態情報を格納する。各スレッドに関する優先順位ステータスおよび他の属性に基づき、スレッド制御モジュール１１２は、たとえば命令パイプライン１１４におけるスレッドの実行の順序をスケジューリングすることによりプロセッサ１０２のリソースを割り当てる。スレッド制御モジュール１１２はまた、各スレッドに関連する待ち状態のメモリトランザクションの数を追跡する。
【００１６】
命令キャッシュ１１０は、明示スレッドデエンファシス命令１２０を含む。スレッドデエンファシス命令１２０の実行中に、命令パイプライン１１４は、第１のスレッドに関連する待ち状態のメモリトランザクションの数が閾値以下となるまで、第１のスレッドの優先順位がデエンファシスされたことをスレッド制御モジュール１１２に通知する。特定の実施形態において、スレッドデエンファシス命令１２０は、無演算命令の特殊な形態であり、スレッドに関連するメモリトランザクションが待ち状態でなくなるまで、スレッドがデエンファシスされる必要があることを示す。
【００１７】
命令パイプライン１１４におけるスレッドデエンファシス命令１２０の実行に応答して、スレッド制御モジュール１１２は、他のスレッドに対してスレッドをデエンファシスするために、第１のスレッドの優先順位ステータスを調整する。特定の実施形態において、これは、スレッドに関連する「実行準備」ビットを消去することによって行われる。このビットが消去される限り、スレッドは、実行のための低い優先順位が与えられる。ビットが消去される場合であっても、スレッド制御モジュールは、スレッドに関する他の優先順位情報を追跡することができ、その結果、実行準備ビットが設定されるとき、スレッドには適切な優先順位が与えられる。さらに、スレッド制御モジュール１１２は、命令パイプライン１１４を監視し、第１のスレッドに関連する待ち状態のメモリトランザクションの数を追跡する。一旦、スレッドデエンファシス命令１２０によって示される待ち状態のメモリトランザクションの数が決定されると、スレッド制御モジュール１１２は、第１のスレッドがもはやデエンファシスされないように、優先順位ステータスを設定する。
【００１８】
したがって、スレッドデエンファシス命令１２０は、そのスレッドに関連するメモリトランザクションの数が閾値以下になるまで特定のスレッドをデエンファシスするために用いられる。これは、プログラマまたはコンパイラが命令パイプライン１１４のリソースを効率的に割り当てることを可能にする。たとえば、スレッドデエンファシス命令１２０は、多数のキャッシュミスにおいて、生じる可能性がある一連の読み込み命令の後などのユーザが信じる命令が命令パイプライン１１４における機能停止を生じる後または前のスレッドのプログラムフローにおいて実装される。読み込み命令に関連するメモリトランザクションが判断されるまで、スレッドがデエンファシスされ、メモリトランザクションが判断される間、命令パイプライン１１４が他のスレッドに関連する命令を実行することを可能にする。
【００１９】
図２を参照すると、図１のプロセッサ１０２などのプロセッサに対応するプロセッサ２０２のブロック図が示されている。プロセッサ２０２は、命令キャッシュ２１０と、スレッド制御モジュール２１２と、命令パイプライン２１４と、データキャッシュ２１６とを含む。命令キャッシュ２１０は、バス２９６を介したスレッド制御モジュール２１２によって、および命令パイプライン２１４によってアクセス可能である。データキャッシュ２１６は、命令パイプライン２１４によってアクセス可能である。
【００２０】
命令キャッシュ２１０は、スレッドＡ命令２２１およびスレッドＢ命令２２２をはじめとするスレッドに関連する命令の集合を含む。スレッドＡ命令２２１は、スレッドＡに関連する待ち状態のメモリトランザクションが判断されるまで、スレッドＢに対してスレッドＡをデエンファシスするためのスレッドデエンファシス命令２２０を含む。
【００２１】
スレッド制御モジュール２１２は、スレッド優先順位モジュール２３５に接続されるスレッド・スケジューラ・モジュール２３０を含む。スレッド優先順位モジュール２３５は、スレッドに関するメモリトランザクションが完了した表示を受信するために、バス２９０に接続される入力を含む。スレッド・スケジューラ・モジュール２３０は、バス２９１、バス２９２、バス２９３、バス２９４、バス２９５およびバス２９６に接続される出力を含む。スレッド・スケジューラ・モジュール２３０は、命令パイプライン２１４のステージにおける命令の実行をスケジューリングするためのバス２９１〜２９６のそれぞれに制御情報を提供する。
【００２２】
スレッド優先順位モジュール２３５は、スレッドＡおよびスレッドＢをはじめとするプロセッサ２０２における各スレッドに関する優先順位状態情報を格納し、優先順位ステータス情報に基づくスレッド・スケジューラ・モジュール２３０に優先順位ステータス情報を提供する。優先順位ステータス情報に基づき、スレッド・スケジューラ・モジュール２３０は、命令パイプライン２１４のステージにおける命令の実行をスケジューリングするためのバス２９１〜２９６に制御情報を提供する。
【００２３】
命令パイプライン２１４は、命令フェッチステージ２４０と、復号化ステージ２４２と、ディスパッチステージ２４４と、読み込み／格納ユニット２４６と、実行ユニット２４８と、実行ユニット２４９とを含む。実行ユニット２４８および２４９は、読み込み／格納ユニット、浮動小数点演算ユニット、整数演算ユニットなどであってもよい。命令パイプライン２１４はまた、バッファ２５０〜２５４を含む。
【００２４】
命令フェッチステージ２４０は、命令キャッシュ２１０に接続される入力と出力とを含む。バッファ２５０は、命令フェッチステージ２４０の出力に接続される入力と、バス２９５に接続される入力と、出力とを含む。復号化ステージ２４２は、バッファ２５０の出力に接続される入力と、出力とを含む。バッファ２５１は、復号化ステージ２４０の出力に接続される入力と、バス２９４に接続される入力と、出力とを含む。ディスパッチステージ２４４は、バッファ２５１の出力に接続される入力と、３つの出力とを含む。
【００２５】
バッファ２５２は、ディスパッチステージ２４４の第１の出力に接続される入力と、バス２９２に接続される入力と、出力とを含む。読み込み／格納ユニット２４６は、バッファ２５１の出力に接続される入力と、バス２９０への接続と、データキャッシュ２１６への接続とを含む。
【００２６】
バッファ２５３は、ディスパッチステージ２４４の第２の出力に接続される入力と、バス２９３に接続される入力と、出力とを含む。実行ユニット２４８は、バッファ２５３の出力に接続される入力を含む。バッファ２５４は、ディスパッチステージ２４４の第３の出力に接続される入力と、バス２９１に接続される入力と、出力とを含む。実行ユニット２４９は、バッファ２５４の出力に接続される入力を含む。
【００２７】
命令フェッチステージ２４０は、命令キャッシュ２１０から命令データを取り出し、取り出された命令データをバッファ２５０に提供する。バス２９３を介して受信された制御情報に基づき、復号化部分２４２は、バッファ２５０から命令にアクセスする。
【００２８】
復号化ステージ２４２は、バッファ２５０でアクセスされた命令を復号化し、復号化された命令をバッファ２５１に提供する。バス２９２を介して受信された制御情報に基づき、ディスパッチステージは、バッファ２５１で復号化された命令にアクセスする。ディスパッチステージ２４４は、読み込み／格納ユニット２４６の実行ユニット、実行ユニット２４８および実行ユニット２４９のいずれかを決定し、決定に基づき復号化された命令をバッファ２５２〜２５４の１つに送信する。
【００２９】
バッファ２５２は、ディスパッチステージ２４４によって提供された復号化された命令を格納する。バス２９２を介して提供された制御情報に基づき、読み込み／格納ユニット２４６は、復号化された命令にアクセスする。バッファ２５２から受信された命令に基づき、読み込み／格納ユニット２４６は、読み込みを実行して、データキャッシュ２１６に演算を格納する。さらに、読み込み／格納ユニットは、読み込みを実行し、プロセッサ２０２の外部のメモリ上に演算を格納することができる。たとえば、データキャッシュ２１６におけるキャッシュミスの場合には、読み込み／格納ユニットは、外部メモリからデータキャッシュ２１６にキャッシュミスに関連するデータを読み込むことによって、キャッシュミスを判断する。さらに、読み込み／格納は、バス２９０を介して各スレッドに関する待ち状態のメモリトランザクションについての情報を提供する。たとえば、スレッドに関連するキャッシュミスが判断された後、読み込み／格納ユニット２４６は、スレッドに関連する待ち状態のキャッシュミスの数を１つだけ減少したことを示す情報をバス２９０を介して提供する。
【００３０】
バッファ２５３は、ディスパッチステージ２４４によって提供された復号化された命令を格納する。バス２９３を介して提供された制御情報に基づき、実行ユニット２４８は、復号化された命令にアクセスする。実行ユニット２４８は、バッファ２５３によって提供された命令を実行する。バッファ２５４は、ディスパッチステージ２４４によって提供された復号化された命令を格納する。バス２９１を介して提供された制御情報に基づき、実行ユニット２４９は、復号化された命令にアクセスする。実行ユニット２４９は、バッファ２５４でアクセスされた命令を実行する。
【００３１】
演算中、スレッド・スケジューラ・モジュール２３０は、スレッド優先順位モジュール２３５から優先順位情報を受信する。優先順位情報に基づき、スレッド・スケジューラ・モジュール２３０は、制御情報をバッファ２５０〜２５４のほか、命令キャッシュ２１０に提供し、命令パイプライン２１４の各ステージにおけるスレッド命令に関する実行の順序をはじめとするプロセッサリソースの割り当てを制御する。たとえば、受信された優先順位情報に基づき、スレッド・スケジューラ・モジュール２３０は、スレッドＡ命令２２１が復号化ステージ２４２でスレッドＢ命令２２２より優先順位を与えられるべきであることを決定してもよい。したがって、スレッド・スケジューラ・モジュール２３０は、バス２９５を介してバッファ２５０に制御情報を提供し、その結果、バッファ２５０に格納されたスレッドＢ命令が提供される前に、バッファ２５０に格納されたスレッドＡ命令が復号化ステージ２４２に提供される。したがって、命令キャッシュ２１０およびバッファ２５０〜２５４に適切な制御情報を提供することによって、スレッド・スケジューラ・モジュール２３０は、命令パイプライン２１４の各ステージにおけるスレッド命令の実行の順序を制御する。
【００３２】
スレッド・スケジューラ・モジュール２３０は、スレッド優先順位モジュール２３５に格納された優先順位情報に基づき、スレッド命令の実行の順序を決定する。スレッド優先順位情報は、読み込み／格納ユニット２４６におけるスレッドデエンファシス命令２２０の実行によって変更される。スレッドデエンファシス命令２２０の実行に応答して、読み込み／格納ユニット２４６は、スレッドに関連する待ち状態のメモリトランザクションの数が閾値未満となるまでスレッドＡがデエンファシスされる必要があることを示す情報をスレッド優先順位モジュール２３５に提供する。読み込み／格納ユニット２４６はまた、スレッドデエンファシス命令２２０のオペランドに基づき、閾値を設定するために情報を提供することができる。
【００３３】
それに応答して、スレッド優先順位モジュール２３５は、スレッドＡに関連する待ち状態のメモリトランザクションの数を決定し、その数が閾値を上回る場合には、スレッドＢに対してデエンファシスされるように、スレッドＡに関連する優先順位状態を変更する。
【００３４】
読み込み／格納ユニット２４６がスレッドＡに関連する待ち状態のメモリトランザクションを判断すると、バス２９０を介してスレッド優先順位モジュール２３５に通知する。それに応答して、スレッド優先順位モジュール２３５は、スレッドＡに関連する待ち状態のメモリトランザクションの数を調整し、メモリトランザクションの数が閾値未満であるときには、スレッドＡに関する優先順位状態を調整し、その結果、スレッドＢに対してもはやデエンファシスされないようにする。したがって、待ち状態のメモリトランザクションの数が閾値未満に動く場合には、スレッドＡの優先順位ステータスは、その前のステータスに自動的に復元される。
【００３５】
図３を参照すると、図２のスレッド優先順位モジュール２３５に対応するスレッド優先順位モジュール３３５の特定の実施形態のブロック図が示されている。スレッド優先順位モジュール３３５は、メモリトランザクション制御モジュール３０２と、メモリ・トランザクション・レジスタの集合３０４と、メモリ・トランザクション・カウンタの集合３０６と、優先順位ステータスレジスタの集合３０８と、優先順位決定モジュール３１０とを含む。メモリトランザクション制御モジュール３０２は、メモリ・トランザクション・レジスタの集合３０４およびメモリ・トランザクション・カウンタの集合３０６への双方向の接続を含む。メモリトランザクション制御モジュールはまた、読み込み／格納ユニット２４６（図２）からの入力と、出力とを含む。優先順位ステータスレジスタの集合３０８は、メモリトランザクション制御モジュール３０２の出力に接続される入力と、出力とを含む。優先順位決定モジュール３１０は、優先順位ステータスレジスタの集合３０８の出力に接続される入力と、スレッド・スケジューラ・モジュール２３０（図２）に接続される出力とを含む。
【００３６】
メモリトランザクション制御モジュール３０２は、読み込み／格納ユニット２４６から制御情報を受信し、その情報に基づき、メモリ・トランザクション・レジスタ３０４の集合３０４、メモリ・トランザクション・カウンタの集合３０６および優先順位ステータスレジスタの集合３０８に格納された値を適宜調整するように構成される。
【００３７】
メモリ・トランザクション・レジスタの集合３０４は、スレッドＡに関連するメモリトランザクション閾値を格納するためのレジスタ３２０と、スレッドＢに関連するメモリトランザクション閾値を格納するためのレジスタ３２１とを含む。レジスタ３２０および３２１に格納されるメモリトランザクション閾値は、スレッドデエンファシス命令のオペランドに基づく情報などの読み込み／格納ユニット２４６によって提供される情報に基づき、メモリトランザクション制御モジュール３０２によって設定されることができる。別の実施形態において、メモリトランザクション閾値は、ＲＯＭメモリ、オペレーティングシステムなどによって固定される値である。
【００３８】
メモリ・トランザクション・カウンタ３０６の集合は、スレッドＡに関連する待ち状態のメモリトランザクションの数を格納するカウンタ３３０と、スレッドＢに関連する待ち状態のメモリトランザクションの数を格納するカウンタ３３１とを含む。メモリトランザクション制御モジュール３０２は、カウンタ３３０および３３１に格納される値を個別に調整することができる。
【００３９】
優先順位ステータスレジスタ３０８の集合は、スレッドＡに関連する優先順位ステータスの状態情報を格納するレジスタ３４０と、スレッドＢに関連する優先順位ステータスの状態情報を格納するレジスタ３４１とを含む。メモリトランザクション制御モジュール３０２は、レジスタ３４０および３４１に格納される状態情報を個別に調整することができる。
【００４０】
優先順位決定モジュールは、レジスタ３４０および３４１に格納される優先順位ステータスの状態情報に基づき、スレッドＡおよびスレッドＢに関する優先順位ステータスを決定する。各スレッドに関する優先順位ステータスに基づき、優先順位決定モジュールは、制御情報をスレッド・スケジューラ・モジュール２３０に提供し、各スレッドに関連する命令が命令パイプライン２１４（図２）のステージのそれぞれで適切な順序で実行されるようにする。
【００４１】
演算中、メモリトランザクション制御モジュール３０２は、スレッドに関連するメモリトランザクションが待ち状態であるか、またはスレッドに関連するメモリトランザクションが判断されたかを示す読み込み／格納ユニット２４６からの情報を受信する。それに応答して、メモリトランザクション制御モジュール３０２は、メモリ・トランザクション・カウンタ３０６の集合に格納された値を調整する。
【００４２】
たとえば、読み込み／格納ユニット２４６は、スレッドＡに関連する命令に起因して、キャッシュミスが生じたことをメモリトランザクション制御モジュール３０２に示すことができる。それに応答して、メモリトランザクション制御モジュール３０２は、キャッシュミスが待ち状態であることを反映するように、カウンタ３３０に格納される値を調整する。（すなわち、外部メモリからデータを検索して、データキャッシュ２１６（図２）にそれを読み込むことによって）キャッシュミスが判断された後、読み込み／格納ユニット２４６は、キャッシュミスの判断をメモリトランザクション制御モジュール３０２に示す。それに応答して、メモリトランザクション制御モジュール３０２は、メモリトランザクションが判断されたことを反映するように、カウンタ３３０に格納される値を調整する。したがって、カウンタ３３０および３３１に格納される値は、スレッドＡおよびスレッドＢにそれぞれ関連する待ち状態のメモリトランザクションの数を反映する。
【００４３】
さらに、読み込み／格納ユニット２４６は、スレッドに関連するスレッドデエンファシス命令が受信されたことを示す情報をメモリトランザクション制御モジュール３０２に提供することができる。それに応答して、メモリトランザクション制御モジュール３０２は、メモリ・トランザクション・カウンタ３０６の集合に反映されるようなスレッドに関連する待ち状態のメモリトランザクションの数をメモリ・トランザクション・レジスタ３０４の集合に反映されるようなスレッドに関連する待ち状態のメモリトランザクションの数と比較する。比較に基づき、メモリトランザクション制御モジュール３０２は、優先順位ステータスレジスタ３０８の集合でスレッドに関するステータス状態を調整することによって、スレッドに関する優先順位ステータスを調整する。
【００４４】
たとえば、スレッドデエンファシス命令がスレッドＢに関連する場合には、メモリトランザクション制御モジュール３０２は、カウンタ３３１に格納される値をレジスタ３２１に格納される閾値と比較する。比較がスレッドＢに関連する待ち状態のメモリトランザクションの数が閾値を上回ることを示す場合には、メモリトランザクション制御モジュール３０２は、スレッドＢがデエンファシスされるように、レジスタ３２１によって格納された値を調整する。
【００４５】
図４を参照すると、スレッドのスケジューリング実行の方法の特定の実施形態の図が示されている。ブロック４０２で、スレッドは、時間ｔ０で各スレッドに関する優先順位ステータスに基づいて実行される。示された実施例において、スレッドＡは、スレッドＢより高い優先順位を有し、その結果、スレッドＡ命令がスレッドＢ命令の前に実行される。
【００４６】
ブロック４０４で、スレッドＡにおけるスレッドデエンファシス命令が時間ｔ１で処理される。スレッドデエンファシス命令の実行は、スレッドＡのデエンファシスを生じ、それにより、スレッドＢに最も高い優先順位が与えられる。したがって、ブロック４０６で、スレッドＡに関連する待ち状態のメモリトランザクションが判断されるまで、スレッドＡの実行が一時停止される。したがって、示された実施形態において、スレッドＡに関する待ち状態のメモリトランザクションが判断されるまで、スレッドＢ命令のみが実行される。
【００４７】
ブロック４０８に進むと、スレッドＡに関する待ち状態のメモリトランザクションが判断された後、スレッドＡに関する優先順位ステータスが時間ｔ３で復元される。したがって、図示されているように、スレッドＡは、スレッドＢより高い実行の優先順位を取り戻す。
【００４８】
図５を参照すると、スレッドのスケジューリング実行の方法の別の特定の実施形態の図が示されている。ブロック５０２で、スレッドは、時間ｔ０で各スレッドに関する優先順位ステータスに基づいて実行される。示された実施例において、スレッドＡは、スレッドＢおよびスレッドＣより高い優先順位を有し、スレッドＢはまた、スレッドＣより高い優先順位を有する。
【００４９】
ブロック５０４で、スレッドＡに関するスレッドデエンファシス命令が時間ｔ１で受信され、スレッドＡのデエンファシスが結果として生じる。したがって、ブロック５０６で、スレッドＡに関連する待ち状態のメモリトランザクションが判断されるまで、スレッドＡがデエンファシスされる。したがって、示された実施形態において、ブロック５０６で、スレッドＢが時間ｔ２でスレッドＡより高い実行の優先順位を有する。しかし、スレッドＡは、スレッドＣより高い優先順位を維持する。したがって、示された実施例において、スレッドは、他のスレッドに対して個別にデエンファシスされることができる。
【００５０】
ブロック５０８に進むと、スレッドＡに関する待ち状態のメモリトランザクションが決定された後、スレッドＡに関する優先順位ステータスが時間ｔ３で復元される。したがって、図示されているように、スレッドＡは、一方、スレッドＢより高い実行の優先順位を取り戻す。
【００５１】
図６を参照すると、命令パイプラインにおけるスレッドのスケジューリング実行の例示の方法６０２および６０４を示すブロック図が示されている。方法６０２は、スレッドデエンファシス命令がない命令パイプラインにおけるスレッドのスケジューリングを示す。対照的に、方法６０４は、スレッドデエンファシス命令がスレッドＡから実行される場合の命令パイプラインにおけるスレッドのスケジューリングを示す。図示されているように、方法６０２および６０４の両方に関して、存在しない明示デエンファシスはなく、スレッドＡは通常、スレッドＢより高い実行の優先順位を有する。
【００５２】
方法６０２を参照すると、ブロック６１０で、２つの命令が命令キャッシュに格納され、第１の命令は、スレッドＡに関連し、第２の命令は、スレッドＢに関連する。ブロック６１２で、命令パイプラインのフェッチステージは、各命令に関する現在の優先順位ステータスに基づき、命令を検索し、その結果、スレッドＡ命令がスレッドＢ命令より前に検索される。
【００５３】
ブロック６１４で、２つの命令が命令パイプラインの復号化ステージ用のバッファに格納される。ブロック６１６で、命令は、各命令に関する現在の優先順位ステータスに基づいて復号化され、その結果、スレッドＡ命令がスレッドＢ命令より前に復号化される。したがって、スレッドＡ命令が機能停止という結果として生じる場合には、スレッドＢ命令は、機能停止が判断されるまで、復号化されない。
【００５４】
方法６０４を参照すると、ブロック６２０で、２つの命令が命令キャッシュに格納され、第１の命令は、スレッドＡに関連し、第２の命令は、スレッドＢに関連する。ブロック６２２で、命令パイプラインのフェッチステージは、各命令に関する現在の優先順位ステータスに基づき、命令を検索し、その結果、スレッドＡ命令がスレッドＢ命令より前に検索される。
【００５５】
ブロック６２４で、２つの命令が命令パイプラインの復号化ステージ用のバッファに格納される。図示されているように、ブロック６２４で、バッファは、スレッドＡに関連するスレッドデエンファシス命令が命令パイプラインの別のステージで実行されたことを示す制御情報を受信する。スレッドデエンファシス命令に応答して、スレッドＡに関する優先順位ステータスがスレッドＢに対してデエンファシスされる。したがって、ブロック６２６で、命令は、各命令に関する現在の優先順位ステータスに基づいて復号化され、その結果、スレッドＢ命令がスレッドＡ命令より前に復号化される。したがって、スレッドＡ命令が機能停止という結果として生じる場合には、スレッドＢ命令は、機能停止が判断される間に復号化され、方法６０２に対して命令パイプラインのより効率的な演算を結果として生じる。
【００５６】
本文書において、「第１」および「第２」などの関係語は、別の実在物または行為から１つの実在物または行為を区別するためだけに、そのような実在物または行為の間の実際のそのような関係または順序を必ずしも必要としたり示唆したりすることなく、用いられてもよい。「備える」、「備えている」という用語またはその任意の他の変形は、要素の列挙を含む工程、方法、物品または装置が、それらの要素のみを含むのではなく、明確に列挙されていないか、またはそのような工程、方法、物品または装置に固有である他の要素を含んでもよいような非独占的な含有を網羅することを意図している。「備える」の前に来る要素は、さらに制限することなく、要素を備える工程、方法、物品または装置におけるさらなる同一の要素の存在を排除している訳ではない。「または」という用語は、「または」の条件節の両方の状態が満たされる場合には、条件節が満たされるような包括的な「または」を網羅することを意図している。「範囲」という用語は、単一の値のみを含む範囲を含んでもよい。
【００５７】
「別の」という用語は、本願明細書で用いられるとき、少なくとも２つ目またはそれ以上であると定義される。「含んでいる」、「有している」またはその任意の変形は、本願明細書で用いられるとき、含むものと定義される。「結合される」という用語は、電気光学技術に関して本願明細書で用いられるとき、接続されるものと定義されるが、必ずしも直接的である必要はなく、また、必ずしも機械的である必要はない。
【００５８】
本願明細書で用いられるとき、「バス」は、データ、アドレス、制御またはステータスなどの情報の１つまたは複数の種々のタイプの情報を伝送するために用いられてもよい複数の信号または導体を指すために用いられる。本願明細書において説明されたような導体は、単一の導体、複数の導体、単一方向の導体または双方向の導体であることに関して図示または記載されてもよい。しかし、異なる実施形態は、導体の実装を変化させてもよい。たとえば、双方向の導体ではなく、別個の単一方向の導体を用いてもよく、また、その逆であってもよい。また、複数の導体は、複数の信号を連続的にまたは時分割形式で複数の信号を伝送する１つの導体に置き換えられてもよい。同様に、複数の信号を搬送する単一の導体は、これらの信号の部分集合を搬送する種々の異なる導体に分離されてもよい。したがって、信号を伝送するための多くのオプションが存在する。
【００５９】
本開示の他の実施形態、用途および利点は、本願明細書および本願明細書に開示された開示内容の実施を考慮すると、当業者には明白であろう。たとえば、本願明細書に開示されるパフォーマンス事象監視技術は、１つのプロセッサに関して記載されているが、類似の技術が複数のプロセッサコアを有するデバイスに関して採用されることが可能である。各プロセッサコアは、異なるパフォーマンス事象モニタに関連することが可能であり、またはデバイスの各パフォーマンス事象モニタが複数のプロセッサコアに関連することが可能である。明細書および図面は、例示に過ぎないことを考慮すべきであり、したがって、本開示の範囲は、以下の請求項およびその等価物によってのみ制限されることを意図している。
【図１】
0005413853.tif 000002
【図２】
0005413853.tif 000003
【図３】
0005413853.tif 000004
【図４】
0005413853.tif 000005
【図５】
0005413853.tif 000006
【図６】
0005413853.tif 000007