2016-07-06 6 views
3

私はOpenCLコードを書いて、GPUで最大の占有率を持つ最適なワークグループサイズを見つけました。このためには、計算単位あたりの最大作業項目数を返す関数が必要です。コンピューティングユニットあたりのOpenCl最大作業項目

基本的に私はこれをCUDAコードから派生しており、maxThreadsPerMultiProcessorの同等物が欲しいです。マルチプロセッサあたりのスレッドの 最大数:CUDAで は、これらは、デバイスのクエリに返された値であった2048年ブロックあたりのスレッドの 最大数:OpenCLの1024

: CL_DEVICE_MAX_WORK_GROUP_SIZE:CUDA 1024

それはdoesnのtはこの値を返すカーネル情報を要求します。 OpenCLに相当する機能が必要です。 ありがとうございます。

答えて

3

計算単位あたりの最大作業項目数を取得するには、clGetDeviceInfo()をCL_DEVICE_MAX_WORK_GROUP_SIZEフラグとともに使用します。これは、 "デバイスが単一の計算単位で実行できるワークグループ内の作業項目の最大数"を返します。これはあなたの望むものです。

最適なワークグループのサイズは、デバイスだけでなく、使用されている特定のカーネルによっても異なります。この目的のために、clGetKernelWorkGroupInfo()関数をCL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLEフラグとともに使用することができます。これは、「パフォーマンスヒント」である「起動するワークグループサイズの優先する倍数を返します。

C++バインディングを使用している場合は、それぞれデバイスオブジェクトとカーネルオブジェクトでgetInfo()メソッドとgetWorkGroupInfo()メソッドを使用します。

関連する問題