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设计时应该考虑到。
未经允许,请勿转载