Re: マルチCPUのキャッシュ(コヒーレンシ)について質問
皆様ありがとうございます。
大方必要性、利点など理解できたと思います。
すいませんが、ここに返信をまとめさせていただきます。
まず理解できたこととして、
1.まず、コヒーレンシ機構は同期とは無関係。あくまでもキャッシュの
局所性をマルチCPUに対応させる機構として存在する。
2.コヒーレンシを自動化することにより、システムのバリエーションに
対する適応性が高まる。キャッシュを意識したプログラムを書く必要
がなくなる。
コヒーレンシを意識したプログラムを書くこと自体、キャッシュを意
識しているということですね。
3.各々のプロセスに対する同期は不必要だが各アクセスに対する応答の
リアルタイム性が必要なアプリケーションはある。例えばガベージコ
レクタの一手法として有用。
と、ここで私の言い方が拙かった/途中でごっちゃになったために誤解を招
くことになった同期ですが、私もコヒーレンシと同期を同一のものと思っ
ていたわけではありません。ただし、今でも図書などを主とする大方の説
明で疑問が残っているひとつとして、コヒーレント機構で解決する同時性
というのがリアルタイム時間でいいのか、というのはあります。
マルチCPUの場合、各CPUが刻んでいる時間というのは相対的なものである
はずです。あるCPUのアクションと別のCPUのアクションに依存関係があっ
てほしい、というのが理由であって、別段各々の時計が同じであって欲し
いのが大元の理由ではない。だからこそ同期機構により時間を強制的に調
歩させたり、メッセージパッシングのように時間ではなく順番に依存させ
たりするわけで。
従って、そこに対しリアルタイム時間が同じだからといってズケズケと勝
手にデータ内容を変えてしまう、というのは一見当然あるべきと思えて実
際は違うのかなと。
それに対し同期を取った瞬間というのは、ある意味マルチCPUに対する時間
の最小単位であり、リアルタイム時間とも同期しているのだから、その時
こそコヒーレンシが必要な時だろうと。
つまり、コヒーレンシと同期は違うものだけど、必ず対で必要な切っても
切り離せないものだろうという考えです(そこに対し、そうでもないパタ
ーンというのが提示されたというのが、今回の最大の収穫かなと思います)。
ですので、コヒーレンシのためにキャッシュがいらない、と最初に言った
のはオーバーで申し訳なかったのですが、常にコヒーレンシを解決してし
まう(ように見える)スヌープのような機構はtoo muchで、もっと簡単に
解決できる機構があるんじゃないかな(特にソフトウエアと協調で)、と
いうのに今回一番筆を割いていました。
例えばスヌープがなくても、writeしたからといって必ずパージをしてしま
うのではなく、同期時に最後にアクセスしたプロセス番号(もしくはCPU番
号?)を追加しておくだけで、連続アクセスできる/できないを制御できま
すし。まぁそれもコヒーレンシを意識したプログラムを書くこと自体が、
そのプログラムの可搬性を狭めることになるので良し悪しということもわ
かりました。
------
goron
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