2016-04-29 23 views
1

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

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

REDUCTION(float) 
REDUCTION(float2) 

但这并不是很舒服。是否有像gentype这样的类型说明符?

回答

2

您应该可以从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) 
+0

您的宏不应该在行结尾有反斜杠吗? – einpoklum