マルチコアと同期
MESIプロトコルで、コア0がModified(M)状態で持っているラインを、コア1が読もうとしたときの一般的な動作はどれか。
- Aコア0が最新の値を書き戻すかコア1へ直接渡し、両方のラインがShared(S)状態になる
- Bコア1は主記憶の古い値を読み、コア0はM状態のまま残る
- Cコア1の読み出しは、コア0がラインを追い出すまでずっと待たされる
答えと解説を見る
正解:A. コア0が最新の値を書き戻すかコア1へ直接渡し、両方のラインがShared(S)状態になる
コア1の読み出しの要求を知ったコア0は、自分が最新の値を持っていると分かっているので、その値を主記憶に書き戻すか、コア1に直接渡します。その後は2つのコアが同じ内容を持つので、どちらもS状態になります。主記憶の古い値を読ませないことが大切です。直接渡す方式は、主記憶を経由するより速く値を届けられます。
- A. 正しい。最新の値が共有されます。
- B. それではコヒーレンシが保たれません。
- C. 追い出しを待たずに、すぐに対応します。