CUDA で、同じコードを実行する並列スレッドについて話すとき、それらの実行に順序はありますか?
例えば:
4 つの要素の 1D 配列に対して 4 つのスレッドがある場合、4 つのスレッドすべてが配列のインデックスに対して何らかの操作を実行します。スレッド 4 は常にスレッド 3 の後に実行されますか、それとも実行に特定の順序はありませんか?
ありがとうございました!
CUDA で、同じコードを実行する並列スレッドについて話すとき、それらの実行に順序はありますか?
4 つの要素の 1D 配列に対して 4 つのスレッドがある場合、4 つのスレッドすべてが配列のインデックスに対して何らかの操作を実行します。スレッド 4 は常にスレッド 3 の後に実行されますか、それとも実行に特定の順序はありませんか?
ありがとうございました!
通常、スレッドの実行には順序がありません。アルゴリズムを設計するスレッドの順序に依存するのは間違っています。
スレッドの実行には決定論的な順序はありません。特定の順序が必要な場合は、並列実行モデルを使用する代わりに、順番にプログラミングする必要があります。
ただし、スレッドの実行について言えることがあります。CUDA の実行モデルでは、スレッドは「ワープ」にグループ化されます。基盤となるデバイスの計算能力に応じて、各ワープ (またはハーフワープ) が同時に実行されます。文字通り同時に実行されます。実行は、メモリ転送の待機によりコードがロックされ、別のワープ (またはハーフワープ) の実行がスケジュールされるまで続行されます。
ただし、ドキュメントは、この問題についてどのような仮定を立てることができるかについて非常に具体的です。実行の最良の障壁は、カーネル呼び出しの終了です。