OpenCl代码在一台机器上工作,但我在另一台机器上获得了CL_INVALID_KERNEL_ARGS

时间:2013-12-13 09:04:21

标签: c++ c opencl

我有以下代码,它在一台机器上运行良好,但是当我尝试在另一台具有更好显卡的机器上运行它时,我遇到错误:

global[0] = 512; global[1] = 512;
local [0] = 16; local [1] = 16;
ciErrNum = clEnqueueNDRangeKernel(commandQueue, myKernel, 2, NULL, global, local, 0, NULL, &event);

错误:

Error @ clEnqueueNDRangeKernel: CL_INVALID_KERNEL_ARGS
Error @ clWaitForEvents: CL_INVALID_KERNEL_ARGS

知道这是什么问题吗?

1 个答案:

答案 0 :(得分:6)

您传递的缓冲区对象有多大? __constant个参数是从单独的内存空间分配的,而不是从全局内存中分配的,所以你可能已经耗尽了常量内存。

规范规定,在完整配置文件中,设备必须至少支持4 __constant个参数,总大小为64kB。在嵌入式配置文件中,它降至1kB。

您可以使用CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE查看clGetDeviceInfo来查询可用的常量内存量。您的设备很可能支持超过此最低要求的方式。

在大多数情况下,你应该使用常量缓冲区,因为它通常比全局内存快得多。

将来您应该提供有关您问题的更多信息。因为如果错误是CL_INVALID_KERNEL_ARGS,那么确实需要知道内核的参数是什么。