マルチコアと同期
ループの繰り返しを複数のスレッドに分けるとき、繰り返しごとの計算量が大きくばらつく場合に適した分け方はどれか。
- A最初に繰り返しの回数で均等に分け、それ以上は調整しない静的な割り当て
- Bすべての繰り返しを1つのスレッドに任せる
- C仕事を小さなまとまりにして、手の空いたスレッドが次のまとまりを取りに行く動的な割り当て
答えと解説を見る
正解:C. 仕事を小さなまとまりにして、手の空いたスレッドが次のまとまりを取りに行く動的な割り当て
静的な割り当ては手間が少ないのですが、繰り返しごとの重さが違うと、重い部分を受け持ったスレッドだけが遅れ、ほかは待つことになります。動的な割り当てでは、共有のカウンタなどから次の仕事を取り、早く終わったスレッドがより多く受け持つので負荷が均等になります。ただしまとまりが小さすぎると取りに行く手間が増えるので、大きさの調整が必要です。
- A. 回数が同じでも計算量が違うと、偏りが残ります。
- B. それでは並列化になりません。
- C. 正しい。仕事の偏りを自動でならせます。