特定のCPUキャッシュメモリが他のCPUキャッシュメモリよりも高速である理由を理解しようとしています。キャッシュメモリをメインメモリなどと比較すると、メモリの種類(SRAMとDRAM)に違いがあり、アクセス速度に影響を与える可能性のあるローカリティの問題(オンチップとメモリバスを横断する必要がある)があります。しかし、L1とL2は一般に同じチップ上、または少なくとも同じダイ上にあり、同じタイプのメモリだと思います。それでは、なぜL1の方が速いのでしょうか?
特定のCPUキャッシュメモリが他のCPUキャッシュメモリよりも高速である理由を理解しようとしています。キャッシュメモリをメインメモリなどと比較すると、メモリの種類(SRAMとDRAM)に違いがあり、アクセス速度に影響を与える可能性のあるローカリティの問題(オンチップとメモリバスを横断する必要がある)があります。しかし、L1とL2は一般に同じチップ上、または少なくとも同じダイ上にあり、同じタイプのメモリだと思います。それでは、なぜL1の方が速いのでしょうか?
回答:
いいえ、同じ製造プロセスを使用する同じチップ上にあるにもかかわらず、同じタイプのRAMではありません。
すべてのキャッシュの中で、L1キャッシュは、適切な「ヒット」レートを提供するために必要な容量と比較して、可能な限り速いアクセス時間(最小の待ち時間)を持っている必要があります。したがって、より大きなトランジスタとより広い金属トラックを使用して構築され、速度とスペースと電力を犠牲にします。高レベルのキャッシュは容量が大きい必要がありますが、より遅くする余裕があるため、より密に詰め込まれたより小さなトランジスタを使用します。
L1は通常、デコードされた命令のストレージとして使用され、L2はシングルコアの一般的なキャッシュです。キャッシュが低いほどサイズは小さくなり、通常は高速になります。PCプロセッサの大まかな目安として:
L1キャッシュ:2-3クロックサイクルアクセス
L2キャッシュ:〜10クロックサイクルアクセス
L3キャッシュ:〜20-30クロックサイクルアクセス
L1キャッシュの設計では、キャッシュレイテンシを可能な限り低く抑えながら、ヒット率(キャッシュに目的の命令アドレスまたはデータアドレスが存在する確率)を最大化する必要があります。Intelは、3サイクルのレイテンシを持つL1キャッシュを使用します。L2キャッシュは1つ以上のL1キャッシュ間で共有され、多くの場合、はるかに大きくなります。L1キャッシュはヒット率を最大化するように設計されていますが、L2キャッシュはミスペナルティ(L1ミスの発生時に発生する遅延)を最小化するように設計されています。L3キャッシュを持つチップの場合、目的はチップの設計に固有です。Intelの場合、L3キャッシュは2002年に4ウェイマルチプロセッサシステム(Pentium 4 Xeon MPプロセッサ)で初めて登場しました。この意味で、L3キャッシュはマルチスレッド環境での遅延を大幅に削減し、FSBの負荷を軽減しました。当時の、
引用は、ソースと、ここで「Pinheddの」応答から。
速度がサイズに反比例する理由はいくつかあります。最初に思い浮かぶのは、導体の物理的支配です。信号の伝播は、光の速度からの何らかの要因に制限されます。操作は、メモリタイル内で最も長い距離を往復するために電気信号を受け取る限り時間がかかります。別の関連する理由は、クロックドメインの分離です。各CPUは独自のクロックジェネレーターで動作するため、CPUはマルチGHzクロックで動作できます。レベル1キャッシュは、システムで最速のCPUクロックで実行され、同期されます。一方、レベル2キャッシュは多くのCPUに対応する必要があり、異なる(遅い)クロックドメインで実行されています。L2クロックの速度が遅い(タイルが大きい)だけでなく、クロックドメインの境界を越えると、別の遅延が追加されます。それからもちろん、ファンアウトの問題があります(すでに言及されています)。
固有のパフォーマンス特性とは別に、ローカリティには役割もあります(L1はCPUに近い)。すべてのプログラマーがメモリについて知っておくべきことによると:
オンダイL2キャッシュでは、アクセス時間の大部分(おそらく大部分)がワイヤ遅延によって引き起こされることに注意するのは興味深いことです。これは物理的な制限であり、キャッシュサイズが大きくなると悪化します。これらの数値を改善できるのは、プロセスの縮小(たとえば、Meromの60nmからIntelのPenrynの45nmに縮小する)だけです。