2012-03-22 6 views
3

GPU上で実行できる最大同時ワークグループの数をプログラムで決定する標準的な方法があるのだろうかと思っていました。最大コンカレントワークグループの計算

たとえば、5つの計算ユニット(またはSM)を搭載したNVIDIAカードでは、計算ユニットごとに最大8つのワークグループ(またはブロック)が存在する可能性があるため、同時に実行できるワークグループの最大数は40です。

clGetDeviceInfoで計算ユニットの数を見つけることができるので、計算ユニットで実行できるワークグループの最大数が必要です。

ありがとうございます!

答えて

-1

私は通常、ワークグループの数として計算ユニットの数を使用します。私は、gpuに多くの作業グループを同時に「スケジュール」させるのではなく、ハードウェアを飽和させるためにグループのサイズを拡大するのが好きです。

ベンダーの仕様を調べずにグループの最大数を判断する方法がわかりません。

+0

ベンダのドキュメント(AMD、Intel)から最大数のワークグループを見つけることができませんでした。ワークグループの最大数、ワークグループの数は作業項目の数によってのみ制限されているとは思いませんしたがって、作業項目が1024の場合、 '1024/CL_DEVICE_MAX_WORK_GROUP_SIZE'はワークグループの数を決定しません。 – kiranputtur

+0

それほどの場合はありません。 clEnqueueNDRangeKernelを使用する場合は、local_work_sizeパラメータを指定します。これはワークグループのサイズ(およびディメンション)です。グローバルサイズとディメンションであるglobal_work_sizeも指定します。 1-Dレイアウトを想定するワークグループの数はglobal_work_size/local_work_sizeです。最初の質問は、gpuで「飛行中の」並行作業グループの制限を見つける方法を尋ねていました。理論的にはこのような制限はないかもしれませんが、実際にはキャッシュとレジスタのスワッピングはいくつかのグループを過ぎてもパフォーマンスに大きな影響を与えます。それ以外の点では不可能です。 – mfa

+1

この方法を使用すると、デバイスのフル稼働を保証することはできません。また、私はホストから起動できるワークグループの数を制限したくありません。 – KLee1

3

実行単位/ SMあたりのグループの最大数は、ハードウェアリソースによって制限されます。インテルGen8 GPUの例を挙げる。サブスライスごとに16のバリアレジスタが含まれています。したがって、16を超えるワークグループを同時に実行することはできません。

また、サブスライスごとに利用できる共有ローカルメモリの量(64KB)。たとえば、あるワークグループに32KBの共有ローカルメモリが必要な場合、ワークグループサイズに関係なく、それらのワークグループのうち2つだけを同時に実行できます。

関連する問題