キャッシュコヒーレンシとは
キャッシュコヒーレンシとは、同じ番地のデータの写しが複数の場所にあるとき、その内容をそろえておくことです。 写しは速さのために作られますが、写しである以上、原本とずれる余地がついて回ります。
キャッシュは、速くするために写しを持つ仕組みです。
電子情報通信学会の公開知識ベース『知識の森』6群4編4章「記憶」は、いちど参照した番地の中身を速い記憶装置へ写しておけば、同じ番地を次に参照するときが速くなると述べています。さらに、写す単位をある程度の大きさの塊にしておけば、その近くの番地を参照するときも速く済むとしています。
キャッシュにあるのは写しです。原本は主記憶にあります。読み出しだけなら、2つは同じ内容のまま並びます。
書き込んだ時点で、食い違います
Section titled “書き込んだ時点で、食い違います”同章は続けて、キャッシュへ書き込みが起きた時点で新しい値がキャッシュ側だけにある状態になるため、キャッシュ側の変更を主記憶へ反映させる必要があると記しています。
反映の仕方として、同章は2つを挙げています。
ひとつはストアスルー(ライトスルー)で、キャッシュを書き換えると同時に、主記憶へも同じ書き換えを流す方式です。原本がすぐ最新になり、制御もこみ入らずに済みます。引き換えに主記憶への書き込みが毎回走るため、主記憶の待ち時間から切り離すにはライトバッファのような受け皿が要ります。
もうひとつはライトバックで、書き込みの時点ではキャッシュだけを直し、その塊が主記憶とずれていることを覚えておく方式です。塊がキャッシュから追い出される段になって、はじめて内容を主記憶へ返します。同じ塊を何度書き換えても主記憶へ返すのは一度で足りるため、主記憶への書き込み回数を切り詰められます。以上は同章の記述です。
ライトバックの速さには代償があります。最新の値がキャッシュだけにある時間が生まれます。
誰が一致を保証するのでしょうか
Section titled “誰が一致を保証するのでしょうか”食い違いを直す役目は、どこかが引き受ける必要があります。
ルネサス エレクトロニクスのSH-4Aコア拡張機能 ユーザーズマニュアル ハードウェア編は、キャッシュ操作命令の節で、キャッシュと外部メモリとのコヒーレンシはソフトウェアで保証するよう求めています。同社のSH-4Aコアについての記述です。
そのために用意されている命令として、同マニュアルは6つを挙げています。OCBIはオペランドキャッシュを無効にし、写しをそのまま捨てます。OCBPは、内容を外部メモリへ返したうえで無効にします。OCBWBは、内容を外部メモリへ返します。MOVCA.Lはオペランドキャッシュを確保します。ICBIは命令キャッシュを無効にします。SYNCOはデータ転送の完了を待ちます。
無効にすることと、内容を外部メモリへ返すことは、別の操作です。写しを捨てるのか、写しの内容を原本へ返すのかで、目的が違います。この2つを区別している点に、コヒーレンシの考え方がよく表れています。
ハードウェアが引き受ける箇所もあります
Section titled “ハードウェアが引き受ける箇所もあります”同じマニュアルには、逆向きの記述もあります。
同マニュアルは、オペランドキャッシュのコヒーレンシ制御のために、SuperHywayバスから届くPURGEおよびFLUSHトランザクションを受け付けられるとしています。PURGEでは、オペランドキャッシュを検索して当たった行を無効にし、その行が書き換え済み(ダーティ)であれば内容を外部メモリへ返します。FLUSHでは、当たった行が書き換え済みであれば内容を外部メモリへ返し、行そのものは有効なまま残します。
さらに同マニュアルは、内蔵メモリのうちUメモリの読み出しバッファについて、DMACなどのバスマスタがUメモリを書き換えた場合にもハードウェアが無効化を行うため、ここはソフトウェアでコヒーレンシを保証しなくてよいと記しています。いずれも同じSH-4Aコアについての記述です。
同じ内蔵メモリでも、命令を配置するILメモリでは、ソフトウェア側の手順が1つ増えます。同マニュアルは、ILメモリへ命令を書き込んだあと、書き換え後の命令へ分岐する前にSYNCOとICBIを実行するよう求めています。
ひとつのチップの中で、保証する側が箇所ごとに決まっています。
そろえる相手は増えていきます
Section titled “そろえる相手は増えていきます”写しのある場所は、増える一方です。
JEITAの半導体用語集は、マルチコアの見出し語で、仕事を複数のコアへ割り振って進めること、コアどうしは基本的に別々に動くものの、2次キャッシュのように共有される部分もあることを記しています。
電子情報通信学会の同知識ベース6群5編2章も、チップマルチプロセッサ(マルチコアプロセッサ)は1つのチップに複数のコアを載せた形であり、演算器やレジスタといった計算資源はコアごとに別々に持つと述べています。
実機の構成にも同じことが起きます。理化学研究所 計算科学研究センターのシステム紹介は、スーパーコンピュータ「富岳」の1ノードに計算コアが48個あり、L1データキャッシュがコアあたり64KiB、L2がCMG(Core Memory Group)あたり8MiBで、CMGが4つあると記載しています。学会の記述は2010年時点のもの、理化学研究所の値は同センターの公表値です。
同じ番地のデータが、あるコアのL1にも、CMGのL2にも、主記憶にも同時に存在し得ます。そこへDMACのような転送装置も加わります。写しの数だけ、そろえる相手が増えます。
保証に条件が付く場面もあります
Section titled “保証に条件が付く場面もあります”一致には条件が付きます。
ルネサスの同マニュアルは、命令TLB多重ヒット例外やデータTLB多重ヒット例外が発生するとリセットになり、キャッシュのコヒーレンシは保証の対象外だと記しています。同じくSH-4Aコアについての記述です。
どの範囲で、誰が、どの操作によって一致を保つのでしょうか。資料がそこまで書き分けているのは、条件ごとに責任の所在を示す必要があるからです。
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”キャッシュコヒーレンシとは何ですか?
同じ番地のデータの写しが複数の場所にあるとき、その内容をそろえておくことです。ルネサス エレクトロニクスのSH-4A向けマニュアルは、キャッシュと外部メモリとのコヒーレンシという言い方でこの関係を記しています。
なぜ写しができるのですか?
速くするためです。電子情報通信学会の公開知識ベースは、いちど参照した番地の中身を速い記憶装置へ写しておけば、同じ番地を次に参照するときが速くなると述べています。
キャッシュと主記憶の値は、いつずれるのですか?
書き込んだときです。同知識ベースは、キャッシュへ書き込みが起きると、新しい値はキャッシュ側だけにあり、主記憶には書き込み前の値が残るとしています。
ライトスルーとライトバックの使い分けはどうなりますか?
主記憶へ反映する時点が別です。同知識ベースによれば、ライトスルーは同じ更新を主記憶にも行い、ライトバックはキャッシュだけを更新して、そのブロックが追い出されるときに主記憶へ返します。
一致は誰が保証するのですか?
箇所ごとに決まっています。ルネサスの同マニュアルは、キャッシュと外部メモリとのコヒーレンシをソフトウェアで保証するよう求める一方、内蔵メモリのうちUメモリの読み出しバッファについてはハードウェアが無効化を引き受けるとしています。
マルチコアでは何が変わりますか?
写しのある場所が増えます。JEITAの半導体用語集は、マルチコアではコアどうしが基本的に別々に動くものの、2次キャッシュのように共有される部分もあると述べています。
保証に条件が付くことはありますか?
あります。ルネサスの同マニュアルは、命令TLB多重ヒット例外やデータTLB多重ヒット例外が発生するとリセットになり、キャッシュのコヒーレンシは保証の対象外だと記しています。
比較・違いを学ぶ
Section titled “比較・違いを学ぶ”この記事の事実は、誰でも読める公開資料を根拠とし、各URLの到達可否をこちらで実測しています。したがって、リンク先が移動または消滅した場合は、その旨をこのページへ反映します。
- ルネサス エレクトロニクス「SH-4A コア拡張機能 ユーザーズマニュアル ハードウェア編」Rev.2.00、2013年8月 公開PDF(2026年8月30日にリンク生存を実測、200、application/pdf)── キャッシュと外部メモリとのコヒーレンシはソフトウェアで保証するよう求めていること、そのための6命令(OCBI・OCBP・OCBWB・MOVCA.L・ICBI・SYNCO)とそれぞれの働き、コヒーレンシ制御のためにSuperHywayバスからのPURGEおよびFLUSHトランザクションを受け付けられること、PURGEがヒットしたエントリを無効化しダーティなら内容を外部メモリへ返すこと、FLUSHがダーティなら内容を外部メモリへ返したうえでヒットしたエントリを有効なまま残すこと、内蔵メモリのうちUメモリの読み出しバッファはDMACなどのバスマスタが書き換えた場合もハードウェアが無効化を担いソフトウェアでのコヒーレンシ保証が不要であること、一方でILメモリに命令を配置した場合は書き換え後の命令へ分岐する前にSYNCOとICBIの実行を求めていること、命令TLB多重ヒット例外およびデータTLB多重ヒット例外の発生時はリセットとなりキャッシュのコヒーレンシが保証の対象外となること
- 電子情報通信学会『知識の森』6群4編4章「記憶」公開PDF(2026年8月30日にリンク生存を実測、200、application/pdf)── いちど読んだ番地の中身を速い記憶装置へ写しておけば同じ番地の再読み出しが速くなること、写す単位をある程度の大きさの塊にすること、キャッシュへの書き込みが起きると新しい値がキャッシュ側だけにある状態になりキャッシュ側の変更を主記憶へ反映させる必要があること、ストアスルー(ライトスルー)は主記憶へも同じ書き換えを流すため反映が早く制御も簡素である一方で毎回の主記憶書き込みにより性能が落ちうること、ライトバックはキャッシュだけを直して追い出し時に主記憶へ返すため主記憶への書き込み回数を切り詰められること
- JEITA(電子情報技術産業協会)半導体部会「半導体用語集」(2026年8月30日にリンク生存を実測、200)── マルチコアの見出し語の記述(仕事を複数のコアへ割り振って進めること、コアどうしは基本的に別々に動くが2次キャッシュのように共有される部分もあること)。あわせてキャッシュメモリの見出し語の記述(よく使うデータを一時的にためておく小容量・高速の記憶装置であり、CPUと主記憶装置の間に位置づけられること)
- 電子情報通信学会『知識の森』6群5編2章「スレッドレベル並列コンピュータ」公開PDF(2026年8月30日にリンク生存を実測、200、application/pdf)── チップマルチプロセッサ(CMP)がマルチコアプロセッサとも呼ばれ1つのチップに複数のコアを載せた形であること、演算器やレジスタといった計算資源をコアごとに別々に持つこと。2010年時点の記述です
- 理化学研究所 計算科学研究センター「システム紹介」(2026年8月30日にリンク生存を実測、200)── 「富岳」の1ノードに計算コアが48個あること、CMG(Core Memory Group)が4つあること、L1データキャッシュがコアあたり64KiB・4way、L2がCMGあたり8MiB・16wayであること