【キャッシュコヒーレンス】
キャッシュコヒーレンス とは?
公開:
💡 手元のメモが食い違わないよう、CPU同士で調整する
複数のCPUコアなどが持つキャッシュで、同じメモリ位置の読み書きに食い違いが生じないよう調整する仕組み。異なる位置の読み書きの順序保証とは別の概念。
📌 このページのポイント
読み取り用のコピーを複数のコアが持つことはあるよ。でも同じ場所を片方が書き換えたあとも、もう片方が古いコピーを使い続けたら困るよね。その整合性を調整する仕組みがキャッシュコヒーレンスなんだ。
書き換えた値を全部のキャッシュへ送るの?
そうとは限らないよ。無効化方式なら、コア1が書き込み権限を得る際に、ほかのコアが持つ同じキャッシュラインのコピーを無効にする。コア2は次に必要になったとき、有効なデータを取り直すんだ。図はこの方式の簡略例だよ。
必要だよ。同じ場所の整合性と、異なる場所の更新がどんな順序で見えるかは別なんだ。「データを書いて、準備完了フラグを立てる」なら、読む側も含めた適切な同期が必要だし、読み取り・加算・書き戻しの一連の操作も勝手に原子的にはならないよ。
もっと詳しく知りたい人へ
キャッシュが整合していれば、メインメモリも常に最新ですか?
そうとは限りません。書き戻し方式では変更した値をキャッシュに保持し、後でメインメモリへ書き戻すことがあります。コヒーレンスは、各キャッシュと主記憶にいつでも同一の値が並んでいることを意味しません。
まとめ:ざっくりこれだけ覚えればOK!
「キャッシュコヒーレンス」って出てきたら「同じデータのキャッシュ同士を整合させる仕組み」と思えればだいたいOK!