マルチコアと同期
64個のコアが、1つの共有カウンタを同時にアトミック命令で更新し続けると、コアを増やしても速くならない。主な理由はどれか。
- Aアトミック命令は1つのコアでしか実行できないから
- Bコアの数が多いと、カウンタの値が自動で小さくなるから
- Cカウンタのキャッシュラインがコアの間を次々に移動し、更新が1つずつしか進まないから
答えと解説を見る
正解:C. カウンタのキャッシュラインがコアの間を次々に移動し、更新が1つずつしか進まないから
アトミックな更新をするには、そのコアがラインをM状態で持つ必要があるので、更新のたびにラインが別のコアへ移動します。移動にはコア間の通信の時間がかかり、しかも一度に1つのコアしか更新できないので、コアを増やしても待ちが長くなるだけです。各コアが自分の場所で数えて最後に合計するなど、共有の書き込みを減らす工夫が必要です。
- A. どのコアでも実行できます。
- B. 値が勝手に変わることはありません。
- C. 正しい。ラインの奪い合いが性能を決めます。