キャッシュメモリ
CPUと主記憶装置の間に置く、小容量で高速なメモリ。よく使うデータを置いておくことで、CPUが遅い主記憶にアクセスする回数を減らす。
イマシルちゃんの解説
CPUはものすごく速いのに、主記憶(メインメモリ)はそれに比べるとずっとのんびりなんだ。
CPUがいちいち主記憶まで取りに行っていたら、待ち時間ばかりになっちゃう。
そこで、よく使うデータを手元の小さな棚に置いておくのがキャッシュメモリ!
机の上に教科書を出しておけば、本棚まで取りに行かなくていいのと同じだね。
より深い解説
定義
キャッシュメモリは、CPUと主記憶装置(DRAM)の間に置かれる、高速で小容量のメモリ(SRAM)である。主記憶のデータの一部の写しを持ち、CPUが必要なデータがキャッシュにあれば、主記憶より速く読み書きできる。
局所性
キャッシュが効果を発揮するのは、プログラムのメモリアクセスに次の性質(局所性)があるためである。
| 局所性 | 内容 |
|---|---|
| 時間的局所性 | 一度アクセスしたデータは、近いうちに再びアクセスされやすい(ループの中の変数など) |
| 空間的局所性 | アクセスしたデータの近くのデータも、近いうちにアクセスされやすい(配列を順に読むなど) |
ヒット率と実効アクセス時間
必要なデータがキャッシュにある割合をヒット率という。ないことをキャッシュミスといい、その場合は主記憶から読み込む。
実効アクセス時間 = ヒット率 × キャッシュのアクセス時間
+ (1 − ヒット率)× 主記憶のアクセス時間
例:ヒット率90%、キャッシュのアクセス時間10ナノ秒、主記憶のアクセス時間100ナノ秒の場合
0.9 × 10 + 0.1 × 100 = 19ナノ秒
階層構造
| 階層 | 容量 | 速さ |
|---|---|---|
| レジスタ | 最も小さい | 最も速い |
| 1次キャッシュ(L1) | 数十KB | 速い |
| 2次キャッシュ(L2) | 数百KB〜数MB | |
| 3次キャッシュ(L3) | 数MB〜数十MB | |
| 主記憶 | 数GB〜 | 遅い |
CPUに近いほど小さく速く、遠いほど大きく遅い。
書込みの方式
CPUがデータを書き込むとき、主記憶にいつ反映するかで2つの方式がある。
| 方式 | 書き込む先 | 特徴 |
|---|---|---|
| ライトスルー方式 | キャッシュと主記憶の両方に同時に | 主記憶の内容が常に最新。書込みは遅い |
| ライトバック方式 | キャッシュだけ。主記憶へは、キャッシュから追い出すときに書き戻す | 書込みが速い。一時的に主記憶の内容が古くなる |
置換えのアルゴリズム
キャッシュがいっぱいのときに新しいデータを入れるには、どれかを追い出す必要がある。代表的な方法は、最も長い間使われていないものを追い出すLRU(Least Recently Used)である。
ネットワークでも同じ考え方
「よく使うものを手前に置いて、遠くまで取りに行く回数を減らす」という考え方は、DNSのキャッシュ、Webのプロキシキャッシュ、CDNなど、ネットワークの世界でも広く使われている。