マルチコアと同期

並列プログラムで、コアの数を増やしても性能が思うように伸びない原因として当てはまらないものはどれか。

  1. Aロックの待ちなど、スレッドどうしの同期が多いこと
  2. Bスレッドごとの仕事の量に大きな偏りがあること
  3. C各スレッドが自分専用のデータだけを読み書きしていること
答えと解説を見る

正解:C. 各スレッドが自分専用のデータだけを読み書きしていること

並列化の効果を妨げる主な原因には、並列にできない部分(アムダールの法則)、ロックやバリアによる待ち、共有データや偽共有によるキャッシュラインの行き来、仕事の偏り、メモリ帯域の不足などがあります。各スレッドが自分専用のデータだけを扱うなら、ほかのスレッドとの通信や待ちが生じないので、理想的な並列化に近づきます。

  • A. 同期の待ちは伸びを妨げる代表的な原因です。
  • B. 仕事の偏りは、遅いスレッドを待つ時間を生みます。
  • C. 正しい。専用のデータだけなら、伸びを妨げません。
この分野を解く 分野ページへ

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

  1. ループの繰り返しを複数のスレッドに分けるとき、繰り返しごとの計算量が大きくばらつく場合に適した分け方はどれか。
  2. 配列の全要素の合計を複数のスレッドで求めるとき、性能のために適した方法はどれか。
  3. 読み書きロック(リーダー・ライターロック)の特徴として正しいものはどれか。
  4. カウンタ付きのセマフォの使い方として最も適切なものはどれか。
  5. キャッシュコヒーレンシとメモリ一貫性モデルの違いとして正しいものはどれか。