キャッシュコヒーレンス

2つのクライアントが特定のメモリブロックのキャッシュコピーを保持しており、一方のクライアントがそのブロックを変更した場合、もう一方のクライアントのコピーは無効化または更新される必要があります。そうでない場合、システムは不整合状態になります。つまり、同じメモリブロックの2つの異なるレコードが保持され、どちらも最新であると主張していることになります。
一貫性のないキャッシュ: キャッシュには、単一のアドレス位置の異なる値があります。

コンピュータアーキテクチャにおいて、キャッシュコヒーレンスとは、複数のローカルキャッシュに格納される共有リソースデータの一貫性を指します。キャッシュコヒーレンスが確保されたシステムでは、複数のクライアントが共有メモリリソースの同じ領域のキャッシュコピーを保持している場合、すべてのコピーは同じです。キャッシュコヒーレンスがないと、あるクライアントがその領域に加えた変更が他のクライアントには反映されず、異なるクライアント間でデータが一致しないとエラーが発生する可能性があります。[ 1 ]

キャッシュコヒーレンスプロトコルは、キャッシュの一貫性を維持するために使用されます。主な2つのタイプは、スヌーピングプロトコルとディレクトリベースプロトコルです。

キャッシュ コヒーレンスは、各CPU が共有メモリ リソースの独自のローカル キャッシュを持つ可能性が あるマルチプロセッシングシステムで特に重要です。

コヒーレント キャッシュ: すべてのキャッシュのコピーの値は同じです。

概要

各プロセッサに個別のキャッシュメモリを備えた共有メモリ型マルチプロセッサシステムでは、共有データの複数のコピーを持つことが可能です。1つはメインメモリに、もう1つはデータを要求した各プロセッサのローカルキャッシュに保存されます。データのコピーの1つが変更されると、他のコピーにもその変更が反映されます。キャッシュコヒーレンスとは、共有オペランド(データ)の値の変更がシステム全体にタイムリーに伝播することを保証する仕組みです。[ 2 ]

キャッシュコヒーレンスの要件は以下のとおりである。[ 3 ]

書き込み伝播
いずれかのキャッシュ内のデータへの変更は、ピア キャッシュ内の (そのキャッシュ ラインの) 他のコピーに伝播される必要があります。
トランザクションのシリアル化
単一のメモリ位置への読み取り/書き込みは、すべてのプロセッサで同じ順序で認識される必要があります。

理論的には、コヒーレンスはロード/ストア粒度で実行できます。しかし、実際にはキャッシュブロック粒度で実行されるのが一般的です。[ 4 ]

意味

コヒーレンスは、単一のアドレス位置への読み取りと書き込みの動作を定義します。[ 3 ]

マルチプロセッサシステムでは、複数のプロセッサがメモリ位置Xのコピーをキャッシュしているものとする。キャッシュコヒーレンスを実現するには、以下の条件が必要である。[ 5 ]

  1. プロセッサ P が位置 X に対して読み取りを行った後、同じプロセッサ P が位置 X に書き込みを行い、P による書き込み命令と読み取り命令の間に別のプロセッサによる位置 X への書き込みが行われない場合、X は常に P によって書き込まれた値を返す必要があります。
  2. プロセッサP1が位置Xへの読み取りを行い、その後に別のプロセッサP2がXに書き込みを行う場合、この2つのアクセスの間に他のプロセッサによるXへの書き込みが行われず、読み取りと書き込みが十分に分離されている限り、Xは常にP2によって書き込まれた値を返す必要があります。この条件は、メモリのコヒーレントビューの概念を定義します。書き込みを共有メモリ位置に伝播することで、すべてのキャッシュがメモリのコヒーレントビューを持つことが保証されます。プロセッサP2による書き込み後であっても、プロセッサP1がXの古い値を読み取る場合、メモリはインコヒーレントであると言えます。

上記の条件は、キャッシュコヒーレンスに必要な書き込み伝播の基準を満たしています。しかし、トランザクションのシリアル化の条件を満たしていないため、十分ではありません。これをよりわかりやすく説明するために、次の例を考えてみましょう。

マルチプロセッサ システムは 4 つのプロセッサ P1、P2、P3、P4 で構成され、すべてのプロセッサに初期値 0 の共有変数Sのキャッシュされたコピーが含まれています。プロセッサ P1 は、キャッシュされたコピー内のSの値を 10 に変更し、続いてプロセッサ P2 がキャッシュされたコピー内のSの値を 20 に変更します。書き込みの伝播のみを保証する場合、 P3 と P4 は、 P1 と P2 によるSの変更を確実に認識します。ただし、 P3 は、 P2 による変更を確認した後に P1 による変更を確認する可能性があり、その場合、Sの読み取りで 10 を返します。一方、 P4 は、 P1 と P2 による変更をその変更順に確認し、Sの読み取りで 20 を返します。これで、プロセッサ P3 と P4 は、メモリの一貫性のないビューを持つことになります。

したがって、トランザクションのシリアル化を満たし、キャッシュの一貫性を実現するには、このセクションで説明した前の 2 つの条件に加えて、次の条件も満たす必要があります。

  • 同じ場所への書き込みは順序付けられていなければなりません。言い換えれば、場所Xが任意の2つのプロセッサから2つの異なる値AとBをこの順序で受け取った場合、プロセッサは場所XをBとして読み取ってからAとして読み取ることはできません。場所Xは、値AとBの順序で読み取られなければなりません。[ 6 ]

コヒーレントシステムの別の定義は、シーケンシャルコンシステントメモリモデルの定義によるものである。「キャッシュコヒーレントシステムは、各スレッドのプログラム順序を尊重する完全な順序で、すべてのスレッドのロードとストアを単一のメモリ位置に対して実行するように見える必要がある」。[ 4 ]したがって、キャッシュコヒーレントシステムとシーケンシャルコンシステントシステムの唯一の違いは、定義で言及されているアドレス位置の数(キャッシュコヒーレントシステムの場合は単一のメモリ位置、シーケンシャルコンシステントシステムの場合はすべてのメモリ位置)である。

別の定義は、「同じメモリ位置へのすべての書き込みが一定の順序で実行される場合、マルチプロセッサはキャッシュ一貫性がある」というものである。[ 7 ]

稀ではありますが、特にアルゴリズムにおいては、コヒーレンスは参照の局所性を指すこともあります。同じデータの複数のコピーが異なるキャッシュに同時に存在する可能性があり、プロセッサが自身のコピーを自由に更新できる場合、メモリのビューに矛盾が生じる可能性があります。

一貫性メカニズム

一貫性を保証するための最も一般的な 2 つのメカニズムはスヌーピングディレクトリ ベースであり、それぞれに利点と欠点があります。[ 8 ]スヌーピング ベースのプロトコルは、十分な帯域幅が利用できる場合は、すべてのトランザクションがすべてのプロセッサから参照される要求/応答であるため、高速になる傾向があります。欠点は、スヌーピングがスケーラブルではないことです。すべての要求をシステム内のすべてのノードにブロードキャストする必要があるため、システムが大きくなるにつれて、(論理または物理)バスのサイズとそれが提供する帯域幅を増やす必要があります。一方、ディレクトリは、レイテンシが長くなる傾向がありますが (3 ホップの要求/転送/応答の場合)、メッセージがポイント ツー ポイントでありブロードキャストされないため、使用する帯域幅ははるかに少なくなります。このため、大規模なシステム (>64 プロセッサ) の多くでは、このタイプのキャッシュ一貫性が使用されています。

スヌーピング

1983年に初めて導入された[ 9 ]スヌーピングは、個々のキャッシュがキャッシュされているメモリ位置へのアクセスのアドレスラインを監視するプロセスです。[ 5 ]書き込み無効化プロトコル書き込み更新プロトコルはこのメカニズムを利用しています。
スヌーピング機構では、スヌープフィルタが複数のエントリを保持することでスヌーピングトラフィックを削減します。各エントリは、1つ以上のノードが所有する可能性のあるキャッシュラインを表します。エントリの1つを置き換える必要がある場合、スヌープフィルタは、各エントリ内のプレゼンスベクトルから判断される、所有ノード数が最も少ないキャッシュラインを表すエントリを選択します。所有ノード数が最も少ないキャッシュラインが複数ある場合は、時間的アルゴリズムまたはその他のアルゴリズムを使用して選択を絞り込みます。[ 10 ]

ディレクトリベース

ディレクトリベースのシステムでは、共有されるデータはキャッシュ間の一貫性を維持する共通ディレクトリに配置されます。このディレクトリは、プロセッサがプライマリメモリからキャッシュへのエントリのロード許可を求める際に通過するフィルタとして機能します。エントリが変更されると、ディレクトリはそのエントリを含む他のキャッシュを更新するか、無効化します。

分散共有メモリシステムはこれらのメカニズムを模倣して、疎結合システム内のメモリブロック間の一貫性を維持しようとします。[ 11 ]

コヒーレンスプロトコル

コヒーレンス・プロトコルは、マルチプロセッサシステムにおいてキャッシュ・コヒーレンスを適用します。その目的は、2つのクライアントが同じ共有データに対して異なる値を見ることがないようにすることです。

プロトコルは、一貫性のための基本要件を実装する必要があります。対象システムまたはアプリケーションに合わせてカスタマイズできます。

プロトコルは、スヌーピー型とディレクトリベースに分類することもできます。初期のシステムでは、一般的にディレクトリベースのプロトコルが使用されていました。ディレクトリは共有されるデータと共有者を追跡していました。スヌーピー型プロトコルでは、トランザクション要求(読み取り、書き込み、またはアップグレード)がすべてのプロセッサに送信されます。すべてのプロセッサは要求をスヌープし、適切に応答します。

スヌーピー プロトコルでの書き込み伝播は、次のいずれかの方法で実装できます。

書き込み無効化
キャッシュがコピーを持っている場所への書き込み操作が観察されると、キャッシュコントローラはスヌープされたメモリ場所のコピーを無効にし、次のアクセス時にメインメモリから新しい値を読み取るように強制します。[ 5 ]
書き込み更新
キャッシュにコピーがある場所への書き込み操作が検出されると、キャッシュ コントローラはスヌープされたメモリ場所の独自のコピーを新しいデータで更新します。

プロトコル設計において、共有データのいずれかのコピーが変更されるたびに、他のすべてのコピーをその変更を反映するために「更新」する必要があると規定されている場合、それは書き込み更新プロトコルです。一方、いずれかのプロセッサがキャッシュされたコピーに書き込むと、他のプロセッサはキャッシュされたコピーを破棄または無効化する必要があると規定されている場合、それは書き込み無効化プロトコルです。

ただし、スケーラビリティはブロードキャスト プロトコルの欠点の 1 つです。

コヒーレンスを維持するために、 MSIMESI(別名イリノイ)、MOSIMOESIMERSIMESIFライトワンス、Synapse、Berkeley、FireflyDragonプロトコルなど、さまざまなモデルとプロトコルが考案されています。[ 2 ] 2011年にARM社はSoCのコヒーレンス処理用にAMBA 4 ACE [ 12 ]を提案しました。ARM社のAMBA CHI(コヒーレントハブインターフェース)仕様[ 13 ]はAMBA5仕様グループに属し、完全にコヒーレントなプロセッサを接続するためのインターフェースを定義しています。

参照

参考文献

  1. ^ Marowka, Ami (2010-01-01). 「第2章 メニーコアプログラミングの落とし穴と問題点」. Advances in Computers . Vol. 79. Elsevier. pp.  71– 117. doi : 10.1016/s0065-2458(10)79002-1 . ISBN 978-0-12-381027-4
  2. ^ a b E. Thomadakis, Michael (2011). NehalemプロセッサとNehalem-EP SMPプラットフォームのアーキテクチャ(PDF) . テキサスA&M大学. p. 30. 2014年8月11日時点のオリジナル(PDF)からのアーカイブ。
  3. ^ a b Yan, Solihin.並列マルチコアアーキテクチャの基礎. OCLC 884540034 . 
  4. ^ a b Sorin, Daniel J.; Hill, Mark D.; Wood, David Allen (2011-01-01).メモリ一貫性とキャッシュコヒーレンス入門. Morgan & Claypool Publishers. OCLC 726930429 . 
  5. ^ a b cパターソンとヘネシー著『コンピュータの構成と設計 - 第4版ISBN 978-0-12-374493-7
  6. ^ Neupane, Mahesh (2004年4月16日).「キャッシュコヒーレンス」 (PDF). 2010年6月20日時点のオリジナル(PDF) からのアーカイブ。
  7. ^ Steinke, Robert C.; Nutt, Gary J. (2004-09-01). 「共有メモリの一貫性に関する統一理論」. J. ACM . 51 (5): 800– 849. arXiv : cs/0208027 . doi : 10.1145/1017460.1017464 . ISSN 0004-5411 . S2CID 3206071 .  
  8. ^パターソン, デイビッド・A.; ヘネシー, ジョン・L. (1990). 『コンピュータアーキテクチャ 定量的アプローチ』 モルガン・カウフマン出版社. pp.  467– 468. ISBN 1-55860-069-8
  9. ^ 「Ravishankar, Chinya; Goodman, James (1983年2月28日). 「複数のマイクロプロセッサのためのキャッシュ実装」PDF)。IEEE COMPCON議事録:346–350
  10. ^ Rasmus Ulfsnes (2013年6月).「スヌープベースのキャッシュコヒーレンスプロトコルのためのスヌープフィルタの設計」Wayback Machineに2014年2月1日アーカイブ(PDF). diva-portal.org . ノルウェー科学技術大学. 2014年1月20日閲覧。
  11. ^ 「講義18:スヌーピングとディレクトリベースの一貫性」(PDF) . Berkeley.edu . 2023年5月14日閲覧
  12. ^ Kriouile (2013年9月16日).キャッシュコヒーレントシステムオンチップ向けACE仕様の形式分析. 『産業用クリティカルシステムのための形式手法』 . Springer Berlin Heidelberg. ISBN 978-3-642-41010-9
  13. ^ Ltd, Arm. 「AMBA | AMBA 5」 . Arm Developer . 2021年4月27日閲覧。

さらに読む