1

x64でのメモリの順序付けに関する Intel のドキュメントを読みました: http://www.multicoreinfo.com/research/papers/2008/damp08-intel64.pdf 。注文。しかし、障壁によって引き起こされる可視性については何もありません。バリアが原因で、他のプロセッサが変数の更新をすぐに確認できるようになるのでしょうか?それとも、更新が指定された順序でのみ、指定された時間ではなく他のプロセッサに伝播されるのでしょうか?

例えば

スレッド 1:

flag = true;
MemoryBarrier();

スレッド 2:

MemoryBarrier();
tmp = flag;

スレッド 1 がスレッド 2 の前にそのコードを実行する場合、スレッド 2 は常に flag=true になりますか?

4

1 に答える 1

3

バリアは、他のプロセッサが指定された順序で更新を確認することを保証しますが、それがいつ発生するかは保証しません。

マルチプロセッサ システム [1] で「即時」をどのように定義するか、またはスレッド 1 がスレッド 2 の前に実行されることをどのように保証しますか? この場合、1 つの答えは、スレッド 1 が xchg などのアトミック命令を使用してフラグ変数へのストアを実行し、次にスレッド 2 がフラグでスピンし、値が変化したことに気付いたときに処理を続行することです (方法による)。 x86 メモリ モデルは機能します。スレッド 2 は通常のロード命令を使用してスピンできます。ストアがアトミックで行われるだけで十分です)。

[1] 相対論的物理学の観点から考えることができます。各オブザーバー (スレッド) は、独自の「光円錐」を通してイベントを見ます。したがって、すべての観測者に対して単一の世界時などの概念を放棄する必要があります。

于 2012-08-23T09:03:47.733 に答える