マルチコアと同期

コアの数が多いシステムで、スヌーピング方式の代わりにディレクトリ方式のコヒーレンシが使われる理由として正しいものはどれか。

  1. A各ラインをどのコアが持っているかを記録しておき、関係するコアにだけ通知することで通信を減らせるから
  2. Bディレクトリ方式ではキャッシュが不要になるから
  3. Cディレクトリ方式では書き込みのたびにすべてのコアへ通知できるから
答えと解説を見る

正解:A. 各ラインをどのコアが持っているかを記録しておき、関係するコアにだけ通知することで通信を減らせるから

ディレクトリ方式では、各ラインについて、どのコアがコピーを持ち、どの状態かを記録した表(ディレクトリ)を持ちます。書き込みがあると、ディレクトリを見てコピーを持つコアにだけ無効化の要求を送ります。すべてのキャッシュへ一斉に知らせるスヌーピングに比べて通信が少ないので、コアが数十以上あるサーバ向けのCPUなどで使われます。

  • A. 正しい。全員に知らせる必要がなくなります。
  • B. キャッシュは引き続き使います。
  • C. 全員への通知を避けるのが目的です。
この分野を解く 分野ページへ

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

  1. コヒーレンシのプロトコルには無効化型と更新型がある。多くのCPUが無効化型を採用している理由として最も適切なものはどれか。
  2. マルチスレッドのプログラムで起こる偽共有(フォールスシェアリング)の説明として正しいものはどれか。
  3. スレッドごとのカウンタを「long cnt[8];」のように並べた配列で偽共有が起きている。対策として最も適切なものはどれか。
  4. データ競合(データレース)の説明として正しいものはどれか。
  5. 上のコードを2つのスレッドで同時に実行すると、counterの最終的な値が200000より小さくなることがある。その理由として正しいものはどれか。