2011-01-04 4 views
5

最近私はメモリモデルを読んできましたが、これはどのように動作するのか混乱していました。プロセッサは、新たな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もそれらを並べ替えることができますか?

ありがとう

答えて

4

CPUとメモリの間にキャッシュがあることを覚えておく必要があります。ソフトウェアが値を書き込むのは確かにキャッシュに書き込まれますが、キャッシュがRAMにコピーする前にその値が再び書き込まれると、メイン・メモリには決して行きません(ループ変数とローカルと考える)。この全体的な議論は、データが実際にRAMに置かれるか、またはRAMから読み出されるときに、異なるモデルを中心に展開されます。コア内では、キャッシュやRAMから来る天気を書いた最後の値を使用するため、実際には問題になりません。