web-dev-qa-db-ja.com

キャッシュまたはレジスター-どちらが速いですか?

これがこれを尋ねるのに間違った場所である場合は申し訳ありませんが、私は検索していつも違う答えを見つけました。私の質問は:

どちらが速いですか? キャッシュまたはCPUレジスタ?

私によれば、レジスターは直接データをロードしてそれを実行するものであり、キャッシュはCPUの近くまたは内部の単なる格納場所です。

私が混乱させたソースは次のとおりです。

2キャッシュ用|レジスターの場合は1

http://in.answers.yahoo.com/question/index?qid=20110503030537AAzmDGp

キャッシュが高速です。

http://wiki.answers.com/Q/Is_cache_memory_faster_than_CPU_registers

それで、本当にそれは何ですか?

24
user1255454

CPUレジスタは常にL1キャッシュより高速です。一番近いです。違いはおおよそ3倍です。

質問の根底にある物理学に迷うことなく、これをできるだけ直感的にしようとすることです。エレクトロニクスでは速度と距離の間に単純な相関関係があります。信号をさらに移動させると、信号が破損することなく信号をワイヤのもう一方の端に到達するのが難しくなります。それは、電子設計の「無料の昼食はない」という原則です。

当然のことですが、大きいほど遅くなります。何かを大きくすると、必然的に距離が大きくなるためです。しばらくの間は自動でしたが、チップ上の機能サイズを縮小すると、より高速なプロセッサが自動的に生成されました。

プロセッサのレジスタファイルは小さく、物理的に実行エンジンの近くにあります。プロセッサから最も遠いのはRAMです。あなたはケースをポップすることができ、実際には2つの間のワイヤーを参照します。中間にあるキャッシュは、これら2つの反対の速度の劇的なギャップを埋めるように設計されています。すべてのプロセッサにはL1キャッシュがあり、比較的小さく(通常32 KB)、コアの最も近くに配置されています。さらに下にあるのはL2キャッシュで、比較的大きく(通常は4 MB)、コアからさらに離れています。より高価なプロセッサには、より大きく、さらに離れたL3キャッシュもあります。

37
Hans Passant

特にx86アーキテクチャーの場合:

  • レジスタからの読み取りには、0または1サイクルのレイテンシがあります。
  • レジスタへの書き込みには、0サイクルのレイテンシがあります。
  • L1キャッシュの読み取り/書き込みには3〜5サイクルのレイテンシがあります(アーキテクチャの経過時間によって異なります)
  • 実際のロード/ストアリクエストは、ライトバックバッファーとストアフォワーディング機能により、0または1サイクル以内に実行される場合があります(詳細は以下)。

インテルCore 2 CPU(および以前のモデル)では、設計により、レジスタからの読み取りに1サイクルのレイテンシが生じる可能性があります。同時に実行される十分な命令が異なるレジスタから読み取られている場合、CPUのレジスタバンクは、シングルサイクル。この設計上の制限は、2010年以降にコンシューマー市場に投入されたx86チップには存在しません(ただし、2010/11でリリースされた一部のXeonチップには存在します)。

L1キャッシュのレイテンシはモデルごとに固定されていますが、古いモデルに戻すと遅くなる傾向があります。ただし、次の3つの点に注意してください。

  1. 最近のx86チップには、0サイクルのレイテンシを持つライトバックキャッシュがあります。値をメモリに格納すると、そのキャッシュに格納され、命令は1サイクルでリタイアできます。メモリレイテンシは、ライトバックキャッシュを満たすのに十分な連続書き込みを発行した場合にのみ表示されます。ライトバックキャッシュは、2001年頃からデスクトップチップの設計で顕著でしたが、ごく最近まで、ARMベースのモバイルチップ市場には広くありませんでした。

  2. 最近のx86チップには、ライトバックキャッシュからのstore forwardingがあります。アドレスをWBキャッシュに保存し、数回後に同じアドレスを読み戻すと、CPUはL1メモリにアクセスする代わりに、WBキャッシュから値をフェッチします。これにより、L1リクエストであると表示されるの目に見える待ち時間が1サイクルに短縮されます。しかし実際には、その場合、L1はまったく参照されません。ストア転送には、正常に動作するためのその他のルールもあります。これは、現在市場に出回っているさまざまなCPU間で大きく異なります(通常、128ビットアドレスアライメントと一致するオペランドサイズが必要です)。

  3. ストア転送機能はfalse positivesを生成する可能性があります。CPUは、高速部分ビットチェック(通常は10〜14ビット)に基づいて、アドレスがライトバックバッファーにあると見なします。チップ)。追加のサイクルを使用して、フルチェックで検証します。それが失敗した場合、CPUは通常のメモリ要求として再ルーティングする必要があります。このミスにより、適格なL1キャッシュアクセスに1〜2サイクルのレイテンシが追加される可能性があります。私の測定では、たとえばAMDのブルドーザーでストアフォワーディングミスが頻繁に発生します。 L1キャッシュレイテンシの経時変化が、文書化された3サイクルよりも約10〜15%高くなるのに十分です。これはIntelのCoreシリーズではほとんど問題ではありません。

主な参照: http://www.agner.org/optimize/ 具体的には http://www.agner.org/optimize/microarchitecture.pdf

そして、ウィキペディアのCPUのさまざまなリストページから、アーキテクチャ、モデル、およびリリース日に関する表を使用して、その情報を手動でグラフ化します。

16
jstine