【问题标题】:OpenCL kernel with generic data type具有通用数据类型的 OpenCL 内核
【发布时间】:2016-07-30 04:08:48
【问题描述】:

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

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

REDUCTION(float)
REDUCTION(float2)

然而,这不是很舒服。是否有像gentype 这样的类型说明符可用?

【问题讨论】:

    标签: opencl


    【解决方案1】:

    从 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)
    

    【讨论】:

    • 你的宏不应该在行尾有反斜杠吗?
    猜你喜欢
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2019-05-13
    • 2019-01-19
    • 2011-12-06
    • 2012-02-05
    • 2020-02-19
    相关资源
    最近更新 更多