我在使用以下内核代码执行OpenCL代码(使用AMD-APP SDK v3.0编译)时遇到问题:
__kernel void sumGPU ( __global const int *input,
__global int *sum )
{
uint local_id = get_local_id(0);
uint group_size = get_local_size(0);
uint global_id = get_global_id(0);
uint res = input[global_id];
// workgroup reduction (introduced in OpenCL 2.0)
res = work_group_reduce_add(res);
// atomic reduce in global memory
if (local_id == 0)
atomic_add(sum, res);
}
这用于计算所有数组元素的总和。
我收到以下错误:
CL Compilation failed:
"/tmp/OCL32344T1.cl", line 11: error: function "work_group_reduce_add"
declared implicitly
res = work_group_reduce_add(res);
^
1 error detected in the compilation of "/tmp/OCL32344T1.cl".
Frontend phase failed compilation.
Aborted
似乎缺少work_group_reduce_add的原型,但我无法在OpenCL 2.0(CL / cl.h)中找到它。
任何人都可以看到错误的是什么?感谢
答案 0 :(得分:2)
为了在内核中使用OpenCL 2.0功能,您需要通过-cl-std=CL2.0
将clBuildProgram
标志传递给编译器。