(57)【特許請求の範囲】
【請求項１】
コンピューティング環境におけるスレッドの実行を制御する方法であって、
前記コンピューティング環境のプロセッサにおいて動作するスレッドによって、前記プロセッサ内で実行される他のスレッドの実行を停止させるステップであって、停止させる前記ステップが、
前記スレッドと前記他のスレッドとによって共有される共有レジスタ内の前記他のスレッドについてのステータス情報を獲得するステップと、
前記ステータス情報に基づいて、前記他のスレッドの実行を停止させるかどうかを判定するステップと、を含み、
前記他のスレッドの実行を停止させることを前記判定が示すことに基づいて、前記スレッドによって、１つまたは複数のオペレーションを実行するステップと、
を含む方法。
【請求項２】
コンピューティング環境におけるスレッドの実行を制御する方法であって、
前記コンピューティング環境のプロセッサにおいて動作するスレッドによって、前記プロセッサ内で実行される他のスレッドの実行を停止させるステップであって、停止させる前記ステップが、
前記他のスレッドを停止させることが禁止されているかどうかを、前記スレッドと前記他のスレッドとによって共有される共有レジスタ内のビットをチェックすることで判定するステップと、
前記他のスレッドを停止させることが禁止されていないことを前記判定が示すことに基づいて、前記他のスレッド上での命令フェッチングおよび実行を停止させるステップと、
前記他のスレッドの実行が停止したかどうかを判定するために、前記他のスレッドのステータスをチェックするステップと、を含み、
前記他のスレッドの実行が停止したことを前記チェックが示すことに基づいて、前記スレッドによって、１つまたは複数のオペレーションを実行するステップと、
を含む方法。
【請求項３】
前記１つまたは複数のオペレーションの完了に基づいて、前記スレッドが、前記他のスレッドによる実行の継続を許可する、請求項１に記載の方法。
【請求項４】
前記他のスレッドのステータスをチェックする前記ステップが、ドレーン命令を使用するステップを含み、前記ドレーン命令が、前記スレッド上での命令ディスパッチを保留し、前記他のスレッドについてのステータスを問い合わせるように構成され、前記ドレーン命令が、前記１つまたは複数のオペレーションを実行する前記ステップの前に、１つまたは複数の条件が満たされるべきことを指定し、前記１つまたは複数のオペレーションを実行する前記ステップが、前記１つまたは複数の条件が満たされたことを前記ドレーン命令の結果が示すことに基づいて実行される、請求項２に記載の方法。
【請求項５】
前記他のスレッドの実行が停止したことを前記チェックが示すことに基づいて、前記他のスレッドを停止させることが禁止されているかどうかを再判定するステップと、
前記他のスレッドを停止させることが禁止されていることを前記再判定が示すことに基づいて、前記他のスレッド上での実行を許可するステップと、
前記他のスレッドを停止させることが禁止されていないことを前記再判定が示すことに基づいて、前記１つまたは複数のオペレーションを実行するステップと、
をさらに含む、請求項２に記載の方法。
【請求項６】
請求項１ないし５のいずれかに記載の方法のすべてのステップを実施する手段を備えるシステム。
【請求項７】
コンピュータ・システム上で実行されたときに請求項１ないし５のいずれかに記載の方法のすべてのステップを実施するための命令を含むコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
１つまたは複数の態様は、一般に、マルチスレッド・プロセッサに関し、詳細には、そのようなプロセッサにおけるスレッドの実行の制御に関する。
【背景技術】
【０００２】
プロセッサは、同時に実行する命令を有する複数のハードウェア・スレッドを含むことができる。そのようなプロセッサは、同時マルチスレッディング（ＳＭＴ：simultaneous multi-threading）を実施すると言われる。これは、現代のプロセッサ・アーキテクチャによって提供されるリソースをより良く利用するために、複数の独立した実行スレッドを可能とすることによって、プロセッサの全体的な効率を改善するために使用される技法である。
【０００３】
マルチスレッド・プロセッサのスレッドの実行を制御することによって、さらなる効率を獲得することができる。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】“z/Architecture - Principles ofOperation,” Publication No. SA22-7832-09, 10th Edition,September 2012
【発明の概要】
【発明が解決しようとする課題】
【０００５】
マルチスレッド・プロセッサのスレッドの実行を制御することによって、さらなる効率を獲得する。
【課題を解決するための手段】
【０００６】
請求項１において特許請求されるような方法、ならびに対応するシステムおよびコンピュータ・プログラム製品の提供を通して、先行技術の短所が、克服され、利点が提供される。
【０００７】
さらなる特徴および利点が実現される。他の実施形態および態様は、本明細書において詳細に説明され、特許請求される本発明の一部と見なされる。
【０００８】
１つまたは複数の態様は、本明細書の終わりに、特許請求の範囲において、例として、特に指摘され、明確に特許請求される。上述および他の目的、特徴、および利点は、添付の図面と併せて理解される以下の詳細な説明から明らかである。
【図面の簡単な説明】
【０００９】
【図１】スレッドの実行を制御する１つまたは複数の態様を組み込み、使用するための、コンピューティング環境の一例を示す図である。
【図２】スレッドの実行を制御する１つまたは複数の態様を組み込み、使用するための、コンピューティング環境の別の例を示す図である。
【図３】スレッドの実行を制御する１つまたは複数の態様を組み込み、使用するための、コンピューティング環境のまた別の例を示す図である。
【図４】図３のコンピューティング環境のメモリについてのさらなる詳細を示す図である。
【図５】スレッドの実行を制御する１つまたは複数の態様を組み込み、使用するための、コンピューティング環境のさらなる例を示す図である。
【図６】スレッドの実行を制御する一態様に従って使用される、制御レジスタの一例を示す図である。
【図７】スレッドの実行を制御する一態様に従って使用される、命令アドレス・レジスタの一例を示す図である。
【図８】パイプラインのステージの一例を示す図である。
【図９】マルチスレッド・プロセッサにおけるスレッドの実行を制御するための、ロジックの一例を示す図である。
【図１０】ドレーン命令のフォーマットの一例を示す図である。
【図１１】図１０のドレーン命令と関連付けられたロジックの一実施形態を示す図である。
【図１２】Ｒ−ユニット・レジスタ比較およびスワップ命令のフォーマットの一例を示す図である。
【図１３】図１２のＲ−ユニット・レジスタ比較およびスワップ命令と関連付けられたロジックの一実施形態を示す図である。
【図１４】Ｒ−ユニット・レジスタ・ロードおよび論理和命令のフォーマットの一例を示す図である。
【図１５】図１４のＲ−ユニット・レジスタ・ロードおよび論理和命令と関連付けられたロジックの一実施形態を示す図である。
【図１６】Ｒ−ユニット・レジスタ・ロードおよび論理積命令のフォーマットの一例を示す図である。
【図１７】図１６のＲ−ユニット・レジスタ・ロードおよび論理積命令と関連付けられたロジックの一実施形態を示す図である。
【図１８】１つまたは複数の命令によって使用されるインターロッキングと関連付けられたロジックの一例を示す図である。
【図１９】１つまたは複数の命令によって使用されるインターロッキングと関連付けられたロジックの一例を示す図である。
【図２０】コンピュータ・プログラム製品の一実施形態を示す図である。
【発明を実施するための形態】
【００１０】
１つまたは複数の態様によれば、コンピューティング環境内で動作するコア（例えば、本明細書ではプロセッサまたはプロセッサ・コアとも呼ばれる、物理的ハードウェア・プロセッサ）において、スレッド（例えば、ハードウェア・スレッド）の実行を制御するための能力が、提供される。コアは、例えば、同時マルチスレッディング（ＳＭＴ）などのマルチスレッディングをサポートし、それは、同じ物理的プロセッサ・ハードウェア上で同時に動作する、複数の論理的中央処理装置（ＣＰＵ）が効果的に存在することができることを意味する。これらの論理的ＣＰＵの各々は、スレッドと見なされる。
【００１１】
そのようなマルチスレッディング環境では、１つのスレッドが、プロセッサ・コア上の他のスレッドの実行を停止させることが望ましいことがある。これは、プロセッサ・コア・リソースを必要とする、または他のスレッドが実行に干渉するような方法でプロセッサ・コア・リソースを操作している、クリティカル・シーケンスまたは他のシーケンスを実行することに応答したものとすることができる。一例では、能力の一部として、プロセッサ・コア上のすべてのスレッドに対してある条件が満たされるまで、待つことが望ましいことがある。例えば、特定のハードウェア・スレッド上で動作しているソフトウェアまたはファームウェアが、システム・アクションの実行を望んでおり、それは、プロセッサ・コア全体のどこからも記憶が行われていない、すなわち、プロセッサ・コア上のどのスレッド上でも記憶が行われていないことを最初に必要とすると仮定する。他のスレッドが停止させられるかどうかを判定するために、本明細書ではドレーン命令と呼ばれる命令が、一態様に従って提供され、それは、プロセッサ・コア上のスレッドのステータスをモニタリングする。
【００１２】
さらに、１つまたは複数の態様によれば、スレッドの実行を制御する際、様々なアトミック命令を使用することができる。これらの命令は、ストレージまたはメモリの代わりに、ＳＭＴプロセッサのスレッドからアクセス可能であり、ＳＭＴプロセッサのスレッドによって共有されるレジスタに対して作用する（暗黙的または明示的に別段の言及がない限り、本明細書では、メモリとストレージは交換可能に使用される）。これは、複数のスレッドが、ストレージの代わりに、共有レジスタを使用して、情報を伝達し、共有することを可能にする。本明細書では、Ｒ−ユニット・レジスタ比較およびスワップ、またはレジスタ比較およびスワップ命令、Ｒ−ユニット・レジスタ・ロードおよび論理和、またはレジスタ・ロードおよび論理和命令、ならびにＲ−ユニット・レジスタ・ロードおよび論理積、またはレジスタ・ロードおよび論理積命令と呼ばれる、これらの命令は、本明細書で説明されるように、インターロッキング・プロトコルを使用して、共有レジスタへのアクセスを制御する。
【００１３】
スレッドの実行を制御する１つまたは複数の態様を組み込み、使用するための、コンピューティング環境の一例が、図１を参照して説明される。図１を参照すると、一例では、コンピューティング環境１００は、インターナショナル・ビジネス・マシーンズ（ＩＢＭ（Ｒ））コーポレーション、アーモンク、ニューヨーク州によって提供される、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づいている。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅは、“z/Architecture - Principles of Operation,”Publication No. SA22-7832-09, 10th Edition, September 2012と題する、ＩＢＭ公表文献において説明されている。
【００１４】
（本明細書において言及される）ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ、ＩＢＭ、ならびにＺ／ＶＭ、Ｚ／ＯＳ、ＰＯＷＥＲ、およびＰＯＷＥＲＰＣは、インターナショナル・ビジネス・マシーンズ・コーポレーション、アーモンク、ニューヨーク州の登録商標である。本明細書で使用される他の名称も、インターナショナル・ビジネス・マシーンズ・コーポレーションまたは他の会社の登録商標、商標、または製品名であることがある。
【００１５】
一例として、コンピューティング環境１００は、１つまたは複数のＩ／Ｏ制御ユニット１０８を介して、１つまたは複数の入力／出力（Ｉ／Ｏ）デバイス１０６に結合される、中央プロセッサ複合体（ＣＰＣ）１０２を含む。中央プロセッサ複合体１０２は、例えば、１つまたは複数のプロセッサ・コア１１０に結合されたプロセッサ・メモリ１０４（別名、メイン・メモリ、メイン・ストレージ、中央ストレージ）と、入力／出力サブシステム１１１とを含み、その各々は、以下で説明される。
【００１６】
プロセッサ・メモリ１０４は、例えば、１つまたは複数のパーティション１１２（例えば、論理的パーティション）と、例えば、論理的パーティション・ハイパーバイザ１１４および他のプロセッサ・ファームウェア１１５を含む、プロセッサ・ファームウェア１１３とを含む。論理的パーティション・ハイパーバイザ１１４の一例は、インターナショナル・ビジネス・マシーンズ・コーポレーション、アーモンク、ニューヨーク州によって提供される、Processor Resource/System Manager（ＰＲ／ＳＭ）である。
【００１７】
論理的パーティションは、別個のシステムとして機能し、その中に、１つまたは複数のアプリケーション１２０と、任意選択で、常駐オペレーティング・システム１２２とを有し、それらは、論理的パーティション毎に異なるものとすることができる。一実施形態では、オペレーティング・システムは、インターナショナル・ビジネス・マシーンズ・コーポレーション、アーモンク、ニューヨーク州によって提供される、ｚ／ＯＳオペレーティング・システム、ｚ／ＶＭオペレーティング・システム、ｚ／Ｌｉｎｕｘオペレーティング・システム、またはＴＰＦオペレーティング・システムである。
【００１８】
論理的パーティション１１２は、論理的パーティション・ハイパーバイザ１１４によって管理され、それは、プロセッサ・コア１１０上で動作するファームウェアによって実施される。本明細書で使用される場合、ファームウェアは、例えば、プロセッサ・コアのマイクロコードまたはミリコード、あるいはその両方を含む。それは、例えば、より高いレベルのマシン・コードを実施する際に使用される、ハードウェア・レベルの命令またはデータ構造、あるいはその両方を含む。一実施形態では、それは、下層のハードウェアに固有の信頼性のあるソフトウェアまたはマイクロコードを含み、システム・ハードウェアへのオペレーティング・システム・アクセスを制御する、例えば、一般的にはマイクロコードとして届けられる独自仕様コードを含む。
【００１９】
プロセッサ・コア１１０は、論理的パーティションに割り当てられた物理的プロセッサ・リソースである。特に、各論理的パーティション１１２は、１つまたは複数の論理的プロセッサを有し、その各々は、パーティションに割り当てられたプロセッサ・コア１１０の全部または割り当て分を表す。特定の論理的パーティション１１２の論理的プロセッサは、下層のプロセッサ・コア１１０がそのパーティションのために確保されるように、そのパーティションの専用とすることができ、または下層のプロセッサ・コアが別のパーティションからも潜在的に利用可能なように、別のパーティションとの共有とすることができる。
【００２０】
一例では、コアの少なくとも１つは、複数のスレッド（すなわち、同時に動作する複数の論理的ＣＰＵ）を含む、同時マルチスレッディング・プロセッサなどの、マルチスレッディング・プロセッサである。一例では、コアは、２つのスレッドを含むが、他の実施形態では、３つ以上のスレッドが存在してもよい。本明細書ではＴ０（１２６）およびＴ１（１２８）と呼ばれる、２つのスレッドは、一例であるにすぎない。
【００２１】
同時マルチスレッディングのサポートにおいて、プロセッサ・コア・ハードウェアは、スレッド毎にフル・アーキテクト状態（full architected state）（例えば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅおよびマイクロ・アーキテクト状態（micro-architected state））を含む。したがって、すべてのスレッドに共有の（本明細書では共有レジスタと呼ばれる）汎プロセッサのレジスタ１３０、およびスレッドに固有の（本明細書では固有レジスタと呼ばれる）スレッド固有のレジスタ１３２が、提供される。これらのレジスタの使用は、以下でさらに説明される。
【００２２】
複数のスレッドの実行を制御するために、プロセッサ・コア１１０は、本明細書で説明されるように、そのような制御を提供するためのハードウェアまたはロジック、あるいはその両方を含む。このハードウェアまたはロジック、あるいはその両方は、本明細書では、便宜的に、スレッド制御機能１３４と呼ばれる。
【００２３】
入力／出力サブシステム１１１は、入力／出力デバイス１０６とプロセッサ・メモリ１０４との間の情報のフローを管理する。それは、中央処理複合体の一部とすることもでき、または中央処理複合体から分離することもできるという意味合いで、中央処理複合体に結合される。Ｉ／Ｏサブシステムは、入力／出力デバイスと直接的に通信するタスクからプロセッサ・コアを解放し、データ処理が入力／出力処理と同時に進行することを可能にする。通信を提供するために、Ｉ／Ｏサブシステムは、Ｉ／Ｏ通信アダプタを利用する。例えば、チャネル、Ｉ／Ｏアダプタ、ＰＣＩカード、イーサネット（Ｒ）・カード、スモール・コンピュータ・ストレージ・インターフェース（ＳＣＳＩ）カードなどを含む、様々なタイプの通信アダプタが存在する。本明細書で説明される特定の例では、Ｉ／Ｏ通信アダプタは、チャネルであり、したがって、Ｉ／Ｏサブシステムは、本明細書ではチャネル・サブシステムと呼ばれる。しかしながら、これは、一例であるにすぎない。他のタイプのＩ／Ｏサブシステムも、使用することができる。
【００２４】
Ｉ／Ｏサブシステムは、入力／出力デバイス１０６への情報のフローまたは入力／出力デバイス１０６からの情報のフローを管理する際に、通信リンクとして、１つまたは複数の入力／出力パスを使用する。この特定の例では、これらのパスは、通信アダプタがチャネルであるので、チャネル・パスと呼ばれる。
【００２５】
スレッドの実行を制御する１つまたは複数の態様を組み込み、使用するための、コンピューティング環境の別の例が、図２を参照して説明される。この例では、コンピューティング環境２００は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（または別の実施形態では別のアーキテクチャ）に基づいて実施される、パーティショニングされない環境を含む。それは、例えば、１つまたは複数のキャッシュ２０４、少なくとも２つのスレッドＴ０（２０６）、Ｔ１（２０８）、スレッドに共有のレジスタ２１０のセット、および各スレッドに固有のレジスタ２１２のセット、ならびにスレッド制御機能２１４を含む、コア２０２を含む。
【００２６】
コア２０２は、１つまたは複数のキャッシュ２１８と、オペレーティング・システムなど、少なくとも１つの制御ユーティリティ２２０とを有するメモリ２１６に、および入力／出力（Ｉ／Ｏ）サブシステム２２２に通信可能に結合される。Ｉ／Ｏサブシステム２２２は、例えば、データ入力デバイス、センサ、またはディスプレイなどの出力デバイス、あるいはそれらの任意の組合せを含むことができる、外部Ｉ／Ｏデバイス２２４に通信可能に結合される。
【００２７】
スレッドの実行を制御する１つまたは複数の態様を組み込み、使用するための、コンピューティング環境の別の例が、図３を参照して説明される。この例では、コンピューティング環境３００ａは、例えば、１つまたは複数のバス３０８または他の接続、あるいはその両方を介して、互いに結合される、例えば、ネイティブ・コア３０２、メモリ３０４、および１つまたは複数の入力／出力デバイスまたはインターフェース３０６、あるいはその両方を含む。例として、コンピューティング環境３００ａは、インターナショナル・ビジネス・マシーンズ・コーポレーション、アーモンク、ニューヨーク州によって提供されるＰｏｗｅｒＰＣプロセッサ、もしくはＰｏｗｅｒ  Ｓｙｓｔｅｍｓサーバ、ヒューレッド・パッカード・カンパニー、パロ・アルト、カリフォルニア州によって提供される、インテルＩｔａｎｉｕｍ  ＩＩプロセッサを有するＨＰ  Ｓｕｐｅｒｄｏｍｅ、またはインターナショナル・ビジネス・マシーンズ・コーポレーション、ヒューレッド・パッカード、インテル、オラクル、もしくはその他によって提供されるアーキテクチャに基づいた他のマシン、あるいはそれらの任意の組合せを含むことができる。
【００２８】
ネイティブ・コア３０２は、任意の特定の時点における環境の状態を表す情報を含み、環境内での処理中に使用される、１つもしくは複数の汎用レジスタまたは１つもしくは複数の専用レジスタ、あるいはその両方などの、１つまたは複数のネイティブ・レジスタ３１０を含む。さらに、ネイティブ・コアは、例えば、少なくとも２つのスレッドＴ０（３１１）、Ｔ１（３１３）、スレッドに共有のレジスタ３１５のセット、各スレッドに固有のレジスタ３１７のセット、およびスレッド制御機能３１９を含むことができる。
【００２９】
さらに、ネイティブ・コア３０２は、メモリ３０４内に記憶された命令およびコードを実行する。特定の一例では、プロセッサ・コアは、メモリ３０４内に記憶されたエミュレータ・コード３１２を実行する。このコードは、１つのアーキテクチャで構成されたコンピューティング環境が、１つまたは複数の他のアーキテクチャをエミュレートすることを可能にする。例えば、エミュレータ・コード３１２は、ＰｏｗｅｒＰＣプロセッサ、Ｐｏｗｅｒ  Ｓｙｓｔｅｍｓサーバ、ＨＰ  Ｓｕｐｅｒｄｏｍｅサーバ、またはその他など、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ以外のアーキテクチャに基づいたマシンが、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅをエミュレートし、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づいて開発されたソフトウェアおよび命令を実行することを可能にする。
【００３０】
さらなる実施形態では、図５に示されるように、ネイティブ・コア３０２は、シングルスレッド・コアであるが、マルチスレッド・コアが、エミュレータ・コード３１２内でエミュレートされており、エミュレータ・コード３１２内に含まれている。例えば、エミュレータ・コード３１２は、エミュレートされたスレッド制御機能３２０、エミュレートされたスレッド３２２、３２４、エミュレートされた共有レジスタ３２６、およびエミュレートされた固有レジスタ３２８を含み、それらの各々は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅなどネイティブ・コア３０２のアーキテクチャとは異なるアーキテクチャに基づいている。
【００３１】
エミュレータ・コード３１２に関するさらなる詳細が、図４を参照して説明される。メモリ３０４内に記憶されたゲスト命令３５０は、ネイティブ・コア３０２のアーキテクチャ以外のアーキテクチャで実行されるように開発された、（例えば、マシン命令と相互に関連する）ソフトウェア命令を含む。例えば、ゲスト命令３５０は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅコア２０２上で実行するように設計されてもよいが、代わりに、例えば、インテルＩｔａｎｉｕｍ  ＩＩプロセッサとすることができる、ネイティブ・コア３０２上でエミュレートされている。一例では、エミュレータ・コード３１２は、メモリ３０４から１つまたは複数のゲスト命令３５０を獲得し、獲得された命令のためのローカル・バッファリングを任意選択で提供するための、命令フェッチング・ルーチン３５２を含む。それは、獲得されたゲスト命令のタイプを決定し、ゲスト命令を１つまたは複数の対応するネイティブ命令３５６に変換するための、命令変換ルーチン３５４も含む。この変換は、例えば、ゲスト命令によって実行される機能を識別し、その機能を実行するためのネイティブ命令を選択することを含む。
【００３２】
さらに、エミュレータ・コード３１２は、ネイティブ命令を実行させる、エミュレーション制御ルーチン３６０を含む。エミュレーション制御ルーチン３６０は、ネイティブ・コア３０２に、１つまたは複数の先に獲得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、そのような実行が終わると、次のゲスト命令またはゲスト命令のグループの獲得をエミュレートするために、命令フェッチ・ルーチンに制御を返させることができる。ゲスト命令は、本明細書で説明されるスレッド制御機能の命令とすることができる。ネイティブ命令３５６の実行は、データをメモリ３０４からレジスタにロードすること、データをレジスタからメモリに記憶し戻すこと、または変換ルーチンによって決定されるような、あるタイプの算術もしくは論理演算を実行することを含むことができる。
【００３３】
各ルーチンは、例えば、メモリ内に記憶され、ネイティブ・コア３０２によって実行される、ソフトウェアで実施される。他の例では、ルーチンまたは操作の１つまたは複数は、ファームウェア、ハードウェア、ソフトウェア、またはそれらの何らかの組合せで実施される。エミュレートされたプロセッサのレジスタは、ネイティブ・コアのネイティブ・レジスタ３１０を使用して、またはメモリ３０４内のロケーションを使用することによって、エミュレートすることができる。実施形態では、ゲスト命令３５０、ネイティブ命令３５６、およびエミュレータ・コード３１２は、同じメモリ内に存在してもよく、または異なるメモリ・デバイス間に分散させてもよい。
【００３４】
上で説明されたコンピューティング環境は、使用することができるコンピューティング環境の例にすぎない。他のパーティショニングされない環境、他のパーティショニングされた環境、または他のエミュレートされた環境、あるいはそれらの任意の組合せを含むが、それらに限定されない、他の環境も使用することができ、実施形態は、いずれか１つの環境に限定されない。
【００３５】
上で示されたように、複数のレジスタが、各スレッドと関連付けられる。スレッドに共有の１つの共有レジスタは、ミリコード制御レジスタ（ＭＣＲ）、ＭＣＲ００２などの、制御レジスタであり、その例が、図６に示されている。ＭＣＲ００２（４００）は、スレッドがいかに振る舞うかを決定するＳＭＴのための様々なコントロールを含む。一実施形態では、ＭＣＲ００２（４００）は、複数のフィールド４０２を含み、１つまたは複数の態様に従って使用されるそれらのフィールドは、例えば、以下のものを含む。
【００３６】
（ａ）Ｉ−フェッチ一時停止フィールド４０４：このフィールドの２つのビットは、スレッド０および１と１対１に対応する（３つ以上のスレッドが存在する場合、３つ以上のビットが存在することができる）。ビットが、「１」ｂである場合、これは、他の制御ビットの状態とは無関係に、Ｉ−フェッチングをブロックするための有効な一時的マスタ・オーバーライドになる。
【００３７】
（ｂ）Ｉ−フェッチ停止不許可フィールド４０６：このフィールドの２つのビットは、スレッド０および１と１対１に対応する（３つ以上のスレッドが存在する場合、３つ以上のビットが存在することができる）。ビットが、「１」ｂである場合、それは、他のスレッドがこのスレッドのためのＩ−フェッチ停止ビットをオンにすることを許可されないコードのセクション（例えば、クリティカルなセクション）に、このスレッドが入っていることを示す。
【００３８】
使用される別のレジスタは、命令アドレス・レジスタであり、それは、各スレッドに固有である。ＩＡＲＥＧＦＡと呼ばれるこのレジスタは、ハードウェアによって検出されたプログラム割り込みについての情報を含む。ＩＡＲＥＧＦＡの例が、図７に示されている。示されるように、ＩＡＲＥＧＦＡ４５０は、複数のフィールド４５２を含む。１つまたは複数の態様に従って使用される１つのフィールドは、スレッドが例外処理中であることを示す、フィールド４５４である。
【００３９】
上述のレジスタの各々は、追加のフィールド、より僅かなフィールド、または異なるフィールド、あるいはそれらの任意の組合せを含むことができる。さらに、使用される他のレジスタも、存在することができる。本明細書で説明されるレジスタおよびフィールドは、使用することができるレジスタまたはフィールド、あるいはその両方の例である。さらに、ＭＣＲおよびＩＡＲＥＧＦＡは、レジスタの名前の例にすぎない。多くの変形が、可能である。
【００４０】
命令スループットを高めるために、各スレッドは、同じ時刻に複数のオペレーションが実行されることを可能にする処理のために、命令パイプラインを使用する。命令パイプラインは、複数のステージを含み、そのようなパイプラインの一例が、図８を参照して説明される。図８を参照すると、アウト・オブ・オーダ処理をサポートするパイプライン５００は、例えば、命令がメモリからフェッチされる、命令フェッチ・ステージ５０２、ディスパッチ／完了グループを形成し、命令を発行待ち行列に入れる、命令デコード／ディスパッチ・ステージ５０４、命令が（アウト・オブ・オーダで）発行される、発行ステージ５０６、命令が（アウト・オブ・オーダで）実行される、実行ステージ５０８、命令が（アウト・オブ・オーダで）終了する、終了ステージ５１０、アーキテクチャ・チェックポイントを参照する、完了ステージ５１２、およびリカバリ・チェックポイント・ステージ５１４を含む。他のパイプラインは、追加のステージ、より僅かなステージ、または異なるステージ、あるいはそれらの任意の組合せを含むことができる。本明細書で説明されるステージは、例にすぎない。
【００４１】
一例では、最大３つまでの命令（特に、マイクロオペレーション）を、グループ内に入れることができる。しかしながら、分岐命令などのある命令は、グループが満杯でない場合であっても、グループを終わらせる。満杯のグループの命令は、同じ発行待ち行列に誘導され、その後、次のグループは、別の発行待ち行列に入る。
【００４２】
本発明の態様によれば、コア内で動作する１つのスレッドが、１つまたは複数の動作を実行するために、そのコア内で実行する１つまたは複数の他のスレッドを停止させるための能力が、提供される。本明細書で説明される例では、コアは、２つのスレッドが存在することを示す、ＳＭＴ−２設計である。しかしながら、他の実施形態では、３つ以上のスレッドが、存在してもよい。
【００４３】
１つまたは複数のスレッドの実行を制御するために使用されるロジックの一実施形態が、図９を参照して説明される。この例では、コア上で実行するスレッド０（Ｔ０）は、コア上で実行するスレッド１（Ｔ１）を停止させようと試みており、したがって、説明は、Ｔ０およびＴ１について言及するが、しかしながら、他の実施形態では、Ｔ１が、Ｔ０を停止させようと試みてもよく、またはコア上で実行している停止させられるスレッドが２つ以上存在してもよく、あるいはその両方であってもよい。例えば、Ｔ０は、Ｔ１、Ｔ２、Ｔ３などを停止させることができる。さらに、本明細書で説明される例では、ロジックは、コアのファームウェアによって実行されるが、しかしながら、１つまたは複数の他の実施形態では、それは、汎用ソフトウェアによって実行されてもよい。多くの他の変形が、可能である。
【００４４】
図９を参照して説明されるように、一実施形態では、１つのスレッドが、別のスレッドの実行を停止させ、その停止は、スレッドによって共有される１つまたは複数のレジスタ（例えば、ハードウェア・レジスタ）内の１つまたは複数のコントロール（例えば、インジケータ、ビットなど）を使用する。
【００４５】
図９を参照すると、一実施形態では、ステップ６００において、スレッド０は、Ｔ１（または他の実施形態では、コアの１つもしくは複数のスレッド）を停止させることが禁止されているかどうかをチェックする。一例では、これは、ＭＣＲ００２の選択されたビット（例えば、ビット２５）、およびＩＡＲＥＧＦＡの選択されたビット（例えば、ビット４）をチェックすることによって判定される。これは、一例では、Ｔ０が分岐ポイントをテストすることによって達成され、これは、ＳＴＰＩＦＡＬＷと呼ばれる。ＳＴＰＩＦＡＬＷは、ＭＣＲ００２およびＩＡＲＥＧＦＡの選択されたビットをテストする。例えば、ＭＣＲ００２．２５（すなわち、ＭＣＲ００２のビット２５）が、０に設定されており、かつＩＡＲＥＧＦＡ．４（すなわち、ＩＡＲＥＧＦＡのビット４）が、０に設定されている場合、Ｔ１のＩ−フェッチングの停止が、許可される。
【００４６】
質問６０２において、ＳＴＰＩＦＡＬＷが、Ｔ１を停止させることが禁止されていることを示した場合、処理は、ステップ６００を続行する。しかしながら、ＳＴＰＩＦＡＬＷによって、特に、ＭＣＲ００２．２５＝０、かつＩＡＲＥＧＦＡ．４＝０によって示されるように、Ｔ１を停止させることが禁止されていない場合、ステップ６０４において、Ｔ０がＴ１上での命令フェッチングおよび実行を停止させることによって、処理を続行する。一例では、これは、Ｔ１上での命令フェッチングおよび実行を停止させる、Ｔ１のためのＩ−フェッチ一時停止ビット（例えば、ＭＣＲ００２．９）を、Ｔ０が設定することを含む。このビットは、例えば、Ｒ−ユニット・レジスタ比較およびスワップ（ＣＳＧＲＵ）命令、またはＲ−ユニット・レジスタ・ロードおよび論理和命令を使用して設定され、それらの各々は、以下で説明される。
【００４７】
その後、ステップ６０６において、Ｔ０は、すべてのスレッドに対するドレーン操作（ＤＲＡＩＮ  ＡＬＬＴＩＤＳ）を実行し、それは、Ｔ１上のすべての命令がパイプラインからドレーンまたはフラッシュされるまで、Ｔ０のための命令ディスパッチを保留し、Ｔ１にステータスについて問い合わせる。一例では、ドレーン命令は、ドレーン操作を実行するために使用され、その例は、以下で説明される。
【００４８】
質問６０８において、パイプラインから他のスレッド上の命令がドレーンされている間、処理は、ステップ６０６を続行する。しかしながら、Ｔ１上の命令がドレーンされたのに応答して、ステップ６１０において、Ｔ０は、Ｔ０のための命令ディスパッチおよび実行を続行する。
【００４９】
その後、ステップ６１２において、Ｔ０は、Ｔ１が、テストの後から停止の前までに、そのステータスを変化させなかったことを保証するために、Ｔ１（および存在する場合は他のスレッド）を停止させることが禁止されているかどうかを再びチェックする。このチェックは、上で説明されたように、ＳＴＰＩＦＡＬＷを使用して実行される。質問６１４において、今は、Ｔ１を停止させることが禁止されている場合、ステップ６１６において、Ｔ０は、Ｔ１が、ＭＣＲ００２のビット９をオフにする（すなわち、それを０に設定する）ことによって実行を続行することを許可する。処理は、ステップ６００に進む。
【００５０】
そうではなく、質問６１４において、Ｔ１を停止させることが禁止されていない場合、ステップ６１８において、Ｔ０は、Ｔ１の停止を引き起こした命令シーケンス（例えば、１つまたは複数のオペレーション）を実行する。その命令シーケンスが完了した後、ステップ６２０において、Ｔ１を続行することが許可される。したがって、Ｔ０は、以下で説明されるように、例えば、Ｒ−ユニット・ロードおよび論理積（ＬＮＲＵ）命令またはＣＳＧＲＵを使用することによって、ＭＣＲ００２内のビット９をリセットする。その後、ステップ６２２において、両方のスレッドは、通常通り実行する。
【００５１】
上で説明されたように、数々の命令が、マルチスレッディング・プロセッサの１つまたは複数のスレッドの実行を制御するために使用される。これらの命令の各々は、以下で説明される。
【００５２】
図１０〜図１１を参照すると、ドレーン命令の一実施形態が、説明されている。特に、図１０は、ドレーン命令のフォーマットの一実施形態を示しており、図１１は、ドレーン命令と関連付けられたロジックの一実施形態を示している。
【００５３】
図１０を参照すると、ドレーン命令７００は、ドレーン操作を識別するオペレーション・コードを含む、オペコード・フィールド７０２、処理が何サイクル延期されるかを指定する延期カウントを示す値を含む、マスク（Ｍ３）フィールド７０４、およびこの例では、すべてのスレッドがドレーンされるべきことを指定する、全ＴＩＤ（スレッドＩＤ）ドレーンである、ドレーンのタイプを示す、命令フィールド７０６（Ｉ２）を含む。
【００５４】
動作について、図１１を参照すると、ステップ７５０において、スレッドＴ０は、指定された条件が満たされるまで、パイプラインの命令デコードまたはディスパッチ・ステージにおいて、Ｔ０のための命令処理を中断する。命令のＩ２フィールドの指定されたビット（例えば、Ｉ２のビット０：３１、それは、命令のフィールドのすべてを含む、Ｉ−テキスト・フィールドの、例えば、ビット１６：４７である）は、命令処理を続行する前に、どの１つまたは複数のハードウェア条件が満たされるべきであるかを指定する。一実施形態では、指定された条件は、クロススレッド・コントロール（例えば、Ｉ２フィールドのビット０、Ｉ−テキスト・フィールドのビット１６）を含み、それは、Ｔ１上で処理が中断されたかどうかを判定するために、Ｔ１（または他のスレッド）のステータスをチェックする。Ｉ２フィールドのビット０が、「１」ｂである場合、それは、このスレッド上で処理を続行するためには、両方のスレッド上で他のすべてのドレーン条件が満たされるべきであることを指定する（他のスレッドは、このスレッド上でのドレーンによってブロックされない）。この機能を使用する場合、ハングアップを回避するための配慮がなされるべきである。
【００５５】
１つまたは複数の実施形態では、他の条件が、Ｉ２フィールド内で指定されてもよい。与えられたビット位置の１は、命令処理を再開する前に、条件が満たされるべきであることを示し、２つ以上のビットが、オンである場合、すべての選択された条件が、満たされるべきである。実施において、一実施形態では、Ｉ−テキストのビット１６（すなわち、Ｉ２フィールドのビット０）が、１である場合、両方（またはすべて）のハードウェア・スレッドのステータス・ファンクションの論理和が、ビット毎に実行され、その後、ドレーン条件が満たされたかどうかについての最終値を決定するために、選択されたすべてのファンクションの論理和が、一緒に実行される
【００５６】
質問７５２において、指定された条件が満たされたかどうかに関する判定が、行われる。満たされていない場合、ステップ７５０において、中断を続行する。そうではなく、条件が満たされた場合、ステップ７５４において、処理が、追加のサイクル数だけ延期される。この追加数は、０以上とすることができ、ドレーン命令のＭ３フィールド内で指定される。例えば、Ｍ３フィールドは、Ｉ２フィールド内で指定された条件が満たされた後に延期させる、例えば、０から１５までの間の追加のサイクル数を指定する。追加のサイクル数だけ延期した後、ステップ７５６において、命令処理が、再開する。
【００５７】
一実施形態では、先行する命令とドレーンが、同時にディスパッチされている場合、先行する命令は、ディスパッチを完了し、パイプラインを通じて通常通り続行することを許可されるが、ドレーン命令およびすべての後続する命令は、条件が満たされるまで、ディスパッチにおいてブロックされる。ドレーン命令は、遅延処理において、このスレッドにだけ作用することに留意されたい。別のスレッドを停止させるために、本明細書で説明される技法が、使用される。しかしながら、指定されたビット（例えば、Ｉ２のビット０）は、１である場合、このスレッド上でドレーン命令後に処理を続行するためには、すべてのスレッド上ですべての指定された条件が満たされるべきであることを示す。
【００５８】
示されたように、命令のＭ３フィールドは、パイプラインにおいて延期される追加サイクルの数を指定する。これは、Ｉ２フィールド内の許可条件のいずれかと併せて使用することができる。それは、ディスパッチにおける即時のサイクル・カウント遅延を与える、すべてが０のＩ２フィールドを用いても指定することができる。Ｍ３フィールドが０である場合であっても、ドレーン命令のディスパッチにおいて、１サイクルの延期が存在する。したがって、このカウントは、遅延するサイクルに１サイクルをプラスした数を指定する。ハードウェアは、他の命令とともにドレーンを発行することができ、パイプラインのフロント・エンド・ステージに影響するだけなので、アウト・オブ・オーダで発行することができる。
【００５９】
この命令は、正しいオペレーションを保証するのに必要なインターロックがハードウェアに組み込まれていない場合に、使用することが意図されている。ほとんどの場合、ハードウェアは、パイプライン内で先行する命令からの窓を自動的にカバーする。
【００６０】
条件コードは、この命令によって変更されない。
【００６１】
使用される別の命令は、Ｒ−ユニット・レジスタ比較およびスワップ命令であり、それは、図１２〜図１３を参照して説明されている。特に、図１２は、Ｒ−ユニット・レジスタ比較およびスワップ命令のフォーマットの一実施形態を示しており、図１３は、Ｒ−ユニット・レジスタ比較およびスワップ命令と関連付けられたロジックの一実施形態を示している。本明細書で説明される命令におけるＲ−ユニットは、命令を実行するコア内の特定のユニットを指していることに留意されたい。しかしながら、特定のユニットの使用は、必ずしも必要ではない。それは、他のユニットによって、または単にコアによって実行されてもよい。
【００６２】
図１２を参照すると、ＣＳＧＲＵ命令８００は、レジスタ比較およびスワップ操作を指定するオペレーション・コードを含む、少なくとも１つのオペコード・フィールド８０２ａ、８０２ｂ、第１のレジスタ・フィールド（Ｒ１）８０４、第２のレジスタ・フィールド（Ｒ３）８０６、ならびに命令フィールド（Ｉ２）８０８を含み、それらの各々は、以下で説明される。
【００６３】
動作について、図１３を参照すると、ステップ８５０において、選択されたビット（例えば、Ｉ−テキストのビット２２：３１（例えば、Ｉ２フィールド（８０８）のビット６：１５））で示される１０ビット絶対レジスタ番号によって指定される（本明細書でＭＣＲと呼ばれる）Ｒ−ユニット・レジスタの内容が、Ｒ１で指定される汎用レジスタ（ＧＲ）の内容と比較される。質問８５２において、それらが等しい場合、ステップ８５４において、ＭＣＲの内容が、Ｒ１で指定される汎用レジスタに書き込まれ、ステップ８５６において、Ｒ３で指定される汎用レジスタの内容が、ＭＣＲに書き込まれる。加えて、ステップ８５８において、条件コードが、０に設定され、ＣＳＧＲＵの処理が、完了する。
【００６４】
質問８５２に戻り、ＭＣＲの内容とＲ１で指定されるレジスタの内容が、等しくない場合、ステップ８６０において、ＭＣＲの内容が、Ｒ１で指定される汎用レジスタに書き込まれ、ステップ８５８において、条件コードが、１に設定される。これで、ＣＳＧＲＵの処理が終了する。
【００６５】
ＣＳＧＲＵの読み込み−比較−置換機能は、このスレッドＴ０、およびこのプロセッサの他のスレッド（例えば、Ｔ１）によって認められるように、アトミック操作である。一実施形態では、ＣＳＧＲＵは、クロススレッド・ハングアップを回避するために、ＳＬＯＷオプションをオンにして実行される。ＳＬＯＷオプションは、Ｉ２（８０８）の選択されたビット（例えば、ビット１７）を１に設定することによって示され、パイプライン全体に同時に１つの命令しか存在しないことを意味する、スローモードを要求するために使用される。さらに、以下で説明されるように、インターロッキング・プロトコルが、この命令とともに実行され、したがって、本明細書でＩＬＯＣＫと呼ばれる、Ｉ２（８０８）の選択されたビット（例えば、ビット１６）が、１に設定される。
【００６６】
一実施形態では、このスレッド（Ｔ０）または他の任意のスレッドについての、ＲＳＲ（専用レジスタ読み込み）、ＷＳＲ（専用レジスタ書き込み）、ＮＳＲ（専用レジスタ論理積）、ＯＳＲ（専用レジスタ論理和）、ＸＳＲ（専用レジスタ排他的論理和）、ＴＲＢＩＴ（レジスタ・ビット・テスト）、ＲＡＳＲ（絶対専用レジスタ読み込み）、ＷＡＳＲ（絶対専用レジスタ書き込み）、ＴＡＲＢＩＴ（絶対レジスタ・ビット・テスト）、ＮＡＳＲ（絶対専用レジスタ論理積）、ＯＡＳＲ（絶対専用レジスタ論理和）、ＸＡＳＲ（絶対専用レジスタ排他的論理和）、ＬＯＲＵ（Ｒ−ユニット・レジスタ・ロードおよび論理和）、ＬＮＲＵ（Ｒ−ユニット・レジスタ・ロードおよび論理積）、またはＣＳＧＲＵ（Ｒ−ユニット・レジスタ比較およびスワップ）など、他の選択された命令が、パイプライン内に存在し、かつ他の命令についての、ＩＬＯＣＫビット（例えば、Ｉ２のビット１６）が、オンである場合、この命令は、拒否され、再発行される。この命令は、例えば、このスレッドからのすべての先行する命令が発行された後にだけ、発行され、またこのスレッドからのすべての将来の命令をそれに強制的に従属させる。
【００６７】
条件コード設定は、例えば、ＣＣ０−等値比較、Ｒ−ユニット・レジスタはＧＲ  Ｒ１によって置換される、ＣＣ１−不等値比較、Ｒ−ユニット・レジスタは変更されない、を含む。
【００６８】
使用される別の命令は、Ｒ−ユニット・レジスタ・ロードおよび論理和（ＬＯＲＵ）命令であり、それは、図１４〜図１５を参照して説明されている。特に、図１４は、Ｒ−ユニット・レジスタ・ロードおよび論理和命令のフォーマットの一実施形態を示しており、図１５は、Ｒ−ユニット・レジスタ・ロードおよび論理和命令と関連付けられたロジックの一実施形態を示している。
【００６９】
図１４を参照すると、ＬＯＲＵ命令９００は、レジスタ・ロードおよび論理和操作を指定するオペレーション・コードを含む、少なくとも１つのオペコード・フィールド９０２ａ、９０２ｂ、第１のレジスタ・フィールド（Ｒ１）９０４、第２のレジスタ・フィールド（Ｒ３）９０６、ならびに命令フィールド（Ｉ２）９０８を含み、それらの各々は、以下で説明される。
【００７０】
動作について、図１５を参照すると、ステップ９５０において、選択されたビット（例えば、Ｉ−テキストのビット２２：３１（例えば、Ｉ２フィールド（９０８）のビット６：１５））で示される１０ビット絶対レジスタ番号によって指定される（本明細書でＭＣＲと呼ばれる）Ｒ−ユニット・レジスタの内容が、Ｒ１で指定される汎用レジスタにロードされる。さらに、ステップ９５２において、Ｒ３で指定される汎用レジスタの内容とＭＣＲの内容との論理和が求められ、ステップ９５４において、その結果が、ＭＣＲに書き込まれる。
【００７１】
ＬＯＲＵの読み込み−論理和−置換機能は、このスレッドＴ０、およびこのプロセッサの他のスレッド（例えば、Ｔ１）によって認められるように、アトミック操作である。一実施形態では、ＬＯＲＵは、クロススレッド・ハングアップを回避するために、ＳＬＯＷオプションをオンにして実行される。ＳＬＯＷオプションは、Ｉ２（９０８）の選択されたビット（例えば、ビット１７）を１に設定することによって示される。さらに、以下で説明されるように、インターロッキング・プロトコルが、この命令とともに実行され、したがって、本明細書でＩＬＯＣＫと呼ばれる、Ｉ２（９０８）の選択されたビット（例えば、ビット１６）が、１に設定される。
【００７２】
一実施形態では、このスレッド（Ｔ０）または他の任意のスレッドについての、ＲＳＲ（専用レジスタ読み込み）、ＷＳＲ（専用レジスタ書き込み）、ＮＳＲ（専用レジスタ論理積）、ＯＳＲ（専用レジスタ論理和）、ＸＳＲ（専用レジスタ排他的論理和）、ＴＲＢＩＴ（レジスタ・ビット・テスト）、ＲＡＳＲ（絶対専用レジスタ読み込み）、ＷＡＳＲ（絶対専用レジスタ書き込み）、ＴＡＲＢＩＴ（絶対レジスタ・ビット・テスト）、ＮＡＳＲ（絶対専用レジスタ論理積）、ＯＡＳＲ（絶対専用レジスタ論理和）、ＸＡＳＲ（絶対専用レジスタ排他的論理和）、ＬＯＲＵ（Ｒ−ユニット・レジスタ・ロードおよび論理和）、ＬＮＲＵ（Ｒ−ユニット・レジスタ・ロードおよび論理積）、またはＣＳＧＲＵ（Ｒ−ユニット・レジスタ比較およびスワップ）など、他の選択された命令が、パイプライン内に存在し、かつ他の命令についての、ＩＬＯＣＫビット（Ｉ２のビット１６）が、オンである場合、この命令は、拒否され、再発行される。この命令は、例えば、このスレッドからのすべての先行する命令が発行された後にだけ、発行され、またこのスレッドからのすべての将来の命令をそれに強制的に従属させる。
【００７３】
条件コードは、変更されない。
【００７４】
使用される別の命令は、Ｒ−ユニット・レジスタ・ロードおよび論理積（ＬＮＲＵ）命令であり、それは、図１６〜図１７を参照して説明されている。特に、図１６は、Ｒ−ユニット・レジスタ・ロードおよび論理積命令のフォーマットの一実施形態を示しており、図１７は、Ｒ−ユニット・レジスタ・ロードおよび論理積命令と関連付けられたロジックの一実施形態を示している。
【００７５】
図１６を参照すると、ＬＮＲＵ命令１０００は、レジスタ・ロードおよび論理積操作を指定するオペレーション・コードを含む、少なくとも１つのオペコード・フィールド１００２ａ、１００２ｂ、第１のレジスタ・フィールド（Ｒ１）１００４、第２のレジスタ・フィールド（Ｒ３）１００６、ならびに命令フィールド（Ｉ２）１００８を含み、それらの各々は、以下で説明される。
【００７６】
動作について、図１７を参照すると、ステップ１０５０において、選択されたビット（例えば、Ｉ−テキストのビット２２：３１（例えば、Ｉ２フィールド（１００８）のビット６：１５））で示される１０ビット絶対レジスタ番号によって指定される（本明細書でＭＣＲと呼ばれる）Ｒ−ユニット・レジスタの内容が、Ｒ１で指定される汎用レジスタにロードされる。さらに、ステップ１０５２において、Ｒ３で指定される汎用レジスタの内容とＭＣＲの内容との論理積が求められ、ステップ１０５４において、その結果が、ＭＣＲに書き込まれる。
【００７７】
ＬＮＲＵの読み込み−論理積−置換機能は、このスレッドＴ０、およびこのプロセッサの他のスレッド（例えば、Ｔ１）によって認められるように、アトミック操作である。一実施形態では、ＬＮＲＵは、クロススレッド・ハングアップを回避するために、ＳＬＯＷオプションをオンにして実行される。ＳＬＯＷオプションは、Ｉ２（１００８）の選択されたビット（例えば、ビット１７）を１に設定することによって示される。さらに、以下で説明されるように、インターロッキング・プロトコルが、この命令とともに実行され、したがって、本明細書でＩＬＯＣＫと呼ばれる、Ｉ２（１００８）の選択されたビット（例えば、ビット１６）が、１に設定される。
【００７８】
一実施形態では、このスレッド（Ｔ０）または他の任意のスレッドについての、ＲＳＲ（専用レジスタ読み込み）、ＷＳＲ（専用レジスタ書き込み）、ＮＳＲ（専用レジスタ論理積）、ＯＳＲ（専用レジスタ論理和）、ＸＳＲ（専用レジスタ排他的論理和）、ＴＲＢＩＴ（レジスタ・ビット・テスト）、ＲＡＳＲ（絶対専用レジスタ読み込み）、ＷＡＳＲ（絶対専用レジスタ書き込み）、ＴＡＲＢＩＴ（絶対レジスタ・ビット・テスト）、ＮＡＳＲ（絶対専用レジスタ論理積）、ＯＡＳＲ（絶対専用レジスタ論理和）、ＸＡＳＲ（絶対専用レジスタ排他的論理和）、ＬＯＲＵ（Ｒ−ユニット・レジスタ・ロードおよび論理和）、ＬＮＲＵ（Ｒ−ユニット・レジスタ・ロードおよび論理積）、またはＣＳＧＲＵ（Ｒ−ユニット・レジスタ比較およびスワップ）など、他の選択された命令が、パイプライン内に存在し、かつ他の命令についての、ＩＬＯＣＫビット（例えば、Ｉ２のビット１６）が、オンである場合、この命令は、拒否され、再発行される。この命令は、例えば、このスレッドからのすべての先行する命令が発行された後にだけ、発行され、またこのスレッドからのすべての将来の命令をそれに強制的に従属させる。
【００７９】
条件コードは、変更されない。
【００８０】
ＬＮＲＵは、ＬＯＲＵおよびＣＳＧＲＵと同様、共有通信の手段として、ストレージの代わりに、ＳＭＴコア内のすべてのスレッドからアクセス可能なレジスタを使用する。これらのレジスタは、例えば、プロセッサのメモリまたはストレージとは別個のハードウェア・レジスタである。例えば、１つのコア設計では、コア上にすべてのスレッドに共有される（共有の）約６４個のレジスタが存在し、スレッドは、自由に、これらの共有レジスタから読み込み、これらの共有レジスタに書き込むことができる。制御レジスタのいくつかのケースでは、両方のスレッドが、特別なインターロックなしに、それらへの書き込みを試みた場合、スレッドの一方による更新は、失われ得る。他のケースでは、スレッドの一方のみが、レジスタ内のビットによって制御されるリソースを「所有」することを許可される。したがって、共有レジスタに対して作用するこれらのアトミック命令は、これらの共有レジスタへのアクセスを制御し、順序付けるために使用される。
【００８１】
ＬＮＲＵ、ＬＯＲＵ、およびＣＳＧＲＵは、各々が、インタースレッド操作および実行を制御するためのインターロッキング・プロトコルを使用することによって、スレッド全般において、汎用レジスタとＭＣＲとの間のアトミック操作を可能にする。示されたように、命令の各々は、ＩＬＯＣＫビットを有し、パイプライン内で実行する命令のためのそのビットがオンである場合に、ＩＬＯＣＫビットがやはり設定された第２の命令がパイプラインに入ったときは、第２の命令は、拒否される（第１の命令が完了したときに、後で再実行される）。これは、スレッド間における、これらのレジスタへのアクセスの原子性を保証する。
【００８２】
例えば、２つのタイプのインターロッキング命令、すなわち、ＬＮＲＵおよびＬＯＲＵなどの単一マイクロ操作μｏｐ命令、およびＣＳＧＲＵなどの２μｏｐ命令が存在する。単一μｏｐ命令を用いる場合、インターロックは、μｏｐ発行（ＲＳＲおよびＷＳＲタイプの命令）において設定され、ＲＳＲタイプについてはμｏｐ完了において、ＷＳＲタイプについてはチェックポイント上で解消される。２μｏｐ命令では、インターロックは、第１のμｏｐ（ＲＳＲタイプ）発行において設定され、第２のμｏｐ（ＷＳＲタイプ）のチェックポイントにおいて解消される。
【００８３】
インターロッキング・プロトコルの使用およびインターロッキング・プロトコルに関するさらなる詳細が、図１８〜図１９を参照して説明される。このロジックは、コアによって、特に、命令がその上で発行されるパイプによって実行される。
【００８４】
最初に図１８を参照すると、ステップ１１００において、実行される命令（例えば、ＬＮＲＵ、ＬＯＲＵ、ＣＳＧＲＵ）が、マルチスレッド・プロセッサによって獲得される。ステップ１１０２において、オペレーションを実行するために、命令の実行が、マルチスレッド・プロセッサによって開始される。オペレーションは、排他的（atomicity）に実行される複数のサブオペレーションを含む。質問１１０４において、命令が実行を続行すべきかどうかに関する判定が、行われる。判定は、スレッドおよび１つまたは複数の他のスレッドによって共有される１つまたは複数のレジスタへのアトミック・アクセスを命令が有するかどうかを判定するために、例えば、インターロッキング・プロトコルを使用する。
【００８５】
命令が実行を続行すべき場合、ステップ１１０６において、実行を続行し、それは、少なくとも１つの共有レジスタを使用して、オペレーションを実行することを含む。そうではなく、命令を続行すべきでない場合、ステップ１１０８において、それは、拒否される。
【００８６】
インターロッキング・プロトコルに関するさらなる詳細が、図１９を参照して説明される。最初に、命令が、Ｒ−ユニットに入った場合、一例では、質問１１５０において、到来命令のＩＬＯＣＫビット（例えば、Ｉ−テキストのビット３２−別名、Ｉ２のビット１６）など、ロック・インジケータが設定（例えば、１に設定）されているかどうかに関するチェックが、行われる。ＩＬＯＣＫビットが、設定されていない場合、インターロッキング・プロトコル処理は、完了するが、しかしながら、到来命令内のＩＬＯＣＫビットが、設定されている場合、質問１１５２において、インターロックと呼ばれるロックが設定されているかどうかに関するさらなる判定が、行われる。インターロックは、複数のスレッドからアクセス可能なハードウェア・レジスタ内に配置される。
【００８７】
インターロックが設定されており（例えば、ビットが１に設定されており）、別の命令が、設定されたＩＬＯＣＫビットを有する処理であることを示している場合、ステップ１１５３において、到来命令は、拒否される。
【００８８】
しかしながら、インターロックが設定されていない場合、ステップ１１５４において、それが、設定され、ステップ１１５６において、命令の処理が、（例えば、パイプ内で）進行する。命令が完了した（またはチェックポイントに達した）場合、ステップ１１５８において、インターロックが、リセットされる（例えば、０に設定される）。
【００８９】
インターロッキングに関するさらなる詳細は、以下を含む。
（Ａ）インターロックは、例えば、以下の場合に、パイプ０によって設定することができる。
−インターロックを設定する必要がある命令が、パイプ０内に存在し、それが、単独で発行される。
−インターロックを設定する必要がある命令が、パイプ０内に存在し、ロックを設定することを望まない別の命令が、パイプ１内に存在し、両方の命令は、同じスレッドからのものである。
−インターロックを設定する必要がある命令が、パイプ０内に存在し、ロックを設定する必要がある別の命令が、パイプ１内に存在するが、パイプ０内の命令のほうが、古く、両方の命令は、同じスレッドからのものである。
−インターロックを設定する必要がある命令が、パイプ０内に存在し、ロックを設定することを望まない別の命令が、パイプ１内に存在し、両方の命令は、異なるスレッドからのものである。
−インターロックを設定する必要がある命令が、パイプ０内に存在し、ロックを設定する必要がある別の命令が、パイプ１内に存在し、両方の命令は、異なるスレッドからのものであり、ＬＦＳＲ（線形フィードバック・シフト・レジスタ）が、パイプ０を指し示す。ＬＦＳＲは、疑似乱数を生成するために使用され、その数の最上位ビットを取ることによって、疑似ランダム選択が、２つのパイプの間において提供される（すなわち、どちらのパイプがインターロックを設定するかをランダムに選択する）。
【００９０】
一例では、インターロックは、ディスパッチ・グループ内の可能な各命令のためのビットを有するベクトルである。例えば、一例では、ディスパッチ・グループ内に最大で３つの命令が存在することができ、したがって、インターロックは、各命令に１ビットずつの、３つのビットを含む。ビットが、例えば、１に設定されている場合、これは、そのビットと関連付けられた命令が、インターロックを有することを示す。
【００９１】
インターロックは、上で説明されたように、パイプ１によっても設定することができるが、しかしながら、パイプ０は、パイプ１で置き換えられ、パイプ１は、パイプ０で置き換えられる。
【００９２】
（Ｂ）インターロックの設定は、例えば、以下の場合に実行される。
−有効な命令が、パイプ内に存在する、かつ
−ＩＬＯＣＫが、設定されている、かつ
−ｐｒｅｄｅｃ＿ｒｄ（すなわち、読み込み（ＲＳＲ）タイプの命令の初期指示）、またはｐｒｅｄｅｃ＿ｗｒ（すなわち、書き込み（ＷＳＲ）タイプの命令の初期指示）が、設定されている、かつ
−パイプ内の命令が、フラッシュ／ｘｃｏｎｄされていない、かつ
−そのパイプによって（（Ａ）に従って）インターロックを設定することができる、かつ
−インターロックが、まだ設定されていない。
【００９３】
（Ｃ）インターロックは、例えば、以下の場合に、更新される。
−有効な命令が、パイプ内に存在する、かつ
−ＩＬＯＣＫが、設定されている、かつ
−ｐｒｅｄｅｃ＿ｒｄ、またはｐｒｅｄｅｃ＿ｗｒが、設定されている、かつ
−パイプ内の命令が、フラッシュ／ｘｃｏｎｄされていない、かつ
−インターロックが、すでに設定されている、かつ
−命令．ＧＴＡＧ（命令を含むディスパッチ・グループの識別子）＝インターロック．ＧＴＡＧである（すなわち、命令と関連付けられた識別子が、インターロックを設定した識別子に等しい）、かつ
−命令．ｔｈ＿ｉｄ（スレッドｉｄ）＝インターロック．ｔｈ＿ｉｄである。
【００９４】
一実施形態では、インターロックのリセットは、ロックを握ったグループ内の書き込みタイプのマイクロオペレーション（μｏｐ）が存在しない場合は、グループ完了時に実行される。グループ内に書き込みタイプのμｏｐが存在するが、それがロックを握らなかった場合、ロックは、その完了時にやはり解放される（ロックを握らなかった＝ＩＬＯＣＫビットが０、これが、ＣＳＧＲＵのためのＩＬＯＣＫビットがＷＳＲ部分でも設定され、そのため、それがＲＳＲの完了時に解放されない理由である）。書き込みタイプの命令もロックを握った場合、ロックは、チェックポイント上でだけ解放される。そのように、原子性が、見られる。例外は、ＷＳＲが第２のグループ内にあるＣＳＧＲＵの場合であり、したがって、第１のグループのＲＳＲが、ロックを設定し、第２のグループ内のＷＳＲが、ロックを解放する。その場合、第１のグループは、（第１のグループのＧＴＡＧよりも１だけ大きいＧＴＡＧを有する）第２のグループの前に来るべきである
【００９５】
グループ内のμｏｐの拒否は、そのμｏｐがロックを保持していない場合は、それをリセットしなくてもよい。拒否は、一例では、やはりロックを保持する他のμｏｐがグループ内に存在しない場合は、ロックを解放するだけである。
【００９６】
グループ内のμｏｐの撤回は、そのμｏｐがロックを保持していない場合は、それをリセットしなくてもよい。撤回は、一例では、やはりロックを保持する他のμｏｐがグループ内に存在しない場合は、ロックを解放するだけである。
【００９７】
ｘｃｏｎｄが、来ている場合、インターロックを解放することができるかどうかに関するチェックが、行われる。問題は、ロックを握った命令が、まだ未完了であった場合にだけ、ｘｃｏｎｄが、ロックを解放すべきことである。ロックを握った命令が、すでに完了している場合、ｘｃｏｎｄは、ロックに対して影響を有するべきではない（これは、ロックを握った書き込みタイプの命令に当てはまるが、それは、その命令がチェックポイント上でそれを解放するからである。読み込みタイプの命令の場合、解放は、完了時にすでに行われた）。１つの例外は、その読み込みタイプ部分は、すでに完了済であることができるが、書き込みタイプが完了する前にｘｃｏｎｄが存在する場合、ロックが解放されるべきである（書き込みタイプが完了する場合、後から来るｘｃｏｎｄは、インターロックに対して影響を有するべきではない）、ＣＳＧＲＵである。
【００９８】
ロックを設定した命令がフラッシュされる必要がある場合のリセット：実際のリセットは、例えば、そのグループのいかなる命令によってもロックがもはや保持されない場合にのみ、行われる。例えば、フラッシュが、グループ内の第１のμｏｐに当たり、このμｏｐがロックを保持している場合、ロックが、外れる（もちろん、２つの他のμｏｐも、それを保持することができるが、それらは、フラッシュされる）。フラッシュが、グループ内の第２のμｏｐ上で来ており、このμｏｐがロックを保持する場合、例えば、第１のμｏｐもそれを保持しない場合にのみ、ロックが、外れる（第３のものは、いずれにせよフラッシュされ、そのため、それをチェックする必要はない）。
【００９９】
（Ｄ）インターロックは、例えば、以下の場合に、リセットされる。
−インターロックが、すでに設定されている、かつ
−（Ｃ）からの更新がない、かつ
（
ロックを握った命令が、完了しつつある、
−それをロックした読み込み命令が、完了しつつある、かつ
−これは、ＣＳＧＲＵの第１のグループの完了ではない、
または
（
ロックを握った命令が、チェックポイントに達しつつある、
−それをロックした書き込み命令が、チェックポイントに達しつつある、かつ
−インターロック．ＧＴＡＧ＝命令．ＧＴＡＧ
または
−これが、ＣＳＧＲＵの第２のグループの完了である場合、それがチェックポイントに達するのを待つ、かつ
−インターロック．ＧＴＡＧ＋１＝命令．ＧＴＡＧ
）
または
ロックを握ったμｏｐが拒否され、そのグループ内に他の保持者がいない、
または
ロックを握ったμｏｐが撤回され、そのグループ内に他の保持者がいない、
または
ロックを握ったμｏｐがフラッシュ／ｘｃｏｎｄされ、そのグループ内に他の保持者がいない、
または
リカバリ進行中
）
【０１００】
（Ｅ）例えば、以下の場合に、拒否される。
１）インターロックがロックされている、かつ
命令．ｔｈ＿ｉｄ  ！＝（等しくない）  インターロック．ｔｈ＿ｉｄ、かつ
命令．ＧＴＡＧ  ！＝  インターロック．ＧＴＡＧ
【０１０１】
ＣＳＧＲＵオペコードについては、これは、インターロックがＲＳＲ  μｏｐによってロックされた場合に、ＷＳＲ  μｏｐの拒否を排除する（それらは、同じＧＴＡＧおよび同じスレッドＩＤを有する）。
【０１０２】
それは、発行は順序通りであるが、何らかの理由で、ＲＳＲが拒否され、したがって、ＷＳＲがロックをロックする、（ＲＳＲ，ｘ，ＷＳＲ）のようなグループにも当てはまる。そのようなケースでは、拒否が、個々の命令ｉｄベースである場合、ロックがロックされているので、ＲＳＲは入ることができず、グループ全体は完了することができず＝＞ＷＳＲはロックを解除することができないので、デッドロックとなる。解決策は、ＧＴＡＧを使用することであり、そのため、ＲＳＲは入ることができ、それが完了したとき、ＷＳＲも完了することができ、ロックを解除する。
【０１０３】
２）両方のパイプ上に同じスレッド、かつ
両方のパイプ内でＩＬＯＣＫがオンである、かつ
現在のパイプがより新しい命令を保持する、
＝＞（やはりインターロック・ビットがより古い命令によってまだオンにされていない場合は）現在のより新しい命令は拒否されるべきである。
【０１０４】
インターロックがオンにされた場合、より古いほうも、（これがＣＳＧＲＵ命令のＷＳＲでない限り）（１）条件によって、拒否されるべきである。
【０１０５】
３）両方のパイプ上に異なるスレッド、かつ
両方のパイプ内でＩＬＯＣＫがオンである、かつ
現在のパイプ番号が（パイプ０の場合は０、パイプ１の場合は１である）ＬＦＳＲの値と等しくない＝＞（やはりインターロック・ビットがより古い命令によってまだオンにされていない場合は）現在のパイプｘの命令は拒否されるべきである。
【０１０６】
インターロックがオンにされた場合、両方が、（それらの一方がＣＳＧＲＵ命令のＷＳＲでない限り）（１）条件によって、拒否されるべきである。
【０１０７】
本明細書では、１つのスレッドがマルチスレッド・プロセッサの１つまたは複数の他のスレッドの実行を停止させるための技法の一実施形態が、説明される。技法は、ハングアップを回避するように、また他のスレッドが停止させられる前に、それらと関連付けられたすべての命令が完了することを保証するように、実施される。この技法は、一態様では、このスレッドにおいてオペレーションを続行する前に、条件が満たされているかどうかを調べるために、プロセッサのすべてのハードウェア・スレッド（または別の実施形態では、選択されたスレッド）からのステータス情報を見る、パイプライン・ドレーン命令を含む。
【０１０８】
さらに、この技法の一実施形態は、共有レジスタに対して作用する、ＣＳＧＲＵ、ＬＯＲＵ、およびＬＮＲＵなどの、アトミック命令を使用する。例えば、マルチスレッド・コア設計（例えば、ＳＭＴ）において、２つ以上のスレッドが、共有コアを共有する場合、それらは、頻繁に、情報を伝達し、共有する必要があり、これは、セマフォ、ロックなどを含むことができる。これは、ファームウェア、ミリコードを含むことができ、またはそれは、ソフトウェアを含むことができる。スレッドは、ストレージを通して通信する既存のＩＳＡ命令を使用することができる。しかしながら、これらは、遅いことがあり、（一般にオペランド・ストア比較（ＯＳＣ）として知られる）ストア−ヒット−ロードまたはロード−ヒット−ストア衝突を含む。加えて、通信がファームウェアによって行われる場合、ストレージを介して通信することは、望ましくない、または不可能なことがあり、ファームウェア・ルーチンは、オペランドのロードおよび記憶が禁止されたクリティカルなシーケンスの最中のことがある。したがって、これらの命令は、ストレージの代わりに、レジスタに対して作用する。
【０１０９】
アトミック命令は、スレッドの実行の制御に関連して説明されたが、それらは、他の目的で使用されてもよい。各命令は、本明細書で説明された使用から距離を置いており、他の状況において利用されてもよい。
【０１１０】
図２０を参照すると、一例では、コンピュータ・プログラム製品１２００は、例えば、１つまたは複数の実施形態を提供し、容易にするために、コンピュータ可読プログラム・コード手段、ロジック、または命令１２０４、あるいはそれらの任意の組合せを記憶する、１つまたは複数の非一時的コンピュータ可読記憶媒体１２０２を含む。
【０１１１】
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはそれらの任意の組合せとすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実施させるための、コンピュータ可読プログラム命令を有する、（１つまたは複数の）コンピュータ可読記憶媒体を含むことができる。
【０１１２】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持し、記憶することができる、有形なデバイスとすることができる。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁気記憶デバイス、半導体記憶デバイス、または上記のものの任意の適切な組合せとすることができるが、それらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、以下のものを、すなわち、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリー・メモリ（ＲＯＭ）、消去可能プログラマブル・リード・オンリー・メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク・リード・オンリー・メモリ（ＣＤ−ＲＯＭ）デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー（Ｒ）・ディスク、パンチ・カードまたは命令が記録された溝内の隆起構造などの機械的に符号化されたデバイス、および上記のものの任意の適切な組合せを含む。コンピュータ可読記憶媒体は、本明細書で使用される場合、電波もしくは他の自由に伝搬する電磁波、導波路もしくは他の伝送媒体を通って伝搬する電磁波（例えば、光ファイバ・ケーブルを通る光パルス）、または電線を通して伝送される電気信号など、いわば一時的信号であると解釈されるべきではない。
【０１１３】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理デバイスに、あるいはネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくは無線ネットワーク、またはそれらの任意の組合せを介して、外部コンピュータまたは外部記憶デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの任意の組合せを備えることができる。各コンピューティング／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティング／処理デバイス内のコンピュータ可読記憶媒体内に記憶するために、コンピュータ可読プログラム命令を転送する。
【０１１４】
本発明の操作を実施するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはＳｍａｌｌｔａｌｋ（Ｒ）もしくはＣ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語もしくは類似のプログラミング言語などの従来の手続型プログラミング言語を含む、１つもしくは複数のプログラミング言語の任意の組合せで書かれた、ソース・コードもしくはオブジェクト・コードとすることができる。コンピュータ可読プログラム命令は、すべてをユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして、一部をユーザのコンピュータ上で、一部をユーザのコンピュータ上および一部をリモート・コンピュータ上で、またはすべてをリモート・コンピュータもしくはサーバ上で実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）もしくはワイド・エリア・ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを通して、ユーザのコンピュータに接続することができ、または接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを通して）外部コンピュータに対して行うことができる。いくつかの実施形態では、例えば、プログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル論理アレイ（ＰＬＡ）を含む、電子回路は、本発明の態様を実行するように、電子回路をカスタマイズするために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行することができる。
【０１１５】
本発明の態様は、本発明の実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品についてのフローチャート図またはブロック図、あるいはその両方を参照して本明細書で説明される。フローチャート図またはブロック図、あるいはその両方の各ブロック、およびフローチャート図またはブロック図、あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実施することができることが理解される。
【０１１６】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行する命令が、フローチャートまたはブロック図、あるいはその両方の１つまたは複数のブロックにおいて指定される機能／動作を実施するための手段を生成するように、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて、マシンを生成するものであってよい。これらのコンピュータ可読プログラム命令は、命令が記憶されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図、あるいはその両方の１つまたは複数のブロックにおいて指定される機能／動作の態様を実施する命令を含む製造品を含むように、コンピュータ可読記憶媒体内に記憶され、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはそれらの任意の組合せに、特定の方法で機能するように指示することができるものであってもよい。
【０１１７】
コンピュータ可読プログラム命令は、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行される命令が、フローチャートまたはブロック図、あるいはその両方の１つまたは複数のブロックにおいて指定される機能／動作を実施するように、コンピュータ実施プロセスを生成させるべく、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の操作ステップを実行させるものであってもよい。
【０１１８】
図におけるフローチャートおよびブロック図は、本発明の様々な実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実施についての、アーキテクチャ、機能性、および操作を説明する。この点で、フローチャートまたはブロック図における各ブロックは、指定された論理機能を実施するための１つまたは複数の実行可能命令を含む、命令のモジュール、セグメント、または部分を表すことができる。いくつかの代替的な実施では、ブロックにおいて述べられる機能は、図で述べられる順序とは異なる順序で生じてもよい。例えば、連続して示される２つのブロックは、含まれる機能性に応じて、実際には、実質的に同時に実行されてもよく、またはブロックは、時には逆順で実行されてもよい。ブロック図またはフローチャート図、あるいはその両方の各ブロック、およびブロック図またはフローチャート図、あるいはその両方におけるブロックの組合せは、指定された機能もしくは動作を実行し、または専用ハードウェアおよびコンピュータ命令の組合せを実施する、専用ハードウェアベースのシステムによって実施することができることも留意される。
【０１１９】
様々な実施形態が、上で説明されたが、これらは、例であるにすぎない。例えば、１つまたは複数の実施形態を組み込み、使用するために、他のアーキテクチャのコンピューティング環境を使用することができる。さらに、本発明の１つまたは複数の態様は、ＳＭＴ以外のマルチスレッディングの形態にも適用可能である。またさらに、異なる命令、命令フォーマット、命令フィールド、または命令値、あるいはそれらの任意の組合せを使用することができる。多くの変形が、可能である。
【０１２０】
さらに、他のタイプのコンピューティング環境も、利益を得ること、および使用することができる。例として、システム・バスを通してメモリ要素に直接的または間接的に結合された少なくとも２つのプロセッサを含む、プログラム・コードの記憶または実行、あるいはその両方を行うのに適したデータ処理システムが、使用可能である。メモリ要素は、例えば、プログラム・コードの実際の実行中に利用されるローカル・メモリ、大容量ストレージ、および実行中に大容量ストレージからコードを取り出さなければならない回数を減らすために、少なくともあるプログラム・コードの一時記憶を提供するキャッシュ・メモリを含む。
【０１２１】
（キーボード、ディスプレイ、ポインティング・デバイス、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サム・ドライブ、および他のメモリ媒体などを含むが、それらに限定されない）入力／出力またはＩ／Ｏデバイスは、直接的に、または介在するＩ／Ｏコントローラを通して、システムに結合することができる。データ処理システムが、介在する私設または公衆ネットワークを通して、他のデータ処理システム、またはリモート・プリンタもしくはストレージ・デバイスに結合されることを可能にするために、ネットワーク・アダプタも、システムに結合することができる。モデム、ケーブル・モデム、およびイーサネット（Ｒ）・カードは、利用可能なタイプのネットワーク・アダプタのうちのほんのいくつかである。
【０１２２】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、限定的であることは意図されていない。本明細書で使用される場合、「ａ」、「ａｎ」、および「ｔｈｅ」の付いた単数形は、文脈が明らかにそうではないことを示していない限り、複数形も同様に含むことが意図されている。本明細書で使用される場合、「ｃｏｍｐｒｉｓｅｓ（含む）」または「ｃｏｍｐｒｉｓｉｎｇ」という用語、あるいはその両方は、述べられた特徴、整数、ステップ、操作、要素、または構成要素、あるいはそれらの任意の組合せの存在を指定するが、１つまたは複数の他の特徴、整数、ステップ、操作、要素、構成要素、またはそれらのグループ、あるいはそれらの任意の組合せの存在または追加を除外しないことがさらに理解される。
【０１２３】
以下の特許請求の範囲における対応する構造、材料、動作、およびすべてのミーンズまたはステップ・プラス・ファンクション要素の均等物は、存在する場合は、明確に特許請求されるような他の特許請求される要素と組み合わせて機能を実行するための任意の構造、材料、または動作を含むことが意図される。１つまたは複数の実施形態の説明は、例証および説明の目的で提示されたが、開示された形態において網羅的または限定的であることは意図されていない。当業者には、多くの変更および変形が明らかである。実施形態は、様々な態様および実際の応用を最も良く説明するために、および企図される特定の使用に適するような様々な変更が施された様々な実施形態を他の当業者が理解することを可能にするために、選択され、説明された。
【図１】
0006580134.tif 000002
【図２】
0006580134.tif 000003
【図３】
0006580134.tif 000004
【図４】
0006580134.tif 000005
【図５】
0006580134.tif 000006
【図６】
0006580134.tif 000007
【図７】
0006580134.tif 000008
【図８】
0006580134.tif 000009
【図９】
0006580134.tif 000010
【図１０】
0006580134.tif 000011
【図１１】
0006580134.tif 000012
【図１２】
0006580134.tif 000013
【図１３】
0006580134.tif 000014
【図１４】
0006580134.tif 000015
【図１５】
0006580134.tif 000016
【図１６】
0006580134.tif 000017
【図１７】
0006580134.tif 000018
【図１８】
0006580134.tif 000019
【図１９】
0006580134.tif 000020
【図２０】
0006580134.tif 000021