performance - 高速化 - 記憶 装置 アクセス 速度




キャッシュまたはレジスタ-どちらが高速ですか? (2)

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

どちらが速いの? キャッシュまたは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

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


問題の根底にある物理学に迷うことなく、これを可能な限り直観的にしようとしています。エレクトロニクスのスピードと距離の間には単純な相関があります。 さらに信号を送ると、信号が破損することなく、信号をワイヤの他端に送ることが難しくなります。 電子デザインの "自由なランチはありません"という原則です。

当然、より大きなものはより遅いということです。 あなたが何か大きいものを作るならば、必然的に距離は大きくなるだろうから。 しばらくの間自動化されたものが、チップのフィーチャサイズを縮小すると、自動的にプロセッサが高速化しました。

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

したがって、CPUレジスタは常にL1キャッシュより高速です。 それは最も近いです。 その差はおよそ3倍です。


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

  • レジスタからの読み出しには、0または1サイクルのレイテンシがあります。
  • レジスタへの書き込みには0サイクルのレイテンシがあります。
  • リード/ライトL1キャッシュのレイテンシは3〜5サイクルです(アーキテクチャの年齢によって異なります)
  • 実際のロード/ストア要求は、ライトバックバッファおよびストア転送機能のために0または1サイクル以内に実行される可能性があります(詳細は後述)

Intel Core 2 CPU(およびそれ以前のモデル)の設計上、レジスタからの読み取りに1サイクルのレイテンシを持たせることができます。同時に実行できる命令が十分に異なるレジスタから読み取られている場合、CPUのレジスタバンクは単一サイクル。 この設計上の制限は、2010年以来消費者市場に投入されているx86チップには存在しません(ただし、2010/11リリースのXeonチップには存在します)。

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

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

  2. 最近のx86チップでは、ライトバックキャッシュからのストア転送が行われています。 アドレスをWBキャッシュに保存してから同じアドレスを複数の命令に読み戻した場合、CPUはL1メモリにアクセスするのではなく、WBキャッシュから値をフェッチします。 これにより、1サイクルまでのL1要求のように見えるレイテンシが減少します。 しかし実際には、L1はそのような場合には全く参照されません。 ストアフォワーディングには、それが正常に動作するためのいくつかの他のルールもあります。これは現在市販されているさまざまなCPU間で大きく異なります(通常、128ビットのアドレスアライメントとオペランドサイズの一致が必要です)。

  3. ストア転送機能は、高速パーシャルビットチェック(通常はチップに応じて10〜14ビット)に基づいてアドレスがライトバックバッファにあるとCPUが判断した場合に誤検出を発生させる可能性があります。 それは完全なチェックで確認するために余分なサイクルを使用します。 それが失敗すると、CPUは通常のメモリ要求として再ルーティングする必要があります。 このミスは、適格なL1キャッシュアクセスに1〜2サイクルのレイテンシを追加することができます。 私の測定では、ストアフォワーディングミスはAMDのブルドーザーでかなり頻繁に起こります。 L1キャッシュ・レイテンシのオーバ・タイムが、文書化された3サイクルより約10〜15%高くなるように十分です。 これは、IntelのCoreシリーズではほぼ不可能です。

主な参照先: http://www.agner.org/optimize/ : http://www.agner.org/optimize/および特にhttp://www.agner.org/optimize/microarchitecture.pdf

そして、wikipediaの様々なList of CPUsページのアーキテクチャ、モデル、リリース日のテーブルを使って、そこから手動でグラフを作成します。





cpu-registers