我正在获取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/

10-10 01:44