我正在获取CL_INVALID_WORK_GROUP_SIZE
,但是我的本地工作大小是299,而我支持的最大WORK_GROUP_SIZE
是1024。
根据文档:
CL_INVALID_WORK_GROUP_SIZE(如果指定了local_work_size和编号)
global_work_size指定的工作项的数量不能被
由local_work_size给出的工作组的大小或与
使用以下命令为内核指定的工作组大小
程序源中的attribute((reqd_work_group_size(X,Y,Z)))限定符。
就我而言
size_t globalWorkSize[2] = { 299, 299 };
size_t localWorkSize[2] = { 299, 299 };
mErr = clEnqueueNDRangeKernel(mCmdQueue, mKernel[0], 2, nullptr,
globalWorkSize, localWorkSize, 0, nullptr, nullptr);
在我看来,我有299 ^ 2个工作组,每个工作组1个工作项,老实说,我不明白问题所在。
问题是为什么我会收到该错误?
最佳答案
您正在尝试加入1个大小为299 * 299的工作组,该工作组大于1024,即CL_DEVICE_MAX_WORK_GROUP_SIZE
。
同样基于内核的设备可能无法在工作组中运行CL_DEVICE_MAX_WORK_GROUP_SIZE
。
正确的方法是确保本地工作量小于或等于CL_KERNEL_WORK_GROUP_SIZE
(可能小于CL_DEVICE_MAX_WORK_GROUP_SIZE
)。
关于c++ - CL_INVALID_WORK_GROUP_SIZE opencl,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50803215/