海野秀之(うんのひでゆき)の外部記憶
Twitter (twilog) / RSS / アンテナ / ぶくま
http://www.nminoru.jp/~nminoru/diary/2006/08.html#2006-08-11
五月雨式に書くのは控えますとかいいつつ、全然控えられていないので、 反省中。いままでのやり取りをよくよんで、必要な文献もきちんと 調査して、ちゃんと書かないといけないなぁと思う。
いままで、ひとつも嘘は書いていないつもりなのですが。 (いくつか嘘かいていた。後述)
以下、忘れないように、気付いたことを、気付いた順序で。
観測されるのは順序であって、各 load/store がそれぞれ global visible になった 瞬間に「あ、いまだ」と観測されるわけではありません。
観測されるべき、global visibility order が確定する瞬間なら存在する。 ストアなら、coherence domain の一部であるところの、キャッシュに書かれた瞬間。ロードなら、その後キャンセルされずにコミットするようなロード(微妙な書き方)命令において、ロード値がデスティネーション(たとえばレジスタ)に書かれた瞬間。
こっちを知っていなければわからない順序になっている(ように見える) ところが、誤解の種なんだろうか。
V9 の参考文献リストをみるに、どうやら、SPARC V8 は 「Sindu 以前」 であるらしい(←たぶん、これウソ)。 で、実際に SPARC V8 の TSO に関する記述は混乱している 可能性が高そうだ。これは、引用された部分からもうかがえる。 しまつた。
(追記)「混乱している」というのは、不必要な説明があるという意味。 TSO の定義はハードインプリに関する説明とは切り離しておこなわれる べきなのに、必須でないインプリに依存した説明になっていそうだ ということ。
その点、(そういうのに比べると)P.O.O. は笑えるくらい論理的。 直接関係ないけど、Storage Addressing のところを読んだときには、 目から鱗が落ちる気持ちだった。
(追記2)いくつか嘘かいてました。 Memory transaction という言葉はでてくる。 しかし、それが何なのかははっきりとは示されていないようにも。 もう一度きちんと読む必要があるが、 model として、キャッシュがなくて、だけど、ストアバファがある、 メモリは instruction の指定したサイズの load/store を直接うけつけることができるようなものを想定して、 その上で記述されているような感じ。 そうすると、global visible point は一点にみえる (store forwarding が微妙)
当然、キャッシュを持つシステムでは、物理的にはあちこちに global visible point が発生するが、そんなもんはインプリ依存だから 知らん、というわけでしょう。きっと。
Memory order の定義については、単に僕がまちがってた。
「表示可能な文字数を 1000 → 2000 に増やして」も足りなかったみたい。なんてこった。