最近私はメモリモデルを読んできましたが、これはどのように動作するのか混乱していました。プロセッサは、新たなXは、新しいY、その後 その後、読み取りXを読み取りYを実行し、 アクセス新しいYと新しいXのどちらかであろう他のすべてのプロセッサを書き込み、書き込まれた場合http://cis.poly.edu/muller/CS623/weakmemory.htmメモリモデルの理解
を引用する
、 古いYと新しいX、または古いXと 古いY:プロセッサはアクセスしません 新しいYと古いXこの は強い順序の仮定は、 で一度、合理的でした。現在のコンピュータ は、 を注文しているプログラマが を使用しないことを推奨しています。新しいメモリ 管理システムは、 のメモリアクセスを最適化 の目的で並べ替えようとするためです。 メモリ要求をリオーダできるシステムは、 弱い順序のメモリシステム (モデル)と呼ばれます。 の並べ替えを使用してパフォーマンスを向上させる方法を調べるには、 次のアセンブラコード [2]を検討してください。
Load reg1, A // register1 = contents of memory A
Load reg2, B // register2 = contents of memory B
ADD reg3, reg1, reg2 // register3 = register1 + register2
Store reg3, C // contents of memory C = contents of register3
我々は、位置Bは、キャッシュと場所Aで現在 あるが キャッシュされていないと仮定した場合、Aは、代わりに Aを待つ長いBよりもCPUを がかかりますすることができますロード Bのレイテンシが隠れているので、A CPUが になるとすぐにCPUは に追加を実行できます。実行の (順次)メモリモデルを緩和すると、最初に読み込まれ、その後に Bがロードされます。より高いパフォーマンスは 可能ですが、並べ替えはソフトウェアに対して透過的ではない可能性があります。以下の コード部分を考慮すると、 スピンロックセマフォ[2]を実装するために使用できる コードの一部です。
私の質問は、それが弱いメモリモデルとプロセッサは、新たなYと古いX.にアクセスできることをケースにつながる可能性があるが、それは同じメモリ(RAM)に書き込まれていないか、ですか、それは異なって機能しますか? 1つのプロセスが変数を変更し、別のプロセスがそれを読み込むと、最新の値が読み込まれると仮定します。
もう1つは、どのコンポーネントがメモリアクセスの並べ替えを許可しているかわかりませんが、私の前提は、コンパイラが命令の並べ替えを許可されているということです。しかし、CPUもそれらを並べ替えることができますか?
ありがとう