我认为clGetKernelWorkGroupInfo的CL_KERNEL_WORK_GROUP_SIZE类型的返回值的含义是一个工作组中的最大工作项。等于dim [0] * dim [1] * ... * dim [dims-1];这种理解正确吗?例如,如果返回值为256,则无法使用(16,16,2)设置本地工作组大小,即16 * 16 * 2 = 512,大于256。
答案 0 :(得分:2)
是的,这是正确的。 clEnqueueNDRangeKernel的 local_work_size 参数:
指向work_dim无符号值的数组,这些值描述了将执行以下操作的工作组的工作项数(也称为工作组的大小)。内核指定的内核。 工作组中的工作项总数计算为
local_work_size [0] * ... * local_work_size [work_dim-1] 。
clGetKernelWorkGroupInfo,参数为CL_KERNEL_WORK_GROUP_SIZE:
这为应用程序提供了一种查询最大工作组大小的机制,该机制可用于在设备给定的特定设备上执行内核。
您可能还想确保每个维度上的本地大小均不大于CL_DEVICE_MAX_WORK_ITEM_SIZES(clGetDeviceInfo)。 clGetKernelWorkGroupInfo中没有类似的参数,因此似乎每个维度都没有特定于内核的限制。