Skip to content

学习资源

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

建议阅读顺序

如果你把 TensorCraft-HPC 当作学习项目或面试展示项目,比较推荐这样的阅读路径:

  1. 先读项目的 技术白皮书,理解仓库为什么这样设计。
  2. 再用本页向外扩展,阅读 NVIDIA 官方资料和周边开源项目。
  3. 最后带着这些外部语境回到仓库的 架构概览Kernel Atlas

这样更容易把本项目放到真实生态里去比较,而不是把它孤立地看成一个“只会跑起来”的 demo。

NVIDIA 官方资源

文档

工具


开源项目

内核库

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

这些项目和 TensorCraft-HPC 的关系

项目为什么值得对比TensorCraft-HPC 更强调什么
CUTLASSCUDA GEMM / Tensor Core 工程的经典参考更清晰的学习路径和优化叙事
FlashAttention高质量的 attention 参考实现更容易讲清楚分块和内存取舍
Triton另一种 GPU kernel 编写范式直接暴露 C++/CUDA 控制面,适合底层学习
xFormers / 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. 占用率调优 — 平衡寄存器、共享内存、线程

这些资源最值得借鉴什么

后续扩展 TensorCraft-HPC 时,最值得吸收的不是“照搬功能”,而是这些项目背后的方法:

  • 来自 CUTLASS:严谨的 tiling 术语和 Tensor Core 分解方式
  • 来自 FlashAttention:围绕 IO 成本展开的叙事与分析方式
  • 来自 Triton:清晰的 operator 级 benchmark 习惯和紧凑示例
  • 来自 Nsight 工具链:用证据解释性能,而不是靠直觉猜测

哪些值得借鉴,哪些应该克制

让仓库变强的方式,不是盲目模仿风格,而是吸收方法。

值得借鉴

  • 对 tiling、内存流量、硬件能力的严谨术语
  • 会把限制条件和 baseline 一起公开的 benchmark 方法
  • 能和 public API 干净映射的紧凑 operator 示例

应该克制

  • 把优化路径完全藏起来的生产级抽象
  • 让教学叙事变得模糊的功能膨胀
  • 与工具链、工作负载形状、参考库脱钩的性能结论

这种张力是刻意保留的。TensorCraft-HPC 应该向更强的系统学习,但不应该因此变成另一套难以解释的生产黑盒。


性能指标

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

常见陷阱

内存合并

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

共享内存 Bank 冲突

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

分支分歧

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

先分析

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

Released under the MIT License.