OpenCL 2.0 - 错误:function" work_group_reduce_add"隐式声明

时间:2016-02-21 02:00:21

标签: c opencl

我在使用以下内核代码执行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)中找到它。

任何人都可以看到错误的是什么?感谢

1 个答案:

答案 0 :(得分:2)

为了在内核中使用OpenCL 2.0功能,您需要通过-cl-std=CL2.0clBuildProgram标志传递给编译器。