11

変数の「アグレッシブ」なメモリ整合性モデルを実装するCまたはC++コンパイラはありvolatileますか?「アグレッシブ」な整合性モデルとはvolatile、生成されたコードのメモリバリアを伴う変数へのすべての書き込みを伴うことを意味します。

AFAIK、これはIA64(Itanium)プラットフォーム上のCまたはC++コンパイラの通常の動作です。x86はどうですか?volatilex86プラットフォームで変数を処理するためのItaniumのようなアプローチを実装する(または実装するように構成できる)コンパイラはありますか?

編集:volatile VS 2005が(コメントを読んだ後に)生成するコードを見ていますが、変数にアクセスするときに、あらゆる種類のメモリバリアに似たものは見当たりません。これは、MESIF(Intel)およびMOESI(AMD)キャッシュプロトコルにより、シングルCPUマルチコアx86プラットフォームでメモリの一貫性を確保するのにまったく問題ありません。

ただし、これはマルチCPUSMPx86プラットフォームでは不十分のようです。SMPプラットフォームでは、CPU間のメモリの一貫性を確保するために、生成されたコードにメモリバリアが必要になります。私は何が欠けていますか?変数に対して取得と解放のセマンティクスがすでにあるとMicrosoftが主張する場合、Microsoftは正確に何を意味しvolatileますか?

4

1 に答える 1

2

x86 CPUは、他のロードとのロードも他のストアとのストアも並べ替えないことに注意してください。そのため、明示的な障壁は必要ありません。

MSVCコンパイラは、ロードが揮発性ロードで並べ替えられないようにし、ストアが揮発性ストアで並べ替えられないようにします(もちろん、ロードとストアの命令の並べ替えについて話します)。したがって、揮発性ロードとストアのそれぞれの取得と解放のセマンティクスが保証されます。 。

于 2012-06-27T20:33:02.163 に答える