CPUキャッシュメモリが非常に高速なのはなぜですか?


58

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


2
メインメモリとはどういう意味ですか?
marcocs 14年

1
わかりやすくするために@marcocsを編集しました。私は、CPUキャッシュメモリとメインシステムメモリ、つまり、ほとんどのマザーボードの取り外し可能な調光器について言及しています。
ConditionRacer 14年


2
@ratchetfreak Uh ... OPは、最終的な原因ではなく、近い原因を明確に求めています。
カイルストランド14年

1
うわー、私は自分のコンピューター工学の学位を使うことになるとは思わなかった。受け入れられた答えは、実際には答えではありません。これは、CPUキャッシュがはるかに高いクロックレート(CPUクロックレート、約4GHz)で動作し、メインメモリがバスクロックレート(約1600MHz)で動作するためです。それだけでなく、CPUキャッシュは4クロックサイクルで読み取ることができますが、システムRAMは100システムクロックサイクルかかる場合があります。また、システムキャッシュはディスクやネットワークなどの他の周辺機器と競合しますが、CPUキャッシュは専用です。ワイヤが長いほど、動作可能なクロックレートが遅くなります。tinyurl.com/zkdsstd
クロエ

回答:


115

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

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

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

だから、それは主に地域性についてです。キャッシュにより、データ転送ステップが不要になります

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

ウィキペディアの詳細な読み取り
キャッシュ(コンピューティング)


29
これは良い答えだと思います。ただし、キャッシュにコスト階層があることも追加する価値があります。ネットワークストレージはローカルハードドライブよりも安価であり、ローカルハードドライブはRAMよりも安価で、CPUはオンCPUキャッシュよりもはるかに安価です。これがなかったら、120GBのメモリを搭載したCPUをオンチップで作り、それで終わりです。
チャールズE.グラント14年

1
@ConditionRacer:同じ理由。L1は高速ですが、より高価であるため、非常に高価なL1を少し提供します。stackoverflow.com/questions/3699582/…
ロバートハーヴェイ14年

9
「なぜL1がL2より速い」-質問はProgrammers.SEのトピック外となり、Electronics.SEで質問する必要があります
mattnz 14年

5
@ConditionRacer IIRC、それはメモリの実装に使用される技術に関係しています。L2はオンチップDRAMですが、L1はSRAMなどです。はるかに高価ですが、はるかに高速です。CPU設計に携わってから10年以上が経ちました…
ドナルフェローズ14年

4
@ CharlesE.Grant:コスト階層が良い例ですが、120 GBのオンチップキャッシュがない別の理由があります。より大きなメモリをアドレス指定するにはより大きなアドレスが必要であるため、より大きな命令またはより多くのCPUサイクルが必要です。そのため、最速にするには、レジスタの数を比較的少なくする必要があります。もちろん、レジスタのほかにオンチップメモリ​​を搭載することもできますが、最速のティアは小さく維持する必要があります。そうしないと、もはやそれほど高速ではなくなります。
VSZ

33

近くにあり、DRAMではなくSRAMであるため、高速です。

SRAMはDRAMよりもかなり高速であり、値は静的に保持されるため(S RAMのS)、更新する必要がないため、サイクルが不要になります。DRAMは動的で、小さな充電式バッテリーのように、消耗してゼロにならないように定期的に充電する必要があります。これは、ビットなどにアクセスする方法に加えて、サイクル時間を盗みます。

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

SRAMは、DRAMからAppleに取って代わられるDRAMよりもアクセスが速く、キャッシュは通常、DRAMよりもチップ上または近い、またはより高速なバス上にあり、アクセス時間も速くなります。


1
また、SRAMはビットあたりの電力消費量が多いため、ラジエーターを追加する必要があり、バッテリー駆動のものは何でも苦しみます。
9000 14年

1
SRAMを大きくすると速度が非常に遅くなるという事実は言うまでもありません。
ダークホッグ14年

同意し、より多くのパワーを持ち、他のスラムに比べて遅い。私はそれがSRAMのビットごとに4トランジスタとDRAMのビットごとに1だと思います。dramは、fetの静電容量に依存しています。sramは、古き良き時代のロジックに依存しています。そのため、定期的に電荷をポンピングするだけでなく、これらのトランジスタすべてに常に電力を供給する必要があります。
old_timer 14年

4
キャッシュ内のSRAMは通常4Tではなく6Tです。また、SRAM(確かに6Tバリアント)はよりエネルギー効率が高くなります。DRAMの実際の消費電力はリフレッシュサイクルであり、SRAMはそれを必要としません。SRAMトランジスタはスイッチング時に電力を消費し、DRAMコンデンサは常にリークします。DRAMの漏れやすいキャップを交換すると、EEPROMになってしまいますが、高速ではありません。電荷が漏れにくい場合、通常の方法で取り出すのも困難です。
MSalters

@dwelch CMOS FETは、オープン状態またはクローズ状態にある場合、電力を消費しません。そのため、電力消費に関する議論は無効です。さらに、CMOSロジックスイッチングにより、CPUはほとんどの電力を消費します。電流は中間状態(非1および非0)でピークに達するため、状況はあなたの言うことと逆になります:)
Ruslan

21

明示的に言及すべきことの1つは、光の速度の影響です。ではこの動画 グレース・ホッパーは、電気信号が* 1ナノ秒で到達できる距離で長い足、およそワイヤ片を示しています。CPUが3GHzで動作している場合、これはクロックサイクルごとに4 "の距離を意味します。これはメモリアクセス速度の物理的なハード制限です。これはCPUに近い理由(L1キャッシュと同様)メモリを高速化します。

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


2
銅のハード制限。これは良い点ですが、現代のプロセッサがどれほど途方もなく高速であるかは考えませんでした。
ConditionRacer 14年

@ConditionRacer補正を追加したところ、11.8インチは真空で軽い。
マシューフィンレイ14年

2
メモリを取得するために往復が必要なため、その数を半分にする必要があります。そのため、真空中のレイテンシのサイクルあたり10cmではなく5cmにすぎません。
CodesInChaos

2
光の速度は、数年前にメインメモリバスクロックの高速化が停止した理由です(2000年か?)これは直接的な効果ではありません-CMOSロジック信号がバス周波数で完全な方形波ではなくなったことに関係していますが、数学の中で目立つように。
zwol 14年

5

他の答えは、関連するすべてのビットをすでにカバーしています。ローカリティ(および関連するデータ転送コスト、バス幅とクロックなど)。光の速度(再び、転送コストとバス幅とスループットに関連); 異なるメモリテクノロジー(SRAM vs.DRAM)。これはすべて、コスト/パフォーマンスのバランス考慮して見られます。

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

エレクトロニクスSEに関するこの点に関する優れた質問と回答があります

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

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


5

他の回答では多くの優れた点が挙げられていますが、1つの要素が欠落しているように見えます。それは、アドレスデコードレイテンシです。

以下は、メモリアドレスデコードの仕組みを大幅に単純化しすぎたものですが、大規模なDRAMチップが一般的に非常に遅い理由を説明しています。

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

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

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


-2

私が研究した哲学の1つは、CPUキャッシュ、バッファキャッシュ、またはその目的のためのメモリキャッシュなど、キャッシュベースのメモリについて話すときの、ハードウェアの最大スループットの取得です。基本的な動機は、データの取得/読み取り/書き込みのためのハードウェアの動きがほとんどまたはまったくなく、操作がより速く完了すると達成されます。

ディスクからのデータ転送->メインメモリ(RAM)(一時ストレージ)-> CPUキャッシュ(頻繁にアクセスされるデータ用のCPU近くの小さな一時ストレージ)-> CPU(処理)。

CPUキャッシュは、最近使用したメインメモリの場所からデータのコピーを保存する、より小さくて高速なメモリスペースです。

バッファキャッシュは、最近使用したディスクの場所からデータのコピーを保存するメインメモリ領域です。

ブラウザのキャッシュは、ユーザーが最後にアクセスしたWebサイトからのデータのコピーを保存するディレクトリまたは同様のスペースです。

参照:コンピューターメモリの仕組み


「オペレーティングシステムの哲学は...」-これはあなたの意見だけですか、それとも何らかの形でバックアップできますか?
ブヨ

モーリスバッハによってUnixの勉強中にこれについて教えられました。残念ながら、サポート文書はありません。編集..
roshan4074 14年

5
howstuffworksは、信頼性の高い技術情報を取得することで悪名高い。彼らは平均的なジョーとジェーンが理解することができる単純な単純化には良いですが、それはそれについてです。
jwenting
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.