Re: マルチCPUのキャッシュ(コヒーレンシ)について質問
goronです。回答ありがとうございます。
複数キャッシュに対してコヒーレンシを成り立たせるために、andoさんが
説明されたような動作を行えばよいというのは判ります。しかし例えば、
> 複数のCPUが全く別の処理を行っていれば,関係ありませんが,複数のCPUで
> 処理を分担する場合には一つのCPUのStoreした結果を別のCPUがLoadすること
> は当然起こるわけですが,Storeした結果がメモリに何時反映されるのか分か
> らないのでは困ります。
何時反映するのか、の何時というのは時間ではない(つまり1cycle前にダーテ
ィになったから反映しなければならないとか)のではないかと思います。時間
だと外部要因などにより予想外の動作をした場合、結果が変わってしまう可能
性がある。逆に外部要因で変わるぐらいのアバウトさでいいなら、コヒーレン
シって本当に必要なのでしょうか。その場合多少昔のデータを持っていてもあ
んまり変わらない気がする。というか具体的な問題点がよくわかりません。
従って実際は時間ではなく、各スレッド間のプログラム位置的相関関係という
か同期すべきポジションが必ずあるということでしょうか。つまりセマフォ等
で必ず同期を取る必要性があると思っていいのでしょうか。しかしセマフォな
ど同期機構と必ずセットなのだとするとパタヘネにしろ他の書籍にしろそんな
こと書いていないので、やっぱりよくわかりません。それともそういったこと
とは関係なくコヒーレンシは必要でしょうか。
次の疑問として、CPU1_Read -> CPU2_Read -> CPU1_Write -> CPU2_Writeはど
うなのかなというのがやっぱりあります。これを避けるためにはReadして変更
してWriteする動作全体を単数にする必要があり、そのためにはそれを囲うよう
な排他処理をする必要がありますでしょうか。つまりセマフォがやっぱり必須
なのかと。
と、上述のように共有メモリを扱うにはどのような処理をするにも必ず同期が
必要になるのかな、という気がするのですが。逆に言えば必ず同期がいるのな
ら、同期解除時にソフトが他のキャッシュをインバリデートする機構を付ける
とかすれば、機構も簡易になるし、まとめてインバリデートするわけだからバ
スも込まないし、って思うのですが、自動でなければならない理由がいまいち
わからなくて。
やっぱり勘違いがありますかねー。
ando_san wrote:
> 通常用いられているキャッシュはWrite Back Cacheという方式で,CPUがメモリ
> にストアしてもキャッシュに書かれるだけでメモリには書き込みが起こりませ
> ん。何時,メモリに書き込まれるかというとそのキャッシュラインを別のReadで
> 使う必要が出た時に,メモリへの追い出しが起こります。逆に言うと,その
> キャッシュラインを追い出す必要が無ければ何時までもメモリには書かれません。
>
> ここで言うキャッシュラインはアクセスするアドレスを含むキャッシュの管理
> 単位で,一般的には32バイトから256バイト程度の大きさです。
>
> 複数のCPUが全く別の処理を行っていれば,関係ありませんが,複数のCPUで処
> 理を分担する場合には一つのCPUのStoreした結果を別のCPUがLoadすることは当
> 然起こるわけですが,Storeした結果がメモリに何時反映されるのか分からない
> のでは困ります。そのために,CPUはLoadで新たに自分のキャッシュにデータを
> 読み込む時には,他の全てのCPUのキャッシュにそのデータが入っていないかを
> チェックします。そしてどれかのCPUがそのキャッシュラインに書き込んで
> (ModifiedとかDirtyとか呼びます)いれば,メモリのデータは古いので,その
> CPUのキャッシュからデータを読み込みます。
>
> また,あるCPUがメモリに書き込む場合は,他のCPUがそのキャッシュラインを
> 持っていてそれを使い続けると,本来,同じアドレスであるべきデータが矛盾し
> てしまうので,Modifiedのキャッシュラインを持っているCPUがあればそこから
> データを送ってもらい,そして,自分以外のCPU全部にそのキャッシュラインを
> 捨てろという要求を出し,全員が捨てたことを確認してから,キャッシュライン
> に書き込みを行います。こうすれば,他のどのCPUも同じアドレのデータスを
> キャッシュに持っていないので矛盾は生じません。
>
> このように自分のキャッシュに無いメモリをアクセスする場合や,自分の
> キャッシュにあっても書き込みを行う場合は,他のCPUが同じデータをキャッ
> シュに持っていないかどうかを確認し,矛盾の生じない処理を行うことをキャッ
> シュコヒーレンスと言います。
>
> Ando_san
Ando's Processor Information Pageの更新をいつも楽しみにしてます。
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