OpenCL enqueTask vs enqueNDRangeKernel
问题描述:
我在使用C++绑定编写OpenCL,试图制作一个小型库。OpenCL enqueTask vs enqueNDRangeKernel
NDRange offset(0);
NDRange global_size(numWorkItems);
NDRange local_size(1);
//this call fails with error code -56
err = queue.enqueueNDRangeKernel(kernelReduction, offset, global_size, local_size);
//this call works:
err = queue.enqueueTask(kernelReduction);
现在,错误代码-56是CL_INVALID_GLOBAL_OFFSET。我不知道为什么第一个电话会失败。有什么建议么?
答
global_work_offset必须为NULL。这里的任何值都应该产生CL_INVALID_GLOBAL_OFFSET。
答
如果您正在使用的OpenCL 1.0,你不能AFAIK使用全局偏移(你需要使用一个常量内存计数器或东西来解决)。尝试更新绑定到OpenCL 1.1,如果他们不自动适应并确保您更新您的驱动程序以及。
您使用的是什么尺寸?根据OpenCL文档偏移量需要是一个整数偏移量数组,每个偏移量都对应一个特定的维度,但您的代码并不是说它使用了多少维度。 – Thomas 2012-03-14 21:30:40
就我所了解的C++绑定而言,它是由NDRange初始化器给出的。假设有1个整数,它会假定1维,假设2它假定为2. – 2012-03-14 22:12:08