ロードバッファとは何か、無効化キューとどう違うのか誰でも説明できますか? また、ストアバッファと書き込み結合バッファの違いは? Paul E Mckenny による論文http://www.rdrop.com/users/paulmck/scalability/paper/whymb.2010.07.23a.pdf は、ストア バッファと無効化キューについて非常にうまく説明していますが、残念ながら、書き込み結合については触れていません。バッファ
1 に答える
無効化キューはストア バッファーに似ていますが、CPU ではなくメモリ システムの一部です。基本的に、これは無効化を追跡し、無効化が適切に完了することを保証するキューであり、キャッシュがキャッシュ ラインの所有権を取得して、そのラインを書き込むことができるようにします。ロード キューは、アウト オブ オーダー プロセッサで実行中のロードを追跡する投機的な構造です。たとえば、次のことが発生する可能性があります。
- CPU が X から投機的にロードを発行する
- そのロードはY へのストアの後にプログラム順で行われましたが、Y のアドレスはまだ解決されていないため、ストアは続行されません。
- Y が解決され、X に等しいことが判明します。Y へのストアが解決されると、そのストアはロード キューを検索して、発行された投機的ロードを探しますが、プログラム順で Y へのストアの後に存在します。X (Y に等しい) へのロードを認識し、ロード X 以降の命令をスカッシュする必要があります。
ストア バッファは、ロード キューと同様に CPU に存在する投機的な構造であり、CPU がストアを投機できるようにするためのものです。書き込み結合バッファーはメモリ システムの一部であり、基本的に一連の小さな書き込み (8 バイトの書き込みと考えてください) を受け取り、それらをメモリ システムに送信する前に 1 つの大きなトランザクション (64 バイトのキャッシュ ライン) にパックします。これらの書き込みは投機的ではなく、コヒーレンス プロトコルの一部です。目標は、バス帯域幅を節約することです。通常、書き込み結合バッファーは、I/O デバイス (多くの場合、グラフィックス カード) へのキャッシュされていない書き込みに使用されます。I/O デバイスでは、8 バイトの書き込みを行うことでデバイス レジスタの一連のプログラミングを行うのが一般的であり、書き込み結合バッファーを使用すると、これらの書き込みを、キャッシュを通過して出荷するときに、より大きなトランザクションに結合できます。