GPU上で実行できる最大同時ワークグループの数をプログラムで決定する標準的な方法があるのだろうかと思っていました。最大コンカレントワークグループの計算
たとえば、5つの計算ユニット(またはSM)を搭載したNVIDIAカードでは、計算ユニットごとに最大8つのワークグループ(またはブロック)が存在する可能性があるため、同時に実行できるワークグループの最大数は40です。
clGetDeviceInfo
で計算ユニットの数を見つけることができるので、計算ユニットで実行できるワークグループの最大数が必要です。
ありがとうございます!
ベンダのドキュメント(AMD、Intel)から最大数のワークグループを見つけることができませんでした。ワークグループの最大数、ワークグループの数は作業項目の数によってのみ制限されているとは思いませんしたがって、作業項目が1024の場合、 '1024/CL_DEVICE_MAX_WORK_GROUP_SIZE'はワークグループの数を決定しません。 – kiranputtur
それほどの場合はありません。 clEnqueueNDRangeKernelを使用する場合は、local_work_sizeパラメータを指定します。これはワークグループのサイズ(およびディメンション)です。グローバルサイズとディメンションであるglobal_work_sizeも指定します。 1-Dレイアウトを想定するワークグループの数はglobal_work_size/local_work_sizeです。最初の質問は、gpuで「飛行中の」並行作業グループの制限を見つける方法を尋ねていました。理論的にはこのような制限はないかもしれませんが、実際にはキャッシュとレジスタのスワッピングはいくつかのグループを過ぎてもパフォーマンスに大きな影響を与えます。それ以外の点では不可能です。 – mfa
この方法を使用すると、デバイスのフル稼働を保証することはできません。また、私はホストから起動できるワークグループの数を制限したくありません。 – KLee1