Skip to content

学习资源

精选的 CUDA 编程和 GPU 内核优化学习资源列表。

NVIDIA 官方资源

文档

工具


开源项目

内核库

项目重点难度
CUTLASSGEMM, Tensor Core高级
FlashAttention注意力高级
xFormers注意力, 内存中级
Triton内核 DSL中级
DeepSpeed训练优化高级

教育性

项目描述
CUDA ModeCUDA 学习资源
GPU ModeGPU 编程教程
Awesome CUDACUDA 资源精选

书籍

GPU 编程

  • Programming Massively Parallel Processors — David B. Kirk, Wen-mei W. Hwu
    • GPU 计算的经典教科书
  • CUDA by Example — Jason Sanders, Edward Kandrot
    • CUDA 实践入门
  • Professional CUDA C Programming — John Cheng, Max Grossman, Phil McGachey
    • 高级 CUDA 技术

计算机体系结构

  • Computer Architecture: A Quantitative Approach — Hennessy & Patterson
    • 理解内存层次结构和并行性

在线课程


关键概念

内存层次结构

执行模型

优化优先级

  1. 最大化并行性 — 足够的线程来隐藏延迟
  2. 合并内存访问 — 相邻线程访问相邻内存
  3. 共享内存使用 — 减少全局内存流量
  4. 避免 Bank 冲突 — 确保共享内存效率
  5. 占用率调优 — 平衡寄存器、共享内存、线程

性能指标

指标描述目标
吞吐量每秒操作数Roofline 极限
延迟每次操作时间最小化
占用率活动 Warp / 最大 Warp50-100%
内存带宽每秒传输字节数~90% 峰值
计算效率实际 / 峰值 FLOPS>80% 对于 GEMM

常见陷阱

内存合并

非合并内存访问可能将带宽降低 10-32 倍。始终确保相邻线程访问相邻内存地址。

共享内存 Bank 冲突

当 Warp 中的多个线程访问同一个 Bank 时,访问会被串行化。使用填充或访问模式来避免。

分支分歧

Warp 内的分歧分支会顺序执行两条路径。最小化控制流分歧。

先分析

在优化之前始终进行分析。使用 Nsight Compute 识别实际瓶颈,而不是猜测。

Released under the Apache 2.0 License.