(58)【調査した分野】(Int.Cl.,DB名)
前記他のスレッドのステータスをチェックする前記ステップが、ドレーン命令を使用するステップを含み、前記ドレーン命令が、前記スレッド上での命令ディスパッチを保留し、前記他のスレッドについてのステータスを問い合わせるように構成され、前記ドレーン命令が、前記1つまたは複数のオペレーションを実行する前記ステップの前に、1つまたは複数の条件が満たされるべきことを指定し、前記1つまたは複数のオペレーションを実行する前記ステップが、前記1つまたは複数の条件が満たされたことを前記ドレーン命令の結果が示すことに基づいて実行される、請求項2に記載の方法。
【発明を実施するための形態】
【0010】
1つまたは複数の態様によれば、コンピューティング環境内で動作するコア(例えば、本明細書ではプロセッサまたはプロセッサ・コアとも呼ばれる、物理的ハードウェア・プロセッサ)において、スレッド(例えば、ハードウェア・スレッド)の実行を制御するための能力が、提供される。コアは、例えば、同時マルチスレッディング(SMT)などのマルチスレッディングをサポートし、それは、同じ物理的プロセッサ・ハードウェア上で同時に動作する、複数の論理的中央処理装置(CPU)が効果的に存在することができることを意味する。これらの論理的CPUの各々は、スレッドと見なされる。
【0011】
そのようなマルチスレッディング環境では、1つのスレッドが、プロセッサ・コア上の他のスレッドの実行を停止させることが望ましいことがある。これは、プロセッサ・コア・リソースを必要とする、または他のスレッドが実行に干渉するような方法でプロセッサ・コア・リソースを操作している、クリティカル・シーケンスまたは他のシーケンスを実行することに応答したものとすることができる。一例では、能力の一部として、プロセッサ・コア上のすべてのスレッドに対してある条件が満たされるまで、待つことが望ましいことがある。例えば、特定のハードウェア・スレッド上で動作しているソフトウェアまたはファームウェアが、システム・アクションの実行を望んでおり、それは、プロセッサ・コア全体のどこからも記憶が行われていない、すなわち、プロセッサ・コア上のどのスレッド上でも記憶が行われていないことを最初に必要とすると仮定する。他のスレッドが停止させられるかどうかを判定するために、本明細書ではドレーン命令と呼ばれる命令が、一態様に従って提供され、それは、プロセッサ・コア上のスレッドのステータスをモニタリングする。
【0012】
さらに、1つまたは複数の態様によれば、スレッドの実行を制御する際、様々なアトミック命令を使用することができる。これらの命令は、ストレージまたはメモリの代わりに、SMTプロセッサのスレッドからアクセス可能であり、SMTプロセッサのスレッドによって共有されるレジスタに対して作用する(暗黙的または明示的に別段の言及がない限り、本明細書では、メモリとストレージは交換可能に使用される)。これは、複数のスレッドが、ストレージの代わりに、共有レジスタを使用して、情報を伝達し、共有することを可能にする。本明細書では、R−ユニット・レジスタ比較およびスワップ、またはレジスタ比較およびスワップ命令、R−ユニット・レジスタ・ロードおよび論理和、またはレジスタ・ロードおよび論理和命令、ならびにR−ユニット・レジスタ・ロードおよび論理積、またはレジスタ・ロードおよび論理積命令と呼ばれる、これらの命令は、本明細書で説明されるように、インターロッキング・プロトコルを使用して、共有レジスタへのアクセスを制御する。
【0013】
スレッドの実行を制御する1つまたは複数の態様を組み込み、使用するための、コンピューティング環境の一例が、
図1を参照して説明される。
図1を参照すると、一例では、コンピューティング環境100は、インターナショナル・ビジネス・マシーンズ(IBM(R))コーポレーション、アーモンク、ニューヨーク州によって提供される、z/Architectureに基づいている。z/Architectureは、“z/Architecture - Principles of Operation,”Publication No. SA22-7832-09, 10th Edition, September 2012と題する、IBM公表文献において説明されている。
【0014】
(本明細書において言及される)z/Architecture、IBM、ならびにZ/VM、Z/OS、POWER、およびPOWERPCは、インターナショナル・ビジネス・マシーンズ・コーポレーション、アーモンク、ニューヨーク州の登録商標である。本明細書で使用される他の名称も、インターナショナル・ビジネス・マシーンズ・コーポレーションまたは他の会社の登録商標、商標、または製品名であることがある。
【0015】
一例として、コンピューティング環境100は、1つまたは複数のI/O制御ユニット108を介して、1つまたは複数の入力/出力(I/O)デバイス106に結合される、中央プロセッサ複合体(CPC)102を含む。中央プロセッサ複合体102は、例えば、1つまたは複数のプロセッサ・コア110に結合されたプロセッサ・メモリ104(別名、メイン・メモリ、メイン・ストレージ、中央ストレージ)と、入力/出力サブシステム111とを含み、その各々は、以下で説明される。
【0016】
プロセッサ・メモリ104は、例えば、1つまたは複数のパーティション112(例えば、論理的パーティション)と、例えば、論理的パーティション・ハイパーバイザ114および他のプロセッサ・ファームウェア115を含む、プロセッサ・ファームウェア113とを含む。論理的パーティション・ハイパーバイザ114の一例は、インターナショナル・ビジネス・マシーンズ・コーポレーション、アーモンク、ニューヨーク州によって提供される、Processor Resource/System Manager(PR/SM)である。
【0017】
論理的パーティションは、別個のシステムとして機能し、その中に、1つまたは複数のアプリケーション120と、任意選択で、常駐オペレーティング・システム122とを有し、それらは、論理的パーティション毎に異なるものとすることができる。一実施形態では、オペレーティング・システムは、インターナショナル・ビジネス・マシーンズ・コーポレーション、アーモンク、ニューヨーク州によって提供される、z/OSオペレーティング・システム、z/VMオペレーティング・システム、z/Linuxオペレーティング・システム、またはTPFオペレーティング・システムである。
【0018】
論理的パーティション112は、論理的パーティション・ハイパーバイザ114によって管理され、それは、プロセッサ・コア110上で動作するファームウェアによって実施される。本明細書で使用される場合、ファームウェアは、例えば、プロセッサ・コアのマイクロコードまたはミリコード、あるいはその両方を含む。それは、例えば、より高いレベルのマシン・コードを実施する際に使用される、ハードウェア・レベルの命令またはデータ構造、あるいはその両方を含む。一実施形態では、それは、下層のハードウェアに固有の信頼性のあるソフトウェアまたはマイクロコードを含み、システム・ハードウェアへのオペレーティング・システム・アクセスを制御する、例えば、一般的にはマイクロコードとして届けられる独自仕様コードを含む。
【0019】
プロセッサ・コア110は、論理的パーティションに割り当てられた物理的プロセッサ・リソースである。特に、各論理的パーティション112は、1つまたは複数の論理的プロセッサを有し、その各々は、パーティションに割り当てられたプロセッサ・コア110の全部または割り当て分を表す。特定の論理的パーティション112の論理的プロセッサは、下層のプロセッサ・コア110がそのパーティションのために確保されるように、そのパーティションの専用とすることができ、または下層のプロセッサ・コアが別のパーティションからも潜在的に利用可能なように、別のパーティションとの共有とすることができる。
【0020】
一例では、コアの少なくとも1つは、複数のスレッド(すなわち、同時に動作する複数の論理的CPU)を含む、同時マルチスレッディング・プロセッサなどの、マルチスレッディング・プロセッサである。一例では、コアは、2つのスレッドを含むが、他の実施形態では、3つ以上のスレッドが存在してもよい。本明細書ではT0(126)およびT1(128)と呼ばれる、2つのスレッドは、一例であるにすぎない。
【0021】
同時マルチスレッディングのサポートにおいて、プロセッサ・コア・ハードウェアは、スレッド毎にフル・アーキテクト状態(full architected state)(例えば、z/Architectureおよびマイクロ・アーキテクト状態(micro-architected state))を含む。したがって、すべてのスレッドに共有の(本明細書では共有レジスタと呼ばれる)汎プロセッサのレジスタ130、およびスレッドに固有の(本明細書では固有レジスタと呼ばれる)スレッド固有のレジスタ132が、提供される。これらのレジスタの使用は、以下でさらに説明される。
【0022】
複数のスレッドの実行を制御するために、プロセッサ・コア110は、本明細書で説明されるように、そのような制御を提供するためのハードウェアまたはロジック、あるいはその両方を含む。このハードウェアまたはロジック、あるいはその両方は、本明細書では、便宜的に、スレッド制御機能134と呼ばれる。
【0023】
入力/出力サブシステム111は、入力/出力デバイス106とプロセッサ・メモリ104との間の情報のフローを管理する。それは、中央処理複合体の一部とすることもでき、または中央処理複合体から分離することもできるという意味合いで、中央処理複合体に結合される。I/Oサブシステムは、入力/出力デバイスと直接的に通信するタスクからプロセッサ・コアを解放し、データ処理が入力/出力処理と同時に進行することを可能にする。通信を提供するために、I/Oサブシステムは、I/O通信アダプタを利用する。例えば、チャネル、I/Oアダプタ、PCIカード、イーサネット(R)・カード、スモール・コンピュータ・ストレージ・インターフェース(SCSI)カードなどを含む、様々なタイプの通信アダプタが存在する。本明細書で説明される特定の例では、I/O通信アダプタは、チャネルであり、したがって、I/Oサブシステムは、本明細書ではチャネル・サブシステムと呼ばれる。しかしながら、これは、一例であるにすぎない。他のタイプのI/Oサブシステムも、使用することができる。
【0024】
I/Oサブシステムは、入力/出力デバイス106への情報のフローまたは入力/出力デバイス106からの情報のフローを管理する際に、通信リンクとして、1つまたは複数の入力/出力パスを使用する。この特定の例では、これらのパスは、通信アダプタがチャネルであるので、チャネル・パスと呼ばれる。
【0025】
スレッドの実行を制御する1つまたは複数の態様を組み込み、使用するための、コンピューティング環境の別の例が、
図2を参照して説明される。この例では、コンピューティング環境200は、z/Architecture(または別の実施形態では別のアーキテクチャ)に基づいて実施される、パーティショニングされない環境を含む。それは、例えば、1つまたは複数のキャッシュ204、少なくとも2つのスレッドT0(206)、T1(208)、スレッドに共有のレジスタ210のセット、および各スレッドに固有のレジスタ212のセット、ならびにスレッド制御機能214を含む、コア202を含む。
【0026】
コア202は、1つまたは複数のキャッシュ218と、オペレーティング・システムなど、少なくとも1つの制御ユーティリティ220とを有するメモリ216に、および入力/出力(I/O)サブシステム222に通信可能に結合される。I/Oサブシステム222は、例えば、データ入力デバイス、センサ、またはディスプレイなどの出力デバイス、あるいはそれらの任意の組合せを含むことができる、外部I/Oデバイス224に通信可能に結合される。
【0027】
スレッドの実行を制御する1つまたは複数の態様を組み込み、使用するための、コンピューティング環境の別の例が、
図3を参照して説明される。この例では、コンピューティング環境300aは、例えば、1つまたは複数のバス308または他の接続、あるいはその両方を介して、互いに結合される、例えば、ネイティブ・コア302、メモリ304、および1つまたは複数の入力/出力デバイスまたはインターフェース306、あるいはその両方を含む。例として、コンピューティング環境300aは、インターナショナル・ビジネス・マシーンズ・コーポレーション、アーモンク、ニューヨーク州によって提供されるPowerPCプロセッサ、もしくはPower Systemsサーバ、ヒューレッド・パッカード・カンパニー、パロ・アルト、カリフォルニア州によって提供される、インテルItanium IIプロセッサを有するHP Superdome、またはインターナショナル・ビジネス・マシーンズ・コーポレーション、ヒューレッド・パッカード、インテル、オラクル、もしくはその他によって提供されるアーキテクチャに基づいた他のマシン、あるいはそれらの任意の組合せを含むことができる。
【0028】
ネイティブ・コア302は、任意の特定の時点における環境の状態を表す情報を含み、環境内での処理中に使用される、1つもしくは複数の汎用レジスタまたは1つもしくは複数の専用レジスタ、あるいはその両方などの、1つまたは複数のネイティブ・レジスタ310を含む。さらに、ネイティブ・コアは、例えば、少なくとも2つのスレッドT0(311)、T1(313)、スレッドに共有のレジスタ315のセット、各スレッドに固有のレジスタ317のセット、およびスレッド制御機能319を含むことができる。
【0029】
さらに、ネイティブ・コア302は、メモリ304内に記憶された命令およびコードを実行する。特定の一例では、プロセッサ・コアは、メモリ304内に記憶されたエミュレータ・コード312を実行する。このコードは、1つのアーキテクチャで構成されたコンピューティング環境が、1つまたは複数の他のアーキテクチャをエミュレートすることを可能にする。例えば、エミュレータ・コード312は、PowerPCプロセッサ、Power Systemsサーバ、HP Superdomeサーバ、またはその他など、z/Architecture以外のアーキテクチャに基づいたマシンが、z/Architectureをエミュレートし、z/Architectureに基づいて開発されたソフトウェアおよび命令を実行することを可能にする。
【0030】
さらなる実施形態では、
図5に示されるように、ネイティブ・コア302は、シングルスレッド・コアであるが、マルチスレッド・コアが、エミュレータ・コード312内でエミュレートされており、エミュレータ・コード312内に含まれている。例えば、エミュレータ・コード312は、エミュレートされたスレッド制御機能320、エミュレートされたスレッド322、324、エミュレートされた共有レジスタ326、およびエミュレートされた固有レジスタ328を含み、それらの各々は、z/Architectureなどネイティブ・コア302のアーキテクチャとは異なるアーキテクチャに基づいている。
【0031】
エミュレータ・コード312に関するさらなる詳細が、
図4を参照して説明される。メモリ304内に記憶されたゲスト命令350は、ネイティブ・コア302のアーキテクチャ以外のアーキテクチャで実行されるように開発された、(例えば、マシン命令と相互に関連する)ソフトウェア命令を含む。例えば、ゲスト命令350は、z/Architectureコア202上で実行するように設計されてもよいが、代わりに、例えば、インテルItanium IIプロセッサとすることができる、ネイティブ・コア302上でエミュレートされている。一例では、エミュレータ・コード312は、メモリ304から1つまたは複数のゲスト命令350を獲得し、獲得された命令のためのローカル・バッファリングを任意選択で提供するための、命令フェッチング・ルーチン352を含む。それは、獲得されたゲスト命令のタイプを決定し、ゲスト命令を1つまたは複数の対応するネイティブ命令356に変換するための、命令変換ルーチン354も含む。この変換は、例えば、ゲスト命令によって実行される機能を識別し、その機能を実行するためのネイティブ命令を選択することを含む。
【0032】
さらに、エミュレータ・コード312は、ネイティブ命令を実行させる、エミュレーション制御ルーチン360を含む。エミュレーション制御ルーチン360は、ネイティブ・コア302に、1つまたは複数の先に獲得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、そのような実行が終わると、次のゲスト命令またはゲスト命令のグループの獲得をエミュレートするために、命令フェッチ・ルーチンに制御を返させることができる。ゲスト命令は、本明細書で説明されるスレッド制御機能の命令とすることができる。ネイティブ命令356の実行は、データをメモリ304からレジスタにロードすること、データをレジスタからメモリに記憶し戻すこと、または変換ルーチンによって決定されるような、あるタイプの算術もしくは論理演算を実行することを含むことができる。
【0033】
各ルーチンは、例えば、メモリ内に記憶され、ネイティブ・コア302によって実行される、ソフトウェアで実施される。他の例では、ルーチンまたは操作の1つまたは複数は、ファームウェア、ハードウェア、ソフトウェア、またはそれらの何らかの組合せで実施される。エミュレートされたプロセッサのレジスタは、ネイティブ・コアのネイティブ・レジスタ310を使用して、またはメモリ304内のロケーションを使用することによって、エミュレートすることができる。実施形態では、ゲスト命令350、ネイティブ命令356、およびエミュレータ・コード312は、同じメモリ内に存在してもよく、または異なるメモリ・デバイス間に分散させてもよい。
【0034】
上で説明されたコンピューティング環境は、使用することができるコンピューティング環境の例にすぎない。他のパーティショニングされない環境、他のパーティショニングされた環境、または他のエミュレートされた環境、あるいはそれらの任意の組合せを含むが、それらに限定されない、他の環境も使用することができ、実施形態は、いずれか1つの環境に限定されない。
【0035】
上で示されたように、複数のレジスタが、各スレッドと関連付けられる。スレッドに共有の1つの共有レジスタは、ミリコード制御レジスタ(MCR)、MCR002などの、制御レジスタであり、その例が、
図6に示されている。MCR002(400)は、スレッドがいかに振る舞うかを決定するSMTのための様々なコントロールを含む。一実施形態では、MCR002(400)は、複数のフィールド402を含み、1つまたは複数の態様に従って使用されるそれらのフィールドは、例えば、以下のものを含む。
【0036】
(a)I−フェッチ一時停止フィールド404:このフィールドの2つのビットは、スレッド0および1と1対1に対応する(3つ以上のスレッドが存在する場合、3つ以上のビットが存在することができる)。ビットが、「1」bである場合、これは、他の制御ビットの状態とは無関係に、I−フェッチングをブロックするための有効な一時的マスタ・オーバーライドになる。
【0037】
(b)I−フェッチ停止不許可フィールド406:このフィールドの2つのビットは、スレッド0および1と1対1に対応する(3つ以上のスレッドが存在する場合、3つ以上のビットが存在することができる)。ビットが、「1」bである場合、それは、他のスレッドがこのスレッドのためのI−フェッチ停止ビットをオンにすることを許可されないコードのセクション(例えば、クリティカルなセクション)に、このスレッドが入っていることを示す。
【0038】
使用される別のレジスタは、命令アドレス・レジスタであり、それは、各スレッドに固有である。IAREGFAと呼ばれるこのレジスタは、ハードウェアによって検出されたプログラム割り込みについての情報を含む。IAREGFAの例が、
図7に示されている。示されるように、IAREGFA450は、複数のフィールド452を含む。1つまたは複数の態様に従って使用される1つのフィールドは、スレッドが例外処理中であることを示す、フィールド454である。
【0039】
上述のレジスタの各々は、追加のフィールド、より僅かなフィールド、または異なるフィールド、あるいはそれらの任意の組合せを含むことができる。さらに、使用される他のレジスタも、存在することができる。本明細書で説明されるレジスタおよびフィールドは、使用することができるレジスタまたはフィールド、あるいはその両方の例である。さらに、MCRおよびIAREGFAは、レジスタの名前の例にすぎない。多くの変形が、可能である。
【0040】
命令スループットを高めるために、各スレッドは、同じ時刻に複数のオペレーションが実行されることを可能にする処理のために、命令パイプラインを使用する。命令パイプラインは、複数のステージを含み、そのようなパイプラインの一例が、
図8を参照して説明される。
図8を参照すると、アウト・オブ・オーダ処理をサポートするパイプライン500は、例えば、命令がメモリからフェッチされる、命令フェッチ・ステージ502、ディスパッチ/完了グループを形成し、命令を発行待ち行列に入れる、命令デコード/ディスパッチ・ステージ504、命令が(アウト・オブ・オーダで)発行される、発行ステージ506、命令が(アウト・オブ・オーダで)実行される、実行ステージ508、命令が(アウト・オブ・オーダで)終了する、終了ステージ510、アーキテクチャ・チェックポイントを参照する、完了ステージ512、およびリカバリ・チェックポイント・ステージ514を含む。他のパイプラインは、追加のステージ、より僅かなステージ、または異なるステージ、あるいはそれらの任意の組合せを含むことができる。本明細書で説明されるステージは、例にすぎない。
【0041】
一例では、最大3つまでの命令(特に、マイクロオペレーション)を、グループ内に入れることができる。しかしながら、分岐命令などのある命令は、グループが満杯でない場合であっても、グループを終わらせる。満杯のグループの命令は、同じ発行待ち行列に誘導され、その後、次のグループは、別の発行待ち行列に入る。
【0042】
本発明の態様によれば、コア内で動作する1つのスレッドが、1つまたは複数の動作を実行するために、そのコア内で実行する1つまたは複数の他のスレッドを停止させるための能力が、提供される。本明細書で説明される例では、コアは、2つのスレッドが存在することを示す、SMT−2設計である。しかしながら、他の実施形態では、3つ以上のスレッドが、存在してもよい。
【0043】
1つまたは複数のスレッドの実行を制御するために使用されるロジックの一実施形態が、
図9を参照して説明される。この例では、コア上で実行するスレッド0(T0)は、コア上で実行するスレッド1(T1)を停止させようと試みており、したがって、説明は、T0およびT1について言及するが、しかしながら、他の実施形態では、T1が、T0を停止させようと試みてもよく、またはコア上で実行している停止させられるスレッドが2つ以上存在してもよく、あるいはその両方であってもよい。例えば、T0は、T1、T2、T3などを停止させることができる。さらに、本明細書で説明される例では、ロジックは、コアのファームウェアによって実行されるが、しかしながら、1つまたは複数の他の実施形態では、それは、汎用ソフトウェアによって実行されてもよい。多くの他の変形が、可能である。
【0044】
図9を参照して説明されるように、一実施形態では、1つのスレッドが、別のスレッドの実行を停止させ、その停止は、スレッドによって共有される1つまたは複数のレジスタ(例えば、ハードウェア・レジスタ)内の1つまたは複数のコントロール(例えば、インジケータ、ビットなど)を使用する。
【0045】
図9を参照すると、一実施形態では、ステップ600において、スレッド0は、T1(または他の実施形態では、コアの1つもしくは複数のスレッド)を停止させることが禁止されているかどうかをチェックする。一例では、これは、MCR002の選択されたビット(例えば、ビット25)、およびIAREGFAの選択されたビット(例えば、ビット4)をチェックすることによって判定される。これは、一例では、T0が分岐ポイントをテストすることによって達成され、これは、STPIFALWと呼ばれる。STPIFALWは、MCR002およびIAREGFAの選択されたビットをテストする。例えば、MCR002.25(すなわち、MCR002のビット25)が、0に設定されており、かつIAREGFA.4(すなわち、IAREGFAのビット4)が、0に設定されている場合、T1のI−フェッチングの停止が、許可される。
【0046】
質問602において、STPIFALWが、T1を停止させることが禁止されていることを示した場合、処理は、ステップ600を続行する。しかしながら、STPIFALWによって、特に、MCR002.25=0、かつIAREGFA.4=0によって示されるように、T1を停止させることが禁止されていない場合、ステップ604において、T0がT1上での命令フェッチングおよび実行を停止させることによって、処理を続行する。一例では、これは、T1上での命令フェッチングおよび実行を停止させる、T1のためのI−フェッチ一時停止ビット(例えば、MCR002.9)を、T0が設定することを含む。このビットは、例えば、R−ユニット・レジスタ比較およびスワップ(CSGRU)命令、またはR−ユニット・レジスタ・ロードおよび論理和命令を使用して設定され、それらの各々は、以下で説明される。
【0047】
その後、ステップ606において、T0は、すべてのスレッドに対するドレーン操作(DRAIN ALLTIDS)を実行し、それは、T1上のすべての命令がパイプラインからドレーンまたはフラッシュされるまで、T0のための命令ディスパッチを保留し、T1にステータスについて問い合わせる。一例では、ドレーン命令は、ドレーン操作を実行するために使用され、その例は、以下で説明される。
【0048】
質問608において、パイプラインから他のスレッド上の命令がドレーンされている間、処理は、ステップ606を続行する。しかしながら、T1上の命令がドレーンされたのに応答して、ステップ610において、T0は、T0のための命令ディスパッチおよび実行を続行する。
【0049】
その後、ステップ612において、T0は、T1が、テストの後から停止の前までに、そのステータスを変化させなかったことを保証するために、T1(および存在する場合は他のスレッド)を停止させることが禁止されているかどうかを再びチェックする。このチェックは、上で説明されたように、STPIFALWを使用して実行される。質問614において、今は、T1を停止させることが禁止されている場合、ステップ616において、T0は、T1が、MCR002のビット9をオフにする(すなわち、それを0に設定する)ことによって実行を続行することを許可する。処理は、ステップ600に進む。
【0050】
そうではなく、質問614において、T1を停止させることが禁止されていない場合、ステップ618において、T0は、T1の停止を引き起こした命令シーケンス(例えば、1つまたは複数のオペレーション)を実行する。その命令シーケンスが完了した後、ステップ620において、T1を続行することが許可される。したがって、T0は、以下で説明されるように、例えば、R−ユニット・ロードおよび論理積(LNRU)命令またはCSGRUを使用することによって、MCR002内のビット9をリセットする。その後、ステップ622において、両方のスレッドは、通常通り実行する。
【0051】
上で説明されたように、数々の命令が、マルチスレッディング・プロセッサの1つまたは複数のスレッドの実行を制御するために使用される。これらの命令の各々は、以下で説明される。
【0052】
図10〜
図11を参照すると、ドレーン命令の一実施形態が、説明されている。特に、
図10は、ドレーン命令のフォーマットの一実施形態を示しており、
図11は、ドレーン命令と関連付けられたロジックの一実施形態を示している。
【0053】
図10を参照すると、ドレーン命令700は、ドレーン操作を識別するオペレーション・コードを含む、オペコード・フィールド702、処理が何サイクル延期されるかを指定する延期カウントを示す値を含む、マスク(M3)フィールド704、およびこの例では、すべてのスレッドがドレーンされるべきことを指定する、全TID(スレッドID)ドレーンである、ドレーンのタイプを示す、命令フィールド706(I2)を含む。
【0054】
動作について、
図11を参照すると、ステップ750において、スレッドT0は、指定された条件が満たされるまで、パイプラインの命令デコードまたはディスパッチ・ステージにおいて、T0のための命令処理を中断する。命令のI2フィールドの指定されたビット(例えば、I2のビット0:31、それは、命令のフィールドのすべてを含む、I−テキスト・フィールドの、例えば、ビット16:47である)は、命令処理を続行する前に、どの1つまたは複数のハードウェア条件が満たされるべきであるかを指定する。一実施形態では、指定された条件は、クロススレッド・コントロール(例えば、I2フィールドのビット0、I−テキスト・フィールドのビット16)を含み、それは、T1上で処理が中断されたかどうかを判定するために、T1(または他のスレッド)のステータスをチェックする。I2フィールドのビット0が、「1」bである場合、それは、このスレッド上で処理を続行するためには、両方のスレッド上で他のすべてのドレーン条件が満たされるべきであることを指定する(他のスレッドは、このスレッド上でのドレーンによってブロックされない)。この機能を使用する場合、ハングアップを回避するための配慮がなされるべきである。
【0055】
1つまたは複数の実施形態では、他の条件が、I2フィールド内で指定されてもよい。与えられたビット位置の1は、命令処理を再開する前に、条件が満たされるべきであることを示し、2つ以上のビットが、オンである場合、すべての選択された条件が、満たされるべきである。実施において、一実施形態では、I−テキストのビット16(すなわち、I2フィールドのビット0)が、1である場合、両方(またはすべて)のハードウェア・スレッドのステータス・ファンクションの論理和が、ビット毎に実行され、その後、ドレーン条件が満たされたかどうかについての最終値を決定するために、選択されたすべてのファンクションの論理和が、一緒に実行される
【0056】
質問752において、指定された条件が満たされたかどうかに関する判定が、行われる。満たされていない場合、ステップ750において、中断を続行する。そうではなく、条件が満たされた場合、ステップ754において、処理が、追加のサイクル数だけ延期される。この追加数は、0以上とすることができ、ドレーン命令のM3フィールド内で指定される。例えば、M3フィールドは、I2フィールド内で指定された条件が満たされた後に延期させる、例えば、0から15までの間の追加のサイクル数を指定する。追加のサイクル数だけ延期した後、ステップ756において、命令処理が、再開する。
【0057】
一実施形態では、先行する命令とドレーンが、同時にディスパッチされている場合、先行する命令は、ディスパッチを完了し、パイプラインを通じて通常通り続行することを許可されるが、ドレーン命令およびすべての後続する命令は、条件が満たされるまで、ディスパッチにおいてブロックされる。ドレーン命令は、遅延処理において、このスレッドにだけ作用することに留意されたい。別のスレッドを停止させるために、本明細書で説明される技法が、使用される。しかしながら、指定されたビット(例えば、I2のビット0)は、1である場合、このスレッド上でドレーン命令後に処理を続行するためには、すべてのスレッド上ですべての指定された条件が満たされるべきであることを示す。
【0058】
示されたように、命令のM3フィールドは、パイプラインにおいて延期される追加サイクルの数を指定する。これは、I2フィールド内の許可条件のいずれかと併せて使用することができる。それは、ディスパッチにおける即時のサイクル・カウント遅延を与える、すべてが0のI2フィールドを用いても指定することができる。M3フィールドが0である場合であっても、ドレーン命令のディスパッチにおいて、1サイクルの延期が存在する。したがって、このカウントは、遅延するサイクルに1サイクルをプラスした数を指定する。ハードウェアは、他の命令とともにドレーンを発行することができ、パイプラインのフロント・エンド・ステージに影響するだけなので、アウト・オブ・オーダで発行することができる。
【0059】
この命令は、正しいオペレーションを保証するのに必要なインターロックがハードウェアに組み込まれていない場合に、使用することが意図されている。ほとんどの場合、ハードウェアは、パイプライン内で先行する命令からの窓を自動的にカバーする。
【0060】
条件コードは、この命令によって変更されない。
【0061】
使用される別の命令は、R−ユニット・レジスタ比較およびスワップ命令であり、それは、
図12〜
図13を参照して説明されている。特に、
図12は、R−ユニット・レジスタ比較およびスワップ命令のフォーマットの一実施形態を示しており、
図13は、R−ユニット・レジスタ比較およびスワップ命令と関連付けられたロジックの一実施形態を示している。本明細書で説明される命令におけるR−ユニットは、命令を実行するコア内の特定のユニットを指していることに留意されたい。しかしながら、特定のユニットの使用は、必ずしも必要ではない。それは、他のユニットによって、または単にコアによって実行されてもよい。
【0062】
図12を参照すると、CSGRU命令800は、レジスタ比較およびスワップ操作を指定するオペレーション・コードを含む、少なくとも1つのオペコード・フィールド802a、802b、第1のレジスタ・フィールド(R1)804、第2のレジスタ・フィールド(R3)806、ならびに命令フィールド(I2)808を含み、それらの各々は、以下で説明される。
【0063】
動作について、
図13を参照すると、ステップ850において、選択されたビット(例えば、I−テキストのビット22:31(例えば、I2フィールド(808)のビット6:15))で示される10ビット絶対レジスタ番号によって指定される(本明細書でMCRと呼ばれる)R−ユニット・レジスタの内容が、R1で指定される汎用レジスタ(GR)の内容と比較される。質問852において、それらが等しい場合、ステップ854において、MCRの内容が、R1で指定される汎用レジスタに書き込まれ、ステップ856において、R3で指定される汎用レジスタの内容が、MCRに書き込まれる。加えて、ステップ858において、条件コードが、0に設定され、CSGRUの処理が、完了する。
【0064】
質問852に戻り、MCRの内容とR1で指定されるレジスタの内容が、等しくない場合、ステップ860において、MCRの内容が、R1で指定される汎用レジスタに書き込まれ、ステップ858において、条件コードが、1に設定される。これで、CSGRUの処理が終了する。
【0065】
CSGRUの読み込み−比較−置換機能は、このスレッドT0、およびこのプロセッサの他のスレッド(例えば、T1)によって認められるように、アトミック操作である。一実施形態では、CSGRUは、クロススレッド・ハングアップを回避するために、SLOWオプションをオンにして実行される。SLOWオプションは、I2(808)の選択されたビット(例えば、ビット17)を1に設定することによって示され、パイプライン全体に同時に1つの命令しか存在しないことを意味する、スローモードを要求するために使用される。さらに、以下で説明されるように、インターロッキング・プロトコルが、この命令とともに実行され、したがって、本明細書でILOCKと呼ばれる、I2(808)の選択されたビット(例えば、ビット16)が、1に設定される。
【0066】
一実施形態では、このスレッド(T0)または他の任意のスレッドについての、RSR(専用レジスタ読み込み)、WSR(専用レジスタ書き込み)、NSR(専用レジスタ論理積)、OSR(専用レジスタ論理和)、XSR(専用レジスタ排他的論理和)、TRBIT(レジスタ・ビット・テスト)、RASR(絶対専用レジスタ読み込み)、WASR(絶対専用レジスタ書き込み)、TARBIT(絶対レジスタ・ビット・テスト)、NASR(絶対専用レジスタ論理積)、OASR(絶対専用レジスタ論理和)、XASR(絶対専用レジスタ排他的論理和)、LORU(R−ユニット・レジスタ・ロードおよび論理和)、LNRU(R−ユニット・レジスタ・ロードおよび論理積)、またはCSGRU(R−ユニット・レジスタ比較およびスワップ)など、他の選択された命令が、パイプライン内に存在し、かつ他の命令についての、ILOCKビット(例えば、I2のビット16)が、オンである場合、この命令は、拒否され、再発行される。この命令は、例えば、このスレッドからのすべての先行する命令が発行された後にだけ、発行され、またこのスレッドからのすべての将来の命令をそれに強制的に従属させる。
【0067】
条件コード設定は、例えば、CC0−等値比較、R−ユニット・レジスタはGR R1によって置換される、CC1−不等値比較、R−ユニット・レジスタは変更されない、を含む。
【0068】
使用される別の命令は、R−ユニット・レジスタ・ロードおよび論理和(LORU)命令であり、それは、
図14〜
図15を参照して説明されている。特に、
図14は、R−ユニット・レジスタ・ロードおよび論理和命令のフォーマットの一実施形態を示しており、
図15は、R−ユニット・レジスタ・ロードおよび論理和命令と関連付けられたロジックの一実施形態を示している。
【0069】
図14を参照すると、LORU命令900は、レジスタ・ロードおよび論理和操作を指定するオペレーション・コードを含む、少なくとも1つのオペコード・フィールド902a、902b、第1のレジスタ・フィールド(R1)904、第2のレジスタ・フィールド(R3)906、ならびに命令フィールド(I2)908を含み、それらの各々は、以下で説明される。
【0070】
動作について、
図15を参照すると、ステップ950において、選択されたビット(例えば、I−テキストのビット22:31(例えば、I2フィールド(908)のビット6:15))で示される10ビット絶対レジスタ番号によって指定される(本明細書でMCRと呼ばれる)R−ユニット・レジスタの内容が、R1で指定される汎用レジスタにロードされる。さらに、ステップ952において、R3で指定される汎用レジスタの内容とMCRの内容との論理和が求められ、ステップ954において、その結果が、MCRに書き込まれる。
【0071】
LORUの読み込み−論理和−置換機能は、このスレッドT0、およびこのプロセッサの他のスレッド(例えば、T1)によって認められるように、アトミック操作である。一実施形態では、LORUは、クロススレッド・ハングアップを回避するために、SLOWオプションをオンにして実行される。SLOWオプションは、I2(908)の選択されたビット(例えば、ビット17)を1に設定することによって示される。さらに、以下で説明されるように、インターロッキング・プロトコルが、この命令とともに実行され、したがって、本明細書でILOCKと呼ばれる、I2(908)の選択されたビット(例えば、ビット16)が、1に設定される。
【0072】
一実施形態では、このスレッド(T0)または他の任意のスレッドについての、RSR(専用レジスタ読み込み)、WSR(専用レジスタ書き込み)、NSR(専用レジスタ論理積)、OSR(専用レジスタ論理和)、XSR(専用レジスタ排他的論理和)、TRBIT(レジスタ・ビット・テスト)、RASR(絶対専用レジスタ読み込み)、WASR(絶対専用レジスタ書き込み)、TARBIT(絶対レジスタ・ビット・テスト)、NASR(絶対専用レジスタ論理積)、OASR(絶対専用レジスタ論理和)、XASR(絶対専用レジスタ排他的論理和)、LORU(R−ユニット・レジスタ・ロードおよび論理和)、LNRU(R−ユニット・レジスタ・ロードおよび論理積)、またはCSGRU(R−ユニット・レジスタ比較およびスワップ)など、他の選択された命令が、パイプライン内に存在し、かつ他の命令についての、ILOCKビット(I2のビット16)が、オンである場合、この命令は、拒否され、再発行される。この命令は、例えば、このスレッドからのすべての先行する命令が発行された後にだけ、発行され、またこのスレッドからのすべての将来の命令をそれに強制的に従属させる。
【0074】
使用される別の命令は、R−ユニット・レジスタ・ロードおよび論理積(LNRU)命令であり、それは、
図16〜
図17を参照して説明されている。特に、
図16は、R−ユニット・レジスタ・ロードおよび論理積命令のフォーマットの一実施形態を示しており、
図17は、R−ユニット・レジスタ・ロードおよび論理積命令と関連付けられたロジックの一実施形態を示している。
【0075】
図16を参照すると、LNRU命令1000は、レジスタ・ロードおよび論理積操作を指定するオペレーション・コードを含む、少なくとも1つのオペコード・フィールド1002a、1002b、第1のレジスタ・フィールド(R1)1004、第2のレジスタ・フィールド(R3)1006、ならびに命令フィールド(I2)1008を含み、それらの各々は、以下で説明される。
【0076】
動作について、
図17を参照すると、ステップ1050において、選択されたビット(例えば、I−テキストのビット22:31(例えば、I2フィールド(1008)のビット6:15))で示される10ビット絶対レジスタ番号によって指定される(本明細書でMCRと呼ばれる)R−ユニット・レジスタの内容が、R1で指定される汎用レジスタにロードされる。さらに、ステップ1052において、R3で指定される汎用レジスタの内容とMCRの内容との論理積が求められ、ステップ1054において、その結果が、MCRに書き込まれる。
【0077】
LNRUの読み込み−論理積−置換機能は、このスレッドT0、およびこのプロセッサの他のスレッド(例えば、T1)によって認められるように、アトミック操作である。一実施形態では、LNRUは、クロススレッド・ハングアップを回避するために、SLOWオプションをオンにして実行される。SLOWオプションは、I2(1008)の選択されたビット(例えば、ビット17)を1に設定することによって示される。さらに、以下で説明されるように、インターロッキング・プロトコルが、この命令とともに実行され、したがって、本明細書でILOCKと呼ばれる、I2(1008)の選択されたビット(例えば、ビット16)が、1に設定される。
【0078】
一実施形態では、このスレッド(T0)または他の任意のスレッドについての、RSR(専用レジスタ読み込み)、WSR(専用レジスタ書き込み)、NSR(専用レジスタ論理積)、OSR(専用レジスタ論理和)、XSR(専用レジスタ排他的論理和)、TRBIT(レジスタ・ビット・テスト)、RASR(絶対専用レジスタ読み込み)、WASR(絶対専用レジスタ書き込み)、TARBIT(絶対レジスタ・ビット・テスト)、NASR(絶対専用レジスタ論理積)、OASR(絶対専用レジスタ論理和)、XASR(絶対専用レジスタ排他的論理和)、LORU(R−ユニット・レジスタ・ロードおよび論理和)、LNRU(R−ユニット・レジスタ・ロードおよび論理積)、またはCSGRU(R−ユニット・レジスタ比較およびスワップ)など、他の選択された命令が、パイプライン内に存在し、かつ他の命令についての、ILOCKビット(例えば、I2のビット16)が、オンである場合、この命令は、拒否され、再発行される。この命令は、例えば、このスレッドからのすべての先行する命令が発行された後にだけ、発行され、またこのスレッドからのすべての将来の命令をそれに強制的に従属させる。
【0080】
LNRUは、LORUおよびCSGRUと同様、共有通信の手段として、ストレージの代わりに、SMTコア内のすべてのスレッドからアクセス可能なレジスタを使用する。これらのレジスタは、例えば、プロセッサのメモリまたはストレージとは別個のハードウェア・レジスタである。例えば、1つのコア設計では、コア上にすべてのスレッドに共有される(共有の)約64個のレジスタが存在し、スレッドは、自由に、これらの共有レジスタから読み込み、これらの共有レジスタに書き込むことができる。制御レジスタのいくつかのケースでは、両方のスレッドが、特別なインターロックなしに、それらへの書き込みを試みた場合、スレッドの一方による更新は、失われ得る。他のケースでは、スレッドの一方のみが、レジスタ内のビットによって制御されるリソースを「所有」することを許可される。したがって、共有レジスタに対して作用するこれらのアトミック命令は、これらの共有レジスタへのアクセスを制御し、順序付けるために使用される。
【0081】
LNRU、LORU、およびCSGRUは、各々が、インタースレッド操作および実行を制御するためのインターロッキング・プロトコルを使用することによって、スレッド全般において、汎用レジスタとMCRとの間のアトミック操作を可能にする。示されたように、命令の各々は、ILOCKビットを有し、パイプライン内で実行する命令のためのそのビットがオンである場合に、ILOCKビットがやはり設定された第2の命令がパイプラインに入ったときは、第2の命令は、拒否される(第1の命令が完了したときに、後で再実行される)。これは、スレッド間における、これらのレジスタへのアクセスの原子性を保証する。
【0082】
例えば、2つのタイプのインターロッキング命令、すなわち、LNRUおよびLORUなどの単一マイクロ操作μop命令、およびCSGRUなどの2μop命令が存在する。単一μop命令を用いる場合、インターロックは、μop発行(RSRおよびWSRタイプの命令)において設定され、RSRタイプについてはμop完了において、WSRタイプについてはチェックポイント上で解消される。2μop命令では、インターロックは、第1のμop(RSRタイプ)発行において設定され、第2のμop(WSRタイプ)のチェックポイントにおいて解消される。
【0083】
インターロッキング・プロトコルの使用およびインターロッキング・プロトコルに関するさらなる詳細が、
図18〜
図19を参照して説明される。このロジックは、コアによって、特に、命令がその上で発行されるパイプによって実行される。
【0084】
最初に
図18を参照すると、ステップ1100において、実行される命令(例えば、LNRU、LORU、CSGRU)が、マルチスレッド・プロセッサによって獲得される。ステップ1102において、オペレーションを実行するために、命令の実行が、マルチスレッド・プロセッサによって開始される。オペレーションは、排他的(atomicity)に実行される複数のサブオペレーションを含む。質問1104において、命令が実行を続行すべきかどうかに関する判定が、行われる。判定は、スレッドおよび1つまたは複数の他のスレッドによって共有される1つまたは複数のレジスタへのアトミック・アクセスを命令が有するかどうかを判定するために、例えば、インターロッキング・プロトコルを使用する。
【0085】
命令が実行を続行すべき場合、ステップ1106において、実行を続行し、それは、少なくとも1つの共有レジスタを使用して、オペレーションを実行することを含む。そうではなく、命令を続行すべきでない場合、ステップ1108において、それは、拒否される。
【0086】
インターロッキング・プロトコルに関するさらなる詳細が、
図19を参照して説明される。最初に、命令が、R−ユニットに入った場合、一例では、質問1150において、到来命令のILOCKビット(例えば、I−テキストのビット32−別名、I2のビット16)など、ロック・インジケータが設定(例えば、1に設定)されているかどうかに関するチェックが、行われる。ILOCKビットが、設定されていない場合、インターロッキング・プロトコル処理は、完了するが、しかしながら、到来命令内のILOCKビットが、設定されている場合、質問1152において、インターロックと呼ばれるロックが設定されているかどうかに関するさらなる判定が、行われる。インターロックは、複数のスレッドからアクセス可能なハードウェア・レジスタ内に配置される。
【0087】
インターロックが設定されており(例えば、ビットが1に設定されており)、別の命令が、設定されたILOCKビットを有する処理であることを示している場合、ステップ1153において、到来命令は、拒否される。
【0088】
しかしながら、インターロックが設定されていない場合、ステップ1154において、それが、設定され、ステップ1156において、命令の処理が、(例えば、パイプ内で)進行する。命令が完了した(またはチェックポイントに達した)場合、ステップ1158において、インターロックが、リセットされる(例えば、0に設定される)。
【0089】
インターロッキングに関するさらなる詳細は、以下を含む。
(A)インターロックは、例えば、以下の場合に、パイプ0によって設定することができる。
−インターロックを設定する必要がある命令が、パイプ0内に存在し、それが、単独で発行される。
−インターロックを設定する必要がある命令が、パイプ0内に存在し、ロックを設定することを望まない別の命令が、パイプ1内に存在し、両方の命令は、同じスレッドからのものである。
−インターロックを設定する必要がある命令が、パイプ0内に存在し、ロックを設定する必要がある別の命令が、パイプ1内に存在するが、パイプ0内の命令のほうが、古く、両方の命令は、同じスレッドからのものである。
−インターロックを設定する必要がある命令が、パイプ0内に存在し、ロックを設定することを望まない別の命令が、パイプ1内に存在し、両方の命令は、異なるスレッドからのものである。
−インターロックを設定する必要がある命令が、パイプ0内に存在し、ロックを設定する必要がある別の命令が、パイプ1内に存在し、両方の命令は、異なるスレッドからのものであり、LFSR(線形フィードバック・シフト・レジスタ)が、パイプ0を指し示す。LFSRは、疑似乱数を生成するために使用され、その数の最上位ビットを取ることによって、疑似ランダム選択が、2つのパイプの間において提供される(すなわち、どちらのパイプがインターロックを設定するかをランダムに選択する)。
【0090】
一例では、インターロックは、ディスパッチ・グループ内の可能な各命令のためのビットを有するベクトルである。例えば、一例では、ディスパッチ・グループ内に最大で3つの命令が存在することができ、したがって、インターロックは、各命令に1ビットずつの、3つのビットを含む。ビットが、例えば、1に設定されている場合、これは、そのビットと関連付けられた命令が、インターロックを有することを示す。
【0091】
インターロックは、上で説明されたように、パイプ1によっても設定することができるが、しかしながら、パイプ0は、パイプ1で置き換えられ、パイプ1は、パイプ0で置き換えられる。
【0092】
(B)インターロックの設定は、例えば、以下の場合に実行される。
−有効な命令が、パイプ内に存在する、かつ
−ILOCKが、設定されている、かつ
−predec_rd(すなわち、読み込み(RSR)タイプの命令の初期指示)、またはpredec_wr(すなわち、書き込み(WSR)タイプの命令の初期指示)が、設定されている、かつ
−パイプ内の命令が、フラッシュ/xcondされていない、かつ
−そのパイプによって((A)に従って)インターロックを設定することができる、かつ
−インターロックが、まだ設定されていない。
【0093】
(C)インターロックは、例えば、以下の場合に、更新される。
−有効な命令が、パイプ内に存在する、かつ
−ILOCKが、設定されている、かつ
−predec_rd、またはpredec_wrが、設定されている、かつ
−パイプ内の命令が、フラッシュ/xcondされていない、かつ
−インターロックが、すでに設定されている、かつ
−命令.GTAG(命令を含むディスパッチ・グループの識別子)=インターロック.GTAGである(すなわち、命令と関連付けられた識別子が、インターロックを設定した識別子に等しい)、かつ
−命令.th_id(スレッドid)=インターロック.th_idである。
【0094】
一実施形態では、インターロックのリセットは、ロックを握ったグループ内の書き込みタイプのマイクロオペレーション(μop)が存在しない場合は、グループ完了時に実行される。グループ内に書き込みタイプのμopが存在するが、それがロックを握らなかった場合、ロックは、その完了時にやはり解放される(ロックを握らなかった=ILOCKビットが0、これが、CSGRUのためのILOCKビットがWSR部分でも設定され、そのため、それがRSRの完了時に解放されない理由である)。書き込みタイプの命令もロックを握った場合、ロックは、チェックポイント上でだけ解放される。そのように、原子性が、見られる。例外は、WSRが第2のグループ内にあるCSGRUの場合であり、したがって、第1のグループのRSRが、ロックを設定し、第2のグループ内のWSRが、ロックを解放する。その場合、第1のグループは、(第1のグループのGTAGよりも1だけ大きいGTAGを有する)第2のグループの前に来るべきである
【0095】
グループ内のμopの拒否は、そのμopがロックを保持していない場合は、それをリセットしなくてもよい。拒否は、一例では、やはりロックを保持する他のμopがグループ内に存在しない場合は、ロックを解放するだけである。
【0096】
グループ内のμopの撤回は、そのμopがロックを保持していない場合は、それをリセットしなくてもよい。撤回は、一例では、やはりロックを保持する他のμopがグループ内に存在しない場合は、ロックを解放するだけである。
【0097】
xcondが、来ている場合、インターロックを解放することができるかどうかに関するチェックが、行われる。問題は、ロックを握った命令が、まだ未完了であった場合にだけ、xcondが、ロックを解放すべきことである。ロックを握った命令が、すでに完了している場合、xcondは、ロックに対して影響を有するべきではない(これは、ロックを握った書き込みタイプの命令に当てはまるが、それは、その命令がチェックポイント上でそれを解放するからである。読み込みタイプの命令の場合、解放は、完了時にすでに行われた)。1つの例外は、その読み込みタイプ部分は、すでに完了済であることができるが、書き込みタイプが完了する前にxcondが存在する場合、ロックが解放されるべきである(書き込みタイプが完了する場合、後から来るxcondは、インターロックに対して影響を有するべきではない)、CSGRUである。
【0098】
ロックを設定した命令がフラッシュされる必要がある場合のリセット:実際のリセットは、例えば、そのグループのいかなる命令によってもロックがもはや保持されない場合にのみ、行われる。例えば、フラッシュが、グループ内の第1のμopに当たり、このμopがロックを保持している場合、ロックが、外れる(もちろん、2つの他のμopも、それを保持することができるが、それらは、フラッシュされる)。フラッシュが、グループ内の第2のμop上で来ており、このμopがロックを保持する場合、例えば、第1のμopもそれを保持しない場合にのみ、ロックが、外れる(第3のものは、いずれにせよフラッシュされ、そのため、それをチェックする必要はない)。
【0099】
(D)インターロックは、例えば、以下の場合に、リセットされる。
−インターロックが、すでに設定されている、かつ
−(C)からの更新がない、かつ
(
ロックを握った命令が、完了しつつある、
−それをロックした読み込み命令が、完了しつつある、かつ
−これは、CSGRUの第1のグループの完了ではない、
または
(
ロックを握った命令が、チェックポイントに達しつつある、
−それをロックした書き込み命令が、チェックポイントに達しつつある、かつ
−インターロック.GTAG=命令.GTAG
または
−これが、CSGRUの第2のグループの完了である場合、それがチェックポイントに達するのを待つ、かつ
−インターロック.GTAG+1=命令.GTAG
)
または
ロックを握ったμopが拒否され、そのグループ内に他の保持者がいない、
または
ロックを握ったμopが撤回され、そのグループ内に他の保持者がいない、
または
ロックを握ったμopがフラッシュ/xcondされ、そのグループ内に他の保持者がいない、
または
リカバリ進行中
)
【0100】
(E)例えば、以下の場合に、拒否される。
1)インターロックがロックされている、かつ
命令.th_id !=(等しくない) インターロック.th_id、かつ
命令.GTAG != インターロック.GTAG
【0101】
CSGRUオペコードについては、これは、インターロックがRSR μopによってロックされた場合に、WSR μopの拒否を排除する(それらは、同じGTAGおよび同じスレッドIDを有する)。
【0102】
それは、発行は順序通りであるが、何らかの理由で、RSRが拒否され、したがって、WSRがロックをロックする、(RSR,x,WSR)のようなグループにも当てはまる。そのようなケースでは、拒否が、個々の命令idベースである場合、ロックがロックされているので、RSRは入ることができず、グループ全体は完了することができず=>WSRはロックを解除することができないので、デッドロックとなる。解決策は、GTAGを使用することであり、そのため、RSRは入ることができ、それが完了したとき、WSRも完了することができ、ロックを解除する。
【0103】
2)両方のパイプ上に同じスレッド、かつ
両方のパイプ内でILOCKがオンである、かつ
現在のパイプがより新しい命令を保持する、
=>(やはりインターロック・ビットがより古い命令によってまだオンにされていない場合は)現在のより新しい命令は拒否されるべきである。
【0104】
インターロックがオンにされた場合、より古いほうも、(これがCSGRU命令のWSRでない限り)(1)条件によって、拒否されるべきである。
【0105】
3)両方のパイプ上に異なるスレッド、かつ
両方のパイプ内でILOCKがオンである、かつ
現在のパイプ番号が(パイプ0の場合は0、パイプ1の場合は1である)LFSRの値と等しくない=>(やはりインターロック・ビットがより古い命令によってまだオンにされていない場合は)現在のパイプxの命令は拒否されるべきである。
【0106】
インターロックがオンにされた場合、両方が、(それらの一方がCSGRU命令のWSRでない限り)(1)条件によって、拒否されるべきである。
【0107】
本明細書では、1つのスレッドがマルチスレッド・プロセッサの1つまたは複数の他のスレッドの実行を停止させるための技法の一実施形態が、説明される。技法は、ハングアップを回避するように、また他のスレッドが停止させられる前に、それらと関連付けられたすべての命令が完了することを保証するように、実施される。この技法は、一態様では、このスレッドにおいてオペレーションを続行する前に、条件が満たされているかどうかを調べるために、プロセッサのすべてのハードウェア・スレッド(または別の実施形態では、選択されたスレッド)からのステータス情報を見る、パイプライン・ドレーン命令を含む。
【0108】
さらに、この技法の一実施形態は、共有レジスタに対して作用する、CSGRU、LORU、およびLNRUなどの、アトミック命令を使用する。例えば、マルチスレッド・コア設計(例えば、SMT)において、2つ以上のスレッドが、共有コアを共有する場合、それらは、頻繁に、情報を伝達し、共有する必要があり、これは、セマフォ、ロックなどを含むことができる。これは、ファームウェア、ミリコードを含むことができ、またはそれは、ソフトウェアを含むことができる。スレッドは、ストレージを通して通信する既存のISA命令を使用することができる。しかしながら、これらは、遅いことがあり、(一般にオペランド・ストア比較(OSC)として知られる)ストア−ヒット−ロードまたはロード−ヒット−ストア衝突を含む。加えて、通信がファームウェアによって行われる場合、ストレージを介して通信することは、望ましくない、または不可能なことがあり、ファームウェア・ルーチンは、オペランドのロードおよび記憶が禁止されたクリティカルなシーケンスの最中のことがある。したがって、これらの命令は、ストレージの代わりに、レジスタに対して作用する。
【0109】
アトミック命令は、スレッドの実行の制御に関連して説明されたが、それらは、他の目的で使用されてもよい。各命令は、本明細書で説明された使用から距離を置いており、他の状況において利用されてもよい。
【0110】
図20を参照すると、一例では、コンピュータ・プログラム製品1200は、例えば、1つまたは複数の実施形態を提供し、容易にするために、コンピュータ可読プログラム・コード手段、ロジック、または命令1204、あるいはそれらの任意の組合せを記憶する、1つまたは複数の非一時的コンピュータ可読記憶媒体1202を含む。
【0111】
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはそれらの任意の組合せとすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実施させるための、コンピュータ可読プログラム命令を有する、(1つまたは複数の)コンピュータ可読記憶媒体を含むことができる。
【0112】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持し、記憶することができる、有形なデバイスとすることができる。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁気記憶デバイス、半導体記憶デバイス、または上記のものの任意の適切な組合せとすることができるが、それらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、以下のものを、すなわち、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリー・メモリ(ROM)、消去可能プログラマブル・リード・オンリー・メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リード・オンリー・メモリ(CD−ROM)デジタル多用途ディスク(DVD)、メモリ・スティック、フロッピー(R)・ディスク、パンチ・カードまたは命令が記録された溝内の隆起構造などの機械的に符号化されたデバイス、および上記のものの任意の適切な組合せを含む。コンピュータ可読記憶媒体は、本明細書で使用される場合、電波もしくは他の自由に伝搬する電磁波、導波路もしくは他の伝送媒体を通って伝搬する電磁波(例えば、光ファイバ・ケーブルを通る光パルス)、または電線を通して伝送される電気信号など、いわば一時的信号であると解釈されるべきではない。
【0113】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいはネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくは無線ネットワーク、またはそれらの任意の組合せを介して、外部コンピュータまたは外部記憶デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの任意の組合せを備えることができる。各コンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体内に記憶するために、コンピュータ可読プログラム命令を転送する。
【0114】
本発明の操作を実施するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはSmalltalk(R)もしくはC++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語もしくは類似のプログラミング言語などの従来の手続型プログラミング言語を含む、1つもしくは複数のプログラミング言語の任意の組合せで書かれた、ソース・コードもしくはオブジェクト・コードとすることができる。コンピュータ可読プログラム命令は、すべてをユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして、一部をユーザのコンピュータ上で、一部をユーザのコンピュータ上および一部をリモート・コンピュータ上で、またはすべてをリモート・コンピュータもしくはサーバ上で実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを通して、ユーザのコンピュータに接続することができ、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを通して)外部コンピュータに対して行うことができる。いくつかの実施形態では、例えば、プログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル論理アレイ(PLA)を含む、電子回路は、本発明の態様を実行するように、電子回路をカスタマイズするために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行することができる。
【0115】
本発明の態様は、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品についてのフローチャート図またはブロック図、あるいはその両方を参照して本明細書で説明される。フローチャート図またはブロック図、あるいはその両方の各ブロック、およびフローチャート図またはブロック図、あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実施することができることが理解される。
【0116】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行する命令が、フローチャートまたはブロック図、あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作を実施するための手段を生成するように、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて、マシンを生成するものであってよい。これらのコンピュータ可読プログラム命令は、命令が記憶されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図、あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作の態様を実施する命令を含む製造品を含むように、コンピュータ可読記憶媒体内に記憶され、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはそれらの任意の組合せに、特定の方法で機能するように指示することができるものであってもよい。
【0117】
コンピュータ可読プログラム命令は、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行される命令が、フローチャートまたはブロック図、あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作を実施するように、コンピュータ実施プロセスを生成させるべく、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の操作ステップを実行させるものであってもよい。
【0118】
図におけるフローチャートおよびブロック図は、本発明の様々な実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実施についての、アーキテクチャ、機能性、および操作を説明する。この点で、フローチャートまたはブロック図における各ブロックは、指定された論理機能を実施するための1つまたは複数の実行可能命令を含む、命令のモジュール、セグメント、または部分を表すことができる。いくつかの代替的な実施では、ブロックにおいて述べられる機能は、図で述べられる順序とは異なる順序で生じてもよい。例えば、連続して示される2つのブロックは、含まれる機能性に応じて、実際には、実質的に同時に実行されてもよく、またはブロックは、時には逆順で実行されてもよい。ブロック図またはフローチャート図、あるいはその両方の各ブロック、およびブロック図またはフローチャート図、あるいはその両方におけるブロックの組合せは、指定された機能もしくは動作を実行し、または専用ハードウェアおよびコンピュータ命令の組合せを実施する、専用ハードウェアベースのシステムによって実施することができることも留意される。
【0119】
様々な実施形態が、上で説明されたが、これらは、例であるにすぎない。例えば、1つまたは複数の実施形態を組み込み、使用するために、他のアーキテクチャのコンピューティング環境を使用することができる。さらに、本発明の1つまたは複数の態様は、SMT以外のマルチスレッディングの形態にも適用可能である。またさらに、異なる命令、命令フォーマット、命令フィールド、または命令値、あるいはそれらの任意の組合せを使用することができる。多くの変形が、可能である。
【0120】
さらに、他のタイプのコンピューティング環境も、利益を得ること、および使用することができる。例として、システム・バスを通してメモリ要素に直接的または間接的に結合された少なくとも2つのプロセッサを含む、プログラム・コードの記憶または実行、あるいはその両方を行うのに適したデータ処理システムが、使用可能である。メモリ要素は、例えば、プログラム・コードの実際の実行中に利用されるローカル・メモリ、大容量ストレージ、および実行中に大容量ストレージからコードを取り出さなければならない回数を減らすために、少なくともあるプログラム・コードの一時記憶を提供するキャッシュ・メモリを含む。
【0121】
(キーボード、ディスプレイ、ポインティング・デバイス、DASD、テープ、CD、DVD、サム・ドライブ、および他のメモリ媒体などを含むが、それらに限定されない)入力/出力またはI/Oデバイスは、直接的に、または介在するI/Oコントローラを通して、システムに結合することができる。データ処理システムが、介在する私設または公衆ネットワークを通して、他のデータ処理システム、またはリモート・プリンタもしくはストレージ・デバイスに結合されることを可能にするために、ネットワーク・アダプタも、システムに結合することができる。モデム、ケーブル・モデム、およびイーサネット(R)・カードは、利用可能なタイプのネットワーク・アダプタのうちのほんのいくつかである。
【0122】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、限定的であることは意図されていない。本明細書で使用される場合、「a」、「an」、および「the」の付いた単数形は、文脈が明らかにそうではないことを示していない限り、複数形も同様に含むことが意図されている。本明細書で使用される場合、「comprises(含む)」または「comprising」という用語、あるいはその両方は、述べられた特徴、整数、ステップ、操作、要素、または構成要素、あるいはそれらの任意の組合せの存在を指定するが、1つまたは複数の他の特徴、整数、ステップ、操作、要素、構成要素、またはそれらのグループ、あるいはそれらの任意の組合せの存在または追加を除外しないことがさらに理解される。
【0123】
以下の特許請求の範囲における対応する構造、材料、動作、およびすべてのミーンズまたはステップ・プラス・ファンクション要素の均等物は、存在する場合は、明確に特許請求されるような他の特許請求される要素と組み合わせて機能を実行するための任意の構造、材料、または動作を含むことが意図される。1つまたは複数の実施形態の説明は、例証および説明の目的で提示されたが、開示された形態において網羅的または限定的であることは意図されていない。当業者には、多くの変更および変形が明らかである。実施形態は、様々な態様および実際の応用を最も良く説明するために、および企図される特定の使用に適するような様々な変更が施された様々な実施形態を他の当業者が理解することを可能にするために、選択され、説明された。