いいえ1つのCUに複数のワークグループがあり、1つの処理要素に複数のスレッドがあります。各CUは64スレッドの波面を最大40個まで保持できるため、並列スレッドの最大数は44 * 40 * 64 = 112640です。ただし、これらのスレッドをすべて使用することはできません。他のリソースは、CUあたりの最大スレッド数を制限することがあります。 CU当たりのレジスタ数は限られており、各波面は多すぎるので、平行波面の最大数は少なくなります。
各ワークグループは同じCUで実行されるため、共有メモリ(LDS)へのアクセスと各ワークグループの異なる波面間の簡単な同期が可能です。特定の範囲内で作業グループのサイズを選択できます。ワークグループごとに256スレッドのハード制限(より多くの機能はありません)と、ワークグループあたり64スレッドの波面サイズのソフトリミット(少ない場合はパフォーマンスの低下)があります。あなたのワークグループのサイズも波面サイズの倍数でなければならないので、64,128,192および256はワークグループサイズの最も一般的な選択肢です。他のすべてが潜在的なピーク性能を低下させますが、問題によっては問題を選択肢の1つに強制するよりも、作業グループのサイズが異なる場合があります。
各ワークグループはそれぞれ最大256個のスレッドしか使用できないため、複数のワークグループを各CUで並列に実行できます。 256スレッドの最大ワークグループサイズを使用する場合、GPUのすべてのスレッドを使用するには、少なくとも112640/256 = 440のワークグループが必要です。より多くのワークグループがある場合は、それらのうち最大440個が並行して実行され、古いグループの1つが終了すると残りのグループが実行されます。ワークグループが少ない場合、すべてのスレッドが占有されるわけではなく、パフォーマンスが低下する可能性があります。小規模な作業グループを選ぶ場合は、それらをさらに必要とします。例:作業グループサイズが64の1760作業グループ 共有メモリ(LDS)の使用量が多すぎると、作業グループ数CUあたり。
命令を実行します。最適条件の下では、サイクルごとに1つの命令を開始することができます。
44 * 40 * 64 = 112640 – BlueWanderer
ありがとうございました!しかし、私は理解できません "各ワークグループは最大256のスレッドしか使用できません。複数のワークグループを各CUで並列に実行できます。"あなたは、GPUは最大112640のスレッドを持つことができると言った。次に、作業グループのサイズは112640/256 = 440ですか?まだ混乱している。 –
はい@ BlueWandererと私は仕事のグループの選択をより詳しく説明するために私の答えを更新しました。ワークグループのサイズは固定されていませんが、プログラマが特定の範囲内で選択することができます。 –