2012-02-17 3 views
10

何らかの説明が必要です。小さなNVIDIA GPU(310M)を実行しているノートパソコンでOpenCLを開発しています。デバイスにCL_DEVICE_MAX_COMPUTE_UNITSを問い合わせると、結果は2になります。カーネルを実行するためのワークグループの数は、計算ユニットの数に一致する必要があります(Heterogenous Computing with OpenCL、第9章、186ページ)。そうしないと、メモリbandwitdh。作業グループの数に対応する計算ユニットの数

また、チップには16の冗長コア(これは私が信じるPEに対応している)が指定されています。理論的に言えば、グローバルメモリ帯域に関するこのGPUの最も実績のあるセットアップは、それぞれ16個の作業項目を持つ2つの作業グループを持つことですか?

答えて

16

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実装がどのようにハードウェアの機能にマップされているかの詳細がすべて含まれているので、読んでください。

+0

私はそれを読んでいただきありがとうございます。 – rdoubleui

2

私は、あなたのワークグループの数を計算単位と照合することは、CPU上では良い考えだとは思いません。コアを数倍にオーバーサブスクライブする方が良いです。これにより、さまざまなプロセッサがオンラインになるか、他の作業に気を取られるようにワークロードを動的に(ワークグループの数量で)移動させることができます。ワークグループcount = CL_DEVICE_MAX_COMPUTE_UNITSは、まったく何もしていないマシン上で実際にうまく動作し、未使用のコアを起動させるエネルギーを無駄にするだけです。

関連する問題