尝试在GTX 980和OpenCL上写入int *时出错-9999

时间:2015-05-27 11:58:03

标签: opencl

我收到错误-9999

Breakpoint 7, cl::detail::errHandler (err=-9999, errStr=0x43cc1f "clWaitForEvents") at /opt/AMDAPPSDK-3.0-0-Be
ta/include/CL/cl.hpp:321
     

event.wait()因为以下行

valid[id] = 1;
     

有效期为__global int* valid

.cl代码是

__kernel void validateRecords(__global const char* buffer, __global const struct RecordInfo* allRecords, __global int* valid, const unsigned int n)
{
    const int id=get_global_id(0);

    if (id < n)
    {
            char* record = buffer[allRecords[id].position];
            int size = allRecords[id].length;

            int updateTimeLen = findFixed(record, size, ',');
            if(updateTimeLen == -1 || updateTimeLen != UPDATE_TIME_LEN)
            {
               valid[id] = 1;
               return;
            }
    }

}

我收到错误

  

code -9999 at有效[id] = 1。

我注意到,如果我评论// valid [id] = 1;或// int updateTimeLen = findFixed(record,size,&#39;,&#39;);一切都很好,但是当两者都使用时我得到了上述错误。

该设备是带有OpenCL 1.1的GTX 980。你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

我想我发现了这个问题。首先,我在Nvidia卡上使用AMD SDK。这对我来说效果很好(使用GTX 780 Ti)。但是这次我注意到了一些问题。第一个是这一行:

char* record = buffer[allRecords[id].position];

我最初(正确地)写为

char* record = buffer + allRecords[id].position;

但是它没有编译,我机械地将它改为上面并且它确实编译了。这是第一个问题,但它与错误无关。

第二个是传递__private char *继续抛出错误-9999无论我做什么(可能是因为SDK不同,但它可能是其他的东西),所以我将__global char *缓冲区传递给函数一切正常。