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