CPUキャッシュメモリをメインメモリよりもはるかに高速にするのはなぜですか?階層型キャッシュシステムにはいくつかの利点があります。キャッシュが小さいほど検索が高速になることは理にかなっています。しかし、それにはもっとあるはずです。
CPUキャッシュメモリをメインメモリよりもはるかに高速にするのはなぜですか?階層型キャッシュシステムにはいくつかの利点があります。キャッシュが小さいほど検索が高速になることは理にかなっています。しかし、それにはもっとあるはずです。
回答:
CPUキャッシュの場合、プロセッサと同じダイ上にあるため高速です。つまり、要求されたデータをプロセッサにバスで送る必要はありません。すでにそこにあります。
ハードドライブ上のキャッシュの場合、ソリッドステートメモリ内にあり、まだ回転しているプラッタ上にないため、高速です。
Webサイトのキャッシュの場合、データは既にデータベースから取得されているため(場合によっては、世界中のどこにでもある可能性があります)、より高速です。
だから、それは主に地域性についてです。キャッシュにより、データ転送ステップが不要になります。
局所性とは、時間的にも空間的にも「近い」データを表現するための凝った方法です。通常、全体的なデータの比較的少量が最も頻繁にアクセスされるデータであるため、より小さく、より高速な(ただし一般に高価な)メモリでのキャッシングが機能します。
ウィキペディアの詳細な読み取り
キャッシュ(コンピューティング)
近くにあり、DRAMではなくSRAMであるため、高速です。
SRAMはDRAMよりもかなり高速であり、値は静的に保持されるため(S RAMのS)、更新する必要がないため、サイクルが不要になります。DRAMは動的で、小さな充電式バッテリーのように、消耗してゼロにならないように定期的に充電する必要があります。これは、ビットなどにアクセスする方法に加えて、サイクル時間を盗みます。
プロセッサと同じダイ上にあるか、プロセッサの近くにあると、ラウンドトリップが減少し、アクセスの観点から、L1とL2の両方がDRAMよりも高速になります。
SRAMは、DRAMからAppleに取って代わられるDRAMよりもアクセスが速く、キャッシュは通常、DRAMよりもチップ上または近い、またはより高速なバス上にあり、アクセス時間も速くなります。
明示的に言及すべきことの1つは、光の速度の影響です。ではこの動画 グレース・ホッパーは、電気信号が* 1ナノ秒で到達できる距離で長い足、およそワイヤ片を示しています。CPUが3GHzで動作している場合、これはクロックサイクルごとに4 "の距離を意味します。これはメモリアクセス速度の物理的なハード制限です。これはCPUに近い理由(L1キャッシュと同様)メモリを高速化します。
編集*実際には、光が真空内をどれだけ移動できるか、銅/シリコンを通る距離はより短くなります。
他の答えは、関連するすべてのビットをすでにカバーしています。ローカリティ(および関連するデータ転送コスト、バス幅とクロックなど)。光の速度(再び、転送コストとバス幅とスループットに関連); 異なるメモリテクノロジー(SRAM vs.DRAM)。これはすべて、コスト/パフォーマンスのバランスを考慮して見られます。
少し残された部分は、Darkhoggのコメントで述べたとおりです。キャッシュが大きいほどヒット率は向上しますが、レイテンシは長くなります。このトレードオフに対処するために導入された複数レベルのキャッシュ。
エレクトロニクスSEに関するこの点に関する優れた質問と回答があります
答えから、強調すべき点は次のとおりであると思われます:キャッシュ読み取りに必要なすべての操作を実行するロジックはそれほど単純ではありません(特に、今日のほとんどのキャッシュのようにキャッシュがセットアソシアティブである場合)。ゲートとロジックが必要です。ですから、たとえコストを排除し、スペースを節約しても
誰かが途方もなく大きなL1キャッシュを実装しようとすると、キャッシュ読み取りに必要なすべての操作を実行するロジックも大きくなります。ある時点で、このすべてのロジックを介した伝搬遅延が長すぎ、事前に1クロックサイクルだけかかっていた操作をいくつかのクロックサイクルに分割する必要があります。これにより、遅延が増加します。
他の回答では多くの優れた点が挙げられていますが、1つの要素が欠落しているように見えます。それは、アドレスデコードレイテンシです。
以下は、メモリアドレスデコードの仕組みを大幅に単純化しすぎたものですが、大規模なDRAMチップが一般的に非常に遅い理由を説明しています。
プロセッサがメモリにアクセスする必要がある場合、メモリチップにコマンドを送信して、使用する特定のワードを選択します。このコマンドは列アドレス選択と呼ばれます(ここでは行アドレスを無視します)。メモリチップは、要求された列をアクティブにする必要があります。これは、論理ゲートのカスケードにアドレスを送信して、列内のすべてのセルに接続する単一の書き込みを行うことによって行います。実装方法によっては、結果がもう一方の端に出るまで、アドレスの各ビットに一定の遅延があります。これは、メモリのCASレイテンシと呼ばれます。これらのビットは順番に検査する必要があるため、このプロセスはプロセッササイクル(通常、順番に待機するトランジスタが数個しかありません)よりもはるかに長くかかります。また、バスサイクル(プロセッササイクルよりも数倍遅い)よりもかなり時間がかかります。典型的なメモリチップ上のCASコマンドは、5nsのオーダー(IIRC-タイミングを見てからしばらく経っています)になりそうです。これは、プロセッササイクルよりも1桁以上遅いです。
幸いなことに、アドレスを3つの部分(列、行、バンク)に分割し、各部分を小さくしてそれらの部分を同時に処理できるようにします。そうしないと、レイテンシがさらに長くなります。
ただし、プロセッサキャッシュにはこの問題はありません。はるかに小さいだけでなく、アドレス変換は簡単な作業です。実際には、アドレスの小さなフラグメント(一部のバリアントではまったくない)を変換する必要はありません。これは、キャッシュされた各メモリラインに沿って、アドレスの一部(またはすべて)を格納する追加のメモリセルがあることを意味します。明らかにこれはキャッシュをさらに高価にしますが、すべてのセルにクエリを実行して特定のメモリ行が同時に必要かどうかを確認し、適切なデータを持つ唯一のセル(希望する場合)がそれをダンプできることを意味しますメモリ全体をメインプロセッサコアに接続するバスに接続します。これははるかに簡単であるため、1サイクル未満で発生します。
私が研究した哲学の1つは、CPUキャッシュ、バッファキャッシュ、またはその目的のためのメモリキャッシュなど、キャッシュベースのメモリについて話すときの、ハードウェアの最大スループットの取得です。基本的な動機は、データの取得/読み取り/書き込みのためのハードウェアの動きがほとんどまたはまったくなく、操作がより速く完了すると達成されます。
ディスクからのデータ転送->メインメモリ(RAM)(一時ストレージ)-> CPUキャッシュ(頻繁にアクセスされるデータ用のCPU近くの小さな一時ストレージ)-> CPU(処理)。
CPUキャッシュは、最近使用したメインメモリの場所からデータのコピーを保存する、より小さくて高速なメモリスペースです。
バッファキャッシュは、最近使用したディスクの場所からデータのコピーを保存するメインメモリ領域です。
ブラウザのキャッシュは、ユーザーが最後にアクセスしたWebサイトからのデータのコピーを保存するディレクトリまたは同様のスペースです。