マルチCPUのキャッシュ(コヒーレンシ)について質問
goronと申します。
マルチCPUについて独学している者ですが、マルチCPUのキャッシュ、特に
コヒーレンシの意義がよくわかりません。
CPUの参考図書などでもキャッシュコヒーレンシの方法やそのものの機能・
意味などは書かれており、理解もできているつもりですが、なぜそれが必
要なのか、どういった場面で有効なのかが理解できていません。そのため
下記の様な疑問が常にあり、それが解決できません。
例えば、複数のCPUが同一領域を読込・更新した時に、
CPU1_Read -> CPU2_Read -> CPU1_Write -> CPU2_Write
といったアクセスをした場合、スヌープなどにより複数キャッシュの一意
性が保たれても、それ以前にレジスタにリードされていれば無意味ではな
いか、またどちらのライトが有効かはタイミングによって変動するため、
意味のあるアクセスにするためにはコヒーレンシというよりメモリアクセ
スのロック機構のようなものの方が必要ではないか。
つまりキャッシュコヒーレンシはあくまでもキャッシュまでのコヒーレン
シであり、記憶階層の頂点であるレジスタのコヒーレンシは(当然)保た
れない。そのため、複数のCPUが同一領域を更新するような場合は、キャッ
シュをコヒーレントしたところで意味はなく、1つのCPUが更新・他のCPU
はリードという場合のみ意味がある、しかしその割にはスヌープ機構は複
雑だし、実際は別の方法/用途があるのだろう、という考えになってしまい
そこから一歩も出られません。
どなたか、この本を読め/このwebを見よでも構わないので、お教えいただ
けませんでしょうか。
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