Re: マルチCPUのキャッシュ(コヒーレンシ)について質問
SAITOH Akinori <saitoh@kankyo-u.ac.jp.nospam> writes:
> > つまり、コヒーレントなキャッシュとは「同期を自動化してくれる」仕組みで
> > はなくて、「局所性の利用を自動化してくれる」キャッシュという仕組みを、
> > 並列計算機でも利用できるようにしたものなのだと思います。
>
> 個人的に持っているイメージですが、、
> 「キャッシュ無しのマルチCPUマシン用に書いたプログラムが
> そのまま動くようにという配慮」かなぁ。
そうですね。「キャッシュ」っていうのは透明な(キャッシュ無しの場合と、
プログラムの意味は変わらない)ものであって欲しくて、コヒーレンシを考慮
せずにマルチプロセッサにキャッシュを持ち込むと、それが崩れてしまうんで
すね。
「あるアドレスのメモリ内容は、どこからみても同じ」であって欲しいのに、
そうでなくなっちゃう。
> マルチプロセッサでのCPU間の通信って、メッセージパッシング的な
> ものだけではなく、あるCPUが適宜更新する内容を他のCPUが非同期に
> サンプリングする(とくにロッキングしない)といった形もあるわけで、
> ある特定の方式だけ想定したキャッシュのコヒーレンシは役に立つ
> 立たないといってもきりが無いと思います。
「データを明示的に送受する」「受けとったものは、ローカルな(キャッシュ
の効く)領域に入れて、いろいろ計算する」っていうような使い方だけなら、
コヒーレンスは不要でしょうね。キャッシュしない特別な領域を経由してやり
とりするとか。
プログラミングとしては、「逐次のCのプログラムを元に、マルチスレッドラ
イブラリを使って、普通のCの変数を共有して…」というのは出来なくって、
MPIみたいな通信パラダイムのものになるでしょうね。
そういう陽にデータを通信するモデルではなくて、たとえば並列ガーベジコレ
クションみたいに、「アプリケーションスレッドが動いている裏で、ガーベジ
コレクタがデータ全体を見ながらこっそり処理する」ようなプログラムは、コ
ヒーレントな共有メモリじゃないとやりにくいですよね。
まあ、せっかくメモリを共有してるんだから、通信パラダイム以外の使い方も
できた方がうれしい。
前田敦司
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