OpenCL缓冲区读取错误
我正在开发一个OpenCL程序,但是当我尝试运行它时,我得到了这个错误——我在google中找不到任何东西 当我运行程序时,我将得到以下输出:OpenCL缓冲区读取错误,c,opencl,C,Opencl,我正在开发一个OpenCL程序,但是当我尝试运行它时,我得到了这个错误——我在google中找不到任何东西 当我运行程序时,我将得到以下输出: Checking platform "NVIDIA CUDA": trying device "GeForce GTX 560 Ti"... context ok Trying to load kernel code from "..."... success Compiler messages are 2 bytes long. Compiler me
Checking platform "NVIDIA CUDA": trying device "GeForce GTX 560 Ti"... context ok
Trying to load kernel code from "..."... success
Compiler messages are 2 bytes long.
Compiler messages:
Could not enqueue buffer read for 'size': -5
我完全不知道为什么会发生这个错误,以及如何修复它
在我的第一个函数中,我创建了数组,并将扫描称为独占的原始扫描:
local int16_t offsets[64];
local int16_t offsets_out[64];
barrier(CLK_LOCAL_MEM_FENCE);
scan(offsets_out, offsets, pos, self);
这是我的扫描结果:
void scan(local int16_t *g_odata, local int16_t *g_idata, uint8_t pos, const uint self)
{
/* Load input into shared memory.
* This is exclusive scan, so shift right by one
* and set first element to 0
*/
offsets[self] = pos;
offsets_out[self] = pos;
barrier(CLK_LOCAL_MEM_FENCE);
for (int i = 1; i <= 6; i++) // log2(64) = 6
{
uint8_t reg = 1 << (i-1); // 2^(i-1)
if (self >= reg)
g_odata[self] += g_idata[self - reg];
barrier(CLK_LOCAL_MEM_FENCE);
g_idata[self] = g_odata[self];
barrier(CLK_LOCAL_MEM_FENCE);
}
g_odata[self] -= pos;
barrier(CLK_LOCAL_MEM_FENCE);
}
请显示用于创建缓冲区和将读取排队的代码。我编辑了我的Answare-当我对扫描进行注释时,它可以工作…您已经显示了内核代码,但错误似乎与主机API调用有关,具体而言,就是从缓冲区将数据读回主机。请显示主机代码,例如您对clCreateBuffer和clEnqueueReadBuffer的调用。所有代码都提供给我,我只需要实现内核-因此主机代码正常工作。错误-5在NVidia上非常常见&它并不总是意味着CL_资源不足。通常,它可能是由内核执行中的错误引起的。因此,仍然需要一些源代码:内核NDSize设置&内核本身不只是函数,称为内核内部。