[OpenCL]关于CL_KERNEL_GLOBAL_WORK_SIZE

OpenCL-2.1文档相关描述

CL_KERNEL_GLOBAL_WORK_SIZE

[OpenCL]关于CL_KERNEL_GLOBAL_WORK_SIZE_第1张图片
这段文字表明使用 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 在常规编码中基本不会用到。

你可能感兴趣的:(并行编程)