【问题标题】:CL_INVALID_WORK_GROUP_SIZE openclCL_INVALID_WORK_GROUP_SIZE opencl
【发布时间】: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 - 回答这个问题(它是正确的)。

标签: c++ opencl


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-30
    • 2014-12-04
    • 1970-01-01
    • 2014-06-15
    • 2018-05-16
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多