web-dev-qa-db-ja.com

なぜCPUキャッシュメモリはそんなに速いのですか?

CPUキャッシュメモリがメインメモリよりもはるかに高速になるのはなぜですか。階層型キャッシュシステムにはいくつかの利点があります。キャッシュが小さいほど検索が高速になることは理にかなっています。しかし、それだけではありません。

59
ConditionRacer

CPUキャッシュの場合、プロセッサと同じダイ上にあるため、高速です。言い換えれば、要求されたデータはプロセッサにバスで送られる必要はありません。それはすでにそこにあります。

ハードドライブ上のキャッシュの場合、ソリッドステートメモリ内にあり、回転するプラッター上にはないため、より高速です。

Webサイトのキャッシュの場合、データベースからデータが既に取得されているため、より高速です(場合によっては、世界中のどこにでもある可能性があります)。

つまり、ほとんど locality についてです。キャッシュにより、データ転送ステップが不要になります。

局所性は、時間的または空間的に「近接」しているデータを表現するための空想的な方法です。通常、比較的少量の全体データが最も頻繁にアクセスされるデータであるため、より小さく、より高速な(ただし、通常はより高価な)メモリを使用したキャッシュが機能します。

さらに読む
ウィキペディアのキャッシュ(コンピューティング)

116
Robert Harvey

距離が近いため、DRAMではなくSRAMであるため、処理速度が速くなります。

SRAMは、DRAMよりもかなり高速であり、DRAMよりもかなり高速である可能性があります。値は静的に保持されるため(S in [〜#〜] s [〜#〜] RAM)、リフレッシュする必要がないため、サイクル。 DRAMは動的であり、小さな充電式電池のように、消耗してゼロにならないように定期的に充電する必要があります。これは、ビットへのアクセス方法などに加えて、サイクルタイムを盗みます。

プロセッサと同じまたはより近いダイ上にあると、ラウンドトリップが減少します。アクセスの観点から見ると、L1とL2はどちらもDRAMよりも高速です。

SRAMは、DRAMを使ってアップルからアップルにアクセスするよりもアクセスが速く、キャッシュは通常、DRAMよりもチップ上にあるか、DRAMよりも高速なバス上にあるため、アクセス時間も速くなります。

33
old_timer

はっきりと述べておかなければならないのは、光速の影響です。 このビデオグレイスホッパー は、1ナノ秒で電気信号が伝わる距離である、約1フィートのワイヤーを示しています*。 CPUが3GHzで動作している場合、これはクロックサイクルあたり4インチの距離を意味します。これは、メモリアクセス速度に対する物理的なハード制限です。これは、(L1キャッシュのように)CPUに近い理由の大部分です。メモリが速くなります。

編集*実際には、光が真空中で移動できる距離は、銅/シリコンを通る距離が短くなります。

22
Matthew Finlay

他の回答には多くの優れた点がありますが、1つの要素が欠けているように見えます。それは、アドレスのデコードの待ち時間です。

以下は、メモリアドレスのデコードの仕組みを大幅に簡略化したものですが、大きなDRAMチップが一般的に非常に遅い理由を理解するのに役立ちます。

プロセッサがメモリにアクセスする必要がある場合、使用したい特定のワードを選択するコマンドをメモリチップに送信します。このコマンドは列アドレス選択と呼ばれます(ここでは行アドレスを無視します)。メモリチップは、要求された列をアクティブにする必要があります。これは、アドレスをカスケードロジックゲートに送信して、列内のすべてのセルに接続する単一の書き込みを行うことによって行います。それがどのように実装されているかに応じて、結果がもう一方の端に出るまで、アドレスの各ビットに対して一定量の遅延があります。これは、メモリのCASレイテンシと呼ばれます。これらのビットを順番に検査する必要があるため、このプロセスにはプロセッササイクルよりもかなり時間がかかります(通常、待機するシーケンス内のトランジスタが数個しかない)。また、バスサイクルよりもはるかに長くかかります(通常、プロセッササイクルよりも数倍遅い)。典型的なメモリチップのCASコマンドは、5 nsのオーダー(IIRC-タイミングを調べてからしばらく経っています)になる可能性が高く、これは、プロセッササイクルよりも1桁以上遅いです。

幸いなことに、アドレスを3つの部分(列、行、バンク)に分割しているため、各部分を小さくしてそれらの部分を同時に処理できます。そうしないと、レイテンシがさらに長くなります。

ただし、プロセッサキャッシュにはこの問題はありません。それははるかに小さいだけでなく、アドレス変換はより簡単な仕事であり、実際には関連性があるため、アドレスの小さなフラグメント(一部のバリアントではまったく何もない)を変換する必要はありません。つまり、キャッシュされたメモリの各ラインに沿って、アドレスの一部(またはすべて)を格納する追加のメモリセルがあります。明らかにこれはキャッシュをさらに高価にしますが、すべてのセルをクエリして、必要なメモリの特定の行が同時にあるかどうかを確認し、適切なデータを持つ唯一の行が(できれば)ダンプします。メモリ全体をメインプロセッサコアに接続するバス上。これは非常に簡単なため、サイクル未満で発生します。

5
Jules

他の回答はすでに関連するすべてのビットをカバーしています:局所性(および関連するデータ転送コスト、バス幅とクロックなど)。光の速度(ここでも、転送コストとバス幅とスループットに関連します);異なるメモリ技術(SRAMとDRAM)。これらすべては、コスト/パフォーマンスのバランスの観点から見られます。

少し省略されましたが、Darkhoggのコメントに記載されています。キャッシュが大きいほどヒット率は向上しますが、レイテンシは長くなります。このトレードオフに対処するために導入された複数レベルのキャッシュ。

electronics SE のこの点については、すばらしい質問と回答があります。

回答から、強調すべき点は次のように思われます: キャッシュの読み取りに必要なすべての操作を実行するロジックはそれほど単純ではありません (特に、キャッシュが次のようにセットアソシアティブである場合今日のほとんどのキャッシュ)。ゲートとロジックが必要です。ですから、たとえコストとスペースを除外しても

誰かが途方もなく大きいL1キャッシュを実装しようとすると、キャッシュの読み取りに必要なすべての操作を実行するロジックも大きくなります。ある時点で、このすべてのロジックによる伝搬遅延が長すぎて、事前に1クロックサイクルだけかかっていた操作を複数のクロックサイクルに分割する必要があります。これにより、レイテンシが増加します。

5