x86 Windows で CPU キャッシュをフラッシュするにはどうすればいいですか? 質問する

x86 Windows で CPU キャッシュをフラッシュするにはどうすればいいですか? 質問する

私は、Windows で CPU キャッシュのフラッシュを強制することに興味があります (ベンチマークの理由から、CPU キャッシュにデータがない状態から開始することをエミュレートしたい)。できれば、基本的な C 実装または Win32 呼び出しが望ましいです。

システム コールを使用してこれを行う既知の方法、または大きな を実行するなどの巧妙な方法はありますかmemcpy?

Intel i686 プラットフォーム (P4 以上でも問題ありません)。

ベストアンサー1

幸いなことに、キャッシュを明示的にフラッシュする方法は複数あります。

「wbinvd」命令は、変更されたキャッシュの内容を書き戻し、キャッシュを空としてマークします。外部キャッシュのデータをフラッシュするためのバス サイクルを実行します。残念ながら、これは特権命令です。ただし、DOS などでテスト プログラムを実行できる場合は、これが最適な方法です。これには、「OS」のキャッシュ フットプリントを非常に小さく保つという利点があります。

さらに、キャッシュを無効にする「invd」命令もあります。それなしメイン メモリにフラッシュバックします。これはメイン メモリとキャッシュの一貫性に違反するため、自分で対処する必要があります。あまりお勧めできません。

ベンチマークの目的の場合、最も簡単な解決策は、おそらく、大きなメモリ ブロックを WB ではなく WC (書き込み結合) でマークされた領域にコピーすることです。グラフィック カードのメモリ マップ領域は適切な候補ですが、MTRR レジスタを介して自分で領域を WC としてマークすることもできます。

短いルーチンのベンチマークに関するリソースは以下で見つけることができます。クロック サイクルの測定とパフォーマンスの監視のためのテスト プログラム。

おすすめ記事