CPUが1回の処理にかかる時間を「1歩」だとすると、L1キャッシュはすぐ隣、 メインメモリ(DRAM)は数十歩先です。この部屋では、その「遠さ」を 実測して見ていきます。
作業セット(触るデータの大きさ)を4KBから64MBまで広げながら、 ポインタチェイス(次に読む場所がランダムに決まる、キャッシュを だませない読み方)で1回あたりの遅延を実測します。実機のL1d/L2/L3の 境界で、遅延が段差のように跳ね上がるはずです。
アドレスは「タグ」「セット番号」「ライン内オフセット」に分解されます。 16進アドレスを入れて、このマシンのL1d(実構成、上のスペック参照)では どこに収まるか見てください。
2048×2048のdouble行列(32MB、L3より大きい)を、行優先(メモリの並び通り)と
列優先(飛び飛び)でそれぞれ全要素1回ずつ読みます。実測時間と、
本物のキャッシュミス回数(perf実測)を比較します。
同じ計測を、いまこのページを見ている あなたの端末のブラウザで実行できます。 上のグラフに重ねて表示するので、サーバの崖と見比べてみてください (端末やブラウザによっては崖がはっきり出ないこともあります)。
①回路の間で見た1つ1つのゲートが、 ②CPUの間で見た実クロックで動いています。 その計算がメモリの遅さに追いつかれないよう、CPUの中に用意された 「近道」がここで見たキャッシュです。