Index
/
Reload
Edit on
2006-08-11
このコメントを修正します。
内容を修正した後で投稿時のパスワードを入力してください。
現在、コメントを削除する機能がありません。
コメントを削除したい場合には、 コメント欄を空欄にしておいてください (管理人が後で削除します)。
お名前:
E-mail or URL:
Password:
コメント:
Store forwarding を受けた load (local load) の global visibility に関する理解の違いですね… 以下の点についてうんのさんの考えが分かれば、私の疑問も氷解するかもしれません。コメント[13]にお答えする前に、できれば先にお教えください。 私は SPARC の仕様は以下のものを参照しています。 http://www.sparc.com/standards/V8.pdf http://www.sparc.com/standards/SPARCV9.pdf 私は上記の SPARC V9 のマニュアルの中から global visibility に関するはっきりした定義は見つけられずにいます。またメモリモデルの文脈で visible という言葉が使われる箇所を順に読むと、store 操作か barrier 操作しか visible と言っていないように読めます。 # その中で Single-Port Memory への値が反映が完了した or Single-Port Memory から値を反映した状態が、 # global visible だと私は漠然と理解しました。 私の知っている範囲で visibility order を一番はっきりした定義しているのは、"A Formal Specification of Intel Itanium Processor Family Memory Ordering" です。 http://developer.intel.com/design/itanium/downloads/251429.htm しかし IA-64 メモリモデルは CPU 毎に独立したメモリを持っていて、load は常にローカルなメモリから読み、store が global visible になった時点で他の CPU のメモリに転送されるというモデル(つまり他の CPU の load は見えないモデル)になります。 うんのさんの知る "global visible" のスタンダードな定義は、どのドキュメントのどの定義に基づくものなのでしょうか?以降、私もそれを読んでから議論させていただきます。 P.S. 申し訳ないが一点だけ先に。 > 「IBM System/370 には呪われし storage key という仕組みがあるため…」以下の説 > 明は、store forwarding を採用できなかった理由の説明としてはあり得ると思いま > す。 > > が、Store forwarding をした場合、後続の load が先行の store を追い抜くことに > なるという私と同じ言葉使いを IBM もしてますよという私の指摘に対する反論には > なっていないはずですが。 私の言い方が悪くて申し訳ない。 IBM PoO はソフト開発者の立場から記述されおり、store buffer や cache のようなプロセッサの内部構造は隠蔽されている点はうんのさんも御存知のはずです。そして「(異なるメモリアドレスに対する)load が store を追い抜く」という記述は、PoO では "as observed by other CPUs" つまり外部の CPU から観測可能な事象として記述されています。 うんのさんは S/370 系 CPU に Store forwarding を導入するとしたら PoO の "Relation between Operand Accesses" の項の "However, a storage-operand store appears to precede a conceptually subsequent storage-operand fetch from the same main-storage location." の記述(とそれと同様の部分)を削るだけで済むとお考えです。しかしそれでは storage-key など PoO の他の部分と整合性が取れなくなると私は思います。もし整合性が取れないのだとすると、それは PoO の "as observed by other CPUs" によって規定されるメモリ規則と、うんのさんが考える SPARC の「global visibility order」には差があるのではないでしょうか? これは私の考えですが、S/370 系 CPU に store forwarding を導入した場合、PoO には store forwarding という言葉や説明が出てこないと思います。そして PoO の "Relation between Operand Accesses" などの記述が「store-reference 後から serialization までの間に同じメモリに対する fetch-reference があった場合、その fetch-reference が他のプロセッサから観測できるかどうかは unpredictable である」という風に書き改められると考えます。 # つまり 1:store[X] → 2:load [X] → 3:load [Y] は、2: よりも先に 3: が "observed by other CPUs" されると風になる。
Powered by
くっつき BBS