CL_DEVICE_MAX_COMPUTE_UNITS
に等しくなるように、ワークグループの数を設定すると、いくつかのハードウェア上の健全なアドバイスかもしれませんが、それは確かには、NVIDIAのGPU上ではありません。
CUDAアーキテクチャでは、OpenCL計算ユニットは、マルチプロセッサ(8,32、または48コアのいずれかを持つ)と同等のもので、最大8つのワークグループを同時に実行できるように設計されていますCUDA)各。より大きな入力データサイズでは、何千ものワークグループを実行することができます。特定のGPUは、カーネルの起動ごとに最大65535 x 65535のワークグループを処理できます。
OpenCLには別のデバイス属性CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE
があります。 NVIDIAデバイスでそれを照会すると、32(これは "ワープ"またはハードウェアの自然なSIMD幅です)を返します。その値は、使用する必要があるワークグループサイズの倍数です。ワークグループのサイズは、各作業項目によって消費されるリソースに応じて、それぞれ512項目までになります。特定のGPUの標準的な経験則では、アーキテクチャーのすべてのレイテンシをカバーし、潜在的に全メモリ帯域幅または完全な算術スループットを得るために、コンピューティングユニット(CUDA用語ではマルチプロセッサあたりのスレッド)あたり192以上のアクティブな作業項目が必要ですあなたのコードの本質について。
NVIDIAは、CUDAツールキットの「OpenCLプログラミングガイドfor CUDA Architecture」と呼ばれる優れたドキュメントを提供しています。 NVIDIA OpenCL実装がどのようにハードウェアの機能にマップされているかの詳細がすべて含まれているので、読んでください。
私はそれを読んでいただきありがとうございます。 – rdoubleui