web-dev-qa-db-ja.com

なぜキャッシュメモリはそれほど高価なのですか?

コンピュータアーキテクチャに関する会話では、キャッシュメモリはメインメモリよりもはるかに高価であることは当然です。

プロセッサの近くにある必要があるため、より小さくなければならないことを理解していますが、キャッシュメモリのコストには他に何が影響しますか?

誰でもmaterials\labor\tech\manufacturing\etcの詳細を説明できますか?コストとメインメモリの比較でコストをよりよく理解するために必要ですか?

8
BradleyMorgan

見てください: プロセッサキャッシュL1、L2、L3はすべてSRAMで構成されていますか?

一般に、これらはすべてSRAMで実装されます。

(IBMのPOWERおよびzArchitectureチップはL3にDRAMメモリを使用します。これはロジックと同じタイプのプロセステクノロジに実装され、高速ロジックをDRAMと同じチップに統合できるため、組み込みDRAMと呼ばれます。POWER4の場合、オフチップL3はeDRAMを使用し、POWER7はプロセッシングコアと同じチップにL3を搭載しています。

それらはSRAMを使用しますが、すべてが同じSRAM設計を使用するわけではありません。 L2およびL3のSRAMはサイズが最適化されており(製造可能なチップサイズが限られている場合は容量を増やすか、特定の容量のコストを削減するため)、L1のSRAMは速度が最適化される可能性が高くなります。

さらに重要なことは、アクセス時間はストレージの物理的なサイズに関連しています。 2次元レイアウトでは、物理アクセスのレイテンシは容量の平方根にほぼ比例すると予想できます。 (非均一キャッシュアーキテクチャはこれを利用して、より低いレイテンシでキャッシュのサブセットを提供します。最近のIntelプロセッサのL3スライスは同様の効果があります。ローカルスライスでのヒットはレイテンシが大幅に低くなります。)この効果により、DRAMキャッシュをより高速にすることができます。 DRAMが物理的に小さいため、大容量のSRAMキャッシュよりも.

もう1つの要因は、ほとんどのL2およびL3キャッシュがタグとデータのシリアルアクセスを使用し、ほとんどのL1キャッシュがタグとデータに並行してアクセスすることです。これは電力の最適化です(L2ミス率はL1ミス率より高いため、データアクセスは無駄な作業である可能性が高くなります。L2データアクセスは通常、容量に関連してより多くのエネルギーを必要とします。また、L2キャッシュは通常より高い関連性を持っています。つまり、より多くのデータエントリを投機的に読み取る必要があります)。明らかに、データにアクセスする前にタグの一致を待つ必要があるため、データの取得に必要な時間が増加します。 (通常、L2アクセスもL1ミスが確認された後にのみ開始されるため、L1ミス検出のレイテンシはL2の合計アクセスレイテンシに追加されます。)

また、L2キャッシュは実行エンジンから物理的に離れています。 L1データキャッシュを実行エンジンの近くに配置すると(L1ヒットの一般的なケースが速くなるため)、通常はL2をより遠くに配置する必要があります。

見てください: なぜキャッシュメモリの容量がそれほど制限されているのですか?

シリコンの総面積(最大チップサイズ)には制限があります。より多くのコアまたはより多くのキャッシュ、またはより多くのキャッシュ階層を配置することは、設計のトレードオフです。

見てください: L2とL3キャッシュの違い?

通常、現在のCPUコアには3層のキャッシュがあります。

  • L1キャッシュは非常に小さく、CPUの実際の処理ユニットに非常に緊密にバインドされており、通常、3 CPUクロックティック以内でデータ要求を処理できます。 L1キャッシュは、CPUアーキテクチャに応じて約4〜32KBになる傾向があり、命令キャッシュとデータキャッシュに分割されます。
  • L2キャッシュは一般的に大きくなりますが少し遅く、一般的にCPUコアに関連付けられています。最近のプロセッサはコアごとに512KBのキャッシュを持つ傾向があり、このキャッシュは命令キャッシュとデータキャッシュを区別せず、統合キャッシュです。キャッシュ内データの応答時間は通常、20 CPU未満です。
  • L3キャッシュは、CPUに存在するすべてのコアによって共有される傾向があり、はるかに大きく低速ですが、メインメモリに移動するよりもはるかに高速です。 L3キャッシュは最近4〜8MBのオーダーになる傾向があります。
  • メインメモリ(〜16 G、共有)。

見てください: https://stackoverflow.com/questions/4666728/size-of-l1-cache-and-l2-cache

L1はプロセッサに近く、すべてのメモリアクセスでアクセスされるため、そのアクセスは非常に頻繁です。したがって、データを非常に高速に返す必要があります(通常はクロックサイクル内)。また、多くの読み取り/書き込みポートと高いアクセス帯域幅が必要です。これらのプロパティで大きなキャッシュを構築することは不可能です。したがって、設計者は現在のほとんどのプロセッサで32KBなどの小さい値を維持しています。

L2はL1ミスでのみアクセスされるため、アクセス頻度は低くなります(通常、L1の1/20)。したがって、L1はアクセスに複数のサイクル(通常は10未満に維持)を実行し、ポート数を減らすことができます。これにより、デザイナーはそれを大きくすることができます。

彼らは両方とも非常に異なる役割を果たします。 L1を大きくすると、L1アクセスのレイテンシが増加し、すべてのロードとストアが遅くなるため、パフォーマンスが大幅に低下します。したがって、L1サイズはほとんど議論の余地がありません。

L2を削除した場合、L1ミスは次のレベル、たとえばメモリに移動する必要があります。これは、多くのアクセスがメモリに送られることを意味します。これは、すでにボトルネックになっているより多くのメモリ帯域幅が必要であることを意味します。したがって、L2を維持することは好ましいことです。

エキスパートは、L1をレイテンシフィルター(L1ヒットの一般的なケースをより高速にするため)と呼び、L2はメモリの帯域幅使用量を減らすため、帯域幅フィルターと呼びます。

注:私は、引数を2レベルのキャッシュ階層にすることで、より単純にすることを想定しています。今日のほとんどすべてのマルチコアチップには、L3も存在します。これらのチップでは、L3はメモリ帯域幅フィルターの役割を果たすものです。 L2は、オンチップ帯域幅フィルターの役割を果たします。つまり、L2は、オンチップ相互接続とL3へのアクセスを削減します(設計者は、リングや低速シングルポートL3などの低帯域幅相互接続を配置して、 L3を大きくする)。

おそらく、ポートの数は、キャッシュが消費するチップ領域の量を決定するため、非常に重要な設計ポイントであることを言及する価値があります。ポートはキャッシュに配線を追加し、チップ領域と電力を大量に消費します。

見てください: http://en.wikipedia.org/wiki/Static_random-access_memory

スタティックランダムアクセスメモリ(SRAMまたはスタティックRAM)は、双安定ラッチ回路を使用して各ビットを格納する半導体メモリの一種です。静的という用語は、動的にRAM(DRAM)を定期的にリフレッシュする必要があります。SRAMはデータの残留性を示します 1 ですが、従来の意味ではデータは揮発性です。メモリに電力が供給されないと、最終的には失われます。

6
Margus

短い答え:レジスタ、キャッシュ、メインメモリは異なる方法で構築されているため、高速/高価と低速/安価の間でトレードオフがあります。

レジスタは1サイクルでアクセスされますが、キャッシュとメインメモリは、いくつかの低レベルコンポーネントを共有できるようにする制御メカニズムを利用するため、構築コストが安くなります。たとえば、一部のメモリチップは、以前に要求されたアドレスの場所のメモリバンクをまだ検索している間、キューにX個の要求を保持します。

詳細については、Wikipediaの Memory Hierarchy ページを参照し、詳細についてはリンク先を参照してください。

この領域を詳しく知りたい場合は、Martin Thompsonの talks は非常に洞察に富んでおり、特に performance myths (レジスタ、キャッシュ、およびメインメモリを直接比較しています) )。

0