マルチコアと同期

並列プログラムで使われるバリア同期の説明として正しいものはどれか。

  1. A一度に1つのスレッドだけが入れる部分を作る
  2. Bすべてのスレッドがその地点に到着するまで、先に着いたスレッドを待たせる
  3. Cメモリ操作の順番の入れ替えを止める命令
答えと解説を見る

正解:B. すべてのスレッドがその地点に到着するまで、先に着いたスレッドを待たせる

シミュレーションなどでは、全スレッドが1ステップ分の計算を終えてから次のステップに進む必要があります。バリア同期では、各スレッドはバリアの地点で止まり、最後のスレッドが到着した時点で全員が進みます。計算量に偏りがあると、速いスレッドが遅いスレッドを待つ時間が増えるので、仕事を均等に分けることが性能のために重要です。

  • A. それはロックによる排他です。
  • B. 正しい。段階ごとに全員の足並みをそろえます。
  • C. それはメモリバリアで、名前は似ていますが別物です。
この分野を解く 分野ページへ

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

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