我的 CL_INVALID_WORK_GROUP_SIZE
,但我的本地工作尺寸为299,我的最大支持 WORK_GROUP_SIZE
为1024。
根据文件:
CL_INVALID_WORK_GROUP_SIZE,如果指定了local_work_size并且编号 由global_work_size指定的工作项不能平均分配 local_work_size给出的工作组大小或与之不匹配 使用内核为内核指定的工作组大小 程序源中的属性((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个工作项,我不知道问题是诚实的。
问题是我为什么会收到这个错误?
答案 0 :(得分: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
。