FIG-025

CPUキャッシュ階層 — 近いほど速いが、小さい

OS・低レイヤ 2026.06.15 公開 読了 約10分

CPUはものすごく速いのに、データが入っているメインメモリ(RAM)は意外と遠い。RAMまで取りに行くと、CPUの体感で何十回分もの待ち時間が発生します。そこでCPUは、よく使うデータを手元の小さな引き出し=キャッシュに置いておきます。近いほど速いが、小さい。これがL1 / L2 / L3という階層の正体です。

下の図1で、RAMにあるブロックを押して「要求」してみてください。CPUはL1→L2→L3→RAMの順に探し、見つかった場所までの距離だけ時間がかかります。一度使ったデータは手前に引き寄せられるので、すぐにもう一度使うと一瞬で返ってきます。

MEMORY HIERARCHY — 近い階層ほど速いが小さい
L1最速・最小
1ns
L2速い・中
4ns
L3やや遅い・大
12ns
RAM遅い・巨大
100ns
↑ RAMのブロックを押すと要求します
直近のアクセス
累計アクセス時間 0 ns
毎回RAMだったら 0 ns
同じブロックを連続で押すとL1で一瞬。別を触ってから戻ると、だんだん遠くなります。
図1 — キャッシュ階層:見つかった階層までの距離が、そのまま待ち時間になる

速さの正体は「局所性」

キャッシュが効くのは、プログラムのアクセスにかたより(局所性)があるからです。一度使ったデータは、すぐまた使われやすい(時間的局所性)。だから直近で触ったものを手前のL1に置いておけば、多くのアクセスが一瞬で済みます。図で同じブロックを連打すると累計時間がほとんど伸びないのは、ずっとL1ヒットしているからです。

逆に、毎回バラバラの場所を触る(局所性のない)処理はキャッシュが当たらず、何度もRAMまで取りに行くことになります。「巨大配列をとびとびに舐める」より「連続して舐める」ほうが何倍も速いのは、このためです。階層は近いほど速いが小さいので、本当によく使うものだけが手前に残り、押し出されたものは順に奥(L2→L3→RAM)へ下がっていきます。

用語ミニ辞書
キャッシュヒット
探したデータが手前の階層で見つかること。近い階層ほど待ち時間が短い。
キャッシュミス
手前になく、より奥(遅い階層)まで取りに行くこと。最悪はRAMまで。
局所性
アクセスのかたより。直近のもの(時間的)・近所のもの(空間的)が使われやすい性質。

まとめ

CPUキャッシュは「近いほど速いが小さい」階層を重ね、よく使うデータを手元に引き寄せておく仕組みです。プログラムを速くしたいとき、計算量(オーダー)が同じでもメモリに連続・局所的にアクセスするだけで体感速度が大きく変わります。キャッシュの存在を意識することが、地味だけれど効く高速化の第一歩です。