• CUDA优化



    cuda程序优化

    一:程序优化概述
    1:精度
    在关键步骤使用双精度,其他步骤使用单精度,以获得指令吞吐量和精度的平衡。

    2:延迟
    先缓冲一定量数据,在交给GPU计算。可以获得较高的数据吞吐量。

    3:计算量
    1):绝对计算量
    当计算量较少时,不因用GPU
    2):相对计算量
    当计算量中的并行站大多比例,因使用GPU并行计算。

    4:优秀的CUDA程序
    1)给点数据规模下,选用的算法复杂度不明显高于最优算法
    2)活动的线程束应使SM满载,且活动的线程块数应大于等于2,可以有效隐藏延迟。
    3)当瓶颈出现在运算时,说明指令流已经做了最好的优化
    4)当瓶颈出现在IO或访存时,表明选择了最好的存储器与访存方式,以获得最大的带宽。瓶颈----〉带宽

    5:CUDA程序开发流程与优化
    1)确定串行与并行部分,选择合适算法
    2)按照算法确定数据与任务的划分,将每个需要并行并行实现的步骤映射为一个CUDA两层并行模型的核函数。
    3)编写一个能够正常运行的程序。
    4)优化显存访问,避免显存带宽成为瓶颈。---〉只有将带宽问题优化,才能使优化结果明显
    5)优化指令流
    6)资源均衡。调整shared memory 与 register的分配使用量,获得更高的SM占有率
    7)与主机通信优化

    6:优化显存访问方式
    1)在数据只访问一次,且满足合并访问的情况下,考虑使用zeroy copy memory
    2)除非非常必要,应尽量避免将线程的私有变量分配到local memory;
    3)为满足合并访问,保证访问的首地址从16的整倍数开始,对数据类型进行对齐(__align),采用cudaMallocPitch cudaMalloc3D分配显存

    7:优化指令流
    1)若只需使用少量线程,尽量使用 if threadId <N 
    2)采用原子函数,完成比较复杂的算法,保证结果正确性
    3)避免多余的同步

    8:资源均衡
     1)提高shared使用率
    修改算法指令,动态分配,调整block大小。
    2·)节约寄存器使用
      使用shared memory存储变量,尽量使用括号减短变量声明周期
      使用占用寄存器较小的等效指令代替原有指令。_sin代替sin

    9:提高带宽
     1)使用cudaMallocHost分配主机端内存
     2)使用zeroycop 和 writecombined内存
     3)一次缓存较多数据,再一次性传输
     4)使用流和异步处理隐藏与主机通信时间





























  • 相关阅读:
    flask-模型
    git配置
    windows 下mysql安装
    Python安装
    django部署(gunicorn版本)
    【草稿】 PYTHON 基本知识
    【草稿】简单的python脚本监控ORACLE数据并邮件通知,WIN操作系统下
    orcle linux怎么登陆?全局表空间统计信息怎么查看?表空间内表的统计信息怎么看?数据表的字段怎么查?
    计算机基础篇
    构建乘积数组
  • 原文地址:https://www.cnblogs.com/pengtangtang/p/12762842.html
Copyright © 2020-2023  润新知