最近の CPU ではなぜ複数レベルのキャッシュが使用されるのでしょうか?

最近の CPU ではなぜ複数レベルのキャッシュが使用されるのでしょうか?

最近、プロセッサ (主にマルチプロセッサ) について読んでいて、マルチレベル キャッシュの概念に出会いました。この場合、これらの設計にはパフォーマンスを向上させるために複数のレベルのキャッシュがあります。

しかし、キャッシュを追加するとプロセッサのパフォーマンスがどのように向上するのかはわかりませんでした。代わりに、既存のキャッシュのサイズを増やすだけではだめなのでしょうか?

答え1

複数のキャッシュ レベルの使用は、部分的にはマルチコア プロセッサを調整するためのメカニズムであり、部分的には価格とパフォーマンスの間の妥協点です。

複数のコアを持つプロセッサでは、各コアに独自の L1 キャッシュがあります。これにより、コアは他のコアに干渉することを心配せずに、キャッシュの読み取りと書き込みを行うことができます。ただし、コア間で特定の情報を簡単に交換できるように、共有ストレージが必要です。L2 キャッシュはすべてのコアで共有されるため、すべてのスレッドで情報を利用できる一種の共有ストレージ スペースとして使用されます。

L2 キャッシュと L3 キャッシュの違いは、妥協点です。キャッシュは静的 RAM (SRAM) で作られています。これは、メイン メモリを構成するダイナミック RAM (DRAM) とは異なります。ダイナミック RAM は定期的に「リフレッシュ」する必要があります。つまり、時間が経つと、DRAM セルは読み込まれてから再度書き込まれない限り、その値を失います。メモリ コントローラはこれを自動的に行いますが、メモリ コントローラがこれを行うたびに (1 秒間に数千回)、完了するまでプロセッサの値の読み取り/書き込みができなくなります。これにより、DRAM の速度が低下します。SRAM にはこの制限がなく、動作電力がある限り SRAM は値を無期限に保持するため、はるかに高速になります。したがって、キャッシュ (L2 と L3 の両方) は SRAM で作られています。問題は、SRAM がとても高価です。4GB の高速 DRAM は少し高価ですが、手頃な価格ですが、4GB の SRAM は予算をはるかに超えています。

そのため、プロセッサメーカーが設計にSRAMを追加すると、コストが著しく高くなります。SRAMには複数の速度があり、予想どおり、高速SRAMは低速SRAMよりも高価です。そのため、プロセッサメーカーは、両方の最適化を図っています。スピードそして料金高速 SRAM と低速 SRAM の両方を使用します。プロセッサは、最も必要な値を高速キャッシュ (L2) に、それほど必要のない情報を低速キャッシュ (L3) に配置するように設計されています。プロセッサのマイクロコードでこのメモリを慎重に管理することで、均等な妥協が生まれます。つまり、キャッシュが増え、キャッシュの一部 (できればプロセッサが最も必要とするキャッシュ) が非常に高速になります。

つまり、まとめると、プロセッサの価格を大幅に上げずにプロセッサ キャッシュの容量を増やすために、プロセッサにはマルチレベル キャッシュが搭載されています。この慎重な組み合わせにより、より高速で安価なプロセッサが実現します。

答え2

マルチレベル キャッシュは、主に容量とアクセス コスト (レイテンシ/時間とエネルギーの両方) の間の妥協点です。

これをツールの購入に例えるとわかりやすいかもしれません。地元の金物店 (L1 キャッシュに相当) に行くと、速くてエネルギーも少なくて済みますが、地元の金物店は小さく、探している特定のツールがない可能性が高くなります。大型金物店 (L2 キャッシュに相当) に行くと、より多くの時間とエネルギーがかかります (遠くにあるため、ツールを探すのに時間がかかります) が、ツールの在庫がある可能性が高くなります。大型金物店にさえツールがない場合は、メーカーの倉庫 (メイン メモリに相当) に行くと、ほぼ確実にツールが見つかります。倉庫にさえツールがない場合、メーカーの工場 (ディスクに相当) でツールがさらに生産されるまで、さらに長い待ち時間が予想されます。

大型ハードウェア ストア (非常に大きな L1 キャッシュを持つ) の隣であれば、求められるハードウェア サプライの多様性が通常大きい場合 (商用ワークロードを対象とする一部の PA-RISC プロセッサではこれが実現)、時間の節約になりますが、通常、使用されるサプライの多様性は小さいため、小規模な地元のストアにはアイテムの在庫がある可能性が非常に高く (キャッシュ ヒットの確率が高い)、よく使用されるアイテムは小規模なストアの方が早く見つかります。

jcrawfordor が述べたように、複数のコア間でキャッシュ レベルを共有することには、次のような利点があります。同じメモリ内容の繰り返し保存を回避できる、ストレージ容量の不均衡な使用が可能になる (たとえば、共有 L2 では 1 つのコアがすべての L2 ストレージを使用できるが、コアごとの L2 キャッシュではコアは独自の L2 キャッシュに制限される)、コア間の通信が簡素化され高速化される (L1 ミスで同じ L2 にアクセスされるため、他の L2 キャッシュにデータがあるかどうかを確認する必要がない)。

(L2 および個別の L1 命令キャッシュとデータ キャッシュに関しても同様の共有の利点が適用されますが、このようなコンテンツの共有は通常は回避されます (つまり、キャッシュ ラインには通常、コードまたはデータのみが含まれます)。また、自己修正コードや JIT コンパイルなどのあまり一般的ではないアクションを除いて、命令キャッシュとデータ キャッシュ間の通信はほとんどありません。)

ただし、共有にはオーバーヘッドがあります。これは、デパートでの買い物に例えることができます。店舗を利用する買い物客が増えるほど、特定のチェックアウト ステーションに行列ができる可能性が高くなります (L2 キャッシュの銀行に相当)。さらに、共有の入口/出口によって遅延が発生します (キャッシュ アクセスの調停遅延に相当)。複数のドアがあればスループットは高くなりますが、ドアの選択に必要な時間は長くなります。他に誰も出入りしていない場合は選択のオーバーヘッドは非常に小さい (まったくないわけではない) かもしれませんが、店舗が混雑している場合はドアの選択がより複雑になります。店舗が混雑すると想定すると、決定の遅延の一部を回避できます。しかし、ストアがビジーでない場合は、最も便利なドアを使用する方が高速になります (同様に、キャッシュは、たとえば、キャッシュがビジーでない場合はそのようなバッファが必要ない場合でも、メモリ要求情報を保持するためのバッファを割り当てるために余分な時間がかかることがあります。このような最適化がなければ、キャッシュがビジーの場合は、キャッシュがビジーであるかどうかを判断し、バッファ エントリを割り当てるという 2 つの手順が順番に発生するため、合計時間は 2 つの合計になりますが、キャッシュがビジーでない場合はバッファ割り当て手順が回避されます)。

また、キャッシュの連想性が限られているため、共有によって競合ミスの頻度が増加し、キャッシュの置き換えの選択が不適切になる可能性があります (たとえば、データの再利用がほとんどないストリーミング アクセス パターンを使用するコアは、データの再利用が頻繁に行われる別のコアが使用する方がメリットが大きい容量を使用する傾向があります)。このようなデメリットを軽減する手法もありますが、複雑さが増し、他のコストも発生します。

答え3

近いキャッシュのサイズははるかに小さくなります。これについて少し説明します速度に関する情報は見つかりませんでしたが、おそらくプロセッサまたはマザーボードの速度に制限されます (速度を超えるのは無意味であり、コストがかかります)。

CPU キャッシュ (シングル コアに 2 つ)、RAM (セカンダリ)、ハード ドライブ (ターシャリ) の 3 つのレベルがあります。

答え4

プロセッサには、L1、L2、L3 などのマルチレベル キャッシュがあります。

L1 は最も高速なキャッシュですが、最も高価でもあります。2 番目に多いのは L2 で、最もよく議論されています。そして、L2 の次に来るのは L3 です。

キャッシュが高速であればあるほど、プロセッサがキャッシュからデータを読み取ったり、キャッシュに書き込んだりする速度も速くなります。

しかし、企業は各プロセッサのパフォーマンスと費用の間で選択を行う必要があるため、価格に応じてプロセッサにマルチレベル キャッシュを導入します。

関連情報