これが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:エラー:予期された識別子または'('}^」です。
ただし、中かっこを含めると機能します。動作するコードは次のとおりです。
__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ステートメントの下の1行のコードをインデントすると、エラーは再び表示されなくなります
更新:書き直した後、カーネルをコンパイルできるようになりました。タブではありません。