Index
/
Reload
Edit on
2006-08-11
このコメントを修正します。
内容を修正した後で投稿時のパスワードを入力してください。
現在、コメントを削除する機能がありません。
コメントを削除したい場合には、 コメント欄を空欄にしておいてください (管理人が後で削除します)。
お名前:
E-mail or URL:
Password:
コメント:
おそらく global visibility order の定義が、私とうんのさんで異なるのだと思います。 パターンとしては (a),(b),(c) でしょうか。 (a) あるプロセッサの立場に立って、そのプロセッサが行った global なメモリ操作(store buffer からデータを bypass された local load を除く)の順序関係。 (b) あるプロセッサの立場に立って、そのプロセッサが行ったロード命令がデータの供給を受ける事象と、store 命令がデータをメモリに書き込む事象の順序関係。 (c) あるプロセッサが行った全てのメモリ操作が「仮想的に」メモリに反映されたと考えた場合、それをその外側のプロセッサが観察していたと考えた場合の順序関係。 うんのさんは (b) の立場で、私は (c) の立場なのだと思います。 (a) なら簡単です。 SPARC の memory ordering の定義を調べてみると (a) が近そうです。 SPARC V8 Spec. は (Figure 6-1 Model of Memory の図を見ると明らかのように) Single-Port Memory へのメモリアクセスの順序、つまりメモリトランザクションの順序が memory ordering だと定義しています。そのため store forwarding を受けた load 命令(以下、local load と呼ぶことにします)は memory ordering による順序付けの適用外になります。以下のように記述されています。 -------- A load by a processor first checks its Store Buffer to see if it contains a store to the same location (atomic load-stores do not need to be checked for because they block the processor). If it does, then the load returns the value of the most recent such store; otherwise the load goes directly to memory. SINCE NOT ALL LOADS GO TO MEMORY, LOADS IN GENERAL DO NOT APPEAR IN THE MEMORY ORDER. A processor is blocked from issuing further memory operations until the load returns a value. -------- SPARC V9 Spec も memory ordering は memory transaction がメモリに届く順序だと規定しています。8.4 節を見る限り V8 と同様に data pat 上を流れるものです。一方、Appendix D. の memory transaction は 8.4 節と微妙に食い違っていて、store fowarding を受ける load に対しても memory transaction が定義されているようにも見えます。 結局、SPARC Spec. の中では local load 命令は memory ordering の中ではっきり順序付けされていないように読めるし、global visibility のはっきりした定義も与えられていません。 私は(ソフト屋ですから) local load 命令が global visible になったと考えるなら、仮想的に local load 命令がメモリから読み込んだと考えます。その場合、コメント[9] のプログラムだと 5: → 1: → 2: → 3: → 4: の順にならざる得ないと思うのですよ。4: → 5: → 1: → 2: → 3: ではデータの消費(4:r2=[X] の読み込み)がデータの生成(3:[X}=1)に先立つと言う、因果律に反した事態になります。 うんのさんは、 > 4: は、2:,3: がいずれも global visible になっていなくても、 > それらを追い越して global visible になれて、 > 実際にそうなっているケースです。 とおっしゃっておられるので、別の定義を採用されているのだと思いますが… > ちょっと話題は変わりますが、IBM のアーキが store forwarding を認めていないというのは、おっしゃるとおりでした。 (snip) > しかし、この文章を store forwarding の禁止であると認めるのであれば(認めるのが正解だと思いますが)、 > store forwarding した場合には、4: が 3: を追い越すのだと解釈することになると思います。 IBM System/370 には呪われし storage key という仕組みがあるためにちょっと特殊なことになると思われます。load 命令が store 命令を追い越すと、そのことを他のプロセッサから検出可能なので…
Powered by
くっつき BBS