Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCL缓冲区读取错误_C_Opencl - Fatal编程技术网

OpenCL缓冲区读取错误

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

我正在开发一个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 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设置&内核本身不只是函数,称为内核内部。