Atelier Optik

日记随笔

CUDA 是什么:从显卡到 AI 计算底座

它不是一张显卡,也不只是一个编译器。CUDA 更像是 NVIDIA GPU 的“计算语言”和工具箱,让程序员把大规模并行任务交给 GPU 去做。

CUDA 将 CPU 任务分发到 GPU 并行线程的示意图
CUDA 的基本工作流:CPU 负责组织任务,GPU 负责把可并行的计算拆给大量线程执行。

CUDA 到底是干啥的?

CUDA,全称曾写作 Compute Unified Device Architecture,是 NVIDIA 为自家 GPU 建立的并行计算平台和编程模型。普通程序通常主要跑在 CPU 上,而 CUDA 让开发者可以把适合并行的部分写成 kernel,交给 GPU 中成千上万个轻量线程同时执行。

这件事的关键不是“GPU 比 CPU 更高级”,而是分工不同。CPU 擅长复杂控制、低延迟响应和串行逻辑;GPU 擅长把同一种操作重复施加到大量数据上。例如图像处理里的每个像素、深度学习里的矩阵乘法、显微重建里的傅里叶变换和迭代优化,都很容易被拆成许多相似的小任务。

一个直观比喻

如果 CPU 像一位全能研究员,可以灵活处理各种突发问题;GPU 更像一间排满工位的计算车间,每个工位只做很小的一步,但大家同时开工。CUDA 的作用,就是告诉这间车间:数据放在哪里、每个线程算哪一块、结果如何汇总,以及如何和 CPU 交换信息。

所以写 CUDA 程序时,真正要思考的不是“把代码搬到 GPU 上”,而是“问题是否能被拆成足够多、足够规整的小块”。拆得好,速度可能是数量级提升;拆得不好,数据搬运和线程等待反而会吃掉收益。

它是怎么来的?

早期 GPU 主要服务于图形渲染,开发者想用它做通用计算时,往往要把计算任务伪装成图形管线里的纹理和着色器操作。这个阶段很聪明,但也很别扭:你明明想做矩阵、图像或物理仿真,却不得不用图形 API 的方式绕路表达。

2006 年,NVIDIA 推出 CUDA,把 GPU 的通用计算能力正式暴露给开发者。随后 CUDA Toolkit、编译器、运行时 API、数学库和调试/分析工具逐步成熟,GPU 计算从“小众技巧”变成高性能计算、科学计算和机器学习里的常规选项。

这段历史有一个微妙转折:CUDA 不只是让 GPU 能算更多东西,也让软件生态开始围绕 GPU 组织起来。很多算法论文、开源框架和工程实践,逐渐默认“如果要快,就要认真考虑 GPU 后端”。

今天的 CUDA 是什么情况?

到 2026 年,CUDA 已经不只是 CUDA C++。它包含编译工具链、运行时、驱动 API,以及 cuBLAS、cuFFT、cuDNN、NCCL、Thrust 等大量加速库。大多数深度学习框架并不要求用户亲自写 CUDA kernel,但它们底层大量依赖 CUDA 生态来完成张量运算、卷积、通信和推理加速。

官方 CUDA Toolkit 仍在快速迭代。NVIDIA 的版本档案显示,CUDA 13.x 已经成为 2025-2026 年的重要版本线,并且 2026 年仍在发布新版工具包与开发预览。换句话说,CUDA 不是一个“老技术”,而是一个仍在扩展的 GPU 计算平台。

它的优势也很现实:文档、库、示例、调试工具、框架适配和硬件协同都非常完整。代价同样清楚:CUDA 深度绑定 NVIDIA GPU;如果希望跨 AMD、Intel 或其他加速器,就需要考虑 OpenCL、SYCL、HIP、Vulkan Compute、Triton、JAX/XLA 等替代或上层抽象。

为什么科研和 AI 都绕不开它?

因为现代科研计算越来越像“数据密集型的线性代数工厂”。显微成像重建、相位恢复、神经网络训练、三维重建、分子模拟和大模型推理,很多核心步骤都可以归结为矩阵运算、卷积、采样、规约和傅里叶变换。CUDA 让这些操作能够直接贴近 GPU 硬件执行。

对研究者来说,CUDA 的意义不一定是每个人都要手写底层 kernel,而是理解“计算瓶颈在哪里”。知道哪些部分适合并行,哪些部分受限于显存、带宽或数据传输,能帮助我们更理性地设计模型、算法和实验系统。

一句话总结

CUDA 是 NVIDIA GPU 从“图形硬件”变成“通用计算基础设施”的关键软件层。它把 GPU 的并行能力包装成开发者可以调用、优化和组合的工具体系,也因此成为今天 AI、科学计算和计算成像里非常重要的一块地基。