NVIDIA CUDA 工具包发布说明

CUDA工具包的版本发布说明。

1. CUDA 12.9 版本发布说明

The release notes for the NVIDIA® CUDA® Toolkit can be found online at https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html.

注意

发布说明已重新组织为两个主要部分:通用的CUDA发布说明,以及包含12.x版本历史信息的CUDA库发布说明。

1.1. CUDA工具包主要组件版本

CUDA Components

从CUDA 11开始,工具包中的各个组件都采用独立版本控制。

对于CUDA 12.9,下表显示了对应的版本:

表 1 CUDA 12.9 组件版本

组件名称

版本信息

支持的架构

支持的平台

CUDA C++核心计算库

Thrust

2.8.0

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows

CUB

2.8.0

libcu++

2.8.0

协作组

12.9.27

CUDA兼容性

12.9.39767389

aarch64-jetson

Linux

CUDA运行时 (cudart)

12.9.37

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

cuobjdump

12.9.26

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows

CUPTI

12.9.19

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA cuxxfilt (反混淆工具)

12.9.19

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows

CUDA演示套件

12.9.19

x86_64

Linux, Windows

CUDA文档

12.9.43

x86_64

Linux, Windows

CUDA GDB

12.9.19

x86_64, arm64-sbsa, aarch64-jetson

Linux, WSL

CUDA Nsight Eclipse插件

12.9.19

x86_64

Linux

CUDA NVCC

12.9.41

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA nvdisasm

12.9.19

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows

CUDA NVML头文件

12.9.40

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA nvprof

12.9.19

x86_64

Linux, Windows

CUDA nvprune

12.9.19

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA NVRTC

12.9.41

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

NVTX

12.9.19

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA NVVP

12.9.19

x86_64

Linux, Windows

CUDA OpenCL

12.9.19

x86_64

Linux, Windows

CUDA性能分析器API

12.9.19

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA计算检查器API

12.9.27

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA cuBLAS

12.9.0.13

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

cuDLA

12.9.19

aarch64-jetson

Linux

CUDA cuFFT

11.4.0.6

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA cuFile

1.14.0.30

x86_64, arm64-sbsa, aarch64-jetson

Linux

CUDA cuRAND

10.3.10.19

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA cuSOLVER

11.7.4.40

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA cuSPARSE

12.5.9.5

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA NPP

12.4.0.27

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA nvFatbin

12.9.19

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA nvJitLink

12.9.41

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA nvJPEG

12.4.0.16

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

Nsight Compute

2025.2.0.11

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL (Windows 11)

Nsight Systems

2025.1.3.140

x86_64, arm64-sbsa

Linux, Windows, WSL

Nsight Visual Studio 版本 (VSE)

2025.2.0.25082

x86_64 (Windows)

Windows

nvidia_fs1

2.25.6

x86_64, arm64-sbsa, aarch64-jetson

Linux

Visual Studio 集成

12.9.19

x86_64 (Windows)

Windows

NVIDIA Linux驱动

575.51.03

x86_64, arm64-sbsa

Linux

NVIDIA Windows 驱动程序

576.02

x86_64 (Windows)

Windows, WSL

CUDA Driver

运行CUDA应用程序需要系统至少配备一块支持CUDA的GPU以及兼容CUDA工具包的驱动程序。详见表3。如需了解支持CUDA的各种GPU产品更多信息,请访问https://developer.nvidia.com/cuda-gpus

每个CUDA Toolkit版本都需要一个最低版本的CUDA驱动程序。CUDA驱动程序具有向后兼容性,这意味着针对特定CUDA版本编译的应用程序将继续在后续(更新)的驱动程序版本上运行。

More information on compatibility can be found at https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#cuda-compatibility-and-upgrades.

注意: 从CUDA 11.0开始,工具包组件采用独立版本号,工具包本身的版本号如下表所示。

The minimum required driver version for CUDA minor version compatibility is shown below. CUDA minor version compatibility is described in detail in https://docs.nvidia.com/deploy/cuda-compatibility/index.html

表 2 CUDA工具包及支持CUDA次要版本兼容所需的最低驱动程序版本

CUDA Toolkit

支持CUDA次要版本兼容性的最低必需驱动程序版本*

Linux x86_64 驱动版本

Windows x86_64 驱动版本

CUDA 12.x

>=525.60.13

>=528.33

CUDA 11.8.x CUDA 11.7.x CUDA 11.6.x CUDA 11.5.x CUDA 11.4.x CUDA 11.3.x CUDA 11.2.x CUDA 11.1.x

>=450.80.02

>=452.39

CUDA 11.0 (11.0.3)

>=450.36.06**

>=451.22**

* 在兼容模式下,允许使用与工具包驱动程序版本不同的最低要求版本 - 详情请参阅CUDA兼容性指南。

** CUDA 11.0最初是随较早的驱动程序版本发布的,但通过升级到Tesla推荐驱动程序450.80.02(Linux)/452.39(Windows),可以在CUDA 11.x系列工具包之间实现次要版本兼容性。

每个CUDA Toolkit版本中包含的NVIDIA GPU开发驱动版本如下所示。

表 3 CUDA工具包及对应的驱动程序版本

CUDA Toolkit

工具包驱动版本

Linux x86_64 驱动版本

Windows x86_64 驱动版本

CUDA 12.9 正式发布版

>=575.51.03

>=576.02

CUDA 12.8 更新1

>=570.124.06

>=572.61

CUDA 12.8 正式发布版

>=570.26

>=570.65

CUDA 12.6 更新3

>=560.35.05

>=561.17

CUDA 12.6 更新2

>=560.35.03

>=560.94

CUDA 12.6 更新1

>=560.35.03

>=560.94

CUDA 12.6 正式发布

>=560.28.03

>=560.76

CUDA 12.5 更新1

>=555.42.06

>=555.85

CUDA 12.5 正式发布版

>=555.42.02

>=555.85

CUDA 12.4 更新1

>=550.54.15

>=551.78

CUDA 12.4 正式发布版

>=550.54.14

>=551.61

CUDA 12.3 更新1

>=545.23.08

>=546.12

CUDA 12.3 正式发布

>=545.23.06

>=545.84

CUDA 12.2 更新2

>=535.104.05

>=537.13

CUDA 12.2 更新1

>=535.86.09

>=536.67

CUDA 12.2 正式发布

>=535.54.03

>=536.25

CUDA 12.1 更新1

>=530.30.02

>=531.14

CUDA 12.1 正式发布

>=530.30.02

>=531.14

CUDA 12.0 更新1

>=525.85.12

>=528.33

CUDA 12.0 正式发布

>=525.60.13

>=527.41

CUDA 11.8 正式发布版

>=520.61.05

>=520.06

CUDA 11.7 更新1

>=515.48.07

>=516.31

CUDA 11.7 正式发布

>=515.43.04

>=516.01

CUDA 11.6 更新 2

>=510.47.03

>=511.65

CUDA 11.6 更新1

>=510.47.03

>=511.65

CUDA 11.6 正式发布版

>=510.39.01

>=511.23

CUDA 11.5 更新2

>=495.29.05

>=496.13

CUDA 11.5 更新1

>=495.29.05

>=496.13

CUDA 11.5 正式发布

>=495.29.05

>=496.04

CUDA 11.4 更新4

>=470.82.01

>=472.50

CUDA 11.4 更新3

>=470.82.01

>=472.50

CUDA 11.4 更新2

>=470.57.02

>=471.41

CUDA 11.4 更新1

>=470.57.02

>=471.41

CUDA 11.4.0 正式版

>=470.42.01

>=471.11

CUDA 11.3.1 更新1

>=465.19.01

>=465.89

CUDA 11.3.0 正式版

>=465.19.01

>=465.89

CUDA 11.2.2 更新2

>=460.32.03

>=461.33

CUDA 11.2.1 更新1

>=460.32.03

>=461.09

CUDA 11.2.0 正式版

>=460.27.03

>=460.82

CUDA 11.1.1 更新1

>=455.32

>=456.81

CUDA 11.1 正式发布版

>=455.23

>=456.38

CUDA 11.0.3 更新1

>= 450.51.06

>= 451.82

CUDA 11.0.2 正式发布版

>= 450.51.05

>= 451.48

CUDA 11.0.1 RC

>= 450.36.06

>= 451.22

CUDA 10.2.89

>= 440.33

>= 441.22

CUDA 10.1 (10.1.105 正式版及更新)

>= 418.39

>= 418.96

CUDA 10.0.130

>= 410.48

>= 411.31

CUDA 9.2 (9.2.148 更新1)

>= 396.37

>= 398.26

CUDA 9.2 (9.2.88)

>= 396.26

>= 397.44

CUDA 9.1 (9.1.85)

>= 390.46

>= 391.29

CUDA 9.0 (9.0.76)

>= 384.81

>= 385.54

CUDA 8.0 (8.0.61 GA2)

>= 375.26

>= 376.51

CUDA 8.0 (8.0.44)

>= 367.48

>= 369.30

CUDA 7.5 (7.5.16)

>= 352.31

>= 353.66

CUDA 7.0 (7.0.28)

>= 346.46

>= 347.62

为方便起见,NVIDIA驱动程序会作为CUDA工具包安装的一部分自动安装。请注意,此驱动程序仅用于开发目的,不建议在生产环境中与Tesla GPU一起使用。

要在生产环境中使用Tesla GPU运行CUDA应用程序,建议从NVIDIA驱动程序下载站点https://www.nvidia.com/drivers下载适用于Tesla GPU的最新驱动程序。

在安装CUDA工具包时,Windows系统(使用交互式或静默安装时)或Linux系统(通过使用元数据包时)可能会跳过NVIDIA驱动的安装。

For more information on customizing the install process on Windows, see https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html#install-cuda-software.

For meta packages on Linux, see https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#package-manager-metas.

1.2. 新功能

1.2.1. 通用CUDA

  • 现在Tegra平台支持MPS客户端终止(仅限L4T用户 - 从JetPack 7.0开始)。更多详情请参阅此处

  • 图形扩展CUDA (CIG) 模式现已支持Vulkan,不再仅限于之前的仅DirectX实现。

  • 通过cuMemCreatecuMemAllocAsync实现的CPU NUMA分配支持现已在Windows平台的WDDM和MCDM驱动模式下可用,这项原本仅限Linux系统的功能得到了扩展。

  • CUDA Graphs功能已增强,支持在子图中包含内存节点。

  • CUDA Toolkit 12.9 新增了对SM架构10.3 (sm_103, sm_103f, sm_103a) 和12.1 (sm_121) 的编译器目标支持,使开发者能够针对最新GPU架构进行开发,并为每个变体提供特定优化。

  • CUDA Toolkit 12.9 引入了对新型目标架构类别的编译器支持:系列特定架构。了解更多:NVIDIA Blog: Family-Specific Architecture Features

  • 对NVML和nvidia-smi的多项功能增强:

    • 新增了以下原因导致的限流时间计数器(单位为微秒):

      • nvmlClocksEventReasonGpuIdle

      • nvmlClocksEventReasonApplicationsClocksSetting

      • nvmlClocksEventReasonSwPowerCap

      • nvmlClocksThrottleReasonHwSlowdown

      • nvmlClocksEventReasonSyncBoost

      • nvmlClocksEventReasonSwThermalSlowdown

      • nvmlClocksThrottleReasonHwThermalSlowdown

      • nvmlClocksThrottleReasonHwPowerBrakeSlowdown

      • nvmlClocksEventReasonDisplayClockSetting

    • 改进了CUDA与NVML之间设备识别的统一性

    • 新增了NVML芯片间(C2C)遥测API

    • 新增了CTXSW指标

    • 实现了GPU平均功耗计数器

    • 新增了PCIe绑定/解绑事件

1.2.2. CUDA编译器

  • 有关PTX的变更,请参阅https://docs.nvidia.com/cuda/parallel-thread-execution/#ptx-isa-version-8-8

  • 新增了一个编译器选项--Ofast-compile=,该选项在nvcc、nvlink、nvrtc和ptxas中均受支持。此选项通过不同级别优先考虑更快的编译而非优化,有助于加速开发周期。更多详情请参阅fast-compile文档

  • 新增了一个编译器选项--frandom-seed=,该选项在nvcc和nvrtc中均受支持。用户指定的随机种子将用于替换生成符号名和变量名时使用的随机数。此选项可用于生成确定性相同的ptx和目标文件。如果输入值是有效数字(十进制、八进制或十六进制),将直接用作随机种子;否则将使用传入字符串的CRC值代替。若主机编译器是GCC或Clang(它们同样支持-frandom-seed选项),NVCC还会将该选项及用户指定值传递给主机编译器。用户需负责为不同文件分配不同的种子。

1.2.3. CUDA开发者工具

  • 有关nvprof和Visual Profiler的变更,请参阅更新日志

  • 有关Nsight Systems的新功能、改进和错误修复,请参阅更新日志

  • 有关Nsight Visual Studio Edition的新功能、改进和错误修复,请参阅更新日志

  • 有关CUPTI的新功能、改进和错误修复,请参阅更新日志

  • 有关Nsight Compute的新功能、改进和错误修复,请参阅更新日志

  • 有关Compute Sanitizer的新功能、改进和错误修复,请参阅更新日志

  • 有关CUDA-GDB的新功能、改进和错误修复,请参阅更新日志

1.3. 已解决的问题

1.3.1. CUDA编译器

  • 修复了当在函数模板内部调用作为类模板参数的lambda表达式时发生的段错误。[4610125]

  • 修复了在继承受保护构造函数时触发的NVCC内部断言问题。[4840916]

  • 修复了在lambda表达式和新auto语法中使用C++20模板参数列表导致nvcc失败的问题。[4843349, 4843351]

  • 修复了模板lambda中错误使用C++20 if constexpr(concept)的问题。[4843720]

  • 修复了在使用MSVC和C++20时,CUDA 12.6.1中的模板编译错误。[4871089]

  • 修复了在C++代码中std::vector of std::any初始化错误的NVCC问题。[3885996]

1.4. 已知问题

1.4.1. CUDA 编译器

  • 在此版本中,引入了一种确保相似架构间兼容性的新机制(有关特定架构系列指令的更多详情,请参阅CUDA编程指南)。在此初始版本中,部分代码路径可能会出现比预期更长的链接和加载时间。这些开销将在未来的软件版本中减少。

  • 从CUDA 12.8开始,我们观察到使用Ampere风格MMA(例如:mma.m16n8k16用于FP16)的内核存在编译错误问题,特别是MMA形状为16x8x128时。当执行GEMM运算时,若M、N或K维度中任一维度不能被16整除,该问题会影响包括fp8_e5m2、fp8_e4m3、fp16、bf16和int8在内的精度。错误编译的代码可能导致运行时错误,例如在SM80SM90SM100架构上出现"非法内存访问"。临时解决方案:为避免此问题,请使用以下标志进行编译:-Xptxas -O0。我们正在积极修复此问题,将在后续版本中解决。

1.5. 已弃用或移除的功能

1.5.1. 通用CUDA

  • NVTX v2在之前被弃用后,已从CUDA工具包中移除。通过将代码从#include 改为#include "nvtx3/nvtoolsext.h"来迁移到NVTX v3,该头文件已包含在工具包中。最新的NVTX版本和扩展功能可在此获取。

1.5.2. 已弃用的架构

  • Maxwell、Pascal和Volta架构现已功能完备,不再计划进行增强。虽然CUDA Toolkit 12.x系列将继续支持为这些架构构建应用程序,但在下一个主要CUDA Toolkit版本发布时,将移除离线编译和库支持。用户应计划迁移到更新的架构,因为未来的工具包将无法针对Maxwell、Pascal和Volta GPU。

1.5.3. 已弃用或不再支持的操作系统

  • CUDA Toolkit 12.9 将是最后一个正式支持 Ubuntu 20.04 的 CUDA 版本。

1.5.4. 已弃用的CUDA工具链

  • 在12.9版本中已弃用对ICC 2021.7主机编译器的支持,并将在未来版本中移除。

2. CUDA库

本节涵盖CUDA库12.x版本的发布说明。

  • CUDA数学库工具链使用了C++11特性,因此主机上需要兼容C++11的标准库(libstdc++版本需≥20150422)。

2.1. cuBLAS库

2.1.1. cuBLAS: 版本 12.9

  • 新功能

    • 我们已在cuBLASLt API中为矩阵乘法运算引入了独立批次指针支持。这一功能之前仅在cuBLAS gemmEx API中可用,现在可为低精度数据类型提供指针数组批次支持。请注意,目前对融合尾声的支持有限。

    • 我们已为Hopper (sm_90)新增了多种缩放模式支持,包括外部向量(逐通道/逐行)、每128元素以及每128x128块模式。请注意,目前对融合尾声的支持仍有限。

    • 我们通过使用BF16x9算法模拟FP32运算,在计算密集型FP32矩阵乘法实例中实现了最高3倍的加速,并提升了能效。该功能仅在部分Blackwell GPU上可用。更多详情,请点击此处。如需启用FP32模拟功能,请参阅CUDA库示例。请注意,非数值(NaN、Inf等)将被视为可互换的错误指示符。

  • 已知问题

    • cublasLtMatmul 会忽略用户为ReLU后处理指定的Aux数据类型,默认使用位掩码。正确的行为应是在用户为ReLU后处理指定无效的Aux数据类型时返回错误。[CUB-7984]

  • 弃用项

    • 在未来的版本中,cuBLAS将强制要求工作区内存按256字节对齐。

    • 在即将发布的版本中,如果设置了以下任何描述符属性但不支持对应的缩放比例,cuBLAS将返回CUBLAS_STATUS_NOT_SUPPORTED

      • CUBLASLT_MATMUL_DESC_A_SCALE_POINTER

      • CUBLASLT_MATMUL_DESC_B_SCALE_POINTER

      • CUBLASLT_MATMUL_DESC_D_SCALE_POINTER

      • CUBLASLT_MATMUL_DESC_D_OUT_SCALE_POINTER

      • CUBLASLT_MATMUL_DESC_EPILOGUE_AUX_SCALE_POINTER

      此行为已针对非窄精度矩阵乘法强制执行,当为非窄精度张量设置比例时,很快也将适用于窄精度矩阵乘法。

    • 通过NVIDIA开发者论坛发帖或发送邮件至Math-Libs-Feedback@nvidia.com,分享对即将弃用功能的反馈意见。

2.1.2. cuBLAS: 版本 12.8

  • 新功能

    • 新增对NVIDIA Blackwell GPU架构的支持。

    • 扩展了cuBLASLt API以支持计算能力10.0(Blackwell)及更高版本上的微缩4位和8位浮点混合精度张量核心加速矩阵乘法。扩展内容包括:

      • CUDA_R_4F_E2M1: 与 CUDA_R_UE4M3 比例和16元素缩放块的集成。

      • CUDA_R_8F变体:与CUDA_R_UE8比例和32元素缩放块兼容。

      • FP8矩阵乘法属性扩展

        • 支持使用缩放因子张量而非标量的块级缩放用例。

        • 能够动态计算输出张量的缩放因子,当输出为4位或8位浮点数据类型时。

    • 在Windows x64平台上为NVIDIA安培GPU架构和Blackwell GeForce级GPU引入了对图形计算中CUDA(CIG)的初步支持。现在可自动检测CIG上下文,且cuBLAS会选择符合CIG共享内存使用限制的内核。

    • 在所有Hopper GPU上对非对齐INT8矩阵乘法运算的性能提升。

  • 已解决的问题

    • 使用cublasLtMatmul配合CUBLASLT_EPILOGUE_BGRAD{A,B}尾核时,允许输出矩阵采用CUBLASLT_ORDER_ROW布局,这会导致偏置梯度计算错误。现在使用CUBLASLT_EPILOGUE_BGRAD{A,B}尾核时已禁止该布局。[4910924]

  • 弃用项

    • 针对输出矩阵行(CUBLASLT_MATMUL_DESC_ATOMIC_SYNC_NUM_CHUNKS_D_ROWS)或列(CUBLASLT_MATMUL_DESC_ATOMIC_SYNC_NUM_CHUNKS_D_COLS)的原子操作同步实验性功能现已弃用。该功能实现仍然可用但性能不佳,将在未来版本中移除。

2.1.3. cuBLAS:版本12.6更新2

  • 新功能

    • 在所有Hopper GPU上对FP8、FP16和BF16矩阵乘法运算实现了全面的性能提升。这一改进还包括以下融合后处理操作:CUBLASLT_EPILOGUE_BIASCUBLASLT_EPILOGUE_RELUCUBLASLT_EPILOGUE_RELU_BIASCUBLASLT_EPILOGUE_RELU_AUXCUBLASLT_EPILOGUE_RELU_AUX_BIASCUBLASLT_EPILOGUE_GELU以及CUBLASLT_EPILOGUE_GELU_BIAS

  • 已知问题

    • 在版本低于535.91的R535驱动程序中,多上下文场景下的cuBLAS可能会出现挂起问题。[CUB-7024]

    • 用户可能会在Hopper GPU上观察到FP64 GEMM运算性能欠佳。一个潜在的解决方案是条件性启用swizzling功能。为此,用户可以先通过cublasLtMatmulAlgoGetHeuristic获取算法,然后调用cublasLtMatmulAlgoCapGetAttribute并传入CUBLASLT_ALGO_CAP_CTA_SWIZZLING_SUPPORT参数来查询是否支持swizzling。如果支持该功能,可通过调用cublasLtMatmulAlgoConfigSetAttribute并设置CUBLASLT_ALGO_CONFIG_CTA_SWIZZLING参数来启用swizzling。[4872420]

  • 已解决的问题

    • cublasLtMatmul 可能会忽略用户指定的偏置或辅助数据类型(CUBLASLT_MATMUL_DESC_BIAS_DATA_TYPECUBLASLT_MATMUL_DESC_EPILOGUE_AUX_DATA_TYPE),如果这些数据类型不符合 cublasLtMatmulDescAttributes_t __ 文档中记载的限制条件。[44750343, 4801528]

    • CUDA_MODULE_LOADING设置为EAGER可能会导致Hopper GPU上的库加载时间变长,这是由于PTX内核的JIT编译所致。可以通过将此环境变量设置为LAZY来缓解此问题。[4720601]

    • cublasLtMatmul 在使用INT8输入、INT32累加、INT8输出和FP32缩放因子时,如果采用splitk归约操作,可能会导致数值不准确的问题。[4751576]

2.1.4. cuBLAS:12.6版本更新1

  • 已知问题

    • cublasLtMatmul 可能会忽略用户指定的偏置或辅助数据类型(CUBLASLT_MATMUL_DESC_BIAS_DATA_TYPECUBLASLT_MATMUL_DESC_EPILOGUE_AUX_DATA_TYPE),如果这些数据类型不符合cublasLtMatmulDescAttributes_t文档中记录的限制条件。[4750343]

    • CUDA_MODULE_LOADING设置为EAGER可能会导致Hopper GPU上的库加载时间变长,这是由于PTX内核的JIT编译所致。可以通过将此环境变量设置为LAZY来缓解此问题。[4720601]

    • 当使用splitk归约时,带有INT8输入、INT32累加、INT8输出和FP32缩放因子的cublasLtMatmul可能会出现精度问题。要解决此问题,您可以使用cublasLtMatmulAlgoConfigSetAttribute将归约方案设置为无,并将splitk值设为1。[4751576]

2.1.5. cuBLAS:版本12.6

  • 已知问题

    • 在使用INT8输入、INT8输出和FP32缩放因子计算矩阵乘法及尾处理时,若采用第二个内核进行尾处理计算,可能会出现数值误差。这是因为第一个GEMM内核会将中间结果从FP32转换为INT8并存储,供后续尾处理内核使用。若某个值在尾处理前超出INT8范围,而尾处理本应将其调整至INT8范围内,就会产生数值误差。该问题自CUDA 12之前版本就已存在,目前尚无已知解决方案。[CUB-6831]

    • cublasLtMatmul 可能会忽略用户指定的偏置或辅助数据类型 (CUBLASLT_MATMUL_DESC_BIAS_DATA_TYPECUBLASLT_MATMUL_DESC_EPILOGUE_AUX_DATA_TYPE) 对于FP8矩阵乘法运算,如果这些数据类型不符合cublasLtMatmulDescAttributes_t中记录的限定条件。[4750343]

  • 已解决的问题

    • cublasLtMatmul 在矩阵 AB 的数据类型不同时(例如 ACUDA_R_8F_E4M3BCUDA_R_8F_E5M2),且矩阵 D 的布局为 CUBLASLT_ORDER_ROW 时会产生错误结果。[4640468]

    • cublasLt在某些情况下,当ABC的类型为CUDA_R_8I且计算类型为CUBLAS_COMPUTE_32I时,可能在Hopper GPU上返回不支持。[4381102]

    • 当使用K等于0运行GEMM时,cuBLAS可能会产生浮点异常。[4614629]

2.1.6. cuBLAS:版本12.5更新1

  • 新功能

    • 针对大型语言模型的矩阵乘法性能优化,特别是在Hopper GPU上小批量处理时的表现提升。

  • 已知问题

    • 对于跨步批处理情况,Hopper GPU可能不支持带偏置的尾声(不含ReLU或GeLU)。临时解决方案是手动实现批处理。该问题将在未来版本中修复。

    • cublasGemmGroupedBatchedExcublasgemmGroupedBatched 存在较大的CPU开销问题。该问题将在后续版本中解决。

  • 已解决的问题

    • 在极少数情况下,在Hopper GPU上同时执行SYMM/HEMM和GEMM可能会导致主机代码中的竞态条件,从而引发非法内存访问CUDA错误。[4403010]

    • cublasLtMatmul 在以下情况下可能会在Pascal GPU上产生非法指令CUDA错误:批处理大小大于1,且beta不等于0,且计算是异地进行的(C != D)。[4566993]

2.1.7. cuBLAS:版本12.5

  • 新功能

    • cuBLAS 新增了一个实验性 API 来支持混合精度的分组批处理 GEMM 运算。这使得分组批处理 GEMM 能够使用 FP16 或 BF16 输入/输出,同时保持 FP32 计算类型。更多详情请参阅 cublasGemmGroupedBatchedEx

  • 已知问题

    • cublasLtMatmul 会忽略对 CUBLASLT_MATMUL_DESC_D_SCALE_POINTERCUBLASLT_MATMUL_DESC_EPILOGUE_AUX_SCALE_POINTER 的输入,如果相应矩阵的元素不是FP8类型。

  • 已解决的问题

    • cublasLtMatmul忽略了提供的缩放类型与文档中隐含类型之间的不匹配,采用了后者。例如,当缩放类型为FP32而其他所有类型为FP16时,这种不受支持的cublasLtMatmul配置会以隐含的FP16缩放类型运行,从而导致错误结果。

    • cuBLAS SYMV 在大维度 n 时失败:对于 ssymv 是 131072 及以上,对于 csymv 和 dsymv 是 92673 及以上,对于 zsymv 是 65536 及以上。

2.1.8. cuBLAS:12.4版本更新1

  • 已知问题

    • 将cuBLAS句柄流设置为cudaStreamPerThread并通过cublasSetWorkspace设置工作区将导致后续所有cublasSetWorkspace调用失败。此问题将在后续版本中修复。

    • cublasLtMatmul 会忽略提供的缩放类型与文档中隐含的缩放类型之间的不匹配,并默认采用后者。例如,当cublasLtMatmul的配置中缩放类型为FP32而其他所有类型为FP16时(这是一个不支持的配置),它会隐式假设缩放类型为FP16运行,这可能导致错误结果。此问题将在后续版本中修复。

  • 已解决的问题

    • cublasLtMatmul 对于不支持的配置会忽略 CUBLASLT_MATMUL_DESC_AMAX_D_POINTER 而不是返回错误。具体来说,目前仅当输出数据类型也是FP8(CUDA_R_8F_E4M3CUDA_R_8F_E5M2)时,才支持计算D的绝对最大值。

    • 针对部分cuBLASLt API减少了主机端开销:cublasLtMatmul()cublasLtMatmulAlgoCheck()cublasLtMatmulAlgoGetHeuristic()。该问题最初出现在CUDA Toolkit 12.4版本中。

    • cublasLtMatmul()cublasLtMatmulAlgoGetHeuristic() 在某些基于Hopper架构的GPU上可能导致浮点异常(FPE),包括多实例GPU(MIG)。该问题从cuBLAS 11.8版本开始存在。

2.1.9. cuBLAS: 版本 12.4

  • 新功能

    • cuBLAS新增了实验性API,支持单精度和双精度的分组批处理GEMM运算。单精度还支持数学模式CUBLAS_TF32_TENSOR_OP_MATH。分组批处理模式允许您并发求解不同维度(m, n, k)、前导维度(lda, ldb, ldc)、转置(transa, transb)和缩放因子(alpha, beta)的GEMM运算。详情请参阅gemmGroupedBatched

  • 已知问题

    • 当当前上下文是通过cuGreenCtxCreate()创建时,cuBLAS无法正确检测可用的SM数量。用户可以通过类似cublasSetSmCountTarget()的API向cuBLAS提供修正后的SM计数。

    • 当alpha为零且指针模式设置为CUBLAS_POINTER_MODE_DEVICE时,BLAS 2级和3级函数可能不会以符合BLAS规范的方式处理alpha参数。这与cuBLAS 12.3更新1中记载的已知问题相同。

    • 当K等于1并使用epilogue CUBLASLT_EPILOGUE_D{RELU,GELU}_BGRAD时,cublasLtMatmul可能会越界访问工作空间。该问题自cuBLAS 11.3 Update 1版本起存在。

    • 当K等于1且使用CUBLASLT_EPILOGUE_D{RELU,GELU}收尾操作时,若未提供工作空间,cublasLtMatmul可能导致非法内存访问。该问题自cuBLAS 11.6版本起存在。

    • 在CUDA Graph流捕获过程中,cuBLAS例程可以通过使用流顺序分配API(cudaMallocAsynccudaFreeAsync)创建内存节点。然而,由于目前子图从设备启动的图中不支持内存节点,尝试在此类场景中捕获cuBLAS例程可能会失败。为避免此问题,请使用cublasSetWorkspace()函数提供用户拥有的工作区内存。

2.1.10. cuBLAS:12.3版本更新1

  • 新功能

    • 针对高淘汰率的工作负载,改进了启发式缓存的性能。

  • 已知问题

    • 当alpha为零且指针模式设置为CUBLAS_POINTER_MODE_DEVICE时,BLAS 2级和3级函数可能不会以符合BLAS规范的方式处理alpha值。预期行为是跳过相应的计算。您可能会遇到以下问题:(1) HER{,2,X,K,2K}可能会将输出矩阵对角元素的虚部设为零;(2) HER{,2,X,K,2K}、SYR{,2,X,K,2K}及其他函数可能因对矩阵A和B执行计算而产生NaN值,而这些计算本应被跳过。如果需要严格遵循BLAS规范,用户可以在调用函数前手动检查alpha值,或切换到CUBLAS_POINTER_MODE_HOST模式。

  • 已解决的问题

    • 在以下情况下,cuBLASLt矩阵乘法运算可能错误计算了输出结果:矩阵A和B的数据类型为FP8,矩阵C和D的数据类型为FP32、FP16或BF16,beta值为1.0,C和D矩阵相同,且包含GELU激活函数的后处理操作。

    • 当使用CUDA Toolkit 12.2更新1或更早版本编译的应用程序与CUDA Toolkit 12.2更新2或CUDA Toolkit 12.3中的cuBLASLt运行时,通过cublasLtMatmulDescInit()初始化的矩阵乘法描述符有时无法正确响应通过cublasLtMatmulDescSetAttribute()进行的属性更改。

    • 修复了在Hopper GPU上使用多进程服务(MPS)时创建cuBLAS或cuBLASLt句柄的问题。

    • 当K等于1并使用epilogue CUBLASLT_EPILOGUE_BGRAD{A,B}时,cublasLtMatmul可能返回了错误的偏置梯度结果。

2.1.11. cuBLAS: 版本 12.3

  • 新功能

    • 在NVIDIA L40S Ada GPU上的性能得到提升。

  • 已知问题

    • 在以下情况下,cuBLASLt矩阵乘法运算可能会错误计算输出:矩阵A和B的数据类型为FP8,矩阵C和D的数据类型为FP32、FP16或BF16,beta值为1.0,C和D矩阵相同,且包含GELU激活函数的后处理操作。

    • 当使用CUDA Toolkit 12.2更新1或更早版本编译的应用程序与CUDA Toolkit 12.2更新2或更高版本的cuBLASLt运行时,通过cublasLtMatmulDescInit()初始化的矩阵乘法描述符可能无法正确响应通过cublasLtMatmulDescSetAttribute()进行的属性修改。为解决此问题,请改用cublasLtMatmulDescCreate()创建矩阵乘法描述符,而非cublasLtMatmulDescInit()。该问题将在后续版本中修复。

2.1.12. cuBLAS:12.2版本第二次更新

  • 新功能

    • cuBLASLt现在将尝试分解无法通过单个gemm内核运行的问题。它通过将问题分割成更小的块并多次执行gemm内核来实现这一点。这提高了对于非常大的m、n或批量大小情况的功能覆盖范围,并使从cuBLAS API过渡到cuBLASLt API更加可靠。

  • 已知问题

    • 在以下情况下,cuBLASLt矩阵乘法运算可能会错误计算输出结果:矩阵A和B的数据类型为FP8,矩阵C和D的数据类型为FP32、FP16或BF16,beta值为1.0,C和D矩阵相同,且包含GELU激活函数的后处理操作。

2.1.13. cuBLAS:版本12.2

  • 已知问题

    • 当MPS启用且CUDA_MPS_ACTIVE_THREAD_PERCENTAGE设置为小于100%的值时,cuBLAS在Hopper架构GPU上的初始化会失败。目前此问题尚无解决方法。

    • 某些Hopper内核在使用CUBLASLT_EPILOGUE_RELU_BIASCUBLASLT_EPILOGUE_GELU_BIAS以及非零CUBLASLT_MATMUL_DESC_BIAS_BATCH_STRIDE进行批量矩阵乘法时会产生错误结果。这些内核会将第一批的偏置向量应用于所有批次。此问题将在未来版本中修复。

2.1.14. cuBLAS:12.1版本更新1

  • 新功能

    • 支持在NVIDIA Ada GPU上使用FP8。

    • 在NVIDIA L4 Ada GPU上的性能得到提升。

    • Introduced an API that instructs the cuBLASLt library to not use some CPU instructions. This is useful in some rare cases where certain CPU instructions used by cuBLASLt heuristics negatively impact CPU performance. Refer to https://docs.nvidia.com/cuda/cublas/index.html#disabling-cpu-instructions.

  • 已知问题

    • 当使用cublasLtMatrixLayoutCreate()函数创建矩阵布局时,cublasLtMatrixLayout_t指向的对象比cublasLtMatrixLayoutOpaque_t要小(但足以容纳内部结构)。因此,不应显式解引用或复制该对象,否则可能导致越界访问。如果需要序列化布局或复制它,建议手动分配一个大小为sizeof(cublasLtMatrixLayoutOpaque_t)字节的对象,并使用cublasLtMatrixLayoutInit()函数进行初始化。同样的情况适用于cublasLtMatmulDesc_tcublasLtMatrixTransformDesc_t。这个问题将在未来的版本中修复,确保cublasLtMatrixLayoutCreate()至少分配sizeof(cublasLtMatrixLayoutOpaque_t)字节。

2.1.15. cuBLAS:12.0版本更新1

  • 新功能

    • 在NVIDIA H100 SXM和NVIDIA H100 PCIe GPU上的性能得到提升。

  • 已知问题

    • 为了在NVIDIA Hopper架构上获得最佳性能,cuBLAS需要分配比之前架构(8 MiB)更大的内部工作空间(64 MiB)。在当前和之前的版本中,cuBLAS会分配256 MiB。这个问题将在未来的版本中解决。一个可能的解决方法是,在NVIDIA Hopper架构上运行cuBLAS时,将CUBLAS_WORKSPACE_CONFIG环境变量设置为:32768:2。

  • 已解决的问题

    • 减少了由于未使用cublasLt启发式缓存而导致的cuBLAS主机端开销。这一问题始于CUDA Toolkit 12.0版本。

    • 新增了无需工作空间的前向兼容单精度复数GEMM功能。

2.1.16. cuBLAS:12.0版本发布

  • 新功能

    • cublasLtMatmul 现在支持带有非零 beta 的 FP8。

    • 新增了int64 API接口以支持更大的问题规模;详情参阅64-bit integer interface

    • 为带有epilogue的cublasLtMatmul添加了更多Hopper专用内核:

      • CUBLASLT_EPILOGUE_BGRAD{A,B}

      • CUBLASLT_EPILOGUE_{RELU,GELU}_AUX

      • CUBLASLT_EPILOGUE_D{RELU,GELU}

    • 通过在arm64-sbsa架构上添加原先仅支持Windows和Linux x86_64架构的Hopper内核,提升了Hopper在该平台上的性能表现。

  • 已知问题

    • 目前没有不需要工作空间的单精度复数矩阵乘法(gemms)的前向兼容内核。该功能将在后续版本中添加支持。

  • 已解决的问题

    • 修复了在NVIDIA安培架构及更新GPU上的一个问题,其中使用cublasLtMatmul时,若搭配epilogue CUBLASLT_EPILOGUE_BGRAD{A,B}和非平凡归约方案(即非CUBLASLT_REDUCTION_SCHEME_NONE),可能会返回错误的偏置梯度结果。

    • cublasLtMatmul 在类似gemv的情况下(即m或n等于1)可能会忽略带有CUBLASLT_EPILOGUE_RELU_BIASCUBLASLT_EPILOGUE_BIAS结尾部分的偏置。

    弃用项

    • Disallow including cublas.h and cublas_v2.h in the same translation unit.

    • 已移除:

      • CUBLAS_MATMUL_STAGES_16x80CUBLAS_MATMUL_STAGES_64x80 来自 cublasLtMatmulStages_t。目前已无内核使用这些阶段。

      • cublasLt3mMode_tCUBLASLT_MATMUL_PREF_MATH_MODE_MASKCUBLASLT_MATMUL_PREF_GAUSSIAN_MODE_MASK来自cublasLtMatmulPreferenceAttributes_t。请改用cublasLtNumericalImplFlags_t中的对应标志。

      • CUBLASLT_MATMUL_PREF_POINTER_MODE_MASKCUBLASLT_MATMUL_PREF_EPILOGUE_MASKCUBLASLT_MATMUL_PREF_SM_COUNT_TARGET来自cublasLtMatmulPreferenceAttributes_t。对应的参数直接取自cublasLtMatmulDesc_t

      • CUBLASLT_POINTER_MODE_MASK_NO_FILTERING 来自 cublasLtPointerModeMask_t。此掩码仅适用于已被移除的 CUBLASLT_MATMUL_PREF_MATH_MODE_MASK

2.2. cuFFT库

2.2.1. cuFFT: 版本 12.9

  • 弃用项

    • cuFFT中对Maxwell、Pascal和Volta架构的支持已被弃用,并将在未来的CUDA版本中移除。

    • 版本化符号 __cufftXtSetJITCallback_12_7 已被弃用,将在未来的CUDA版本中移除。

    • 链接时优化(LTO)的cuFFT内核目前需要nvJitLink来完成最终化。即将发布的版本将增加NVRTC作为生成LTO内核的额外要求。

  • 已解决的问题

    • 修复了工作空间计算问题:对于大多数可以分解为小素数的小尺寸,现在所需的工作空间为零。

2.2.2. cuFFT: 版本 12.8

  • 新功能

    • 新增对NVIDIA Blackwell GPU架构的支持。

  • 弃用项

    • 静态库 libcufft_static_nocallback.a 已被弃用,并计划在未来的版本中移除。用户应迁移至 libcufft_static.a,因为在 CUDA Toolkit 12.6 Update 2 中引入 LTO 回调后,这两个库提供的功能是等效的。

  • 已知问题

    • SM120仅通过PTX JIT支持旧版回调内核。因此,需要与libcufft_static.a链接的非LTO设备回调代码必须编译为PTX格式,而非SASS。

    • 在x86_64系统中,大型应用程序(总二进制大小超过2GB)若链接静态cuFFT库(libcufft_static.alibcufft_static_nocallback.a)且未使用-mcmodel=medium编译标志时,将会遇到链接错误(例如:.gcc_except_table relocation R_X86_64_PC32 out of range; references DW.ref._ZTI13cufftResult_t)。该问题将在后续版本中修复。

      现有的变通方案包括:

      • 使用-mcmodel=medium flag构建或链接应用程序

      • 使用readelf分析libcufft_static.a的符号时,可以将引用ref._ZTI13cufftResult_t从大数据段.ldata.DW.ref._ZTI13cufftResult_t移至非大数据段.data.DW.ref._ZTI13cufftResult_t

2.2.3. cuFFT:12.6版本更新2

  • 新功能

    • 引入LTO回调作为已弃用旧版回调的替代方案。LTO回调提供:

      • 相比传统回调的额外性能优势

      • 支持在Windows和动态(共享)库上使用回调函数

      更多信息请参阅cuFFT文档页面。

  • 已解决的问题

    • cuFFT LTO EA预览版二进制文件中存在的几个问题已得到解决。

  • 弃用项

    • cuFFT LTO EA(我们用于LTO回调支持的预览版二进制文件)已弃用,将在未来的版本中移除。

2.2.4. cuFFT: 版本 12.6

  • 已知问题

    • 目前不支持对FP16进行步长(istride/ostride)大于1的大小为1的FFT运算。在CTK 12.1或更早版本中,此用例存在已知的内存问题。在CTK 12.2或之后版本中会抛出CUFFT_INVALID_SIZE错误。[4662222]

2.2.5. cuFFT: 版本 12.5

2.2.6. cuFFT: 版本 12.4 更新 1

  • 已解决的问题

在CUDA 12.4中,cuFFT LTO EA库中的一个例程被错误地包含在cuFFT高级API头文件(cufftXt.h)中。该例程现已被从该头文件中移除。

2.2.7. cuFFT: 版本 12.4

  • 新功能

    • 新增了即时链接时间优化(JIT LTO)内核,用于提升64位索引FFT的性能表现。

    • 在cuFFT API中新增了每计划属性。这些新功能可以让用户更灵活地控制cuFFT的行为。目前可用于为64位FFT启用JIT LTO内核。

    • 针对某些单精度(fp32)FFT案例提高了计算精度,特别是涉及较大尺寸FFT的情况。

  • 已知问题

    • cuFFT LTO EA库中的一个例程被错误地添加到了cuFFT高级API头文件(cufftXt.h)中。该例程不受cuFFT支持,将在未来版本中从该头文件中移除。

  • 已解决的问题

    • 修复了在使用用户指定的输出步长(即使用高级数据布局APIostride组件)执行原地外实复变换(R2C)时可能导致用户数据被覆盖的问题。

    • 修复了当inembedonembed均为nullptr / NULL时,libcufftwFFTW之间行为不一致的问题。从现在开始,与FFTW一致,将nullptr / NULL作为inembed/onembed参数传递等同于传递n,即该维度的逻辑大小。

2.2.8. cuFFT:12.3版更新1

  • 已知问题

    • 在与创建计划不同的上下文中执行实数到复数(R2C)或复数到实数(C2R)计划可能会导致未定义行为。此问题将在cuFFT的下一版本中修复。

  • 已解决的问题

    • 复数到复数(C2C)执行函数(cufftExec及类似函数)现在能在内核启动出错时正确报错,例如由于缺少CUDA上下文的情况。

2.2.9. cuFFT: 版本 12.3

  • 新功能

    • 回调内核在资源使用方面更为宽松,将占用更少的寄存器。

    • 针对双精度质数和复合FFT尺寸,当因子大于127时,提高了计算精度。

    • 针对某些FFT尺寸略微提升了规划时间。

2.2.10. cuFFT: 版本 12.2

  • 新功能

    • cufftSetStream 可用于多GPU计划,可以使用来自任何GPU上下文的流,而不仅限于cufftXtSetGPUs中列出的第一个GPU的主上下文。

    • 提升了62到16380范围内1000多种FFT的性能表现。通过PTX即时编译技术,这一性能提升覆盖了从麦克斯韦到霍珀架构的多种GPU上,针对连续数据布局FFT的数百种单精度和双精度场景。

    • 与12.1版本中的cuFFT相比,减少了静态库的大小。

  • 已解决的问题

    • 当线程同时创建和访问超过1023个活动计划时,cuFFT不再出现竞争条件。

    • 当多个线程同时调用cufftXtSetGPUs时,cuFFT不再出现竞态条件。

2.2.11. cuFFT: 版本12.1更新1

  • 已知问题

    • 当某个线程调用cufftCreate(或cufftDestroy)而另一个线程调用任何API(除了cufftCreatecufftDestroy)时,且当存活的计划总数超过1023时,cuFFT会出现竞态条件。

    • 当多个线程在不同计划上并发调用cufftXtSetGPUs时,cuFFT会出现竞态条件。

2.2.12. cuFFT: 版本 12.1

  • 新功能

    • 针对尺寸范围从14到28800的数百种FFT,在Hopper GPU上实现了性能提升。这一性能改进覆盖了542种情况,包括单精度和双精度的连续数据布局FFT。

  • 已知问题

    • 从CUDA 11.8开始,CUDA Graphs不再支持在非原位模式转换中加载数据的回调例程。即将发布的版本将更新cuFFT回调实现,解除这一限制。cuFFT在11.4版本中已弃用基于单独编译设备代码的回调功能。

  • 已解决的问题

    • 如果在程序退出前销毁了计划创建时使用的CUDA上下文,cuFFT将不再在程序退出时产生compute-sanitizer错误。

2.2.13. cuFFT: 12.0版本更新1

  • 已解决的问题

    • 针对多GPU、单批次、一维FFT的暂存空间需求已降低。

2.2.14. cuFFT: 版本 12.0

  • 新功能

    • PTX JIT内核编译支持为Maxwell、Pascal、Volta和Turing架构新增大量加速用例。

  • 已知问题

  • 已解决的问题

    • cuFFT计划每个计划之前存在一个无意的小内存开销(几KB)。此问题已解决。

2.3. cuSOLVER库

2.3.1. cuSOLVER: 版本 12.9

  • 已知问题

    • cusolverDnXsyevdcusolverDnXsyevdxcusolverDnXsyevBatchedcusolverDnsyevdcusolverDnsyevdx支持的输入矩阵大小限制为n <= 32768。此限制同样适用于共享相同内部实现的例程,包括cusolverDnXgesvdrcusolverDnXgesvdpcusolverDnsygvdcusolverDnsygvdxcusolverDngesvdaStridedBatched

2.3.2. cuSOLVER: 版本12.8

  • 新功能

    • cusolverDn{SDCZ}sytrfcusolverDnXsytrs 现在支持当输入枢轴数组 devIpiv=NULL 时进行无枢轴对称分解,从而提供更好的性能。

    • cusolver{DZ}gesvdaStridedBatched 现在为各类问题提供了更高的精度和性能。

    • cusolver{SDCZ}gesvdaStridedBatched 现在会在收敛失败时返回前导有效奇异值和向量的数量。

  • 已解决的问题

    • 修复了当使用cuComplexcuDoubleComplex且批量大小至少为2时,cusolverDnXsyevBatched可能返回错误结果的问题,该问题发生在工作区在进入时未初始化为零的情况下。

  • 弃用项

    • 以下cuSOLVERSpcuSOLVERRf中的API在12.8版本包含弃用警告[4674686]:

      • cusolverSp{SDCZ}csrlsvluHost

      • cusolverSp{SDCZ}csrlsvcholHost

      • cusolverSp{SDCZ}csrlsvchol

      • cusolverRfSetupHost

      • cusolverRfSetupDevice

      • cusolverRfResetValues

      • cusolverRfAnalyze

      • cusolverRfRefactor

      • cusolverRfAccessBundledFactorsDevice

      • cusolverRfExtractBundledFactorsHost

      • cusolverRfExtractSplitFactorsHost

      • cusolverRfSolve

      可以通过添加编译器标志-DDISABLE_CUSOLVER_DEPRECATED来移除弃用警告。

      建议用户使用cuDSS库以获得更好的性能和持续支持。有关迁移详情,请参考cuDSS示例

2.3.3. cuSOLVER: 版本12.6更新2

  • 新功能

    • 新增API cusolverDnXgeev用于求解非厄米特特征值问题。

    • 新增API cusolverDnXsyevBatched 用于解决统一批处理厄米特特征值问题。

2.3.4. cuSOLVER: 版本 12.6

  • 新功能

    • cusolverDnXgesvdp()的性能改进。

2.3.5. cuSOLVER:12.5版更新1

  • 已解决的问题

    • 通过调用cusolverDnXlarft时可能发生的bufferOnDevice越界访问问题已得到解决。

2.3.6. cuSOLVER: 版本 12.5

  • 新功能

    • jobu != 'N'jobvt != 'N' 时,cusolverDnXgesvdcusolverDngesvd 的性能改进。

    • jobz = CUSOLVER_EIG_MODE_NOVECTOR时,cusolverDnXgesvdp的性能改进。

    • 降低cusolverDnXgesvdp处理高瘦矩阵时的工作空间需求。

  • 已知问题

    • 在CUDA Toolkit 12.4 Update 1中,当调用cusolverDnXlarft时,若ldt > k可能导致对bufferOnDevice的内存越界访问。作为临时解决方案,可以分配更大的设备工作区缓冲区,其大小为workspaceInBytesOnDevice=ALIGN_32((ldt*k + n*k)*sizeofCudaDataType(dataTypeT)),其中

      auto ALIGN_32=[](int64_t val) {
         return ((val + 31)/32)*32;
      };
      

      以及

      auto sizeofCudaDataType=[](cudaDataType dt) {
         if (dt == CUDA_R_32F) return sizeof(float);
         if (dt == CUDA_R_64F) return sizeof(double);
         if (dt == CUDA_C_32F) return sizeof(cuComplex);
         if (dt == CUDA_C_64F) return sizeof(cuDoubleComplex);
      };
      

2.3.7. cuSOLVER: 版本12.4更新1

  • 新功能

    • cusolverDnXlarft的性能已得到提升。对于大型矩阵,加速比可能超过100倍。在H100上的性能现在始终优于A100。cusolverDnXlarft的改进也使得cusolverDnormqrcusolverDnormtrcusolverDnXsyevd获得了适度的加速。

    • 当需要计算奇异向量时,cusolverDnXgesvd的性能已得到提升。计算左右奇异向量的任务配置速度提升高达1.5倍。

  • 已解决的问题

    • cusolverDnXtrtri_bufferSize 现在会返回正确的工作空间大小(以字节为单位)。

  • 弃用项

    • 使用长期弃用的cusolverDnPotrfcusolverDnPotrscusolverDnGeqrfcusolverDnGetrfcusolverDnGetrscusolverDnSyevdcusolverDnSyevdxcusolverDnGesvd及其配套的bufferSize函数将导致弃用警告。在编译时使用-DDISABLE_CUSOLVER_DEPRECATED标志可以关闭该警告;但用户应改用cusolverDnXpotrfcusolverDnXpotrscusolverDnXgeqrfcusolverDnXgetrfcusolverDnXgetrscusolverDnXsyevdcusolverDnXsyevdxcusolverDnXgesvd及对应的bufferSize函数。

2.3.8. cuSOLVER: 版本 12.4

  • 新功能

    • 引入了cusolverDnXlarftcusolverDnXlarft_bufferSize API接口。cusolverDnXlarft用于生成实数块反射器的三角因子,而cusolverDnXlarft_bufferSize则返回其所需的工作空间大小(以字节为单位)。

  • 已知问题

    • cusolverDnXtrtri_bufferSize 返回的设备工作空间大小不正确。作为变通方案,可将返回的大小乘以数据类型的大小(例如,如果矩阵A为双精度类型则为8字节)以获得正确的工作空间大小。

2.3.9. cuSOLVER: 版本12.2 更新2

  • 已解决的问题

    • 修复了cusolverDngesvd()cusolverDnGesvd()cusolverDnXgesvd()中的一个问题,当矩阵尺寸大于18918且jobujobvt不等于'N'时,可能导致计算结果错误。

2.3.10. cuSOLVER: 版本 12.2

  • 新功能

    • 新增API用于确保确定性结果或允许非确定性结果以提高性能。参见cusolverDnSetDeterministicMode()cusolverDnGetDeterministicMode()。受影响的函数包括:cusolverDngeqrf()cusolverDnsyevd()cusolverDnsyevdx()cusolverDngesvdj()cusolverDnXgeqrf()cusolverDnXsyevd()cusolverDnXsyevdx()cusolverDnXgesvdr()以及cusolverDnXgesvdp()

  • 已知问题

    • 在同一设备上不同的非阻塞CUDA流中并发执行cusolverDngetrf()cusolverDnXgetrf()可能会导致死锁。

2.4. cuSPARSE库

2.4.1. cuSPARSE: 版本12.9

  • 已知问题

    • cusparseCsr2cscEx2 当输入矩阵的任一维度为零时(m=0或n=0)会产生错误结果。[CUSPARSE-2319]

    • SpMV和SpMM中的混合精度计算会产生不正确的结果。[CUSPARSE-2349]

    • 许多cuSPARSE例程要求批次步长(包括矩阵索引、列和值的批次步长)必须16字节对齐。

2.4.2. cuSPARSE: 版本12.8

  • 新功能

    • 新增对NVIDIA Blackwell GPU的支持,在稀疏矩阵运算方面带来显著的性能提升:

      • SpMV(稀疏矩阵向量乘法):比Hopper快达2.3倍

      • SpMM(稀疏矩阵乘法):比Hopper快达2.4倍

  • 已解决的问题

    • 修复了cusparseSpMM中的一个问题,该问题在使用CUSPARSE_SPMM_CSR_ALG3算法处理CUDA_R_64F数据类型时,当两个稠密矩阵op(B)与C的内存布局不匹配时会导致"地址未对齐"错误。[CUSPARSE-2081]

    • 修复了在同一矩阵上首次调用后,后续调用SpMV预处理会失败的问题。[CUSPARSE-1897]

    • 修复了当alpha=0时SpMV预处理不会执行的问题。[CUSPARSE-1897]

    • 修复了问题,使得预处理操作(SpMV、SpMM、SDDMM)能够使用不同的内存缓冲区。[CUSPARSE-1962]

    • 修复了SpSV中当矩阵采用具有下三角结构和对角线元素的SlicedELL格式时出现错误结果的问题。[CUSPARSE-1996]

  • 已知问题

    • 在处理接近2^31个非零元素的矩阵时,SpMM和其他某些例程目前存在限制。[CUSPARSE-2133]

  • 弃用项

    • 以下cuSPARSE函数已被弃用,并计划在未来的主要版本中移除 [4687069]:

    • cusparseSpVV()

    • cusparseAxpby()

    • cusparseXgemvi()

    • cusparseSbsr2csr()

    • cusparseSgebsr2csr()

    • cusparseSgebsr2gebsr()

    • cusparseXbsrmm() (建议改用 cusparseSpMM)

    如有任何问题,请联系Math-Libs-Feedback@nvidia.com或访问https://forums.developer.nvidia.com/

    • 在未来版本中,cuSPARSE将移除对16位复数浮点(CUDA_C_16F)和16位复数bfloat浮点(CUDA_C_16BF)数据类型的支持。这些数据类型自CUDA 12.2起已被标记为弃用。[CUSPARSE-2225]

2.4.3. cuSPARSE: 版本12.6更新2

  • 已解决的问题

    • 重写了cusparseSpMV_preprocess()cusparseSpMM_preprocess()cusparseSDDMM_preprocess()的文档。新文档说明了使用这些函数时代码必须满足的额外约束条件。[CUSPARSE-1962]

    • cusparseSpMV() 会期望外部缓冲区中的值在多次调用之间保持不变。如果不符合这一条件,可能会导致计算出错误结果或程序崩溃。[CUSPARSE-1897]

    • cusparseSpMV_preprocess() 如果在同一矩阵上执行了 cusparseSpMM_preprocess() 将无法正确运行,反之亦然。[CUSPARSE-1897]

    • cusparseSpMV_preprocess() 如果在同一个矩阵上被调用两次或更多次,则会执行SpMV计算。[CUSPARSE-1897]

    • cusparseSpMV() 可能导致后续对相同矩阵调用 cusparseSpMM() 时产生错误结果或崩溃。[CUSPARSE-1897]

    • 对于单个稀疏矩阵A和仅包含单列的稠密矩阵X,同时调用cusparseSpMM_preprocess(A,X,...)可能导致后续对cusparseSpMV()的调用崩溃或产生错误结果。当SpMV和SpMM角色互换时也存在同样问题。[CUSPARSE-1921]

2.4.4. cuSPARSE: 版本12.6

  • 已知问题

    • cusparseSpMV_preprocess() 如果在同一个矩阵上调用两次或更多次,则会执行SpMV计算。[CUSPARSE-1897]

    • cusparseSpMV_preprocess() 如果同一矩阵上已执行过 cusparseSpMM_preprocess() 将不会运行,反之亦然。[CUSPARSE-1897]

    • 所有cusparseSpMV调用必须使用相同的外部缓冲区。[CUSPARSE-1897]

2.4.5. cuSPARSE: 版本12.5更新1

  • 新功能

    • cusparseSpMM中增加了对BSR格式的支持。

  • 已解决的问题

    • alpha=0num_batches>1batch_stride显示批次之间存在填充时,cusparseSpMM()有时会得到不正确的结果。

    • cusparseSpMM_bufferSize() 在稀疏矩阵为Blocked Ellpack格式且稠密矩阵仅包含单列(n=1)时会返回错误的缓冲区大小。

    • cusparseSpMMk=0 时(例如当矩阵A有零列时)返回了错误结果。正确的行为应该是执行 C \*= beta。错误行为是完全不修改 C

    • cusparseCreateSlicedEll 当切片大小超过矩阵行数时会返回错误。

    • Sliced-ELLPACK cusparseSpSV 在对角矩阵上产生了错误结果。

    • Sliced-ELLPACK cusparseSpSV_analysis() failed due to insufficient resources for some matrices and some slice sizes.

2.4.6. cuSPARSE: 版本 12.5

  • 新功能

    • 在SpMV中增加了对混合输入类型的支持:单精度输入矩阵、双精度输入向量、双精度输出向量。

  • 已解决的问题

    • cusparseSpMV() 在输出向量未按16字节对齐时会产生无效内存访问。

2.4.7. cuSPARSE: 版本 12.4

  • 新功能

    • 为稀疏矩阵-向量乘法添加了预处理步骤 cusparseSpMV_preprocess()

    • cusparseSpMM()添加了对混合实数与复数类型的支持。

    • 新增了一个API cusparseSpSM_updateMatrix(),用于在cusparseSpSM()的分析阶段和求解阶段之间更新稀疏矩阵。

  • 已知问题

    • cusparseSpMV() 在输出向量未按16字节对齐时会出现无效内存访问问题。

  • 已解决的问题

    • cusparseSpVV() 在稀疏向量包含大量非零元素时提供了错误结果。

2.4.8. cuSPARSE: 12.3版本更新1

  • 新功能

    • cusparseSDDMM()中新增了对64和128块大小的支持。

    • 为BSR格式的cusparseSDDMM()添加了预处理步骤cusparseSDDMM_preprocess(),有助于提升主计算阶段的性能。

2.4.9. cuSPARSE: 版本 12.3

  • 新功能

    • cusparseSpSV_bufferSize()cusparseSpSV_analysis() 例程现在可以接受稠密向量的NULL指针。

    • cusparseSpSM_bufferSize()cusparseSpSM_analysis() 例程现在接受值为NULL指针的稠密矩阵描述符。

  • 已知问题

    • cusparseSpSV_analysis()cusparseSpSM_analysis() 例程是阻塞调用/非异步的。

    • 在使用切片ELLPACK格式和对矩阵A进行转置/共轭转置操作时,cusparseSpSV()可能会出现错误结果。

  • 已解决的问题

    • cusparseSpSV() 在某些情况下会提供不确定的结果。

    • 修复了在多线程环境下有时导致cusparseSpSV_analysis()挂起的问题。

    • 修复了cusparseSpSV()cusparseSpSV()的问题,当输出向量/矩阵或输入矩阵包含NaN时,有时会产生错误输出。

2.4.10. cuSPARSE: 12.2版本更新1

  • 新功能

  • 已解决的问题

    • 移除了CUSPARSE_SPMM_CSR_ALG3回退机制,以避免算法选择过程中的混淆。

    • 明确了cusparseSDDMM()支持的操作。

    • cusparseCreateConstSlicedEll() 现在使用 const 指针。

    • 修复了在极少数边缘情况下,使用基于1索引的cusparseCsr2CscEx2()函数出现错误结果的问题。

    • cusparseSpSM_bufferSize() 可能会申请比实际需求略少的内存。

    • cusparseSpMV() 现在仅在严格需要时才检查缓冲区指针的有效性。

  • 弃用项

    • 多个遗留API已被正式弃用。所有相关API在编译时都会显示警告信息。

2.4.11. cuSPARSE: 版本12.1更新1

  • 新功能

    • 为通用API引入了块稀疏行(BSR)稀疏矩阵存储格式,并支持SDDMM例程(cusparseSDDMM)。

    • 为通用API引入了切片Ellpack(SELL)稀疏矩阵存储格式,支持稀疏矩阵-向量乘法(cusparseSpMV)和单右侧三角求解器(cusparseSpSV)。

    • 新增了一个API调用(cusparseSpSV_updateMatrix),用于在分析步骤后更新稀疏三角求解器中的矩阵值和/或矩阵对角线(针对单右侧情况)。

2.4.12. cuSPARSE: 12.0版本更新1

  • 新功能

    • cusparseSDDMM() 现在支持混合精度计算。

    • 在NVIDIA安培架构GPU上,针对某些矩阵提升了cusparseSpMM()算法2的混合精度性能。

    • 通过新的负载均衡算法提升了cusparseSpMV()的性能。

    • cusparseSpSV()cusparseSpSM() 现在支持原地计算,即输出和输入向量/矩阵具有相同的内存地址。

  • 已解决的问题

    • cusparseSpSM() 如果右侧矩阵的前导维度(ld)大于列数/行数,可能会产生错误结果。

2.4.13. cuSPARSE: 版本 12.0

  • 新功能

    • JIT LTO功能(cusparseSpMMOp())已从驱动程序迁移至nvJitLto库。从CUDA 12.0开始,用户需要链接libnvJitLto.so,详见cuSPARSE文档。同时针对cusparseSpMMOpPlan()的JIT LTO性能也得到了提升。

    • 为通用API引入了常量描述符,例如cusparseConstSpVecGet()。现在通用API接口能明确声明描述符及其数据何时会被cuSPARSE函数修改。

    • cusparseSpGEMM()新增两种内存利用率更低的算法。第一种算法会计算中间产物数量的严格上限,而第二种算法允许将计算分块处理。

    • cusparseGather()cusparseScatter()cusparseCsr2cscEx2()添加了int8_t支持。

    • 提升了cusparseSpSV()在分析和求解两个阶段的性能。

    • 提升了cusparseSpSM()在分析和求解两个阶段的性能。

    • 提升了cusparseSDDMM()的性能并增加了对批量计算的支持。

    • 提升了cusparseCsr2cscEx2()的性能。

  • 已解决的问题

    • cusparseSpSV()cusparseSpSM() 可能会产生错误结果。

    • cusparseDnMatGetStridedBatch() 不接受 batchStride == 0

  • 弃用项

    • 移除了已弃用的CUDA 11.x API、枚举器和描述符。

2.5. 数学库

2.5.1. CUDA数学库:12.8版本发布

  • 新功能

    • 新增支持多种新的浮点数据类型:

      • E2M1 (2位指数,1位尾数)

      • E2M3 (2位指数,3位尾数)

      • E3M2 (3位指数,2位尾数)

      • E8M0(8位指数,0位尾数)

      有关FP4、FP6和FP8类型的详细信息,包括转换运算符和内置函数,请参阅CUDA数学API文档。[CUMATH-1385]

    • 这些类型的转换操作由特定设备(例如计算能力10.0a的设备)原生支持,其他设备使用模拟路径。

    • 优化了标准单精度双曲正切函数(tanhf()),性能提升30-40%。[4557267]

    • 新增了多个tanh实现版本:

      • __tanhf(float x): 新的快速降低精度数学内建函数

      • htanh()h2tanh(): 针对半精度和bfloat16类型的标量及打包格式的tanh函数

      • htanh_approx()h2tanh_approx(): 快速低精度版本

      有关详细使用信息,请参阅CUDA数学API文档。[CUMATH-6821]

    • 新增对四精度__float128数据类型的支持,并在计算能力10.0及以上的GPU设备计算中支持部分数学库运算。详情请参阅CUDA数学API文档。[CUMATH-5463]

  • 已知问题

    • 在转换为MXFP4/MXFP6/MXFP8格式时,开发者不应使用C++转换构造函数,因其当前仅实现向零舍入行为。转换为MXFP格式应使用向正无穷舍入方式,该方式已在__nv_cvt_bfloat16raw_to_e8m0等转换函数中作为选项实现。C++转换构造函数的行为将在未来更新中变更。

2.5.2. CUDA数学库:12.6更新版1

  • 已解决的问题

    • 版本12.6中的问题4731352已解决。

2.5.3. CUDA数学库:12.6版本发布

  • 已知问题

    • 在持续的兼容性测试中,NVIDIA发现当使用MSVC 17.10编译的程序在CPU上运行时,部分CUDA数学整数SIMD API会静默产生错误结果。根本原因被确定为这些基于头文件实现的API在模拟GPU功能的主机端执行过程中,进行整数窄化转换时暴露出的编码错误导致了未定义行为。该问题将在未来的CUDA版本中修复。受影响的应用程序是那些在CPU端(而非CUDA内核中)调用__vimax3_s16x2__vimin3_s16x2__vibmax_s16x2__vibmin_s16x2的情况。[4731352]

2.5.4. CUDA Math: 版本 12.5

  • 已知问题

    • 根据持续测试的结果,我们更新了双精度lgamma()函数可能出现超过文档记载的4 ulp精度损失的区间范围。新的区间应为(-23.0001; -2.2637)。这一发现适用于CUDA 12.5及所有先前版本。[4662420]

2.5.5. CUDA数学库:12.4版本发布

  • 已解决的问题

    • cuda_fp16/bf16头文件中的主机特定代码现已避免类型双关问题,在基于严格别名规则的优化环境下能够正确运行。[4311216]

2.5.6. CUDA数学库:12.3版本发布

  • 新功能

    • SIMD整数CUDA数学API的性能得到了提升。

  • 已解决的问题

    • 当使用-std=c++20编译器选项编译时,来自cuda_fp16.hcuda_bf16.h头文件的__hisinf()数学API会静默产生错误结果,这是由于底层nvcc编译器的问题,该问题已在12.3版本中修复。

  • 已知问题

    • 建议使用cuda_fp16.hcuda_bf16.h头文件的用户禁用主机编译器基于严格别名规则的优化(例如向主机GCC编译器传递-fno-strict-aliasing参数),因为这些优化可能会干扰__half__half2__nv_bfloat16__nv_bfloat162类型实现中使用的类型双关惯用法,并导致用户程序出现未定义行为。请注意,这些头文件通过#pragma GCC diagnostic ignored -Wstrict-aliasing来抑制GCC诊断信息。该行为在未来的头文件版本中可能会有所改进。

2.5.7. CUDA数学库:12.2版本发布

  • 新功能

    • 针对__half__nv_bfloat16数据类型的CUDA数学API进行了可用性改进,包括为主机端<模拟>提供了对许多算术运算和转换的支持。

    • __half__nv_bfloat16 类型现在默认支持与整型之间的隐式转换,这可能导致因重载解析歧义而引发构建问题。建议用户更新代码以选择正确的重载版本。如需禁用此功能,用户可以定义以下宏(这些宏将在未来的CUDA版本中移除):

      • __CUDA_FP16_DISABLE_IMPLICIT_INTEGER_CONVERTS_FOR_HOST_COMPILERS__

      • __CUDA_BF16_DISABLE_IMPLICIT_INTEGER_CONVERTS_FOR_HOST_COMPILERS__

  • 已解决的问题

    • 在持续测试过程中,NVIDIA发现由于算法错误,默认的最近偶数舍入模式下64位浮点数除法运算结果可能出现虚假的无穷大溢出。NVIDIA建议所有需要严格遵循IEEE754标准的开发者升级至CUDA Toolkit 12.2或更新版本。该受影响的算法同时存在于离线编译和即时(JIT)编译过程中。由于JIT编译由驱动程序处理,当需要遵循IEEE754标准且使用JIT编译时,NVIDIA建议更新至R535(Windows系统为R536)或更高版本的驱动程序。此为软件算法修复,与特定硬件无关。

    • 更新了单精度内置函数__expf()__exp10f()以及双精度函数asinh()acosh()的观测最坏情况误差边界。

2.5.8. CUDA数学库:12.1版本发布

  • 新功能

    • atanfacosfasinfsinpifcospifpowferfftgammaf函数的性能和精度改进。

2.5.9. CUDA数学库:12.0版本发布

  • 新功能

  • 已知问题

    • 在默认的"四舍五入到最近偶数模式"下,某些双精度输入会导致双精度除法算法产生虚假溢出:预期得到DBL_MAX 0x7FEF_FFFF_FFFF_FFFF时却返回了无限大的结果。受影响的CUDA数学API:__ddiv_rn()。受影响的CUDA语言操作:设备代码中的双精度/运算。

  • 弃用项

    • CUDA 12.0 中已移除所有之前弃用的未公开API。

2.6. NVIDIA性能基元(NPP)

2.6.1. NPP:版本12.4

  • 弃用项

    • 非CTX API已被弃用,并将在CUDA Toolkit 13.0中移除。

    • nppGetStreamContext() API将在未来版本中弃用。强烈建议开发者过渡到使用NppStreamContext结构的应用管理的流上下文,如NPP文档 - 通用约定流上下文示例中所述。

  • 已解决的问题

    • nppiTranspose 现在支持更大的维度,可扩展至GPU流式多处理器能处理的范围。[4911722, 4807542]

    • 修复了nppiDistanceTransformPBA_8u16u_C1R_Ctx中的距离计算错误。[4832970]

    • NPP ResizeSqrPixel API 的性能问题现已修复,并显示出改进的性能。

    • 针对nppiCrossCorrelation API实现的性能改进。[4801572]

    • nppiYUVToRGB_8u_C3R 现在支持块线性格式的输入。[4667704]

    • 修复了当输出间距设置为512时,nppiFilterGaussAdvanced产生不正确结果的问题。[4861931]

  • 新功能

    • 增强了对大文件的支持,使用size_t

2.6.2. NPP:版本12.0

  • 弃用项

    • 从下一个版本开始弃用非CTX API支持。

  • 已解决的问题

    • NPP ResizeSqrPixel API 的性能问题现已修复,并显示出改进的性能。

2.7. nvJPEG库

2.7.1. nvJPEG: 版本 12.9

  • 新功能

    • 为NVIDIA Jetson Thor硬件(Blackwell SM 10.1架构)新增了硬件加速的JPEG编码支持。当子采样参数设置为420(针对RGB/YUV/NV12输入)且输入子采样同样为420(针对YUV/NV12输入)时,将使用硬件编码。若硬件编码不可用,则回退至CUDA编码。硬件编码的其他条件详见文档说明。

    • 新增了对两种新格式的JPEG解码支持:NV12和YUY2,适用于硬件引擎和CUDA。对于NV12格式,色度子采样必须为420;对于YUY2格式,色度子采样必须为422。

    • 新增的公共结构体和枚举类型:

      • nvjpegEncBackend_t 包含以下值:NVJPEG_ENC_BACKEND_DEFAULT, NVJPEG_ENC_BACKEND_GPU, 和 NVJPEG_ENC_BACKEND_HARDWARE

      • NVJPEG_OUTPUT_NV12, NVJPEG_OUTPUT_YUY2

      • NVJPEG_INPUT_YUV, NVJPEG_INPUT_NV12

    • 新API接口:

      • nvjpegEncoderStateSetBackend: 设置编码器后端

      • nvjpegGetHardwareEncoderInfo: 查询可用硬件编码引擎的数量

      • nvjpegEncode: 替代了nvjpegEncodeYUVnvjpegEncodeImagenvjpegEncode是硬件编码所必需的

  • 已解决的问题

    • 从RGB编码时,输入间距不再需要是水平子采样因子的倍数,从而消除了用户进行特殊处理的需求。[4363416]

    • 修复了在使用CPU后端解码渐进式JPEG时偶尔导致8x8块损坏的问题。[4829300]

    • 修复了解码超大图像时出现的越界写入问题。[4872523]

  • 弃用项

    • nvjpegEncoderParamsCopyHuffmanTables 将在下一个主要版本中被移除。

2.7.2. nvJPEG: 版本 12.8

  • 新功能

    • 为NVIDIA Blackwell架构GPU的nvJPEG添加了硬件加速JPEG解码支持。

    • The nvJPEG library now uses significantly less GPU memory during encoding, achieving memory savings of 30% to 50%, depending on image size and chroma subsampling mode. For images larger than 5 MB (approximately 2K x 1K pixels) and popular subsampling modes such as 4:2:2 and 4:2:0, memory savings are around 50%. Additionally, nvJPEG no longer artificially runs out of memory when processing large or complex images, enhancing its reliability and performance.

  • 已解决的问题

    • 修复了nvJPEG中一个导致尺寸小于25像素的极小图像无法正确编码的问题。[4655922]

    • 修复了在使用nvjpegDecodeJpegHost配合NVJPEG_BACKEND_GPU_HYBRID backend后端解码截断的JPEG文件时导致越界读取的问题。[4663831]

2.7.3. nvJPEG: 版本 12.4

  • 新功能

    • 针对单幅图像CUDA解码的IDCT性能优化。

    • 零拷贝行为已更改:设置NVJPEG_FLAGS_REDUCED_MEMORY_DECODE_ZERO_COPY标志将不再启用NVJPEG_FLAGS_REDUCED_MEMORY_DECODE

2.7.4. nvJPEG:版本12.3更新1

  • 新功能

    • 新增API接口:nvjpegBufferPinnedResizenvjpegBufferDeviceResize,可用于在使用前调整固定内存和设备缓冲区的尺寸。

2.7.5. nvJPEG: 版本 12.2

  • 新功能

    • 新增支持JPEG无损解码(进程14,FO预测)。

    • L4T 现已支持 nvJPEG。

2.7.6. nvJPEG: 版本 12.0

  • 新功能

    • 改进了nvJPEG编解码器的GPU内存优化。

  • 已解决的问题

    • 修复了在大量线程测试nvJPEGDecMultipleInstances时导致运行时故障的问题。

    • CMYK四色转换的问题现已解决。

  • 已知问题

    • 后端 NVJPEG_BACKEND_GPU_HYBRID - 无法处理带有额外扫描长度的比特流。

  • 弃用项

    • 编码器中Huffman表的复用 (nvjpegEncoderParamsCopyHuffmanTables)。

1

仅适用于部分Linux发行版

3. 通知

3.1. 注意事项

本文档仅供信息参考之用,不应视为对产品功能、状态或质量的保证。NVIDIA公司(“NVIDIA”)对本文件所含信息的准确性或完整性不作任何明示或暗示的陈述或保证,并对其中可能存在的错误不承担任何责任。NVIDIA对于因使用此类信息而产生的后果、或因使用该信息导致的第三方专利或其他权利侵权概不负责。本文件不构成对开发、发布或交付任何材料(定义见下文)、代码或功能的承诺。

NVIDIA保留随时对本文件进行更正、修改、增强、改进以及任何其他变更的权利,恕不另行通知。

客户在下单前应获取最新的相关信息,并确认这些信息是最新且完整的。

除非NVIDIA与客户授权代表签署的单独销售协议中另有约定,否则NVIDIA产品的销售均以订单确认时提供的NVIDIA标准销售条款和条件为准(以下简称"销售条款")。NVIDIA特此明确反对将任何客户通用条款适用于本文件所述NVIDIA产品的采购。本文件不直接或间接构成任何合同义务。

NVIDIA产品并非设计、授权或保证适用于医疗、军事、航空、航天或生命支持设备,也不适用于那些可以合理预期NVIDIA产品故障或失灵会导致人身伤害、死亡、财产或环境损害的应用场景。NVIDIA对于在此类设备或应用中使用和/或包含NVIDIA产品不承担任何责任,因此客户需自行承担相关风险。

NVIDIA不声明或保证基于本文档的产品适用于任何特定用途。NVIDIA未必会对每个产品的所有参数进行测试。客户应全权负责评估和确定本文档所含信息的适用性,确保产品适合并满足客户计划的应用需求,并执行必要的应用测试以避免应用或产品出现故障。客户产品设计中的缺陷可能会影响NVIDIA产品的质量和可靠性,并可能导致超出本文档范围的其他或不同的条件和/或要求。对于任何因以下原因导致的故障、损坏、成本或问题,NVIDIA不承担任何责任:(i) 以违反本文档的任何方式使用NVIDIA产品或(ii) 客户产品设计。

本文档不授予任何NVIDIA专利权、版权或其他NVIDIA知识产权的明示或暗示许可。NVIDIA发布的关于第三方产品或服务的信息,不构成NVIDIA对这些产品或服务的使用许可或担保认可。使用此类信息可能需要获得第三方基于其专利或其他知识产权的许可,或需要获得NVIDIA基于其专利或其他知识产权的许可。

本文件中的信息仅可在获得NVIDIA事先书面批准、未经改动完整复制且完全符合所有适用的出口法律法规,并附带所有相关条件、限制和声明的情况下进行复制。

本文件及所有NVIDIA设计规格、参考板、文件、图纸、诊断工具、清单和其他文档(统称及单独称为"材料")均以"现状"提供。NVIDIA不对材料作出任何明示或默示的保证,包括但不限于对不侵权、适销性和特定用途适用性的默示保证免责。在法律允许的最大范围内,NVIDIA不就因使用本文件导致的任何损害承担责任,包括但不限于任何直接、间接、特殊、附带、惩罚性或后果性损害,无论损害成因如何,也无论责任理论为何,即使NVIDIA已被告知发生此类损害的可能性。不论客户因任何原因可能遭受的任何损害,NVIDIA对客户就本文所述产品的全部及累计责任应受产品销售条款的限制。

3.2. OpenCL

OpenCL是苹果公司的商标,经Khronos Group Inc.授权使用。

3.3. 商标

NVIDIA和NVIDIA标识是美国及其他国家NVIDIA公司的商标或注册商标。其他公司及产品名称可能是其各自关联公司的商标。