CUDA C++ Best Practices Guide读书笔记
性能优化量化意识为王。阅读大纲目标系统掌握 CUDA 优化知识服务于 tiled 矩阵乘 FlashAttention 实现策略读一层、做一层交替进行不要先读完再动手Layer 1GPU 执行心智模型 ✅章节Ch3 — Heterogeneous Computing核心问题GPU 为什么需要数万个线程什么代码适合放 GPU延迟隐藏Latency Hiding是什么依赖什么条件Layer 2学会用数字衡量性能章节Ch9 — Performance Metrics核心问题如何计算 Theoretical Bandwidth理论带宽上限如何计算 Effective Bandwidthkernel 实际使用的带宽两者之比说明了什么动手对 naive 矩阵乘 kernel 测量实际带宽和理论上限对比Layer 3内存优化最重要章节Ch10 — Memory Optimizations阅读顺序Host ↔ Device 数据传输PCIe 瓶颈 ↓ Global Memory Coalescing合并访问 ← 重点 ↓ Shared Memory Tiling ← 重点FlashAttention 核心 ↓ L1/L2 Cache、Texture Memory ← 了解即可动手实现 naive 矩阵乘观察 global memory 访问模式实现 tiled 矩阵乘对比带宽和性能用 Ch9 的方法量化优化效果Layer 4线程执行模型章节Ch6-8Execution Configuration Ch13 — Control Flow核心问题Warp 是什么为什么是 32 个线程Branch Divergence 如何导致性能损失Occupancy 是什么如何影响延迟隐藏如何配置 block/grid 大小让 SM 充分利用动手为 softmax 实现做准备理解 warp 内 reduction 的写法Layer 5指令级优化按需章节Ch12 — Instruction Optimization内容浮点精度与性能权衡快速数学函数__float2int、-use_fast_math编译器 flag有具体性能瓶颈时再读不需要提前啃。暂时跳过章节原因Ch4 Application Profiling有具体项目再看Ch16 多 GPU先打好单 GPU 基础Ch17-19 数字精度按需查阅Ch20 编译器选项参考手册用到再看与 FlashAttention 实现的对应关系FlashAttention 组件依赖的 CUDA 知识对应章节Tiling分块计算Shared Memory 使用Ch10高效矩阵乘Coalescing TilingCh10Online SoftmaxWarp ReductionCh13避免 HBM 读写内存层次理解Ch9 Ch10线程配置Occupancy 调优Ch6-8Layer 1: GPU 执行心智模型Ch3核心结论CPU 设计目标最小化延迟少数线程跑得快GPU 设计目标最大化吞吐量海量线程用并发掩盖延迟关键机制Latency Hiding延迟隐藏GPU 有成千上万的线程分成若干 warp每个 warp 32 个线程。当某个 warp 等待内存数据时内存延迟约 400-800 个时钟周期GPU 立刻切换到其他就绪的活跃 warp 继续执行等数据回来再切回来。为什么切换没有代价每个线程有独立分配的寄存器切换时不需要保存/恢复任何状态直接换。延迟隐藏失效的条件活跃 warp 数量不足——当所有 warp 都在等内存时没有就绪的 warp 可以切换GPU 空转。运算/传输比Operation-to-Transfer Ratio判断一个计算是否值得放在 GPU 上核心指标是ratio运算次数传输元素数\text{ratio} \frac{\text{运算次数}}{\text{传输元素数}}ratio传输元素数运算次数比值越高GPU 越划算传输代价被大量计算摊薄。矩阵加法N×N项目数量运算次数N²每个元素一次加法传输元素数3N²A、B、C 各一个矩阵比值O(1)结论不值得放 GPU。传输代价无法被计算收益覆盖。矩阵乘法N×N项目数量运算次数N³N² 个输出元素每个需要 N 次 multiply-add传输元素数3N²A、B、C 各一个矩阵比值O(N)结论值得放 GPU且 N 越大收益越高。什么代码适合放 GPU运算/传输比高大量计算少量数据搬运可大量并行数万个线程同时做独立计算数据尽量留在 GPU 上哪怕某一步在 CPU 更快只要能避免一次 Host-Device 传输在 GPU 上算也值得相邻线程访问相邻内存为 coalescing 做准备详见 Ch10与 FlashAttention 的联系FlashAttention 的核心问题就是第一层的直接应用N×N attention 矩阵N1024 时约 4MB远超 shared memory 容量48-96KB标准 softmax 需要看完整一行才能归一化 → 必须把完整矩阵写回 HBMglobal memoryOnline softmax 允许分块计算数学上消除全局依赖 Tiling物理上适配 shared memory两者结合才能把中间结果留在 shared memory避免反复读写 HBM
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2425683.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!