GPUプログラミング
1つのワープの中で、条件分岐によってスレッドの半分がif側、残りの半分がelse側に分かれた(ワープダイバージェンス)。一般にどう実行されるか。
- A両方の側を同時に実行するので、速さは変わらない
- Belse側のスレッドは実行されずに捨てられる
- Cif側とelse側を順番に実行し、それぞれの間は該当しないスレッドが休むので、効率が下がる
答えと解説を見る
正解:C. if側とelse側を順番に実行し、それぞれの間は該当しないスレッドが休むので、効率が下がる
ワープの32本のスレッドは同じ命令を実行するので、分岐が分かれると、まずif側の命令をif側のスレッドだけを有効にして実行し、次にelse側を残りのスレッドで実行します。結果は正しいものの、それぞれの間は半分のスレッドが何もしないので、時間は両方の経路の合計になります。ワープの中で分岐がそろうように、データやスレッドの並べ方を工夫すると効率が上がります。
- A. 1つのワープは同時に1つの命令しか実行しません。
- B. どちらのスレッドも正しく実行されます。
- C. 正しい。両方の経路の時間がかかります。