質問
、それはCPUのキャッシュを無効にします。
私の質問はこれです:実際に無効化されるキャッシュのどの部分?唯一私が取得/解放を使用していた変数を開催したキャッシュライン?または、おそらく全体のキャッシュが無効化されますか? (L1 + L2 + L3 ...など?)。私が取得/解放のセマンティクスを使用するか、このテーマに差があり、私はフルフェンスを使用する場合?
解決
私はこれの専門家ではないんだけど、私は、この文書につまずいた、多分それは便利です http://www.rdrop.com/users/ paulmck /拡張性/紙/ whymb.2009.04.05a.pdfする
他のヒント
あなたはフェンスやミューテックスなしに負荷を実行すると、その後、ロードされた値は、潜在的にどこから来ることができ、すなわち、キャッシュ、レジスタ(コンパイラの最適化を介して)、またはRAM ...しかし、あなたの質問から、あなたはすでにこれを知っていましたます。
あなたがミューテックスを取得する場合ほとんどのミューテックスの実装では、フェンスは常に明示的に(例えば、MFENCE、バリアなど)または暗黙的(x86のバスをロックするなど、ロックプレフィックス)、適用されます。これは、パス上のすべてのキャッシュのキャッシュラインを無効にすることになります。
全体のキャッシュはメモリ位置のためだけのそれぞれのキャッシュライン、無効化されないことに留意されたいです。これはまた、(通常、メモリ内の値として実装されている)ミューテックスの行を含む。
もちろん、そこにアーキテクチャ固有の詳細がありますが、これは一般的にどのように動作するかです。
は、また無効化するもう一つ上のキャッシュを必要とする1つのCPU上での操作があるかもしれないとして、これは、無効キャッシュのための唯一の理由ではないことに注意してください。 「キャッシュコヒーレンス・プロトコル」のためのGoogle検索を行うと、このテーマに関する多くの情報を提供します。