具有泛型数据类型的OpenCL内核

具有泛型数据类型的OpenCL内核,opencl,Opencl,在为内核编写代码时,是否可以指定一个通用数据类型,以便不必为每个使用的数据类型复制内核?目前,我正在使用预处理器宏定义具有各种数据类型的整个函数: #define REDUCTION(type) __kernel void reduce_##type##_f(__global __read_only type* a) \ { \ // do something } \ REDUCTION(float) REDUCTION(float2) 然而,这不是很舒服。是否有一些类型说明符,如代码> G

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

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

REDUCTION(float)
REDUCTION(float2)

然而,这不是很舒服。是否有一些类型说明符,如代码> GeType < /Cord>?< /P> < P>,您应该能够从OpenCL 2.1开始,这允许您在内核代码中使用C++和模板。 有了这些,你可以简单地写下:

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

你的宏不应该在行尾有反斜杠吗?
#define REDUCTION(type) __kernel void reduce_##type##_f(__global __read_only type* a) \
{ \
  return reduce_t(a); \
}

REDUCTION(float)