具有通用数据类型的 OpenCL 内核
OpenCL kernel with generic data type
在为内核编写代码时,是否可以指定通用数据类型,这样就不必为每种使用的数据类型复制内核?目前我正在使用预处理器宏来定义具有各种数据类型的整个函数:
#define REDUCTION(type) __kernel void reduce_##type##_f(__global __read_only type* a) \
{ \
// do something
} \
REDUCTION(float)
REDUCTION(float2)
然而,这不是很舒服。是否有像 gentype
这样的类型说明符可用?
从 OpenCL 2.1 开始,您应该能够做到这一点,它允许您在内核代码中使用 C++ 和模板 Knronos's OpenCL page。
有了它,你可以简单地写:
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)
在为内核编写代码时,是否可以指定通用数据类型,这样就不必为每种使用的数据类型复制内核?目前我正在使用预处理器宏来定义具有各种数据类型的整个函数:
#define REDUCTION(type) __kernel void reduce_##type##_f(__global __read_only type* a) \
{ \
// do something
} \
REDUCTION(float)
REDUCTION(float2)
然而,这不是很舒服。是否有像 gentype
这样的类型说明符可用?
从 OpenCL 2.1 开始,您应该能够做到这一点,它允许您在内核代码中使用 C++ 和模板 Knronos's OpenCL page。
有了它,你可以简单地写:
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)