プログラミング初心者が、キャッシュについて学んだことをメモとしてまとめたものです。
もし間違いなどありましたら、ご指摘いただけると幸いです。
レジスタとキャッシュとメモリ
-
レジスタは、演算器の横に付いてる一時的な記憶域
X byte * 32~512本 (xは32bitとか64bitとか128bitとか) -
キャッシュは、演算器より外にあるKB~MBオーダの一時保存領域
これを超えたらメモリに行く -
キャッシュは、Lxキャッシュがある(xは、1~4)
L2キャッシュには、昔の計算結果(c += a + b)が入る。
L1キャッシュには、計算結果の答えが入ったcが入る。
コアがたくさん存在するときにL3が必要になってくる。
2コア目以降は、1コア目にある変数の値をL2(?)まで取っていかなくても、L3に置いてあるから取ってくることができる。
最近ではL4キャッシュも存在する。
64コアとかになってくると、L3キャッシュで渋滞が起こるため、L4キャッシュを足している。
上の画像は以下のサイトより引用
https://www.hardwaretimes.com/future-amd-ryzen-and-epyc-cpus-may-feature-a-level-4-cache-l4/
キャッシュコヒーレンシ
計算機は、1秒間に30億回計算をやっても、バグが起こらない。それはキャッシュコヒーレンシと関係しているようである。
例えば、4番コアが計算結果cが欲しいといった場合、1番コアがL3のcを書き換えて、それをコア4が取ってくる。従って、L3が共有されたメモリリソースになっている(?)。
システム全体で共有リソースを更新して、キャッシュの内容に一貫性を保つようになっている。
どのようにキャッシュの内容を更新していくかなどを考えて、CPUの設計書を作っている会社がARMである。
