マルチコアと同期

コヒーレンシのプロトコルには無効化型と更新型がある。多くのCPUが無効化型を採用している理由として最も適切なものはどれか。

  1. A同じコアが同じラインに何度も書き込むとき、最初の1回の無効化だけで済み、通信が少ないから
  2. B更新型では、ほかのコアが古い値を読んでしまうから
  3. C無効化型ではキャッシュの容量が2倍になるから
答えと解説を見る

正解:A. 同じコアが同じラインに何度も書き込むとき、最初の1回の無効化だけで済み、通信が少ないから

更新型は書き込みのたびに新しい値をほかのコアのコピーへ送るので、ほかのコアがすぐ読むなら有利ですが、1つのコアが続けて書き込む場合は毎回通信が発生します。無効化型なら最初の書き込みでほかのコピーを無効にした後、M状態のラインには通信なしで書き込めます。実際のプログラムでは続けて書き込むことが多いので、無効化型が一般的です。

  • A. 正しい。更新型は書き込みのたびに値を送ります。
  • B. 更新型も正しい値を保てます。問題は通信の量です。
  • C. 容量は変わりません。
この分野を解く 分野ページへ

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

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