OpenCL 创建kernel

1、命名

  建议只包含字母和数字。

2、优化数据处理循环的策略

  使用例如展开循环、设置work-group/计算unit以及work-item大小等方式优化kernel的数据处理效率。

(1)展开循环

如果没有loop-carried dependency且循环内容可以并行执行,则可unroll。

 

3、优化指针到本地内存大小的策略

  离线编译器可以为指针参数构建正确大小的local memory系统,如果不指定size,则会使用默认size。

4、使用通道拓展

  通道拓展提供了一种机制,可以以高效率及低延迟在kernel之间同步数据并同步kernel。

5、使用OpenCL pipe

  SDK支持使用pipe。

6、实现任意精度的整数

  可以使用任意精度整数拓展来定义具有自定义位宽的整数,最大64bits。

7、在条件编译时使用预定义的预处理器宏

  使用预定义的预处理器宏,可以有条件的编译kernel代码中的某些部分。

8、声明__constant地址空间限定符

9、在OpenCL kernel中使用结构数据类型作为参数

  通过值或指向结构的指针传递OpenCL kernel中的结构参数(struct)。

10、推测寄存器

  通常,如果对变量的访问是固定的,且不需要任何的动态索引,那么离线编译器会选择寄存器。

11、启用双精度浮点数计算

  SDK支持双精度浮点数计算功能。

12、用于单个work-item kernel的单周期浮点累加器

  在循环中执行累加的单个work-item kernel可以使用离线编译器中的单周期浮点累加器功能。

13、整数promotion规则

  使用intX_t数据类型时应用的整数promotion规则与C++\C不同,在kernel设计时应该考虑到。

 

posted @ 2020-08-13 14:05  ZhuzhuDong  阅读(479)  评论(0编辑  收藏  举报