我有以下代码,它在一台机器上运行良好,但是当我尝试在另一台具有更好显卡的机器上运行它时,我收到错误:
global[0] = 512; global[1] = 512;
local [0] = 16; local [1] = 16;
ciErrNum = clEnqueueNDRangeKernel(commandQueue, myKernel, 2, NULL, global, local, 0, NULL, &event);
Run Code Online (Sandbox Code Playgroud)
错误:
Error @ clEnqueueNDRangeKernel: CL_INVALID_KERNEL_ARGS
Error @ clWaitForEvents: CL_INVALID_KERNEL_ARGS
Run Code Online (Sandbox Code Playgroud)
不知道是什么问题?
小智 6
你传递的缓冲区对象有多大?__constant参数是从单独的内存空间而不是从全局内存中分配的,因此您可能已经耗尽了常量内存.
该规范规定,在完整配置文件中,设备必须至少支持4个__constant参数,总大小为64kB.在嵌入式配置文件中,它降至1kB.
您可以通过检查CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE使用来查询可用的常量内存量clGetDeviceInfo.您的设备很可能支持超过此最低要求的方式.
在大多数情况下,如果能够使用常量缓冲区,则通常它比全局内存快得多.
将来您应该提供有关您问题的更多信息.因为如果错误是CL_INVALID_KERNEL_ARGS真的需要知道你的内核的参数是什么.