Re: マルチCPUのキャッシュ(コヒーレンシ)について質問
回答ありがとうございます。
> [1] CPU1_Read
> [2] CPU2_Write
> [3] CPU1_Read
> のようなパターンでは意味があります. つまり, [1] で CPU1 が読み込
> んだ (そしてキャッシュに入れた) 領域に対して [2] で CPU2 が書き込
> み, その書き込んだデータを [3] で CPU1 が読み込むようなときには,
> [2] で CPU2 が書き込んだデータを [3] で CPU1 が確実に読み込めなけ
> ればなりません. ということで, CPU1 は CPU2 がデータを書き込んだと
> いう情報を元に自らの持つキャッシュを更新するかデータを無効にする
> 必要があります.
> # producer-consumer とか semaphore では必要そうな感じ.
例えばセマフォですと、swapとかtest&setのような不可分命令を用いなけ
れば、CPU1_Read -> CPU2_Read -> CPU1_Write -> CPU2_Writeのようにな
ってしまう可能性がありうまくないですし、swapを使うということは、セ
マフォの場所が予め判っているわけだから、マルチCPU下では非キャッシ
ュ領域使用とかCPUでパージするなどソフト的に行ってもなんの問題もない
気がするのです。共有領域がソフト的に明示であるということにより。
わざわざハードで搭載するということは、その状態を検知するのが非常に
難しい/時間が掛かるためなんではないかと思うのですが、セマフォのよう
にそんなに高速性が要求されなかったり、メッセージキューなどのように
相手や用い方が判っているような場合は、なくても問題が少ないんではな
いかと思うのです。なのでこういった使われ方以外の、何かソフト側では
想定しきれない(しかも1R-2R-1W-2Wパターンは起き得ない)用途があるの
かなと。
実は私の想定が甘々で、セマフォなどでもスヌープがないと全然わからな
い/高速性が要求されるなどあるのかもしれませんが、MMUのようにハード
でないと非常に困る、もしくはスヌープのパフォーマンス劣化に見合うと
いう状況があれば知りたいと思います。
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