CUDA(Compute Unified Device Architecture,统一计算设备架构)是由 NVIDIA 开发的并行计算平台和编程模型。它使软件开发者能够利用 NVIDIA 图形处理器(GPU)进行通用计算(即 GPGPU),而不局限于图形渲染。CUDA 同时包括编程语言扩展、编译器、运行时库、驱动程序和数值库,是目前 GPU 通用计算中应用最广的生态之一,尤其在深度学习和科学计算领域占据主导地位。
历史
GPU 最初是为图形渲染设计的。在 CUDA 出现之前,若要把 GPU 用于通用计算,程序员通常需要借助 OpenGL 或 DirectX 着色器等图形接口,把计算问题伪装成图形任务,门槛很高。NVIDIA 于 2006 年前后推出的 G80 架构(GeForce 8800 系列)引入了统一的着色器结构,为通用计算铺平了道路,CUDA 随之诞生。根据 NVIDIA 的版本存档,CUDA 1.0 于 2007 年 6 月发布。
此后 CUDA 随硬件迭代不断扩展。CUDA 3.0(2010)加强了对 C++ 的支持;CUDA 5.0(2012)引入动态并行(dynamic parallelism)等特性;CUDA 6(2014)提出统一内存(Unified Memory),让 CPU 与 GPU 可以共享一个地址空间,减轻了手动管理数据拷贝的负担。2012 年,AlexNet 在两块 GPU 上训练,被普遍视为深度学习在 GPU 上大规模推进的标志性事件之一,此后 CUDA 与深度学习框架的结合日益紧密。
编程模型
CUDA 程序通常分为主机端(host,即 CPU 及其内存)和设备端(device,即 GPU 及其显存)两部分。主机端负责准备数据、分配显存并启动计算;设备端执行被称为核函数(kernel)的函数,由大量线程并行运行。
线程按层级组织:若干线程组成线程块(block),线程块再组成网格(grid)。同一线程块内的线程可以访问共享内存并相互同步,不同线程块之间则通常无法直接同步。硬件层面,线程以 32 个为一组进行调度,这一组称为 warp,同一 warp 中的线程若走向不同分支,会产生性能损失,即所谓的线程分歧(divergence)。
下面是一个极简的向量加法示例,展示了核函数的定义和启动方式:
__global__ void vecAdd(const float* a, const float* b, float* c, int n) {
int i = blockIdx.x * blockDim.x + threadIdx.x;
if (i < n) c[i] = a[i] + b[i];
}
// 主机端启动:vecAdd<<<(n + 255) / 256, 256>>>(a, b, c, n);
CUDA 原生支持 C 和 C++,并通过扩展语法(如上面的三重尖括号启动语法)描述并行执行。除此之外,还可通过 Fortran 接口以及 Python 绑定(如 CuPy、Numba 的 CUDA 模块)使用。
硬件架构
CUDA 设备由若干流多处理器(Streaming Multiprocessor,SM)组成,每个 SM 内含大量算术单元,并能同时驻留多个线程块。与 CPU 由少量复杂核心构成不同,GPU 以大量相对简单的核心追求吞吐量。
GPU 的存储层次包括寄存器、共享内存(片上、由线程块内线程共享)、L1 与 L2 缓存、全局显存等。程序性能往往取决于如何利用这一层次,例如减少对全局显存的访问、合并内存访问(coalesced access)以及避免共享内存的存储体冲突(bank conflict)。主机与设备之间的数据传输通过 PCIe 或 NVLink 等互连完成,通常是性能瓶颈之一。
NVIDIA 通过计算能力(compute capability)版本号标识不同 GPU 的功能集,例如 Volta、Turing、Ampere、Hopper、Blackwell 等架构各自对应不同的版本号。较新的架构会加入张量核心(Tensor Core)等专用单元,CUDA 库会针对这些单元进行优化。
软件栈
CUDA 的软件栈通常分为三层:驱动程序负责与硬件通信;运行时(runtime)API 提供如 cudaMalloc 之类的常用函数;工具包(toolkit)则包含编译器、调试与性能分析工具以及各种数值库。
编译器 nvcc 负责把混合了主机代码和设备代码的源文件拆分并编译。设备代码通常先被编译为一种与架构无关的中间表示 PTX,再由驱动或工具链进一步翻译为特定 GPU 的机器码(SASS)。这种分层设计使得针对旧硬件编写的 PTX 在新硬件上仍有可能运行。
驱动版本与工具包版本之间存在兼容关系。NVIDIA 在发布说明中会列出每个工具包版本所需的最低驱动版本。在实践中,深度学习框架(如 PyTorch、TensorFlow)通常针对特定的 CUDA 工具包版本编译,如果工具包与驱动或框架版本不匹配,程序可能无法使用 GPU,而静默退回到 CPU 运行。
核心库与应用
CUDA 的价值很大程度上来自其丰富的库生态,主要包括:
- cuBLAS:稠密线性代数,是 线性代数运算的基础库;
- cuSPARSE 与 cuSOLVER:稀疏矩阵运算和求解器;
- cuFFT:快速傅里叶变换,见 快速傅里叶变换;
- cuDNN:面向深度学习的基本算子库,包括卷积、归一化和注意力等;
- Thrust:类似 C++ 标准模板库的并行算法库;
- NCCL:多 GPU 与多节点之间的集合通信库;
- TensorRT:面向推理部署的优化工具;
- CUTLASS:用于编写高性能矩阵乘法等内核的模板库。
在应用层面,CUDA 广泛用于 深度学习训练与推理、分子动力学模拟、气候与流体模拟、图像与视频处理、金融风险计算、密码学以及天体物理等领域。许多大型语言模型和科学计算软件都依赖 CUDA 运行,而 AlphaFold 这类蛋白质结构预测系统也需要大量 GPU 计算资源。
版本
CUDA 工具包以版本号标识。根据 NVIDIA 的版本存档,截至 2026 年 9 月,最新正式版为 13.4 系列,其中 13.4.2 于 2026 年 9 月发布;此前的 13.3 系列、13.2 系列等仍在存档中提供。主版本升级时,NVIDIA 通常会停止支持较早的 GPU 架构。例如,有第三方整理的资料指出,CUDA 13.x 不再支持 Maxwell、Pascal 和 Volta 架构,同时保留 Turing 及之后的架构。由于此类信息来源不一,用户在选择版本时应以 NVIDIA 官方发布说明为准。
竞争与生态
CUDA 是专有技术,只能运行于 NVIDIA 的 GPU 上,这是其最常被提及的特点。多家厂商和标准组织提供了替代方案。例如,Khronos Group 的 OpenCL 是跨厂商的开放标准;AMD 提供 HIP 与 ROCm 平台,HIP 的语法与 CUDA 非常接近,便于代码迁移;SYCL 与 Intel 的 oneAPI 也面向异构计算。此外,OpenAI 的 Triton 等面向 GPU 的编程语言,也在一定程度上降低了对 CUDA 的依赖。
分析人士普遍认为,CUDA 的主导地位不仅来自技术本身,还来自长期积累的开发者社区、数量庞大的已有代码、经过多年优化的库以及与主流框架的深度集成。这种生态上的 网络效应使替代平台即使在性能或成本上具备竞争力,也难以迅速改变开发者的选择。这一现象引发了关于 转换成本和市场支配地位的讨论,相关争议仍在持续。
局限与争议
CUDA 的局限主要体现在以下几个方面:
- 厂商锁定:代码通常只能在 NVIDIA 硬件上运行,迁移到其他平台往往需要改写或借助转换工具。
- 性能可移植性:针对某一代架构优化的内核,在另一代架构上未必高效,线程块大小、内存布局等参数都可能需要调整。
- 数值精度:GPU 上的浮点运算顺序与 CPU 不同,并行归约等操作可能产生与串行结果略有差异的数值,这对科学计算的可重复性提出了挑战。相关问题可参见 浮点运算。
- 编程难度:内存层次、同步与分歧等问题使得编写高效 CUDA 代码仍具有相当难度,因此许多用户改用高层框架间接使用 CUDA,而不直接编写内核。
- 数据传输开销:如果计算量相对于主机与设备之间的数据传输量较小,GPU 带来的加速可能并不明显。
此外,CUDA 的闭源性质和市场地位也使其成为政策讨论的对象,部分观察者关注算力资源集中、标准制定与公平竞争等问题。
参见
CUDA 与 通用 GPU 计算、并行计算以及 图形处理器密切相关。在人工智能领域,它是 机器学习硬件基础设施的重要组成部分。
参考来源
- CUDA Toolkit Archivedeveloper.nvidia.com
- cuda-toolkit · PyPIpypi.org
- Release Notes Release 13.4 NVIDIA Corporation Sep 11, 2026docs.nvidia.com
- CUDA Programming Guide — CUDA Programming Guidedocs.nvidia.com
- Cuda Toolkit Archivedeveloper.nvidia.com
- Introduction to CUDA Programming - GeeksforGeeksgeeksforgeeks.org
- What is CUDA? Parallel programming for GPUsinfoworld.com
- What Is CUDA?supermicro.com
- Nvidia's parallel computing platformtheneuralbase.com
- CUDA News Today: NVIDIA Toolkit, AMD ROCm, and AI Framework Releases (2026)spheron.network