河野真治 @ 琉球大学情報工学です。

In article <cpjoq2$ce0$1@dojima-n0.hi-ho.ne.jp>, goron <naoij@m.ieice.org> writes
> そのため、複数のCPUが同一領域を更新するような場合は、キャッ
> シュをコヒーレントしたところで意味はなく、1つのCPUが更新・他のCPU
> はリードという場合のみ意味がある、しかしその割にはスヌープ機構は複
> 雑だし、実際は別の方法/用途があるのだろう、という考えになってしまい
> そこから一歩も出られません。

その理解は割と正しいんじゃないかな。

コヒーレントってのは、目標としては、
     整合性
があるわけで、その整合性は、
     トランザクション
という単位の整列可能性という形で定義されます。

で、そのトランザクションを、
     メモリアクセス
という単位で要求すれば、キャッシュコヒーレンスということになるわけ。

実際、
     par begin
        do i=1,99999
          mem[i]=mem[i+1]+mem[i]
        od
     par end
みたいなアプリケーションに関しては、キャッシュコヒーレンスは極めて
重要っていうかなければ、やってられないわけ。

なんだけど、並行実行の単位が異れば、メモリアクセス単位で通信
する必然性はないわけで、その場合は、スヌープは不必要に複雑な
通信ということになります。

なんだけど、
     並行実行の単位として、例えばオブジェクトを導入する
ってことになると、スヌープみたいな、

    あるメモリ領域に対してアクセスされた時に、suspend & signal する

ってのは、結構欲しくなる。それ抜きに明示的に通信すれば良いっていう
考えもありますし、メモリアクセスを検出して明示的な通信をするっていう
実現もあるんですけどね。

同期機構は階層的に構築されるものなので、その下位階層としてスヌープ
という同期機構があると考えれば良いんじゃないでしょうか。

---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科