(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-12
(45)【発行日】2022-12-20
(54)【発明の名称】キャッシュ・メモリ動作の調整
(51)【国際特許分類】
G06F 12/0817 20160101AFI20221213BHJP
G06F 15/167 20060101ALI20221213BHJP
【FI】
G06F12/0817
G06F15/167 610G
(21)【出願番号】P 2020551810
(86)(22)【出願日】2019-03-27
(86)【国際出願番号】 IB2019052482
(87)【国際公開番号】W WO2019193455
(87)【国際公開日】2019-10-10
【審査請求日】2021-08-16
(32)【優先日】2018-04-03
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】シュタインマッハ-ブロウ、ブルクハルト
【審査官】北村 学
(56)【参考文献】
【文献】特開2016-024762(JP,A)
【文献】米国特許出願公開第2016/0179674(US,A1)
【文献】特開2005-234854(JP,A)
【文献】特開平06-243108(JP,A)
【文献】米国特許出願公開第2005/0154863(US,A1)
【文献】米国特許出願公開第2014/0040551(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
IPC G06F 12/08 - 12/128
G06F 15/167
(57)【特許請求の範囲】
【請求項1】
コヒーレント共有メモリ・システムのプロセッサ・デバイスによる複数の命令を含む命令シーケンスの実行を調整するための方法であって、前記プロセッサ・デバイスが、プロセッサ・キャッシュ・メモリに動作可能なように接続され、前記方法が、
前記プロセッサ・デバイスによって前記命令シーケンスの命令を実行することであって、前記命令の前記実行が、前記
コヒーレント共有メモリ・システムのメイン・メモリのメモリ・ラインのコピーを前記プロセッサ・キャッシュ・メモリに充填することを前記プロセッサ・デバイスに行わせる、前記実行すること、
前記メモリ・ラインの前記コピーの前記充填についての前記
コヒーレント共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないことを示す第1のフラグ情報を検知すると、前記プロセッサ・デバイスによって
、個々の
前記メモリ・ラインにフラグを付けること、
前記メモリ・ラインの前記コピーの前記充填についての前記
コヒーレント共有メモリ・システム全体の前記メモリ一貫性の前記伝搬が確認されたことを示す第2のフラグ情報を検知すると、前記プロセッサ・デバイスによって
、個々の
前記メモリ・ラインのフラグを外すこと、
前記命令シーケンスのメモリ・バリア命令を実行すると、前記メモリ・ラインがフラグを付けられている間、前記プロセッサ・デバイスによって、前記メモリ・バリア命令の実行の完了を妨げること
を含
み、
前記メモリ・ラインに前記フラグを付けることが、前記メモリ・ラインの識別子を前記プロセッサ・デバイスのバッファに追加することを含み、前記フラグを付けたメモリ・ラインの前記フラグを外すことが、前記プロセッサの前記バッファから前記メモリ・ラインの前記識別子を削除することを含む、
方法。
【請求項2】
前記メモリ・バリア命令の実行の前記完了が、前記プロセッサ・デバイスによって以前にフラグを付けられた全てのメモリ・ラインがフラグを外されるまで妨げられる、請求項1に記載の方法。
【請求項3】
前記バッファに記憶された前記フラグ
を付
けたメモリ・ラインの前記識別子が、前記メイン・メモリ内
の個々の
前記メモリ・ラインのメモリ・アドレスを含む、請求項
1に記載の方法。
【請求項4】
前記メモリ・バリア命令の実行の前記完了が、前記プロセッサ・デバイスの前記バッファが空になるまで妨げられる、請求項
1に記載の方法。
【請求項5】
前記
コヒーレント共有メモリ・システム
全体の前記メモリ一貫性が、コヒーレンス・ディレクトリを使用して実現される、請求項1に記載の方法。
【請求項6】
前記第1および前記第2のフラグ情報のうちの少なくとも1つが、前記コヒーレンス・ディレクトリから前記プロセッサ・デバイスによって受け取られたメッセージによって提供される、請求項
5に記載の方法。
【請求項7】
前記第1および前記第2のフラグ情報のうちの少なくとも1つが、前記コヒーレンス・ディレクトリに前記プロセッサ・デバイスによって送られたメッセージによって提供される、請求項
5に記載の方法。
【請求項8】
前記
コヒーレント共有メモリ・システム
全体の前記メモリ一貫性が、ブロードキャスティングを使用して実現される、請求項1に記載の方法。
【請求項9】
前記メモリ・ラインの前記コピーを前記プロセッサ・キャッシュ・メモリに充填することを前記プロセッサ・デバイスに行わせる前記命令が
、個々の
前記メモリ・ラインへのライト・アクセスを指定する命令である、請求項1に記載の方法。
【請求項10】
前記
コヒーレント共有メモリ・システム全体の前記メモリ一貫性の前記伝搬が、前記
コヒーレント共有メモリ・システムのさらなるプロセッサ・デバイスのリモート・プロセッサ・キャッシュ・メモリによって使用される前記メモリ・ラインのさらなるコピーを無効化することを含む、請求項1に記載の方法。
【請求項11】
前記プロセッサ・キャッシュ・メモリの内容の修正に関するものであり、前記プロセッサ・デバイスによって処理されたメッセージが、一貫性伝搬フィールドを含み、前記一貫性伝搬フィールドが、前記修正についての前記
コヒーレント共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないことを示すフラグ情報、前記修正についての前記
コヒーレント共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたことを示すフラグ情報、または、フラグを付けるアクションも、フラグを外すアクションも要求されていないことを示すフラグ情報のうちの1つを含む、請求項1に記載の方法。
【請求項12】
コヒーレント共有メモリ・システムのプロセッサ・デバイスであって、プロセッサ・キャッシュ・メモリに動作可能なように接続され、複数の命令を含む命令シーケンスの実行を調整するように構成され、前記調整することが、
前記命令シーケンスの命令を実行することであって、前記命令の前記実行が、前記
コヒーレント共有メモリ・システムのメイン・メモリのメモリ・ラインのコピーを前記プロセッサ・キャッシュ・メモリに充填することを前記プロセッサ・デバイスに行わせる、前記実行すること、
前記メモリ・ラインの前記コピーの前記充填についての前記
コヒーレント共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないことを示すフラグ情報を検知すると、前記プロセッサ・デバイスによって
、個々の
前記メモリ・ラインにフラグを付けること、
前記メモリ・ラインの前記コピーの前記充填についての前記
コヒーレント共有メモリ・システム全体の前記メモリ一貫性の前記伝搬が確認されたことを示すフラグ情報を検知すると、前記プロセッサ・デバイスによって
、個々の
前記メモリ・ラインのフラグを外すこと、
前記命令シーケンスのメモリ・バリア命令を実行すると、前記メモリ・ラインがフラグを付けられている間、前記メモリ・バリア命令の実行の完了を妨げること
を含
み、
前記プロセッサ・デバイスが、コピーが前記プロセッサ・キャッシュ・メモリに充填されたが、個々の前記コピーの前記充填についての前記コヒーレント共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないメモリ・ラインを登録するためのバッファを備え、前記メモリ・ラインの前記フラグを付けることが、前記メモリ・ラインの識別子を前記プロセッサ・デバイスの前記バッファに追加することを含み、前記フラグを付けたメモリ・ラインの前記フラグを外すことが、前記プロセッサの前記バッファから前記メモリ・ラインの前記識別子を削除することを含む、
プロセッサ・デバイス。
【請求項13】
前記メモリ・バリア命令の実行の前記完了が、前記プロセッサ・デバイスによって以前にフラグを付けられた全てのメモリ・ラインがフラグを外されるまで妨げられる、請求項1
2に記載のプロセッサ・デバイス。
【請求項14】
前記バッファに記憶された前記フラグ
を付
けたメモリ・ラインの前記識別子が、前記メイン・メモリ内
の個々の
前記メモリ・ラインのメモリ・アドレスを含む、請求項1
2に記載のプロセッサ・デバイス。
【請求項15】
前記メモリ・バリア命令の実行の前記完了が、前記プロセッサ・デバイスの前記バッファが空になるまで妨げられる、請求項1
2に記載のプロセッサ・デバイス。
【請求項16】
共有メモリ・システム
全体のメモリ一貫性を実現するコヒーレンス・ディレクトリ、メイン・メモリ、および、プロセッサ・キャッシュ・メモリに動作可能なように接続されたプロセッサ・デバイスを備えるコヒーレント共有メモリ・システムであって、
前記プロセッサ・デバイスが、複数の命令を含む命令シーケンスの実行を調整するように構成され、前記調整することが、
前記命令シーケンスの命令を実行することであって、前記命令の前記実行が、前記メイン・メモリのメモリ・ラインのコピーを前記プロセッサ・キャッシュ・メモリに充填することを前記プロセッサ・デバイスに行わせる、前記実行すること、
前記メモリ・ラインの前記コピーの前記充填についての前記共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないことを示すフラグ情報を検知すると、前記プロセッサ・デバイスによって
、個々の
前記メモリ・ラインにフラグを付けること、
前記メモリ・ラインの前記コピーの前記充填についての前記共有メモリ・システム全体の前記メモリ一貫性の前記伝搬が確認されたことを示すフラグ情報を検知すると、前記プロセッサ・デバイスによって
、個々の
前記メモリ・ラインのフラグを外すこと、
前記命令シーケンスのメモリ・バリア命令を実行すると、前記メモリ・ラインがフラグを付けられている間、前記メモリ・バリア命令の実行の完了を妨げること
を含み、
前記コヒーレンス・ディレクトリが、前記メモリ・ラインの前記コピーの前記充填の開始を判定すると、前記メイン・メモリの前記メモリ・ラインに割り当てられた前記フラグ情報を維持するように構成され、前記フラグ情報が、前記メモリ・ラインの前記コピーの前記充填についての前記共有メモリ・システム全体の前記メモリ一貫性の前記伝搬が確認されたかどうかを示し、前記維持することが、
最初に、前記メモリ・ラインの前記コピーの前記充填についての前記共有メモリ・システム全体の前記メモリ一貫性の前記伝搬が確認されていないことを示すフラグ情報を第1のメッセージに含めること、
前記第1のメッセージを前記プロセッサ・デバイスに送ること、
前記伝搬の確認を得ると、前記フラグ情報を更新し、前記メモリ・ラインの前記コピーの前記充填についての前記共有メモリ・システム全体の前記メモリ一貫性の前記伝搬が確認されたことを示す前記更新したフラグ情報を第2のメッセージに含めること、
前記第2のメッセージを前記プロセッサ・デバイスに送ること
を含む、
コヒーレント共有メモリ・システム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、コンピュータ・システムの分野に関する。より詳細には、コヒーレント共有メモリ・システムのプロセッサ・デバイスによる複数の命令を含む命令シーケンスの実行を調整するための方法、コヒーレント共有メモリ・システムのプロセッサ・デバイス、共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリを管理するための方法、共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリ、および、共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリを備えるコヒーレント共有メモリ・システムに関する。
【背景技術】
【0002】
共有メモリ・システムは、メモリ・アクセスを全て提供された複数のプロセッサを備え、したがって、データ処理の効率を改善する。共有メモリは、同じデータへの同時アクセスを複数のプロセッサに行わせ、データの冗長コピーを記憶しないようにし、プロセッサ間のデータ転送を可能にすることができる。共有メモリ・システムは、例えば、複数のプロセッサによるアクセスが可能なメイン・メモリを備える。プロセッサが、メイン・メモリのメモリ・ラインに高速アクセスできるようにするために、このような共有メモリ・システムのメモリ・アーキテクチャは、プロセッサによって処理されることになるデータをキャッシュするための複数のプロセッサ・キャッシュ・メモリをさらに備えることができる。例えば、各プロセッサは、1つまたは複数のプロセッサ・キャッシュ・メモリに動作可能なように接続されてもよい。
【0003】
しかし、複数のプロセッサ・キャッシュ・メモリを有する共有メモリ・システムには、データ一貫性の欠如が原因で生じ得る複雑化のリスクがある。プロセッサ・キャッシュ・メモリのうちの1つに含まれるデータが更新されるたびに、異なるプロセッサが一貫性のないデータを使用しないようにするために、同じデータを処理するとき、残りのプロセッサ・キャッシュ・メモリ全てが、更新されたデータを使用することになるということが保証されなければならない。言い換えれば、共有メモリ・システムの全体にわたる一貫性を確立するために、共有メモリ・システム全体の一貫性の伝搬が保証されなければならない。
【0004】
それまでに修正された期限切れのデータを、プロセッサが使用しないようにするために、メモリ動作の順序制約が必要になる。強く順序付けられたメモリ・モデルは、共有変数の値の変更が、実行されるマルチスレッド・プログラムの他のスレッドに常に可視でなければならないことを要求する。言い換えれば、メモリ動作の順序付けは、競争状態を避けるために、例外を可能にすることなく、予め定義されなければならない。しかし、強く順序付けられたモデルは柔軟性がなく、処理効率の限界を生じる可能性がある。対照的に、処理効率は、強い順序の緩和を可能にすることによって改善される可能性がある。問題を生じるまたは競争状態になることなく、並列に、または任意の順序であっても、実行され得る命令があってもよい。順序の緩和を可能にするメモリ・モデルは、弱く順序付けられたメモリ・モデルと呼ばれる。順序付けのいくつかのレベルをなおも維持するために、弱く順序付けられたメモリ・モデルは、特殊で明確に定義されたメモリ・バリア命令を介して確立されるメモリ・バリアを指定する。メモリ・バリア命令は、一貫性が保証され、必要であれば同期が実行されなければならない命令シーケンスにおけるポイントを定義する。このような弱いメモリ・モデルは、このようなメモリ・バリアが届けられたとき、共有変数の値への変更が、他のスレッドに可視になることが必要なだけであることを要求する。
【0005】
弱く順序付けられたメモリ・モデルは、命令シーケンスを最適化するときの自由度を高くすることができる。最適化された命令シーケンスと、最適化されない命令シーケンスの両方において、メモリ・バリアにおける潜在的な共有変数の値が同じであることが確実に保証されなければならないだけである。具体的には、メモリ・バリアを含まない命令のブロック内のステートメントを並べ替えることは、安全であると仮定されてもよい。
【0006】
共有メモリ・システムのメモリ一貫性を保証し、性能を改善するために、メモリ・バリアの実行および管理を絶えず改善する必要がある。
【発明の概要】
【0007】
様々な実施形態は、コヒーレント共有メモリ・システムのプロセッサ・デバイスによる複数の命令を含む命令シーケンスの実行を調整するための方法、コヒーレント共有メモリ・システムのプロセッサ・デバイス、共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリを管理するための方法、共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリ、および、共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリを備えるコヒーレント共有メモリ・システムを提供する。有利な実施形態が、従属請求項に記述される。本発明の実施形態は、互いに排他的でない場合、互いに自由に組み合わされてもよい。
【0008】
1つの態様において、本発明は、コヒーレント共有メモリ・システムのプロセッサ・デバイスによる複数の命令を含む命令シーケンスの実行を調整するための方法に関する。プロセッサ・デバイスは、プロセッサ・キャッシュ・メモリに動作可能なように接続される。命令シーケンスの命令は、プロセッサ・デバイスによって実行される。命令の実行が、共有メモリ・システムのメイン・メモリのメモリ・ラインのコピーをプロセッサ・キャッシュ・メモリに充填することをプロセッサ・デバイスに行わせる。メモリ・ラインは、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないことを示す第1のフラグ情報を検知すると、プロセッサ・デバイスによってフラグを付けられる。フラグ付きメモリ・ラインは、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたことを示す第2のフラグ情報を検知すると、プロセッサ・デバイスによってフラグを外される。命令シーケンスのメモリ・バリア命令をプロセッサ・デバイスによって実行すると、プロセッサ・デバイスは、メモリ・ラインにフラグが付いている間、実行の完了を妨げる。
【0009】
実施形態には、一貫性の伝搬がまだ確認されていない場合、メモリ・バリア命令が届けられる、すなわち実行されるとすぐ、命令シーケンスの実行が停止されることを、プロセッサ・デバイスが効率的に保証できるようになるという有益な効果があり得る。メモリ・ラインのフラグ付けは、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないことを示す。言い換えれば、フラグ付けは、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性が確立されても、確立されなくても、情報が利用可能ではないことを示す。メモリ・ラインがフラグを外された場合、一貫性に関する問題はなく、むしろ、一貫性の伝搬が、明確かつはっきりと確認され、停止は必要ない。メモリ・ラインがフラグを付けられた場合、明確な確認を待たなければならず、停止が必要である。このような確認は、例えば、共有メモリ・システムのディレクトリ・ベースの一貫性を実行するディレクトリによって、または、メモリ・ラインの充填を実行するプロセッサ・デバイスによってブロードキャストされた一貫性の確立に関するリクエストに、共有メモリ・システムの残りのプロセッサ・デバイスがリプライ(応答)することによって行われてもよい。一貫性の伝搬が確認されていないメモリ・ラインだけがフラグを付けられる、すなわち、指標がフラグとして登録されるので、プロセッサ・デバイスのローカル・メモリ空間が節約される可能性がある。
【0010】
実行は、メモリ・ラインがフラグを外されている、すなわち、共有メモリ・システム全体にメモリ一貫性が伝搬されたことが確認されたという条件の下で継続されるだけでもよい。共有メモリ・システム全体のメモリ一貫性の伝搬は、プロセッサ・キャッシュ・メモリへのメモリ・ラインのコピーの充填に関して、共有メモリ・システムの一貫性が確立されたことを意味する。命令シーケンスの実行の調整は、例えばプロセッサ・チップまたはプロセッサ・コアといった個々のプロセッサ・デバイスによって実行される。したがって、方法は、ディレクトリ・ベースの一貫性、およびブロードキャスト・ベースの一貫性のために使用可能であってもよい。
【0011】
実施形態によれば、メモリ・バリア命令の実行の完了は、プロセッサ・デバイスによって以前にフラグを付けられた全てのメモリ・ラインがフラグを外されるまで妨げられる。実施形態には、個々のメモリ・ラインのフラグを外すことが、メモリ・バリア命令の実行の継続の必要条件であるという有益な効果があり得る。プロセッサ・デバイスによって以前にフラグを付けられた全てのメモリ・ラインがフラグを外されること、すなわち、プロセッサ・デバイスが、フラグ付きメモリ・ラインも、メモリ・ラインのフラグも含まないことが十分条件として実施されてもよい。したがって、プロセッサ・キャッシュ・メモリへのメモリ・ラインのコピーの充填を引き起こす命令は、メモリ・バリア命令が届けられるまでメモリ一貫性を考慮することなく、自由に実行されてもよい。メモリ・バリア命令が届けられるとすぐ、メモリ一貫性が確立され、メモリ・バリア命令が継続されると能動的に確認されなければならない。メモリ一貫性は、メモリ・バリア命令が実行される前に、共有メモリ・システム全体に伝搬されてもよい。しかし、メモリ・バリア命令は、プロセッサ・キャッシュ・メモリへのメモリ・ラインのコピーの充填全てについての共有メモリ・システム全体の一貫性の伝搬が完了していなければならないことが要求される命令シーケンス内のポイントを成す。個々の完了は、伝搬が成功したという明確な確認を要求することによって保証されてもよい。メモリ・バリアの実行の前に、一貫性の伝搬について知っていることがプロセッサによって確立されてもよいが、確立される必要はない。
【0012】
実施形態によれば、メモリ・ラインのフラグ付けは、メモリ・ラインの識別子をプロセッサ・デバイスのバッファに追加することを含む。フラグ付きメモリ・ラインのフラグ外しは、プロセッサのバッファからメモリ・ラインの識別子を削除することを含む。実施形態には、共有メモリ・システム全体の一貫性の伝搬についての必要な確認がまだできていないメモリ・ラインがあってもなくても、バッファが直接の全体像を提供できるという有益な効果があり得る。バッファは、例えば、指標の順序付けられていないセットの形のフラグを提供することができる。メモリ・ラインを示す指標がバッファに含まれる場合、個々のメモリ・ラインに対する一貫性の伝搬は、まだ確認されていない。特定のメモリ・ラインについて、指標がバッファに含まれない場合、個々のメモリ・ラインに対する一貫性の伝搬は確認されている。フラグを付けられることになるメモリ・ラインを示す指標をバッファに追加することによってフラグがセットされてもよい。したがって、バッファは、伝搬されていないメモリ・ラインのバッファである。
【0013】
実施形態によれば、メモリ・バリア命令の実行の完了は、プロセッサ・デバイスのバッファが空になるまで妨げられる。一貫性のチェックを必要とするメモリ・バッファ命令が実行される場合、実施形態には、一貫性のチェックを高速かつ効果的に実行するという有益な効果があり得る。バッファが指標を含まない場合、プロセッサ・デバイスによってプロセッサ・キャッシュ・メモリに以前に充填されたメモリ・ライン毎に、一貫性が確立され、確認されている。バッファがまだ指標を含んでいる場合、プロセッサ・デバイスは、これらの残りの指標に対する一貫性が確認され、バッファが空になるまで待つことになる。したがって、メモリ・バリア命令の後で実行された命令シーケンスの命令について、共有メモリ・システムは、コピーが以前にプロセッサ・キャッシュ・メモリに充填されたことがある全てのメモリ・ラインに対して一貫性があることが保証される可能性がある。
【0014】
実施形態によれば、プロセッサ・キャッシュ・メモリの内容の修正に関するものであり、プロセッサ・デバイスによって処理されたメッセージは、一貫性伝搬フィールドを含む。一貫性伝搬フィールドは、修正についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないことを示すフラグ情報、修正についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたことを示すフラグ情報、または、フラグを付けるアクションも、フラグを外すアクションも要求されていないことを示すフラグ情報のうちの1つを含む。
【0015】
実施形態には、プロセッサ・デバイスと残りの共有メモリ・システムとの間の効率的な通信を可能にし、このことにより、プロセッサ・キャッシュ・メモリへのメモリ・ラインのコピーの充填、および、プロセッサ・キャッシュ・メモリへのメモリ・ラインのコピーの充填についての共有メモリ・システム全体の一貫性の伝搬に関するフィードバックを提供するという有益な効果があり得る。例えば、プロセッサ・デバイスは、メイン・メモリのメモリ・ラインへの排他ライト・アクセスをリクエストすることができる。プロセッサ・キャッシュ・メモリ内のリクエストがない場合、リクエストは、コヒーレンス・ディレクトリに送られても、共有メモリ・システムにわたってブロードキャストされてもよい。リクエストは、フラグを付けるアクションまたはフラグを外すアクションが必要ではないことを示すフラグ情報を含んでもよい。今まで、プロセッサ・キャッシュ・メモリへのメモリ・ラインの充填を実際に開始することなくリクエストだけが送られてきた。プロセッサ・デバイスによって受け取られるリクエストへのリプライは、受け取ったプロセッサがプロセッサ・キャッシュ・メモリに充填するリクエストしたデータのコピー、例えばライト排他コピーを含むことができる。リプライは、修正についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないことを示すフラグ情報を含むことができる。例えば、さらなるプロセッサ・デバイスのプロセッサ・キャッシュ・メモリに含まれるリクエストしたメモリ・ラインの共有リード・コピーを無効化することによって、共有メモリ・システム全体のメモリ一貫性が確立された後、同じことを実行するさらなるプロセッサ・デバイスによって無効化が確認されてもよい。確認は、コマンドの形のメッセージに含まれるプロセッサ・キャッシュ・メモリにメモリ・ラインのコピーを充填したプロセッサ・デバイスに送ることができ、修正についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたことを示すフラグ情報を提供することによって、個々のメモリ・ラインのフラグを外すことを命令する。
【0016】
さらなる態様において、本発明は、コヒーレント共有メモリ・システムのプロセッサ・デバイスに関する。プロセッサ・デバイスは、プロセッサ・キャッシュ・メモリに動作可能なように接続され、複数の命令を含む命令シーケンスの実行を調整するように構成される。調整は、命令シーケンスの命令の実行を含む。命令の実行が、共有メモリ・システムのメイン・メモリのメモリ・ラインのコピーをプロセッサ・キャッシュ・メモリに充填することをプロセッサ・デバイスに行わせる。調整は、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないことを示すフラグ情報を検知すると、個々のメモリ・ラインにフラグを付けることをさらに含む。メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたことを示すフラグ情報を検知すると、プロセッサ・デバイスは、メモリ・ラインのフラグを外す。命令シーケンスのメモリ・バリア命令を実行すると、プロセッサ・デバイスは、メモリ・ラインがフラグを付けられている間、メモリ・バリア命令の実行の完了を妨げる。
【0017】
実施形態には、複数の命令を含む命令シーケンスの実行を調整するための前述の方法を効率的に実行するように構成されたコヒーレント共有メモリ・システムのプロセッサ・デバイスを提供するという有益な効果があり得る。
【0018】
実施形態によれば、メモリ・バリア命令の実行の完了は、プロセッサ・デバイスによって以前にフラグを付けられた全てのメモリ・ラインがフラグを外されるまで妨げられる。実施形態には、プロセッサ・デバイスによって以前に実行されたメモリ・ラインのコピーの充填全てについての共有メモリ・システムの一貫性が確認されるまで、メモリ・バリア命令が完了しないようにされることを、プロセッサ・デバイスが保証するという有益な効果があり得る。
【0019】
実施形態によれば、プロセッサ・デバイスは、コピーがプロセッサ・キャッシュ・メモリに充填されたが、個々のコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないメモリ・ラインを登録するためのバッファを備える。メモリ・ラインのフラグ付けは、メモリ・ラインの識別子をプロセッサ・デバイスのバッファに追加することを含む。フラグ付きメモリ・ラインのフラグ外しは、プロセッサのバッファからメモリ・ラインの識別子を削除することを含む。
【0020】
実施形態には、個々のコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないメモリ・ラインを登録するためのインフラストラクチャの使用という有益な効果があり得る。
【0021】
実施形態によれば、メモリ・バリア命令の実行の完了は、プロセッサ・デバイスのバッファが空になるまで妨げられる。実施形態には、コピーがメモリ・バリア命令の完了前にプロセッサ・キャッシュ・メモリに充填されたが、確認がまだ必要な、いずれかのメモリ・ラインがあるかどうかという効果的な全体像がバッファによって提供され得るという有益な効果があり得る。バッファが空の場合、全ての必要な確認が行われている。バッファが空でない場合、プロセッサ・デバイスが待たなければならない未解決の確認がまだある。
【0022】
さらなる態様において、本発明は、共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリを管理するための方法に関する。コヒーレンス・ディレクトリは、共有メモリ・システムのメイン・メモリのメモリ・ラインに割り当てられたフラグ情報を維持する。共有メモリ・システムのプロセッサ・デバイスは、プロセッサ・デバイスに動作可能なように接続されたプロセッサ・キャッシュ・メモリへのメモリ・ラインのコピーの充填を開始する。フラグ情報は、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたかどうかを示す。コヒーレンス・ディレクトリは、フラグ情報をメッセージに含め、メッセージをプロセッサ・デバイスに送る。
【0023】
実施形態には、共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリを管理するための効率的な方法を提供するという有益な効果があり得る。コヒーレンス・ディレクトリは、共有メモリ・システムの一貫性をチェックし、必要であれば、プロセッサ・キャッシュ・メモリへのメモリ・ラインのコピーの充填についての共有メモリ・システム全体の一貫性を確立するためのアクションを開始することができる。例えば、メモリ・ラインの排他ライト・コピー、または排他ライト・コピーの修正コピー、あるいはその両方がプロセッサ・キャッシュ・メモリに充填される場合、コヒーレンス・ディレクトリは、具体的には、共有メモリ・システムのさらなるプロセッサ・デバイスのプロセッサ・キャッシュ・メモリ内の、共有メモリ・システム全体のメモリ・ラインの他のコピーの無効化を開始することができる。例えば、期限切れのコピー、すなわち古くなったコピーは、共有メモリ・システムの別のプロセッサ・デバイスによってメモリ・ラインの一貫性のないコピーが将来使用されないようにするために無効化されてもよい。
【0024】
実施形態によれば、コヒーレンス・ディレクトリは、メモリ・ラインのコピーの充填についてのメモリ一貫性を共有メモリ・システムのさらなるプロセッサ・デバイスのリモート・プロセッサ・キャッシュ・メモリに伝搬させるために、リモート・プロセッサ・キャッシュ・メモリの内容の修正が必要であると判定すると、メモリ・ラインに割り当てられたフラグ情報の維持を開始する。
【0025】
実施形態には、処理容量が節約され、メモリ一貫性を保証するために、さらなるプロセッサ・デバイスのリモート・プロセッサ・キャッシュ・メモリの内容が修正されなければならないことを、コヒーレンス・ディレクトリが判定した場合のみ、フラグ情報が生成され、維持され得るという有益な効果があり得る。例えば、共有リード・リクエストの場合、さらなるプロセッサ・デバイスのリモート・プロセッサ・キャッシュ・メモリ内のリクエストしたメモリ・ラインの以前にロードされた共有リード・コピーは、追加の共有リード・リクエストによってメモリ一貫性が変更されないので、修正される必要はない。しかし、排他ライト・リクエストの場合、残りの共有リード・コピーの修正、すなわち無効化が、メモリ一貫性を確立するために必要になる可能性がある。
【0026】
実施形態によれば、コヒーレンス・ディレクトリは、リクエストをリモート・プロセッサ・キャッシュ・メモリに送る。リクエストは、メモリ・ラインのコピーの充填についてのメモリ一貫性をリモート・プロセッサ・キャッシュ・メモリに伝搬させるために、リモート・プロセッサ・キャッシュ・メモリの内容の修正をリクエストする。
【0027】
実施形態には、コヒーレンス・ディレクトリによってメモリ一貫性の効率的な制御を実行するという有益な効果があり得る。リクエストを送り、対応するリプライを受け取ることによって、コヒーレンス・ディレクトリが修正全ての開始または完了あるいはその両方を行うとすぐ、コヒーレンス・ディレクトリは、プロセッサ・デバイスへの一貫性の伝搬の完了を確認することができる。
【0028】
実施形態によれば、コヒーレンス・ディレクトリは、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬による、共有メモリ・システムのさらなるプロセッサ・デバイスのプロセッサ・キャッシュ・メモリの内容の修正を追跡するためのレジスタを備える。
【0029】
実施形態には、一貫性の伝搬が完了したとき、修正を追跡し、判定するためのレジスタを効率的に実行するという有益な効果があり得る。
【0030】
実施形態によれば、レジスタは、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたとき、コヒーレンス・ディレクトリによって通知されることになる共有メモリ・システムのプロセッサ・デバイスのプロセッサ・キャッシュ・メモリを識別する一貫性伝搬通知指標を含む。
【0031】
実施形態には、メモリ・バリア命令が実行された場合、共有メモリ・システムのどのプロセッサ・キャッシュ・メモリが一貫性について知らされなければならないかについて、すなわち、一貫性の伝搬の確認を将来明確にチェックする必要があり得るメモリ・ラインのコピーを、プロセッサ・キャッシュ・メモリのどれが充填されたかについて、コヒーレンス・ディレクトリが効率的に追跡できるようになることを保証するという有益な効果があり得る。
【0032】
さらなる態様において、本発明は、共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリに関する。コヒーレンス・ディレクトリは、共有メモリ・システムのメイン・メモリのメモリ・ラインに割り当てられたフラグ情報を維持するように構成される。共有メモリ・システムのプロセッサ・デバイスは、プロセッサ・デバイスに動作可能なように接続されたプロセッサ・キャッシュ・メモリへのメモリ・ラインのコピーの充填を開始する。フラグ情報は、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたかどうかを示す。コヒーレンス・ディレクトリは、フラグ情報をメッセージに含め、メッセージをプロセッサ・デバイスに送るようにさらに構成される。
【0033】
実施形態には、共有メモリ・システムのメイン・メモリのメモリ・ラインに割り当てられたフラグ情報を効率的に維持するように構成された共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリを提供するという有益な効果があり得る。
【0034】
さらなる態様において、本発明は、共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリ、メイン・メモリ、および、プロセッサ・キャッシュ・メモリに動作可能なように接続されたプロセッサ・デバイスを備えるコヒーレント共有メモリ・システムに関する。
【0035】
プロセッサ・デバイスは、複数の命令を含む命令シーケンスの実行を調整するように構成される。調整は、命令シーケンスの命令の実行を含む。命令を実行すると、プロセッサ・デバイスは、メイン・メモリのメモリ・ラインのコピーをプロセッサ・キャッシュ・メモリに充填する。メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないことを示すフラグ情報を検知すると、プロセッサ・デバイスは、個々のメモリ・ラインにフラグを付ける。メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたことを示すフラグ情報を検知すると、プロセッサ・デバイスは、個々のメモリ・ラインのフラグを外す。命令シーケンスのメモリ・バリア命令を実行すると、プロセッサ・デバイスは、メモリ・ラインがフラグを付けられている間、実行の完了を妨げる。
【0036】
コヒーレンス・ディレクトリは、メモリ・ラインのコピーの充填の開始を判定すると、メイン・メモリのメモリ・ラインに割り当てられたフラグ情報を維持するように構成される。フラグ情報は、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたかどうかを示す。最初に、コヒーレンス・ディレクトリは、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないことを示すフラグ情報を第1のメッセージに含め、第1のメッセージをプロセッサ・デバイスに送る。コヒーレンス・ディレクトリは、伝搬の確認を得ると、フラグ情報を更新し、更新したフラグ情報を第2のメッセージに含める。更新したフラグ情報は、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたことを第2のメッセージの中で示す。更新したフラグ情報を伴う第2のメッセージは、コヒーレンス・ディレクトリによってプロセッサ・デバイスに送られる。
【0037】
実施形態には、共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリ、メイン・メモリ、および、プロセッサ・キャッシュ・メモリに動作可能なように接続されたプロセッサ・デバイスを備えるコヒーレント共有メモリ・システムを提供するという有益な効果があり得る。共有メモリ・システムは、個々のプロセッサ・デバイスによる命令シーケンスの実行の調整を効率的に実行し、コヒーレンス・ディレクトリによる共有メモリ全体の一貫性の伝搬に対する制御を維持する。
【図面の簡単な説明】
【0038】
【
図1】コヒーレント共有メモリ・システムを実行するのに適した例示的なコンピュータ・システムの概略図である。
【
図2】例示的なコヒーレント共有メモリ・システムの概略図である。
【
図3】例示的なコヒーレント共有メモリ・システムの概略図である。
【
図4】例示的なコヒーレント共有メモリ・システムの概略図である。
【
図5】例示的なコヒーレント共有メモリ・システムの概略図である。
【
図6】命令シーケンスの実行の例示的な方法の概略図である。
【
図7】共有メモリ・システムの一貫性を実行する例示的な一貫性のあるディレクトリの概略図である。
【
図8】共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリを管理する例示的な方法の概略図である。
【
図9】共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリを管理する例示的な方法の概略図である。
【
図10A】命令シーケンスを実行し、共有メモリ・システムのメモリ一貫性を実現する例示的な方法の流れ図である。
【
図10B】命令シーケンスを実行し、共有メモリ・システムのメモリ一貫性を実現する例示的な方法の流れ図である。
【
図11】共有メモリ・システムを実行する例示的なマルチプロセッサ・アーキテクチャを示す概略図である。
【発明を実施するための形態】
【0039】
本発明の様々な実施形態の記述は例証のために提示されているが、網羅的であること、または開示された実施形態に限定されることを意図するものではない。記述された実施形態の範囲および思想から逸脱することなく、多くの変更形態および変形形態が当業者には明らかになるであろう。本明細書で使用される専門用語は、実施形態の原理、市場で見られる技術に対する実用的用途もしくは技術的改善を最も良く説明するように、または、本明細書で開示された実施形態を当業者が理解できるように選ばれた。
【0040】
プロセッサ・キャッシュ・メモリは、データの将来のリクエストに、より速く対応できるようにするために、データを一時的に記憶する。プロセッサ・キャッシュに記憶されたデータは、例えばメイン・メモリといった、ほかの場所に記憶されたデータのコピー、すなわち複製であってもよい。リクエストされたデータをキャッシュ内で見つけることができたとき、キャッシュ・ヒットが発生し、一方で、リクエストされたデータをキャッシュ内で見つけることができなかったとき、キャッシュ・ミスが発生する。キャッシュ・ヒットは、例えばメイン・メモリのような、より遅いデータ・ストアからのデータの読込みよりも速い、プロセッサ・キャッシュ・メモリからのデータの読込みによって行われる。したがって、プロセッサ・キャッシュ・メモリを使用すると、コンピュータ・システムのシステム性能を高速化することができる。
【0041】
プロセッサ・キャッシュ・メモリによってデータを提供するために、データは、例えばメイン・メモリのような補助記憶装置と、各ブロックが固定サイズである複数のブロック内のプロセッサ・キャッシュ・メモリとの間で転送される。このようなデータ・ブロックは、メモリ・ラインまたはキャッシュ・ラインと呼ばれる。メモリ・ラインがメイン・メモリからプロセッサ・キャッシュ・メモリにコピーされると、キャッシュ・エントリが作り出される。キャッシュ・エントリは、コピーされたデータ、すなわちメモリ・ライン、および、補助記憶装置内のリクエストされた位置、すなわち、メイン・メモリ内の個々のメモリ・ラインのアドレスを示すアドレス・タグを含むことができる。
【0042】
例えばプロセッサのようなキャッシュ・クライアントが、補助記憶装置内の位置で読み書きする必要があるとき、すなわち、メモリ・ラインを読み込むか、書き込むとき、キャッシュ・クライアントは、キャッシュ・メモリ内の対応するエントリについて、まずチェックすることができる。プロセッサ・キャッシュ・メモリは、個々のメモリ・ラインのアドレスについて、全てのキャッシュ・エントリをチェックする。キャッシュ・ヒット、すなわち、捜していたアドレス・タグを含むキャッシュ・エントリが見つかった場合、プロセッサは、所望のアドレス・タグを有するプロセッサ・キャッシュ・エントリからデータをすぐに読み込むか、プロセッサ・キャッシュ・エントリに書き込むことができ、したがって、記憶されたメモリ・ラインを変更する。キャッシュ・ミスの場合、プロセッサ・キャッシュ・メモリは、新しいキャッシュ・エントリをアロケートし、例えばプロセッサといった別のキャッシュ・クライアントの別のキャッシュ・メモリから、または、補助メモリから、捜していたアドレス・タグを割り当てられたメモリ・ラインを新しいキャッシュ・エントリにコピーすることができる。次に、リクエストは、キャッシュ・メモリの新しいメモリ・ラインを有する新しいキャッシュ・エントリの内容から実現されてもよい。
【0043】
キャッシュすると、データの、具体的には、繰り返し転送されているデータの、転送のための性能向上を実現することができる。例えば、プロセッサ・キャッシュ・メモリは、キャッシュ・メモリ内で発生するバッファリングによる、メモリ・ラインの最初の転送時の性能向上を実現することができる。さらに、プロセッサ・キャッシュ・メモリは、繰り返されるリクエストの場合、メイン・メモリではなく、より速い中間のプロセッサ・キャッシュ・メモリから個々のメモリ・ラインを取り出せるように、メイン・メモリからメモリ・ラインを取り出して、より速い中間のプロセッサ・キャッシュ・メモリに、このメモリ・ラインを記憶することによる性能向上を実現することができる。さらに、プロセッサ・キャッシュ・メモリは、中間のプロセッサ・キャッシュ・メモリにメモリ・ラインを直接記憶し、メイン・メモリへの個々のメモリ・ラインの転送を後のステージに延期することによって、修正されたメモリ・ラインを書き込む性能向上を実現することができる。代替として、メイン・メモリへの個々のメモリ・ラインの転送は、バックグラウンド処理として行われてもよい。
【0044】
プロセッサ・キャッシュ・メモリは、複数のエントリを含むことができる。各エントリは、キャッシュ・ラインとも呼ばれるキャッシュ・データ、すなわちメモリ・ラインのコピーを含むことができ、キャッシュ・データは、例えばメイン・メモリのような、いくつかの補助記憶装置内のメモリ・ライン、すなわちメモリ・ブロックのデータのコピーである。各エントリは、アドレス・タグをさらに含むことができ、アドレス・タグは、エントリ、すなわちメモリ・ラインに含まれるデータを識別する。より正確には、アドレス・タグは、キャッシュ・エントリ内の個々のデータがそのデータのコピーである補助記憶装置に記憶されたデータを識別することができる。個々のキャッシュ・エントリへのライト・アクセスの場合、メモリ・ラインは修正され、したがって、補助記憶装置に記憶された、いくつかのデータの修正コピーを表すことができる。プロセッサ・キャッシュ・メモリ内のメモリ・ラインの修正後、個々のメモリ・ラインがそのコピーである補助記憶装置内のデータは、プロセッサ・キャッシュ・メモリに記憶されたメモリ・ラインと、補助記憶装置に記憶された対応するデータとの間の一貫性を保証するために、メモリ一貫性プロトコルを使用して更新されてもよい。さらに、各エントリは、個々のエントリ、すなわちメモリ・ラインに記憶されたデータの状態を識別する状態情報を含むことができる。
【0045】
個々のキャッシュ・クライアントによってメモリ・ラインのコピーが修正される場合、同じアドレスを有する他のメモリ・ラインのコピー全てが旧式になる可能性がある。したがって、これらの旧式のメモリ・ラインの取扱いを管理することが必要になる可能性がある。メモリ一貫性を保証するために、メモリ・ラインの期限切れのコピーが、有効コピーとしてこれ以上使用されないことが保証されなければならない可能性がある。期限切れのコピーは、無効化されても、更新されてもよい。
【0046】
例えばプロセッサ・コアまたはプロセッサ・チップのようなキャッシュ・クライアントが、補助記憶装置に記憶されると思われるデータにアクセスする必要があるとき、1つまたは複数のプロセッサ・キャッシュ・メモリを最初にチェックすることができる。リクエストしたメモリ・ラインのアドレス・タグにマッチするアドレス・タグを有する、これらのプロセッサ・キャッシュ・メモリのうちの1つの中でエントリを見つけることができる場合、補助記憶装置に記憶された対応するデータの代わりに、個々のプロセッサ・キャッシュ・メモリのエントリによって提供されたメモリ・ラインが使用されてもよい。この状況は、キャッシュ・ヒットと呼ばれる。キャッシュ・ミスの場合、すなわち、所望のメモリ・ラインの個々のアドレス・タグを有するエントリを、1つまたは複数のプロセッサ・キャッシュ・メモリの中で見つけることができないとき、所望のキャッシュされていないデータが、補助記憶装置から取り出される。ミス・ハンドリング中に補助記憶装置から取り出されたキャッシュされていないデータは、例えば、プロセッサ・キャッシュ・メモリにコピーされ、したがって、さらにアクセスしようとする場合にキャッシュ・ヒットできるようにすることができる。
【0047】
1つまたは複数のプロセッサ・キャッシュ・メモリとメイン・メモリとの間、および、異なるキャッシュ・メモリ間の整合性を維持するために、キャッシュ処理は、キャッシュ一貫性プロトコルに従わなければならない可能性がある。
【0048】
コンピュータ・アーキテクチャでは、メモリ一貫性は、共有メモリ・システムの複数のプロセッサ・キャッシュ・メモリに記憶された共有リソース・データの統一性を表す。メモリ一貫性を維持することは、共有メモリ・システムに特に重要なものであり得る。
【0049】
例えば、各プロセッサに対して少なくとも1つの別個のプロセッサ・キャッシュ・メモリを有する共有メモリ・マルチプロセッサ・システムの形の共有メモリ・システムでは、例えば、メイン・メモリ内の1つのコピー、および、個々のメモリ・ラインのコピーをリクエストしたプロセッサのローカル・キャッシュ・メモリの1つまたは複数のそれぞれの中の1つといった、同じ共有メモリ・ラインの多くのコピーを有することができる可能性がある。コピーのうちの1つが変更されたとき、他のコピーは、この変更を反映しなければならない。メモリ一貫性は、プロセッサ・キャッシュ・メモリ内のメモリ・ラインのコピーの変更が、システムの全体にわたってタイムリに伝搬されることを保証する秩序である。
【0050】
共有メモリ・システムは、複数のプロセッサ・キャッシュ・メモリを備えることができる。実施形態によれば、共有メモリ・システムは、例えばコンピュータのような、電子データ処理システムの形で提供されてもよい。例えば、個々の電子データ処理システムは、1つまたは複数のマルチコア・プロセッサを備える。各マルチコア・プロセッサは、プログラム命令を読み込んで実行する2つ以上の独立処理ユニット、すなわちコアを備える。これらのコアのそれぞれは、個々のコアによって使用されるデータをキャッシュするためのローカル・キャッシュ・メモリ、すなわち、個々のキャッシュ・メモリを提供されてもよい。実施形態によれば、ローカル・キャッシュ・メモリは、割り当てられたコアに提供されるだけでもよい。
【0051】
さらなる例によれば、電子データ処理システムは、複数のプロセッサ・チップを備えることができる。プロセッサ・チップの2つ以上が、ローカル・プロセッサ・キャッシュ・メモリをそれぞれ備えることができ、すなわち、個々のキャッシュ・メモリに割り当てられたプロセッサ・チップに含まれるプロセッサを、個々のキャッシュ・メモリがサーブするだけである。
【0052】
例えば、メモリ一貫性は、例えば、MESI、または、H-MESI、MOESI、MESIF、もしくはMERSIなどの変更形態のような、無効化ベースのメモリ一貫性プロトコルを使用して実行されてもよい。
【0053】
MESIによれば、各キャッシュ・エントリは、変更(modified)、排他(exclusive)、共有(shared)、および無効(invalid)という4つの可能な状態のうちの1つを割り当てられる。状態は、例えば、2つの追加ビットを使用して示される。「変更」は、現在のキャッシュ・メモリだけに存在し、メイン・メモリに記憶された対応するデータ・ラインと比較して、汚れた、すなわち、修正されたメモリ・ラインを識別する。したがって、キャッシュ・メモリは、メイン・メモリ状態に記憶されたもはや有効ではないデータ・ラインの他の任意の読込みが許可される前に、変更されたメモリ・ラインをメイン・メモリに書き戻さなければならない。個々のメモリ・ラインの書き戻しは、変更から共有にメモリ・ラインの状態を変化させることができる。
【0054】
「排他」は、メモリ・ラインが現在のキャッシュ・メモリだけに存在し、きれいな、すなわち、メイン・メモリに記憶された対応するデータ・ラインにまだ一致していることを識別する。排他状態は、例えば、別のキャッシュ・メモリからリード・リクエストを受け取ることに応答して、共有状態に変えられてもよい。このようなリード・リクエストを受け取ると、リクエストしたメモリ・ラインのコピーは、共有キャッシュ・メモリ・ラインとして、リクエストしているキャッシュ・メモリに送られてもよく、キャッシュ・メモリに残っているコピーされたキャッシュ・メモリ・ラインの状態は、共有に変えられてもよい。個々のメモリ・ラインの状態は、個々のメモリ・ラインに書き込まれると、例えば、排他から変更に変えられてもよい。
【0055】
「共有」は、複数のキャッシュ・メモリに記憶される可能性があり、きれいな、メモリ・ラインを識別する。
【0056】
「無効」は、メモリ・アクセスを満たすために使われておらず、かつ、使用される予定のないキャッシュ・エントリを識別する。キャッシュ・メモリ内のメモリ・ラインの状態は、個々のメモリ・ラインのコピーが、別のキャッシュ・メモリによって排他メモリ・ラインとしてリクエストされると、例えば、共有から無効に変えられてもよい。例えば、個々のメモリ・ラインの共有コピーは、排他コピーとして転送されてもよく、一方で、残りのコピーされたメモリ・ラインは、非一貫性、すなわち、異なるキャッシュ・メモリが、同じメモリ・ラインの異なるコピーを使用していることを避けるために無効化される。無効メモリ・ラインが読み込まれることになる場合、無効メモリ・ラインの有効コピー、すなわち共有または排他が、別のキャッシュ・メモリから、またはメイン・メモリから読み込まれなければならない。
【0057】
4つの共通のMESIプロトコル状態に加えてMOESIプロトコルは、変更と共有の両方のデータを表す第5の「所有(Owned)」状態を含む。これは、変更されたデータを共有する前にメイン・メモリに書き戻す必要性をなくすことができる。最終的にデータは書き戻されなければならないが、書き戻しは延期されてもよい。「変更」は、メモリ・ラインのただ1つの有効コピーであり、修正されたことがあるメモリ・ラインを識別する。
【0058】
「所有」は、修正され得るただ1つのものであるメモリ・ラインのコピーを識別するが、他のプロセッサ・キャッシュ・メモリは、どうやっても修正できない有効コピーも同様に含むことができる。所有メモリ・ラインの修正は、メモリ・ラインを共有する他の全てのプロセッサ・キャッシュ・メモリにブロードキャストされなければならない。所有状態の導入は、データの汚れた共有を可能にし、すなわち、修正されたメモリ・ラインは、メイン・メモリを更新せずに様々なプロセッサ・キャッシュ・メモリを転々することができる。メモリ・ラインは、全ての共有コピーを無効化した後、変更状態に変えられてもよく、メイン・メモリに修正を書き戻すことによって共有状態に変えられてもよい。
【0059】
メモリ・バリア命令は、メモリ・バリア命令の完了前に全てのメモリ命令が開始されること、および、メモリ・バリア命令の完了後まで、その後のメモリ命令が開始されないことを保証する順序付け機能を提供する。メモリ・バリア命令が完了すると、メモリ・バリア命令より前に開始した全てのメモリ・アクセスが完了する。
【0060】
アウト・オブ・オーダー実行(out-of-order execution)にすることができる性能最適化を現代のプロセッサが用いることができるので、メモリ・バリア命令が必要になる可能性がある。例えばロードおよびストアのようなメモリ動作のこの並べ替えは、単一のスレッドの実行において気づかれなくなる可能性がある。しかし、同時発生のプログラムおよびデバイス・ドライバの場合、このような性能最適化は、十分に制御されない限り、挙動を予測できなくなる可能性がある。
【0061】
共有メモリ・システムは、プロセッサ・デバイス全体のロードおよびストア・メモリ・アクセス命令の弱く順序付けられた実行を可能にするように構成される。プロセッサの命令シーケンスは、プロセッサ・デバイスによるシーケンスの以前のアクセス命令の実行、および、シーケンスのその後の命令の実行前の共有メモリ・システム全体の一貫性の伝搬を実施するメモリ・バリア命令を含む。実施形態には、コンピュータ・リソースをほとんど使用しなくても、高速実行を伴うメモリ・バリア命令を実行することという有益な効果があり得る。
【0062】
典型的な一貫性伝搬は、メモリ・ラインの初めの方の値の1つまたは複数のキャッシュされたコピーを無効化することができる。
【0063】
実施形態によれば、プロセッサ・デバイス全体のロードおよびストア・メモリ・アクセス命令の弱く順序付けられた実行を可能にする共有メモリ・システムは、複数のプロセッサを備える。各プロセッサは、伝搬されていないメモリ・ラインを記憶するための未伝搬バッファを備える。未伝搬バッファは、他のプロセッサへの一貫性の伝搬が不明のプロセッサによる以前のアクセスのメモリ・ライン・アドレスを追跡する。さらに、各プロセッサは、未伝搬バッファが空になるまで、プロセッサの命令シーケンスのその後のメモリ・アクセス命令の、プロセッサによる実行を停止することによって実行されるメモリ・バリア命令を含む。
【0064】
実施形態によれば、コヒーレンス・ディレクトリによってプロセッサ・キャッシュ・メモリNに送られることになるメモリ・ラインに関するメッセージは、メモリ・ラインについてのメモリ一貫性が伝搬されたかどうかを示す伝搬フィールドを含む。メモリ・ラインの初めの方のコピーをキャッシュした1つまたは複数のプロセッサ・キャッシュ・メモリから無効承認メッセージをコヒーレンス・ディレクトリが受け取ることを、メモリ・ラインに対するコヒーレンス・ディレクトリの一時エントリが予期する場合、コヒーレンス・ディレクトリは、メッセージの伝搬フィールドをnoにセットする。
【0065】
メモリ・ラインの初めの方のコピーをキャッシュした1つまたは複数のプロセッサ・キャッシュから無効承認メッセージをコヒーレンス・ディレクトリが受け取らないことを、メモリ・ラインに対するディレクトリ・エントリ、またはディレクトリの一時エントリが予期する場合、コヒーレンス・ディレクトリは、メッセージの伝搬フィールドyesにセットする。ラインが一時エントリを有していた場合、および、メッセージの伝搬フィールドがyesにセットされた場合、コヒーレンス・ディレクトリは、ラインに対するコヒーレンス・ディレクトリの一時エントリ内のキャッシュNに対する伝搬通知フィールドをnoにセットする。
【0066】
メッセージの伝搬フィールドがnoにセットされた場合、コヒーレンス・ディレクトリは、メモリ・ラインに対するコヒーレンス・ディレクトリの一時エントリ内のキャッシュNに対する伝搬通知フィールドをyesにセットする。
【0067】
メモリ・ラインの一時エントリをコヒーレンス・ディレクトリが更新した場合、および、メモリ・ラインの初めの方のコピーをキャッシュしたプロセッサ・キャッシュ・メモリから無効承認メッセージをコヒーレンス・ディレクトリが受け取らないことを、更新した一時エントリが予期する場合、コヒーレンス・ディレクトリは、メモリ・ラインに対する一時エントリ内で伝搬通知フィールドがyesにセットされた各プロセッサ・キャッシュ・メモリに、メモリ・ラインについての伝搬メッセージを送る。
【0068】
コヒーレンス・ディレクトリによってプロセッサ・キャッシュ・メモリに送信されたそれぞれのこのような伝搬メッセージについて、コヒーレンス・ディレクトリは、プロセッサ・キャッシュ・メモリに対する対応する伝搬通知フィールドをnoに、一時エントリ内でセットする。
【0069】
実施形態によれば、コヒーレンス・ディレクトリは、メモリ・ラインに関するプロセッサ・キャッシュ・メモリからのメッセージをコヒーレンス・ディレクトリが受け取ることによって引き起こされるコヒーレンス・ディレクトリのアクションの一部として、メモリ・ラインの一時エントリを更新する。
【0070】
実施形態によれば、バッファに記憶されたフラグ付きメモリ・ラインの識別子は、メイン・メモリ内の個々のメモリ・ラインのメモリ・アドレスを含む。実施形態には、メモリ・ラインを識別するのに効率的な識別子を提供するという有益な効果があり得る。メイン・メモリ内の、また場合によっては、同様にプロセッサ・キャッシュ・メモリ内のメモリ・ラインを識別するためにメモリ・アドレスが既に使用されているので、識別子を書き換えるまたは解釈するための追加のロジックは必要ではない。
【0071】
実施形態によれば、共有メモリ・システムのメモリ一貫性は、コヒーレンス・ディレクトリを使用して実現される。実施形態には、共有メモリ・システム全体の一貫性の伝搬を制御、チェック、および確認することができるコヒーレンス・ディレクトリの形の中央ユニットを提供するという有益な効果があり得る。
【0072】
実施形態によれば、第1および第2のフラグ情報のうちの少なくとも1つは、コヒーレンス・ディレクトリからプロセッサ・デバイスによって受け取られたメッセージによって提供される。実施形態には、共有メモリ・システム全体の一貫性の伝搬をコヒーレンス・ディレクトリが確認するという有益な効果があり得る。実施形態によれば、第1および第2のフラグ情報のうちの少なくとも1つは、コヒーレンス・ディレクトリにプロセッサ・デバイスによって送られたメッセージによって提供される。実施形態には、共有メモリ・システム全体の一貫性の伝搬を確認するための要件を公表するという有益な効果があり得る。
【0073】
実施形態によれば、共有メモリ・システムのメモリ一貫性は、ブロードキャスティングを使用して実現される。実施形態には、共有メモリ・システムの一貫性を実行するためのブロードキャスト・ベースのプロトコルが、中央にあるコヒーレンス・ディレクトリを必要としないという有益な効果があり得る。さらに、中央にあるコヒーレンス・ディレクトリは、メモリ一貫性を実現するためにチェックおよび維持される必要がない。したがって、十分な帯域幅が利用できる場合、メモリ一貫性を実現するためのブロードキャスト・ベースのプロトコルは、メモリ・ラインの全てのトランザクションが、全てのプロセッサによって見られるリクエスト/リクエストを含むので、ディレクトリ・ベースのプロトコルより高速になる可能性がある。ブロードキャスト・ベースのプロトコルの欠点は、そのスケーラビリティの不足である。あらゆるリクエストは、システム内の全てのノード、すなわち、プロセッサ・キャッシュ・メモリ全てにブロードキャストされなければならず、システムが大きくなると、方法を実行するために必要な帯域幅が増大するということを意味する。
【0074】
実施形態によれば、メモリ・ラインのコピーをプロセッサ・キャッシュ・メモリに充填することをプロセッサ・デバイスに行わせる命令は、個々のメモリ・ラインへのライト・アクセスを指定する命令である。実施形態によれば、共有メモリ・システム全体のメモリ一貫性の伝搬は、共有メモリ・システムのさらなるプロセッサ・デバイスのリモート・プロセッサ・キャッシュ・メモリによって使用されるメモリ・ラインのさらなるコピーを無効化することを含む。実施形態には、メモリ・ラインの期限切れの共有リード・コピー、すなわち古くなったコピーをさらなるプロセッサ・デバイスが使用しないが、個々のメモリ・ラインの新しいコピーをプロセッサ・デバイスが書き込むことが保証され得るという有益な効果があり得る。
【0075】
実施形態によれば、バッファに記憶されたフラグ付きメモリ・ラインの識別子は、メイン・メモリ内の個々のメモリ・ラインのメモリ・アドレスを含む。実施形態には、共通識別子を使用して、メイン・メモリ内、プロセッサ・キャッシュ・メモリ内、およびプロセッサ・デバイスのバッファ内のメモリ・ラインを識別するという有益な効果があり得る。
【0076】
実施形態によれば、コヒーレンス・ディレクトリによってリクエストされた修正は、リモート・プロセッサ・キャッシュ・メモリに含まれるメモリ・ラインのさらなるコピーの無効化を含む。実施形態には、リモート・プロセッサ・キャッシュ・メモリのどれも、期限切れのメモリ・ラインのコピー、すなわち古くなったコピーを使用せず、一方で、個々のメモリ・ラインの新しいコピーをプロセッサ・キャッシュ・メモリにプロセッサ・デバイスが充填することを保証するという有益な効果があり得る。したがって、メモリ・ラインの一貫性のないコピーの使用、および、競争状態の導入は、効果的に避けることができる。
【0077】
図1は、共有メモリ・システムを実行するのに適したコンピュータ・システム100を描写する。本明細書に記述された方法は、コンピュータ化されたシステムによって自動化されるということが理解されよう。これらの方法は、ソフトウェア112、122(ファームウェア122を含む)、ハードウェア(プロセッサ)105、または、これらの組合せでさらに実行されてもよい。例示的な実施形態において、本明細書に記述された方法は、実行可能命令としてソフトウェアで実行され、パーソナル・コンピュータ、ワークステーション、ミニコンピュータ、またはメインフレーム・コンピュータなどの、専用または汎用デジタル・コンピュータによって使用されてもよい。最も一般的なシステム100は、したがって、汎用コンピュータ101を含む。
【0078】
例示的な実施形態において、ハードウェア・アーキテクチャの観点から、
図1に示されるように、コンピュータ101は、プロセッサ105、メモリ・コントローラ115に連結されたメモリ(メイン・メモリ)110、および、ローカルな入出力コントローラ135を介して通信連結された1つまたは複数の入出力(I/O)デバイス(または周辺機器)10、145を含む。入出力コントローラ135は、当技術分野で知られているような1つもしくは複数のバス、または他の有線接続もしくはワイヤレス接続であってもよいがこれらに限定されない。入出力コントローラ135は、コントローラ、バッファ、キャッシュ、ドライバ、リピータ、およびレシーバなどの追加の要素を、通信を可能にするために有してもよいが、簡略化のために省略される。さらに、ローカル・インターフェースは、前述の構成要素間の適切な通信を可能にするためのアドレス、制御、またはデータ接続、あるいはその組合せを含んでもよい。本明細書に記述されるように、I/Oデバイス10、145は、一般に、当技術分野で知られた任意の一般的な暗号カードまたはスマート・カードを含んでもよい。
【0079】
プロセッサ105は、特にメモリ110に記憶されたソフトウェアを実行するためのハードウェア・デバイスである。プロセッサ105は、任意のカスタム・メイドのもしくは市販のプロセッサ、中央処理装置(CPU)、コンピュータ101と関連付けられたいくつかのプロセッサ間の補助プロセッサ、(マイクロチップもしくはチップ・セットの形の)半導体ベースのマイクロプロセッサ、マクロプロセッサ、または、一般に、ソフトウェア命令を実行するための任意のデバイスであってもよい。プロセッサ105は、1つもしくは複数のローカル・キャッシュ・メモリを備える、または、1つもしくは複数のローカル・キャッシュ・メモリと通信接続される、あるいはその両方であってもよい。プロセッサ105は、1つまたは複数のプロセッサ・コアを備えることができる。プロセッサ・コアのそれぞれは、1つまたは複数のローカル・プロセッサ・キャッシュ・メモリに動作可能なように接続されてもよい。プロセッサ105は、複数のプロセッサ・チップの形で実装されてもよく、各プロセッサ・チップは、1つまたは複数のローカル・プロセッサ・キャッシュ・メモリを備えることができる。プロセッサ・キャッシュ・メモリは、個々のキャッシュ・メモリを制御するためのキャッシュ・メモリ・コントローラをそれぞれ備えることができる。複数のプロセッサ・キャッシュ・メモリの場合、メモリ一貫性は、ディレクトリ・ベースのメモリ一貫性、またはブロードキャスト・ベースのメモリ一貫性の形で実行されてもよい。
【0080】
メモリ110は、揮発性記憶素子(例えば、ランダム・アクセス・メモリ(DRAM、SRAM、SDRAM、等などのRAM))、および不揮発性記憶素子(例えば、ROM、消去可能プログラマブル・リード・オンリ・メモリ(EPROM)、電子的消去可能プログラマブル・リード・オンリ・メモリ(EEPROM)、プログラマブル・リード・オンリ・メモリ(PROM))のいずれか1つまたは組合せを含んでもよい。メモリ110は、分散アーキテクチャを有してもよく、ここで、様々な構成要素が互いに離れて置かれるが、プロセッサ105によってアクセスされてもよいということに留意されたい。
【0081】
メモリ110内のソフトウェアは、1つまたは複数の別個のプログラムを含んでもよく、これらのプログラムのそれぞれが、論理機能、特に本発明の実施形態に含まれる機能を実行するための実行可能命令の順序付けられたリストを含む。
図1の例では、メモリ110内のソフトウェアは、命令またはソフトウェア112を含む。
【0082】
メモリ110内のソフトウェアは、典型的には、適切なオペレーティング・システム(OS)111も含むことになる。OS111は、本質的には、場合によってはソフトウェア112など、他のコンピュータ・プログラムの実行を制御する。
【0083】
本明細書に記述された方法は、ソース・プログラム112、実行可能プログラム112(オブジェクト・コード)、スクリプト、または、実行されることになる命令112のセットを含む他の任意のエンティティの形で提供されてもよい。ソース・プログラムとして提供されるとき、個々のプログラムは、OS111とともに正しく動作するように、メモリ110に含まれても、含まれなくてもよいコンパイラ、アセンブラ、インタープリタ、または同様のものによって翻訳される必要がある。さらに、方法は、データおよびメソッドのクラスを有するオブジェクト指向プログラミング言語、あるいは、ルーチン、サブルーチン、もしくは関数、またはその組合せを有する手続き型プログラミング言語として書かれてもよい。
【0084】
例示的な実施形態において、従来のキーボード150およびマウス155が、入出力コントローラ135に連結されてもよい。I/Oデバイス145などの他の出力デバイスは、入力デバイスを含んでもよく、例えば、プリンタ、スキャナ、マイクロフォン、および同様のものであるがこれらに限定されない。最終的に、I/Oデバイス10、145は、入力と出力の両方を通信するデバイスをさらに含んでもよく、例えば、(他のファイル、デバイス、システム、またはネットワークにアクセスするための)ネットワーク・インターフェース・カード(NIC)または変調器/復調器、無線周波数(RF)または他のトランシーバ、電話インターフェース、ブリッジ、ルータ、および同様のものであるがこれらに限定されない。I/Oデバイス10、145は、当技術分野で知られた任意の一般的な暗号カードまたはスマート・カードであってもよい。システム100は、ディスプレイ130に連結されたディスプレイ・コントローラ125をさらに含んでもよい。例示的な実施形態において、システム100は、ネットワーク165に連結するためのネットワーク・インターフェースをさらに含んでもよい。ネットワーク165は、ブロードバンド接続を介した、コンピュータ101と、任意の外部サーバ、クライアントおよび同様のものとの間の通信のためのIPベースのネットワークであってもよい。ネットワーク165は、本明細書で論じられる方法のステップの一部または全てを実行するために含まれ得るコンピュータ101と外部システム30との間でデータを送受信する。例示的な実施形態において、ネットワーク165は、サービス・プロバイダによって管理される、管理されたIPネットワークであってもよい。ネットワーク165は、例えば、WiFi、WiMax等などのワイヤレス・プロトコルおよび技術を使用して、ワイヤレス式に実装されてもよい。ネットワーク165は、さらに、ローカル・エリア・ネットワーク、広域ネットワーク、メトロポリタン・エリア・ネットワーク、インターネット・ネットワーク、または、ネットワーク環境の他の類似のタイプなどのパケット交換型ネットワークであってもよい。ネットワーク165は、固定ワイヤレス・ネットワーク、ワイヤレス・ローカル・エリア・ネットワーク(LAN)、ワイヤレス広域ネットワーク(WAN)、パーソナル・エリア・ネットワーク(PAN)、仮想プライベート・ネットワーク(VPN)、イントラネット、または他の適切なネットワーク・システムであってもよく、信号を送受信するための機器を含む。
【0085】
コンピュータ101がPC、ワークステーション、スマート・デバイスまたは同様のものである場合、メモリ110内のソフトウェアは、基本入出力システム(BIOS:basic input output system)122をさらに含んでもよい。BIOSは、始動時にハードウェアを初期化し、テストすること、OS111をスタートすること、および、ハードウェア・デバイス間のデータの転送をサポートすることを行う重要なソフトウェア・ルーチンのセットである。BIOSは、コンピュータ101がアクティブにされるときにBIOSを実行できるように、ROMに記憶される。
【0086】
コンピュータ101が動作中のとき、プロセッサ105は、メモリ110に記憶されたソフトウェア112を実行すること、メモリ110とデータを通信すること、および、ソフトウェアに従ってコンピュータ101の動作を全体的に制御することを行うように構成される。本明細書に記述された方法、およびOS111は、全体的にまたは部分的に、典型的には後者であるが、プロセッサ105によって読み込まれ、場合によっては、プロセッサ105内にバッファされ、その後実行される。ストレージ120は、HDDストレージなどのディスク・ストレージを備えることができる。
【0087】
図2は、コヒーレンス・ディレクトリ210を使用してディレクトリ・ベースの一貫性を実行するデータ処理システムの形の例示的なコヒーレント共有メモリ・システム200を示す。コヒーレント共有メモリ・システム200は、複数のN個のプロセッサ・コア202、252を備え、それぞれが、ローカル・プロセッサ・キャッシュ・メモリ204、254に接続される。相互接続ファブリック206を介して、プロセッサ・キャッシュ・メモリ204、254の間でデータが交換される。相互接続ファブリック206は、プロセッサ・キャッシュ・メモリ204、254とコヒーレンス・ディレクトリ210をさらに接続する。コヒーレンス・ディレクトリ210は、プロセッサ・キャッシュ・メモリ204、254の内容、すなわち、プロセッサ・キャッシュ・メモリ204、254に含まれるメモリ・ラインを追跡し、このようにして一貫性を実行する。さらに、相互接続ファブリック206は、キャッシュ・メモリ204、254をメモリ・ストレージ・インターフェース212に接続する。メモリ・ストレージ・インターフェース212を介して、例えばメイン・メモリのような、共有メモリの形の補助記憶装置との間でデータが送受信されてもよい。例えば、プロセッサ・コア1は、プロセッサ・キャッシュ・メモリ1からメモリ・ラインを取り出そうとするが、プロセッサ・キャッシュ・メモリ1が、リクエストしたメモリ・ラインの有効コピーを含まない、または、例えば、プロセッサ・コア1がライト・コピーをリクエストできるが、プロセッサ・キャッシュ・メモリ1がリード・コピーを含むことしかできないので、キャッシュ・ミスを生じる。プロセッサ・コア1は、所望のメモリ・ラインの有効コピーについてのリクエストを、相互接続ファブリック206を介してコヒーレンス・ディレクトリ210に送ることができる。コヒーレンス・ディレクトリ210は、さらなるプロセッサ・キャッシュ・メモリのいずれかが、リクエストしたメモリ・ラインを含むかどうかについてチェックする。さらなるプロセッサ・キャッシュ・メモリのうちの1つが、所望のメモリ・ラインを含む場合、コヒーレンス・ディレクトリ210は、所望のメモリ・ラインを含む個々のさらなるプロセッサ・キャッシュ・メモリにリクエストを転送することができる。さらなるプロセッサ・キャッシュ・メモリのどれも、所望のメモリ・ラインを含まない場合、コヒーレンス・ディレクトリ210は、メモリ・ストレージ・インターフェース212を介して補助記憶装置にリクエストを転送することができる。したがって、所望のメモリ・ラインの有効コピーは、個々のメモリ・ラインをキャッシュ・メモリ1に充填するリクエストしているプロセッサ・コア1に転送されてもよい。
【0088】
図3は、ローカル・プロセッサ・キャッシュ・メモリ204、254をそれぞれが備えた複数のプロセッサ・コア202、252を備えるデータ処理システムの形の例示的なコヒーレント共有メモリ・システム200を示す。メモリ一貫性は、ブロードキャスティングに基づいて実行される。
図2の共有メモリ・システムとは対照的に、
図3のコヒーレント共有メモリ・システム200は、コヒーレンス・ディレクトリを備えていない。ブロードキャスト・ベースの一貫性の場合、プロセッサ・コア1は、キャッシュ・ミスの場合、所望のメモリ・ラインの有効コピーについてのリクエストを、相互接続ファブリック206を介して、コヒーレント共有メモリ・システム200のさらなるプロセッサ・コア2からNまでに、ブロードキャストする。所望のメモリ・ラインのリクエストした有効コピーを含むリプライをプロセッサ・コア1が受け取らない場合、プロセッサ・コア1は、相互接続206およびメモリ・ストレージ・インターフェース212を介して、補助記憶装置からコピーをリクエストすることができる。
【0089】
図4は、複数のプロセッサ・チップ201、251を備えるデータ処理システムの形の例示的なコヒーレント共有メモリ・システム200を示す。各プロセッサ・チップは、ローカル・プロセッサ・キャッシュ・メモリ204、254を提供される。キャッシュ・メモリ204のメモリ一貫性は、ブロードキャスティングに基づいて実行される。相互接続ファブリック206は、キャッシュ・メモリ204、254と、メモリ・ストレージ・インターフェース212との間の通信を可能にする。メモリ・ストレージ・インターフェース212は、例えば、メモリ・サブシステム・チップによって提供されてもよい。所望のメモリ・ラインの有効コピーの取り出しは、
図3の方法と同様に行われてもよい。
【0090】
図5は、複数のプロセッサ・チップ201、251を備えるデータ処理システムの形の例示的なコヒーレント共有メモリ・システム200を示す。各プロセッサ・チップは、ローカル・プロセッサ・キャッシュ・メモリ204、254を提供される。キャッシュ・メモリ204のメモリ一貫性は、メモリ・サブシステム・チップ203によって提供されたコヒーレンス・ディレクトリ210を使用して実行される。メモリ・サブシステム・チップ203は、キャッシュ・メモリ204、254、コヒーレンス・ディレクトリ210と、メモリ・ストレージ・インターフェース212との間の通信を可能にする相互接続ファブリック206をさらに提供する。メモリ・ストレージ・インターフェース212は、例えば、メモリ・サブシステム・チップ203によって提供されてもよい。所望のメモリ・ラインの有効コピーの取り出しは、
図2の方法と同様に行われてもよい。
【0091】
図6は、バリア命令を使用して、例えばプロセッサ・チップ201のようなプロセッサ・デバイスによって命令の実行を調整する例示的な方法を示す。プロセッサ・チップ201は、命令を実行する命令実行ユニット246を備える。実行される命令は、メモリ・ラインのコピーを必要とすることもある。命令は、例えば、リード命令またはライト命令であってもよい。命令実行ユニット246は、プロセッサ・キャッシュ・メモリ204が、必要なメモリ・ラインを含むかどうかについてチェックする。キャッシュ・ミスの場合、リクエストが共有メモリ214に送られ、プロセッサ・キャッシュ・メモリ204にコピーを充填するための所望のメモリ・ラインのコピーをリクエストする。例えばリクエストまたはコマンドのような共有メモリ214に送られたメッセージ、および共有メモリ214から受け取られたメッセージは、ステップ302において、メモリ・ラインのコピーの充填についての共有メモリ・システム200全体のメモリ一貫性の伝搬に関する情報についてチェックされる。例えば、メモリ・ラインのリクエストしたコピーを含む共有メモリ214からのリプライが受け取られてもよい。リプライによって提供されたメモリ・ラインのコピーは、例えば、前述の命令の実行を完了させるために、または、事前フェッチを使用して潜在的なその後の命令の実行を加速するために、プロセッサ・キャッシュ・メモリ204に充填される。ステップ302において、メッセージ自体、またはチェックのために生成されたメッセージのコピーが使用されてもよい。メッセージは、ステップ304においてチェックされる一貫性伝搬フィールドをそれぞれ含むことができる。メモリ・ラインのコピーの充填についてのメモリ一貫性の伝搬が確認されていないことを示すフラグ情報を一貫性伝搬フィールドが含む場合、個々のメモリ・ラインの、例えばそのメモリ・アドレスのような指標は、ステップ306において、プロセッサ・チップ201のバッファ248に追加される。バッファ248は、未伝搬バッファとも呼ばれ、共有メモリ・システム200全体のメモリ一貫性の伝搬がまだ確認されていないメモリ・ラインのアドレスの順序付けられていないセットを含むことができる。メモリ・ラインのコピーの充填についてのメモリ一貫性の伝搬が確認されたことを示すフラグ情報を一貫性伝搬フィールドが含む場合、個々のメモリ・ラインの指標は、指標が存在する場合、ステップ308において、プロセッサ・チップ201のバッファ248から削除される。バッファ248に関するアクションが必要ではないことを示す情報を一貫性伝搬フィールドが含む場合、310でアクションは行われない。
【0092】
プロセッサ・チップ201の命令実行ユニット246によってメモリ・バリア命令を実行すると、バリア・リクエストはバッファ248に送られ、コヒーレント共有メモリ・システム200全体の一貫性の伝搬がまだ確認されていないメモリ・ラインを示すいずれかの指標をバッファ248が含むかどうかについてチェックする。バッファ248がいずれかの指標を含む場合、ステップ300において、バリア命令は、バッファ248が空になるまで待たされる。バッファ248が空でない限り、バリア命令の実行の完了は妨げられる。バッファ248が空であると判定されると、バリア・リプライが命令実行ユニット246に送られ、バッファ248が空であることを命令実行ユニット246に知らせる。バッファ248が空になるとすぐ、命令実行ユニット246は、バリア命令の実行を完了させる。
【0093】
図7は、コヒーレント共有メモリ・システム200の例示的なコヒーレンス・ディレクトリ210を示す。コヒーレント共有メモリ・システム200は、複数のプロセッサ・キャッシュ・メモリ204、244を備え、これらのプロセッサ・キャッシュ・メモリは、相互接続ファブリック206を介して共有メモリ214と通信接続される。共有メモリ214は、複数のメモリ・ハブ270、280を備えることができる。キャッシュ・ミスの場合のプロセッサ・キャッシュ・メモリ204、244からのリクエストは、相互接続ファブリック206を介してコヒーレンス・ディレクトリ210に送られる。コヒーレンス・ディレクトリ210は、コヒーレンス・ディレクトリ210を制御するディレクトリ・コントローラ272を備える。コヒーレンス・ディレクトリ210は、ディレクトリ・テーブル274をさらに備えることができる。ディレクトリ・テーブル274は、エントリ毎に1つのメモリ・ラインを有する複数のエントリを含むことができる。言い換えれば、ディレクトリ・テーブル274の各エントリは、1つのメモリ・ラインに割り当てられてもよく、メモリ・ラインのコピーが、プロセッサ・キャッシュ・メモリ204、244の1つまたは複数によって使用される。エントリは、個々のエントリが割り当てられたメモリ・ラインのメモリ・アドレスを有するアドレス・タグ、ステータス情報、アクセス・タイプ情報、およびID情報を含むことができる。ステータス情報は、プロセッサ・キャッシュ・メモリ204、244内のメモリ・ラインのコピーのステータスが不変、すなわちT=0であるかどうか、または、プロセッサ・キャッシュ・メモリ204、244内のメモリ・ラインのコピーが、ステータスが一時的、すなわちT=1であるような変更を現在受けているかどうかを示すことができる。不変ステータスの場合、現在、変更は行われていない。エントリは、例えば共有リード・アクセス、または排他ライト・アクセスのような、プロセッサ・キャッシュ・メモリ204、244によるメモリ・ラインのアクセス・タイプをさらに識別することができる。さらに、メモリ・ラインのコピーを現在使用しているプロセッサ・キャッシュ・メモリ204、244は、ID情報によって識別されてもよく、ID情報は、例えば、識別されることになるプロセッサ・キャッシュ・メモリ204、244に動作可能なように接続されたプロセッサの識別子、または、個々のプロセッサ・キャッシュ・メモリ204、244自体の識別子、あるいはその両方を含むことができる。
【0094】
プロセッサ・キャッシュ・メモリ204、244内のメモリ・ラインのコピーのステータスが一時的である場合、すなわちメモリ・ラインのコピーが、プロセッサ・キャッシュ・メモリ204、244を通じて一貫性を確立するために現在、変更を受けている場合、ディレクトリ・テーブルのエントリは、一時テーブル276内のエントリへのポインタを含むことができる。例えば、プロセッサ・キャッシュ・メモリ204、244のうちの1つによってメモリ・ラインの排他ライト・コピーがリクエストされた場合、他のプロセッサ・キャッシュ・メモリ204、244によって使用される共有リード・コピーは、無効化されなければならない。コヒーレンス・ディレクトリ210は、個々のメモリ・ラインについての共有メモリ・システム全体の一貫性の伝搬を追跡するための一時テーブル276を含むことができる。メモリ・ラインのコピーが一時的状態にある場合、一時テーブル276に個々のメモリ・ラインに対するエントリが生成されてもよい。一時テーブル276は、エントリ毎に1つのメモリ・ラインを有する複数のエントリを含むことができる。言い換えれば、一時テーブル276の各エントリは、プロセッサ・キャッシュ・メモリ204、244の1つまたは複数によって使用される一時的コピーを有する1つのメモリ・ラインに割り当てられてもよい。一時テーブル276のエントリは、個々のメモリ・ラインのコピーを現在使用しているプロセッサ・キャッシュ・メモリ204、244全てを識別することができる。これらのプロセッサ・キャッシュ・メモリ204、244のそれぞれについて、エントリは、例えば、共有リード、排他ライト、または無効のような、個々のプロセッサ・キャッシュ・メモリ204、244によって使用されるメモリ・ラインのコピーの最新状態を追跡することができる。さらに、エントリは、個々のプロセッサ・キャッシュ・メモリ204、244から受け取ったリクエスト、および、コヒーレンス・ディレクトリによって個々のプロセッサ・キャッシュ・メモリ204、244に送られた未解決のリクエスト、すなわち、リプライが必要なリクエストを、追跡することができる。最終的に、一時テーブルのエントリは、メモリ・ラインについての共有メモリ・システム全体のメモリ一貫性の伝搬の確認が、コヒーレンス・ディレクトリ210によって得られるとすぐ、個々のプロセッサ・キャッシュ・メモリ204、244が通知されなければならないかどうかを示す指標を、これらのプロセッサ・キャッシュ・メモリ204、244のそれぞれについて含めることができる。一時テーブル276は、一時テーブルのどのエントリが現在使用できるか、および、メモリ・ラインの一貫性の伝搬を追跡するためにどれが現在使用されているかを示すビット・ベクトル278が付属してもよい。
【0095】
プロセッサ・キャッシュ・メモリ204、244のうちの1つからメモリ・ラインのコピーについてのリクエストを受け取ると、コヒーレンス・ディレクトリ210のディレクトリ・コントローラ272は、残りのプロセッサ・キャッシュ・メモリ204、244の1つが、リクエストしたメモリ・ラインの有効コピーを含むかどうかについて、ディレクトリ・テーブル274を使用して判定することができる。残りのプロセッサ・キャッシュ・メモリ204、244の1つが、リクエストしたメモリ・ラインの有効コピーを含む場合、ディレクトリ・コントローラ272は、リクエストしたメモリ・ラインのコピーを取り出すために、個々のプロセッサ・キャッシュ・メモリ204、244にリクエストを転送することができる。残りのプロセッサ・キャッシュ・メモリ204、244のどれも、リクエストしたメモリ・ラインの有効コピーを含まない場合、ディレクトリ・コントローラ272は、リクエストしたメモリ・ラインのコピーを個々のメモリ277から取り出すために、メモリ277を制御するメモリ・コントローラ275にリクエストを転送することができる。
【0096】
図8は、共有メモリ・システムの一貫性を実行するコヒーレンス・ディレクトリ210を管理するための例示的な方法を示す。ステップ400において、コヒーレンス・ディレクトリ210は、共有メモリ・システムの、例えばC0といったプロセッサ・キャッシュ・メモリから、相互接続ファブリック206を介してメッセージを受け取る。メッセージは、メモリ・ラインLに関するものであってもよい。例えば、メッセージは、メモリ・ラインLのコピーについてのリクエストであってもよい。コヒーレンス・ディレクトリ210のディレクトリ・コントローラ272は、ステップ402において、例えば、受け取ったメッセージに対するリプライの中で、プロセッサ・キャッシュ・メモリC0にメッセージMを送る必要があるかどうかについてチェックすることができる。例えば、DCは、リクエストしたメモリ・ラインLを含むリプライの形のメッセージMを、プロセッサ・キャッシュ・メモリC0に送らなければならない可能性がある。メッセージMを送る必要がない場合、ディレクトリ・コントローラ272は、受け取ったメッセージを、その内容に応じて処理し続けることができる。メッセージMを送る必要がある場合、方法は、ステップ404を続けることができる。ステップ404において、ディレクトリ・コントローラ272は、メモリ・ラインLについての一時エントリを一時テーブル276が含むかどうかについてチェックする。このために、ディレクトリ・コントローラ272は、ディレクトリ・テーブル274を最初にチェックすることができる。ディレクトリ・テーブル274が、メモリ・ラインLについてのエントリを有する場合、ディレクトリ・コントローラ272は、メモリ・ラインLに割り当てられたエントリ一時テーブル276へのポインタを、ディレクトリ・テーブル274の個々のエントリが含むかどうかについてチェックすることができる。メモリ・ラインLについての一時エントリを、一時テーブル276が含まない場合、方法は、ステップ410を続けることができる。ステップ410において、メモリ・ラインLについての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたこと、すなわち、Prop=yesであることを示すメッセージMに、フラグ情報が追加されてもよい。メモリ・ラインLのコピーの一時的状態を共有メモリ・システムが含まないので、メモリ・ラインLについてのメモリ一貫性は不変であり、伝搬は不要である。ステップ416において、メッセージMは、相互接続ファブリック206を介してプロセッサ・キャッシュ・メモリC0に送られる。ステップ418において、プロセッサ・キャッシュ・メモリC0は、コヒーレンス・ディレクトリ210からメッセージMを受け取る。
【0097】
ステップ404において、メモリ・ラインLについての一時エントリを一時テーブル276が含むと判定された場合、方法は、ステップ406を続けることができる。メモリ・ラインLについての一時エントリは、メモリ・ラインLについての一貫性が、共有メモリ・システム全体に伝搬しなければならないことを意味する。ステップ406において、一貫性を確立するために、共有メモリ・システムのプロセッサ・キャッシュ・メモリの1つまたは複数によって行われるべきアクションがあるかどうかが、一時テーブル276を使用してチェックされる。例えば、メモリ・ラインLの1つまたは複数の有効コピーは、一貫性を確立するために、無効化されなければならないということが予期されてもよい。行われるべき残りのアクションがない場合、方法は、ステップ408において続くことができる。メモリ・ラインLが一時的状態にある、すなわち一貫性が、メモリ・ラインLについて、まだ確認されていないので、一時テーブル276におけるメモリ・ラインLの一時エントリ内のプロセッサ・キャッシュ・メモリC0についての一貫性伝搬通知指標は、コヒーレンス・ディレクトリ210のディレクトリ・コントローラ272によって一貫性の伝搬の確認が得られるとすぐ、プロセッサ・キャッシュ・メモリC0が一貫性の伝搬の確認を提供されなければならないことを示すことができる。残りのアクションは、一貫性の伝搬が成功裏に完了された、すなわち、伝搬についての確認を提供したことを示さない。ステップ408において、プロセッサ・キャッシュ・メモリC0が、確認について知らされた場合、プロセッサ・キャッシュ・メモリC0についての伝搬通知指標は、プロセッサ・キャッシュ・メモリC0が、一貫性の伝搬の確認を提供される必要がないことを指標が示すように修正されてもよく、一方で、ステップ410において、個々の確認がメッセージMに追加される。メッセージMは、次に、ステップ416および418に示されるように、プロセッサ・キャッシュ・メモリC0に送られる。
【0098】
行われるべきアクションがまだあることをステップ406のチェックが示す場合、方法は、ステップ412を続けられてもよい。行われるべきこのようなアクションは、メモリ・ラインLの一時エントリに記録された未解決のリクエストによって示されてもよく、すなわち、まだ実行または確認されていないリクエストを識別する。ステップ412において、コヒーレンス・ディレクトリ210のディレクトリ・コントローラ272によって一貫性の伝搬の確認が得られるとすぐに、プロセッサ・キャッシュ・メモリC0が一貫性の伝搬の確認を提供されなければならないことを、一時テーブル276におけるメモリ・ラインLの一時エントリ内のプロセッサ・キャッシュ・メモリC0についての一貫性伝搬通知指標が示すということが保証される。ステップ414において、フラグ情報がメッセージMに追加されてもよく、メモリ・ラインLについての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されなかったこと、すなわち、Prop=noであることを示す。メッセージMは、次に、ステップ416および418に示されるようにプロセッサ・キャッシュ・メモリC0に送られる。
【0099】
図9は、
図8に示されたものと同じインフラストラクチャを使用して、共有メモリ・システムの一貫性を実行するコヒーレンス・ディレクトリ210を管理するための例示的な方法を示す。ステップ500において、コヒーレンス・ディレクトリ210は、共有メモリ・システムの、例えばC0といったプロセッサ・キャッシュ・メモリから、相互接続ファブリック206を介してメッセージを受け取る。メッセージは、メモリ・ラインLに関するものであってもよい。例えば、メッセージは、メモリ・ラインLのコピーについてのリクエストであってもよい。ステップ502において、コヒーレンス・ディレクトリ210のディレクトリ・コントローラ272は、ディレクトリ・テーブル274および一時テーブル276を使用して、一時テーブル276内のメモリ・ラインLについての一時エントリを、ディレクトリ・コントローラ272が更新したかどうかについてチェックする。一時テーブル276内のメモリ・ラインLについての一時エントリの更新がないことを、ディレクトリ・コントローラ272が判定した場合、ディレクトリ・コントローラ272は、受け取ったメッセージを、その内容に応じて処理し続ける。一時テーブル276内のメモリ・ラインLについての一時エントリを、ディレクトリ・コントローラ272が更新した場合、方法は、ステップ504を続けることができる。ステップ504において、一貫性を確立するために、共有メモリ・システムのプロセッサ・キャッシュ・メモリの1つまたは複数によって行われるべきアクションがあるかどうかが、一時テーブル276を使用してチェックされる。例えば、メモリ・ラインLの一時エントリに応じて、共有メモリ・システムのプロセッサ・キャッシュ・メモリの1つによって使用されるメモリ・ラインLのコピーの無効化を承認するリプライが期待されるかどうかがチェックされる。一貫性を確立するために、実行されるべきアクションが期待されることを、ディレクトリ・コントローラ272が判定した場合、ディレクトリ・コントローラ272は、例えば
図8の方法に従って、受け取ったメッセージを、その内容に応じて処理し続けることができる。一貫性を確立するために、実行されるべきアクションが期待されないことを、ディレクトリ・コントローラ272が判定した場合、方法は、ステップ506を続けることができる。ステップ506において、メモリ・ラインLについての共有メモリ・システム全体の一貫性の伝搬が確認された場合に通知されることになる、共有メモリ・システムのいずれかのプロセッサ・キャッシュ・メモリCX(X∈{0, 1, ..., N})を識別する一貫性伝搬通知指標を、メモリ・ラインLの一時エントリが含むかどうかが、ディレクトリ・コントローラ272によってチェックされる。1つまたは複数のプロセッサ・キャッシュ・メモリCXをディレクトリ・コントローラ272が判定した場合、ステップ508において、コマンド「D2Ccmd.Propagated(addr A, Prop=yes)」の形のメッセージがプロセッサ・キャッシュ・メモリCXのそれぞれに送信され、メモリ・アドレスAを有するメモリ・ラインLについての共有メモリ・システム全体の一貫性の伝搬が確認されたこと、すなわち、Prop=yesであることを示す。ステップ512において、プロセッサ・キャッシュ・メモリCXによってメッセージが受け取られる。ステップ510において、通知されたプロセッサ・キャッシュ・メモリCXについての一貫性伝搬通知指標は、プロセッサ・キャッシュ・メモリCXについての情報要件がこれ以上ないことを指標が示すように変えられる。
【0100】
図10Aおよび
図10Bは、コヒーレント共有メモリ・システムのプロセッサによるバリア命令を使用して命令シーケンスの実行を調整するための例示的な方法を示す。共有メモリ・システムの一貫性は、コヒーレンス・ディレクトリを使用して実行されてもよい。共有メモリ・システムのプロセッサ、すなわちP0は、命令シーケンスの命令を実行することができる。命令の実行は、メモリ・アドレスAをメモリ・ラインに書き込むこと、すなわち、メモリ・アドレスAを有するメモリ・ラインの修正コピーをP0のプロセッサ・キャッシュ・メモリに充填することを含むことができる。命令シーケンスに含まれるメモリ・バリア命令は、P0によって実行される。メモリ・バリア命令の実行は、メモリ・アドレスAを有するメモリ・ラインの修正コピーについての共有メモリ・システム全体のメモリ一貫性の伝搬が完了され、確認されるまで、完了しないようにされる。例えば、P0ライトの効果は、例えばP1といった、共有メモリ・システムのさらなるプロセッサに伝搬しなければならない。最初に、プロセッサ・キャッシュ・メモリのどれも、アドレスAを有するメモリ・ラインのコピーを保持することができない。したがって、コヒーレンス・ディレクトリを有するメモリ・ハブ上のディレクトリ・テーブルは、メモリ・ライン・メモリ・アドレスAを参照するエントリを含まなくてもよい。
【0101】
ステップ600において、プロセッサP1は、「ロードA」というリード命令を実行することができ、「ロードA」というリード命令は、P1のローカル・プロセッサ・キャッシュ・メモリC1においてミスする。したがって、C1は、例えば、C2Dreq.I2S(Addr=A, Prop=NA)といった、コヒーレンス・ディレクトリへのリクエストを発行し、このリクエストは、P1の未伝搬バッファUB1に対するアクション(NA)が必要でないことを示す情報を含む。C2Dreq.I2S(Addr=A, Prop=NA)というリクエストは、プロセッサ・キャッシュ・メモリ(C)からコヒーレンス・ディレクトリ(D)に送られるリクエスト(req)であり、アドレスAを有するメモリ・ラインの共有リード・コピー(S)をリクエストする。ステップ602において、コヒーレンス・ディレクトリのディレクトリ・コントローラ、すなわちDCは、C2Dreq.I2S(Addr=A, Prop=NA)というリクエストを受け取る。DCは、コヒーレンス・ディレクトリのディレクトリ・テーブル、すなわちDT内で、メモリ・アドレスAについてのエントリを見つけない。したがって、DCは、不変タイプ、すなわちT=0、および、共有リード・タイプ、すなわちW=0の新しいエントリをDT内に作る。DT内に結果として生じるエントリは、例えば、[Addr=A. T=0. W=0. P1 set in ID field]という形のものであってもよい。DCは、メモリ・コントローラを使用して、リクエストされたデータ、すなわち、アドレスAを有するメモリ・ラインのコピーを、メイン・メモリから得る。ステップ604において、DCは、D2Creply.I2S(Addr=A, data, Prop=yes)というリプライをP1に送る。ステップ606において、P1は、存在する場合、アドレスAをUB1から削除するD2Creply.I2S(Addr=A, data, Prop=yes)というリプライを受け取る。D2Creply.I2S(Addr=A, data, Prop=yes)というリプライは、メモリ・ライン・アドレスAの共有リード・コピーについてのエントリを作ること、および、メモリ・ライン・アドレスAの受け取った共有リード・コピーをC1に充填することによって「ロードA」命令を満たすことを、ローカル・プロセッサ・キャッシュ・メモリC1に行わせる。
【0102】
ステップ608において、前述のアクションの完了後、P0は、「store A,value」という命令、すなわち、アドレスAを有するメモリ・ラインに値を書き込む命令を実行し、この命令は、P0のC0においてミスすると仮定される。したがって、C0は、P0の未伝搬バッファUB0に対するアクションがない(NA)C2Dreq.I2E(Addr=A, Prop=NA)というリクエストを発行し、リクエストをコヒーレンス・ディレクトリに送る。ステップ610において、DCは、メモリ・アドレスAを有するメモリ・ラインの排他ライト・コピーについてのC2Dreq.I2E(Addr=A, Prop=NA)というリクエストを受け取る。メモリ・アドレスAを有するメモリ・ラインについて、DCは、[Addr=A. T=0. W=0. P1 set in ID field]という上記で作った不変の共有リード・エントリをDT内で見つける。ステップ612において、DCは、C1内のメモリ・アドレスAを有するメモリ・ラインの共有リード・コピーをP1に無効化させるために、D2Creq.S2I(Addr=A, Prop=yes)というリクエストをP1に送る。さらに、DCは、一時テーブル、すなわちTT内の未使用エントリのうちのいずれか1つを選び、例えば、そのインデックスをTTindexAと表す。DCは、DTエントリを一時的タイプ、すなわちT=1に変え、[Addr=A.T=1. Pointer=TTindexA.]というエントリを生じる。さらに、DCは、各プロセッサ・キャッシュ・メモリに対して、(LATEST_STATE, RECEIVED_REQUEST, SENT_REQUEST, PropNotify?)という構文に従って一時的状態をエンコードするために、TTindexAにおけるTTエントリを、[P0(E, -, -, yes). P1(S,-, S2I, no). P2(I, -, -, no)]にセットする。TTエントリは、P0のC0が排他ライト・コピーを含み、C0への排他ライト・コピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬の確認が完了されるとすぐに知らされなければならないということを示す。P1は共有リード・コピーを含むが、コヒーレンス・ディレクトリは、P1のC1に送られた無効化リクエストの実行の確認を待つ。C0への排他ライト・コピーの充填についての一貫性の伝搬をP1のC1に知らせる必要はない。最終的に、共有メモリ・システムのさらなるプロセッサP2のプロセッサ・キャッシュ・メモリC2は、アドレスAを有するメモリ・ラインの無効コピーを含み、一貫性の伝搬について知らされる必要はない。DCは、メモリ・コントローラを使用して、リクエストされたデータ、すなわち、アドレスAを有するメモリ・ラインのコピーを、メイン・メモリから得る。ステップ614において、DCは、D2Creply.I2E(Addr=A, data, Prop=no)というリプライをプロセッサP0に送る。アドレスAを有するメモリ・ラインについての一時エントリは、未解決のSENT_REQUESTを伴うP0以外の少なくとも1つのプロセッサ、すなわちP1を識別するので、P0へのリプライは、Prop=noを含み、P0についての一時エントリは、PropNotify=yesを含む。このシナリオでは、P1は、SENT_REQUEST=S2Iを含む。
【0103】
ステップ616において、P1は、存在する場合、UB1からアドレスAを削除するD2Creq.S2I(Addr=A,Prop=yes)というリクエストを受け取る。D2Creq.S2I(Addr=A, Prop=yes)というリクエストは、アドレスAを有するメモリ・ラインの共有リード・コピーを無効化することを、プロセッサ・キャッシュ・メモリC1にさらに行わせる。ステップ618において、P1は、アドレスAを有するメモリ・ラインの共有リード・コピーの無効化を確認するC2Dreply.S2I(Addr=A, Prop=NA)というリプライを発行して、コヒーレンス・ディレクトリに送る。リプライは、UB1に対するアクションが必要でないこと、すなわちNAを示す。
【0104】
ステップ620において、P0は、アドレスAを有するメモリ・ラインの排他ライト・コピーをUB0に追加するD2Creply.I2E(Addr=A, data, Prop=no)というリプライを受け取る。D2Creply.I2E(Addr=A, data, Prop=no)というリプライは、アドレスAを有するメモリ・ラインの排他ライト・コピーについてのエントリを作ること、および、個々のメモリ・ラインをC0に充填することをC0に行わせる。さらに、「store A, value」という命令は、アドレスAを有するメモリ・ラインのコピーに個々の値を記憶させることによって実行される。一方では次のステップ612、616、および618、ならびに、その一方では次のステップ614および620は、並行に、または任意の順序で行われてもよい。
【0105】
ステップ622において、ディレクトリ・コントローラDCは、C2Dreply.S2I(Addr=A,Prop=NA)というリプライをプロセッサP1から受け取る。メモリ・アドレスAについて、DCは、[P0(E,-, -, yes). P1(S, -, S2I, no). P2(I, -, -, no)]というTTエントリへのポインタを有する[Addr=A. T=1. Pointer=TTindexA]という形の一時的タイプ、すなわちT=1のエントリをDT内で見つける。プロセッサP1からのC2Dreply.S2I(Addr=A, Prop=NA)というリプライは、TTエントリにおけるP1の値をDCに更新させる。更新されたTTエントリは、[P0(E, -, -, yes). P1(I, -, -, no). P2(I, -, -, no)]になる。更新されたTTエントリは、共有メモリ・システムのプロセッサのいずれかへの未解決のSENT_REQUESTを含まず、したがって、共有メモリ・システム全体の一貫性の伝搬を確認する。さらに、更新されたTTエントリは、一貫性の伝搬が確認されたときにP0の通知をリクエストするP0(E, -, -, yes)という値を含む。
【0106】
ステップ624において、DCは、D2Ccmd.Propagated(Addr=A,Prop=yes)というコマンドをプロセッサP0に送る。さらに、DCは、P0についてのPropNotifyをクリアする、すなわち、TTエントリを、[P0(E, -, -, no). P1(I, -, -, no). P2(I, -, -, no)]にセットする。このTTエントリは、共有メモリ・システムのプロセッサのいずれかへの未解決のSENT_REQUESTを含んでいないので、いずれの一時的状態も記述していない。言い換えれば、個々のTTエントリは、不変状態を記述している。したがって、DCは、アドレスAを有するメモリ・ラインについてのDT内のエントリを、不変タイプ、すなわちT=0、および、排他ライト・タイプ、すなわちW=1にセットする。結果として生じるDTエントリは、[Addr=A. T=0. W=1. P0 set in ID field]である。最終的に、DCは、TTエントリをTTindexAでクリアし、一時テーブル内の未使用エントリ278にTTindexAを返す。
【0107】
ステップ626において、P0は、メモリ・バリア命令を実行する。メモリ・バリア命令は、例えば、完了予定の命令シーケンスによるよりも前に発行された全てのライト命令を要求してもよい。メモリ・バリア命令は、UB0が空になるまで完了されないようにされる。P0は、D2Ccmd.Propagated(Addr=A, Prop=yes)をコヒーレンス・ディレクトリからまだ受け取っていないので、UB0は、アドレスAをまだ含んでおり、メモリ・バリア命令は、実行を完了しないようにされる。ステップ628において、C0は、アドレスAをUB0から削除するD2Ccmd.Propagated(Addr=A, Prop=yes)というリプライを受け取る。したがって、ステップ628において、P0上のUB0は空であり、メモリ・バリア命令は完了する。ステップ630において、P0に対する命令シーケンスの実行が続く。
【0108】
例示的なディレクトリからキャッシュへの(D2C)メッセージは、例えば、「D2Creq()」というリクエスト、「D2Creply()」というリプライ、および「D2Ccmd()」というコマンドを含むことができる。D2Creq()というリクエストは、C2Dreply()というその後のリプライを要求する。D2Creply()というリプライは、C2Dreq()という前のリクエストに応答して送られる。D2Ccmd()というコマンドには、その後のリプライがない。
【0109】
例示的なキャッシュからディレクトリへの(C2D)メッセージは、例えば、「C2Dreq()」というリクエスト、「C2Dreply()」というリプライ、および「C2Dcmd()」というコマンドを含むことができる。C2Dreq()というリクエストは、C2Dreply()というその後のリプライを要求する。C2Dreply()というリプライは、C2Dreq()という前のリクエストに応答して送られる。C2Dcmd()というコマンドには、その後のリプライがない。
【0110】
メモリ・アクセス・タイプのメッセージ、すなわち、メモリ・ラインをプロセッサ・キャッシュ・メモリに充填することに関するメッセージが、プロセッサ・デバイスによって送られるか、受け取られたとき、プロセッサ・デバイスの一貫性伝搬チェック・ユニットは、プロセッサ・デバイスの未伝搬バッファに対して行う必要があるかどうか、また、どのアクションが必要であるかについて判定するために、メッセージの一貫性伝搬通知フィールドをチェックすることができる。メモリ・アクセス・タイプのメッセージは、プロセッサ・キャッシュ・メモリ内のメモリ・ラインの無効化に関するメッセージをさらに含んでもよい。メモリ・アクセス・タイプ・メッセージ内の一貫性伝搬通知フィールドの可能な値は以下の値を含むことができ、「Prop=yes」は、存在する場合、個々のメッセージ内のメモリ・ラインのメモリ・アドレスを未伝搬バッファから削除する。「Prop=no」は、個々のメッセージ内のメモリ・ラインのメモリ・アドレスを未伝搬バッファに追加する。「Prop=NA」は、未伝搬バッファに対するアクションを行わない。
【0111】
以下のテーブルには、例示的なディレクトリからキャッシュへの(D2C)リクエストが示される。
【0112】
【0113】
以下のテーブルには、例示的なディレクトリからキャッシュへの(D2C)リプライが示される。
【0114】
【0115】
【0116】
以下のテーブルには、例示的なディレクトリからキャッシュへの(D2C)コマンドが示される。
【0117】
【0118】
以下のテーブルには、例示的なキャッシュからディレクトリへの(C2D)リクエストが示される。
【0119】
【0120】
以下のテーブルには、例示的なキャッシュからディレクトリへの(C2D)リプライが示される。
【0121】
【0122】
以下のテーブルには、例示的なキャッシュからディレクトリへの(C2D)コマンドが示される。
【0123】
【0124】
図11は、複数のプロセッサ・チップ201を備えるマルチプロセッサ・サーバ200の形のマルチプロセッサ・コンピュータ・システムの形の例示的なコヒーレント共有メモリ・アーキテクチャを示す。マルチプロセッサ・サーバ200は、メモリ・ハブ・チップ203のセットを備える。各プロセッサ・チップ201は、複数のポート224を備えてもよい。1つの実施形態によれば、プロセッサ・チップ201毎に用意されるポート224の数は、メモリ・ハブ・チップ203の数に等しくてもよい。各プロセッサ・チップ201は、プロセッサ・チップ201によって処理されることになるメモリ・ライン、すなわちメモリ・ラインをキャッシュするためのローカル・キャッシュ・メモリ204を提供される。サーバ200のプロセッサ・チップ201は、全く同じに構成されても、されなくてもよい。アプリケーション・ソフトウェアは、1つまたは複数のプロセッサ・チップ201上で実行されてもよく、したがって、所与のアプリケーションは、類似のまたは異なるプロセッサ・チップ201を暗黙的にまたは明示的に活用し、類似のまたは異なるプロセッサ・チップ201から利益を受けることができる。
【0125】
各メモリ・ハブ・チップ203は、例えば、一連のダイナミック・ランダム・アクセス・メモリ集積回路を備えるデュアル・インライン・メモリ・モジュール(DIMM)といった、複数のローカル・メモリ・モジュール234を提供されてもよい。したがって、各メモリ・ハブ・チップ203は、メモリ・ハブ・デバイスを実現する。さらに、各メモリ・ハブ・チップ203は、複数のポート222を備えることができる。例えば、メモリ・ハブ・チップ203毎のポート222の数は、プロセッサ・チップ201の数に等しくてもよい。さらに、個々のメモリ・ハブ・チップ203に対してローカルなメモリ・モジュール234に記憶されたメモリ・ラインについて、各メモリ・ハブ・チップ203は、1つまたは複数のプロセッサ・チップ201のキャッシュ・メモリ204に記憶されたメモリ・ラインについてのディレクトリ・ベースの一貫性を実現するためのコヒーレンス・ディレクトリ210を備えることができる。サーバ200のメモリ・ハブ・チップ203のセットについて、メモリ・ハブ・チップ203全てが、類似の機能を実行する各メモリ・ハブ・チップ203と全く同じにまたは同様に構成されてもよい。アプリケーション・ソフトウェアは、1つまたは複数のプロセッサ・チップ201上で実行されてもよく、したがって、所与のアプリケーションの性能は、典型的には、多くのかつ類似のメモリ・ハブ・チップ203によってサーブされているメモリから利益を受け、各特定のメモリ・アドレスは、単一の所定のメモリ・ハブ・チップ203によってサーブされている。
【0126】
各プロセッサ・チップ201は、例えば、シリアル通信接続といった、例えば、双方向ポイント・ツー・ポイント通信接続230を介して、各メモリ・ハブ・チップ203と通信連結されてもよい。したがって、各プロセッサ・チップ201は、メモリ・ハブ・チップ203の1つに対してローカルなメモリ・モジュール234のそれぞれへのメモリ・アクセスを提供されてもよい。メモリ・モジュール234へのアクセスは、ユニフォーム・メモリ・アクセス(UMA)アーキテクチャに基づいて提供されてもよい。所与のメモリ・ライン、すなわちメモリ・ラインは、同じメモリ・ハブ・チップ203に対してローカルな、補助記憶装置、すなわちメイン・メモリとしての1つまたは複数のメモリ・モジュール234に記憶されてもよい。複数のメモリ・ラインを含む所与のメモリ・ページは、例えば、全てのメモリ・ハブ・チップ203のメモリ・モジュール234全体にインターリーブされてもよい。
【0127】
コンピュータ・システムは、例えば、16個のプロセッサ・チップ201、および128個のメモリ・ハブ・チップ203を備えてもよい。この場合、各プロセッサ・チップ201は、メモリ・ハブ・チップ203のそれぞれに通信連結するために、128個のポート224を備えることができる。さらに、メモリ・ハブ・チップ203のそれぞれは、各メモリ・ハブ・チップ203が別個のポイント・ツー・ポイント通信接続230を介して各プロセッサ・チップ201に通信連結され得るように16個のポート222を提供されてもよい。
【0128】
本発明の態様は、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品の流れ図またはブロック図あるいはその両方を参照しながら本明細書に記述される。流れ図またはブロック図あるいはその両方の各ブロック、および、流れ図またはブロック図あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実行することができるということが理解されよう。
【0129】
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであってもよい。コンピュータ・プログラム製品は、本発明の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読ストレージ媒体(または複数の媒体)を含むことができる。
【0130】
コンピュータ可読ストレージ媒体は、命令実行デバイスによる使用のための命令を保持し、記憶することができる有形デバイスであることが可能である。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、または前述の任意の適切な組合せであってもよいがこれらに限定されない。コンピュータ可読ストレージ媒体のより具体的な例の完全に網羅されていないリストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ(ROM)、消去可能プログラマブル・リード・オンリ・メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリ・スティック、フロッピー(R)・ディスク、命令が記録されたパンチ・カードまたは溝内隆起構造などの機械的にエンコードされたデバイス、および前述の任意の適切な組合せを含む。コンピュータ可読ストレージ媒体は、本明細書で使用されるように、電波もしくは他の自由に伝搬する電磁波、導波路もしくは他の伝送媒体を通じて伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、またはワイヤを通じて伝送される電気信号など、本質的に過渡信号であると解釈されるべきではない。
【0131】
本明細書で記述されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体から個々のコンピューティング・デバイス/処理デバイスに、あるいは、例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、もしくはワイヤレス・ネットワーク、またはその組合せといったネットワークを介して外部コンピュータまたは外部ストレージ・デバイスに、ダウンロードされることが可能である。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを備えることができる。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受信し、個々のコンピューティング・デバイス/処理デバイス内のコンピュータ可読ストレージ媒体に記憶するためにコンピュータ可読プログラム命令を転送する。
【0132】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、インストラクション・セット・アーキテクチャ(ISA)命令、機械語命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、または、Smalltalk(R)、C++、もしくは同様のものなどのオブジェクト指向プログラミング言語、および、「C」プログラミング言語もしくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む1つもしくは複数のプログラミング言語の任意の組合せで書かれたソース・コードもしくはオブジェクト・コードであってもよい。コンピュータ可読プログラム命令は、スタンド・アロン・ソフトウェア・パッケージとして全面的にユーザのコンピュータ・システムのコンピュータ上で、部分的にユーザのコンピュータ・システムのコンピュータ上で実行することができ、部分的にユーザのコンピュータ・システムのコンピュータおよび部分的にリモート・コンピュータ上で、または全面的にリモート・コンピュータもしくはサーバ上で実行することができる。後者のシナリオにおいて、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくは広域ネットワーク(WAN)を含む任意のタイプのネットワークを介して、ユーザのコンピュータ・システムのコンピュータに接続されてもよく、または(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに接続されてもよい。いくつかの実施形態において、例えば、プログラム可能論理回路機器、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路機器は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路機器を個別化にすることによって、コンピュータ可読プログラム命令を実行することができる。
【0133】
本発明の態様は、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品の流れ図またはブロック図あるいはその両方を参照しながら本明細書に記述される。流れ図またはブロック図あるいはその両方の各ブロック、ならびに流れ図またはブロック図あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実行されることが可能であるということが理解されよう。
【0134】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサによって実行する命令が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックに指定された機能/作用を実行するための手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または機械を生み出す他のプログラム可能データ処理装置のプロセッサに提供されてもよい。コンピュータ、プログラム可能データ処理装置、または他のデバイス、あるいはその組合せに、特定の手法で機能するように指図できるこれらのコンピュータ可読プログラム命令は、命令が記憶されたコンピュータ可読ストレージ媒体が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックに指定された機能/作用の態様を実行する命令を含む製品を含むべく、コンピュータ可読ストレージ媒体にさらに記憶されてもよい。
【0135】
コンピュータ可読プログラム命令は、コンピュータ、他のプログラム可能装置、または他のデバイス上で実行する命令が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックに指定された機能/作用を実行するべく、コンピュータ実行処理を生み出すために、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップが行われるように、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにさらにロードされてもよい。
【0136】
図中の流れ図およびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能、および動作を示す。この点に関して、流れ図またはブロック図中の各ブロックは、指定された論理機能を実行するための1つまたは複数の実行可能命令を含む命令のモジュール、セグメント、または一部を表すことができる。いくつかの代替実装形態において、ブロックに記された機能は、図に記された順序と異なる順序で行われてもよい。例えば、連続して示された2つのブロックは、実際には、実質的に並行に実行されてもよく、または、ブロックは、時には、含まれる機能に応じて逆の順序で実行されてもよい。ブロック図または流れ図あるいはその両方の各ブロック、ならびに、ブロック図または流れ図あるいはその両方におけるブロックの組合せは、指定された機能もしくは作用を実行する、または特殊用途のハードウェアおよびコンピュータ命令の組合せを実行する、特殊用途のハードウェア・ベースのシステムによって実行されることが可能であるということにも留意されたい。
【0137】
上述の特徴の可能な組合せは、以下であることが可能である。
1.コヒーレント共有メモリ・システムのプロセッサ・デバイスによる複数の命令を含む命令シーケンスの実行を調整するための方法であって、プロセッサ・デバイスが、プロセッサ・キャッシュ・メモリに動作可能なように接続され、方法が、
・ プロセッサ・デバイスによって命令シーケンスの命令を実行することであって、命令の実行が、共有メモリ・システムのメイン・メモリのメモリ・ラインのコピーをプロセッサ・キャッシュ・メモリに充填することをプロセッサ・デバイスに行わせる、実行すること、
・ メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないことを示す第1のフラグ情報を検知すると、プロセッサ・デバイスによって、個々のメモリ・ラインにフラグを付けること、
・ メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたことを示す第2のフラグ情報を検知すると、プロセッサ・デバイスによって、個々のメモリ・ラインのフラグを外すこと、
・ 命令シーケンスのメモリ・バリア命令を実行すると、メモリ・ラインがフラグを付けられている間、プロセッサ・デバイスによって、メモリ・バリア命令の実行の完了を妨げること
を含む、方法。
2.メモリ・バリア命令の実行の完了が、プロセッサ・デバイスによって以前にフラグを付けられた全てのメモリ・ラインがフラグを外されるまで妨げられる、項目1に記載の方法。
3.メモリ・ラインのフラグ付けが、メモリ・ラインの識別子をプロセッサ・デバイスのバッファに追加することを含み、フラグ付きメモリ・ラインのフラグ外しが、プロセッサのバッファからメモリ・ラインの識別子を削除することを含む、項目1または2のいずれかに記載の方法。
4.バッファに記憶されたフラグ付きメモリ・ラインの識別子が、メイン・メモリ内の個々のメモリ・ラインのメモリ・アドレスを含む、項目3に記載の方法。
5.メモリ・バリア命令の実行の完了が、プロセッサ・デバイスのバッファが空になるまで妨げられる、項目3または4のいずれかに記載の方法。
6.共有メモリ・システムのメモリ一貫性が、コヒーレンス・ディレクトリを使用して実現される、項目1ないし5のいずれかに記載の方法。
7.第1および第2のフラグ情報のうちの少なくとも1つが、コヒーレンス・ディレクトリからプロセッサ・デバイスによって受け取られたメッセージによって提供される、項目6に記載の方法。
8.第1および第2のフラグ情報のうちの少なくとも1つが、コヒーレンス・ディレクトリにプロセッサ・デバイスによって送られたメッセージによって提供される、項目6または7のいずれかに記載の方法。
9.共有メモリ・システムのメモリ一貫性が、ブロードキャスティングを使用して実現される、項目1ないし5のいずれかに記載の方法。
10.メモリ・ラインのコピーをプロセッサ・キャッシュ・メモリに充填することをプロセッサ・デバイスに行わせる命令が、個々のメモリ・ラインへのライト・アクセスを指定する命令である、項目1ないし9のいずれかに記載の方法。
11.共有メモリ・システム全体のメモリ一貫性の伝搬が、共有メモリ・システムのさらなるプロセッサ・デバイスのリモート・プロセッサ・キャッシュ・メモリによって使用されるメモリ・ラインのさらなるコピーを無効化することを含む、項目1ないし10のいずれかに記載の方法。
12.プロセッサ・キャッシュ・メモリの内容の修正に関するものであり、プロセッサ・デバイスによって処理されたメッセージが、一貫性伝搬フィールドを含み、一貫性伝搬フィールドが、修正についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないことを示すフラグ情報、修正についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたことを示すフラグ情報、または、フラグを付けるアクションも、フラグを外すアクションも要求されていないことを示すフラグ情報のうちの1つを含む、項目1ないし11のいずれかに記載の方法。
13.コヒーレント共有メモリ・システムのプロセッサ・デバイスであって、プロセッサ・キャッシュ・メモリに動作可能なように接続され、複数の命令を含む命令シーケンスの実行を調整するように構成され、調整することが、
・ 命令シーケンスの命令を実行することであって、命令の実行が、共有メモリ・システムのメイン・メモリのメモリ・ラインのコピーをプロセッサ・キャッシュ・メモリに充填することをプロセッサ・デバイスに行わせる、実行すること、
・ メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないことを示すフラグ情報を検知すると、プロセッサ・デバイスによって、個々のメモリ・ラインにフラグを付けること、
・ メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたことを示すフラグ情報を検知すると、プロセッサ・デバイスによって、個々のメモリ・ラインのフラグを外すこと、
・ 命令シーケンスのメモリ・バリア命令を実行すると、メモリ・ラインがフラグを付けられている間、メモリ・バリア命令の実行の完了を妨げること
を含む、プロセッサ・デバイス。
14.メモリ・バリア命令の実行の完了が、プロセッサ・デバイスによって以前にフラグを付けられた全てのメモリ・ラインがフラグを外されるまで妨げられる、項目13に記載のプロセッサ・デバイス。
15.プロセッサ・デバイスが、コピーがプロセッサ・キャッシュ・メモリに充填されたが、個々のコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないメモリ・ラインを登録するためのバッファを備え、メモリ・ラインのフラグ付けが、メモリ・ラインの識別子をプロセッサ・デバイスのバッファに追加することを含み、フラグ付きメモリ・ラインのフラグ外しが、プロセッサのバッファからメモリ・ラインの識別子を削除することを含む、項目13または14のいずれかに記載のプロセッサ・デバイス。
16.バッファに記憶されたフラグ付きメモリ・ラインの識別子が、メイン・メモリ内の個々のメモリ・ラインのメモリ・アドレスを含む、項目15に記載のプロセッサ・デバイス。
17.メモリ・バリア命令の実行の完了が、プロセッサ・デバイスのバッファが空になるまで妨げられる、項目15または16のいずれかに記載のプロセッサ・デバイス。
18.共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリを管理するための方法であって、
・ コヒーレンス・ディレクトリによって、共有メモリ・システムのメイン・メモリのメモリ・ラインに割り当てられたフラグ情報を維持することであって、共有メモリ・システムのプロセッサ・デバイスが、プロセッサ・デバイスに動作可能なように接続されたプロセッサ・キャッシュ・メモリへのメモリ・ラインのコピーの充填を開始し、フラグ情報が、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたかどうかを示す、維持すること、
・ プロセッサ・デバイスにコヒーレンス・ディレクトリによって送られることになるメッセージにフラグ情報を含めること、
・ コヒーレンス・ディレクトリによってメッセージをプロセッサ・デバイスに送ること
を含む、方法。
19.コヒーレンス・ディレクトリが、メモリ・ラインのコピーの充填についてのメモリ一貫性を共有メモリ・システムのさらなるプロセッサ・デバイスのリモート・プロセッサ・キャッシュ・メモリに伝搬させるために、リモート・プロセッサ・キャッシュ・メモリの内容の修正が必要であると判定すると、メモリ・ラインに割り当てられたフラグ情報の維持を開始する、項目18に記載の方法。
20.コヒーレンス・ディレクトリが、メモリ・ラインのコピーの充填についてのメモリ一貫性をリモート・プロセッサ・キャッシュ・メモリに伝搬させるために、リモート・プロセッサ・キャッシュ・メモリの内容の修正をリクエストするリクエストをリモート・プロセッサ・キャッシュ・メモリに送る、項目19に記載の方法。
21.コヒーレンス・ディレクトリによってリクエストされた修正が、リモート・プロセッサ・キャッシュ・メモリに含まれるメモリ・ラインのさらなるコピーの無効化を含む、項目20に記載の方法。
22.コヒーレンス・ディレクトリが、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬による、共有メモリ・システムのさらなるプロセッサ・デバイスのプロセッサ・キャッシュ・メモリの内容の修正を追跡するためのレジスタを備える、項目19に記載の方法。
23.レジスタが、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたとき、コヒーレンス・ディレクトリによって通知されることになる共有メモリ・システムのプロセッサ・デバイスのプロセッサ・キャッシュ・メモリを識別する一貫性伝搬通知指標を含む、項目22に記載の方法。
24.共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリであって、
・ 共有メモリ・システムのメイン・メモリのメモリ・ラインに割り当てられたフラグ情報を維持することであって、共有メモリ・システムのプロセッサ・デバイスが、プロセッサ・デバイスに動作可能なように接続されたプロセッサ・キャッシュ・メモリへのメモリ・ラインのコピーの充填を開始し、フラグ情報が、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたかどうかを示す、維持すること、
・ メッセージにフラグ情報を含めること、
・ メッセージをプロセッサ・デバイスに送ること
を行うように構成された、コヒーレンス・ディレクトリ。
25.共有メモリ・システムのメモリ一貫性を実現するコヒーレンス・ディレクトリ、メイン・メモリ、および、プロセッサ・キャッシュ・メモリに動作可能なように接続されたプロセッサ・デバイスを備えるコヒーレント共有メモリ・システムであって、
プロセッサ・デバイスが、複数の命令を含む命令シーケンスの実行を調整するように構成され、調整することが、
・ 命令シーケンスの命令を実行することであって、命令の実行が、メイン・メモリのメモリ・ラインのコピーをプロセッサ・キャッシュ・メモリに充填することをプロセッサ・デバイスに行わせる、実行すること、
・ メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないことを示すフラグ情報を検知すると、プロセッサ・デバイスによって、個々のメモリ・ラインにフラグを付けること、
・ メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたことを示すフラグ情報を検知すると、プロセッサ・デバイスによって、個々のメモリ・ラインのフラグを外すこと、
・ 命令シーケンスのメモリ・バリア命令を実行すると、メモリ・ラインがフラグを付けられている間、メモリ・バリア命令の実行の完了を妨げること
を含み、
コヒーレンス・ディレクトリが、メモリ・ラインのコピーの充填の開始を判定すると、メイン・メモリのメモリ・ラインに割り当てられたフラグ情報を維持するように構成され、フラグ情報が、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたかどうかを示し、維持することが、
・ 最初に、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されていないことを示すフラグ情報を第1のメッセージに含めること、
・ 第1のメッセージをプロセッサ・デバイスに送ること、
・ 伝搬の確認を得ると、フラグ情報を更新し、メモリ・ラインのコピーの充填についての共有メモリ・システム全体のメモリ一貫性の伝搬が確認されたことを示す更新したフラグ情報を第2のメッセージに含めること、
・ 第2のメッセージをプロセッサ・デバイスに送ること
を含む、
コヒーレント共有メモリ・システム。