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