NVIDIA CUDA 工具包发行说明

CUDA 工具包的发行说明。

1. CUDA 12.8 发行说明

NVIDIA® CUDA® 工具包的发行说明可以在以下网址在线找到:https://docs.nvda.net.cn/cuda/cuda-toolkit-release-notes/index.html

注意

发行说明已重组为两个主要部分:常规 CUDA 发行说明和 CUDA 库发行说明,其中包括 12.x 版本的历史信息。

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

CUDA 组件

从 CUDA 11 开始,工具包中的各种组件都独立进行版本控制。

对于 CUDA 12.8,下表指示了版本

表 1 CUDA 12.8 组件版本

组件名称

版本信息

支持的架构

支持的平台

CUDA C++ 核心计算库

Thrust

2.7.0

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows

CUB

2.7.0

libcu++

2.7.0

协作组

12.8.55

CUDA 兼容性

12.8.38905961

aarch64-jetson

Linux

CUDA 运行时 (cudart)

12.8.57

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

cuobjdump

12.8.55

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows

CUPTI

12.8.57

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA cuxxfilt (demangler)

12.8.55

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows

CUDA 演示套件

12.8.55

x86_64

Linux, Windows

CUDA GDB

12.8.55

x86_64, arm64-sbsa, aarch64-jetson

Linux, WSL

CUDA Nsight Eclipse 插件

12.8.55

x86_64

Linux

CUDA NVCC

12.8.61

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA nvdisasm

12.8.55

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows

CUDA NVML 标头

12.8.55

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA nvprof

12.8.57

x86_64

Linux, Windows

CUDA nvprune

12.8.55

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA NVRTC

12.8.61

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

NVTX

12.8.55

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA NVVP

12.8.57

x86_64

Linux, Windows

CUDA OpenCL

12.8.55

x86_64

Linux, Windows

CUDA Profiler API

12.8.55

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA Compute Sanitizer API

12.8.55

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA cuBLAS

12.8.3.14

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

cuDLA

12.8.55

aarch64-jetson

Linux

CUDA cuFFT

11.3.3.41

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA cuFile

1.13.0.11

x86_64, arm64-sbsa, aarch64-jetson

Linux

CUDA cuRAND

10.3.9.55

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA cuSOLVER

11.7.2.55

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA cuSPARSE

12.5.7.53

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA NPP

12.3.3.65

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA nvFatbin

12.8.55

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA nvJitLink

12.8.61

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

CUDA nvJPEG

12.3.5.57

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL

Nsight Compute

2025.1.0.14

x86_64, arm64-sbsa, aarch64-jetson

Linux, Windows, WSL (Windows 11)

Nsight Systems

2024.6.2.225

x86_64, arm64-sbsa

Linux, Windows, WSL

Nsight Visual Studio Edition (VSE)

2025.1.0.25002

x86_64 (Windows)

Windows

nvidia_fs1

2.24.2

x86_64, arm64-sbsa, aarch64-jetson

Linux

Visual Studio 集成

12.8.55

x86_64 (Windows)

Windows

NVIDIA Linux 驱动程序

570.86

x86_64, arm64-sbsa

Linux

NVIDIA Windows 驱动程序

571.96

x86_64 (Windows)

Windows, WSL

CUDA 驱动程序

运行 CUDA 应用程序需要系统至少配备一个支持 CUDA 的 GPU 和一个与 CUDA 工具包兼容的驱动程序。请参阅表 3。有关各种支持 CUDA 的 GPU 产品的更多信息,请访问https://developer.nvidia.com/cuda-gpus

每个 CUDA 工具包版本都需要最低版本的 CUDA 驱动程序。CUDA 驱动程序是向后兼容的,这意味着针对特定版本的 CUDA 编译的应用程序将继续在后续(更高版本)驱动程序版本上工作。

有关兼容性的更多信息,请访问https://docs.nvda.net.cn/cuda/cuda-c-best-practices-guide/index.html#cuda-compatibility-and-upgrades

注意:从 CUDA 11.0 开始,工具包组件是单独版本控制的,工具包本身的版本控制如下表所示。

下表显示了 CUDA 次版本兼容性所需的最低驱动程序版本。CUDA 次版本兼容性在https://docs.nvda.net.cn/deploy/cuda-compatibility/index.html中详细描述。

表 2 CUDA 工具包和 CUDA 次版本兼容性的最低要求驱动程序版本

CUDA 工具包

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 工具包版本中打包的开发 NVIDIA GPU 驱动程序的版本如下所示。

表 3 CUDA 工具包和相应的驱动程序版本

CUDA 工具包

工具包驱动程序版本

Linux x86_64 驱动程序版本

Windows x86_64 驱动程序版本

CUDA 12.8 GA

>=570.26

>=570.65

CUDA 12.6 Update 3

>=560.35.05

>=561.17

CUDA 12.6 Update 2

>=560.35.03

>=560.94

CUDA 12.6 Update 1

>=560.35.03

>=560.94

CUDA 12.6 GA

>=560.28.03

>=560.76

CUDA 12.5 Update 1

>=555.42.06

>=555.85

CUDA 12.5 GA

>=555.42.02

>=555.85

CUDA 12.4 Update 1

>=550.54.15

>=551.78

CUDA 12.4 GA

>=550.54.14

>=551.61

CUDA 12.3 Update 1

>=545.23.08

>=546.12

CUDA 12.3 GA

>=545.23.06

>=545.84

CUDA 12.2 Update 2

>=535.104.05

>=537.13

CUDA 12.2 Update 1

>=535.86.09

>=536.67

CUDA 12.2 GA

>=535.54.03

>=536.25

CUDA 12.1 Update 1

>=530.30.02

>=531.14

CUDA 12.1 GA

>=530.30.02

>=531.14

CUDA 12.0 Update 1

>=525.85.12

>=528.33

CUDA 12.0 GA

>=525.60.13

>=527.41

CUDA 11.8 GA

>=520.61.05

>=520.06

CUDA 11.7 Update 1

>=515.48.07

>=516.31

CUDA 11.7 GA

>=515.43.04

>=516.01

CUDA 11.6 Update 2

>=510.47.03

>=511.65

CUDA 11.6 Update 1

>=510.47.03

>=511.65

CUDA 11.6 GA

>=510.39.01

>=511.23

CUDA 11.5 Update 2

>=495.29.05

>=496.13

CUDA 11.5 Update 1

>=495.29.05

>=496.13

CUDA 11.5 GA

>=495.29.05

>=496.04

CUDA 11.4 Update 4

>=470.82.01

>=472.50

CUDA 11.4 Update 3

>=470.82.01

>=472.50

CUDA 11.4 Update 2

>=470.57.02

>=471.41

CUDA 11.4 Update 1

>=470.57.02

>=471.41

CUDA 11.4.0 GA

>=470.42.01

>=471.11

CUDA 11.3.1 Update 1

>=465.19.01

>=465.89

CUDA 11.3.0 GA

>=465.19.01

>=465.89

CUDA 11.2.2 Update 2

>=460.32.03

>=461.33

CUDA 11.2.1 Update 1

>=460.32.03

>=461.09

CUDA 11.2.0 GA

>=460.27.03

>=460.82

CUDA 11.1.1 Update 1

>=455.32

>=456.81

CUDA 11.1 GA

>=455.23

>=456.38

CUDA 11.0.3 Update 1

>= 450.51.06

>= 451.82

CUDA 11.0.2 GA

>= 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 general release, and updates)

>= 418.39

>= 418.96

CUDA 10.0.130

>= 410.48

>= 411.31

CUDA 9.2 (9.2.148 Update 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 驱动程序下载站点下载最新的 Tesla GPU 驱动程序,网址为https://www.nvidia.com/drivers

在安装 CUDA 工具包期间,可以在 Windows 上跳过 NVIDIA 驱动程序的安装(当使用交互式或静默安装时),或者在 Linux 上跳过(通过使用元包)。

有关在 Windows 上自定义安装过程的更多信息,请参阅https://docs.nvda.net.cn/cuda/cuda-installation-guide-microsoft-windows/index.html#install-cuda-software

有关 Linux 上的元包,请参阅https://docs.nvda.net.cn/cuda/cuda-installation-guide-linux/index.html#package-manager-metas

1.2. 新特性

  • 此版本增加了对以下 Nvidia Blackwell GPU 架构的编译器支持

    • SM_100

    • SM_101

    • SM_120

  • Tegra 特有

    • 为 DRIVE OS QNX 添加了 MPS 支持

    • 增加了对 GCC 13.2.0 的支持

  • 增加了对统一虚拟内存 (UVM) 和扩展 GPU 内存 (EGM) 阵列的支持

  • Hopper 机密计算

    • 为受保护的 PCIe 模式添加了多 GPU 支持

    • 为单 GPU 直通模式添加了密钥轮换功能

  • NVML 更新

    • 修复了使用 Open GPU Kernel Module 驱动程序的 Docker 容器的每个进程内存使用情况报告

    • 增加了对 DRAM 加密查询和控制的支持 (Blackwell)

    • 为用户空间应用程序添加了检查点/恢复功能

    • 增加了对 Blackwell 降低带宽模式 (RBM) 的支持

  • CUDA 图

    • 为 CUDA 图添加了条件执行功能

    • IF 节点的 ELSE 图支持

    • SWITCH 节点支持

    • 引入了额外的性能优化

  • CUDA 用户模式驱动程序 (UMD)

    • 将 PCIe 设备 ID 添加到 CUDA 设备属性

    • 添加了 cudaStreamGetDevice 和 cuStreamGetDevice API,以检索与 CUDA 流关联的设备

    • 为 INT101010 纹理/表面格式添加了 CUDA 支持

    • 为多个源缓冲区和目标缓冲区之间可变大小的传输添加了批量 CUDA 异步内存复制 API(cuMemcpyBatchAsync 和 cuMemcpyBatch3DAsync)

  • 用户空间检查点和恢复

    • 为检查点/恢复操作添加了新的驱动程序 API

1.2.1. CUDA 编译器

  • 有关 PTX 的更改,请参阅https://docs.nvda.net.cn/cuda/parallel-thread-execution/#ptx-isa-version-8-7

  • 添加了两个新的 nvcc 标志

    • static-global-template-stub {true|false}:控制程序模式中全局/设备/常量/托管模板的主机端链接

    • device-entity-has-hidden-visibility {true|false}:控制全局/设备/常量/托管符号的 ELF 可见性

    这两个标志的当前默认值均为 false。这些默认值将在我们未来的版本中更改为 true。有关这些标志及其对现有程序的影响的详细信息,请参阅 nvcc --help 命令或在线 CUDA 文档。

  • libNVVM

    libNVVM 现在支持 Blackwell 系列架构的编译。计算能力 compute_100 及更高版本(Blackwell 和未来架构)的编译使用更新的 NVVM IR 方言,该方言基于 LLVM 18.1.8 IR(“现代”方言),这与用于 Blackwell 之前架构(计算能力低于 compute_100)的旧方言不同。使用为 Blackwell 之前架构生成的旧方言的 NVVM IR 位代码可用于定位 Blackwell 和更高版本架构,调试元数据除外。

  • nvdisasm

    Nvdisasm 现在支持发出 JSON 格式的 SASS 反汇编。

1.2.2. CUDA 开发者工具

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

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

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

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

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

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

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

1.3. 已解决问题

1.3.1. CUDA 编译器

  • 解决了使用 GCC 成功构建的代码在 Ubuntu 24.04 上使用 NVCC 编译失败的编译问题。这提高了交叉编译器兼容性,并确保了 GCC 和 NVIDIA 的 CUDA 编译器工具链之间行为的一致性。[4893699]

  • 修复了 C++20 requires 表达式的错误处理,恢复了正确的功能和标准合规性。这确保了模板参数的编译时要求现在可以正确评估。[4843353]

  • 修复了 NVCC(NVIDIA 编译器驱动程序)忽略类型全局命名空间前缀的问题,因此错误地将其解析为与局部类型同名的局部类型。[4804685]

  • 修复了当代码包含三个或更多具有可变参数的嵌套 lambda 表达式时,NVCC 中发生的编译错误。编译器现在可以正确处理深度嵌套的可变 lambda 表达式。[4782817]

  • 修复了 NVRTC 中内核函数具有长标识符时导致编译失败的限制。运行时编译器现在可以正确处理具有扩展名称长度的内核函数。[4781023]

  • 解决了模板别名解析可能产生不正确的模板实例的问题。以前,当别名模板及其底层类型 ID 模板具有不同的默认参数时,编译器有时会在用其底层类型替换别名时错误地省略不同的默认参数。这导致引用不正确的模板实例。模板参数解析现在可以正确保留别名替换期间所有必要的默认参数。[4721362]

  • 修复了从可见范围外使用变量作为模板参数时报告无效错误的问题。这解决了不正确的诊断消息,尤其影响涉及带括号的初始化器的情况。编译器现在可以正确验证模板参数的范围可访问性。[4717351]

  • 添加了通过回调机制取消正在进行的 NVRTC 编译的能力。这项新功能允许开发人员以编程方式安全地中断和终止编译过程。[4082060]

  • 现在 CUDA 编程指南的“C++ 语言支持”部分中记录了 -expt-relaxed-constexpr nvcc 标志的语义。[3288543]

1.4. 已知问题和限制

1.4.1. CUDA 编译器

某些 GPU 在驱动程序版本 570.xx.yyy 下可能会遇到比正常情况更高的上下文创建时间。对于许多应用程序来说,这可能不会引起注意,因为上下文创建通常在初始化时完成,并在应用程序生命周期内摊销。但是,频繁创建和销毁 CUDA 上下文的应用程序可能会看到更高的影响。NVIDIA 将在即将发布的 570 驱动程序版本中解决此问题。[4886848]

1.5. 已弃用或删除的功能

在当前 CUDA 软件版本中弃用的功能在当前版本中仍然有效,但其文档可能已被删除,并且在未来版本中将正式不受支持。我们建议开发人员在其软件中采用这些功能的替代解决方案。

1.5.1. 已弃用的架构

  • 对 Maxwell、Pascal 和 Volta 的架构支持被认为是功能完整的,将在即将发布的版本中冻结。

1.5.2. 已弃用或删除的操作系统

  • 已删除对 Microsoft Windows 10 21H2 的支持。

  • 已删除对 Debian 11 的支持。

  • 已删除对 SLES 15 Service Pack 4 / OpenSUSE 15.4 之前的版本的支持。

  • NVTX v2 已弃用。要迁移到 NVTX v3。将您的代码从

    #include <nvtoolsext.h> 更改为 #include "nvtx3/nvtoolsext.h"。此标头包含在工具包中。

    有关最新的 NVTX 版本和扩展,请访问 NVIDIA NVTX

1.5.3. 已弃用的 CUDA 工具

  • 支持 Turing 前架构的分析工具 Visual Profiler 和 nvprof 现在已弃用,将在即将发布的版本中删除。

  • CUPTI Event API(来自 header cupti_events.h)和 CUPTI Metric API(来自 cupti_metrics.h)现在已弃用,将在即将发布的版本中删除。

  • Nsight Eclipse 插件将不再包含在 Tegra (SOC) 软件包中,例如 DriveOS 或 Jetson。鼓励这些软件包的用户使用 Nsight Visual Studio Code,该插件可在 VSCode 扩展库或 Microsoft VSCode Marketplace 中找到。

  • 已删除对 CUDA-GDB 的 macOS 主机客户端的支持。

2. CUDA 库

本节介绍 12.x 版本的 CUDA 库发行说明。

  • CUDA 数学库工具链使用 C++11 功能,并且主机上需要 C++11 兼容的标准库 (libstdc++ >= 20150422)。

2.1. cuBLAS 库

2.1.1. 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 Matmul 属性扩展

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

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

    • 在 Windows x64 上为 NVIDIA Ampere GPU 架构和 Blackwell GeForce 类 GPU 引入了对 Graphics (CIG) 中 CUDA 的初始支持。现在可以自动检测 CIG 上下文,并且 cuBLAS 选择符合 CIG 共享内存使用限制的内核。

    • 提高了所有 Hopper GPU 上非对齐 INT8 matmul 的性能。

  • 已解决问题

    • cublasLtMatmulCUBLASLT_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.2. cuBLAS:版本 12.6 Update 2

  • 新特性

    • 全面提高了所有 Hopper GPU 上 FP8、FP16 和 BF16 matmul 的性能。此改进还包括以下融合尾声 CUBLASLT_EPILOGUE_BIASCUBLASLT_EPILOGUE_RELUCUBLASLT_EPILOGUE_RELU_BIASCUBLASLT_EPILOGUE_RELU_AUXCUBLASLT_EPILOGUE_RELU_AUX_BIASCUBLASLT_EPILOGUE_GELUCUBLASLT_EPILOGUE_GELU_BIAS

  • 已知问题

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

    • 用户可能会在 Hopper GPU 上观察到 FP64 GEMM 的次优性能。一种可能的解决方法是有条件地启用 swizzling。为此,用户可以获取通过 cublasLtMatmulAlgoGetHeuristic 返回的算法,并通过调用 cublasLtMatmulAlgoCapGetAttributeCUBLASLT_ALGO_CAP_CTA_SWIZZLING_SUPPORT 查询是否可以启用 swizzling。如果支持 swizzling,您可以通过调用 cublasLtMatmulAlgoConfigSetAttributeCUBLASLT_ALGO_CONFIG_CTA_SWIZZLING 来启用 swizzling。[4872420]

  • 已解决问题

    • cublasLtMatmul 可能会忽略用户指定的 Bias 或 Aux 数据类型(CUBLASLT_MATMUL_DESC_BIAS_DATA_TYPECUBLASLT_MATMUL_DESC_EPILOGUE_AUX_DATA_TYPE),如果这些数据类型与 cublasLtMatmulDescAttributes_t <https://docs.nvda.net.cn/cuda/cublas/#cublasltmatmuldescattributes-t>__ 中记录的限制不匹配,则 FP8 matmul 操作可能会忽略这些数据类型。[44750343, 4801528]

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

    • 当使用 splitk 缩减时,具有 INT8 输入、INT32 累加、INT8 输出和 FP32 缩放因子的 cublasLtMatmul 可能会产生数值不准确。[4751576]

2.1.3. cuBLAS:版本 12.6 Update 1

  • 已知问题

    • cublasLtMatmul 可能会忽略用户指定的 Bias 或 Aux 数据类型(CUBLASLT_MATMUL_DESC_BIAS_DATA_TYPECUBLASLT_MATMUL_DESC_EPILOGUE_AUX_DATA_TYPE),如果这些数据类型与 cublasLtMatmulDescAttributes_t 中记录的限制不匹配,则 FP8 matmul 操作可能会忽略这些数据类型。[4750343]

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

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

2.1.4. cuBLAS:版本 12.6

  • 已知问题

    • 计算矩阵乘法和具有 INT8 输入、INT8 输出和 FP32 缩放因子的尾声在某些情况下可能会出现数值错误,即当使用第二个内核来计算尾声时。发生这种情况是因为第一个 GEMM 内核将中间结果从 FP32 转换为 INT8 并存储起来供后续尾声内核使用。如果一个值在尾声之前超出 INT8 的范围,并且尾声会将其带入 INT8 的范围,则会出现数值错误。此问题在 CUDA 12 之前就已存在,并且没有已知的解决方法。[CUB-6831]

    • cublasLtMatmul 可能会忽略用户指定的 Bias 或 Aux 数据类型(CUBLASLT_MATMUL_DESC_BIAS_DATA_TYPECUBLASLT_MATMUL_DESC_EPILOGUE_AUX_DATA_TYPE),如果这些数据类型与 cublasLtMatmulDescAttributes_t 中记录的限制不匹配,则 FP8 matmul 操作可能会忽略这些数据类型。[4750343]

  • 已解决问题

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

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

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

2.1.5. cuBLAS:12.5 版本更新 1

  • 新特性

    • 针对大型语言模型的矩阵乘法性能改进,特别是 Hopper GPU 上小批量大小的情况。

  • 已知问题

    • 对于步幅批处理的情况,偏置后记(不带 ReLU 或 GeLU)可能在 Hopper GPU 上不受支持。一种解决方法是手动实现批处理。这将在未来的版本中修复。

    • cublasGemmGroupedBatchedExcublas<t>gemmGroupedBatched 具有较大的 CPU 开销。这将在即将发布的版本中解决。

  • 已解决问题

    • 在极少数情况下,在 Hopper GPU 上并发执行 SYMM/HEMM 和 GEMM 可能会导致主机代码中出现竞争条件,这可能会导致非法内存访问 CUDA 错误。[4403010]

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

2.1.6. cuBLAS:12.5 版本

  • 新特性

    • cuBLAS 添加了一个实验性 API,以支持混合精度分组批处理 GEMM。这使得可以使用 FP32 计算类型进行 FP16 或 BF16 输入/输出的分组批处理 GEMM。有关更多详细信息,请参阅 cublasGemmGroupedBatchedEx

  • 已知问题

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

  • 已解决问题

    • cublasLtMatmul 忽略了提供的缩放类型与文档暗示的缩放类型之间的不匹配,并假设使用后者。例如,对于缩放类型为 FP32 且所有其他类型为 FP16 的不受支持的 cublasLtMatmul 配置,将以隐式假设缩放类型为 FP16 的方式运行,并产生不正确的结果。

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

2.1.7. cuBLAS:12.4 版本更新 1

  • 已知问题

    • 将 cuBLAS 句柄流设置为 cudaStreamPerThread 并通过 cublasSetWorkspace 设置工作空间将导致任何后续的 cublasSetWorkspace 调用失败。这将在即将发布的版本中修复。

    • cublasLtMatmul 忽略了提供的缩放类型与文档暗示的缩放类型之间的不匹配,并假设使用后者。例如,对于缩放类型为 FP32 且所有其他类型为 FP16 的不受支持的 cublasLtMatmul 配置,将以隐式假设缩放类型为 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(包括多实例 GPU (MIG))上导致浮点异常 (FPE)。此问题是在 cuBLAS 11.8 中引入的。

2.1.8. 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 数量。用户可以使用 API(例如 cublasSetSmCountTarget())向 cuBLAS 提供更正后的 SM 计数。

    • 当 alpha 为零且指针模式设置为 CUBLAS_POINTER_MODE_DEVICE 时,BLAS 级别 2 和 3 函数可能无法以符合 BLAS 的方式处理 alpha。这与 cuBLAS 12.3 Update 1 中记录的已知问题相同。

    • K 等于 1 且后记为 CUBLASLT_EPILOGUE_D{RELU,GELU}_BGRADcublasLtMatmul 可能会越界访问工作空间。此问题自 cuBLAS 11.3 Update 1 以来一直存在。

    • K 等于 1 且后记为 CUBLASLT_EPILOGUE_D{RELU,GELU}cublasLtMatmul 如果未提供工作空间,可能会产生非法内存访问。此问题自 cuBLAS 11.6 以来一直存在。

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

2.1.9. 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} 和其他函数可能会产生 NaN,这是由于对本来应该跳过的矩阵 A 和 B 执行计算而导致的。如果严格遵守 BLAS 是必需的,则用户可以在调用函数之前手动检查 alpha 值或切换到 CUBLAS_POINTER_MODE_HOST

  • 已解决问题

    • 在以下条件下,cuBLASLt matmul 运算可能计算出不正确的输出:矩阵 A 和 B 的数据类型为 FP8,矩阵 C 和 D 的数据类型为 FP32、FP16 或 BF16,beta 值为 1.0,C 和 D 矩阵相同,后记包含 GELU 激活函数。

    • 当使用 CUDA Toolkit 12.2 update 1 或更早版本中的 cuBLASLt 编译的应用程序与 CUDA Toolkit 12.2 update 2 或 CUDA Toolkit 12.3 中的 cuBLASLt 一起运行时,使用 cublasLtMatmulDescInit() 初始化的矩阵乘法描述符有时不遵守使用 cublasLtMatmulDescSetAttribute() 进行的属性更改。

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

    • K 等于 1 且后记为 CUBLASLT_EPILOGUE_BGRAD{A,B}cublasLtMatmul 可能会为偏置梯度返回不正确的结果。

2.1.10. cuBLAS:12.3 版本

  • 新特性

    • 改进了 NVIDIA L40S Ada GPU 上的性能。

  • 已知问题

    • 在以下条件下,cuBLASLt matmul 运算可能计算出不正确的输出:矩阵 A 和 B 的数据类型为 FP8,矩阵 C 和 D 的数据类型为 FP32、FP16 或 BF16,beta 值为 1.0,C 和 D 矩阵相同,后记包含 GELU 激活函数。

    • 当使用 CUDA Toolkit 12.2 update 1 或更早版本中的 cuBLASLt 编译的应用程序与 CUDA Toolkit 12.2 update 2 或更高版本中的 cuBLASLt 一起运行时,使用 cublasLtMatmulDescInit() 初始化的矩阵乘法描述符可能不遵守使用 cublasLtMatmulDescSetAttribute() 进行的属性更改。要解决此问题,请使用 cublasLtMatmulDescCreate() 而不是 cublasLtMatmulDescInit() 创建矩阵乘法描述符。这将在即将发布的版本中修复。

2.1.11. cuBLAS:12.2 版本更新 2

  • 新特性

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

  • 已知问题

    • 在以下条件下,cuBLASLt matmul 运算可能计算出不正确的输出:矩阵 A 和 B 的数据类型为 FP8,矩阵 C 和 D 的数据类型为 FP32、FP16 或 BF16,beta 值为 1.0,C 和 D 矩阵相同,后记包含 GELU 激活函数。

2.1.12. cuBLAS:12.2 版本

  • 已知问题

    • 当 MPS 与设置为小于 100% 的 CUDA_MPS_ACTIVE_THREAD_PERCENTAGE 一起使用时,cuBLAS 初始化在 Hopper 架构 GPU 上失败。目前没有针对此问题的解决方法。

    • 对于具有 CUBLASLT_EPILOGUE_RELU_BIASCUBLASLT_EPILOGUE_GELU_BIAS 和非零 CUBLASLT_MATMUL_DESC_BIAS_BATCH_STRIDE 的批处理 matmul,某些 Hopper 内核会产生不正确的结果。这些内核将第一个批次的偏置向量应用于所有批次。这将在未来的版本中修复。

2.1.13. cuBLAS:12.1 版本更新 1

  • 新特性

    • 支持 NVIDIA Ada GPU 上的 FP8。

    • 改进了 NVIDIA L4 Ada GPU 上的性能。

    • 引入了一个 API,指示 cuBLASLt 库不要使用某些 CPU 指令。这在某些极少数情况下很有用,在这些情况下,cuBLASLt 启发式算法使用的某些 CPU 指令会对 CPU 性能产生负面影响。请参阅 https://docs.nvda.net.cn/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.14. 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.15. cuBLAS:12.0 版本

  • 新特性

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

    • 添加了 int64 API 以启用更大的问题规模;请参阅 64 位整数接口

    • 为具有后记的 cublasLtMatmul 添加了更多特定于 Hopper 的内核

      • CUBLASLT_EPILOGUE_BGRAD{A,B}

      • CUBLASLT_EPILOGUE_{RELU,GELU}_AUX

      • CUBLASLT_EPILOGUE_D{RELU,GELU}

    • 通过添加以前仅在 Windows 和 Linux 的 x86_64 架构上支持的 Hopper 内核,改进了 arm64-sbsa 上的 Hopper 性能。

  • 已知问题

    • 没有向前兼容的单精度复数 gemm 内核,它们不需要工作空间。支持将在以后的版本中添加。

  • 已解决问题

    • 修复了 NVIDIA Ampere 架构和更新的 GPU 上的一个问题,其中具有后记 CUBLASLT_EPILOGUE_BGRAD{A,B} 和非平凡缩减方案(即,非 CUBLASLT_REDUCTION_SCHEME_NONE)的 cublasLtMatmul 可能会为偏置梯度返回不正确的结果。

    • 对于 gemv 类情况(即,m 或 n 等于 1),cublasLtMatmul 可能会忽略具有 CUBLASLT_EPILOGUE_RELU_BIASCUBLASLT_EPILOGUE_BIAS 后记的偏置。

    弃用

    • 禁止在同一编译单元中包含 cublas.hcublas_v2.h

    • 已删除

      • CUBLAS_MATMUL_STAGES_16x80CUBLAS_MATMUL_STAGES_64x80cublasLtMatmulStages_t 中删除。不再有内核使用这些阶段。

      • cublasLt3mMode_tCUBLASLT_MATMUL_PREF_MATH_MODE_MASKCUBLASLT_MATMUL_PREF_GAUSSIAN_MODE_MASKcublasLtMatmulPreferenceAttributes_t 中删除。请改用 cublasLtNumericalImplFlags_t 中的相应标志。

      • CUBLASLT_MATMUL_PREF_POINTER_MODE_MASKCUBLASLT_MATMUL_PREF_EPILOGUE_MASKCUBLASLT_MATMUL_PREF_SM_COUNT_TARGETcublasLtMatmulPreferenceAttributes_t 中删除。相应的参数直接取自 cublasLtMatmulDesc_t

      • CUBLASLT_POINTER_MODE_MASK_NO_FILTERINGcublasLtPointerModeMask_t 中删除。此掩码仅适用于已删除的 CUBLASLT_MATMUL_PREF_MATH_MODE_MASK

2.2. cuFFT 库

2.2.1. cuFFT:12.8 版本

  • 新特性

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

  • 弃用

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

  • 已知问题

    • SM120 仅通过 PTX JIT 支持用于旧版回调内核。因此,旨在与 libcufft_static.a 链接的非 LTO 设备回调代码必须编译为 PTX,而不是 SASS。

    • 在不使用 -mcmodel=medium 标志的情况下,在 x86_64 系统中链接静态 cuFFT 库(libcufft_static.alibcufft_static_nocallback.a)的大型应用程序(总二进制大小超过 2 GB)将遇到链接错误(例如:.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.2. cuFFT:12.6 版本更新 2

  • 新特性

    • 引入了 LTO 回调作为已弃用的旧版回调的替代品。LTO 回调提供

      • 与旧版回调相比,性能更高

      • 支持 Windows 和动态(共享)库上的回调

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

  • 已解决问题

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

  • 弃用

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

2.2.3. cuFFT:12.6 版本

  • 已知问题

    • 对于 FP16,目前不支持大小为 1 且 istride/ostride > 1 的 FFT。在 CTK 12.1 或更早版本中,此用例存在已知的内存问题。在 CTK 12.2 或更高版本中,会抛出 CUFFT_INVALID_SIZE 错误。[4662222]

2.2.4. cuFFT:12.5 版本

2.2.5. cuFFT:12.4 版本更新 1

  • 已解决问题

    • CUDA 12.4 中,错误地将 cuFFT LTO EA 库中的例程添加到了 cuFFT Advanced API 头文件 (cufftXt.h) 中。此例程现已从头文件中删除。

2.2.6. cuFFT:12.4 版本

  • 新特性

    • 添加了 即时链接时优化 (JIT LTO) 内核,以提高具有 64 位索引的 FFT 的性能。

    • 向 cuFFT API 添加了 每个计划属性。这些新例程可以用来让用户更好地控制 cuFFT 的行为。目前,它们可用于为 64 位 FFT 启用 JIT LTO 内核。

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

  • 已知问题

    • 错误地将 cuFFT LTO EA 库中的例程添加到了 cuFFT Advanced API 头文件 (cufftXt.h) 中。cuFFT 不支持此例程,并且将在未来的版本中从头文件中删除。

  • 已解决问题

    • 修复了当使用用户指定的输出步幅(即,使用 高级数据布局 APIostride 组件)执行异位实数到复数 (R2C) 变换时,可能导致覆盖用户数据的问题。

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

2.2.7. cuFFT:12.3 版本更新 1

  • 已知问题

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

  • 已解决问题

    • 复数到复数 (C2C) 执行函数(cufftExec 和类似函数)现在在内核启动期间发生错误时(例如,由于缺少 CUDA 上下文)会正确地报告错误。

2.2.8. cuFFT:12.3 版本

  • 新特性

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

    • 提高了因子大于 127 的双精度素数和合数 FFT 大小的精度。

    • 略微缩短了某些 FFT 大小的计划时间。

2.2.9. cuFFT:12.2 版本

  • 新特性

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

    • 改进了 1000 多个大小在 62 到 16380 之间的 FFT 的性能。改进的性能涵盖了通过 PTX JIT 在多个 GPU 架构(从 Maxwell 到 Hopper GPU)上具有连续数据布局的 FFT 的数百个单精度和双精度情况。

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

  • 已解决问题

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

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

2.2.10. cuFFT:12.1 版本更新 1

  • 已知问题

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

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

2.2.11. cuFFT:12.1 版本

  • 新特性

    • 改进了 Hopper GPU 上数百个大小在 14 到 28800 之间的 FFT 的性能。改进的性能涵盖了具有连续数据布局的 FFT 的 542 多个单精度和双精度情况。

  • 已知问题

    • 从 CUDA 11.8 开始,对于在异位模式变换中加载数据的回调例程,不再支持 CUDA 图形。即将发布的版本将更新 cuFFT 回调实现,消除此限制。cuFFT 在 cuFFT 11.4 中弃用了基于单独编译的设备代码的回调功能。

  • 已解决问题

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

2.2.12. cuFFT:12.0 版本更新 1

  • 已解决问题

    • 减少了多 GPU、单批次、1D FFT 的暂存空间需求。

2.2.13. cuFFT:12.0 版本

  • 新特性

    • PTX JIT 内核编译允许为 Maxwell、Pascal、Volta 和 Turing 架构添加许多新的加速情况。

  • 已知问题

  • 已解决问题

    • cuFFT 计划每个计划都有意外的小内存开销(几 kB)。此问题已解决。

2.3. cuSOLVER 库

2.3.1. cuSOLVER:12.8 版本

  • 新特性

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

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

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

  • 已解决问题

    • 修复了在批处理大小至少为 2 时,对 cusolverDnXsyevBatched 使用 cuComplexcuDoubleComplex 的问题,当工作区在入口处未初始化为零时,可能会返回不正确的结果。

  • 弃用

    • 以下 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.2. cuSOLVER:12.6 Update 2 版本

  • 新特性

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

    • 新增 API cusolverDnXsyevBatched,用于求解统一批处理 Hermitian 特征值问题。

2.3.3. cuSOLVER:12.6 版本

  • 新特性

    • 改进了 cusolverDnXgesvdp() 的性能。

2.3.4. cuSOLVER:12.5 Update 1 版本

  • 已解决问题

    • 已解决调用 cusolverDnXlarft 时可能在 bufferOnDevice 上发生的越界访问问题。

2.3.5. cuSOLVER:12.5 版本

  • 新特性

    • 如果 jobu != 'N'jobvt != 'N',则改进了 cusolverDnXgesvdcusolverDn<t>gesvd 的性能。

    • 如果 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.6. cuSOLVER:12.4 Update 1 版本

  • 新特性

    • 改进了 cusolverDnXlarft 的性能。对于大型矩阵,速度提升可能超过 100 倍。现在 H100 上的性能始终优于 A100。cusolverDnXlarft 的更改也适度提升了 cusolverDn<t>ormqrcusolverDn<t>ormtrcusolverDnXsyevd 的速度。

    • 当寻求奇异向量时,改进了 cusolverDnXgesvd 的性能。计算左右奇异向量的作业配置速度提升高达 1.5 倍。

  • 已解决问题

    • cusolverDnXtrtri_bufferSize 现在返回正确的以字节为单位的工作区大小。

  • 弃用

    • 使用长期弃用的 cusolverDnPotrfcusolverDnPotrscusolverDnGeqrfcusolverDnGetrfcusolverDnGetrscusolverDnSyevdcusolverDnSyevdxcusolverDnGesvd 及其随附的 bufferSize 函数将导致弃用警告。可以使用编译时的 -DDISABLE_CUSOLVER_DEPRECATED 标志来关闭警告;但是,用户应使用 cusolverDnXpotrfcusolverDnXpotrscusolverDnXgeqrfcusolverDnXgetrfcusolverDnXgetrscusolverDnXsyevdcusolverDnXsyevdxcusolverDnXgesvd 以及相应的 bufferSize 函数来代替。

2.3.7. cuSOLVER:12.4 版本

  • 新特性

    • 引入了 cusolverDnXlarftcusolverDnXlarft_bufferSize API。cusolverDnXlarft 形成实数块反射器的三角形因子,而 cusolverDnXlarft_bufferSize 返回其所需的以字节为单位的工作区大小。

  • 已知问题

    • cusolverDnXtrtri_bufferSize` 返回不正确的所需设备工作区大小。作为一种变通方法,可以将返回的大小乘以数据类型的大小(例如,如果矩阵 A 的类型为 double,则为 8 字节)以获得正确的工作区大小。

2.3.8. cuSOLVER:12.2 Update 2 版本

  • 已解决问题

    • 修复了 cusolverDn<t>gesvd()cusolverDnGesvd()cusolverDnXgesvd() 的问题,如果 jobujobvt 不等于 ‘N’,则对于大于 18918 的矩阵,可能会导致错误的结果。

2.3.9. cuSOLVER:12.2 版本

  • 新特性

    • 新增 API,用于确保确定性结果或允许非确定性结果以提高性能。请参阅 cusolverDnSetDeterministicMode()cusolverDnGetDeterministicMode()。受影响的函数包括:cusolverDn<t>geqrf()cusolverDn<t>syevd()cusolverDn<t>syevdx()cusolverDn<t>gesvdj()cusolverDnXgeqrf()cusolverDnXsyevd()cusolverDnXsyevdx()cusolverDnXgesvdr()cusolverDnXgesvdp()

  • 已知问题

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

2.4. cuSPARSE 库

2.4.1. cuSPARSE:12.8 版本

  • 新特性

    • 增加了对 NVIDIA Blackwell GPU 的支持,在稀疏矩阵运算方面有显著的性能提升

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

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

  • 已解决问题

    • 修复了使用 CUDA_R_64F 数据类型和两个稠密矩阵 op(B) 和 C 之间内存布局不匹配时,cusparseSpMM 在使用 CUSPARSE_SPMM_CSR_ALG3 算法时导致“未对齐地址”错误的问题。[CUSPARSE-2081]

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

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

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

    • 解决了在 SpSV 中,当矩阵采用 SlicedELL 格式、下三角结构和对角元素时,发生不正确结果的问题。[CUSPARSE-1996]

  • 已知问题

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

  • 弃用

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

    • cusparseSpVV()

    • cusparseAxpby()

    • cusparseXgemvi()

    • cusparseSbsr2csr()

    • cusparseSgebsr2csr()

    • cusparseSgebsr2gebsr()

    • cusparseXbsrmm()(请改用 cusparseSpMM

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

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

2.4.2. cuSPARSE:12.6 Update 2 版本

  • 已解决问题

    • 重写了 cusparseSpMV_preprocess()cusparseSpMM_preprocess()cusparseSDDMM_preprocess() 的文档。文档现在解释了使用这些函数时代码必须满足的附加约束。[CUSPARSE-1962]

    • cusparseSpMV() 会期望外部缓冲区中的值在一次调用到下一次调用之间保持不变。如果情况并非如此,则可能会计算出不正确的结果或崩溃。[CUSPARSE-1897]

    • 如果对同一矩阵执行了 cusparseSpMM_preprocess(),则 cusparseSpMV_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.3. cuSPARSE:12.6 版本

  • 已知问题

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

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

    • 所有 cusparseSpMV 调用都必须使用相同的 external_buffer。[CUSPARSE-1897]

2.4.4. cuSPARSE:12.5 Update 1 版本

  • 新特性

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

  • 已解决问题

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

    • 当稀疏矩阵为 Blocked Ellpack 且稠密矩阵只有单列 (n=1) 时,cusparseSpMM_bufferSize() 会返回错误的大小。

    • k=0 时(例如,当 A 有零列时),cusparseSpMM 返回错误的结果。正确的行为是执行 C \*= beta。错误的行为是根本不修改 C

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

    • Sliced-ELLPACK cusparseSpSV 对于对角矩阵产生错误的结果。

    • Sliced-ELLPACK cusparseSpSV_analysis() 由于某些矩阵和某些切片大小的资源不足而失败。

2.4.5. cuSPARSE:12.5 版本

  • 新特性

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

  • 已解决问题

    • 当输出向量未对齐到 16 字节时,cusparseSpMV() 会引入无效的内存访问。

2.4.6. cuSPARSE:12.4 版本

  • 新特性

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

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

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

  • 已知问题

    • 当输出向量未对齐到 16 字节时,cusparseSpMV() 会引入无效的内存访问。

  • 已解决问题

    • 当稀疏向量有许多非零元素时,cusparseSpVV() 提供不正确的结果。

2.4.7. cuSPARSE:12.3 Update 1 版本

  • 新特性

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

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

2.4.8. cuSPARSE:12.3 版本

  • 新特性

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

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

  • 已知问题

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

    • 对于在矩阵 A 上使用切片 ELLPACK 格式和转置/共轭转置运算的 cusparseSpSV(),可能会发生错误的结果。

  • 已解决问题

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

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

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

2.4.9. cuSPARSE:12.2 Update 1 版本

  • 新特性

  • 已解决问题

    • 移除了 CUSPARSE_SPMM_CSR_ALG3 回退,以避免在算法选择过程中造成混淆。

    • 澄清了 cusparseSDDMM() 支持的操作。

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

    • 修复了在使用 1 基索引的 cusparseCsr2CscEx2() 的罕见边缘情况下出现的错误结果。

    • cusparseSpSM_bufferSize() 可能会请求略少于所需的内存。

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

  • 弃用

    • 一些遗留 API 已被正式弃用。已为所有这些 API 添加了编译时警告。

2.4.10. cuSPARSE:12.1 Update 1 版本

  • 新特性

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

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

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

2.4.11. cuSPARSE:12.0 Update 1 版本

  • 新特性

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

    • 改进了 NVIDIA Ampere 架构 GPU 上某些矩阵的 cusparseSpMM() alg2 混合精度性能。

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

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

  • 已解决问题

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

2.4.12. cuSPARSE:12.0 版本

  • 新特性

    • JIT LTO 功能 (cusparseSpMMOp()) 从驱动程序切换到 nvJitLto 库。从 CUDA 12.0 开始,用户需要链接到 libnvJitLto.so,请参阅 cuSPARSE 文档。还改进了 cusparseSpMMOpPlan() 的 JIT LTO 性能。

    • 为通用 API 引入了 const 描述符,例如,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 Math:12.8 版本

  • 新特性

    • 增加了对几种新的浮点数据类型的支持

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

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

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

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

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

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

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

    • 增加了几个新的 tanh 实现

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

      • htanh()h2tanh():用于标量和 packed 格式的半精度和 bfloat16 类型的 tanh 函数

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

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

    • 增加了对四精度 __float128 数据类型以及计算能力为 10.0 及更高版本的 GPU 上设备计算中选择的数学库操作的支持。有关详细信息,请参阅 CUDA Math API 文档。[CUMATH-5463]

  • 已知问题

    • 在转换为 MXFP4/MXFP6/MXFP8 格式时,开发人员不应使用 C++ 转换构造函数,这些构造函数目前仅实现向零舍入行为。转换为 MXFP 格式应使用向正无穷舍入,这在转换函数(如 __nv_cvt_bfloat16raw_to_e8m0)中作为选项实现。C++ 转换构造函数的行为将在未来的更新中更改。

2.5.2. CUDA Math:12.6 Update 1 版本

  • 已解决问题

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

2.5.3. CUDA Math:12.6 版本

  • 已知问题

    • 作为正在进行的兼容性测试的结果,NVIDIA 发现,如果在使用 MSVC 17.10 编译的程序中的 CPU 上使用,许多 CUDA Math Integer 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 Math:12.4 版本

  • 已解决问题

    • cuda_fp16/bf16 标头中的主机特定代码现在没有类型双关,并且在存在基于严格别名规则的优化的情况下应能正常工作。[4311216]

2.5.6. CUDA Math:12.3 版本

  • 新特性

    • SIMD Integer CUDA Math API 的性能得到了提升。

  • 已解决问题

    • 如果使用 -std=c++20 编译器选项编译,则来自 cuda_fp16.hcuda_bf16.h 标头的 __hisinf() Math API 会静默地产生错误的结果,这是由于底层 nvcc 编译器问题导致的,该问题已在 12.3 版本中解决。

  • 已知问题

    • cuda_fp16.hcuda_bf16.h 标头的用户应禁用基于主机编译器严格别名规则的优化(例如,将 -fno-strict-aliasing 传递给主机 GCC 编译器),因为这些优化可能会干扰 __half__half2__nv_bfloat16__nv_bfloat162 类型实现中使用的类型双关语,并将用户程序暴露于未定义的行为。请注意,标头通过以下方式抑制 GCC 诊断:#pragma GCC diagnostic ignored -Wstrict-aliasing。此行为可能会在标头的未来版本中得到改进。

2.5.7. CUDA Math:12.2 版本

  • 新特性

    • CUDA Math API for __half__nv_bfloat16 类型获得了可用性改进,包括对许多算术运算和转换的主机端 <emulated> 支持。

    • __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 Math:12.1 版本

  • 新特性

    • 改进了 atanfacosfasinfsinpifcospifpowferfftgammaf 的性能和精度。

2.5.9. CUDA Math:12.0 版本

  • 新特性

  • 已知问题

    • 双精度输入在默认的“舍入到最近的偶数模式”下,导致双精度除法算法产生伪溢出:本应输出 DBL_MAX 0x7FEF_FFFF_FFFF_FFFF 的地方却输出了无限结果。受影响的 CUDA Math API:__ddiv_rn()。受影响的 CUDA 语言操作:设备代码中的双精度 / 运算。

  • 弃用

    • 所有先前已弃用的未文档化的 API 已从 CUDA 12.0 中移除。

2.6. NVIDIA 性能基元 (NPP)

2.6.1. NPP:Release 12.4

  • 新特性

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

2.6.2. NPP:Release 12.0

  • 弃用

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

  • 已解决问题

    • NPP ResizeSqrPixel API 的性能问题现已修复,性能有所提升。

2.7. nvJPEG 库

2.7.1. nvJPEG:Release 12.8

  • 新特性

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

    • nvJPEG 库在编码期间现在使用明显更少的 GPU 内存,根据图像大小和色度二次采样模式,实现了 30% 到 50% 的内存节省。对于大于 5 MB 的图像(大约 2K x 1K 像素)和流行的二次采样模式(如 4:2:2 和 4:2:0),内存节省约为 50%。此外,nvJPEG 在处理大型或复杂图像时不再人为地耗尽内存,从而提高了其可靠性和性能。

  • 已解决问题

    • 解决了 nvJPEG 中阻止正确编码尺寸小于 25 像素的极小图像的问题。[4655922]

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

2.7.2. nvJPEG:Release 12.4

  • 新特性

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

    • Zero Copy 行为已更改:设置 NVJPEG_FLAGS_REDUCED_MEMORY_DECODE_ZERO_COPY 标志将不再启用 NVJPEG_FLAGS_REDUCED_MEMORY_DECODE

2.7.3. nvJPEG:Release 12.3 Update 1

  • 新特性

    • 新的 API:nvjpegBufferPinnedResizenvjpegBufferDeviceResize,可用于在使用前调整 pinned 和 device 缓冲区的大小。

2.7.4. nvJPEG:Release 12.2

  • 新特性

    • 增加了对 JPEG 无损解码(process 14,FO 预测)的支持。

    • nvJPEG 现在在 L4T 上受支持。

2.7.5. nvJPEG:Release 12.0

  • 新特性

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

  • 已解决问题

    • 修复了当使用大量线程测试 nvJPEGDecMultipleInstances 时导致运行时失败的问题。

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

  • 已知问题

    • 后端 NVJPEG_BACKEND_GPU_HYBRID - 无法处理具有额外扫描长度的位流。

  • 弃用

    • 在编码器中重用 Huffman 表 (nvjpegEncoderParamsCopyHuffmanTables)。

1

仅在选定的 Linux 发行版上可用

3. 通知

3.1. 通知

本文档仅供参考,不应被视为对产品的特定功能、条件或质量的保证。NVIDIA Corporation(“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 已被告知可能发生此类损害。尽管客户可能因任何原因遭受任何损害,NVIDIA 对本文所述产品的客户承担的总体和累积责任应根据产品的销售条款进行限制。

3.2. OpenCL

OpenCL 是 Apple Inc. 的商标,已授权 Khronos Group Inc. 使用。

3.3. 商标

NVIDIA 和 NVIDIA 徽标是 NVIDIA Corporation 在美国和其他国家/地区的商标或注册商标。其他公司和产品名称可能是与其相关的各自公司的商标。