マルチコアと同期

無効化型のコヒーレンシプロトコルで、あるコアがShared(S)状態のラインに書き込むときに行われることはどれか。

  1. Aほかのコアのコピーはそのままにして、自分のラインだけを書き換える
  2. Bほかのコアが持つ同じラインのコピーを無効にしてから、自分のラインをM状態にして書き込む
  3. Cすべてのコアのキャッシュを空にしてから書き込む
答えと解説を見る

正解:B. ほかのコアが持つ同じラインのコピーを無効にしてから、自分のラインをM状態にして書き込む

S状態はほかのコアも同じラインを持っている可能性がある状態なので、そのまま書き込むと他のコピーが古くなります。そこで無効化の要求を送り、ほかのコアのコピーをI状態にしてから、自分のラインをM状態にして書き込みます。ほかのコアが次にそのデータを読むときはミスになり、最新の値を取り直します。多くのCPUがこの無効化型を採用しています。

  • A. それでは他のコアが古い値を読んでしまいます。
  • B. 正しい。古いコピーが残らないようにします。
  • C. 関係のないラインまで消す必要はありません。
この分野を解く 分野ページへ

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

  1. MESIプロトコルで、コア0がModified(M)状態で持っているラインを、コア1が読もうとしたときの一般的な動作はどれか。
  2. キャッシュコヒーレンシのスヌーピング方式の説明として正しいものはどれか。
  3. コアの数が多いシステムで、スヌーピング方式の代わりにディレクトリ方式のコヒーレンシが使われる理由として正しいものはどれか。
  4. コヒーレンシのプロトコルには無効化型と更新型がある。多くのCPUが無効化型を採用している理由として最も適切なものはどれか。
  5. マルチスレッドのプログラムで起こる偽共有(フォールスシェアリング)の説明として正しいものはどれか。