1

AMD CPU で OpenCL 1.1 C++ を使用して画像を処理しようとしています。

特徴は次のとおりです。

using CPU: AMD Turion(tm) 64 X2 Mobile Technology TL-60
initCL:CL_DEVICE_IMAGE2D_MAX_WIDTH :8192
initCL:CL_DEVICE_IMAGE2D_MAX_HEIGHT :8192
initCL:timer resolution in ns:1
initCL:CL_DEVICE_GLOBAL_MEM_SIZE in bytes:1975189504
initCL:CL_DEVICE_GLOBAL_MEM_CACHE_SIZE in bytes:65536
initCL:CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE in bytes:65536
initCL:CL_DEVICE_LOCAL_MEM_SIZE in bytes:32768
initCL:CL_DEVICE_MAX_COMPUTE_UNITS:2
initCL:CL_DEVICE_MAX_WORK_GROUP_SIZE:1024
initCL:CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS:3
initCL:CL_DEVICE_MAX_WORK_ITEM_SIZES:dim=0, size 1024
initCL:CL_DEVICE_MAX_WORK_ITEM_SIZES:dim=1, size 1024
initCL:CL_DEVICE_MAX_WORK_ITEM_SIZES:dim=2, size 1024
createCLKernel:mean_value
createCLKernel:CL_KERNEL_WORK_GROUP_SIZE:1024
createCLKernel:CL_KERNEL_LOCAL_MEM_SIZE used by the kernel in bytes:0
createCLKernel:CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE:1

カーネルは今のところ空です:

__kernel void mean_value(image2d_t p_image,                 
                     __global ulong4* p_meanValue) 
 {

 }

実行呼び出しは次のとおりです。

cl::NDRange l_globalOffset;
// The global worksize is the entire image
cl::NDRange l_globalWorkSize(l_width, l_height);
// Needs to be determined
cl::NDRange l_localWorkSize;//(2, 2);
// Computes the mean value
cl::Event l_profileEvent;
gQueue.enqueueNDRangeKernel(gKernelMeanValue, l_globalOffset, l_globalWorkSize,
  l_localWorkSize, NULL, &l_profileEvent);

l_width=558とが (2, 2) より大きくできない場合、次のエラーが表示されます:「無効なワーク グループサイズl_height=328l_localWorkSize

コアが2つしかないからですか?l_localWorkSize を決定するルールはありますか?

4

2 に答える 2

0

clGetDeviceInfo関数を使用して2つのことを確認できます。

  • CL_DEVICE_MAX_WORK_GROUP_SIZEを使用して、4がワークグループに対して大きすぎないことを確認します。

  • CL_DEVICE_MAX_WORK_ITEM_SIZESを使用して、ディメンションごとの作業項目の数が多すぎないことを確認します。

また、グループサイズがコアの数に制限される可能性があるという事実は理にかなっています。作業項目間の通信/同期がある場合は、それらを同時に実行する必要があります。そうでない場合、OpenCLドライバーはこれをエミュレートする必要があります。これは少なくとも難しいかもしれませんし、一般的なケースではおそらく不可能かもしれません。

于 2013-01-02T12:28:57.103 に答える
0

が で割り切れるenqueueNDRangeKernel()場合に成功するOpenCL 仕様を読みました。私の場合、(2,41) まで設定できます。l_globalWorkSizel_localWorkSize

于 2013-01-02T14:16:58.590 に答える