(57)【要約】【課題】  マルチスレッド・プロセッサを単一スレッド動作モード及び同時マルチスレッド動作モードの間で切り替えるための装置及び方法を提供する。【解決手段】  上記装置及び方法は、制御回路に応答して選択的に活動化及び非活動化し得る複数のハードウェア・スレッドのうちの少なくとも１つを有するマルチスレッド・プロセッサを利用する。該制御回路は、更に、例えば割り込みに応答して再活動化を可能にするか又は不可能にすることによって、スレッドが非活動化された後、該非活動化されたスレッドを活動化する方法を制御する機能を与える。【選択図】  図１
2004326749.tif 000002
【特許請求の範囲】
【請求項１】
論理的にパーティション化されたコンピュータにおけるマルチスレッド・プロセッサを制御する方法であって、前記マルチスレッド・プロセッサは複数のハードウェア・スレッドの実行を支援し、前記論理的にパーティション化されたコンピュータは複数のパーティション及び１つのパーティション・マネージャを含み、前記複数のハードウェア・スレッドのうちの第１ハードウェア・スレッドは前記複数のパーティションのうちの第１パーティションにあるロジカル・プロセッサに割り当てられ、前記方法は、
前記第１パーティションにおいて前記ロジカル・プロセッサをオフラインとみなすことに関連して、割り込みの表明に応答した前記第１ハードウェア・スレッドの再活動化を禁止すると共に前記第１ハードウェア・スレッドを非活動化するステップと、
前記ロジカル・プロセッサがアイドル・ループに入ったことに応答して、割り込みの表明に応答して前記第１ハードウェア・スレッドの再活動化を可能にすると共に前記第１ハードウェア・スレッドを非活動化するステップと、
を含む、方法。
【請求項２】
複数のハードウェア・スレッドの実行を支援するマルチスレッド・プロセッサと、
前記マルチスレッド・プロセッサによって実行される複数のハードウェア・スレッドのうちの第１ハードウェア・スレッドを選択的に活動化及び非活動化するように構成された制御回路と、
を含み、前記制御回路は、更に、一旦前記第１ハードウェア・スレッドが非活動化された場合に当該第１ハードウェア・スレッドが活動化され得る方法を制御するように構成される、装置。
【請求項３】
前記制御回路は少なくとも１つのレジスタを含む、請求項２に記載の装置。
【請求項４】
前記少なくとも１つのレジスタは、前記第１ハードウェア・スレッドが活動状態であるか又は非活動状態であるかを指定する第１レジスタ及び前記第１ハードウェア・スレッドが或る選択されたイベントに応答して再活動化され得るかどうかを指定する第２レジスタを含む、請求項２に記載の装置。
【請求項５】
前記制御回路は、前記第１ハードウェア・スレッドが割り込みの表明に応答して活動化され得るかどうかを制御することによって、一旦非活動化された前記第１ハードウェア・スレッドが活動化され得る方法を制御するように構成される、請求項２に記載の装置。
【請求項６】
前記割り込みは、外部割り込み、プロセッサ間割り込み、入出力割り込み、及びタイマ割り込みの少なくとも１つを含む、請求項５に記載の装置。
【請求項７】
更に、複数のパーティション及び前記複数のパーティションを制御するパーティション・マネージャを含み、
前記第１ハードウェア・スレッドは前記複数のパーティションの少なくとも１つに割り振られ、
前記パーティション・マネージャは、前記第１ハードウェア・スレッドを選択的に活動化及び非活動化するよう前記制御回路を指図し、前記第１ハードウェア・スレッドが割り込みの表明に応答して活動化され得るかどうかを制御するように構成される、
請求項５に記載の装置。
【請求項８】
前記ハードウェア・スレッドは前記複数のパーティションの１つにおいて実行中のロジカル・プロセッサと関連付けられ、
前記パーティション・マネージャは、パーティションが前記ロジカル・プロセッサをオフラインとみなすことに関連して、割り込みの表明に応答して前記第１ハードウェア・スレッドを非活動化し且つ前記ハードウェア・スレッドの再活動化を禁止するよう前記制御回路を指図するように構成される、
請求項７に記載の方法。
【請求項９】
前記パーティション・マネージャに対するプログラム・コードを実行する第２ハードウェア・スレッドが、パーティションが前記ロジカル・プロセッサをオンラインに戻すことに関連して前記第ハードウェア・スレッドを再活動化するよう前記制御回路を指図するように構成される、請求項８に記載の装置。
【請求項１０】
前記ハードウェア・スレッドは前記複数のパーティションの１つにおいて実行中のロジカル・プロセッサと関連付けられ、
前記パーティション・マネージャは、前記ロジカル・プロセッサがアイドル・ループで実行していることをパーティションが検出したことに関連して、前記第１ハードウェア・スレッドを非活動化するよう前記制御回路を指図し、割り込みの表明に応答して前記第１ハードウェア・スレッドの再活動化を可能にするように構成される、
請求項７に記載の装置。
【請求項１１】
前記制御回路は、割り込みの表明に応答して前記第１ハードウェア・スレッドを再活動化するように構成され、
前記ロジカル・プロセッサは受け取った前記割り込みを処理するように構成される、
請求項１０に記載の装置。
【請求項１２】
前記パーティション・マネージャは、更に、前記ロジカル・プロセッサが関連付けられたパーティションの状態を、前記ロジカル・プロセッサが前記アイドル・ループに入ったことに関連して保存し、前記ロジカル・プロセッサが関連付けられたパーティションの状態を前記割り込みの表明に応答して復活するように構成される、請求項１１に記載の装置。
【請求項１３】
複数のハードウェア・スレッドの実行を支援するマルチスレッド・プロセッサを制御する方法であって、
前記マルチスレッド・プロセッサによって実行される前記複数のハードウェア・スレッドのうちの第１ハードウェア・スレッドに対して再活動化条件を指定するステップと、
前記第１ハードウェア・スレッドを非活動化するステップと、
前記第１ハードウェア・スレッドに対して指定された前記再活動化条件に基づいて前記第１ハードウェア・スレッドを選択的に再活動化するステップと、
を含み、前記再活動化条件は、一旦前記第１ハードウェア・スレッドが非活動化された場合に当該第１ハードウェア・スレッドを活動化し得る方法を決定する、方法。
【請求項１４】
前記マルチスレッド・プロセッサは、前記第１ハードウェア・スレッドを選択的に活動化及び非活動化するように構成された制御回路を含み、
前記制御回路は、更に、前記再活動化条件に基づいて前記第１ハードウェア・スレッドを再活動化するように構成される、請求項１３に記載の方法。
【請求項１５】
前記制御回路は少なくとも１つのレジスタを含む、請求項１３に記載の方法。
【請求項１６】
前記少なくとも１つのレジスタは、前記第１ハードウェア・スレッドが活動状態であるか又は非活動状態であるかを指定する第１レジスタ及び前記再活動化条件を指定する第２レジスタを含む、請求項１３に記載の方法。
【請求項１７】
前記再活動化条件は、前記第１ハードウェア・スレッドが割り込みの表明に応答して活動化され得るかどうかを指定する、請求項１３に記載の方法。
【請求項１８】
前記割り込みは、外部割り込み、プロセッサ間割り込み、入出力割り込み、及びタイマ割り込みの少なくとも１つを含む、請求項１７に記載の方法。
【請求項１９】
前記マルチスレッド・プロセッサは、複数のパーティション及び前記複数のパーティションを制御するパーティション・マネージャを含むコンピュータに配置され、
前記再活動化条件の指定及び前記第１ハードウェア・スレッドの非活動化が前記パーティション・マネージャによって遂行される、請求項１７に記載の方法。
【請求項２０】
前記第１ハードウェア・スレッドは、前記複数のパーティションの１つにおいて実行中のロジカル・プロセッサと関連付けられ、
前記パーティション・マネージャは、パーティションが前記ロジカル・プロセッサをオフラインとみなすことに関連して、割り込みの表明に応答して前記第１ハードウェア・スレッドの再活動化を禁止する再活動化条件を指定するように構成される、
請求項１９に記載の方法。
【請求項２１】
更に、パーティションが前記ロジカル・プロセッサをオンラインに戻すことに関連して、前記パーティション・マネージャに対してプログラム・コードを実行する第２ハードウェア・スレッドを使用して前記第１ハードウェア・スレッドを再活動化するステップを含む、請求項２０に記載の方法。
【請求項２２】
前記第１ハードウェア・スレッドは、前記複数のパーティションの１つにおいて実行中のロジカル・プロセッサと関連付けられ、
前記ロジカル・プロセッサがアイドル・ループにおいて実行していることをパーティションが検出するステップと、
割り込みの表明に応答して前記第１ハードウェア・スレッドの再活動化を可能にする再活動化条件を指定するステップと、
を更に含む、請求項１９に記載の方法。
【請求項２３】
前記第１ハードウェア・スレッドに対して指定された前記再活動化条件に基づいて前記第１ハードウェア・スレッドを選択的に再活動化するステップは、割り込みの表明に応答して前記第１ハードウェア・スレッドを再活動化するステップを含み、
前記ロジカル・プロセッサは受け取った前記割り込みを処理するように構成される、請求項２２に記載の方法。
【請求項２４】
更に、前記ロジカル・プロセッサが関連付けられたパーティションの状態を、前記ロジカル・プロセッサが前記アイドル・ループに入ったことに関連して保存するステップと、
前記ロジカル・プロセッサが関連付けられたパーティションの状態を前記割り込みの表明に応答して復活するステップと、
を更に含む、請求項２３に記載の方法。
【請求項２５】
前記マルチスレッド・プロセッサはオペレーティング・システムを含むコンピュータに配置され、
前記第１ハードウェア・スレッドは、１つのロジカル・プロセッサと関連付けられ、
前記再活動化条件の指定及び前記第１ハードウェア・スレッドの非活動化は前記オペレーティング・システムによって遂行される、
請求項１７に記載の方法。
【請求項２６】
前記オペレーティング・システムは、前記ロジカル・プロセッサをオフラインとみなすことに関連して、割り込みの表明に応答して前記第１ハードウェア・スレッドの再活動化を禁止する再活動化条件を指定するように構成される、請求項２５に記載の方法。
【請求項２７】
前記オペレーティング・システムは、前記ロジカル・プロセッサがアイドル・ループに入ったことに関連して、割り込みの表明に応答して前記第１ハードウェア・スレッドの再活動化を許可する再活動化条件を指定するように構成される、請求項２５に記載の方法。
【請求項２８】
複数のハードウェア・スレッドの実行を支援するマルチスレッド・プロセッサによって実行された複数のハードウェア・スレッドのうちの第１ハードウェア・スレッドに対して再活動化条件を指定すること、前記第１ハードウェア・スレッドを非活動化すること、及び前記第１ハードウェア・スレッドに対して指定された前記再活動化条件に基づいて前記第１ハードウェア・スレッドを選択的に再活動化することによって前記マルチスレッド・プロセッサを制御するように構成されたプログラム・コードと、
前記プログラム・コードを保持する信号保持媒体と、
を含み、前記再活動化条件は、一旦前記ハードウェア・スレッドが非活動化された場合に当該第１ハードウェア・スレッドを活動化し得る方法を決定する、コンピュータ・プログラム。
【請求項２９】
前記信号保持媒体は記録可能な媒体及び伝送媒体の少なくとも１つを含む、請求項２８に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ及びコンピュータ・ソフトウェアに関し、詳しく云えば、マルチスレッド・プロセッサ及びそれを単一スレッド操作モード及び同時マルチスレッド操作モードの間で切り替えることに関するものである。
【背景技術】
【０００２】
現代社会においてコンピュータに関するの信頼性が絶えず向上する場合、コンピュータ・テクノロジは、増大する要求に遅れないように多くの面で進歩しなければならない。重要な研究及び開発活動の１つの特定な主題は並列処理、即ち、複数のタスクの並列した実行である。
【０００３】
増大した並列処理を促進するために、多くのコンピュータ・ソフトウェア及びハードウェア・テクノロジが開発された。ソフトウェアの観点から、複数のタスクが実質的に同時に遂行されるように、コンピュータ・プログラムを複数の「スレッド」で同時に実行することを可能にするマルチスレッド・オペレーティング・システム及びカーネルが開発された。スレッドは、一般に、プログラムに対する独立した実行パスを表す。例えば、ｅ−ｃｏｍｍｅｒｃｅコンピュータ・アプリケーションに対しては、各顧客のｅ−ｃｏｍｍｅｒｃｅトランザクションが別々のスレッドで処理されるように、種々のスレッドが種々の顧客に割り当てられ得る。
【０００４】
ソフトウェアの観点から、或るコンピュータはロジカル・パーティショニングの概念を実装している。この概念では、単一の物理的コンピュータが実質的に同様の複数の且つ独立した「仮想」コンピュータ（ロジカル・パーティションと呼ばれる）を操作することを可能にされる。これは、その物理的コンピュータにおける種々のリソース（例えば、プロセッサ、メモリ、入出力装置）が種々のロジカル・パーティションに割り振られることによるものである。各ロジカル・パーティションは別々のオペレーティング・システムを実行し、しかも、ユーザの観点及びロジカル・パーティションにおいて実行されるソフトウェア・アプリケーションの観点では、完全に独立したコンピュータとして動作する。
【０００５】
ハードウェアの観点では、コンピュータは、ワークロード容量の増加に備えるためには多数のマイクロプロセッサに益々依存している。更に、多数のスレッドを並列して実行する機能を支援するマイクロプロセッサが開発されており、それは、多数のマイクロプロセッサの使用を通して得られる多くの同等のパフォーマンス・ゲインを効果的に与える。マルチスレッド・プロセッサの１つの形態は、例えば、多数のスレッドの並行又は同時実行をハードウェアで支援する。その機能は、同時マルチスレッド化（simultaneous multithreading &#8211; ＳＭＴ）と呼ばれることが多い。
【０００６】
ＳＭＴプロセッサでは、複数のハードウェア・スレッドがそのプロセッサにおいて定義され、各スレッドがそのスレッドに割り当てられた特定のタスクを実行することができる。演算論理ユニット、固定小数点ユニット、ロード・ストア・ユニット、浮動小数点ユニット等のような適当な数の実行ユニットが、複数のスレッドからの命令を並行して実行するように構成される。一般には、汎用レジスタ（ＧＰＲ）及び設計済みの状態を表す特殊目的レジスタ（ＳＰＲ）のほとんどがプロセッサにおける各ハードウェア・スレッドの代わりに複製される。しかし、或るＳＰＲ、オンチップ・キャッシュ、変換索引緩衝機構（translation look-aside buffer）、及び他の非設計済みリソースのような他のオンチップ・リソースが一般には複数のスレッドによって共用され、１つ又は複数のハードウェア・スレッドが長い待ち時間という事態で（例えば、キャッシュ・ミスに伴って）停止するとき、他のスレッドが発展し続け、チップ・リソースのいくつかを消費し続け得るという期待がある。
【０００７】
多くのワークロードに対して、ＳＭＴはコンピュータ・システムの全体的なパフォーマンス（即ち、全体的なスループット）を改善する。しかし、この改善は、ＳＭＴプロセッサにおいて実行される各タスクがオンチップ・リソースのいくつかを同じプロセッサ上で同時に走る他のタスクと共用する必要があるので、単一のタスクに対するターンアラウンド・タイムを犠牲にすることが多い。例えば、他のハードウェア・スレッドにおいて実行されるタスクのキャッシュ・アクセス・パターンが特定のタスクのパフォーマンスに悪影響を与えることがあり得るし、その最終的な結果は個々の各タスクに対する長い、しかも、予測し難いことの多いターンアラウンド・タイムを生じることがあり得る。しかし、或るアプリケーション、例えば、或る科学的及び技術的アプリケーションでは、個々のタスクの高速且つ予測可能なターンアラウンド・タイムに対する必要性が高速のシステム全体のスループットに対する必要性を超えることがある。そのような場合、マルチスレッド化がシステム・パフォーマンスを実際に妨げることがあり得る。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
或るマルチスレッド化プロセッサ設計は、単一スレッド・モードにおいて実行する能力も支援し、従って、ＳＭＴを効果的に使用不可にし、より予測可能なターンアラウンド・タイムでもってタスクが実行されることを可能にする。しかし、そのような機能に対する支援は、単一スレッド・モード及びマルチスレッド・モードの間の切り替えがシステム再起動又は初期プログラム・ロード（ＩＰＬ）を介して生じる。しかし、多くの高パフォーマンス・コンピュータ・システムに関する可用性の要求を考慮すると、システム再起動は非常に望ましくなく、多くの顧客にとって受け入れ難いことが多い。
【０００９】
更に、ＳＭＴモードでプロセッサを操作することが望ましいときでも、プロセッサにおける種々のハードウェア・スレッドによる共用リソースの消費のために依然として非能率なことが生じ得る。例えば、ハードウェア・スレッドがアイドル・ループを実行しつつあるときでも、従って、有用な活動をまったく遂行していないときでも、共用リソースは依然としてハードウェア・スレッドによって消費されており、従って、そのようなリソースを使用し得るかもしれない他の活動状態のスレッドからリソースを取り上げることになる。その結果、システムに代わって有用な作業を遂行し得ないスレッドによるリソースのこのような消費のために、次善のパフォーマンスが生じ得る。
【００１０】
マルチスレッド・プロセッサにおいて実行しているハードウェア・スレッドによって消費されるリソース全体に十分な制御を施す能力を促進すること、特に、マルチスレッド・プロセッサにおける１つ又は複数のそのようなスレッドにリソースを非効率的に割り振ることにより生じ得る非効率性を減じることが非常に望ましい。
【課題を解決するための手段】
【００１１】
本発明は、マルチスレッド・プロセッサを利用する装置、コンピュータ・プログラム、及び方法を提供することによって従来技術に関連したこれらの及び他の問題点を処理する。なお、このマルチスレッド・プロセッサは、制御回路に応答して選択的に活動化及び非活動化され得る複数のハードウェア・スレッドのうちの少なくとも１つのハードウェア・スレッドを有する。更に、制御回路は、非活動状態のスレッドが非活動化された後、一般には、そのスレッドに対する再活動化条件の指定を通して非活動状態のスレッドを活動化し得る方法を制御する機能を提供する。
【００１２】
ハードウェア・スレッドが活動状態であろうと或いは非活動状態であろうと、それを制御し得る制御回路の提供及び非活動状態のスレッドを活動化し得る方法の提供を通して、多くの有用なパフォーマンス向上が実現され得る。例えば、本発明に適合した或る実施例は、スレッドが割り込みに応答して再活動化され得るかどうかを制御することによって非活動状態のスレッドを活動化し得る方法を制御する能力を支援する。非活動状態のスレッドが割り込みに応答して活動化されることを可能にすることは、例えば、わずかなシステム・オーバヘッドでもってスレッドが効果的に「オフライン」と見なされることを可能にし、そのスレッドによって消費されたいずれのプロセッサ・リソースも他のスレッドによって利用されることを可能にするが、依然として、非活動化されたスレッドがオペレーションを再開するために割り込みを通して急速に且つ効率的に再活動化されることを可能にする。このように、例えば、スレッドがアイドル・ループを実行することによって消費される共用リソースが他のスレッドによる使用のために開放されることを可能にすることが可能であり、依然として、比較的急速に且つわずかなシステム・オーバヘッドでもってそのスレッドが再活動化される（そして、共用リソースが再獲得される）ことを可能にする。
【００１３】
それとは逆に、割り込みに応答してスレッドを活動化する機能を使用不可にすることは、マルチスレッド・プロセッサにおいて依然として活動状態であるいずれのスレッドも更なる効率的なオペレーションのために長期間にわたって或る共用リソースを開放する機能を支援し得る。更に、保護が割り込みを介した再活動化に対して差し支えない場合、スレッドは、システム再起動を必要とすることなく活動化又は非活動化されることが多い。このように、ハードウェア・スレッドの長期にわたる非活動化の場合でも、システム・アベイラビリティは滅多に悪影響を受けない。
【００１４】
本発明を特徴付けるこれら及び他の利点及び特徴は、本願の「特許請求の範囲」において示される。しかし、本発明並びにその使用を通して得られる利点及び目的の良好な理解のためには、図面及び発明の実施例で示された説明を参照すべきであろう。
【発明を実施するための最良の形態】
【００１５】
以下で開示される実施例は、マルチスレッド・プロセッサにおける選択されたハードウェア・スレッドの動的活動化及び非活動化、並びに一旦非活動化された非活動状態のハードウェア・スレッドを活動化する方法の選択的制御を支援する。
【００１６】
本発明に適合したマルチスレッド・プロセッサは、典型的には、同時マルチスレッド・プロセッサであるが、その代替えとして、他の形式のマルチスレッド・プロセッサが使用可能である。更に、実際には、本発明に適合したマルチスレッド・プロセッサにおいて、任意の数のハードウェア・スレッドが支援され得るし、任意の数のそのようなハードウェア・スレッドが、本願明細書に示された方法で選択的に活動化され得る。例えば、図示の実施例では、同時マルチスレッド（ＳＭＴ）プロセッサが２つのハードウェア・スレッドを含むものとして開示されるが、ＳＭＴモードと単一スレッド（ＳＴ）モードとの間でプロセッサを切り替えるように、１つのそのようなスレッドが選択的に非活動化されることも可能である。
【００１７】
一旦非活動化された非活動状態のハードウェア・スレッドを活動化する方法の選択的制御は、典型的には、特定のスレッド又はプロセッサに対して指定された再活動化条件に基づいており、本発明に適合した多くの方法で変更可能である。例えば、図示の実施例では、再活動化条件は、プロセッサ間割り込み（ＩＰＩ）、Ｉ／Ｏ割り込み、タイマ又はデクリメンタ割り込み等のような割り込みに応答するスレッド活動化の選択的な使用可能性（enablement）に基づく。しかし、活動化されるべきスレッドの能力を制限する他の制御がその代替え方法として使用され得ることは明らかであろう。
【００１８】
図面を参照すると、幾つかの図を通して同じ参照番号は同じ部品を示す。図１は、本発明に適合した論理的にパーティション化されたコンピュータ１０における主要なハードウェア・コンポーネントを示す。コンピュータ１０は、一般的に、例えば、ネットワーク・サーバ、中規模コンピュータ、メインフレーム・コンピュータ等（例えば、ＩＢＭｅＳｅｒｖｅｒ （商標）コンピュータ）のような多数のマルチユーザ・コンピュータのいずれかを表す。しかし、本発明は、他のコンピュータ及びデータ処理システムにおいて、例えば、ワークステーション、デスクトップ・コンピュータ、ポータブル・コンピュータ等のような単一ユーザ・コンピュータにおいて、或いは、他のプログラム可能電子装置（例えば、組み込み型コントローラ等を組み込んだ装置）において実装可能である。更に、本発明は、非論理的にパーティション化されたマルチスレッド・コンピュータと関連しても利用可能である。
【００１９】
コンピュータ１０は、一般には、バス１６を介してメモリ１４に結合された１つ又は複数のプロセッサ１２を含む。各プロセッサ１２は、複数のハードウェア・スレッド１８を組み込むものとして示されたシステム・プロセッサ１２ａのような単一スレッド・プロセッサとして、又はマルチスレッド・プロセッサとして実装可能である。マルチスレッド・プロセッサ１２ａにおける各ハードウェア・スレッド１８は、ほとんどの部分に関して、そのコンピュータに存在するソフトウェアにより独立したプロセッサのように扱われる。この点について、単一スレッド・プロセッサは、本発明の目的のためには、単一のハードウェア・スレッド、即ち、単一の独立した実行ユニットを組み込んだものと見なされるであろう。しかし、コンピュータにおける複数タスクの並列的な実行を更に支援するために単一スレッド・プロセッサ及びマルチスレッド・プロセッサの両方に関連してソフトウェア・ベースのマルチスレッド化又はマルチタスキングが使用され得ることは明らかであろう。
【００２０】
更に、図１に示されるように、１つ又はそれ以上のプロセッサ１２（例えば、プロセッサ１２ｂ）がサービス・プロセッサとして実装され得る。なお、サービス・プロセッサは、特殊なファームウェア・コードを実行してシステム初期プログラム・ロード（ＩＰＬ）を管理するために及びシステム・ハードウェアをモニタし、診断し、そして構成するために使用される。一般に、コンピュータ１０は、１つのサービス・プロセッサ及び複数のシステム・プロセッサを含むであろう。それらのプロセッサは、コンピュータに存在するオペレーティング・システム及びアプリケーションを実行するために使用されるが、本発明はこの特定なインプリメンテーションに限定されない。或るインプリメンテーションでは、サービス・プロセッサが、バス１６を介する以外の方法で、コンピュータにおける種々の他のハードウェア・コンポーネントに結合され得る。
【００２１】
メモリ１４は、１つ又はそれ以上のレベルのメモリ装置、例えば、ＤＲＡＭベースのメイン・ストレージ、及び１つ又はそれ以上のレベルのデータ、命令、及び（又は）コンビネーション・キャッシュを含み得る。或るキャッシュは、当業界では周知のような個々のプロセッサ又は複数のプロセッサをサービスする。更に、メモリ１４は、バス２０を介して多くのタイプの外部装置、例えば、１つ又はそれ以上のネットワーク・アダプタ２２（コンピュータをネットワーク２４とインターフェースするためのアダプタ）、１つ又はそれ以上のストレージ・コントローラ（コンピュータを１つ又はそれ以上のストレージ装置２８とインターフェースするためのコントローラ）、及び１つ又はそれ以上のワークステーション・コントローラ（複数のワークステーション・アダプタを介して１つ又はそれ以上の端末又はワークステーション３２とインターフェースするためのコントローラ）に結合される。
【００２２】
図１は、コンピュータ１０における論理的にパーティション化されたコンピューティング環境をインプリメントする場合に利用される一次ソフトウェア・コンポーネント及びリソースを更に詳細に示す。それは、パーティション・マネージャ又はハイパーバイザ３６によって管理される複数のロジカル・パーティション３４を含む。この業界では周知のように、任意の数のロジカル・パーティションが支援され得るし、コンピュータに常時存在するロジカル・パーティションの数は、パーティションがコンピュータに加えられ又はコンピュータから排除されるとき、動的に変更可能である。
【００２３】
図示されたＩＢＭ ｅＳｅｒｖｅｒベースのインプリメンテーションでは、パーティション・マネージャ３６は２層のプログラム・コードから成る。本願では非ディスパッチ可能部分３８と呼ばれる第１層が、コンピュータ１０のファームウェア又はライセンス内部コード（ＬＩＣ）内に実装される。これは、上位層、例えば、オペレーティング・システムをハードウェア・アクセスの詳細から分離しているけれども、種々のハードウェア・コンポーネントに対する低レベル・インターフェースを提供するために利用される。そのファームウェアは、サービス・プロセッサ１２ｂのようなサービス・プロセッサともコミュニケーションを行い得る。非ディスパッチ可能部分３８は、コンピュータ１０に対して多くの低レベルのパーティション管理機能、例えば、ページ・テーブル管理等を提供する。更に、非ディスパッチ可能部分３８はタスクの概念を持たず、主として上位層のソフトウェアからのファンクション・コールを介してアクセス可能である。
【００２４】
パーティション・マネージャ３６におけるプログラム・コードの第２層は、ここでは、ディスパッチ可能部分４０と呼ばれる。タスクの概念を持たず、リロケーション・オフでもって実行され、しかも上位層のソフトウェアからのファンクション・コールを介してアクセス可能である非ディスパッチ可能部分３８とは対照的に、ディスパッチ可能部分４０はタスクの概念（すべてのオペレーティング・システムのような）を有し、リロケーション・オンでもって実行される。ディスパッチ可能部分４０は、典型的には、それがユーザから隠蔽されていることを除けば、パーティションとほぼ同様に実行される。ディスパッチ可能部分４０は、一般には、パーティションの作成及び削除、同時的Ｉ／Ｏメンテナンス、種々なパーティション３４へのプロセッサ、メモリ、及び他のハードウェア・リソースの割り振り等のような高レベル・パーティション管理オペレーションを管理する。
【００２５】
一般に、各ロジカル・パーティション３４は、コンピュータ１０における使用可能なリソースの一部分を静的に及び（又は）動的に割り振られる。例えば、各ロジカル・パーティションは、１つ又はそれ以上のプロセッサ１２、及び（又は）１つ又はそれ以上のハードウェア・スレッド１８、並びに、使用可能なメモリ・スペースの一部分を割り振られ得る。ロジカル・パーティションは、１つの所与のプロセッサが複数のロジカル・パーティションによって利用されるように、プロセッサのような特定のハードウェア・リソースを共用することができる。それとは別に、ハードウェア・リソースが一時に１つのロジカル・パーティションにしか割り振られないこともあり得る。
【００２６】
更なるリソース、例えば、大容量記憶装置、バックアップ記憶装置、ユーザ入力、ネットワーク接続、及びそれらに対するＩ／Ｏアダプタが、一般には、当業界においては周知の方法で１つ又はそれ以上のロジカル・パーティションに割り振られる。複数のロジカル・パーティションが同じバス上のリソースを共用する場合、リソースは多くの方法で、例えば、バスごとを基準に又はリソースごとを基準に割り振られ得る。或るリソースは、一時に複数のロジカル・パーティションに割り振られることもあり得る。
【００２７】
各ロジカル・パーティション３４は、非パーティション・コンピュータのオペレーティング・システムと同じ方法でロジカル・パーティションの主要なオペレーションを制御するオペレーティング・システム４２を利用する。例えば、各オペレーティング・システム４２は、インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なＯＳ／４００オペレーティング・システムを使用して実装され得る。
【００２８】
各ロジカル・パーティション３４は、別々の又は独立したメモリ・スペースにおいて実行され、従って、各ロジカル・パーティションは、そのような各ロジカル・パーティションにおいて実行される各ユーザ・アプリケーション（user app）４４の観点から、独立した非パーティション・コンピュータとほぼ同様に作用する。このように、ユーザ・アプリケーションは、一般には、パーティション化された環境において使用するための如何なる特別な構成も必要としない。
【００２９】
個別の仮想コンピュータとしてロジカル・パーティション３４の性質を仮定すると、ロジカル・パーティションが別々の物理的マシン上にあるかのようにそれらロジカル・パーティションが相互にコミュニケーションを行うことを可能にするようパーティション間のコミュニケーションを支援することが望ましい。このように、或るインプリメンテーションでは、ロジカル・パーティション３４がイーサネット（登録商標）・プロトコルのようなネットワーキング・プロトコルを介して相互に通信することを可能にするよう非ディスパッチ可能部分３８における仮想ローカル・エリア・ネットワーク（ＬＡＮ）４６を支援することが望ましい。パーティション相互間のコミュニケーションを支援する別の方法も本発明に適合して支援され得るであろう。
【００３０】
他の論理的にパーティション化された環境が本発明に適合して利用され得ることは明らかであろう。例えば、いずれのパーティション３４からも分離しているディスパッチ可能部分４０を利用するよりもむしろ、ディスパッチ可能部分の機能が１つ又はそれ以上のロジカル・パーティションに組み込まれてもよい。
【００３１】
一般に、本発明の実施例を実装するために実行されるルーチンは、それがオペレーティング・システム又は特定のアプリケーション、コンポーネント、プログラム、オブジェクト、命令のモジュール又はシーケンス、或いはそれらのサブセットの一部として実装されようとも、ここでは、「コンピュータ・プログラム・コード」又は単に「プログラム・コード」と呼ばれるであろう。プログラム・コードは、一般に、コンピュータにおける種々のメモリ及び記憶装置にいつも存在する１つ又はそれ以上の命令を含む。それらの命令は、コンピュータにおける１つ又はそれ以上のプロセッサによって読み取られそして実行されるとき、本発明の種々の局面を具体化したステップ又は素子を実行するに必要なステップをそのコンピュータに実行させる。更に、本発明は十分に機能するコンピュータ及びコンピュータ・システムに関連して説明したし、以後も説明するけれども、本発明の種々の実施例が種々な形式におけるプログラム製品として配布され得ること及びその配布を実際に行うために使用される信号保持媒体の特定のタイプに関係なく本発明が等しく適用することは当業者には明らかであろう。信号保持媒体の例は、揮発性及び不揮発性のメモリ装置、フロッピ及び他の取り外し可能ディスク、光ディスク（例えば、ＣＤ−ＲＯＭ、ＤＶＤ等）、その他、並びに、ディジタル及びアナログ通信リンクのような伝送タイプの媒体のような記録可能タイプの媒体を含むが、それに限定されない。
【００３２】
更に、以下で説明される種々なプログラム・コードが、本発明の特定の実施例ではそれを実装するアプリケーション又はソフトウェア・コンポーネントに基づいて識別可能である。しかし、単に、便宜的に下記のようないくつかの特定のプログラム専門語が使用されており、従って、本発明が、そのような専門語によって識別及び（又は）暗示される特定のアプリケーションのみにおける使用に限定されるべきではないことは明らかである。更に、コンピュータ・プログラムをルーチン、プロシージャ、メソッド、モジュール、オブジェクト等に編成する一般的には無数の方法、並びに、プログラム機能を典型的なコンピュータ（例えば、オペレーティング・システム、ライブラリ、ＡＰＩ、アプリケーション、アプレット等）に存在する種々のソフトウェア層に割り振る種々の方法を考慮すると、本発明が、個々に開示されたプログラム機能に関する特定の編成及び割り振りに限定されないことも明らかである。
【００３３】
図１に示された例示的環境が本発明を限定することを意図するものではないことは当業者には明らかであろう。実際に、本発明の範囲から逸脱することなく、他の代替えハードウェア及び（又は）ソフトウェア環境が使用可能であることも当業者には明らかであろう。
【００３４】
上述のように、図示の実施例は、マルチスレッド・プロセッサを利用するシステムにおいて生じ得る多くの問題を処理するために利用可能である。１つのそのような問題は、マルチスレッド環境において実行されるときの個々のタスクに対する遅い且つ不確実なターン・アラウンド・タイムの結果として生じる。単一のタスクに対する信頼性の高い且つ高速のターン・アラウンドが望ましいとき、例えば、単一スレッド（ＳＴ）モードにおいてプロセッサを操作することによって、１つ又はそれ以上のスレッドを使用不可にするようにマルチスレッド・プロセッサに対するモードを切り替えることが望ましい。更に、システムをリブートする必要なくそのモード切り替えが生じることが望ましいことが多い。更に、システムをリブートする必要なく単一スレッド・モードからマルチスレッド（例えば、同時マルチスレッド（ＳＭＴ））モードに切り替えることを同様に可能にすることも望ましいことがわかった。
【００３５】
取り組むべきもう１つの問題は、システムに代わって生産的な作業を行っていないハードウェア・スレッドによってマルチスレッド・プロセッサにおける共用リソースを消費することである。以下で更に明らかになるように、ハードウェア・スレッドは、一般に、オペレーティング・システムにとっては独立のロジカル・プロセッサのように見える。このように、スレッドがオペレーティング・システムのアイドル・ループで動作していて如何なる有用な作業もしていないとき、そのスレッドは、プロセッサの或る共用リソースを消費しつつあり、そのプロセッサにおける他のスレッドのパフォーマンスに影響を与えている。従って、スレッドがアイドル状態にあるときにオペレーティング・システムがプロセッサを単一スレッド・モードに切り替えること、及び作業がロジカル・プロセッサにとって使用可能であるとき又はロジカル・プロセッサが割り込みをサービスする必要があるときにそれがプロセッサをＳＭＴモードに戻すことを可能にすることが望ましい。しかし、プロセッサを単一スレッド・モードにすることは、オペレーティング・システムにとって、あたかもプロセッサがオフラインになろうとしているように見え得ることがわかった。オペレーティング・システムの観点から、ロジカル・プロセッサをオフラインとみなすことは、一般に、費用を要するオペレーションである。更に、ロジカル・プロセッサをオフラインとみなすこと及び作業が必要であるときにそれをオンライン状態に戻すことのオーバヘッドは、スレッドがアイドル・ループに入ったときにそのスレッドを使用不可にすることによって何も得られないようなことになり得る。スレッドが有用な作業を遂行していない短い期間が共用リソースを他のスレッドにより自由に使用させるためにスレッドの非活動化をトリガするよう、わずかなオーバヘッドでもってオペレーティング・システムが単一スレッド・モードとＳＭＴモードとの間を切り替えることを可能にする機構を設けることが望ましい。
【００３６】
従って、図示の実施例では、システム再起動及びコンピュータの可用性に関する他の制限を必要とすることなく単一スレッド・モードとＳＭＴモードとの間でマルチスレッド・プロセッサを切り替える機能を設けることが望ましい。更に、非活動状態のスレッドが残りのオペレーティング・システムにとってオンラインであるかのように見えるような方法で活動状態のスレッドのパフォーマンスを高めるためにプロセッサを単一スレッド・モードにする機能を支援することが望ましい。
【００３７】
これらの懸念を処理するために、図示の実施例は、プロセッサが単一スレッド・モードで実行するのか又はＳＭＴモードで実行するのかを制御する、ここでは「制御」レジスタ又は「ＣＴＲＬ」レジスタと呼ばれるパー・プロセッサ（per-processor）レジスタを支援する。更に、非活動状態のスレッドを、例えば、タイマ割り込み又はデクリメンタ割り込みのような外部割り込み、プロセッサ間割り込み、Ｉ／Ｏ割り込み等を介して回復させる方法を制御するために、別のパー・プロセッサ・レジスタが設けられる。後者のレジスタは、図示の実施例では、ハードウェア・インプリメンテーション依存（ＨＩＤ）レジスタと呼ばれ、特定のスレッドに対して指定された再活動化条件を記憶するのがこのレジスタである。以下において更に明らかになるように、割り込みが使用不可にされるとき、一般に、スレッドは、そのシステムにおける別の活動状態のスレッドによる明示的アクションによってのみ回復可能である。
【００３８】
前述の機構を使用すると、長期間にわたってプロセッサを単一スレッド・モードで実行させることが望ましいとオペレーティング・システムが見なす場合、そのオペレーティング・システムは、そのプロセッサにおける１つ又はそれ以上のスレッドを非活動状態にするように選択し得る。そこで、オペレーティング・システムはターゲット・スレッドに対応する論理的プロセッサをオフラインとみなし得る。ロジカル・プロセッサをオフラインとみなす部分として、オペレーティング・システムは、例えば、再活動化条件を指定することによって割り込みを使用不可にするために、スレッドが、ＨＩＤレジスタの適切な制御を介して外部割り込みソースにより割り込みされないことを保証し得る。そこで、スレッドはデッド・モードに入り、それによって、スレッドは、プロセッサにおける活動状態のスレッドによる明示的オペレーションよってのみ回復可能である。そのようなモードでは、デッド・スレッドに対してはハードウェア又はソフトウェアのいずれにおいても状態は維持されない。そこで、スレッドは、適切なビットをＣＴＲＬレジスタに書き込むことによってそれ自体を非活動状態にすることができる。
【００３９】
スレッドに対応するロジカル・プロセッサがアイドル・ループに入るときにいつでも上記の他の問題を処理するために、オペレーティング・システムは、ＣＴＲＬレジスタに書き込むことによってそのスレッドを非活動状態にし得る。更に、オペレーティング・システムは、スレッド外部割り込み、例えば、Ｉ／Ｏ割り込み、プロセッサ間割り込み、タイマ割り込み等によって回復されることを再活動化条件が指定するようにＨＩＤレジスタをプログラムし得る。そこで、スレッドは「休止（dormant）」モードに置かれる。このモードでは、状態がソフトウェアによって維持されるが、ハードウェアが休止スレッドからすべてのリソースを取り去り、それらを１つ又はそれ以上の活動状態のスレッドに割り振る。割り込みがトリガされるときにいつでも、スレッドが回復され、対応するロジカル・プロセッサがアイドル・ループに戻され、それが、そのトリガされた割り込みの結果として行うべき何らかの作業を有するかどうかを決定する。例えば、デクリメンタ又はタイマが満了するか又はＩ／Ｏ割り込みが未処理になる場合、スレッドが回復され、割り込みの結果として何らかの作業が必要であるかどうかを対応するロジカル・プロセッサが決定することを可能にする。更に、別のプロセッサがタスクを、非活動状態のスレッドに対応するロジカル・プロセッサにとって使用可能にしたい場合、別のプロセッサが、プロセッサ間割り込みを非活動状態のスレッドに送ることによってその非活動状態のスレッドを回復させ、ロジカル・プロセッサをそれのアイドル・ループに入らせて更なる作業をチェックさせる。更に、望ましい場合に、スレッドは、デッド・スレッドの場合のように、システムにおける他のスレッドによって明確に回復可能である。
【００４０】
次に図２を参照すると、論理的にパーティション化されたプロセッサ１０（図１）における本発明の１つの特定なインプリメンテーションが示される。特に、図２は、スレッドＴ０及びＴ１として指定された一対のハードウェア・スレッド５２を含む例示的なマルチスレッド・プロセッサ５０を示す。これらのスレッドは、参照番号５４で示された複数の共用リソースを共用するように構成される。各スレッドは、多数の専用リソース、例えば、一組の汎用レジスタ（ＧＰＲ）５６及び特殊目的レジスタ（ＳＰＲ）５８を有する。更に、各スレッドは、例えば、データ・キャッシュ及び（又は）命令キャッシュにようなオンチップ・キャッシュ・メモリ６０を含む種々の共用リソース５４を共用し得る。更に、種々のＳＰＲ６２及びストア・キュー６４、エフェクティブ・ツー・リアル・アドレス・トランスレーション（ＥＲＡＴ）テーブル６６、変換索引緩衝機構（ＴＬＢ）６８等がスレッドＴ０及びＴ１によって共用され得る。本願で説明されたように、種々なタイプのリソースがスレッド間で共用され得る。
【００４１】
更に、ＣＴＲＬレジスタ７２及びＨＩＤレジスタ７４を含む制御回路７０がマルチスレッド・プロセッサ５０に配置され、スレッドＴ０及びＴ１の一方又は両方を選択的に活動化及び非活動化するために使用される。特に、各スレッドは、
（１）そのスレッドが活動状態であるか又は非活動状態であるか
（２）そのスレッドが割り込みに応答して再活動化され得るかどうか
をそれぞれ指定するために各レジスタ７２、７４における少なくとも１つのフィールドを割り当てられる。種々のデータ構造がレジスタ７２、７４に対する代替えとして利用され得ることは明らかであろう。例えば、レジスタ７２及び７４における種々の情報が結合されて単一のレジスタにすることも可能である。更に、種々の共用リソース５４が本発明に適合したスレッドＴ０及びＴ１の間で共用され得ることも明らかであろう。更に、所与のマルチスレッド・プロセッサにおいて任意の数のスレッドが支援され得ること、及びそのようなスレッドのすべて又は一部分だけが制御回路７０に応答して選択的に活動化及び非活動化され得ることも明らかであろう。
【００４２】
制御回路７０は、スレッドＴ０及びＴ１の間で共用リソースを割り振るように、及び各ハードウェア・スレッドに維持された或る状態情報を保存又は廃棄するように、又は必要に応じてそのような状態情報の記憶及び検索を開始するようにも構成され得る。更に、制御回路７０は、システム再起動を必要とすることなく、スレッドを選択的に活動化又は非活動化するように構成される。本願において開示された特徴を有するマルチスレッド・プロセッサの適当な実装に関する更なる詳細に関しては、「同時マルチスレッド（ＳＭＴ）プロセッサにおけるスレッド化実行を管理するための方法及び論理的装置（Method and Logical Apparatus for Managing Thread Execution in aSimultaneous Multi-Threaded(SMT) Processor）」と題した米国特許出願番号第１０／４２２,６４８、「同時マルチスレッド（ＳＭＴ）プロセッサにおけるリソース再分配を管理するための方法及び論理的装置（Methodand Logical Apparatus for Managing Resource Redistribution in a SimultaneousMulti-Threaded(SMT) Processor）」と題した米国特許出願番号第１０／４２２,６４９、及び「同時マルチスレッド（ＳＭＴ）プロセッサにおけるリネーム・レジスタ再割り振りのための方法及び論理的装置（Methodand Logical Apparatus for Rename Register Reallocation in a SimultaneousMulti-Threaded(SMT) Processor）」と題した米国特許出願番号第１０／４２２,６５１において見ることができる。これらはすべて同日に出願され、本発明と同じ譲受人に譲渡された。
【００４３】
上述したように、コンピュータ１０（図１）は、論理的にパーティション化されたコンピュータとして構成される。従って、このコンピュータでは、複数のオペレーティング・システムが複数のロジカル・パーティションにおいて実行される。このように、そのようなコンピュータにおけるパーティション・マネージャは、パーティションがそれのプロセッサをＳＴモードで走らせるか又はＳＭＴモードで走らせるかを制御するように構成される。コンピュータにおけるパーティション整合性を確実にするためにパーティション・マネージャにおいてそのような制御を維持することが望ましい。このように、コンピュータが、複数のパーティションを実行させることができるモードにあるときはいつでも、上述したＣＴＲＬ及びＨＩＤレジスタは、一般に、パーティション・マネージャによってのみ書き込み可能である。
【００４４】
本願において開示された機能を支援するために、パーティション・マネージャは、各パーティションが各プロセッサのＳＴ／ＳＭＴモードを制御することを可能にするために各パーティションにサービスを提供する。パーティションがロジカル・プロセッサをオフラインとみなしたいときにはいつでも、オペレーティング・システムが非活動状態にしようとしているスレッドにおいて、本願ではＨ_ＳＴＯＰ_ＳＥＬＦサービスと呼ばれるサービスがアクセスされ得る。更に、オフラインにされた後のロジカル・プロセッサをオンラインにするために、パーティションは、Ｈ_ＳＴＡＲＴ_ＬＯＧＩＣＡＬ_ＰＲＯＣＥＳＳＯＲコールをパーティション・マネージャに呼び出し、デッド・スレッドの回復を通してロジカル・プロセッサをオンラインに戻す。
【００４５】
例えば、ロジカル・プロセッサがアイドル・ループに入ったことに応答して、パーティションがスレッド休止を行おうとするとき、パーティション・マネージャはＨ_ＣＥＤＥコールを支援する。このコールでは、パーティション・マネージャは、任意の数の割り込みタイプの１つによってスレッドを回復し得る方法でスレッドを非活動状態にするために使用する。パーティションがＨ_ＰＲＯＤコールを呼び出すことによって休止スレッドを回復させることを可能にすることも望ましい。そのようなコールが共用プロセッサ・パーティション及び専用プロセッサのみに依存するパーティションに対しても利用され得ることは明らかであろう。
【００４６】
図３は、例えば、特定のパーティションと関連したマルチスレッド・プロセッサを単一スレッド・モードに切り替えるために利用可能な「ＳＴモードへの切り替え」ルーチン１００を示す。ルーチン１００は、ブロック１０２において、オペレーティング・システムの観点から、非活動状態になろうとするスレッドと関連したロジカル・プロセッサを、パーティションがオフラインとみなすことによって開始する。次に、ブロック１０４において、非活動状態になろうとするスレッドは、例えば、上述したＨ_ＳＴＯＰ_ＳＥＬＦコールを使用して、そのスレッドを停止するためにパーティション・マネージャを呼び出す。次に、ブロック１０６において、前述の呼び出しの結果として現在パーティション・マネージャにおいて実行されつつある非活動状態になるスレッドは、割り込みを介してそのスレッドが回復しないようにするためにＨＩＤレジスタをセットする。次に、ブロック１０８において、非活動状態になろうとする且つ依然としてパーティション・マネージャにおいて実行されているスレッドがスレッドを非活動化するようにＣＴＲＬレジスタをセットする。このオペレーションによって、マルチスレッド・プロセッサにおける制御回路がそのスレッドを非活動化し、その結果、プロセッサが単一スレッド・モードに切り替わる。
【００４７】
上記のプロセッサをＳＭＴモードに切り替えるために、図４のルーチン１２０が遂行可能である。ルーチン１２０は、ブロック１２２において始まり、同じパーティションにおける活動状態のスレッドが、例えば、前述のＳＴＡＲＴ_ＬＯＧＩＣＡＬ_ＰＲＯＣＥＳＳＯＲコールを使用して、以前に非活動状態であったスレッドを起動するためにパーティション・マネージャを呼び出す。次に、ブロック１２４に示されるように、パーティション・マネージャにおいて実行中のである活動状態のスレッドが非活動状態のスレッドを回復させるようにＣＴＲＬレジスタに書き込みを行う。そうすることによって、プロセッサにおける制御回路が非活動状態のスレッドを回復させるであろう。次に、図４における右欄に表されたブロック１２６に示されるように、以前に非活動状態であったスレッドがパーティション・マネージャにおいて、詳しくは、パーティション・マネージャに存在するリセット・ハンドラ・プログラム・コードにおいてウェイクアップする。次に、ブロック１２８において、その復元されたスレッドが、そのスレッドを所有するパーティションに制御を戻し、しかる後、ブロック１３０に示されるように、パーティションはロジカル・プロセッサをオンラインに戻す。しかる後、ルーチン１２０は終了する。
【００４８】
次に図５を参照すると、パーティションにおいて実行中のロジカル・プロセッサがアイドル状態に入るときにはいつでも、「ロジカル・プロセッサ・アイドル・ループ」ルーチン１４０が実行され得る。従って、ルーチン１４０は、そのロジカル・プロセッサが関連するマルチスレッド・プロセッサを単一スレッド・モードに簡単に切り替え、プロセッサにおける他の活動状態のスレッドによる消費のためにいずれの共有リソースも開放する。
【００４９】
ルーチン１４０はブロック１４２において始まる。そのブロックでは、非活動状態になろうとする（現在パーティションにおいて実行中の）スレッドがそのスレッドをシード（cede）するためのパーティション・マネージャを呼び出す。次に、ブロック１４４において、現在、呼び出しの結果としてパーティション・マネージャにおいて実行中の非活動状態になろうとするスレッドがそのパーティション化状態を保存する。次に、ブロック１４６において、再びパーティション・マネージャにおいて実行中の非活動状態になろうとするスレッドが、割り込みを介したそのスレッドの回復を可能にするようにＨＩＤレジスタをセットする。しかる後、ブロック１４８において、依然としてパーティション・マネージャにおいて実行中の非活動状態になろうとするスレッドがそのスレッドを非活動化するようにＣＴＲＬレジスタをセットする。そのレジスタをセットした結果、マルチスレッド・プロセッサにおける制御回路がプロセッサを単一スレッド・モードに切り替え、それによってそのスレッドを効果的に非活動化する。しかる後、そのスレッドは、他の活動状態のスレッドによるＣＴＲＬレジスタへの書き込みを介して（図４に関連して上述した方法と同じ方法で）明示的に再活動化されるまで、或いはそれとは別に、割り込みを受け取ったことに応答して再活動化されるまで、非活動状態のままであろう。
【００５０】
例えば、ブロック１５０に示されるように、割り込み１５２を受け取った結果、単一スレッド・モードへの切り替えの結果として非活動化されたスレッドがパーティション・マネージャにおけるリセット・ハンドラ・プログラム・コードでウェイクアップする。次に、ブロック１５４に示されるように、依然としてパーティション・マネージャにおいて実行中のスレッドがパーティション状態を復活し、制御をパーティションに戻す。次に、ブロック１５６に示されるように、ロジカル・プロセッサのアイドル・ループがその受け取った割り込みを処理するように回復される。そこで、ルーチン１４０は終了し、ロジカル・プロセッサによる処理が再開される。
【００５１】
本発明の原理が論理的にパーティション化されたコンピュータ以外のコンピュータにも適用し得ることは明らかであろう。例えば、図６乃至図８は、図４乃至図６に示されたルーチンに対する対応ルーチンであるが、代わりに、論理的にパーティション化されてないコンピュータにおいて利用されるルーチンを示す。図６は、例えば、マルチスレッド・プロセッサをＳＴモードに切り替えるためにオペレーティング・システムによって実行され得る「ＳＴモードへの切り替え」ルーチン１６０を示す。ルーチン１６０はブロック１６２において開始し、非活動状態になろうとするスレッドと関連したロジカル・プロセッサをオフライン状態にする。次に、ブロック１６４において、非活動状態になるスレッドが、割り込みを介してそのスレッドが回復しないようにするためにＨＩＤレジスタをセットする。次に、ブロック１６６において、非活動状態になるスレッドがそのスレッドを非活動化するように制御レジスタをセットし、それによって、プロセッサにおける制御回路が上述のようにそのスレッドを非活動化する。そこで、ルーチン１６０は終了する。
【００５２】
次に、図７に示されるように、「ＳＭＴモードへの切り替え」ルーチン１８０が、コンピュータにおいて実行中の他の活動状態のスレッドによるＣＴＲＬレジスタへの書き込みに応答して非活動状態のスレッドを回復させ得る（ブロック１８２）。ＣＴＲＬレジスタへの書き込みの結果、図７における右欄によって表されるように、前に非活動化されたスレッドがオペレーティング・システムにおけるリセット・ハンドラ・プログラム・コードでウェイクアップする（ブロック１８４）。スレッドは、一旦ウェイクアップされると、ロジカル・プロセッサをオンラインに戻す（ブロック１８６）。一旦、ロジカル・プロセッサがオンラインになると、実行が通常の方法で再開し、ルーチン１８０は終了する。
【００５３】
図８は、「ロジカル・プロセッサ・アイドル・ループ」ルーチン２００を示す。このルーチンは、ブロック２０２において開始し、非活動状態になろうとするスレッドが割り込みを介したスレッドの回復を可能にするようにＨＩＤをセットする。しかる後、ブロック２０４に示されるように、非活動状態になろうとするそのスレッドがスレッドを非活動化するようにＣＴＲＬレジスタをセットし、それによって、スレッドが非活動化されなければならないことをマルチスレッド・プロセッサにおける制御回路に信号する。
【００５４】
ブロック２０６に示されるように、将来における或る時点で、割り込み２０８を受け取ったことに応答して、スレッドが再活動化され得る。一旦、割り込みが受け取られると、そのスレッドは、オペレーティング・システムにおけるリセット・ハンドラ・プログラム・コードでウェイクアップする。しかる後、ブロック２１０に示されるように、アイドル・ループが回復され、その受け取られた割り込みを処理する。そこで、ロジカル・プロセッサが通常の方法で再開し、ルーチン２００は終了する。
【００５５】
このように、本発明に適合した実施例は、マルチスレッド・プロセッサにおいて、システム再起動を必要とすることなく、ハードウェア・スレッドを選択的に且つ動的に活動化及び非活動化する機能を支援することがわかる。本願で開示された実施例に対する種々の修正は、本願の恩恵を受ける当業者には明らかであろう。従って、本発明は、「特許請求の範囲」の記載にある。
【００５６】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００５７】
（１）論理的にパーティション化されたコンピュータにおけるマルチスレッド・プロセッサを制御する方法であって、前記マルチスレッド・プロセッサは複数のハードウェア・スレッドの実行を支援し、前記論理的にパーティション化されたコンピュータは複数のパーティション及び１つのパーティション・マネージャを含み、前記複数のハードウェア・スレッドのうちの第１ハードウェア・スレッドは前記複数のパーティションのうちの第１パーティションにあるロジカル・プロセッサに割り当てられ、前記方法は、
前記第１パーティションにおいて前記ロジカル・プロセッサをオフラインとみなすことに関連して、割り込みの表明に応答した前記第１ハードウェア・スレッドの再活動化を禁止すると共に前記第１ハードウェア・スレッドを非活動化するステップと、
前記ロジカル・プロセッサがアイドル・ループに入ったことに応答して、割り込みの表明に応答した前記第１ハードウェア・スレッドの再活動化を可能にすると共に前記第１ハードウェア・スレッドを非活動化するステップと、
を含む、方法。
（２）複数のハードウェア・スレッドの実行を支援するマルチスレッド・プロセッサと、
前記マルチスレッド・プロセッサによって実行される複数のハードウェア・スレッドのうちの第１ハードウェア・スレッドを選択的に活動化及び非活動化するように構成された制御回路と、
を含み、前記制御回路は、更に、一旦前記第１ハードウェア・スレッドが非活動化された場合に当該第１ハードウェア・スレッドが活動化され得る方法を制御するように構成される、装置。
（３）前記制御回路は少なくとも１つのレジスタを含む、上記（２）に記載の装置。
（４）前記少なくとも１つのレジスタは、前記第１ハードウェア・スレッドが活動状態であるか又は非活動状態であるかを指定する第１レジスタ及び前記第１ハードウェア・スレッドが或る選択されたイベントに応答して再活動化され得るかどうかを指定する第２レジスタを含む、上記（２）に記載の装置。
（５）前記制御回路は、前記第１ハードウェア・スレッドが割り込みの表明に応答して活動化され得るかどうかを制御することによって、一旦非活動化された前記第１ハードウェア・スレッドが活動化され得る方法を制御するように構成される、上記（２）に記載の装置。
（６）前記割り込みは、外部割り込み、プロセッサ間割り込み、入出力割り込み、及びタイマ割り込みの少なくとも１つを含む、上記（５）に記載の装置。
（７）更に、複数のパーティション及び前記複数のパーティションを制御するパーティション・マネージャを含み、
前記第１ハードウェア・スレッドは前記複数のパーティションの少なくとも１つに割り振られ、
前記パーティション・マネージャは、前記第１ハードウェア・スレッドを選択的に活動化及び非活動化するよう前記制御回路を指図し、前記第１ハードウェア・スレッドが割り込みの表明に応答して活動化され得るかどうかを制御するように構成される、
上記（５）に記載の装置。
（８）前記ハードウェア・スレッドは前記複数のパーティションの１つにおいて実行中のロジカル・プロセッサと関連付けられ、
前記パーティション・マネージャは、パーティションが前記ロジカル・プロセッサをオフラインとみなすことに関連して、割り込みの表明に応答して前記第１ハードウェア・スレッドを非活動化し且つ前記ハードウェア・スレッドの再活動化を禁止するよう前記制御回路を指図するように構成される、
上記（７）に記載の方法。
（９）前記パーティション・マネージャに対するプログラム・コードを実行する第２ハードウェア・スレッドが、パーティションが前記ロジカル・プロセッサをオンラインに戻すことに関連して前記第ハードウェア・スレッドを再活動化するよう前記制御回路を指図するように構成される、上記（８）に記載の装置。
（１０）前記ハードウェア・スレッドは前記複数のパーティションの１つにおいて実行中のロジカル・プロセッサと関連付けられ、
前記パーティション・マネージャは、前記ロジカル・プロセッサがアイドル・ループで実行していることをパーティションが検出したことに関連して、前記第１ハードウェア・スレッドを非活動化するよう前記制御回路を指図し、割り込みの表明に応答して前記第１ハードウェア・スレッドの再活動化を可能にするように構成される、
上記（７）に記載の装置。
（１１）前記制御回路は、割り込みの表明に応答して前記第１ハードウェア・スレッドを再活動化するように構成され、
前記ロジカル・プロセッサは受け取った前記割り込みを処理するように構成される、
上記（１０）に記載の装置。
（１２）前記パーティション・マネージャは、更に、前記ロジカル・プロセッサが関連付けられたパーティションの状態を、前記ロジカル・プロセッサが前記アイドル・ループに入ったことに関連して保存し、前記ロジカル・プロセッサが関連付けられたパーティションの状態を前記割り込みの表明に応答して復活するように構成される、上記（１１）に記載の装置。
（１３）複数のハードウェア・スレッドの実行を支援するマルチスレッド・プロセッサを制御する方法であって、
前記マルチスレッド・プロセッサによって実行される前記複数のハードウェア・スレッドのうちの第１ハードウェア・スレッドに対して再活動化条件を指定するステップと、
前記第１ハードウェア・スレッドを非活動化するステップと、
前記第１ハードウェア・スレッドに対して指定された前記再活動化条件に基づいて前記第１ハードウェア・スレッドを選択的に再活動化するステップと、
を含み、前記再活動化条件は、一旦前記第１ハードウェア・スレッドが非活動化された場合に当該第１ハードウェア・スレッドを活動化し得る方法を決定する、方法。
（１４）前記マルチスレッド・プロセッサは、前記第１ハードウェア・スレッドを選択的に活動化及び非活動化するように構成された制御回路を含み、
前記制御回路は、更に、前記再活動化条件に基づいて前記第１ハードウェア・スレッドを再活動化するように構成される、上記（１３）に記載の方法。
（１５）前記制御回路は少なくとも１つのレジスタを含む、上記（１３）に記載の方法。
（１６）前記少なくとも１つのレジスタは、前記第１ハードウェア・スレッドが活動状態であるか又は非活動状態であるかを指定する第１レジスタ及び前記再活動化条件を指定する第２レジスタを含む、上記（１３）に記載の方法。
（１７）前記再活動化条件は、前記第１ハードウェア・スレッドが割り込みの表明に応答して活動化され得るかどうかを指定する、上記（１３）に記載の方法。
（１８）前記割り込みは、外部割り込み、プロセッサ間割り込み、入出力割り込み、及びタイマ割り込みの少なくとも１つを含む、上記（１７）に記載の方法。
（１９）前記マルチスレッド・プロセッサは、複数のパーティション及び前記複数のパーティションを制御するパーティション・マネージャを含むコンピュータに配置され、
前記再活動化条件の指定及び前記第１ハードウェア・スレッドの非活動化が前記パーティション・マネージャによって遂行される、上記（１７）に記載の方法。
（２０）前記第１ハードウェア・スレッドは、前記複数のパーティションの１つにおいて実行中のロジカル・プロセッサと関連付けられ、
前記パーティション・マネージャは、パーティションが前記ロジカル・プロセッサをオフラインとみなすことに関連して、割り込みの表明に応答して前記第１ハードウェア・スレッドの再活動化を禁止する再活動化条件を指定するように構成される、
上記（１９）に記載の方法。
（２１）更に、パーティションが前記ロジカル・プロセッサをオンラインに戻すことに関連して、前記パーティション・マネージャに対してプログラム・コードを実行する第２ハードウェア・スレッドを使用して前記第１ハードウェア・スレッドを再活動化するステップを含む、上記（２０）に記載の方法。
（２２）前記第１ハードウェア・スレッドは、前記複数のパーティションの１つにおいて実行中のロジカル・プロセッサと関連付けられ、
前記ロジカル・プロセッサがアイドル・ループにおいて実行していることをパーティションが検出するステップと、
割り込みの表明に応答して前記第１ハードウェア・スレッドの再活動化を可能にする再活動化条件を指定するステップと、
を更に含む、上記（１９）に記載の方法。
（２３）前記第１ハードウェア・スレッドに対して指定された前記再活動化条件に基づいて前記第１ハードウェア・スレッドを選択的に再活動化するステップは、割り込みの表明に応答して前記第１ハードウェア・スレッドを再活動化するステップを含み、
前記ロジカル・プロセッサは受け取った前記割り込みを処理するように構成される、上記（２２）に記載の方法。
（２４）更に、前記ロジカル・プロセッサが関連付けられたパーティションの状態を、前記ロジカル・プロセッサが前記アイドル・ループに入ったことに関連して保存するステップと、
前記ロジカル・プロセッサが関連付けられたパーティションの状態を前記割り込みの表明に応答して復活するステップと、
を更に含む、上記（２３）に記載の方法。
（２５）前記マルチスレッド・プロセッサはオペレーティング・システムを含むコンピュータに配置され、
前記第１ハードウェア・スレッドは、１つのロジカル・プロセッサと関連付けられ、
前記再活動化条件の指定及び前記第１ハードウェア・スレッドの非活動化は前記オペレーティング・システムによって遂行される、
上記（１７）に記載の方法。
（２６）前記オペレーティング・システムは、前記ロジカル・プロセッサをオフラインとみなすことに関連して、割り込みの表明に応答して前記第１ハードウェア・スレッドの再活動化を禁止する再活動化条件を指定するように構成される、上記（２５）に記載の方法。
（２７）前記オペレーティング・システムは、前記ロジカル・プロセッサがアイドル・ループに入ったことに関連して、割り込みの表明に応答して前記第１ハードウェア・スレッドの再活動化を許可する再活動化条件を指定するように構成される、上記（２５）に記載の方法。
（２８）複数のハードウェア・スレッドの実行を支援するマルチスレッド・プロセッサによって実行された複数のハードウェア・スレッドのうちの第１ハードウェア・スレッドに対して再活動化条件を指定すること、前記第１ハードウェア・スレッドを非活動化すること、及び前記第１ハードウェア・スレッドに対して指定された前記再活動化条件に基づいて前記第１ハードウェア・スレッドを選択的に再活動化することによって前記マルチスレッド・プロセッサを制御するように構成されたプログラム・コードと、
前記プログラム・コードを保持する信号保持媒体と、
を含み、前記再活動化条件は、一旦前記ハードウェア・スレッドが非活動化された場合に当該第１ハードウェア・スレッドを活動化し得る方法を決定する、コンピュータ・プログラム。
（２９）前記信号保持媒体は記録可能な媒体及び伝送媒体の少なくとも１つを含む、上記（２８）に記載のコンピュータ・プログラム。
【図面の簡単な説明】
【００５８】
【図１】本発明に適合する論理的にパーティション化されたコンピュータにおける主要なハードウェア・コンポーネントのブロック図である。
【図２】図１に示されたマルチスレッド・プロセッサにおいて利用される共用リソース及び専用リソースのブロック図である。
【図３】マルチスレッド・プロセッサを単一スレッド・モードに切り替えるために、図１の論理的にパーティション化されたコンピュータによって実行される単一スレッド・モード・ルーチンへの切り替えのプログラム・フローを示すフローチャートである。
【図４】本発明に適合した方法でマルチスレッド・プロセッサを同時マルチスレッド・モードに切り替えるために、図１の論理的にパーティション化されたコンピュータによって実行される同時マルチスレッド・モード・ルーチンへの切り替えのプログラム・フローを示すフローチャートである。
【図５】図１の論理的にパーティション化されたコンピュータによって実行されるロジカル・プロセッサ・アイドル・ループ・ルーチンのプログラム・フローを示すフローチャートである。
【図６】本発明に適合した方法でマルチスレッド・プロセッサを単一スレッド・モードに切り替えるために、非論理的にパーティション化されたコンピュータによって実行される単一スレッド・モード・ルーチンへの切り替えのプログラム・フローを示すフローチャートである。
【図７】本発明に適合した方法でマルチスレッド・プロセッサを同時マルチスレッド・モードに切り替えるために、非論理的にパーティション化されたコンピュータによって実行される同時マルチスレッド・モード・ルーチンへの切り替えのプログラム・フローを示すフローチャートである。
【図８】非論理的にパーティション化されたコンピュータによって実行されるロジカル・プロセッサ・アイドル・ループ・ルーチンのプログラム・フローを示すフローチャートである。
【図１】
2004326749.tif 000003
【図２】
2004326749.tif 000004
【図３】
2004326749.tif 000005
【図４】
2004326749.tif 000006
【図５】
2004326749.tif 000007
【図６】
2004326749.tif 000008
【図７】
2004326749.tif 000009
【図８】
2004326749.tif 000010