这是opencl内核代码。这不起作用:
__kernel void testKernel(__global const int* srcA,
__global const int* srcB,
__global int* res,
const int num)
{
const int idx = get_global_id(0);
if (idx < num)
res[idx] = srcA[idx] * srcB[idx];
}
上面代码的日志是“:12:2: error: expected identifier or '(' } ^"
但是,如果您包含大括号,那么它可以工作。这是工作代码:
__kernel void testKernel(__global const int* srcA,
__global const int* srcB,
__global int* res,
const int num)
{
const int idx = get_global_id(0);
if (idx < num)
{
res[idx] = srcA[idx] * srcB[idx];
}
}
我了解 opencl 内核语言遵循 C99,但如果我正确理解 C99,则仅当 if 语句下有多行代码时才需要大括号。有谁知道我为什么会收到这些错误?
更新:重写 if 语句后,错误不再出现。我无法重现该错误。
更新:错误再次出现,但如果我使用空格键而不是制表符来缩进 if 语句下方的一行代码,它会再次消失
更新:重写后,现在可以编译内核了。这不是标签。