具有通用数据类型的OpenCL内核

时间:2016-04-29 07:40:48

标签: opencl

在为内核编写代码时,是否可以指定通用数据类型,以便不必为每个使用过的数据类型复制内核?目前,我使用预处理器宏来定义具有各种数据类型的整个函数:

#define REDUCTION(type) __kernel void reduce_##type##_f(__global __read_only type* a) \
{ \
// do something
} \

REDUCTION(float)
REDUCTION(float2)

然而这并不是很舒服。是否有类似gentype的类型说明符?

1 个答案:

答案 0 :(得分:3)

您应该可以从OpenCL 2.1开始,它允许您在内核代码Knronos's OpenCL page中使用C ++和模板。

有了这个,你可以简单地写:

template <class T>
void reduce_f(__global __read_only T* a) { 
   // do something
}

但是,我并非100%确定__kernel函数定义中可用的模板。如果不是这种情况,您仍然需要将内核声明包装在预处理宏中,如下所示:

#define REDUCTION(type) __kernel void reduce_##type##_f(__global __read_only type* a) \
{ \
  return reduce_t(a); \
}

REDUCTION(float)