GPU Kernel 学习路线

这篇只做学习路线入口。主题分类和 canonical 文档以 GPU 知识库索引 为准;可按周推进的课程层见 GPU Kernel 系统学习课程

总路线

学习顺序不要从 Tensor Core 或 FlashAttention 开始。对初学者更稳的路径是:

硬件地图 -> CUDA 最小程序 -> 线程配置 -> Shared Memory -> 基础 kernel -> GEMM -> profiling -> LLM kernel

阶段 0:先建立硬件地图

目标:知道 GPU 为什么适合高吞吐并行,以及常见术语在哪一层。

读:

必须搞清楚:

  • GPU / SM / warp / thread 的层次。
  • CTA 和 block 基本等价,cluster 是多个 CTA 的更高一级协作单位。
  • HBM、L2、shared memory、register 的速度和作用不同。

阶段 1:写出第一个 CUDA Kernel

目标:能独立写、编译、运行最小 CUDA 程序。

读:

练:

  • 一维 vector add。
  • grid-stride loop。
  • cudaGetLastError()cudaDeviceSynchronize() 的错误检查。

阶段 2:理解线程配置和 occupancy

目标:不再只会复制 block=256,知道 block/grid 和 SM 资源之间的关系。

读:

练:

  • 改 block size,观察 kernel 时间。
  • 理解一个 SM 可同时驻留多少 block/warp。
  • 区分 occupancy、SM active 和实际性能。

阶段 3:掌握 shared memory

目标:理解为什么高性能 kernel 不是每次都直接读 HBM。

读:

练:

  • block reduce。
  • naive matmul 和 tiled matmul 对比。
  • 观察 coalescing、bank conflict、同步开销。

阶段 4:进入 GEMM 和 Tensor Core

目标:知道 GEMM 优化从 naive 到 Tensor Core 的主线,不急着手写最底层 PTX。

读:

先理解:

  • CTA tile、warp tile、MMA tile 的分层。
  • cp.async、TMA、WGMMA、tcgen05 分别解决什么问题。
  • 为什么 tile、layout、pipeline、register、SMEM 是一组联动参数。

阶段 5:建立 profiling 闭环

目标:从“感觉优化了”变成“用指标证明优化了”。

读:

练:

  • 用 nsys 看 timeline。
  • 用 ncu 看 memory throughput、SM active、warp stall、tensor pipe。
  • 区分首次 JIT/heuristics/warmup 和真实 kernel 耗时。

阶段 6:进入 LLM Kernel

目标:把 CUDA 基础映射到 LLM 推理里的实际算子。

方向:

  • RMSNorm / LayerNorm:reduction + elementwise。
  • Softmax / Online Softmax:数值稳定 + reduction。
  • Attention / FlashAttention:tile、shared memory、online softmax、KV cache。
  • MoE / grouped GEMM:小矩阵、调度、通信和低精度。

相关入口:

推荐节奏

周期目标输出
第 1 周CUDA 基础和 vector add能写最小 kernel,并解释 grid/block/thread。
第 2 周线程配置和 shared memory能写 reduction,并解释 occupancy 与 bank conflict。
第 3-4 周matmul 和 GEMM 优化主线能写 naive/tiled matmul,知道生产 GEMM 为什么复杂。
第 5 周profiling能用 nsys/ncu 判断 memory-bound、compute-bound 或资源 stall。
第 6 周以后LLM kernel挑 RMSNorm、softmax、attention、MoE 中一个方向深入。

组织提醒

  • 主题知识优先沉淀到 GPU 知识库索引 中列出的 canonical 文档。
  • 章节式课程放在 GPU/GPU-Kernel-Learning/,用于循序渐进学习;不要让它和主笔记维护两份互相冲突的结论。
  • 新图优先放 GPU/Drawings/,使用普通 SVG,避免 Mermaid 作为主图。