OpenCL解析错误,仅在GPU设备上

时间:2014-04-26 16:26:05

标签: compiler-errors opencl

当我将下面的OpenCL内核编译到我的GPU(HD Graphics 5000)时,我得到了"解析错误。"来自PROGRAM_BUILD_LOG。

constant int cols = 946;

kernel void run(global const uchar4 *curr) {
    int row = get_global_id(0);
    int col = get_global_id(1);

    int cell = row * cols + col;

    if (col > 0 && col < (cols - 1)) {
        if (curr[ cell ].x == 243) {
            // something
        }
    }
}

然而,当编译到我的CPU时它工作正常。此外,通过在代码示例中进行非常少的更改,它将编译得很好。以下是3个例子。

示例1:

constant int cols = 946;

kernel void run(global const uchar4 *curr) {
    int row = get_global_id(0);
    int col = get_global_id(1);

    if (col > 0 && col < (cols - 1)) {
        if (curr[ row * cols + col ].x == 243) {
            // something
        }
    }
}

示例2:

kernel void run(global const uchar4 *curr) {
    int row = get_global_id(0);
    int col = get_global_id(1);
    int cols = 946;

    int cell = row * cols + col;

    if (col > 0 && col < (cols - 1)) {
        if (curr[ cell ].x == 243) {
            // something
        }
    }
}

示例3:

constant int cols = 946;

kernel void run(global const uchar4 *curr) {
    int row = get_global_id(0);
    int col = get_global_id(1);

    int cell = row * cols + col;

    if (curr[ cell ].x == 243) {
        // something
    }
}

1 个答案:

答案 0 :(得分:1)

我刚尝试在OS X上为HD 4000编译此代码并收到相同的错误。鉴于构建日志的性质以及相同代码在其他设备上成功构建的事实,这显然是Apple的OpenCL实现的一个错误。根据我的经验,Apple的OpenCL实现会出现特别多的错误,通常涉及无用错误消息的编译失败。高清图形设备似乎负责大量的这些设备(这是OS X上高清显卡在过去两周内发布到堆栈溢出的第三个错误),也许是因为它们的实现仍然相对不成熟。

我建议您通过Apple Bug Reporting System提出错误。