Re: マルチCPUのキャッシュ(コ ヒーレンシ)について質問
河野真治 @ 琉球大学情報工学です。
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
河野真治 @ 琉球大学工学部情報工学科
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735