在为内核编写代码时,是否可以指定通用数据类型,以便不必为每个使用过的数据类型复制内核?目前,我使用预处理器宏来定义具有各种数据类型的整个函数:
#define REDUCTION(type) __kernel void reduce_##type##_f(__global __read_only type* a) \
{ \
// do something
} \
REDUCTION(float)
REDUCTION(float2)
然而这并不是很舒服。是否有类似gentype
的类型说明符?
答案 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)