每个 NVIDIA CUDA Toolkit 版本都会新增功能和性能改进,帮助开发者更充分地利用 NVIDIA GPU 以及更广泛的 NVIDIA 软件平台。
CUDA Toolkit 13.4 新增了对 Windows on Arm 的支持。CUDA 应用长期以来一直通过 Linux 在 Arm 平台上获得支持;此版本将这一能力扩展到了 Windows on Arm 平台。
该版本还引入了对 NVIDIA Rubin GPU 架构的早期开发者支持、增强的 GPU 管理能力、扩展的 CUDA Python 和 CCCL 功能,以及对 NVIDIA Nsight 开发者工具和核心数学库的更新。
CUDA 13.4 增强功能
CUDA 13.4 中的其他增强功能将在本节中详细介绍。
开发者可预览 NVIDIA Rubin
CUDA Toolkit 13.4 以预览形式新增了对 NVIDIA Rubin 架构(计算能力 107)的功能支持,使开发者能够在 CUDA 对 Rubin 的支持在未来某个 CUDA Toolkit 版本中正式发布之前,就开始移植应用程序。Rubin 是下一代 GPU 架构,为智能体 AI 时代提供动力。
多进程服务 V3
多进程服务器(MPS)V3 为 CUDA MPS 引入了现代化的控制层,简化了共享 GPU 资源的自动化和管理。此更新为开发者和编排层提供了可编写脚本的 CLI、命名的服务器实例以及用于组织并发工作负载的命名空间。它还新增了 TOML 配置支持、流式多处理器(SM)分区控制,以及与 cgroup 集成的 GPU 内存限制。这些能力实现了精确的 GPU 分区,其中计算性能、内存边界和执行优先级均以编程方式定义。此版本确保 MPS 能够集成到容器化环境中,在最大化硬件利用率的同时,为每个进程维持严格的资源隔离。要开始使用 MPS V3,请参阅快速入门和完整的文档。
CUDA Compute Fabric Transport
CUDA Compute Fabric Transport(CFT)引入了一种以传输为中心的方式,使高级应用和通信库能够大规模地通过 NVIDIA NVLink fabric 移动数据。软件无需将每个远程 GPU 分配映射到进程的虚拟地址空间,而是可以使用端点 ID 和偏移量来定位命名的逻辑端点,然后直接从 GPU 发出异步 put、get 和归约操作。
这种方法减轻了大型多 GPU 系统中的虚拟地址压力,支持单播和多播通信模式,并报告完成和错误状态,以便应用程序能够检测、重试或重新路由失败的 fabric 传输。
CFT 仅通过 CUDA Driver API 提供,面向需要更高级通信库所不具备的非常特定功能的通信库开发者。大多数应用程序开发者最好使用 NVIDIA NCCL 或 NVSHMEM 等库。要了解更多信息,请参阅 CUDA 编程指南。
局部性域
CUDA 13.4 提供了对局部性域的编程访问。局部性域是 GPU 中包含流式多处理器(SM)和设备内存的一部分。应用程序可以在局部性域中分配设备内存,并在同一局部性域中创建具有 SM 资源的绿色上下文。将计算与其访问的内存放在一起,可以在具有多个局部性域的设备上提高性能。有关如何查询和使用局部性域的更多信息,请参阅 CUDA 编程指南。
查询统一内存的位置
API 对查询统一内存驻留信息的支持,为性能敏感的库和运行时提供了一种直接的方式来了解托管或系统分配的数据当前驻留在何处。统一内存使异构编程更简单,但高性能软件仍然需要局部性感知,以避免不必要的页面迁移、远程内存访问或低效的暂存路径。通过驻留查询,CUDA 应用程序和库可以更明智地决定在何处以及何时调度计算和数据移动。要了解更多信息,请参阅 cudaMemGetLocationInfo 的 API 参考
.
解耦 CUDA 驱动程序和 CUDA 工具包
CUDA SDK 安装程序不再捆绑 NVIDIA 驱动程序。请使用您首选的包管理器单独安装适当的 nvidia-open
驱动程序或 cuda-toolkit
包。
一致性平台默认使用基于驱动程序的一致性内存管理
在 NVIDIA 一致性平台(如 NVIDIA Grace Hopper、NVIDIA Grace Blackwell 和 NVIDIA Vera Rubin)上,驱动程序现在默认使用基于驱动程序的一致性内存管理(CDMM)而不是 NUMA。NUMA 模式仍然完全支持,可以通过内核模块参数选择。如果您计划使用它,请在升级前进行更改。这是一个节点范围的设置,需要重新加载驱动程序或重启。应在升级前选择模式。有关 CDMM 的更多信息,请参阅文章 理解硬件一致性平台上的内存管理 和 白皮书。
编译器/NVCC
主机编译器兼容性现在在支持的主机平台上包括 GCC 16 和 Clang 22。新的 SM_107 架构目标支持为 Rubin GPU 编译。
CUDA Python
CUDA Python 扩展了对核心 CUDA API 和高性能算法的 Python 式访问,并更新了开发工具、内存管理、图工作流和应用程序可移植性。
cuda.core
在 CUDA Python 1.0 发布之后,cuda.core 1.1.0 扩展了稳定的 Python 式 CUDA API,增加了纹理和表面编程、更丰富的托管内存控制、改进的 CUDA 图集成,以及为开发工具和代理提供完整的类型信息。
有关更改的完整列表,请参阅 cuda.core 1.1.0 发行说明。
纹理和表面编程
新的 cuda.core.texture
模块为 CUDA 纹理和表面内存提供了一流的 Python API。OpaqueArray
和 MipmappedArray
表示硬件布局的 GPU 分配,而 TextureObject
支持无绑定、硬件过滤的内核读取,SurfaceObject
支持类型化的内核端加载和存储。以下示例创建一个不透明的 CUDA 数组,并将其绑定到纹理对象,以便内核进行硬件过滤读取。
from cuda.core import Device
from cuda.core.texture import (
OpaqueArrayOptions,
ResourceDescriptor,
TextureObjectOptions,
)
from cuda.core.typing import ArrayFormatType, FilterModeType
dev = Device()
dev.set_current()
stream = dev.create_stream()
with dev.create_opaque_array(
OpaqueArrayOptions(
shape=(1024, 1024),
format=ArrayFormatType.FLOAT32,
num_channels=1,
)
) as array:
array.copy_from(image, stream=stream)
resource = ResourceDescriptor.from_opaque_array(array)
options = TextureObjectOptions(filter_mode=FilterModeType.LINEAR)
with dev.create_texture_object(
resource=resource,
options=options,
) as texture:
# Pass texture.handle to a CUDA C++ kernel.
run_kernel(texture.handle)
支持 NUMA 的托管内存
ManagedMemoryResource.allocate()
现在返回一个 ManagedBuffer
,其具有用于 CUDA 内存建议的基于属性的接口。应用程序可以配置读取为主的数据、首选放置位置和处理器访问。
新的 Host
类型在指定内存位置时补充了 Device
。它可以表示任意主机内存、特定的 NUMA 节点,或与调用线程关联的 NUMA 节点。
以下示例配置托管内存的放置和访问,将数据预取到 GPU,然后将输出移动到主机内存。
from cuda.core import Device, Host, ManagedMemoryResource
from cuda.core.utils import prefetch_batch
dev = Device()
dev.set_current()
stream = dev.create_stream()
mr = ManagedMemoryResource()
weights = mr.allocate(weights_nbytes, stream=stream)
output = mr.allocate(output_nbytes, stream=stream)
weights.read_mostly = True
weights.preferred_location = dev
weights.accessed_by.add(dev)
prefetch_batch(stream, [weights, output], dev)
# Launch GPU work, then move the result to host memory.
output.prefetch(Host(), stream=stream)
stream.sync()
改进的开发和图工作流
cuda.core 1.1
为每个公共 API 提供 .pyi
类型存根,使 IDE 自动补全和编码代理能够访问类型信息、函数签名、返回类型等。
在众多 CUDA 图工作流改进中,GraphBuilder.graph_definition
将捕获的图暴露为 GraphDefinition
。开发者可以使用它将流捕获与显式图构建相结合,包括检查或扩展捕获的图。
其他新增功能包括设备特定的 NVLink 枚举、扩展的绿色上下文工作队列配置、Program 和 ObjectCode 的类路径输入,以及公共的 Buffer.size 属性。该版本还加强了 IPC 验证、自由线程 Python 正确性和 CUDA 进程检查点恢复。
cuda.compute
cuda.compute
提供对 NVIDIA CUDA 核心计算库(CCCL)高性能、可定制 GPU 算法的 Pythonic 访问,包括排序、扫描、归约、变换等。
cuda.compute 1.1
支持针对多个 GPU 架构的算法对象提前(AoT)编译,包括在没有 GPU 的构建系统上。ProxyArray
和 ProxyValue
描述参数类型而不分配设备内存,而 serialize()
创建一个可以存储和部署的工件。在目标系统上,deserialize()
无需重新编译即可恢复算法,并加载与当前 GPU 架构匹配的构建。
以下示例为 sm_80 和 sm_90 编译归约,无需 GPU,然后保存以供后续部署。
import numpy as np
from cuda.compute import (
OpKind,
ProxyArray,
ProxyValue,
make_reduce_into,
serialize,
)
reducer = make_reduce_into(
d_in=ProxyArray(np.int32),
d_out=ProxyArray(np.int32),
op=OpKind.PLUS,
h_init=ProxyValue(np.int32),
compute_capability=[80, 90], # Build for sm_80 and sm_90.
)
with open("reduce.cclb", "wb") as file:
file.write(serialize(reducer))
CCCL
CUDA 13.4 随附 CCCL 3.4,其特性包括在 NVIDIA Blackwell GPU 上更快的 cub::DeviceScan、跨 CUB 设备级算法的单次调用 API、批量 warp 归约,以及 cuda::std 中熟悉的 C++ 标准库并行算法。
在 NVIDIA Blackwell GPU 上更快的设备级扫描
针对 Blackwell 的 cub::DeviceScan 新 warp 专用实现现已可用。该实现使用张量内存加速器(TMA)来重叠内存移动与计算,同时减少同步开销。

图 1. CUDA 13.4 中 CUB DeviceScan 的性能改进
在 NVIDIA Blackwell GPU 上的基准测试结果中,新的 cub::DeviceScan::Sum 实现在所测试的数据类型上达到高达 92% 的内存带宽利用率(此前实现最高约为 50%)。该实现针对大规模扫描工作负载进行了优化,同时为不支持的架构、数据类型、迭代器和工具链保留了回退方案。
CUB 设备级算法的单次调用 API
CCCL 3.4 完成了跨 CUB 设备级算法的基于环境的单次调用重载的推出。此前,应用程序通常先调用一次 CUB 算法以确定其临时存储需求,分配该存储,然后再次调用该算法以执行操作。新的重载从通过执行环境提供的内存资源获取临时存储。有关更多信息,请参阅使用单次调用 API 简化 CUB 和 CUB 设备级原语文档。
以下示例创建一个带有 CUDA 流和内存池的执行环境,然后运行归约,而无需手动管理临时存储。
auto device = cuda::devices[0];
auto stream = cuda::stream{device};
auto pool = cuda::device_default_memory_pool(device);
auto env = cuda::std::execution::env{
cuda::stream_ref{stream},
pool
};
cub::DeviceReduce::Sum(d_input, d_output, num_items, env);
这减少了样板代码,同时集中控制算法如何执行和获取临时存储。传统的两阶段 API 并未被弃用,仍然可供需要显式存储管理的应用程序使用。
warp 内的批量归约
引入了一个新的 CUB warp 级集合操作 cub::WarpReduceBatched
,用于对分布在一个 warp 上的多个独立批次的值进行归约。它将这些批次一起处理,最大限度地减少 shuffle 操作,并增加每个 warp 执行的有用工作量。
GPU 上的并行 C++ 标准库算法
CUDA 13.4 在 cuda::std
中引入了 C++ 标准库并行算法模型。开发者可以使用 cuda::execution::gpu
执行策略调用数十种熟悉的算法,包括 copy_if
、find_if
、merge
、reduce、transform 和 scan 操作。
以下示例使用 GPU 执行策略将正值从一个设备可访问范围复制到另一个范围。
#include <cuda/std/algorithm>
#include <cuda/std/execution>
struct is_positive
{
__host__ __device__
bool operator()(int value) const
{
return value > 0;
}
};
cuda::std::copy_if(
cuda::execution::gpu,
d_first,
d_last,
d_output,
is_positive{}
);
这些算法在设备可访问的区间上运行,底层使用 CCCL 和 CUB 实现。这为 CUDA C++ 开发者提供了一个标准、易识别的 GPU 执行接口,同时通过可自定义的执行策略保留对 CUDA 特有功能(如流和内存资源)的访问。更多详情请参阅 cuda::std 并行算法文档。
程序化依赖启动登陆 CUDA Tile IR
CUDA Tile IR 对程序化依赖启动(PDL)的支持,使同一 CUDA 流上的内核间重叠成为可能,让依赖内核能够在其前驱内核完成之前开始执行。请参阅 CUDA Tile IR 发行说明以了解有关这些操作的更多信息。
CUDA Tile C++ 中的新视图
CUDA Tile C++ 引入了用于加载和存储数据的额外视图。
跨步视图创建静态大小的数据块,其中块之间的间距由编译期跨步因子决定。这便于实现模板类操作中常见的数据访问模式。收集散射视图支持访问数组中不相邻的数据块。这便于访问具有稀疏访问模式的数据。
开发者工具
以下是一系列开发者工具增强。
Nsight Python
Nsight Python 1.0 是一个 Python 内核性能分析接口,使用 NVIDIA Nsight 工具自动完成跨多个内核配置的性能分析。一个装饰器和上下文管理器即可在一个脚本中实现内核基准测试、架构指标收集、GPU 降频预防和性能可视化。无需样板代码。无需手动解析报告。Nsight Python 以极低的代码开销提供可扩展的架构指标——而不仅仅是挂钟计时。

图 2. 带有性能分析区域注释的 Python 源代码以及两个区域对应的性能图表
NVIDIA Nsight Compute
Nsight Compute 2026.3 为 CUDA Tile 工作负载添加了 Tile IR 支持,使开发者能够在源代码页面中检查 Tile IR,并将其与 CUDA Tile 源代码和生成的代码关联起来。该版本还改进了 OptiX 工作负载的寄存器溢出信息,并增强了 Nsight Copilot。
NVIDIA Nsight Systems
Nsight Systems 2026.5.1 扩展了跨 CUDA、CPU、AI 框架、网络和存储的平台覆盖范围和工作负载可见性。该 Web 版本添加了对 CUDA 13.4、Rubin GPU 和 Windows on Arm 的支持。它还将 NVTX 范围投射到“所有流”层级中,还原 cuTile 名称,并在时间线上显示通过 CiG 流提交的 CUDA 工作负载。
CPU 指标集将相关硬件计数器分组以便在单次采集中收集,帮助开发者通过 Topdown 指标集逐步隔离瓶颈。对于 PyTorch 工作负载,新的 --pytorch=functions-trace-shapes
该选项会向被追踪的函数添加张量形状和训练参数等信息。开发者可以在形状追踪提供的额外细节与现有函数追踪选项的较低开销之间进行选择。
网络、存储和集群性能分析
网络性能分析通过 NVIDIA DOCA Telemetry Service 增加了高频 NIC 指标采集,使开发者无需提升权限即可将流量、拥塞通知和发送等待与应用程序活动关联起来。新的 NCCL 掉队者分析配方会分析集合通信时序,以识别反复拖慢通信器进度的 rank。有关采集要求和配方用法,请参阅 Nsight Systems 用户指南和采集后分析指南。
存储性能分析现在包含一个 S3 访问摘要分析配方,它跨进程和主机聚合访问模式与 I/O 统计信息,帮助识别热点桶和对象、频繁的小型传输以及工作负载不均衡。NVIDIA SCADA 指标性能分析将来自 SCaled Accelerated Data Access 存储架构的计数器和直方图带入时间线,开发者可以在其中将存储服务器活动与 GPU 和 CPU 事件关联起来。
对于多节点和集群性能分析与剖析,实验性的 vClock 插件可在不更改系统时钟、也不需要在无法使用 PTP 等高精度同步时提升权限的情况下,改善报告对齐。
二进制负载与插件开发
NVTX 二进制负载现在可以导出为动态关系表,负载字段以列的形式表示,以便在 SQLite、Arrow 和 Arrow/Parquet 格式中进行下游分析。Nsight Systems 插件框架还新增了初始化阶段、进程退出回调 API,以及在子进程中加载插件库。开发者可以在应用程序启动前初始化采集,捕获关闭期间生成的数据,并将性能分析覆盖范围扩展到子进程。
NVIDIA Nsight Cloud
Nsight Cloud 让在远程无头系统上查看和分析性能分析报告变得更加容易。Nsight Operator 为分析、OpenTelemetry 和 NVIDIA Dynamo 带来了改进,并新增了一个文档站点。
NVIDIA Nsight AI
Nsight AI 将专门的 AI 辅助引入加速计算开发工作流。NVIDIA 托管的 CUDA MCP Server 将受支持的 AI 编码代理连接到最新的 CUDA 文档和代码示例,而开源的 Nsight Copilot Blueprint 则为倾向于在自己的环境中部署和运营的团队提供了一个自托管的 CUDA AI 后端。
NVIDIA Compute Sanitizer
Compute Sanitizer 随附了改进的共享内存越界检测,并在 Hopper 及更新架构上支持编译时修补。Initcheck 现在包含批量 memcpy 异步支持,racecheck 支持按集群块过滤。
NVIDIA 核心数学库
CUDA Toolkit 13.4 中的核心数学库现已对 Rubin GPU 架构提供功能支持,并为 N1X 笔记本电脑生态系统提供 Windows on Arm 支持。
13.4 中 cuBLAS 的更新包括以下功能:
- cuBLAS 通过使用 Ozaki-II 方案的定点仿真提升了双精度性能。
- 在 Blackwell 数据中心 GPU 上,cuBLASLt 会在流式多处理器(SM)之间动态调度分组 GEMM 计算,以最大程度减少常见 MoE 工作负载中的负载不均衡。与更早的工具包版本相比,这种方法提升了具有大量分组(例如 32 个)的分组 GEMM 调用的性能。当分组 GEMM 操作与其他设备内核并发运行时,它也可以提升性能。
- cuBLASLt 新增了实验性缩放模式
CUBLASLT_MATMUL_MATRIX_SCALE_VEC32_MN_K4_UE8M0
以及CUBLASLT_MATMUL_MATRIX_SCALE_VEC128_MN_K4_UE8M0
它们使用一种替代的缩放因子布局,支持A
和B
FP8 精度张量。这些模式将缩放因子按 4 个一组打包,并以 M 主序或 N 主序布局存储。只要主维度不能被 4 整除,就会添加填充。更多详情,请参阅文档。
CUDA Toolkit 13.4 入门
CUDA Toolkit 13.4 通过 Windows on Arm 支持、对 NVIDIA Rubin GPU 架构的预览支持、更新后的 GPU 资源管理与通信能力,以及 CUDA Python、CCCL、NVIDIA Nsight 开发者工具和核心数学库方面的增强,扩展了 CUDA 开发。
下载 CUDA Toolkit 13.4,并查看 CUDA Toolkit 13.4 发行说明,以获取完整的功能列表、支持的平台和兼容性信息。
致谢
感谢以下 NVIDIA 贡献者:Andy Terrel、Rob Armstrong、Jackson Marusarz、Mahender Hari、Becca Zandstein、Mridula Prakash、Daniel Rodriguez、Noah Stern。
