(57)【特許請求の範囲】
【請求項１】
データ処理装置において、ライブロック状態から抜け出すための方法であって、
前記データ処理装置において、命令が完了せずにフラッシュされる回数が所定の数に達した状態であるライブロック状態を検出するステップと、
前記ライブロック状態が引き続き検出され続ける間は、処理サイクル数を増大することにより前記データ処理装置で命令の処理を徐々にストールするステップと、
前記ライブロック状態から抜け出したことを検出した場合に、前記データ処理装置を全速モード動作に戻すステップとを含む方法。
【請求項２】
前記データ処理装置がプロセッサであり、前記プロセッサによる命令の処理が、前記プロセッサのパイプライン内の命令の発行を遅延させることにより徐々にストールする請求項１に記載の方法。
【請求項３】
前記方法が、前記プロセッサの発行ユニット内で実施される請求項２に記載の方法。
【請求項４】
前記プロセッサによる命令の処理が、前記発行ユニットの発行およびディスパッチ・パイプラインを通しての命令の動きをストールすることにより徐々にストールする請求項３に記載の方法。
【請求項５】
ライブロック状態から抜け出すためのシステムであって、
発行ユニットと、
前記発行ユニットを含むプロセッサ・パイプラインとを備え、前記発行ユニットが、
前記プロセッサ・パイプラインの、命令が完了せずにフラッシュされる回数が所定の数に達した状態であるライブロック状態を検出し、
前記ライブロック状態が引き続き検出され続ける間は、処理サイクル数を増大することにより前記プロセッサ・パイプラインで命令の処理を徐々にストールし、
前記ライブロック状態から抜け出したことを検出した場合に、前記プロセッサ・パイプラインを全速モード動作に戻すシステム。
【請求項６】
前記発行ユニットが、前記発行ユニットの発行およびディスパッチ・パイプラインを通しての命令の動きをストールすることにより、前記プロセッサ・パイプラインにより命令の処理を徐々にストールする請求項５に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、一般的に、改良形データ処理システムおよび方法に関する。より詳細には、本願は、プロセッサの動作を徐々に低速モードにするためのシステムおよび方法に関する。プロセッサの低速モード動作は、プロセッサのコア内のライブロック（livelock）状態から抜け出すために使用される。
【背景技術】
【０００２】
現代のプロセッサの設計、特に同時マルチスレッド（ＳＭＴ）プロセッサ設計の場合には、ライブロック状態は、例えば、スレッドは実際に実行しているものの、何も成し遂げられていない状態のことであり、設計段階で発見し、解決するのが最も困難な問題の１つであり、多くの場合、後でハードウェアで設計が実施されるまで発見できない。ライブロック状態は、プロセッサが同じ一組の命令を反復して実行しているのに、実際には全然進行しない状態と表現することができる。ライブロック状態になる根本的な原因の１つは、あるプロセッサ・ユニットと他のプロセッサ・ユニットとの間の「調和のとれた」固定サイクル相互作用である。ライブロック状態の他の原因は、命令の反復フラッシュおよび再フェッチし、および発行キューからの再発行が反復して行われ、解放することができない満杯または使用中のリソース上で発生する反復フラッシュ状態のために命令をどうしても完全に実行することができないことである。
【０００３】
「調和のとれた」固定サイクル相互作用は、プロセッサ・パイプラインにおいては、命令の実行を処理し、完全に実行するために一定の数のサイクルが使用される結果である。複数のスレッドからの命令は、調和状態でプロセッサ・パイプラインを通して処理されるので、各スレッド内の各命令は、ほぼ同時に処理が完全に実行される。実行のスレッド間に従属関係がある場合で、そのため、あるスレッドが実行の他のスレッド内の命令の結果を必要とする場合には、ライブロック状態が発生する恐れがある。何故なら、両方の命令がプロセッサ・パイプラインを通して同時に処理され、リソースと従属関係が衝突するからである。従属命令は完了することができない。何故なら、他のスレッド内の命令の結果をまだ使用することができないからである。他のスレッド内の命令が、リソースの衝突に遭遇した場合には、両方のスレッドからの命令は、反復してフラッシュされ、パイプラインに再発行される。
【０００４】
図６および図７は、ライブロック状態を発生するコードおよび二重命令発行プロセッサ設計の一例を示す。図６は、ＳＭＴおよび二重命令発行プロセッサ・パイプライン設計を示す。この場合、１つ置きのサイクルの毎に各スレッドから２つの命令が発行される。図７は、図６のプロセッサ・パイプライン上で実行した場合に、両方のスレッドにプロセッサの特殊な目的のレジスタ（ＳＰＲ）にアクセスさせようとする例示としてのユーザ・コードを示す。スレッド０は、そのＳＰＲアクセスを完了する目的で、スレッド１コード上で待機するように、等しくなければ分岐（ｂｎｅｑ）命令でコード化される。スレッド０コードは、後方に分岐を続行し、スレッド１の「記憶」命令が実行されたか否かをチェックし続ける。
【０００５】
図６のプロセッサ・パイプライン設計のＳＰＲキューは、同時に２つのＳＰＲ命令しかサポートすることができない。それ故、スレッド１内の第３のＳＰＲ命令および第３のＳＰＲ命令の後のすべての命令は、常にフラッシュされ再発行される。スレッド０の命令およびスレッド１の命令の両方が、下記の表１に示す順序でコンパイルされると、「ｍｔ  ｓｐｒＣ  Ｒ１」命令の前のすべてのスレッド１の命令の実行が完了する。スレッド１の「ｍｔ  ｓｐｒＣ  Ｒ１」は最初にフラッシュされる。何故なら、ＳＰＲキューは、「ｍｔ  ｓｐｒＡ  Ｒ３」および「ｍｔ  ｓｐｒＢ  Ｒ２」が使用しているからである。「ｂｎｅｑ  ＣｈｅｃｋＴｈｒｅａｄ１ＳＰＲ」の後のすべてのスレッド０の命令は、スレッド１の「Ｒ４  ０ｘ１００の記憶」が実行されない限り発行され、フラッシュされる。
【表１】
0004677422.tif 000002
【０００６】
表２は、ｎ＋１およびｎ＋３のところでスレッド１の命令の後に発生する新しいコード・シーケンスが、両方のスレッドが再発行、フラッシュおよび再度の再発行中に命令の残りにより完了することを示す。表２に示すように、スレッド１の「ｍｔ  ｓｐｒＣ  Ｒ１」は再度フラッシュされる。何故なら、スレッド０の「ｍｔ  ｓｐｒＤ  Ｒ６」および「ｍｔ  ｓｐｒＥ  Ｒ７」は、スレッド１の「ｍｔ  ｓｐｒＣ  Ｒ１」の前に発行されるからである。スレッド０内のこれら２つの「ＳＰＲへ移動」命令は、分岐の予測ミスのために最終的にはフラッシュされる。両方のスレッドからのこれら２つのフラッシュ状態（スレッド０の分岐予測ミス・フラッシュおよびスレッド１のＳＰＲへの第３の移動命令）は、引き続きフラッシュし、発行ユニットは、「調和」ウィンドウ内に位置する。それ故、表２内の両方のスレッド０およびスレッド１の命令は、反復して再発行し、フラッシュする。これにより、プロセッサは強制的にライブロック状態になる。
【表２】
0004677422.tif 000003
【０００７】
上記のようなライブロック状態は、多くの場合、プロセッサのハードウェア上で実際のアプリケーションを稼働した場合に検出される。多くの場合、この時点で設計を調整するのはコストもかかるし、手遅れでもある。それ故、ハードウェアの確認の際に検出されるこのタイプの予測しないライブロック状態を検出し、解決するために、プロセッサ・コアに組み込んだ一般的な方法を有することは重要なことである。
【０００８】
通常、プロセッサの発行ユニット内の検出機構のようなプロセッサの設計自身内にハード・コード化することができるハードウェア・ベースの検出機構は、このようなライブロック状態を検出するためのものである。検出機構が、ライブロック状態を検出することができる方法は特殊な実施態様により異なる。例えば、検出機構は、特定の命令のフラッシュの数、または処理が完了しないのに命令が再発行された回数をカウントすることによりライブロック状態を検出することができる。このような状況は、前に進行しない状態の変化、それ故、潜在的なライブロック・シナリオを示す。
【０００９】
周知の設計の場合には、ライブロック検出機構により、ライブロック状態の発生が検出された場合、プロセッサのパイプラインは、単一ステップ・モード動作になり、そのため１つまたは複数のスレッドを横切って１回に１つの命令の処理しか完了しない。しかし、ライブロック状態を検出する度に、プロセッサのパイプラインを単一ステップ・モードにすると、プロセッサの性能全体がかなりの影響を受ける。何故なら、ライブロック状態は、プログラムの実行の際に非常に頻繁に発生するからである。このライブロック状態がライブロック・ウィンドウを有しているならば、このアプローチはまたやりすぎということになる。すなわち、プロセッサ内でライブロック状態が引き続き検出されるのは数プロセッサ・サイクルの間だけである。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
例示としての実施形態は、プロセッサの動作を徐々にスローダウン・モードにするシステムおよび方法を提供する。プロセッサの動作を徐々に遅くすれば、プロセッサはライブロック状態から抜け出すことができる。さらに、速度の低減が徐々に行われるので、プロセッサは、種々の程度のライブロック状態を柔軟に回避することができる。例示としての実施形態の機構は、もっと軽度のライブロック状態に対する小さな性能に対する影響を取り上げ、ライブロック状態がもっと重度な場合だけにプロセッサの性能に対する影響を増大することにより、ライブロック状態の深刻さに基づいてプロセッサの性能全体に影響を与える。
【課題を解決するための手段】
【００１１】
例示としての実施形態の機構を使用すれば、ライブロック状態検出の複数の段階を関連するライブロック状態処理ロジックと一緒に使用することができる。関連するライブロック状態処理ロジックは、ライブロック状態から抜け出そうとするいくつかの行動を使用する。複数の段階内の以降の各段階は、ライブロック状態の深刻さの増大に関連する。初期の段階は、数プロセッサ・サイクルに過ぎないライブロック・ウィンドウに関連し、一方、後期の段階は遥かに長いライブロック・ウィンドウに関連する。各段階を通して、プロセッサの性能は徐々に低減するが、ライブロック状態から抜け出す可能性は増大する。
【００１２】
例示としての一実施形態の場合には、プロセッサ・パイプラインの発行ユニット内でスローダウン・モード制御ロジックを使用している。スローダウン・モード制御ロジックは、例えば、特定の命令のフラッシュの回数、または処理を完了しない命令の再発行の回数のような所定の基準に基づいて、ライブロック状態を検出するためのハング検出制御ロジックと結合している。ライブロック状態を検出した場合には、ハング検出制御ロジックは、スローダウン・モード制御ロジックにライブロック状態が存在することを示す信号をアサートする。スローダウン・モード制御ロジックは、プロセッサの動作を徐々に低減し始める。
【００１３】
ゆっくりした速度低減動作によれば、スローダウン・モード制御ロジックは、プロセッサ・パイプラインを通しての命令の流れをストールするために信号を出力する。この出力信号は、ＯＲゲート等を介してデータ依存制御ロジックのような他の制御ロジックからの出力信号と論理的に結合される。それ故、スローダウン・モード制御ロジックまたは他の制御ロジックがプロセッサ・パイプラインを通しての命令の動きをストール（stall）するために信号を出力すると、命令は低減する。これらの信号がアサートされない場合には、命令は通常の方法でパイプラインを通して流れることができる。
【００１４】
スローダウン・モード制御ロジックは、スローダウン・モード制御ロジック内にハードワイヤードされるか、プログラムされるステージング（staging）スキームに従って命令の流れをストールするために信号を出力する。例えば、ハング検出制御ロジックがライブロック（またはハング）状態を検出した場合には、すなわち命令をコミットしないＸ個のフラッシュが存在することを検出した場合には（この場合、Ｘはハードウェア確認の後でプログラムすることができる）、スローダウン・モード制御ロジックは、発行ユニットの速度を低減することができ、そのためＮ回のプロセッサ・サイクル毎だけに発行ユニットにより命令が発行される（この場合、Ｎはハードウェア確認の後でプログラムすることができる）。発行ユニットの速度低減は、パイプラインを通しての命令の動きをストールするために信号をアサートすることにより行うことができる。この信号は、例えば、Ｎ回のような所定の数のサイクルに対してアサートすることができる。そのためＮ回のプロセッサ・サイクル毎に１つの命令だけが発行される。
【００１５】
この同じライブロック状態が再度発生した場合には、すなわち、命令をコミットしないＸ個のフラッシュが発生した場合には、発行ユニットの速度が再度低減し、そのため発行ユニットは、２Ｎ回のプロセッサ・サイクル毎に１つの命令を発行することができる。ライブロック状態が再度検出された場合には、発行ユニットの速度が再度低減し、そのため発行ユニットは、４Ｎ回のプロセッサ・サイクル毎に１つの命令を発行することができる。その後で、ライブロック状態がさらに再度検出された場合には、プロセッサは重度のライブロック状態にあると判定される。このような場合には、発行ユニットは、強制的に直列単一ステップ・モードにされ、前の命令の実行が完了するまで、１つの命令だけを発行することができるだけで、他の命令を発行することはできない。発行ユニットが発行および発行ユニットのディスパッチ・パイプラインにすべての命令を移動した場合には、プロセッサは通常の全速モード動作に戻る。ライブロック状態がもはや検出されない場合には、プロセッサは、ステージングスキームの前の段階のうちの任意の段階においてこの通常の全速モード動作に戻る。
【００１６】
例示としての一実施形態の場合には、ライブロック状態から抜け出すための方法を使用している。この方法は、例えば、データ処理装置内のライブロック状態を検出し、ライブロック状態の検出を続行しながら、処理サイクルの数を増大することにより、データ処理装置で命令の処理を徐々にストールするステップを含むことができる。この方法は、さらに、ライブロック状態から抜け出したことを検出した場合に、データ処理装置を全速モード動作に戻すステップを含むこともできる。
【００１７】
データ処理装置による命令の処理を徐々にストールするステップは、ステージングスキームに従ってライブロック状態を検出した場合に、データ処理装置を減速モード動作に設定するステップを含むことができる。ステージングスキームは、処理サイクルの量を変えることにより命令の処理を遅くする複数の段階を有することができる。
【００１８】
データ処理装置の減速モード動作に設定するステップは、データ処理装置により命令の処理を動作の第１のスローダウン・ステージに減速し、データ処理装置による命令の処理の減速後もライブロック状態が依然として存在するか否かを判定するステップを含むことができる。データ処理装置を減速モード動作に設定するステップは、さらに、命令の処理を動作の第１のスローダウン・ステージに減速した後でもライブロック状態が依然として存在する場合には、データ処理装置により命令の処理を動作の第２のスローダウン・ステージに減速するステップを含むことができる。動作の第２のスローダウン・ステージは、動作の第１のスローダウン・ステージより多い回数の処理サイクルにより、データ処理装置により命令の発行を遅らせることができる。動作の第２のスローダウン・ステージがデータ処理装置により命令の発行を遅らせる処理サイクルの数は、動作の第１のスローダウン・ステージがデータ処理装置による命令の発行を遅らせる処理サイクルの回数の２倍であってもよい。動作の第２のスローダウン・ステージは、動作の第１のスローダウン・ステージよりももっと重度のライブロック状態と関連付けることができる。
【００１９】
データ処理装置においてライブロック状態を検出するステップは、所定のしきい値に達する命令を完了しない特定の命令のフラッシュの数を検出するステップを含むことができる。さらに、データ処理装置においてライブロック状態を検出するステップは、所定のしきい値に達する命令の処理を完了しない命令の再発行の回数を含むことができる。
【００２０】
ステージングスキームの最後の段階は、データ処理装置による命令の処理を、前の命令の処理が完了するまで、１つの命令だけを発行することができるだけで、他の命令を発行することはできない動作の直列単一ステップ・モードに減速することができる。
【００２１】
データ処理装置はプロセッサであってもよく、その場合、プロセッサによる命令の処理は、プロセッサのパイプライン内での命令の発行を遅らせることにより徐々にストールする。この方法は、プロセッサの発行ユニットで実施することができる。プロセッサによる命令の処理は、発行および発行ユニットのディスパッチ・パイプラインを通しての命令の動きをストールすることにより徐々にストールすることができる。
【００２２】
ライブロック状態の検出に対する基準は、データ処理装置のハードウェアの製造後にデータ処理装置内にプログラムすることができる。さらに  それによりステージングスキームの各段階に対する命令の発行を遅らせる処理サイクルの基本的な数をデータ処理装置のハードウェアの製造後にデータ処理装置内にプログラムすることができる。
【００２３】
他の例示としての実施形態の場合には、コンピュータ読み取り可能プログラムを有するコンピュータ使用可能媒体を備えるコンピュータ・プログラム製品を使用している。コンピューティング・デバイス上で実行した場合、コンピュータ読み取り可能プログラムは、コンピューティング・デバイスに方法の例示としての実施形態のところですでに概略説明した種々の動作およびその組合せを実行させる。
【００２４】
さらに他の例示としての実施形態の場合には、ライブロック状態を抜け出すためのシステムを使用している。このシステムは、発行ユニットおよび発行ユニットと結合しているプロセッサ・パイプラインを備えることができる。発行ユニットは、プロセッサ・パイプラインのライブロック状態を検出し、ライブロック状態の検出を続行しながら、処理サイクルの数を増大することによりプロセッサ・パイプラインによる命令の処理を徐々にストールし、ライブロック状態から抜け出したことを検出した場合には、プロセッサ・パイプラインを全速モード動作に戻すことができる。さらに、発行ユニットは、また、方法の例示としての実施形態のところですでに概略説明した種々の動作およびその組合せを実施することができる。
【００２５】
本発明のこれらおよび他の機能および利点については以下に説明するが、本発明の例示としての実施形態の下記の詳細な説明を読めば、当業者であればこれらを理解することができるだろう。
【００２６】
添付の特許請求の範囲に本発明の新規な機能と思われる特徴について記載する。しかし、本発明自身および好適な形態、その他の目的および利点は、添付の図面を参照しながら例示としての実施形態の下記の詳細な説明を読めば最もよく理解することができるだろう。
【発明を実施するための最良の形態】
【００２７】
例示としての実施形態は、ライブロック状態から抜け出すために、プロセッサの動作を徐々にスローダウン・モードにするためのシステムおよび方法を提供する。例示としての実施形態は、任意のコンピューティング・デバイスの任意のプロセッサ内で実施することができる。例えば、例示としての実施形態は、サーバ・コンピューティング・デバイス、クライアント・コンピューティング・デバイス、通信デバイス、ポータブル・コンピューティング・デバイス等のうちの任意のもので使用することができる。図１〜図２は、例示としての実施形態の例示としての態様を実施することができる分散型データ処理環境およびコンピューティング・デバイスのいくつかの例を示す。図１〜図２は、単に例示としてのものであって、例示としての実施形態を実施することができるコンピューティング・デバイスのタイプについて何らかの制限を記述したり、意味したりするものではない。むしろ、例示としての実施形態は、プロセッサが最終的に動作する特定の機械またはコンピューティング・デバイスが何であれ、任意のプロセッサで実施することができる。
【００２８】
ここで図面を参照すると、図１は、例示としての実施形態の態様を実施することができる例示としての分散型データ処理システムの図面である。分散型データ処理システム１００は、例示としての実施形態を実施することができるコンピュータのネットワークを含むことができる。分散型データ処理システム１００は、分散型データ処理システム１００内で一緒に接続している種々のデバイスおよびコンピュータ間で通信リンクを提供するために使用する媒体である少なくとも１つのネットワーク１０２を含む。ネットワーク１０２は、ワイヤ、無線通信リンク、または光ファイバ・ケーブルのような接続装置を含むことができる。
【００２９】
図の例の場合には、サーバ１０４およびサーバ１０６は、記憶装置ユニット１０８と一緒にネットワーク１０２に接続している。さらに、クライアント１１０、１１２および１１４も、ネットワーク１０２に接続している。これらのクライアント１１０、１１２および１１４は、例えばパーソナル・コンピュータ、ネットワーク・コンピュータ等であってもよい。図の例の場合には、サーバ１０４は、ブート・ファイル、オペレーティング・システム画像、およびクライアント１１０、１１２および１１４へのアプリケーションのようなデータを提供する。クライアント１１０、１１２および１１４は、図の例の場合には、サーバ１０４へのクライアントである。分散型データ処理システム１００は、他のサーバ、クライアントおよび図示していない他のデバイスを含むこともできる。
【００３０】
図の例の場合には、分散型データ処理システム１００は、相互に通信するための伝送制御プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）スイートのプロトコルを使用するネットワークおよびゲートウェイの全世界の集合体を表すネットワーク１０２を含むインターネットである。インターネットの中心には、データおよびメッセージを経路指定する数千の商用、政府用、教育用および他のコンピュータ・システムから構成される主要なノードまたはホスト・コンピュータ間の高速データ通信ラインのバックボーンが位置する。もちろん、分散型データ処理システム１００は、また例えば、イントラネット、ローカル・エリア・ネットワーク（ＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）等のような多数の異なるタイプのネットワークを含むように実施することもできる。すでに説明したように、図１は、例示としてのものであって、本発明のいくつかの実施形態のアーキテクチャを制限するためのものではない。それ故、図１の特定の要素は、本発明の例示としての実施形態を実施することができる環境を制限するものと見なすべきではない。
【００３１】
ここで図２を参照すると、この図は、例示としての実施形態の態様を実施することができる例示としてのデータ処理システムのブロック図である。データ処理システム２００は、本発明の例示としての実施形態のためにプロセスを実施するコンピュータ使用可能コードまたは命令を発見することができる図１のサーバ１０４またはクライアント１１０のようなコンピュータの一例である。
【００３２】
図の例の場合には、データ処理システム２００は、北のブリッジおよびメモリ・コントローラ・ハブ（ＮＢ／ＭＣＨ）２０２、および南のブリッジおよび入出力（１／Ｏ）コントローラ・ハブ（ＳＢ／ＩＣＨ）２０４を含むハブ・アーキテクチャを使用する。処理ユニット２０６、主メモリ２０８、およびグラフィックス・プロセッサ２１０は、ＮＢ／ＭＣＨ２０２に接続している。グラフィックス・プロセッサ２１０は、加速グラフィックス・ポート（ＡＧＰ）を通してＮＢ／ＭＣＨ２０２に接続することができる。
【００３３】
図の例の場合には、ローカル・エリア・ネットワーク（ＬＡＮ）アダプタ２１２は、ＳＢ／ＩＣＨ２０４に接続している。オーディオ・アダプタ２１６、キーボードおよびマウス・アダプタ２２０、モデム２２２、読出し専用メモリ（ＲＯＭ）２２４、ハード・ディスク・ドライブ（ＨＤＤ）２２６、ＣＤ−ＲＯＭドライブ２３０、ユニバーサル・シリアル・バス（ＵＳＢ）ポートおよび他の通信ポート２３２、およびＰＣＩ／ＰＣＩｅデバイス２３４は、バス２３８およびバス２４０を通してＳＢ／ＩＣＨ２０４に接続している。ＰＣＩ／ＰＣＩｅデバイスは、例えば、イーサネット・アダプタ、アドイン・カード、ノートブック・コンピュータ用のＰＣカードを含むことができる。ＰＣＩは、カード・バス・コントローラを使用し、ＰＣＩｅは、このコントローラを使用しない。ＲＯＭ２２４は、例えば、フラッシュ・バイナリ入出力システム（ＢＩＯＳ）であってもよい。
【００３４】
ＨＤＤ２２６およびＣＤ−ＲＯＭドライブ２３０は、バス２４０を通してＳＢ／ＩＣＨ２０４に接続している。ＨＤＤ２２６およびＣＤ−ＲＯＭドライブ２３０は、例えば、ＩＤＥ（Integrated Drive Electronics）またはＳＡＴＡ（Serial Advanced Technology Attachment）インタフェースを使用することができる。スーパーＩ／Ｏ（ＳＩＯ）デバイス２３６は、ＳＢ／ＩＣＨ２０４に接続することができる。
【００３５】
オペレーティング・システムは、処理ユニット２０６上で稼働する。オペレーティング・システムは、図２のデータ処理システム２００内の種々の構成要素と協力し、制御を行う。クライアントとして、オペレーティング・システムは、マイクロソフト（Ｒ）ウィンドウズ（Ｒ）ＸＰ（マイクロソフトおよびウィンドウズは、米国、その他の国または両方のマイクロソフト社の商標である）のような市販のオペレーティング・システムであってもよい。Ｊａｖａ（ＴＭ）プログラミング・システムのようなオブジェクト指向プログラミング・システムを、オペレーティング・システムと一緒に実行することができ、データ処理システム２００上で稼働しているＪａｖａ（ＴＭ）プログラム、またはアプリケーションからオペレーティング・システムに呼出しを送ることができる（Ｊａｖａは、米国、その他の国または両方のサン・マイクロシステムズ社の商標である）。
【００３６】
サーバとして、データ処理システム２００は、例えば、新型対話型エクゼクティブ（ＡＩＸ（Ｒ））オペレーティング・システムまたはＬＩＮＵＸ（Ｒ）オペレーティング・システムを実行しているＩＢＭ（Ｒ）ｅＳｅｒｖｅｒ（ＴＭ）ｐＳｅｒｉｅｓ（Ｒ）コンピュータ・システムであってもよい（ｅＳｅｒｖｅｒ、ｐＳｅｒｉｅｓおよびＡＩＸは、米国、その他の国または両方のインターナショナル・ビジネス・マシン社の商標であり、一方、ＬＩＮＵＸは、米国、その他の国または両方のＬｉｎｕｓ  Ｔｏｒｖａｌｄｓ社の商標である）。データ処理システム２００は、処理ユニット２０６内に複数のプロセッサを含む対称的なマルチプロセッサ（ＳＭＰ）システムであってもよい。別の方法としては、１つのプロセッサ・システムを使用することもできる。
【００３７】
オペレーティング・システム、オブジェクト指向プログラミング・システム、およびアプリケーションまたはプログラム用の命令は、ＨＤＤ２２６のような記憶装置の上に位置していて、処理ユニット２０６により実行するために主メモリ２０８内にロードすることができる。本発明の例示としての実施形態のための処理は、例えば、主メモリ２０８、ＲＯＭ２２４のようなメモリ、または例えば、１つまたは複数の周辺デバイス２２６および２３０内に位置することができるコンピュータ使用可能プログラム・コードを使用する処理ユニット２０６により実行することができる。
【００３８】
図２のバス２３８またはバス２４０のようなバス・システムは、１つまたは複数のバスから形成することができる。もちろん、バス・システムは、ファブリックまたはアーキテクチャに取り付けられているいくつかの構成要素またはデバイス間でデータを転送するためのものである任意のタイプの通信ファブリックまたはアーキテクチャにより実施することもできる。図２のモデム２２２またはネットワーク・アダプタ２１２のような通信ユニットは、データを送受信するために使用する１つまたは複数のデバイスを含むことができる。メモリは、例えば、主メモリ２０８、ＲＯＭ２２４または図２のＮＢ／ＭＣＨ２０２で使用しているようなキャッシュであってもよい。
【００３９】
当業者であれば、図１〜図２のハードウェアは、実施態様により異なることを理解することができるだろう。フラッシュ・メモリ、等価の不揮発性メモリ、または光ディスク・ドライブ等のような他の内部ハードウェアまたは周辺デバイスも、図１〜図２のハードウェアの他にまたは代わりに使用することができる。また、例示としての実施形態の処理は、本発明の精神および範囲から逸脱することなしに、上記ＳＭＰシステム以外のマルチプロセッサ・データ処理システムに適用することができる。
【００４０】
さらに、データ処理システム２００は、クライアント・コンピューティング・デバイス、サーバ・コンピューティング・デバイス、タブレット・コンピュータ、ラップトップ・コンピュータ、電話または他の通信デバイス、携帯情報端末（ＰＤＡ）等を含む多数の異なるデータ処理システムのうちの任意の形をとることができる。ある例示としての例の場合には、データ処理システム２００は、例えば、オペレーティング・システム・ファイルおよび／またはユーザが生成したデータを記憶するための不揮発性メモリを提供するためのフラッシュ・メモリと一緒に構成するポータブル・コンピューティング・デバイスであってもよい。本質的には、データ処理システム２００は、アーキテクチャの制限がない任意の周知のまたは後で開発されたデータ処理システムであってもよい。
【００４１】
図３は、例示としての一実施形態によるプロセッサのパイプラインを示す例示としての図面である。図３に示すように、プロセッサ３００は、フェッチ・アドレス・マルチプレクサ３０４、フェッチ・ユニット３１０、復号ユニット３２０、発行ユニット３３０、実行ユニット３４０、完了ユニット３５０および分岐ユニット３６０から構成されるプロセッサ・パイプラインを含む。プロセッサ３００は、メモリ・サブシステム３７０、ホスト・バス３８０、バス制御ユニット３９０、主メモリ・ユニット３９２、および他のプロセッサおよび例えば、図２に示すような外部機器３９４と結合している。
【００４２】
要素を上記のように配置すると、通常、ライブロック状態は、フェッチ・アドレス・マルチプレクサ３０４からフェッチ・ユニット３１０、復号ユニット３２０、発行ユニット３３０、完了ユニット３５０への、および任意の命令をコミットすることにより、実際の進行は何にも行わないで何回も複数回フラッシュ・アドレス経路３２３を通してフェッチ・アドレス・マルチプレクサ３０４に戻るプロセッサの流れ内の同じ一組の命令であるということができる。すでに説明したように、このようなライブロック状態の１つまたは複数の根本的原因は、あるプロセッサ・ユニットと他のプロセッサ・ユニットとの間の「調和」固定サイクル相互作用、反復してフラッシュされ、再度取り出される命令、または発行ユニット３３０の発行キューから反復して再発行され、解放することができないリソースの全または使用中の状態の時に発生する反復フラッシュ状態のために決して終了しない命令によるものである。
【００４３】
例示としての実施形態は、ライブロック状態を検出した場合に、発行ユニット３３０による命令の発行を徐々にストールするための機構を提供する。例示としての一実施形態の場合には、ライブロック状態検出の複数の段階が、関連するライブロック状態処理ロジックと一緒に発行ユニット３３０で使用される。関連ライブロック状態処理ロジックは、ライブロック状態から抜け出そうとするいくつかの行動を使用する。複数の段階内の以降の各段階は、ライブロック状態の深刻さの増大に関連する。初期の段階は、数プロセッサ・サイクルに過ぎないライブロック・ウィンドウズに関連し、一方、後期の段階は遥かに長いライブロック・ウィンドウズに関連する。各段階を通して、プロセッサの性能は次第に低減するが、ライブロック状態から抜け出す可能性は増大する。
【００４４】
例示としての一実施形態の場合には、プロセッサ・パイプラインの発行ユニット３３０内でスローダウン・モード制御ロジックを使用している。スローダウン・モード制御ロジックは、例えば、特定の命令のフラッシュの回数、または完了しない命令の再発行の回数のような所定の基準をベースとしてライブロック状態を検出するライブロック（またはハング）検出制御ロジックと結合している。ライブロック状態を検出した場合には、ライブロック検出制御ロジックは、スローダウン・モード制御ロジックに、ライブロック状態が存在することを示す信号をアサートする。スローダウン・モード制御ロジックは、発行ユニット３３０からの命令の発行をストールすることにより、プロセッサ３００の動作を次第に低減し始める。
【００４５】
ゆっくりした速度低減動作によれば、スローダウン・モード制御ロジックは、プロセッサ・パイプラインを通しての命令の流れをストールするために信号を出力する。この出力信号は、ＯＲゲート等を介して発行ユニット３３０のデータ依存制御ロジックのような他の制御ロジックからの出力信号と論理的に結合される。それ故、スローダウン・モード制御ロジックまたは他の制御ロジックが、発行ユニット３３０の発行およびディスパッチ・パイプラインを通しての命令の動きをストールするために信号を出力すると、命令はストールする。これらの信号がアサートされない場合には、命令は通常の方法で発行ユニット３３０の発行およびディスパッチ・パイプラインを通して流れることができる。
【００４６】
スローダウン・モード制御ロジックは、スローダウン・モード制御ロジック内にハードワイヤードされるか、プログラムされるステージングスキームに従って命令の流れをストールするために信号を出力する。例えば、ライブロック検出制御ロジックがライブロック（またはハング）状態を検出した場合には、すなわち命令がコミットされていないＸ個のフラッシュが存在することを検出した場合には（この場合、Ｘはハードウェア確認の後でプログラムすることができる）、スローダウン・モード制御ロジックは発行ユニット３３０の速度を低減することができ、そのためＮ回のプロセッサ・サイクル毎だけに発行ユニット３３０により１つの命令が発行される（この場合、Ｎはハードウェア確認の後でプログラムすることができる）。発行ユニット３３０の速度低減は、発行ユニット３３０を通しての命令の動きをストールするために信号をアサートすることにより行うことができる。この信号は、例えば、Ｎ回のような所定の数のサイクルに対してアサートすることができる。そのためＮ回のプロセッサ・サイクル毎に１つの命令だけが発行される。
【００４７】
発行ユニット３３０がストールすることができるサイクルの数は、同じライブロック状態を以降に検出する度に増大することができる。すなわち、命令の以降の連続している各再発行によりライブロック状態が検出されると、発行ユニットがストールすることができるサイクルの数を増大することができる。ライブロック状態が所定の数の回数検出されると、プロセッサ３００は重度のライブロック状態にあると判定される。このような場合、発行ユニット３３０を強制的に直列単一ステップ・モードにすることができ、その場合、前の命令の処理が終了するまで、１つの命令しか発行することができず、他の命令を発行することはできない。
【００４８】
発行ユニット３３０が発行ユニット３３０の発行およびディスパッチ・パイプラインにすべての命令を移動した場合には、プロセッサ３００は通常の全速モード動作に戻る。ライブロック状態がもはや検出されない場合には、プロセッサ３００は、ステージングスキームの前の段階のうちの任意の段階においてこの通常の全速モード動作に戻る。
【００４９】
図４は、例示としての一実施形態による発行ユニットの詳細を示す例示としての図面である。図４に示すように、発行ユニット３３０は、一緒に発行ユニット３３０の発行およびディスパッチ・パイプラインを備える複数のレジスタ４１０〜４１４を含む。発行ユニット３３０は、さらにライブロック（またはハング）検出制御ロジック４２０、低速モード制御ロジック４３０、および発行およびディスパッチ・パイプラインを通しての命令の動きを制御するための他の制御ロジック４４０を含む。低速モード制御ロジック４３０および他の制御ロジック４４０からの出力は、ＯＲゲートウェイ４５０に送られ、このＯＲゲートは、これらレジスタ内に記憶している命令を発行およびディスパッチ・パイプライン内の次のレジスタにシフトするために（または実行ユニット３４０に命令を発行するために）、またはプロセッサ・サイクルに対する命令の処理をストールするために、ストール／シフト信号をレジスタ４１０〜４１４に出力する。
【００５０】
図４のプロセッサ・パイプラインを使用すれば、命令フェッチ・アドレスは、マルチプレクサ３０４により、プログラム・カウンタ・アドレス入力３２１、分岐ユニット３６０からの分岐アドレス入力３２２、リセット・アドレス３２５、完了ユニット３５０からのフラッシュ・アドレス３２３、または完了ユニット３５０からの割込みアドレス３２４の１つから選択される。フェッチ・アドレスは、フェッチ・ユニット３１０に送られ、このフェッチ・ユニット３１０は、メモリから適当な命令を取り出す。フェッチ・ユニット３１０は、通常、Ｌ１命令キャッシュから命令を取り出そうとし、命令がＬ１命令キャッシュ内に含まれていない場合には、フェッチ・ユニット３１０は、Ｌ２メモリ・キャッシュから命令を検索しようとする。命令がＬ２メモリ・キャッシュ内にも含まれていない場合には、フェッチ・ユニット３１０は、もっと遅いシステム・メモリから命令を検索する。
【００５１】
フェッチ・ユニット３１０が命令を取り出した後で、フェッチ・ユニット３１０は、この命令を復号ユニット３２０に送る。復号ユニット３２０は、特定の命令が何をするのかを判定するためのものである。復号ユニット３２０は、プロセッサが理解することができる各命令に対するマイクロコードを記憶している、例えば、読出し専用メモリ（ＲＯＭ）のようなプロセッサ３００内に位置するメモリ（図示せず）をチェックする。命令に対するマイクロコードは、例えばプロセッサ３００の実行ユニット３４０のような実行ユニットにより、その特定の命令をどのように実行すべきかについてのステップ・バイ・ステップ・ガイドを提供する。例えば、ロードした命令がａ＋ｂである場合には、マイクロコードは、復号ユニット３２０に、２つのパラメータａおよびｂが必要であることを通知する。次に、復号ユニット３２０は、フェッチ・ユニット３１０にａおよびｂの値に適している次の２つのメモリ位置内に位置するデータを検索するように求める。復号ユニット３２０が、命令および命令を実行するのに必要な検索したすべてのデータを復号し、「変換した」後で、データおよび復号した命令は発行ユニット３３０に送られる。
【００５２】
命令およびデータは、発行およびディスパッチ・パイプラインの第１のレジスタ４１０内に記憶され、ライブロック検出制御ロジック４２０または他の制御ロジック４４０によりストール状態が検出されない限り、命令およびデータは、命令およびデータが実行ユニット３４０に発行されるまで、各プロセッサ・サイクル中にあるレジスタから他のレジスタにパイプラインを通してシフトすることができる。図面を見やすくするために図４には１つの実行ユニット３４０しか図示していないが、最新のコンピュータは同じかまたは異なるタイプの２つ以上の実行ユニット３４０を有することを理解されたい。それ故、実行ユニット３４０は、例えば、整数、浮動点等のような同じまたは異なるタイプの１つまたは複数の実行ユニットを表している。
【００５３】
ライブロック検出制御ロジック４２０は、命令処理の終了がうまくいかないのに、所定の数のプロセッサ・サイクルが発生したか否かを判定するために完了ユニット３５０を監視する。すなわち、実行ユニット３４０が実行した命令の処理に基づいて、実行ユニット３４０は、完了ユニット３５０に例外が発生したか否か、発行およびディスパッチ・パイプラインのフラッシュを行うべきか否か、または命令をコミットすべきか否か、すなわち成功中に終了すべきか否かを知らせる。次に、完了ユニット３５０は、このような情報を発行ユニット３３０に送ることができる。
【００５４】
ライブロック検出制御ロジック４２０は、完了ユニット３５０によりコミットされている命令の間にどれだけ多くのプロセッサ・サイクルが経過したかのカウントを維持するためのカウンタ４２２または他のロジックを含むことができる。このカウンタ４２２または他のロジックは、発行およびディスパッチ・パイプラインがフラッシュされる度に、および例えば、発行ユニット３３０の発行およびディスパッチ・パイプラインに命令が再発行される度に増大することができる。カウンタ４２２または他のロジックがコミット中の命令によりリセットされないで、フラッシュしきい値Ｘの所定の値に達すると、ライブロック検出制御ロジック４２０は、低速モード制御ロジック４３０に、低速モード制御ロジック４３０がプロセッサ３００の低速制御の次の状態に移行すべきであることを示す低速モード信号をアサートする。例えば、カウントのしきい値がカウンタ値と一致した場合には、低速モード制御ロジック４３０内のカウンタ４３２は増大することができ、適当なストール信号がＯＲゲート４５０にアサートされる。
【００５５】
ストール信号は、発行およびディスパッチ・パイプライン、すなわちレジスタ４１０〜４１４を通る命令の流れを１プロセッサ・サイクル中ストールさせる。低速モード制御ロジック４３０は、プロセッサ・サイクル（カウンタ）のしきい値数ｘＮまで、以降のプロセッサ・サイクルに対するストール命令のアサートを続行することができる。ここで、Ｎは、ストールのためのプロセッサ・サイクルの基本的なしきい値数である。それ故、例えば、Ｎが４である場合には、低速モード制御ロジック４３０に低速モード信号が最初にアサートされた場合、低速モード制御ロジック４３０は、４プロセッサ・サイクルの間ストール信号をアサートし、次に発行ユニット３３０から命令を発行することができる。すなわち発行ユニット３３０からの１つの命令の発行まで、発行およびディスパッチ・パイプライン内で、命令をレジスタからレジスタ４１０〜４１４にシフトすることができる。４プロセッサ・サイクルが経過するまで次の命令を発行することはできない。ストールのためのプロセッサ・サイクルの基本的なしきい値数Ｎは、例えば、ハードウェア確認後に低速モード制御ロジック４３０内にプログラムすることができる。
【００５６】
このようにして、発行およびディスパッチ・パイプラインの速度は低減し、そのためＮ回のプロセッサ・サイクル毎に発行ユニット３３０から命令を１つだけ発行することができる。このプロセスは、ライブロック検出制御ロジック４２０により反復して行うことができ、命令がコミットされたか否か、命令の間のフラッシュの回数がコミットされたか否かを監視するために続行される。
【００５７】
低速モード信号をアサートした後で、ライブロック検出制御ロジック４２０は、そのカウンタを初期値にリセットし、コミットされた命令間の発行およびディスパッチ・パイプラインのフラッシュの回数のカウントをスタートする。フラッシュしきい値Ｘの所定の回数が、ライブロック検出制御ロジック４２０内のカウンタ４２２と一致する度に、ライブロック検出制御ロジック４２０は、低速モード信号を低速モード制御ロジック４３０にアサートする。低速モード制御ロジック４３０内のカウンタ４３３は増大し、低速モード制御ロジック４３０に、（カウンタ）ｘＮのプロセッサ・サイクルに対する発行およびディスパッチ・パイプラインを通しての命令の動きをストールさせるために新しいカウンタ値が使用される。
【００５８】
上記のＮの例示としての値、すなわち４プロセッサ・サイクルを使用した場合、ライブロック検出制御ロジック４２０によりライブロック状態が最初に検出されると、レジスタ４１０〜４１４から構成される発行およびディスパッチ・パイプライン内の命令は、４プロセッサ・サイクル中ストールする。その後で、さらにライブロック状態が検出されると、命令は、例えば８、１２および１６プロセッサ・サイクルのような４プロセッサ・サイクルの倍数の間ストールする。
【００５９】
カウンタ４３２の値が所定の重大なライブロック状態しきい値になると、低速モード制御ロジック４３０は、発行およびディスパッチ・パイプラインを直列単一ステップ・モード動作にする。この直列単一ステップ・モード動作は、処理の終了に成功するまで１つの命令しか発行することができない周知の単一ステップ・モード動作に似ている。発行およびディスパッチ・パイプライン内のすべての命令が発行されると、発行ユニット３３０は、ライブロック状態が再度検出されるまで命令が発行およびディスパッチ・パイプラインを通して流れることができる全速モード動作に戻ることができる。同様に、各スローダウン・ステージにおいて、すなわち低速モード信号のアサートの後の各低速状態において、発行およびディスパッチ・パイプライン内のすべての命令が１つの命令をコミットしないで、フラッシュのＸ倍の状態をチェックしないで移動した場合には、発行ユニット３３０は全速モードに戻ることができる。
【００６０】
図５は、もっと重度のライブロック状態が検出された場合に、低速モード制御ロジック４２０が進む種々のスローダウン・ステージの概略を示す。例示としての実施形態は、発行およびディスパッチ・パイプライン内の命令をストールするために、コミット中に命令間のフラッシュの回数の特定の倍数、およびプロセッサ・サイクルの回数の特定の倍数を使用しているが、本発明はこのような倍数に限定されないことに留意されたい。それどころか、各段階をストールするために、コミット中の命令間のフラッシュの回数の任意の値またはプロセッサ・サイクルの回数を、本発明の精神および範囲から逸脱することなしに使用することができる。実際には、ある例示としての実施形態の場合には、これらの値は、相互の倍数でなくても全然構わないし、ライブロック検出制御ロジック４２０および／または低速モード制御ロジック４３０内にプログラムされた特定の値であってもよい。
【００６１】
図５は、例示としての一実施形態によるライブロック状態検出および減速機構の動作のステージングスキームを示す例示としての図面である。図５に示すように、通常、プロセッサ、それ故プロセッサの発行ユニットは、全速モード動作５１０で動作する。第１のライブロック状態を検出した場合には、すなわち１つの命令をコミットしないでフラッシュをＸ回検出した場合には、プロセッサはプロセッサ・スローダウン・ステージ１  ５２０に移行する。プロセッサ・スローダウン・ステージ１  ５２０の場合には、発行ユニットは、各Ｎサイクル毎に命令を１つだけ発行する。
【００６２】
発行ユニットが１つの命令をコミットしないでＸ回のフラッシュの状態をチェックしないで、発行およびディスパッチ・パイプライン内のすべての命令を移動した場合には、プロセッサは全速モード動作５１０に戻る。そうでない場合には、プロセッサは発行ユニットが２Ｎサイクル毎に１つの命令を発行するプロセッサ・スローダウン・ステージ２  ５３０に移行する。
【００６３】
プロセッサ・スローダウン・ステージ２  ５３０においては、発行ユニットが１つの命令をコミットしないでＸ回のフラッシュの状態をチェックしないで、発行およびディスパッチ・パイプライン内のすべての命令を移動した場合には、プロセッサは全速モード動作５１０に戻る。そうでない場合には、プロセッサは、発行ユニットが４Ｎサイクル毎に１つの命令を発行するプロセッサ・スローダウン・ステージ３  ５４０に移行する。発行ユニットが１つの命令をコミットしないでＸ回のフラッシュの状態をチェックしないで、発行およびディスパッチ・パイプライン内のすべての命令を移動した場合には、プロセッサは全速モード動作５１０に戻る。
【００６４】
１つの命令をコミットしないでＸ回のフラッシュの状態に遭遇した場合には、プロセッサは、重度のライブロック状態にあると判定され、プロセッサ・スローダウン・ステージ４  ５５０に移行する。プロセッサ・スローダウン・ステージ４  ５５０においては、発行ユニットは強制的に直列単一ステップ・モード動作にされ、前の命令の処理が完了するまで、１つの命令だけしか発行することができない。発行ユニットが、発行およびディスパッチ・パイプライン内のすべての命令を移動した場合には、プロセッサは全速モード動作５１０に戻る。
【００６５】
例示としての実施形態の例示としての動作として、発明の背景ですでに説明した図６および図７のシナリオについて再度考えてみよう。この状況はプログラムの実行の際に頻繁に発生し、発行およびディスパッチ・パイプラインが１２の命令を含んでいると仮定する。ライブロック・ウィンドウの長さが４プロセッサ・サイクルである場合には、ライブロック状態は、第２のｓｐｒに移動命令ｍｔ  ｓｐｒＥ  Ｒ７の後の４サイクル中に、第３のｓｐｒに移動命令ｍｔ  ｓｐｒＣ  Ｒ１が発行された場合に発生する。各命令の処理が終了するのに１０プロセッサ・サイクルかかるとすれば、プロセッサが全速モードから直列単一ステップ・モードに移行する場合、発行およびディスパッチ・パイプラインからすべての命令を取り出すには約１２０サイクルかかる。
【００６６】
しかし、本明細書に記載する例示としての実施形態を使用すれば、プロセッサ・スローダウン・ステージ１  ５２０においてＮを４にセットした場合、すべての命令を取り出すのに６０プロセッサ・サイクル未満ですむ。それ故、例示としての実施形態は、直列単一ステップ・モード動作に直ちに移行する周知の機構と比較した場合、プロセッサの性能を２倍にする。プログラム中でこのタイプのライブロック状態が頻繁に発生する場合には、例示としての実施形態は、プロセッサの全体の性能に対するライブロック状態の影響を有意に最小限度まで低減する。
【００６７】
図８は、例示としての一実施形態によるライブロック状態を検出し、プロセッサ・パイプラインの動作を低減するための例示としての動作の概略を示すフローチャートである。図８に概略示す動作は、例えば、上記図３および図４の発行ユニット３３０のようなプロセッサの発行ユニット内で実行することができる。それ故、図８の種々の動作は、プロセッサのハードウェアで実施することができる。プロセッサは、単一プロセッサ・システムであってもよく、多重プロセッサ・システムであってもよい。例示としての一実施形態の場合には、プロセッサは、マイクロプロセッサまたはシステム・オン・ア・チップ（system-on-a-chip）の一部であってもよい。マイクロプロセッサまたはシステム・オン・ア・チップは、同じまたは異なる命令セットで動作している複数のプロセッサを含むことができる。例えば、マイクロプロセッサまたはシステム・オン・ア・チップは、いくつかのプロセッサが、例えば、ＲＩＳＣ命令セットのような第１の命令セットで動作していて、一方、他のプロセッサが  例えばベクトル命令セットのような第２の命令セットで動作している異質デバイスであってもよい。プロセッサを実施することができるデバイスのタイプおよび配置は、この説明または本発明の精神および範囲により制限されない。
【００６８】
図８に示すように、動作は、全速モード動作で稼働しているプロセッサ、それ故発行ユニットによりスタートする（ステップ７１０）。発行ユニットはライブロック状態が検出されたか否かを判定する（ステップ７２０）。検出されなかった場合には、動作はステップ７１０に戻り、プロセッサおよび発行ユニットは全速で稼働を続行する。ライブロック状態が検出された場合には、例えば、図４のライブロック検出制御ロジック４２０が判定したように、プロセッサおよび発行ユニットは、Ｎ個の各プロセッサ・サイクル毎に１つの命令が発行されるプロセッサ・スローダウン・ステージ１に移行する（ステップ７３０）。図８に示すように、ライブロック状態が存在するという判定は、例えば、１つの命令をコミットしないでＸ回のフラッシュが発生したことを検出するライブロック検出制御ロジック４２０をベースとすることができる。
【００６９】
その後で、発行ユニットは、ライブロック状態が再度検出されたか否かを判定する（ステップ７４０）。検出されなかった場合には、プロセッサおよび発行ユニットは、全速モード動作に戻ることができる（ステップ７１０）。ライブロック状態が再度検出された場合には、プロセッサおよび発行ユニットは、２Ｎ個のプロセッサ・サイクル毎に１つの命令が発行されるプロセッサ・スローダウン・ステージ２に移行する（ステップ７５０）。図に示すように、ライブロック状態を再度検出したか否かの判定は、例えば、１つの命令をコミットしないで２Ｘ回のフラッシュが発生したことを検出するライブロック検出制御ロジック４２０をベースとすることができる。
【００７０】
その後で、発行ユニットは、ライブロック状態が検出されたか否かを再度判定する（ステップ７６０）。ライブロック状態が再度検出されなかった場合には、プロセッサおよび発行ユニットは、全速モード動作に戻ることができる（ステップ７１０）。ライブロック状態が再度検出された場合には、プロセッサおよび発行ユニットは、４Ｎ個のプロセッサ・サイクル毎に１つの命令が発行されるプロセッサ・スローダウン・ステージ３に移行する（ステップ７７０）。図に示すように、ライブロック状態を再度検出したか否かの判定は、例えば、１つの命令をコミットしないで３Ｘ回のフラッシュが発生したことを検出するライブロック検出制御ロジック４２０をベースとすることができる。
【００７１】
その後で、発行ユニットは、ライブロック状態が再度検出されたか否かを判定する（ステップ７８０）。検出されなかった場合には、プロセッサおよび発行ユニットは、全速モード動作に戻ることができる（ステップ７１０）。ライブロック状態が再度検出された場合には、プロセッサおよび発行ユニットは、従来技術で周知のように、発行ユニットが直列単一ステップ・モード動作に入るプロセッサ・スローダウン・ステージ４に移行する（ステップ７９０）。図に示すように、ライブロック状態を再度検出したか否かの判定は、例えば、１つの命令をコミットしないで４Ｘ回のフラッシュが発生したことを検出するライブロック検出制御ロジック４２０をベースとすることができる。
【００７２】
その後で、当業者であれば周知のように、ライブロック状態は直列単一ステップ・モード動作を介して解消する。それ故、プロセッサおよび発行ユニットは、全速モード動作に戻る（ステップ７１０）。この動作は、プロセッサが動作中続行され、プロセッサがオフラインになると終了することができる。
【００７３】
それ故、例示としての実施形態は、プロセッサ内の命令の発行を遅くするための漸進的スローダウン機構を提供することにより、プロセッサ内のライブロック状態から抜け出すための機構を提供する。ライブロック検出制御ロジックは、ライブロック状態の発生を検出するためのものであり、低速モード制御ロジックは、プロセッサの発行ユニットをスローダウン・ステージスキーム内であるスローダウン・ステージから次のスローダウン・ステージに移行させるためのものである。スローダウン・ステージスキーム内の任意の段階で、ライブロック状態がもはや検出されない場合には、プロセッサおよび発行ユニットは全速モード動作に戻ることができる。このようにして、直列単一ステップ・モード動作に直ちに移行しないことによりプロセッサの性能を向上させることができる。
【００７４】
すでに説明したように、プロセッサ回路は集積回路チップのための設計の一部であってもよい。チップの設計は、グラフィカル・コンピュータ・プログラミング言語で行うことができ、コンピュータ記憶媒体（ディスク、テープ、物理ハード・ディスク、または記憶装置アクセス・ネットワーク内でのような仮想ハード・ドライブなど）に記憶することができる。設計者が、チップ、またはチップを作るために使用するホトリソグラフィ・マスクを作らない場合には、設計者は、直接的または間接的に物理的手段（例えば、設計を記憶している記憶媒体のコピーを提供するというような）により、または電子的に（例えば、インターネットを通して）結果としての設計を上記エンティティに送信する。次に、記憶している設計を、ウェハ上に形成する当該チップ設計の複数のコピーを通常含んでいるホトリソグラフィ・マスクを製造するための適当なフォーマット（例えば、ＧＤＳＩＩ）に変換することができる。ホトリソグラフィ・マスクは、エッチングされるまたは他の方法で処理されるウェハの領域（および／またはその上の層）を画定するために使用される。
【００７５】
結果として得られる集積回路チップは、裸のダイとして、またはパッケージした形で、生のウェハの形で（すなわち、複数のパッケージしていないチップを有する１つのウェハとして）製造業者により配布される。後者の場合、チップはシングル・チップ・パッケージ（マザーボードまたは他のもっと高いレベルのキャリアに取り付けられているリード線を含むプラスチック・キャリアなど）内、またはマルチチップ・パッケージ（表面相互接続または埋込相互接続の一方または両方を有するセラミック・キャリアなど）内に装着することができる。いずれの場合も、次に、チップを、他のチップ、個々の回路素子、および／または（ａ）マザーボードのような中間製品、または（ｂ）最終製品の一部としての他の信号処理装置と集積することができる。最終製品は、玩具および他のローエンド・アプリケーションからディスプレイ、キーボードまたは他の入力デバイスおよび中央プロセッサを有する高度のコンピュータ製品までの集積回路チップを内蔵する任意の製品であってもよい。さらに、集積回路チップを使用することができる最終製品としては、ゲーム・マシン、ゲーム・コンソール、ハンドヘルド・コンピューティング・デバイス、携帯情報端末、無線電話等のような通信デバイス、ラップトップ・コンピューティング・デバイス、デスクトップ・コンピューティング・デバイス、サーバ・コンピューティング・デバイス、または任意の他のコンピューティング・デバイス等がある。
【００７６】
今まで完全に機能するデータ処理システムを参照しながら本発明を説明してきたが、当業者であれば、本発明のプロセスは、命令のコンピュータ読み取り可能媒体の形で、および種々の形で配布することができ、本発明は、配布するために実際に使用する信号搬送媒体の特定のタイプが何であろうと等しく適用することができることを理解することができることに注目することが重要である。コンピュータ読み取り可能媒体の例としては、フレキシブル・ディスク、ハード・ディスク・ドライブ、ＲＡＭ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭのような記録可能なタイプの媒体、およびデジタルおよびアナログ通信リンク、例えば、無線周波数伝送および光波伝送のような伝送形態を使用する有線または無線通信リンクのような送信タイプの媒体等がある。コンピュータ読み取り可能媒体は、特定のデータ処理システム内での実際の使用のために復号されるコード化したフォーマットの形をとることができる。
【００７７】
図示し、説明するために本発明について記述してきたが、この記述は開示の形で本発明のすべてを包括するためのものでもなければ、本発明を制限するためのものでもない。当業者であれば多くの修正および変更を思い付くだろう。本発明の原理および実際の用途を最も分かりやすく説明するために、また通常の他の当業者が目的の特定の用途に適している種々に修正された種々の実施形態のために本発明を理解することができるように実施形態を選択し、記述した。
【図面の簡単な説明】
【００７８】
【図１】例示としての実施形態の種々の態様を実施することができる分散型データ処理システムの例示としての図面である。
【図２】例示としての実施形態の種々の態様を実施することができるデータ処理装置の例示としてのブロック図である。
【図３】例示としての一実施形態によるプロセッサのパイプラインを示す例示としての図面である。
【図４】例示としての一実施形態による発行ユニットの詳細を示す例示としての図面である。
【図５】例示としての一実施形態によるライブロック状態検出およびスローダウン機構の動作のためのステージングスキームを示す例示としての図面である。
【図６】２つの命令が各スレッドの１つ置きのサイクルから発行されるＳＭＴおよび二重命令発行プロセッサ・パイプラインを示す。
【図７】図６のプロセッサ・パイプライン上で実行した場合、両方のスレッドにプロセッサの特種目的のレジスタ（ＳＰＲ）にアクセスさせようとする例示としてのユーザ・コードを示す。
【図８】例示としての一実施形態によるライブロック状態を検出し、プロセッサ・パイプラインの動作を減速するための例示としての動作の概略を示すフローチャートである。
【符号の説明】
【００７９】
１００  分散型データ処理システム
１０２  ネットワーク
１０４，１０６  サーバ
１０８  記憶装置ユニット
１１０，１１２，１１４  クライアント
２００  データ処理システム
２０２  北のブリッジおよびメモリ・コントローラ・ハブ（ＮＢ／ＭＣＨ）
２０４  南のブリッジおよび入出力（１／Ｏ）コントローラ・ハブ（ＳＢ／ＩＣＨ）
２０６  処理ユニット
２０８  主メモリ
２１０  グラフィックス・プロセッサ
２１２  ローカル・エリア・ネットワーク（ＬＡＮ）アダプタ
２１６  オーディオ・アダプタ
２２０  キーボードおよびマウス・アダプタ
２２２  モデム
２２４  読出し専用メモリ（ＲＯＭ）
２２６  ハード・ディスク・ドライブ（ＨＤＤ）
２３０  ＣＤ−ＲＯＭドライブ
２３２  ユニバーサル・シリアル・バス（ＵＳＢ）ポートおよび他の通信ポート
２３４  ＰＣＩ／ＰＣＩｅデバイス
２３８，２４０  バス
３００  プロセッサ
３０４  フェッチ・アドレス・マルチプレクサ
３１０  フェッチ・ユニット
３２０  復号ユニット
３２２  分岐アドレス入力
３２４  割込みアドレス
３２５  リセット・アドレス
３３０  発行ユニット
３４０  実行ユニット
３５０  完了ユニット
３６０  分岐ユニット
３７０  メモリ・サブシステム
３８０  ホスト・バス
３９０  バス制御ユニット
３９２  主メモリ・ユニット
３９４  外部機器
４１０〜４１４  レジスタ
４２０  ライブロック検出制御ロジック
４３０  低速モード制御ロジック
４３２  カウンタ
４４０  他の制御ロジック
４５０  ＯＲゲート
５１０  全速モード動作
５２０  プロセッサ・スローダウン・ステージ１
５３０  プロセッサ・スローダウン・ステージ２
５４０  プロセッサ・スローダウン・ステージ３
５５０  プロセッサ・スローダウン・ステージ４
【図１】
0004677422.tif 000004
【図２】
0004677422.tif 000005
【図３】
0004677422.tif 000006
【図４】
0004677422.tif 000007
【図５】
0004677422.tif 000008
【図６】
0004677422.tif 000009
【図７】
0004677422.tif 000010
【図８】
0004677422.tif 000011