CUDA实践指南(三十五)

简介:

建议和最佳做法:
整体性能优化策略:
性能优化围绕三个基本策略展开:

  • 最大限度地平行执行
  • 优化内存使用量以实现最大内存带宽
  • 优化指令使用率以实现最大指令吞吐量

最大化并行执行从构建算法开始,尽可能多地暴露数据并行。 一旦算法的并行性暴露出来,它就需要尽可能有效地映射到硬件。 这是通过仔细选择每个内核启动的执行配置来完成的。 应用程序还应该通过流显式公开设备上的并发执行以及最大化主机和设备之间的并发执行,从而最大限度地提高并行执行的水平。
优化内存使用开始于最小化主机和设备之间的数据传输,因为这些传输比内部设备数据传输具有更低的带宽。 内核对全局内存的访问也应通过最大限度地使用设备上的共享内存来最小化。 有时候,最好的优化甚至可以首先通过简单地重新计算数据来避免任何数据传输。
根据每种存储器的访问模式,有效带宽可以变化一个数量级。 因此,优化内存使用的下一步是根据最佳内存访问模式来组织内存访问。 这种优化对于全局内存访问尤其重要,因为访问延迟需要花费数百个时钟周期。 共同的内存访问通常只有在存在高度银行冲突时才值得优化。
至于优化指令的使用,应该避免使用吞吐量低的算术指令。 这表明在不影响最终结果时速度的交易精度,例如使用内在函数而不是常规函数或单精度而不是双精度。 最后,由于设备的SIMT(单指令多线程)性质,必须特别注意控制流程指令。
NVCC编译器开关:
nvcc:
NVIDIA nvcc编译器驱动程序将.cu文件转换为C,用于主机系统和CUDA程序集或设备的二进制指令。 它支持许多命令行参数,其中以下对于优化和相关的最佳实践特别有用:
‣-maxrregcount = N指定内核在每个文件级别可以使用的最大寄存器数量。 见注册压力。 (另请参阅CUDA C编程指南的“执行配置”中讨论的__launch_bounds__限定符,以控制每个内核基础上使用的寄存器数量。)
‣--ptxas-options = -v或-Xptxas = -v列出每个内核的寄存器,共享和常量内存使用情况。
‣-ftz = true(非规格化数字被刷新为零)
‣-prec-div = false(不太精确的划分)
‣-prec-sqrt = false(不精确的平方根)
n -use_fast_math nvcc的编译器选项强制每个functionName()调用等效的__functionName()调用。 这使得代码运行速度更快,代价是精度和准确性降低。 请参阅数学库。

目录
相关文章
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
阿里云人工智能平台 PAI 开源 EasyDistill 框架助力大语言模型轻松瘦身
本文介绍了阿里云人工智能平台 PAI 推出的开源工具包 EasyDistill。随着大语言模型的复杂性和规模增长,它们面临计算需求和训练成本的障碍。知识蒸馏旨在不显著降低性能的前提下,将大模型转化为更小、更高效的版本以降低训练和推理成本。EasyDistill 框架简化了知识蒸馏过程,其具备多种功能模块,包括数据合成、基础和进阶蒸馏训练。通过数据合成,丰富训练集的多样性;基础和进阶蒸馏训练则涵盖黑盒和白盒知识转移策略、强化学习及偏好优化,从而提升小模型的性能。
|
12月前
|
自然语言处理 算法 Python
自然语言处理(NLP)在文本分析中的应用:从「被动收集」到「主动分析」
【10月更文挑战第9天】自然语言处理(NLP)在文本分析中的应用:从「被动收集」到「主动分析」
270 4
|
8月前
|
监控 图形学
Unity 倒计时的实现
在 Unity 中实现倒计时功能,主要利用 `Time.deltaTime` 进行精确的时间计算和监控。本文介绍两种常见实现方法:一是通过 `WaitForSeconds(1)` 每秒递减时间,二是基于 `Update()` 函数每帧减去 `Time.deltaTime`。代码中包含详细的注释和示例,需确保挂载 Text 组件以显示倒计时。
|
11月前
|
C语言
【c语言】你绝对没见过的预处理技巧
本文介绍了C语言中预处理(预编译)的相关知识和指令,包括预定义符号、`#define`定义常量和宏、宏与函数的对比、`#`和`##`操作符、`#undef`撤销宏定义、条件编译以及头文件的包含方式。通过具体示例详细解释了各指令的使用方法和注意事项,帮助读者更好地理解和应用预处理技术。
220 2
|
关系型数据库 MySQL
解决MySQL insert出现Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘xxx‘ at row 1
解决MySQL insert出现Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘xxx‘ at row 1
969 2
|
机器学习/深度学习 人工智能 安全
GPT-4硬核揭秘:能力,操纵性,局限性,聊天GPT Plus等
OpenAI创建了 GPT-4,这是 OpenAI 扩大深度学习努力的最新里程碑...
655 0
|
机器学习/深度学习 监控 PyTorch
PointNet:基于Python和PyTorch的3D分割的实用指南
PointNet:基于Python和PyTorch的3D分割的实用指南
|
机器学习/深度学习 人工智能 算法
极智AI | 一文看懂Img2Col卷积加速算法
本教程详细解释了直接卷积计算与Img2Col卷积加速算法的实现原理。
851 0
|
存储 SQL 设计模式
Java设计本地缓存
Java设计本地缓存
Java设计本地缓存
|
Docker 容器
docker 离线镜像导入
前言:之前做了一个医院的项目,一般医院使用的服务器都是内网环境,所以自己整合了一下Docker离线部署的方法分享给大家。
777 0