web-dev-qa-db-ja.com

ストアバッファーとは

ロードバッファとは何か、それが無効化キューとどのように異なるかをだれでも説明できます。また、ストアバッファーと書き込み結合バッファーの違いは何ですか? Paul E Mckennyによる論文 http://www.rdrop.com/users/paulmck/scalability/paper/whymb.2010.07.23a.pdf はストアバッファーと無効化キューについて非常にうまく説明していますが、残念ながら書き込み結合バッファについては話しません

37
harish reddy

無効化キューはストアバッファーに似ていますが、CPUではなくメモリシステムの一部です。基本的には、無効化を追跡し、キャッシュがキャッシュラインの所有権を取得してそのラインに書き込むことができるように、無効化が適切に完了することを保証するキューです。ロードキューは、アウトオブオーダープロセッサでの実行中のロードを追跡する投機的な構造です。たとえば、以下が発生する可能性があります

  1. XからCPUが投機的にロードを発行する
  2. そのロードはプログラム順でしたafter Yへのストアですが、Yのアドレスはまだ解決されていないため、ストアは続行されません。
  3. Yは解決され、Xと等しくなります。Yへのストアが解決された時点で、ストアはロードキューを検索して、発行されたがプログラム順でYへのストアの後に存在する投機的なロードを探します。 Xへのロード(Yに等しい)に気づき、ロードX以降でこれらの命令を押しつぶす必要があります。

ストアバッファーは、ロードキューと同様にCPUに存在する投機的な構造で、CPUがストアを推測できるようにするためのものです。書き込み結合バッファーはメモリシステムの一部であり、基本的には小さな書き込み(8バイトの書き込みを考える)の束を取り、それらをメモリシステムに送信する前に1つの大きなトランザクション(64バイトのキャッシュライン)にパックします。これらの書き込みは投機的ではなく、コヒーレンスプロトコルの一部です。目標はバス帯域幅を節約することです。通常、書き込み結合バッファーは、キャッシュされていないI/Oデバイスへの書き込みに使用されます(多くの場合、グラフィックカード用)。 I/Oデバイスでは、8バイトの書き込みを行うことでデバイスレジスタのプログラミングを行うのが一般的です。書き込み結合バッファーを使用すると、それらの書き込みをキャッシュを超えて送信するときに、より大きなトランザクションに結合できます。

35
Nathan Binkert