zoukankan      html  css  js  c++  java
  • 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设计时应该考虑到。

    未经允许,请勿转载
  • 相关阅读:
    Java——多线程之方法详解
    Java——深入理解Java异常体系
    Java——Java代码的执行顺序
    Java——抽象类与接口的前世今生
    存储系列之 LUN 和 LVM
    存储系列之 RAID技术原理简介
    存储系列之 硬盘接口与SCSI总线协议
    存储系列之 介质(软盘、硬盘、固态)和磁盘寻址
    Redis设计原理简介
    MySQL InnoDB索引介绍以及在线添加索引实例分析
  • 原文地址:https://www.cnblogs.com/zhuzhudong/p/13496075.html
Copyright © 2011-2022 走看看