Overview
CUDA 是 NVIDIA 提供的并行计算平台与编程模型,其目标是让开发者利用 GPU 的大规模并行计算能力加速计算密集型任务。学习 CUDA 的重点并不只是掌握 CUDA C++ 语法或记忆具体 API,而是理解计算任务如何被划分、组织并映射到 GPU 硬件上执行,例如 Kernel、Grid、Block、Warp、Thread,以及不同层级的存储和同步机制。即使平时主要通过 PyTorch、TensorFlow 或 CUDA Libraries 使用 GPU,理解 CUDA Programming Model 仍然十分重要,因为这些高级框架最终都建立在 CUDA 和 GPU 执行模型之上。
《CUDA Programming Guide》既是一份系统教程,也是一份长期使用的技术参考手册。整份文档大体可以分为以下五个部分:
-
Part 1:Introduction to CUDA
介绍 CUDA 最基本的思想和编程模型,重点回答“GPU 是如何执行并行程序的”。这一部分首先建立 Host 与 Device、Kernel、Thread、Block、Grid 等核心概念,并进一步介绍 GPU 的执行方式、线程组织方式以及 CUDA 平台的基本组成。该部分与具体编程语言无关,主要用于建立理解 CUDA 所需的基础模型。 -
Part 2:Programming GPUs in CUDA
进入实际 CUDA 编程阶段,介绍如何使用 CUDA C++、CUDA Python 等方式编写 GPU 程序,并讨论 SIMT Kernel、Tile Kernel、异步执行、内存管理以及 NVCC 编译工具等内容。这一部分的重点是把前面建立的 CUDA 编程模型落实到代码中,理解一个 CUDA 程序如何编写、编译、启动和执行,同时开始接触基本的性能考虑。 -
Part 3:Advanced CUDA
面向更深入的 CUDA 编程和性能优化,介绍高级 CUDA API、高级 Kernel 编程、CUDA Driver API、多 GPU 编程等内容。学习到这一阶段后,关注点会从“如何写一个正确的 CUDA 程序”逐渐转向“如何获得更细粒度的控制,并充分利用 GPU 硬件能力”。这一部分与高性能计算、CUDA Kernel 优化以及 AI Infra 中的算子开发关系更加紧密。 -
Part 4:CUDA Features
详细介绍 CUDA 平台中的各种独立高级特性,例如 Unified Memory、CUDA Graphs、Cooperative Groups、Asynchronous Barriers、Pipelines、Asynchronous Data Copy、L2 Cache Control、Dynamic Parallelism、Virtual Memory 等。这一部分更接近功能手册,不需要第一次学习时从头到尾全部阅读,通常在实际开发中遇到某种功能时再针对性查阅。 -
Part 5:Technical Appendices
提供 CUDA 的底层技术参考,包括不同 GPU 的 Compute Capability、C++ Language Support、CUDA C/C++ 扩展、Floating Point 行为、CUDA C++ Memory Model、CUDA C++ Execution Model 等内容。这部分包含大量具体语义、硬件限制和技术规格,主要作为开发和性能分析过程中查阅的参考资料。
因此,CUDA Programming Guide 推荐的主要学习路线可以概括为:
CUDA Programming Model → CUDA Programming → Advanced CUDA
也就是先理解 GPU 和 CUDA 的执行模型,再学习如何实际编写 CUDA 程序,最后进入高级编程和性能优化。Part 4 和 Part 5 则更适合作为长期参考手册,在实际开发过程中按需查阅。
从整个 CUDA 学习过程来看,最重要的不是单独记住某个 API,而是逐渐建立这样一条完整的认知链路:
Computation → Kernel → Grid → Block → Warp → Thread → GPU Hardware
只有理解计算任务如何沿着这条链路映射到 GPU 上,才能进一步理解 CUDA Kernel 的性能瓶颈,以及 memory access、warp execution、occupancy、Tensor Core、异步流水线等后续优化技术。