マルチコアと同期

MESIプロトコルで、コア0がModified(M)状態で持っているラインを、コア1が読もうとしたときの一般的な動作はどれか。

  1. Aコア0が最新の値を書き戻すかコア1へ直接渡し、両方のラインがShared(S)状態になる
  2. Bコア1は主記憶の古い値を読み、コア0はM状態のまま残る
  3. Cコア1の読み出しは、コア0がラインを追い出すまでずっと待たされる
答えと解説を見る

正解:A. コア0が最新の値を書き戻すかコア1へ直接渡し、両方のラインがShared(S)状態になる

コア1の読み出しの要求を知ったコア0は、自分が最新の値を持っていると分かっているので、その値を主記憶に書き戻すか、コア1に直接渡します。その後は2つのコアが同じ内容を持つので、どちらもS状態になります。主記憶の古い値を読ませないことが大切です。直接渡す方式は、主記憶を経由するより速く値を届けられます。

  • A. 正しい。最新の値が共有されます。
  • B. それではコヒーレンシが保たれません。
  • C. 追い出しを待たずに、すぐに対応します。
この分野を解く 分野ページへ

マルチコアと同期のほかの問題

  1. キャッシュコヒーレンシのスヌーピング方式の説明として正しいものはどれか。
  2. コアの数が多いシステムで、スヌーピング方式の代わりにディレクトリ方式のコヒーレンシが使われる理由として正しいものはどれか。
  3. コヒーレンシのプロトコルには無効化型と更新型がある。多くのCPUが無効化型を採用している理由として最も適切なものはどれか。
  4. マルチスレッドのプログラムで起こる偽共有(フォールスシェアリング)の説明として正しいものはどれか。
  5. スレッドごとのカウンタを「long cnt[8];」のように並べた配列で偽共有が起きている。対策として最も適切なものはどれか。