OpenCL-2.1文档相关描述
CL_KERNEL_GLOBAL_WORK_SIZE
这段文字表明使用 cl_kernel_work_group_info 函数并将查询项目设置为 CL_KERNEL_GLOBAL_WORK_
SIZE 可以获得在此设备执行该kernel时最大的global size(也就是clEnqueueNDRangeKernel的global_work_size参数)。
这段文字表明最大可用 global_work_size不仅和device相关,还和kernel相关,下面实验证实下:
size_t * globalSize = (size_t*)alloca(sizeof(size_t) * 3);
//Get Kernel Info
error = clGetKernelWorkGroupInfo(vector_add_k, device, CL_KERNEL_GLOBAL_WORK_SIZE, sizeof(size_t) *3, globalSize, NULL);
if (error != CL_SUCCESS)
{
cout << "clGetKernelWorkGroupInfo:" << error << endl;
}
cout << "global size 0:" << globalSize[0] << "global size 1:" << globalSize[1] << "global size 2 :" << globalSize[2] << endl;
打印信息:
clGetKernelWorkGroupInfo:-30
global size 0:14757395258967641292global size 1:14757395258967641292global size 2 :14757395258967641292
结果返回值是-30, 查阅报错:
CL_INVALID_VALUE if param_name is CL_KERNEL_GLOBAL_WORK_SIZE and
device is not a custom device and kernel is not a built-in kernel.
因此CL_KERNEL_GLOBAL_WORK_SIZE 这一项只和 custom device 和 built-in kernel 有关。
custom device 是针对特定的设备(如DSP), built-in kernel也是只针对特定设备。因此CL_KERNEL_GLOBAL_WORK_SIZE 在常规编码中基本不会用到。