(57)【特許請求の範囲】
【請求項１】
マルチスレッディング（ＭＴ）モードで動作するように構成されたコアを含む構成における利用を追跡するためのコンピュータ実装方法であって、前記ＭＴモードは前記コアの共用資源上で複数のスレッドをサポートし、前記方法は、
複数組のカウンタを含む複数の利用カウンタをリセットすることと、
前記コア上での各クロック・サイクルについて、
前記コア上で現在アクティブであるスレッドの数に基づいて、前記複数組のカウンタから１組のカウンタを選択すること、
前記コアの前記複数のスレッドにおける１つまたは複数の実行イベントの集約に基づいて、前記選択された１組のカウンタ内のカウンタをインクリメントすること、および
前記利用カウンタの値をソフトウェア・プログラムに供給すること、を実行することとを含む方法。
【請求項２】
前記実行イベントがクロック・サイクルを含み、前記選択された１組のカウンタ内の前記カウンタが１だけインクリメントされる、請求項１に記載の方法。
【請求項３】
前記実行イベントが命令完了をさらに含み、前記選択された１組のカウンタ内の他のカウンタが、前記クロック・サイクル中に現在アクティブであるすべてのスレッド上の命令完了の数に基づいてインクリメントされる、請求項２に記載の方法。
【請求項４】
前記実行イベントがキャッシュ・ミスをさらに含み、前記選択された１組のカウンタ内の他のカウンタが、前記クロック・サイクル中に現在アクティブであるすべてのスレッド上のキャッシュ・ミスの数に基づいてインクリメントされる、請求項２に記載の方法。
【請求項５】
前記実行イベントが分岐予測誤りをさらに含み、前記選択された１組のカウンタ内の他のカウンタが、前記クロック・サイクル中に現在アクティブであるすべてのスレッド上の分岐予測誤りの数に基づいてインクリメントされる、請求項２に記載の方法。
【請求項６】
スレッドは、スレッドが有効であって待ち状態ではない場合に現在アクティブである、請求項２に記載の方法。
【請求項７】
前記ソフトウェア・プログラムがオペレーティング・システムまたはハイパーバイザである、請求項１に記載の方法。
【請求項８】
請求項１ないし７のいずれかに記載の方法のすべてのステップを実行するために適応された手段を含むシステム。
【請求項９】
請求項１ないし７のいずれかに記載の方法のすべてのステップをコンピュータに実行させるためのコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般には、複数のスレッドをサポートするコンピュータ・システムに関し、より詳細には、マルチスレッディング・コンピュータ・システムにおける利用を追跡するハードウェア・カウンタに関する。
【背景技術】
【０００２】
最近数十年でコンピュータ・システムのプロセッサ速度は高速化しているが、このようなコンピュータ・システムのメモリへのアクセス速度はそれに応じて高速化はしていない。したがって、プロセッサのサイクル時間が速いほど、メモリからのデータ・フェッチ待ち遅延が顕著になる。このような遅延の影響は、様々なレベルのキャッシングによって軽減され、さらに最近のプロセッサではマルチスレッディング（ＭＴ）によって軽減されてきた。
【０００３】
ＭＴは、プロセッサの様々なコア資源をスレッドと呼ばれる複数の命令ストリームが共用できるようにする。コア資源は、命令実行ユニット、キャッシュ、トランスレーション・ルックアサイド・バッファ（ＴＬＢ）などを含むことができ、これらは一般にコアと総称されることがある。１つのスレッドにおけるキャッシュ・ミスまたはその他の遅延によって生じるレイテンシ中に、１つまたは複数の他のスレッドがコア資源を使用することができ、これによりコア資源の利用率が高くなる。スーパースカラー・プロセッサ同時マルチスレッディング（ＳＭＴ）実装形態では、複数のスレッドに１つまたは複数のコアのコア資源によって同時に対応することができる。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】「z/Architecture Principles ofOperation」（IBM Publication No.SA22-7832-09、２０１２年８月）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
現在のハードウェア・プラットフォームでは、ＭＴは、典型的には、ＭＴハードウェア上で稼働するオペレーティング・システム（ＯＳ）には透過な方式で実装される。この特徴の１つの側面は、ＯＳがＭＴハードウェアを利用するための変更を必要としないことである。しかし、ＯＳに関して透過なＭＴ動作によって、応答時間、容量プロビジョニング、容量プランニング、およびビリングの変動性が大きくなることがある。この変動性は、ＯＳのタスクがコアの排他的制御権を持っているか、またはＯＳのタスクがコアを共用するスレッドとして実行中であるかがＯＳにはわからないために生じる場合がある。設計上、ＭＴ対応ハードウェア上のメモリ多用ワークロードのための最大容量は、コアの使用時に平均スレッド密度が高いときに達成可能である。ＭＴによって生じるキャッシュ利用の増加により、追加容量が生じることがある。ＯＳが、使用コアの高平均スレッド密度を一定して維持しない場合、ＭＴによって生じる追加の処理能力全体を利用することができなくなる。例えば、低演算処理使用率のときにハードウェアが１コアにつき１つのＭＴスレッドを実行し、高演算処理使用率のときに高いスレッド密度で実行する場合、ワークロードにどれだけの合計ＭＴ演算処理容量が利用可能であるかを判断するのはきわめて困難な場合がある。容量に関して前述したのと同様にして、ＭＴスレッド利用におけるこのハードウェアの変動性の結果、トランザクション応答時間とビリングの両方に変動性が生じる可能性がある。
【課題を解決するための手段】
【０００６】
本発明は、特許請求の範囲に記載のように、マルチスレッディング（ＭＴ）コンピュータ・システムにおける利用を追跡するための方法、システムおよびコンピュータ・プログラムを提供する。
【０００７】
実施形態とみなされる主題は、添付の特許請求の範囲で具体的に示され、明確に請求されている。実施形態の前記およびその他の特徴および利点は、以下の詳細な説明を添付図面と共に読めば明らかになる。
【図面の簡単な説明】
【０００８】
【図１】一実施形態により実施可能なコンピューティング環境を示す図である。
【図２】一実施形態により実施可能なコンピューティング環境を示す図である。
【図３】一実施形態により実施可能なコアの処理回路を示す図である。
【図４】一実施形態により実施可能なコンピューティング環境を示す図である。
【図５】一実施形態により実施可能なコンピューティング環境におけるハイパーバイザ・コンテキスト保持を示す図である。
【図６】一実施形態によるマルチスレッディングの動的有効化処理の流れを示す図である。
【図７】一実施形態によるＣＰＵアドレス拡張処理の一例を示す図である。
【図８】一実施形態によるＣＰＵアドレス縮小処理の一例を示す図である。
【図９】一実施形態によるマルチスレッディング設定命令（order）の処理の流れを示す図である。
【図１０】一実施形態による、利用を追跡するために実装することができるコアの処理回路の一例を示す図である。
【図１１】一実施形態による利用カウンタをキャプチャする構成の一例を示す図である。
【図１２】一実施形態による、利用を追跡する処理の流れを示す図である。
【図１３】一実施形態によるコンピュータ可読媒体を示す図である。
【発明を実施するための形態】
【０００９】
本明細書に記載の例示の実施形態は、シングル・スレッド（ＳＴ）動作モードとマルチスレッディング（ＭＴ）動作モードとをサポートするコンピュータ・システムにおけるＭＴ動作のパフォーマンス監視を提供する。本明細書に記載のシステムは、ＭＴハードウェアを利用することを明示的に「選択」することをオペレーティングシステム（ＯＳ）に要求することによって、ハードウェアの変動性をソフトウェアが軽減することができるようにする。ＯＳが実行環境のＭＴ性を把握する場合、ＯＳはプロセッサ・コア当たりのスレッド密度を明示的に管理する能力を（ワークロード・ディスパッチ・パターンがあればその能力の限りで）有する。演算資源の利用が少ない場合でも、ＯＳは高スレッド密度を維持することを選択でき、それによって他のＭＴ実装形態に見られる場合がある総演算能力の変動性の多くを軽減することができる。高スレッド密度を維持する直接の結果として、トランザクション応答時間とビリング面の両方のばらつきを少なくすることができる。プロセッサ・コア当たりのスレッド密度が一貫して高い場合、マルチスレッディングの値を大きくすることができる。
【００１０】
実施形態によると、見逃された容量増大の機会を判断するために、ＯＳ制御プログラムは、特定のコアが１個のスレッド、２個のスレッド、などコア上の総スレッド数までのスレッドについて稼働するのに費やしたサイクル数と実行された命令の数とをマシンに問い合わせる機能を備える。実施形態では、個々のスレッドまたはＣＰＵごとではなく、様々なスレッド密度（例えばスレッド１個、スレッド２個など）でのコアにおけるイベント数（例えば、実行された命令の数およびクロック・サイクル数）をカウントするために、ハードウェア・カウンタが設けられる。インクリメントするこれらのハードウェア・カウンタは、コアにおいてどれだけの数のスレッドがアクティブであるかに基づいて変化することができる。
【００１１】
ソフトウェアがカウンタからこの情報を取得し、そのカウンタ情報を使用して、コアの別のスレッド上でより多くの作業を実行できる機会を逃している時を判断することができる。この情報から、ソフトウェアは、１個のスレッドによってコア資源の何パーセントが使用されたかも判断することができ、この情報をソフトウェア・チャージバックに使用することができる。システム内のコアからのこの情報をすべて集約することによって、ＯＳは、総容量、使用された容量、および空き容量の計算などの容量プランニングを行うことが可能である。
【００１２】
本明細書では、論理スレッドとは、単一の命令ストリームとそれに関連づけられた状態とを指す。すなわち、アーキテクチャ・レベルでは、各論理スレッドは、独立した中央演算処理装置（ＣＰＵ）またはプロセッサを表す。ハードウェア・レベルでは、スレッドは、そのスレッドがディスパッチされる際の、ゲスト状態の維持と組み合わされた論理スレッドに関連づけられた命令ストリームの実行である。したがって、本明細書では「スレッド」という用語と「ＣＰＵ」という用語は交換可能に使用される場合がある。
【００１３】
例示の一実施形態では、ＣＰＵは命令実行、割込み動作、タイミング機能、初期プログラム・ロード、およびその他のマシン関連機能のための、順序付けおよび処理機構を備える。ＣＰＵは、基礎となる様々な物理実装形態に対応付け可能な論理機能を定義する。ＣＰＵは、命令を実行する際に、固定長の２進整数および浮動小数点数（例えば２進数、１０進数および１６進数）、可変長の１０進整数、および固定長または可変長の論理情報を処理することができる。処理は、並列または順次処理とすることができる。処理要素の幅、シフト・パスの多重度、異なる種類の演算処理における同時度は、ＣＰＵのモデルごとに異なる場合があるが、論理的結果には影響を及ぼさない。
【００１４】
ＣＰＵが実行する命令は、汎用命令、浮動小数点サポート（ＦＰＳ）命令、２進浮動小数点（ＢＦＰ）命令、１０進浮動小数点（ＤＦＰ）命令、１６進浮動小数点（ＨＦＰ）命令、制御命令、およびＩ／Ｏ命令など、複数の命令クラスを含むことができる。汎用命令は、２進整数算術演算および論理演算、分岐演算およびその他の非算術演算の実行に使用することができる。１０進命令は１０進形式のデータに対して作用する。ＢＦＰ、ＤＦＰおよびＨＦＰ命令は、それぞれ、ＢＦＰ、ＤＦＰおよびＨＦＰ形式のデータに対して作用し、ＦＰＳ命令は、形式とは独立した浮動小数点データに対して作用するか、またはある形式から別の形式に変換する。適切な権限付与機構に従い、ＣＰＵがスーパバイザ状態のときに、特権制御命令およびＩ／Ｏ命令を実行することができ、問題状態のときに準特権制御命令を実行することができる。
【００１５】
ＣＰＵは、プログラムにとって利用可能であるが主記憶装置でアドレス指定可能表現を持たないレジスタを提供する。レジスタは、例えば、現在のプログラム状態ワード（ＰＳＷ）と、汎用レジスタと、浮動小数点レジスタおよび浮動小数点制御レジスタと、ベクトル・レジスタと、制御レジスタと、アクセス・レジスタと、プレフィックス・レジスタと、時刻（ＴＯＤ）プログラマブル・レジスタと、クロック比較器およびＣＰＵタイマ用レジスタとを含み得る。このレジスタの集合を、ＣＰＵのアーキテクテッド・レジスタ・コンテキストと呼ぶ場合がある。構成内の各ＣＰＵは、ＴＯＤクロックへのアクセスを行わせることができ、ＴＯＤクロックは構成内のすべてのＣＰＵが共用することができる。命令演算コードにより、ある演算でどの種類のレジスタを使用するかを決定することができる。
【００１６】
各ＣＰＵは、ＣＰＵが機能および機構の全装備を提供するか（例えば汎用ＣＰＵ）、または特殊なタイプのワークロードの処理向けであるか（例えば特殊ＣＰＵ）を示すタイプ属性を有することができる。一次ＣＰＵは、汎用ＣＰＵまたは、最後の初期プログラム・ロード（ＩＰＬ）動作の後に起動されるＣＰＵ（ＩＰＬ  ＣＰＵ）と同じタイプを有するＣＰＵである。二次ＣＰＵは、ＩＰＬ  ＣＰＵとは異なるＣＰＵタイプを有する汎用ＣＰＵ以外のＣＰＵである。
【００１７】
サポートするアーキテクチャを実装するコンピュータ・システム上では、マルチスレッディング機構が利用可能な場合がある。マルチスレッディング機構はマルチスレッディングのサポートを提供して、ＣＰＵとも呼ばれることがあるコアを共用するスレッドのグループを可能にする。マルチスレッディング機構が有効化されている場合、コア内のＣＰＵは、実行ユニットまたはキャッシュなどの特定のハードウェア資源を共用することができる。コア内の１つのＣＰＵが、ハードウェア資源を待っている場合（典型的にはメモリアクセスを待っている間）、共用資源を遊休状態にしておくのではなく、そのコア内の他のＣＰＵが共用資源を利用することができる。マルチスレッディング機構がインストールされ有効化されている場合、スレッドはコアに属するＣＰＵと同義である。マルチスレッディング機構がインストールされていない場合、またはマルチスレッディング機構がインストールされているが有効化されていない場合、コアは単一のＣＰＵまたはスレッドを含む。
【００１８】
マルチスレッディング機構がインストールされている場合、マルチスレッディング設定シグナル・プロセッサ（ＳＩＧＰ）命令（order）の実行により、マルチスレッディング機構を有効化することができる。例示の一実施形態では、マルチスレッディング機構が有効化されている場合、構成内のＣＰＵの数が倍数だけ増加し、倍数の値はプログラム指定最大スレッド識別情報（ＰＳＭＴＩＤ）によって決まる。コア内のＣＰＵの数は、ＰＳＭＴＩＤより多い場合もある。この倍数に対応する数のＣＰＵが１つのコアにグループ化される。構成内の同じＣＰＵタイプの各コアは、同じ数のＣＰＵを有する。コア内の各ＣＰＵは同じＣＰＵタイプである。ただし、モデルおよびＣＰＵタイプによって、コア内のいくつかのＣＰＵが動作状態でない場合がある。
【００１９】
例示の一実施形態では、オペレーティング・システム（ＯＳ）が管理する構成がマルチスレッディングを使用することができるようにするために、ＯＳなどの制御プログラムがマルチスレッディングを明示的に有効化する。あるいは、ハイパーバイザが、マルチスレッディングを有効化することができ、ハイパーバイザのゲストおよびそれらゲストのアプリケーションが透過的に恩恵を受けることができる。アプリケーション・プログラムは一般に、マルチスレッディングが有効化されたか否かを認識しない。マルチスレッディングが有効化されると、構成内のすべてのＣＰＵのＣＰＵアドレスが、アドレスの左端ビットにコア識別情報（またはコアＩＤ）を含み、アドレスの右端ビットにスレッド識別情報（スレッドＩＤまたはＴＩＤ）を含むように調整される。コアＩＤは、コア・アドレス値とも呼ぶことがあり、ＴＩＤはスレッド・アドレス値とも呼ぶことがある。コア内のＣＰＵは、実行ユニットまたは低次キャッシュなどの特定のハードウェア機構を共有することができ、したがって、コアのあるＣＰＵ内での実行がそのコア内の他のＣＰＵのパフォーマンスに影響を及ぼすことがある。
【００２０】
構成の１つまたは複数のコアをシングル・スレッド・モードとマルチスレッディング・モードとの間で動的に切り換えることに伴う変更を管理するために、いくつかのサポート機能が備えられる。マルチスレッディングをサポートしないプログラムとの互換性を維持するために、シングル・スレッド・モードを、リセット時または非活動化時のデフォルト・モードとしてもよい。実施形態の例としては、マルチスレッディング・モードからシングル・スレッド・モードへの移行後のスレッド・コンテキストの分析または復元あるいはその両方をサポートするために、マルチスレッディング・モードからのスレッド・コンテキストの保存、伝達、および復元を行う機能がある。
【００２１】
例示の一実施形態によって実装可能なコンピューティング環境は、例えば米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションが提供するｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づくことができる。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅは、「z/Architecture Principles of Operation」（IBMPublication No.SA22-7832-09、２０１２年８月）という名称のＩＢＭ（Ｒ）刊行物に記載されている。一例では、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づくコンピューティング環境は、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションが提供するｅＳｅｒｖｅｒ  ｚＳｅｒｉｅｓを含む。コンピューティング環境は、例えば１つまたは複数のコア（例えばプロセッサコア）を備える１つまたは複数の区画（例えば論理区画）を備えたプロセッサ複合体と、本明細書で詳述するような１つまたは複数のレベルのハイパーバイザとを含み得る。
【００２２】
図１に、マルチスレッディング（ＭＴ）をサポートするコンピューティング環境の一例として、コンピュータ・システム１００を示す。図１の例では、コンピュータ・システム１００は、複数のプロセッサ・コア１０２と、入出力（Ｉ／Ｏ）サブシステム１０４と、システム・メモリ１０６とを含む。入出力サブシステム１０４は、当技術分野で周知のＩ／Ｏ装置へのアクセスを提供することができる。プロセッサ・コア１０２は、本明細書では単に「コア」とも呼び、サポート要素を備えた処理回路を含み得る。図１の例では、５個のコア１０２が、コア１  １１０、コア２  １２０、コア３  １３０、コア４  １４０、コア５  １５０として図示されている。ただし、これより多いかまたは少ない数のコア１０２も企図される。ＭＴ機構１０３は、各コア１０２のそれぞれのハードウェア構成要素であってよい。この例では、コア１０２のそれぞれは、最大４個のスレッドをサポートすることができる。例えば、コア１  １１０は、スレッド１１１、１１２、１１３および１１４をサポートすることができる。コア２  １２０は、スレッド１２１、１２２、１２３、および１２４をサポートすることができる。コア３  １３０は、スレッド１３１、１３２、１３３および１３４をサポートすることができる。コア４  １４０は、スレッド１４１、１４２、１４３および１４４をサポートすることができる。コア５  １０５は、スレッド１５１、１５２、１５３および１５４をサポートすることができる。なお、任意の時点において各ＣＰＵ１０２の４個のスレッドすべてが動作状態であるとは限らない。例えば、コア３  １３０では、スレッド１３１および１３２が動作状態であり得るが、スレッド１３３および１３４は動作状態ではない。また、コア４  １４０でも、スレッド１４１および１４２が動作状態であり得るが、スレッド１４３および１４４は動作状態でなく、コア５  １５０では、スレッド１５０および１５１が動作状態であり得るが、スレッド１５２、１５３、および１５４は動作状態ではない。
【００２３】
図１には、コンピュータ・システム１００のシステム・メモリ１６０も図示されており、システム・メモリ１６０の各部は論理区画１（ＬＰＡＲ１）１７０、ＬＰＡＲ２  １８０、およびＬＰＡＲ３  １９０に割り当てられている。ＬＰＡＲ  １７０、１８０、１９０は、Ｌｉｎｕｘ（ＴＭ）またはＩＢＭ（Ｒ）ｚ／ＯＳ（ＴＭ）、ｚ／ＶＭ、またはｚＴＰＦオペレーティング・システムなどのオペレーティング・システムを実行することができる仮想コンピューティングシステム（構成とも呼ばれる）を表す。図１は、ＬＰＡＲ１７０、１８０および１９０へのコア１０２の割当ても示す。この図では、コア１  １１０とコア２  １２０とがＬＰＡＲ１  １７０専用とされている。コア３  １３０はＬＰＡＲ２  １８０専用とされ、コア５  １５０はＬＰＡＲ３  １９０専用とされている。コア４  １４０はＬＰＡＲ２  １８０とＬＰＡＲ３  １９０との間で共用することができるが、図１ではＬＰＡＲ２  １８０に割り当てられているものとして示されている。ＬＰＡＲ３  １９０は、この区画によって使用されているコア１０２の２つの異なるタイプの例を示し、コア４  １４０は、複数のスレッドを動作させることができるが、コア５  １５０はこの例では複数のスレッドを動作させることはできない。図１の例では、ＬＰＡＲ１  １７０はＯＳ１７１と、プログラム１７２、１７３、１７４および１７５とに処理資源を提供する。ＬＰＡＲ２  １８０は、ＯＳ１８１と、プログラム１８２、１８３および１８４とに処理資源を提供する。ＬＰＡＲ４  １９０はＯＳ１９１と、プログラム１９２および１９３とに処理資源を提供する。
【００２４】
ＬＰＡＲで実行されているオペレーティング・システムの制御下で、コアのスレッド上でプログラムが実行される。例示の一実施形態では、個々のスレッドは一度に１つのプログラムのみを実行する。ただし、リエントラントするように設計されているプログラムは、同時に複数のスレッドまたはコア上で実行してよい。例えば、ＬＰＡＲ１  １７０のＯＳ１７１のプログラム１７２は、コア１  １１０のスレッド１１１および１１３上と、コア２  １２０のスレッド１２１および１２４とで実行することができる。ＯＳの制御下で、ディスパッチ規則およびサービス品質契約に従って同一または異なるスレッド上に異なるプログラムをディスパッチすることができる。
【００２５】
システム・メモリ１６０には、例えばミリコード１６２およびＬＰＡＲハイパーバイザ１６３を含む、様々なレベルのファームウェアが常駐する。ミリコード１６２は、低レベルのシステム機能をサポートするようにファームウェアとして実施することができる。ＬＰＡＲハイパーバイザ１６３は、例えば、ＩＢＭ  Ｐｒｏｃｅｓｓｏｒ−Ｒｅｓｏｕｒｃｅ／Ｓｙｓｔｅｍ  Ｍａｎａｇｅｒ（ＴＭ）（ＰＲ／ＳＭ（ＴＭ））など、ライセンス供与された内部コードであってもよい。ＬＰＡＲハイパーバイザ１６３は、ＬＰＡＲ  １７０、１８０、１９０を設定することができ、コア１０２上でのディスパッチを管理してもよい。コンピュータにＭＴ機構１０３がインストールされている場合、ミリコード１６２およびＬＰＡＲハイパーバイザ１６３は、それぞれ、ＭＴ機構サポート・コード１６４および１６５も含む。ＭＴをサポートするための論理をミリコード１６２とＬＰＡＲハイパーバイザ１６３とコア１０２とに分散させることができるため、ＭＴ機構サポート・コード１６４および１６５は、ＭＴ機構１０３の一部とみなすことができる。図示されていないが、ＯＳ１７１、１８１、１９１のそれぞれは、それぞれのＬＰＡＲ１７０、１８０、１９０においてＭＴを有効化し利用するために、ＭＴ機構サポート・コードも含むことができる。
【００２６】
図２に、図２のコンピューティング環境ではコア４  １４０に現在、ＬＰＡＲ２  １８０ではなくＬＰＡＲ３  １９０が割り当てられている点を除き、図１と同様のコンピューティング・システムを示す。また、スレッド１４３および１４４が動作状態となっていない図１とは異なり、図２では、コア４  １４０上にＬＰＡＲ３  １９０がディスパッチされている場合、４個のスレッド１４１〜１４４がすべて、動作状態である。コア１０２上でのＬＰＡＲのディスパッチとディスパッチ解除とは動的に行われ、またある時点には他のＬＰＡＲ（図示せず）が同じコア１０２上で動作していてもよい。
【００２７】
次に図３を参照すると、一実施形態により、図１および図２におけるコア１０２のうちの１つなどの処理コアを実装するための処理回路２００のブロック図が、概略的に示されている。処理回路２００は、ＭＴ環境で１つまたは複数のスレッドを同時にサポートすることができる処理回路の一例である。図３に示す処理回路２００は、処理回路２００を他のプロセッサおよび周辺装置に接続することができるシステム・コントローラ・インターフェース・ユニット２０２を含む。システム・コントローラ・インターフェース・ユニット２０２は、データ値の読出しと格納を行うＤキャッシュ２０４と、プログラム命令を読み出すＩキャッシュ２０８と、キャッシュ・インターフェース・ユニット２０６とを外部のメモリ、プロセッサおよびその他の周辺装置に接続することもできる。
【００２８】
Ｉキャッシュ２０８は、命令をプリフェッチする命令フェッチ・ユニット（ＩＦＵ）２１０と連係して命令ストリームのロードを行うことができ、投機的ロード機能および分岐予測機能を備えてもよい。フェッチされた命令は、命令処理データにデコードするために、命令デコード・ユニット（ＩＤＵ）２１２に供給することができる。
【００２９】
ＩＤＵ２１２は、汎用演算を実行するための１つまたは複数の固定小数点ユニット（ＦＸＵ）２１６、浮動小数点演算を実行するための浮動小数点ユニット（ＦＰＵ）２１８などの様々な実行ユニットへの命令の発行を制御することができる発行ユニット２１４に、命令を供給することができる。ＦＰＵ２１８は、２進浮動小数点ユニット（ＢＦＵ）２２０、１０進浮動小数点ユニット（ＤＦＵ）２２２、またはその他の浮動小数点ユニットを含むことができる。発行ユニット２１４は、１つまたは複数のロード・ストア・ユニット（ＬＳＵ）パイプラインを介して１つまたは複数のＬＳＵ２２８にも接続することができる。複数のＬＳＵパイプラインは、ロードおよび格納と、分岐のためのアドレス生成とを行うための実行ユニットとして扱われる。ＬＳＵ２２８とＩＦＵ２１０は両方とも、オペランドおよび命令アドレスのバッファ変換を行うためにトランスレーション・ルックアサイド・バッファ（ＴＬＢ）２３０を利用することができる。
【００３０】
ＦＸＵ２１６およびＦＰＵ２１８は、汎用レジスタ（ＧＰＲ）２２４および浮動小数点レジスタ（ＦＰＲ）２２６などの様々な資源に接続することができる。ＧＰＲ２２４およびＦＰＲ２２６は、ＬＳＵ２２８によってＤキャッシュ２０４からロードおよび格納されたデータ値のためのデータ値ストレージを提供する。
【００３１】
処理回路２００は、システム時間基準生成および診断動作をサポートするために、カウンタまたはタイマ２５０あるいはその両方も含むことができる。例えば、カウンタまたはタイマ２５０あるいはその両方は、時刻と、様々な診断機能および測定機能とをサポートするために使用してもよい。
【００３２】
次に、図４を参照すると、図４ではコンピュータ・システム１００のＬＰＡＲ２  １８０において第２レベル・ハイパーバイザ３００が実行されている点を除き図１に類似したコンピューティング環境が図示されている。第２レベル・ハイパーバイザ３００、例えばＩＢＭ  ｚ／ＶＭオペレーティング・システムは、ＬＰＡＲ（第１レベル）ハイパーバイザ１６３によって提供されるＭＴサポート・コード１６５に類似したＭＴサポート・コード３０１を含む。第２レベル・ハイパーバイザ３００は、ゲスト・オペレーティング・システム３１１、３２１および３３１がそれぞれ動作する複数の仮想マシン３１０、３２０および３３０（構成とも呼ぶ）のサポートを提供する。ゲスト・オペレーティング・システム３１１、３２１および３３１は、例えばＬｉｎｕｘ（ＴＭ）、またはＩＢＭｚ／ＯＳ（ＴＭ）、ｚ／ＶＭ、またはｚ／ＴＰＦ  ＯＳを含んでよく、またはＩＢＭ会話型モニタ・システム（ＣＭＳ）などのゲスト開発環境を含んでもよい。各ゲストＯＳ３１１、３２１および３３１は、マルチスレッディングを有効化してもしなくてもよく、その場合、第２レベル・ハイパーバイザ３００は、第２レベル・ハイパーバイザ３００が動作するＬＰＡＲ２  １８０にとって利用可能な物理処理資源（コア１３０、１４０およびスレッド１３１〜１３４、１４１〜１４４）を使用して、ゲストＯＳ３１１、３２１、３３１および付随するプログラム３１２、３１３、３２２、３２３、３３２および３３３のディスパッチを行う役割を果たしてもよい。様々な仮想マシン３１０、３２０、３３０のプログラム３１２、３２２、３２３、３３２、３３３は、それぞれのゲストＯＳ３１１、３２１および３３１にとって利用可能なスレッド１３１〜１３４、１４１〜１４４上で実行することができる。ゲストＯＳ３１１、３２１および３３１は、ＭＴから透過的に恩恵を受けることができるため、ＭＴサポート・コードを含む必要がない。図４に示す実施形態では、コア３  １３０では、スレッド１３１および１３２が動作状態であり得るが、スレッド１３３および１３４は動作状態ではない。また、コア４  １４０では、スレッド１４１および１４２が動作状態であり得るが、スレッド１４３および１４４は動作状態ではなく、コア５  １５０ではスレッド１５１が動作状態であり得るが、スレッド１５２、１５３および１５４は動作状態ではない。
【００３３】
次に図５を参照すると、一実施形態により実装可能なコンピューティング環境におけるハイパーバイザ・コンテキスト保持の一例が図示されている。図５の例では、図１および図２のＬＰＡＲハイパーバイザ１６３内にいくつかのサポート構造体が図示されている。例えば、構造体４１０は、図１に示すように物理スレッド１１１、１１２、１１３、１１４、１２１、１２２、１２３、１２４上で現在稼働している論理スレッド４１１、４１２、４１３、４１４、４２１、４２２、４２３、４２４のためのアーキテクテッド・レジスタ・コンテキスト（すなわちスレッド・コンテキスト）を格納する状態記述ブロックとサテライト・ブロックとを含み、図１のＬＰＡＲ１  １７０をサポートすることができる。これらの論理スレッドがディスパッチされている間、物理スレッドはこれらのスレッドの現在のアーキテクテッド・レジスタ・コンテキストを保持する。ディスパッチされなくなると、このアーキテクテッド・レジスタ・コンテキストは、状態記述ブロックおよびサテライト・ブロックに保持されることになる。構造体４３０は、図１に示すように物理スレッド１３１、１３２、１４１、１４２上で現在稼働している論理スレッド４３１、４３２、４４１、４４２のためのアーキテクテッド・レジスタ・コンテキストを格納する状態記述ブロックおよびサテライト・ブロックを含み、図１のＬＰＡＲ２  １８０をサポートすることができる。構造体４５０は、図１に示すように物理スレッド１５１上で現在稼働している論理スレッド４５１のためのアーキテクテッド・レジスタ・コンテキストを格納する状態記述ブロックとサテライト・ブロックとを含み、図１のＬＰＡＲ３  １９０をサポートすることができる。また、構造体４５０は、物理プロセッサ上に現在ディスパッチされていない論理スレッド４６１、４６２、４６３および４６４のためのアーキテクテッド・レジスタ・コンテキストを格納する状態記述ブロックおよびサテライト・ブロックも含む。論理スレッド４７１、４７２、４７３および４７４のための状態記述ブロックおよびサテライト構造体を含むＬＰＡＲ  Ａ（図１には図示せず）のための構造体４７０など、物理コア上でディスパッチされないＬＰＡＲをサポートする他の構造体も、ＬＰＡＲハイパーバイザ１６３によって保持することができる。さらに他の構造体の例としては、論理スレッド４８１および４８２のための状態記述ブロックおよびサテライト・ブロックを含むディスパッチされていないＬＰＡＲ  Ｂ（図１には図示せず）をサポートする構造体４８０と、論理スレッド４８５のためのディスパッチされないＬＰＡＲ  Ｃのための構造体４８４とがある。
【００３４】
図５の例ではいくつかの構造体が図示されているが、マルチスレッディングを管理するために追加の構造体もＬＰＡＲハイパーバイザ１６３およびコンピュータ・システム１００内の他の場所でサポートすることができることがわかるであろう。例えば、図４の仮想マシン３１０、３２０、３３０のマルチスレッディングをサポートするための構造体を、図４の第２レベル・ハイパーバイザ３００によって保持することができる。
【００３５】
次に図６を参照すると、一実施形態によるマルチスレッディングの動的有効化のための処理の流れ５００が図示されている。ブロック５０２で、一次スレッドがシングル・スレッド（ＳＴ）モードで実行される。ブロック５０４で、マルチスレッディング（ＭＴ）モード設定命令がＳＴモードでフェッチされる。５０５にまとめて示すようにこの命令を実行する際、ＭＴモード設定命令によって指定された記憶場所から、要求されたいくつかのスレッドがブロック５０６で取得される。この記憶場所は、ＭＴモード設定命令を発行するときにパラメータ・レジスタによって指定することができる。ＭＴモード設定命令は、ＭＴ設定命令（order）と、要求スレッド数に関連づけられたプログラム指定最大スレッドｉｄ（ＰＳＭＴＩＤ）とを含む、シグナル・プロセッサ（ＳＩＧＰ）命令とすることができる。ＳＩＧＰ命令のＭＴ設定命令（order）に付随する処理の一例については、本明細書で図９を参照しながら詳述する。
【００３６】
処理５００の説明を続けると、ブロック５０８で、要求スレッド数が複数スレッドを示しているか否かが判断される。例えば、複数スレッドは１より大きい値によって示すことができる。値ゼロが単一スレッドを示す実施形態では、値１または１より大きい値によって複数スレッドを示すことができる。要求スレッド数が複数スレッドを示していないとの判断に基づいて、ブロック５１０でコアはＳＴモードのままとなり、ＭＴ設定モード命令の実行は完了し、ブロック５０２に制御が戻る。要求スレッド数が複数スレッドを示しているとの判断に基づいて、ブロック５１２でＭＴモードが有効化され、ＭＴ設定モード命令の実行は完了する。ブロック５１４で、一次スレッドと１つまたは複数の二次スレッドとを含む複数スレッドが実行される。ブロック５１６で、リセットまたは非活動化が行われない場合、処理５００はブロック５１４にループバックする。それ以外の場合、ブロック５１８で、ＳＴモードに復帰する構成のリセットまたは非活動化に基づき、ＭＴモードが無効化される。ＭＴモードの無効化の一部として、非クリア・リセットの場合はスレッド数（ＰＳＭＴＩＤ）が保持され、クリア・リセットの場合はスレッド数（ＰＳＭＴＩＤ）がゼロにされる。処理５００はブロック５０２に戻る。
【００３７】
通常ロード（load-normal）、ダンプありロード（load-with-dump）、ロード・クリア(load-clear)、またはロード・クリア・リスト指示（load-clear-list-directed）キーが起動されると、ＣＰＵはロード状態になる。チャネル・コマンド・ワード（ＣＣＷ）タイプの初期プログラム・ロード動作が正常に完了した場合、ＣＰＵはロード状態から動作状態に移行する。
【００３８】
装置チェック標識とその結果のＣＰＵ状態の予測不能要素とを、情報破壊を最小限に抑えてクリアするために、ＣＰＵリセットを使用することができる。特に、動作の分析または動作の再開のためにＣＰＵ状態を保存する場合、チェック状況をクリアするためにＣＰＵリセットを使用することができる。通常ロード（load-normal）キーまたはダンプありロード（load-with-dump）キーによってＣＰＵリセットが行われた場合、（ａ）アーキテクチャ・モードをデフォルト・モードに設定することができ、（ｂ）マルチスレッディング機構がインストールされて有効化されている場合にはマルチスレッディングが無効化される。ＣＰＵリセットによってデフォルト・モードが設定されると、それによって、ＰＳＷを復元することができるように現在のＰＳＷを保存することができる。
【００３９】
初期ＣＰＵリセットは、ＣＰＵリセットの各機能を、現在のＰＳＷ、ＣＰＵタイマ、クロック比較器、およびその他のレジスタ、すなわちブレーキング・イベント・アドレス、キャプチャされたＰＳＷ、制御、浮動小数点制御、プレフィックスおよびＴＯＤプログラマブル・レジスタなどのレジスタの初期化の機能と共に提供する。通常ロード（load-normal）キーまたはダンプありロード（load-with-dump）キーによって行われた場合、初期ＣＰＵリセットは、アーキテクチャ・モードをデフォルト・モードに設定することができる。通常ロード（load-normal）キーまたはダンプありロード(load-with-dump)キーの起動により初期ＣＰＵリセットが行われるときにマルチスレッディングが有効化されている場合、コアのうちの最小番号が付されたＣＰＵについては初期ＣＰＵリセット機能を実行することができ、コア内の他のすべてのＣＰＵについてはＣＰＵリセットが行われる。クリア・リセットによって、初期ＣＰＵリセットおよびサブシステム・リセットが行われ、さらに、ＴＯＤクロック以外の構成内のすべてのＣＰＵにおけるすべての記憶場所およびレジスタがクリアまたは初期化される。クリアは、制御プログラムがアドレス指定不能ページの内容を保持するために使用するダイレクト・アクセス記憶装置などの外部記憶装置には影響を及ぼさない。
【００４０】
ＣＰＵ電源投入リセットにより、初期ＣＰＵリセットが行われ、汎用レジスタ、アクセス・レジスタ、制御レジスタ、および浮動小数点レジスタの内容がクリアされてゼロ／デフォルト値が有効検査ブロック（valid checking-block）コードと共に設定される。なお、状態のクリアまたは初期化は値をゼロにするものである必要はなく、クリアされた状態で非ゼロ値にデフォルト設定することもできる。ＣＰＵ電源投入リセットによって構成が設定される場合、それによってアーキテクチャ・モードをデフォルト・モードに設定することができる。それ以外の場合、アーキテクチャ・モードをすでに構成内にあるＣＰＵのモードに設定してもよい。ＣＰＵリセット、初期ＣＰＵリセット、サブシステム・リセットおよびクリア・リセットは手動で開始されてもよい。
【００４１】
例示の実施形態では、各ＣＰＵに番号が割り当てられ、ＣＰＵアドレスと呼ばれる。ＣＰＵアドレスは、１つのＣＰＵを構成内で一意に識別する。ＳＩＧＰ命令のＣＰＵアドレス・フィールドでこのアドレスを指定することによって、ＣＰＵが指定される。割込みによりＣＰＵアドレス・フィールドにこのアドレスを格納することによって、誤動作アラート、緊急信号、または外部呼出しを発信しているＣＰＵを識別することができる。ＣＰＵアドレスは、構成定義処理によって割り当てられ、典型的には再構成変更の結果として変更されない。プログラムは、ＣＰＵアドレス・ストア命令を使用してＣＰＵのアドレスを判断することができる。ＣＰＵアドレス・ストア命令は、マルチスレッディング構成内でＣＰＵを識別するＣＰＵアドレスを指定するためにも使用することができる。
【００４２】
マルチスレッディングが有効化されている場合、ＣＰＵアドレスは、コア内のＣＰＵの識別情報に連結されたコア識別情報（コアＩＤ）を含むことができる。コア内のＣＰＵ識別情報は、スレッド識別情報（スレッドＩＤまたはＴＩＤ）である。構成内では、すべてのコアが同じ数のＣＰＵを提供する。ただし、モデルおよびＣＰＵタイプによっては、コア内の一部のＣＰＵが動作状態でない場合がある。
【００４３】
シグナル・プロセッサ・マルチスレッディング設定命令（order）によって使用されるパラメータ・レジスタのＰＳＭＴＩＤに基づき、固定数のビットによりスレッド識別情報を表す。このビット数をＴＩＤ幅と呼ぶ。
【００４４】
コアＩＤは、マルチスレッディングを有効化する前にＣＰＵアドレスの右端ビットから形成することができる。コアＩＤは、ＴＩＤ幅ビットだけ左にシフトされ、その結果、マルチスレッディングが利用可能になった後にはＣＰＵアドレスの左端ビットとなる。スレッドＩＤは同じＴＩＤ幅ビット数を有し、マルチスレッディングが有効化された後はＣＰＵアドレスの右端ビットを占める。スレッドＩＤは、連続した一連の数字で割り当てることができる。表１に、ＰＳＭＴＩＤと、ＴＩＤ幅と、コア識別情報およびスレッド識別情報を含むＣＰＵアドレス・ビットとの関係を例示する。
【００４５】
【表１】
0006440734.tif 000002
【００４６】
図７に、アドレス拡張を、一実施形態によるＣＰＵアドレス拡張処理６００Ａの一例として示す。ブロック６０２において、コア・アドレス値６０４を数ビットのＣＰＵアドレス・ビットとして使用して、ＳＴモードで一次スレッドにアクセスすることができる。矢印６０６はＳＴモードからＭＴモードへの切換えを示す。ブロック６０８において、拡張アドレス値６１０を使用して、ＭＴモードで一次スレッドまたは１つまたは複数の二次スレッドにアクセスすることができる。拡張アドレス値６１０は、シフト・コア・アドレス値６１２としてシフトされてスレッド・アドレス値６１４と連結された、コア・アドレス値６０４を含む。シフト・コア・アドレス値６１２はコア識別子（コアＩＤ）であり、スレッド・アドレス値６１４はスレッド識別子（ＴＩＤ）である。シフト・コア・アドレス値６１２は、要求された最大識別子、例えばＰＳＭＴＩＤに基づく量だけシフトすることができる。スレッド・アドレス値６１４内の数ビットのＴＩＤビットは、上記の表１に示すようにＰＳＭＴＩＤに基づいて決定することができる。スレッド・アドレス値６１４をシフト・コア・アドレス値６１２の下位ビットに連結して、拡張アドレス値６１０を形成することができる。すべてゼロのスレッド・アドレス値６１４は一次スレッドを指定し、ゼロより大きい値は二次スレッドを識別し、アドレス指定する。
【００４７】
ＭＴモードとＳＴモードとを切り換える場合、コア・アドレス値６０４（ＳＴモード）または拡張アドレス値６１０（ＭＴモード）を選択して、それぞれＳＴモードまたはＭＴモードでのＣＰＵアドレスとして使用する。コア・アドレス値６０４は、ＳＴモードで使用される標準形式アドレスの一例であり、コアは、ＭＴモードの無効化に基づいてＭＴモードからＳＴモードに復帰する。例示の一実施形態では、ＭＴモードの無効化に基づいて一次スレッドのみがアクセス可能（すなわち二次スレッドはアクセス不能）になる。図８に、一実施形態によるＣＰＵアドレス縮小処理６００Ｂの一例を示す。図８の矢印６１６は、ブロック６０８のＭＴモードからブロック６０２のＳＴモードへの切換えを示す。ＭＴモードからＳＴモードへの復帰は、拡張アドレス値６１０を右にシフトすることと、スレッド・アドレス値６１４を削除して、シフト・コア・アドレス値６１２からコア・アドレス値６０４（コアＩＤ）をＣＰＵアドレスとして含む標準形式アドレスを形成することとを含むことができる。
【００４８】
リセット機能によってマルチスレッディングを無効化する場合、（ａ）スレッドＩＤゼロを有するＣＰＵのＣＰＵアドレスが、有効化の際に使用したＴＩＤ幅ビット数と同じビット数だけ右にシフトされ、（ｂ）アドレスの左側のＴＩＤ幅ビット数にゼロが挿入され、（ｃ）ＣＰＵアドレスが元の非マルチスレッディング形式（すなわち標準形式アドレス）に戻る。マルチスレッディングが無効化されると、マルチスレッディングが有効なときに非ゼロのスレッドＩＤを有するコア内のすべてのＣＰＵが、動作状態でなくなる。
【００４９】
マルチスレッディングが有効化されていない場合、ＣＰＵアドレスは構成定義処理によって割り当てられた値から変化しない。この場合、スレッド識別情報は存在しない。
【００５０】
いくつかのシグナル・プロセッサ命令（order）が、例えば開始、停止、再開、停止および状態ストア、初期ＣＰＵリセット、ＣＰＵリセット、アドレス指定時状態ストア、アーキテクチャ設定、稼働状態センス、マルチスレッディング設定、アドレス指定時追加状態ストアなどを含む命令（order）をＣＰＵに供給することができる。初期ＣＰＵリセットまたはＣＰＵリセットは、シグナル・プロセッサ命令によって開始することができ、アーキテクチャ・モードまたは他のＣＰＵに影響を及ぼさず、マルチスレッディングを無効化せず、Ｉ／Ｏをリセットさせない。
【００５１】
アーキテクチャ設定命令（order）は、構成内のすべてのＣＰＵがそのモードに設定されるアーキテクチャ・モードを指定する。アーキテクチャの相違には、ＣＰＵによってサポートされる異なるアドレス指定モード、レジスタ定義、および命令が含まれ得る。アーキテクチャ・モードを変更すると、レジスタのビット選択フィールドをデフォルト状態に設定する（例えばゼロにする）ことができ、構成内のすべてのＣＰＵのアクセス・レジスタ・トランスレーション・ルックアサイド・バッファ（ＡＬＢ）およびトランスレーション・ルックアサイド・バッファ（ＴＬＢ）がクリアされ、順序付け機能およびチェックポイント同期機能を構成内のすべてのＣＰＵについて実行することができる。
【００５２】
稼働状態センス命令（order）は、アドレス指定されたＣＰＵが稼働しているか否かを示すことができる。ＳＴモードでは、稼働／非稼働状態として標識を返すことができる。ＭＴモードでは、アドレス指定されたＣＰＵが属するコアのいずれかのＣＰＵが稼働中であるか、または、アドレス指定されたＣＰＵが属するコアのすべてのＣＰＵが稼働状態ではないかを識別するための標識を使用することができる。
【００５３】
ＭＴモード設定命令（order）は、マルチスレッディング機構を有効化する。パラメータ・レジスタのビット位置が、構成内で付与されるＰＳＭＴＩＤを含むことができる。ＰＳＭＴＩＤは、各コアにおいてアドレス指定可能にされるＣＰＵの数よりも１だけ少なく定義することができる。例えば、指定されたビット位置における値３は、最大４個のスレッドが提供されることを示す。構成内のすべてのＣＰＵがアドレス指定されるとみなされるため、ＳＩＧＰ命令のＣＰＵアドレス・レジスタの内容は無視することができる。ＭＴ設定命令（order）が受け付けられた場合、ＭＴ設定命令（order）はＳＩＧＰ命令の実行中にすべてのＣＰＵによって完了される。図９を参照すると、ＳＩＧＰ  ＭＴ設定命令（order）７０２の処理７００が図示されている。図９の処理７００を参照しながら本明細書で詳述するように、無効な命令（order）、不正な状態、および無効なパラメータのうちの１つまたは複数と共にＳＩＧＰ  ＭＴ設定命令（order）７０２が発行されたとの判断に基づき、エラー標識を出力し、ＭＴモードの有効化を防止することができる。
【００５４】
ブロック７０４でマルチスレッディング機構がインストールされていない場合、または、有効なアーキテクチャ・モードでＣＰＵが有効化されていない場合７０８、ＭＴ設定命令（order）は受け付けられず、それぞれブロック７０６または７１０で無効命令（order）標識が返されてもよい。ブロック７１２で構成内の他のＣＰＵが停止状態またはチェック停止状態でない場合、またはブロック７１６で構成がマルチスレッディング用にすでに有効化されている場合、ＭＴ設定命令（order）は受け付けられず、それぞれブロック７１４または７１８で不正状態標識が返されてもよい。
【００５５】
ブロック７２０でＰＳＭＴＩＤが無効な場合、ＭＴ設定命令（order）は受け付けられず、ブロック７２２で無効パラメータ標識が返されてもよい。ブロック７２４でＰＳＭＴＩＤがゼロにされると、構成はマルチスレッディング用としては有効化されず、ＳＴモードのままとなり、ブロック７２８で条件コードとしていずれかの状態を出力する。例示の一実施形態では、ＰＳＭＴＩＤは有効で、ゼロ以外であり、ブロック７２６で構成がマルチスレッディング用として有効化され、その結果、ＣＰＵアドレス拡張が行われ、構成内のすべてのＣＰＵのＡＬＢおよびＴＬＢの内容がクリアされ、構成内のすべてのＣＰＵに対して順序付けおよびチェックポイント同期機能が実行される。ブロック７２８で、状態を条件コードで出力することができる。正常に完了すると、ＭＴ設定命令（order）を実行しているＣＰＵ以外のすべてのＣＰＵは停止またはチェック停止状態のままとなる。ただし、マルチスレッディングが有効化される前にＣＰＵがチェック停止状態だった場合、同じコア内で非ゼロのスレッドＩＤを有するＣＰＵが停止またはチェック停止状態になっているか否かは予測不能な場合がある。
【００５６】
スレッド・コンテキストはアーキテクテッド・レジスタ・コンテキストとも呼ばれる。マルチスレッディングが有効化される前の各ＣＰＵのアーキテクテッド・レジスタ・コンテキスト（すなわち、ＰＳＷ、ＣＰＵタイマ、クロック比較器、汎用レジスタ、浮動小数点レジスタおよび浮動小数点制御レジスタ、ベクトル・レジスタ、制御レジスタ、アクセス・レジスタ、プレフィックス・レジスタ、ならびにＴＯＤプログラマブル・レジスタなどの内容）は、マルチスレッディングが有効化された後で、それぞれのコアのＴＩＤゼロを有するＣＰＵのアーキテクテッド・レジスタ・コンテキストになる。同様に、ＭＴ有効化構成の各コアのＴＩＤゼロを有するＣＰＵのアーキテクテッド・レジスタ・コンテキストは、通常ロード（load-normal）キーまたはダンプありロード（load-with-dump）キーの起動の結果としてマルチスレッディングが無効化されるとそれぞれのＣＰＵのアーキテクテッド・レジスタ・コンテキストとなる。
【００５７】
通常ロード（load-normal）キーまたはダンプありロード（load-with-dump）
キー動作の結果としてマルチスレッディング機構が無効化される場合、非ゼロスレッド識別情報を有するすべてのＣＰＵのアーキテクテッド・レジスタ・コンテキストを保持することができる。クリア・リセットの介在なしにマルチスレッディング機構が後で再度有効化される場合、非ゼロのスレッド識別情報を有するすべてのＣＰＵのアーキテクテッド・レジスタ・コンテキストが復元される。
【００５８】
マルチスレッディングが通常ロード（load-normal）キーまたはダンプありロード（load-with-dump）キーの起動により無効化された後で再度有効化される場合に、パラメータ・レジスタのビット内のＰＳＭＴＩＤの値が前回の有効化で使用されたものと異なる場合、非ゼロのスレッドＩＤを有するすべてのＣＰＵのアーキテクテッド・レジスタ・コンテキストは予測不能な場合がある。
【００５９】
システム情報ストア命令を使用して、構成の構成要素に関する情報をシステム情報ブロック（ＳＹＳＩＢ）に格納することができる。ＳＹＳＩＢは、ＭＴインストール済みフィールド、ＭＴ汎用フィールド、総ＣＰＵ／コア数、構成済みＣＰＵ／コア数、待機ＣＰＵ／コア数、予約ＣＰＵ／コア数、およびその他のフィールドを含むことができる。ＭＴインストール済みフィールドは、マルチスレッディング機構がインストールされているか否かを示すことができ、第１のコア・タイプ、例えば特殊コア・タイプのための最高サポートＴＩＤも示してよい。ＭＴ汎用フィールドは、第２のコア・タイプ、例えば汎用コア・タイプのための最高サポートＴＩＤを示すことができる。ＭＴ汎用フィールド内の最高サポートＴＩＤは、ＭＴインストール済みフィールド内の最高サポートＴＩＤ以下に制限されてもよい。総ＣＰＵ／コア数は、構成済み状態か待機状態か予約状態かを問わず、構成内の汎用ＣＰＵまたは汎用ＣＰＵを含むコアの総数を示すことができる。構成済みＣＰＵ／コア数は、構成済み状態、すなわち、構成内にあり、プログラムを実行する準備が整っている状態の汎用ＣＰＵまたは汎用ＣＰＵを含むコアの数を示すことができる。待機ＣＰＵ／コア数は、待機状態、すなわち、構成済み状態になるまではプログラムを実行するための使用に供することができない汎用ＣＰＵまたは汎用ＣＰＵを含むコアの数を示す。予約ＣＰＵ／コア数は、予約状態、すなわち、プログラムを実行するための使用に供することができず、構成済み状態にされることができない汎用ＣＰＵまたは汎用ＣＰＵを含むコアの数を示す。
【００６０】
次に図１０を参照すると、一実施形態によるＭＴ利用情報を提供するためのハードウェア・カウンタを実装するための処理回路８００のブロック図が概略的に示されている。一実施形態では、図１０に示す処理回路８００は図３に示す処理回路２００に含まれる。処理回路８００は、利用カウンタ８０２と、コア・クロック８０６と、制御信号８０４と、ＰＳＷ８１０と、スレッド有効性マスク（ＴＶＭ）８０８とを含む。物理コアが４個のスレッドを含む一実施形態では、１個のスレッドがアクティブである場合に、カウンタ８０２の第１の組が完了済み命令とクロック・サイクルとをカウントするために割り当てられ、２個のスレッドがアクティブである場合に、カウンタ８０２の第２の組が完了済み命令とクロック・サイクルとをカウントするために割り当てられ、３個のスレッドがアクティブである場合に、カウンタ８０２の第３の組が完了済み命令とクロック・サイクルとをカウントするために割り当てられ、４個のスレッドがアクティブである場合に、カウンタ８０２の第４の組が完了済み命令とクロック・サイクルとをカウントするために割り当てられる。
【００６１】
スレッドは、そのスレッドが有効であって、現在、待ち状態（例えば割込み待ち状態または命令をフェッチしていない状態、あるいはその両方の状態）ではない場合にアクティブである。したがって、アクティブなスレッドは、命令をフェッチしている場合がある。スレッドの有効性は、例えば、コア上で現在実行中の論理スレッドに関する状態情報の一部として提供可能なスレッド有効性マスク（ＴＶＭ）８０８の内容に基づいて判断することができる。一実施形態では、ＴＶＭ８０８は、特定のスレッドが有効か無効かを示す、各スレッドのためのビットを含み、コア１１０上のハードウェアにキャッシュすることができる。スレッド有効性は、システム管理ソフトウェア（例えばハイパーバイザ、ＢＩＯＳ）から受け取るスレッド有効性情報を含む１つまたは複数の信号に基づいて判断することもできる。
【００６２】
一実施形態では、スレッドのＰＳＷ８１０を使用してスレッドが現在待ち状態であるか否かを判断することができる。一般には、割込みにより、待ち状態のスレッドがアクティブになる。あるいは、別の実施形態では、他の内部プロセッサ状態情報を使用して、いつスレッドがアクティブであるかを判断してもよい。カウンタ８０２がクロック・サイクルをカウントするために使用する図３に示すコア・クロック８０６は、処理回路２００が使用するシステム・クロックによって実装するか、またはそのシステム・クロックから導き出すことができる。図１０には、いつ命令が完了したかを判断するために使用可能な制御信号８０４も示されている。
あるいは、発行ユニット（例えば図３の発行ユニット２１４）または命令フェッチ・ユニット（例えば図３の命令フェッチ・ユニット２１０）からの情報を使用して、完了済み命令数をカウンタ８０２に示すことができる。
【００６３】
図１１に、一実施形態による利用カウンタをキャプチャする構成の一例を示す。図１１の例では、構成９５０が一対のコア９００Ａおよび９００Ｂを含む。コア９００Ａおよび９００Ｂはそれぞれ、利用カウンタ９０２と、４個のスレッド、スレッド０、スレッド１、スレッド２およびスレッド３とを含む。さらに、利用カウンタ９０２は、可能なアクティブ・スレッド数（この場合、１、２、３、４）ごとに異なるカウンタの組に分けることができる。図１１に示す利用カウンタ９０２は、４個のスレッドのうちの１個がアクティブな場合にクロック・サイクル数をカウントするためのＭＴ１ＣＣ、および４個のスレッドのうちの１個がアクティブな場合に完了済み命令数をカウントするためのＭＴ１ＩＣの組１と、４個のスレッドのうちの２個がアクティブな場合にクロック・サイクル数をカウントするためのＭＴ２ＣＣ、および４個のスレッドのうちの２個がアクティブな場合に完了済み命令数をカウントするためのＭＴ２ＩＣの組２と、４個のスレッドのうち３個がアクティブな場合にクロック・サイクル数をカウントするためのＭＴ３ＣＣ、および４個のスレッドのうち３個がアクティブである場合に完了命令数をカウントするためのＭＴ３ＩＣの組３と、４個のスレッドのすべてがアクティブである場合にクロック・サイクル数をカウントするためのＭＴ４ＣＣ、および４個のスレッドのすべてがアクティブである場合に完了済み命令数をカウントするＭＴ４ＩＣの組４とを含む。
【００６４】
一実施形態では、受け付けたマルチスレッディング設定信号プロセッサ（ＳＩＧＰ）命令（order）により、例えばその命令（order）の完了時にコア９００Ａ上でＭＴが有効化されると、コア９００Ａ上で利用カウンタ９０２が起動される。同様に、コア９００Ｂ上でＭＴが有効化されると、コア９００Ｂ上で利用カウンタ９０２が起動される。一実施形態では、コア９００Ａ上でＭＴを無効化させるいずれかのアクションによってコア９００Ａ上で利用カウンタ９０２が無効化される。同様に、コア９００Ｂ上でＭＴが無効化されると、コア９００Ｂ上で利用カウンタ９０２を無効化することができる。一実施形態では、コア上でＭＴが無効化された後も、コアがＳＴモードで動作している時にＭＴ１ＣＣおよびＭＴ１ＩＣのカウンタの組はインクリメントし続けることができる。
【００６５】
一実施形態では、例えばオペレーティング・システムまたはハイパーバイザによって実行されるソフトウェア命令によって、利用カウンタの内容を読み取ることができる。
【００６６】
次に図１２を参照すると、一実施形態による、コア上でのＭＴ利用カウント処理の流れが概略的に図示されている。ブロック１００２で、コアの利用カウンタが起動される。利用カウンタの起動は、カウンタのリセットを含むことができる。一実施形態では、図１２に示すブロック１００４からブロック１０２６の処理は、１クロック・サイクルに１回実行される。図１２に示す処理を使用して、コアの複数のスレッドにおける１つまたは複数の実行イベントの集約に基づいて１つまたは複数の利用カウンタをインクリメントすることができる。
【００６７】
ブロック１００４で、（例えばＴＶＭまたはＰＳＷあるいはその両方の内容に基づき）厳密に１個のスレッドがアクティブであるか否かが判断される。１個のスレッドがアクティブである場合、処理はブロック１００６に進み、コアが１個のスレッドをアクティブにしているクロック・サイクル数をカウントするＭＴ１ＣＣカウンタが１だけインクリメントされる。ブロック１００８で、（例えば制御信号の値に基づき）命令が完了したか否かが判断される。命令が完了した場合、ブロック１０１０が実行され、１個のスレッドがアクティブである場合にコアによって完了された命令の数をカウントするＭＴ１ＩＣカウンタをインクリメントする。次に、処理が次のクロック・サイクルでブロック１００４から続行される。ブロック１００８での判断により命令が完了していない場合、次のクロック・サイクルでブロック１００４から処理が続行される。
【００６８】
ブロック１００４で複数のスレッドがアクティブであると判断された場合（厳密に１個のスレッドがアクティブではないために暗黙的に示される）、処理はブロック１０１２に進み、厳密に２個のスレッドがアクティブであるか否かが判断される。２個のスレッドがアクティブである場合、処理はブロック１０１４に進み、コアが２個のスレッドをアクティブにしているクロック・サイクル数をカウントするＭＴ２ＣＣカウンタが１だけインクリメントされる。ブロック１０１６で、命令が完了したか否かが判断される。２個のスレッドのうちのいずれかで命令が完了した場合、ブロック１０１８が実行され、２個のスレッドがアクティブである場合にコアによって完了された命令の数をカウントするＭＴ２ＩＣカウンタをインクリメントする。一実施形態では、両方のスレッドで命令が完了した場合、ＭＴ２ＩＣカウンタが２だけインクリメントされる。次に、処理は次のクロック・サイクルでブロック１００４から続行される。ブロック１０１６の判断で命令が完了していなかった場合、処理は次のクロック・サイクルでブロック１００４から続行される。
【００６９】
コア内の各スレッドについて同様の処理が続けられる。ブロック１０２０で、厳密に「Ｎ」個のスレッドがアクティブであると判断された場合、処理はブロック１０２２に進み、それ以外の場合はエラー条件を報告することができる。ブロック１０２２で、コアがＮ個のスレッドをアクティブにしているクロック・サイクルの数をカウントするＭＴＮＣＣカウンタが１だけインクリメントされる。ブロック１０２４で、命令が完了したか否かが判断される。Ｎ個のスレッドのいずれかで命令が完了した場合、ブロック１０２６が実行され、Ｎ個のスレッドがアクティブである場合にコアによって完了された命令の数をカウントするＭＴＮＩＣカウンタをインクリメントする。次に、処理は次のクロック・サイクルでブロック１００４から続行される。ブロック１０２４の判断で命令が完了していない場合、処理は次のクロック・サイクルでブロック１００４から続行される。
【００７０】
このようにして、命令完了（一種の実行イベント）が追跡され、複数のコア全体の結果が集約される。本明細書で使用する実行イベントとは、クロック・サイクル、命令完了、キャッシュ・ミス、および分岐予測誤りなど、ただし、これらに限定されない、追跡可能なコアのスレッド上の任意のイベントを指す。
【００７１】
技術的効果および利点には、シングル・スレッド動作モードとマルチスレッディング動作モードの両方をサポートするコンピュータ・システムにおいてコアの利用情報を収集可能であることが含まれる。
【００７２】
実施形態には、マルチスレッディング（ＭＴ）コンピュータ・システムにおける利用を追跡するための方法、システムおよびコンピュータ・プログラム製品が含まれる。一態様によると、コンピュータ・システムは、コアの共用資源上で複数のスレッドをサポートするＭＴモードで動作するように構成されたコアを備えた構成を含む。コアは、複数の利用カウンタをリセットすることを含む方法を実行するように構成される。利用カウンタは、複数組のカウンタを含む。コア上での各クロック・サイクルについて、これらの複数組のカウンタから１組のカウンタが選択される。この選択は、コア上で現在アクティブであるスレッドの数に基づいて行われる。さらに、各クロック・サイクルについて、選択された１組のカウンタ内のカウンタが、コアの複数のスレッドにおける１つまたは複数の実行イベントの集約に基づいてインクリメントされる。利用カウンタの値はソフトウェア・プログラムに供給される。
【００７３】
別の態様によると、構成における利用を追跡するコンピュータ実装方法が提供される。構成は、マルチスレッディング（ＭＴ）モードで動作するように構成されたコアを含む。ＭＴモードはコアの共用資源上で複数のスレッドをサポートする。この方法は、複数の利用カウンタをリセットすることを含む。利用カウンタは、複数組のカウンタを含む。コア上での各クロック・サイクルについて、複数組のカウンタから１組のカウンタを選択する。この選択は、コア上で現在アクティブであるスレッド数に基づいて行われる。さらに、各クロック・サイクルについて、選択された１組のカウンタ内のカウンタが、コアの複数のスレッドにおける１つまたは複数の実行イベントの集約に基づいてインクリメントされる。利用カウンタの値はソフトウェア・プログラムに供給される。
【００７４】
さらに他の態様は、構成における利用を追跡するためのコンピュータ・プログラム製品である。構成は、マルチスレッディング（ＭＴ）モードで動作するように構成されたコアを含む。ＭＴモードは、コアの共用資源上で複数のスレッドをサポートする。このコンピュータ・プログラム製品は、プログラム命令が具現化されたコンピュータ可読記憶媒体を含み、このコンピュータ可読記憶媒体は信号ではなく、プログラム命令は、処理回路に方法を実行させるように処理回路によって読取り可能である。この方法は、複数の利用カウンタをリセットすることを含む。利用カウンタは、複数組のカウンタを含む。コア上での各クロック・サイクルについて、複数組のカウンタから１組のカウンタを選択する。この選択は、コア上で現在アクティブであるスレッド数に基づいて行われる。さらに、各クロック・サイクルについて、選択された１組のカウンタ内のカウンタが、コアの複数のスレッドにおける１つまたは複数の実行イベントの集約に基づいてインクリメントされる。利用カウンタの値はソフトウェア・プログラムに供給される。
【００７５】
上述の１つまたは複数の特徴に加えて、または代替として、さらに他の実施形態は、実行イベントがクロック・サイクルを含み、選択された１組カウンタ内のカウンタが１だけインクリメントされる形態を含むことができる。
【００７６】
上述の１つまたは複数の特徴に加えて、または代替として、さらに他の実施形態は、実行イベントが命令完了をさらに含み、選択された１組のカウンタ内の他のカウンタが、クロック・サイクル中に現在アクティブであるすべてのスレッド上での命令完了数に基づいてインクリメントされる形態を含むことができる。
【００７７】
上述の１つまたは複数の特徴に加えて、または代替として、さらに他の実施形態は、実行イベントがキャッシュ・ミスをさらに含み、選択された１組のカウンタ内の他のカウンタが、クロック・サイクル中に現在アクティブであるすべてのスレッドでのキャッシュ・ミス数に基づいてインクリメントされる形態を含むことができる。
【００７８】
上述の１つまたは複数の特徴に加えて、または代替として、さらに他の実施形態は、実行イベントが分岐予測誤りをさらに含み、選択された１組のカウンタ内の他のカウンタが、クロック・サイクル中に現在アクティブであるすべてのスレッド上での分岐予測誤り数に基づいてインクリメントされる形態を含むことができる。
【００７９】
上述の１つまたは複数の特徴に加えて、または代替として、さらに他の実施形態は、スレッドが、スレッドが有効であって、待ち状態でない場合に現在アクティブである形態を含むことができる。
【００８０】
上述の１つまたは複数の特徴に加えて、または代替として、さらに他の実施形態は、ソフトウェア・プログラムがオペレーティング・システムまたはハイパーバイザである形態を含むことができる。
【００８１】
本明細書で使用されている用語は、特定の実施形態を説明するためのみのものであり、本発明を限定することを意図したものではない。本明細書では、別に明記していない限り、単数形の「ａ」、「ａｎ」、および「ｔｈｅ」は複数形も含むことを意図している。また、本明細書で使用されている「ｃｏｍｐｒｉｓｅｓ（含む）」という用語または「ｃｏｍｐｒｉｓｉｎｇ（含む）」という用語あるいはその両方は、記載されている特徴、整数、ステップ、動作、要素、または構成要素あるいはこれらの組合せの存在を明記するものであるが、１つまたは複数の他の特徴、整数、ステップ、動作、要素、構成要素またはこれらのグループあるいはこれらの組合せの存在を排除しないものと理解されたい。
【００８２】
添付の特許請求の範囲のすべてのミーンズまたはステップ・プラス・ファンクション要素の対応する構造体、材料、作用、および均等物は、具体的に請求されている他の請求要素と組み合わせて機能を実行するためのあらゆる構造体、材料または作用を含むことを意図している。本発明の説明は、例示および説明を目的として示されており、網羅的であることまたは開示の形態の本発明に限定することを意図したものではない。本発明の範囲および趣旨から逸脱することなく、当業者には多くの変更および変形が明らかとなるであろう。実施形態は、本発明の原理および実際の適用を最もよく説明するためと、企図された特定の用途に適するように様々な変更を加えた様々な実施形態のために当業者が本発明を理解することができるようにするために、選択され、説明されたものである。
【００８３】
本発明の様々な実施形態の説明は、例示を目的として示されたものであり、網羅的であること、または開示されている実施形態に限定されることを意図したものではない。記載されている実施形態の範囲および趣旨から逸脱することなく、多くの変更および変形が当業者には明らかとなるであろう。本明細書で使用されている用語は、本発明の原理、実際の適用、または市場に見られる技術の技術的改良を最もよく説明するため、または当業者が本明細書で開示されている実施形態を理解することができるようにするために選択されたものである。
【００８４】
図１３を参照すると、コンピュータ可読記憶媒体１１０２およびプログラム命令１１０４を含む一実施形態によるコンピュータ・プログラム製品１１００の概要が示されている。
【００８５】
本発明は、システム、方法またはコンピュータ・プログラム製品、あるいはこれらの組合せとすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実施させるためのコンピュータ可読プログラム命令が格納されたコンピュータ可読記憶媒体（または複数のコンピュータ可読記憶媒体）を含むことができる。
【００８６】
コンピュータ可読記憶媒体は、命令実行装置が使用するための命令を保持または格納することができる有形の装置とすることができる。コンピュータ可読記憶媒体は、例えば電子記憶装置、磁気記憶装置、光記憶装置、電磁記憶装置、半導体記憶装置、またはこれらの任意の適切な組合せとすることができるが、これらには限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストには、以下のものが含まれる。すなわち、携帯型コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、携帯型コンパクト・ディスク読取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピィ・ディスク、パンチカードまたは命令が記録された溝内の凸状構造体などの機械的に符号化された装置、およびこれらの任意の適切な組合せなどがある。本明細書で使用されているコンピュータ可読記憶媒体とは、電波またはその他の自由に伝播する電磁波、導波路またはその他の伝送媒体を伝播する電磁波（例えば光ファイバ・ケーブルを通る光パルス）、または電線を介して伝送される電気信号など、それ自体が一時的な信号であるものと解釈すべきではない。
【００８７】
本明細書に記載のコンピュータ可読プログラム命令は、ネットワーク、例えばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、または無線ネットワークあるいはこれらの組合せを介して、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理装置に、または外部コンピュータまたは外部記憶装置にダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、交換機、ゲートウェイ・コンピュータ、またはエッジ・サーバあるいはこれらの組合せを含むことができる。各コンピューティング／処理装置内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースが、ネットワークからコンピュータ可読プログラム命令を受け取り、それらのコンピュータ可読プログラム命令をそれぞれのコンピューティング／処理装置内のコンピュータ可読記憶媒体に格納するために転送する。
【００８８】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Ｓｍａｌｌｔａｌｋ(R)、Ｃ＋＋などのオブジェクト指向プログラミング言語および「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組合せで書かれたソース・コードまたはオブジェクト・コードとすることができる。コンピュータ可読プログラム命令は、全体をユーザのコンピュータ上で、一部をユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして、一部をユーザのコンピュータ上で一部をリモート・コンピュータ上で、あるいは全体をリモート・コンピュータまたはリモート・サーバ上で実行することができる。後者の場合、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してユーザのコンピュータに接続することができ、あるいは接続は（例えばインターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行ってもよい。ある実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル・ロジック・アレイ（ＰＬＡ）を含む電子回路が、コンピュータ可読プログラム命令の状態情報を使用して電子回路をパーソナライズすることにより、コンピュータ可読プログラム命令を実行してもよい。
【００８９】
本明細書では本発明の態様について、本発明の実施形態による方法、装置（システム）およびコンピュータ・プログラム製品を示すフローチャート図またはブロック図あるいはその両方を参照しながら説明している。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方のブロックの組合せは、コンピュータ可読プログラム命令によって実装可能であることがわかるであろう。
【００９０】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラマブル・データ処理装置のプロセッサを介して実行される命令がフローチャートまたはブロック図あるいはその両方のブロックに明記されている機能／作用を実装する手段を形成するように、汎用コンピュータ、専用コンピュータ、またはその他のプログラマブル・データ処理装置のプロセッサに供給されて、マシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方のブロックに明記された機能／作用の態様を実装する命令を含む製造品を含むように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラマブル・データ処理装置、またはその他の装置あるいはこれらの組合せに対して特定の方式で機能するように指示するものであってもよい。
【００９１】
コンピュータ可読プログラム命令は、コンピュータ、その他のプログラマブル装置、またはその他の装置上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに明記されている機能／作用を実装するように、コンピュータ、その他のプログラマブル・データ処理装置、またはその他の装置にロードされ、コンピュータ、その他のプログラマブル装置またはその他の装置上で一連の動作ステップを実行させるものであってもよい。
【００９２】
図面中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能、および動作を示す。なお、フローチャートまたはブロック図の各ブロックは、明記されている論理機能を実装するための１つまたは複数の実行可能命令を含む、命令のモジュール、セグメント、または一部を表す場合がある。ある代替実装形態では、ブロックに記載されている機能は図面に記載されている順序を入れ替えて行われてもよい。例えば、連続して示された２つのブロックは、実際には、必要な機能に応じて、実質的に同時に実行されてもよく、またはそれらのブロックは場合によっては逆の順序で実行されてもよい。また、ブロック図またはフローチャート図あるいはその両方の各ブロック、および、ブロック図またはフローチャート図あるいはその両方のブロックの組合せは、明記された機能または作用を実行するかまたは専用ハードウェアとコンピュータ命令との組合せを実施する、専用ハードウェア・ベースのシステムによって実装することができることにも留意されたい。
【図１】
0006440734.tif 000003
【図２】
0006440734.tif 000004
【図３】
0006440734.tif 000005
【図４】
0006440734.tif 000006
【図５】
0006440734.tif 000007
【図６】
0006440734.tif 000008
【図７】
0006440734.tif 000009
【図８】
0006440734.tif 000010
【図９】
0006440734.tif 000011
【図１０】
0006440734.tif 000012
【図１１】
0006440734.tif 000013
【図１２】
0006440734.tif 000014
【図１３】
0006440734.tif 000015