web-dev-qa-db-ja.com

過去20年間でL1キャッシュのサイズがあまり大きくならないのはなぜですか?

Intel i486 には8 KBのL1キャッシュがあります。 Intel Nehalem には、コアごとに32 KB L1命令キャッシュと32 KB L1データキャッシュがあります。

L1キャッシュの量は、クロックレートが増加したのとほぼ同じ速度で増加していません。

何故なの?

36
eleven81

30KのWikipediaテキストは、大きすぎるキャッシュがあまり最適でない理由の説明ほど役立ちません。キャッシュが大きくなりすぎると、キャッシュ内のアイテムを見つけるためのレイテンシ(キャッシュミスを考慮)は、メインメモリでアイテムを検索するレイテンシに近づき始めます。 CPUデザイナーがどのような比率を目指しているのかはわかりませんが、80-20ガイドラインに類似したものだと思います。最も一般的なデータを80%の時間キャッシュで見つけ、残りの20見つけるためにメインメモリにアクセスする必要がある時間の割合。 (またはCPU設計者が意図した比率は何でもかまいません。)

編集:私はそれが80%/ 20%に近いところはないと確信しているので、Xと1-Xを置き換えます。 :)

18
JMD

1つの要因は、遅延を減らすために、TLB変換が完了する前にL1フェッチが開始されることです。十分に小さいキャッシュと十分に高い方法で、キャッシュのインデックスビットは仮想アドレスと物理アドレスで同じになります。これにより、仮想的にインデックスが付けられ、物理的にタグが付けられたキャッシュを使用して、メモリの一貫性を維持するコストを削減できます。

10
AJW

キャッシュサイズは多くの要因の影響を受けます。

  1. 電気信号の速度(光速でない場合は、同じ桁の大きさである必要があります):

    • 1マイクロ秒で300メートル。
    • 1ナノ秒で30センチメートル。
  2. 経済的コスト(異なるキャッシュレベルの回路は異なる場合があり、特定のキャッシュサイズは価値がない場合があります)

    • キャッシュサイズを2倍にしてもパフォーマンスは2倍になりません(物理によりそのサイズが機能することが許可されていたとしても)。
    • ウィキペディアで、たとえば、1MBを超えるキャッシュを作成する価値がないことを示すグラフを見つけることができます(実際にはより大きなキャッシュが存在しますが、それらはマルチプロセッサコアであるとカウントする必要があります)。
    • L1キャッシュの場合、64 Kbをサイズとして便利にする)いくつかの他のグラフ(ベンダーは表示しない)があるはずです。

L1キャッシュサイズが64 kb後に変更されなかった場合、それはもはや価値がなかったためです。また、キャッシュに関する「文化」が広まり、多くのプログラマーが「キャッシュに適した」コードを記述したり、prefetech命令を使用してレイテンシを短縮したりすることにも注意してください。

(数メガバイトの)配列内のランダムな場所にアクセスする単純なプログラムを作成してみました。ランダムな読み取りごとにページ全体がRAMからキャッシュに移動されたため、このプログラムはコンピューターをほぼフリーズさせましたそして、それは非常に頻繁に行われたため、その単純なプログラムはすべての帯域幅を使い果たし、OSのリソースをほとんど残していませんでした。

8
CoffeDeveloper

キャッシュが大きければ大きいほど、アクセスが遅くなると単純に述べることができると私は信じています。したがって、キャッシュはRAMへのバス通信の速度を低下させるように設計されているため、キャッシュを大きくしても効果がありません。

プロセッサの速度が急速に向上しているため、同じサイズのキャッシュは、それに追いつくために、より高速に実行する必要があります。したがって、キャッシュは(速度の点では)大幅に改善される可能性がありますが、ストレージの点では改善されません。

(私はソフトウェアの男なので、うまくいけばこれは悪くないことです)

6
Andrew Flanagan

から L1キャッシュ

レベル1キャッシュ、つまり1次キャッシュはCPU上にあり、32バイトのブロックに編成された命令とデータの一時的なストレージに使用されます。 1次キャッシュは、最速のストレージ形式です。 ゼロの待機状態(遅延)でチップに組み込まれているためプロセッサの実行ユニットへのインターフェース、サイズに制限があります

SRAMはビットごとに2つのトランジスタを使用し、回路に電力が供給されている限り、外部の支援なしにデータを保持できます。これは、動的なRAM(DRAM)とは対照的です。DRAMは、データの内容を保持するために毎秒何回も更新する必要があります。

1997年の初めに発売されたIntelのP55 MMXプロセッサは、レベル1キャッシュのサイズが32KBに増加したことで注目に値します。その年の後半に発売されたAMD K6とCyrix M2チップは、64KBのレベル1キャッシュを提供することにより、アンティをさらに引き上げました。 64Kbは標準のL1キャッシュサイズのままですが、さまざまなマルチコアプロセッサが64Kbを別々に使用する場合があります。

編集:この回答は2009年のものであり、CPUは過去10年間で大幅に進化したことに注意してください。この投稿に到達した場合は、ここでのすべての回答を真剣に受け止めないでください。

3
harrymc