【发布时间】:2018-06-13 22:57:13
【问题描述】:
我收到 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 个工作项,老实说,我不知道问题出在哪里。
问题是我为什么会收到这个错误?
【问题讨论】:
-
您的本地工作大小实际上是 299*299,大于 1024,您正在尝试将 1 个大小为 299*299 的工作组加入队列。您还应该检查可能小于 CL_DEVICE_MAX_WORK_GROUP_SIZE 的 CL_KERNEL_WORK_GROUP_SIZE。
-
@kanna 有正确的答案。这两个值都适用于组中工作项的总数,而不仅仅是一个维度。你需要让你的团队更小。
-
@kanna - 回答这个问题(它是正确的)。