マルチコアと同期

ループの繰り返しを複数のスレッドに分けるとき、繰り返しごとの計算量が大きくばらつく場合に適した分け方はどれか。

  1. A最初に繰り返しの回数で均等に分け、それ以上は調整しない静的な割り当て
  2. Bすべての繰り返しを1つのスレッドに任せる
  3. C仕事を小さなまとまりにして、手の空いたスレッドが次のまとまりを取りに行く動的な割り当て
答えと解説を見る

正解:C. 仕事を小さなまとまりにして、手の空いたスレッドが次のまとまりを取りに行く動的な割り当て

静的な割り当ては手間が少ないのですが、繰り返しごとの重さが違うと、重い部分を受け持ったスレッドだけが遅れ、ほかは待つことになります。動的な割り当てでは、共有のカウンタなどから次の仕事を取り、早く終わったスレッドがより多く受け持つので負荷が均等になります。ただしまとまりが小さすぎると取りに行く手間が増えるので、大きさの調整が必要です。

  • A. 回数が同じでも計算量が違うと、偏りが残ります。
  • B. それでは並列化になりません。
  • C. 正しい。仕事の偏りを自動でならせます。
この分野を解く 分野ページへ

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

  1. 配列の全要素の合計を複数のスレッドで求めるとき、性能のために適した方法はどれか。
  2. 読み書きロック(リーダー・ライターロック)の特徴として正しいものはどれか。
  3. カウンタ付きのセマフォの使い方として最も適切なものはどれか。
  4. キャッシュコヒーレンシとメモリ一貫性モデルの違いとして正しいものはどれか。
  5. ハードウェアトランザクショナルメモリの考え方として正しいものはどれか。