この質問はです。具体的には、は、現代のx86-64キャッシュコヒーレントアーキテクチャーを対象としています。答えは他のCPUで異なる可能性があります。具体的には、x86キャッシュ行をdirtyとマークするものは何ですか?
メモリに書き込む場合、MESIプロトコルでは、キャッシュラインが最初にキャッシュに読み込まれ、次にキャッシュ内で変更される必要があります(値はダーティとマークされたキャッシュラインに書き込まれます)。古い書込み型マイクロアーキテクチャでは、これによりキャッシュラインがフラッシュされ、ライトバック中にキャッシュラインがフラッシュされてしまい、しばらくの間遅延することがあり、両方のメカニズムでライト結合が発生する可能性があります。そして私はこれが他のコアと同じキャッシュラインのデータキャッシュ・スヌーピングにアクセスする方法を知っています。
私の質問は、ストアがキャッシュ内の値と正確に一致すれば、どのインテルマイクロアーキテクチャーがこれに気付き、NOT行をダーティとマークして、行を排他的とマークしないようにし、ある時点でのライトバックメモリオーバーヘッドを保存しますか?
ベクタライズされた演算構成プリミティブは値の変更を明示的にチェックしていないため、CPU/ALUでは無駄に思えますが、基本的なキャッシュ回路ができるかどうかは疑問でした明示的なコーディング(例えば、店舗マイクロオペレーションまたはキャッシュロジック自体)を必要としない。複数のコアにわたる共有メモリの帯域幅がリソースのボトルネックになるほど、これはますます有用な最適化のように思えます(たとえば、同じメモリバッファを繰り返しゼロにするなど)。キャッシュ内で、同じ値の書き戻しを強制するのは無駄に思われます)。ライトバックキャッシングは、それ自体がこのような問題を認識しています。
"理論的に"または "それは本当に問題ではない"答えを丁寧に要求することができますか - 私はメモリモデルの仕組みを知っています、私が探しているのは、ストアを回避するのとは対照的に)メモリバスの競合に影響を与えます。メモリバスの競合には、メモリ帯域幅によってほぼ決まる複数のワークロードを実行しているマシンが安全に想定されます。一方のチップはこれをしない理由は、正確な理由の説明(私は悲観的にそうではないと仮定していますが)啓発だろう...
アップデート:ここで予想線に沿っていくつかの答えhttps://softwareengineering.stackexchange.com/questions/302705/are-there-cpus-that-perform-this-possible-l1-cache-write-optimizationしかし、まだまだひどい推測である "それは完了していないので難しいだろう"と言って、メインのCPUコアでこれを行うのは高価かもしれないと言っている(しかし、私はまだそれが実際のキャッシュロジック自体)。現在、のx86の無実装
https://softwareengineering.stackexchange.com/questions/302705/are-there-cpus-that-perform-this-possible-l1-cache-write-optimizationの回答は、特に現在受け入れ中のものですキャッシュ/ CPUレジスタの理解が不足しています。 –