マルチコアと同期

64個のコアが、1つの共有カウンタを同時にアトミック命令で更新し続けると、コアを増やしても速くならない。主な理由はどれか。

  1. Aアトミック命令は1つのコアでしか実行できないから
  2. Bコアの数が多いと、カウンタの値が自動で小さくなるから
  3. Cカウンタのキャッシュラインがコアの間を次々に移動し、更新が1つずつしか進まないから
答えと解説を見る

正解:C. カウンタのキャッシュラインがコアの間を次々に移動し、更新が1つずつしか進まないから

アトミックな更新をするには、そのコアがラインをM状態で持つ必要があるので、更新のたびにラインが別のコアへ移動します。移動にはコア間の通信の時間がかかり、しかも一度に1つのコアしか更新できないので、コアを増やしても待ちが長くなるだけです。各コアが自分の場所で数えて最後に合計するなど、共有の書き込みを減らす工夫が必要です。

  • A. どのコアでも実行できます。
  • B. 値が勝手に変わることはありません。
  • C. 正しい。ラインの奪い合いが性能を決めます。
この分野を解く 分野ページへ

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

  1. NUMA(不均一メモリアクセス)のシステムの説明として正しいものはどれか。
  2. LinuxのNUMAシステムでよく使われるファーストタッチの方針(初めてページに書き込んだスレッドが動いているノードのメモリにそのページを置く)で注意すべき点として正しいものはどれか。
  3. 並列プログラムで、コアの数を増やしても性能が思うように伸びない原因として当てはまらないものはどれか。
  4. ループの繰り返しを複数のスレッドに分けるとき、繰り返しごとの計算量が大きくばらつく場合に適した分け方はどれか。
  5. 配列の全要素の合計を複数のスレッドで求めるとき、性能のために適した方法はどれか。