一般に、プロセッサの速度はRAMの速度よりも速いため、キャッシュメモリは便利です(どちらも速度は向上していますが、違いは残っています)。したがって、パフォーマンスを向上させるには、メモリアクセスの数を減らすことが望ましいです。
私の質問は、なぜ1つだけではなく、複数レベルのキャッシュ(L1、L2、L3)が必要なのかということです。
L1が最速で最小、L2が少し遅く、少し大きいなどですが、なぜこのようにハードウェアを作成するのでしょうか。
これは、ダイの物理的なサイズと関係があります。キャッシュ内の各ビットは1つ以上のトランジスタによって保持されるため、大量のキャッシュが必要な場合は、多数のトランジスタが必要です。キャッシュの速度は、基本的に、キャッシュにアクセスするユニットの局所性に反比例します。このような小さなデバイスでは、信号パスが長くなると通信が遅くなります。これは部分的に基板インピーダンスと関係がありますが、このレベルでは、より複雑な物理現象がいくつか含まれています。
大きな特異キャッシュを含める場合は、同時にMMU、ALUなどの非常に短い距離内にある必要があります。これにより、大きなキャッシュが多くのスペースを占有するため、プロセッサの物理的な設計が非常に困難になります。キャッシュをこれらのサブユニットに対して「ローカル」にするためには、サブユニットの局所性を互いに犠牲にする必要があります。
小さくて高速なローカルキャッシュ(L1)を使用することで、局所性と速度を最大化できますが、サイズが失われます。そのため、セカンダリキャッシュ(L2)を使用して、わずかな局所性(したがって速度)を犠牲にして、大量のデータを保持します。これにより、両方の長所が得られます。大量のデータを保存できますが、プロセッササブユニットが使用するための非常に高速なローカルキャッシュがあります。
マルチコアプロセッサでは、L3キャッシュは通常コア間で共有されます。このタイプの設計では、L1キャッシュとL2キャッシュが各コアのダイに組み込まれ、L3キャッシュはコアの間に配置されます。これにより、各コアに適切な局所性が与えられますが、非常に大きなキャッシュも可能になります。
最新のプロセッサのキャッシュの機能は非常に複雑なので、適切な説明は試みませんが、非常に単純なプロセスでは、ターゲットアドレスがL1、L2、L3の順に検索されてから、システムメモリフェッチ。そのフェッチが完了すると、キャッシュを介してプルアップされます。