CUDA Books
230 points • 1 day agoArticle Link

这是一份精选的 CUDA 编程书目,覆盖从入门到高级的资料,包含 C++ 与 Python 相关书籍,侧重架构、性能优化以及 2024–2026 年的最新出版物。书目按类别组织:初学者指南、核心架构、实战手册、高级优化、 Python 与高层 CUDA,以及近年出版物。

入门推荐包括 "CUDA by Example"(2010)、 "Learn CUDA Programming"(2019)和 "CUDA for Engineers"(2016),均以示例为主,适合初学者。核心架构类以 "Programming Massively Parallel Processors"(3rd ed., 2022)为代表,常被高校作为 GPU 架构的权威教材。

实战类有 "Programming in Parallel with CUDA"(2022),包含真实科学示例;"Professional CUDA C Programming"(2014),面向生产环境的多 GPU 与 streams 使用;以及 "GPU Parallel Program Development Using CUDA"(2018),侧重 cuBLAS 、 Thrust 等库的应用。高级参考如 "The CUDA Handbook"(2013)提供深入 API 细节,"CUDA Programming"(2013)覆盖并行算法与优化,"CUDA Application Design and Development"(2011)则面向研究型应用设计。

关注 Python 的书籍包括 "Hands-On GPU Programming with Python and CUDA"(2018),介绍 Numba 和 CuPy;以及 "GPU Programming with C++ and CUDA"(2024),涉及现代 C++20 与 Python 互操作。近年重要出版物(2022–2026)有多部更新版与专题书,如 "CUDA C++ Optimization"(2024)、 "CUDA C++ Debugging"(2024)和 "High-Performance Computing with C++26 and CUDA 13"(2026)。

由于 CUDA 变动快速,建议将这些书籍与官方免费文档 CUDA C++ Programming Guide(v13.x, 2026)配合阅读。欢迎通过 pull request 提交推荐,优先收录 2018 年以后的书籍或仍具大量示例代码的经典著作。该仓库属于 Awesome 系列,并附有关于 CUDA 工具、 GPU 资源与并行计算的相关列表。

60 comments • Comments Link

• 《 CUDA Programming: A Developer's Guide to Parallel Computing with GPUs 》被推荐为最佳入门书,而《 Massively Parallel Processors: A Hands-on Approach 》因大量错误和令人困惑的解释被批评,《 CUDA by Example 》则被认为过于简化并且对硬件架构抽象过度。

• 一本新的 CUDA 书正在开发中,采用自下而上的写作思路,从硬件工程入手,逐步深入 NVIDIA 硬件优化,覆盖除图算法之外的主要算法,基于一门成功的大学课程编写。

• 尽管推荐书籍中有一本出版于 2012 年,但它仍然适用,因为 GPU 硬件和 CUDA 语言没有发生根本性变化,它为通过其他资源学习现代特性提供了坚实基础。

• Warp 被推荐为基于 Python 的现代化 CUDA 开发替代方案,允许在 Python 中直接编写 CUDA kernel,学习曲线较平缓,但由于相对较新,尚难以进入书本教材。

• 人们对涵盖 cuTile 等新兴范式的资料表现出兴趣,这反映出当前教学资源在介绍 GPU 编程新技术方面存在空白。

• 越来越多的 NVIDIA 内部人员建议不要编写自定义 CUDA kernel,除非这是 NVIDIA 的全职工作,他们推荐使用更高级别的库;但也有人认为这种建议是推动供应商锁定的一种方式。

• 反对编写自定义 kernel 的建议被比作建议用 Python 代替 C,或用 Unreal 的授权而不是自己构建渲染引擎,强调了为特定需求选择合适工具的重要性。

• NVIDIA 未能为 sm120(非数据中心 GPU)发布可用的 kernel,尽管 Blackwell 已经发布,这表明 NVIDIA 并不总是平等地优先支持各个硬件细分市场,依赖其官方工具存在一定风险。

• 是否编写自定义 CUDA kernel 应基于具体需求:当高级库能满足需求时就使用高级库;但在学习、需要底层控制、进行微观优化或通过 kernel 融合减少内存流量时,编写自定义 kernel 仍然必要。

• 《 AI Systems Performance Engineering 》被提及为相关读物,虽然它并不专注于 CUDA,但表明更广泛的性能工程知识非常有价值。

• OLCF 的 CUDA 培训系列被推荐为良好的入门资源,覆盖基础内容,能让后续阅读更容易理解。

• 指向《 Programming Massively Parallel Processors 》第三版的链接已损坏,目前该书已出到第四版。

• 使用 LLM 提高即时生产力的做法引发了对通过传统书籍进行深入学习的质疑,这反映了行业更倾向于 prompt engineering 而非打牢基础编码技能的趋势。

• 大家普遍感到企业更青睐 prompt engineering 而不是传统编码技能,这在生产压力与深入技术学习之间造成了张力。

讨论显示,基础的 GPU 编程知识仍具有持久价值,但业界同时在推动更高级别的抽象和 LLM 驱动的生产力。虽然有几本书被推荐用于学习 CUDA,但共识是:出于优化和学习等特定用途,编写自定义 kernel 仍然重要,尽管供应商倾向于推广更高级别的库。社区对 Warp 、 cuTile 等新工具表现出兴趣,表明实践在不断演进,同时也对供应商锁定和 NVIDIA 对不同硬件支持不一致表示担忧。将 LLM 用于提高即时产能的压力与掌握 GPU 编程所需的深度、耗时学习之间存在明显冲突。