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



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

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

知道问题出在哪里吗?

您正在传递的缓冲区对象有多大?__constant参数是从单独的内存空间分配的,而不是从全局内存分配的,因此您可能用完了常量内存。

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

您可以通过使用clGetDeviceInfo检查CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE来查询可用的恒定内存量。很可能您的设备支持的功能远远超过此最低要求。

在大多数情况下,如果您能够使用常量缓冲区,那么它通常比全局内存快得多。

以后你应该就你的问题提供更多的信息。因为如果错误是CL_INVALID_KERNEL_ARGS,那么就需要知道内核的参数是什么。

相关内容

最新更新