1 CUDA 12.6 Update 1发行说明
1.1. CUDA工具包主要组件版本
CUDA组件 -
从CUDA 11开始,工具包中的各个组件都是独立版本的。 对于CUDA 12.6更新1,下表显示了版本:
CUDA驱动程序 -
运行CUDA应用程序需要系统至少具有一个支持CUDA的GPU和与CUDA Toolkit兼容的驱动程序。 请参见 表3 。有关支持CUDA的各种GPU产品的更多信息,请访问 https://developer.nvidia.com/cuda-gpus网站 . CUDA Toolkit的每个版本都需要CUDA驱动程序的最低版本。 CUDA驱动程序是向后兼容的,这意味着根据CUDA的特定版本编译的应用程序将继续在后续(更高)的驱动程序版本上运行。 有关兼容性的更多信息,请访问 https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#cuda -兼容性和升级 . 注释 :从CUDA 11.0开始,对工具包组件进行单独的版本控制,并对工具包本身进行版本控制,如下表所示。 CUDA次要版本兼容性所需的最低驱动程序版本如下所示。 CUDA次要版本兼容性在中详细描述 https://docs.nvidia.com/deploy/cuda-compatibility/index.html
1.2. 新功能
1.2.1. 通用CUDA
-
此版本中默认的Linux驱动程序安装发生了变化,更倾向于NVIDIA GPU开放内核模块 专有驱动程序。 开源驱动程序现在是默认的和推荐的安装选项。 重要提示: GPU开放内核模块驱动程序仅与图灵和更新的GPU兼容。 如果您的GPU来自较老的家庭(Maxwell、Pascal或Volta),则必须继续使用专有驱动程序。 有关更多信息,请参阅此博客帖子: https://developer.nvidia.com/blog/nvidia-transitions-fully-towards-open-source-gpu-kernel-modules/ . 有关详细信息,请参阅CUDA Linux安装指南: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html 新建 nvidia开放 元包可用于改进NVIDIA Open GPU内核模块的驱动程序安装。 [ 4752203 ]
1.2.2. CUDA编译器
有关PTX的更改,请参阅 https://docs.nvidia.com/cuda/parallel-thread-execution/#ptx -isa-版本-8-5 . 最新的主机编译器Clang-18支持。 支持设备代码中的Stack Canaries。 CUDA编译器现在可以在设备代码中插入堆栈金丝雀。 NVCC标志 --device-stack-protector=真 启用此功能。 堆栈金丝雀使得利用涉及堆栈局部变量的某些类型的内存安全漏洞变得更加困难。 编译器使用启发式方法评估每个函数中此类错误的风险。 只有那些被视为高风险的功能才使用堆栈金丝雀。 -
添加了一个新的编译器选项 -正向闪烁-前缀-opts (仅限Windows)。 如果指定了此标志,则将未知选项转发到宿主工具链 已启用( -前向未知选择 或 -将未知转发到主机链接器 或 -转发未知主机编译器 ),然后从命令行参数开始 带有“/”的被转发到宿主工具链。 例如: 无船承运人 -正向闪烁-前缀-opts -转发未知opts /T型 食品.cu 将转发旗帜 /T型 到主机编译器和链接器。 如果未指定此标志,则以开头的命令行参数 / 被视为输入文件。 例如, 无船承运人 /T型 食品.cu 将治疗 /T型 作为输入文件,以及Windows API函数 获取完整路径名() 用于确定完整路径名。 注意:此标志仅在Windows上受支持。 有关更多详细信息,请参阅 nvcc帮助 . 环境变量 NVCC_CBIN公司 为NVCC引入:用户可以设置 NVCC_CBIN公司 指定主机编译器,但其优先级低于命令行选项 -中央控制室 .如果 NVCC_CBIN公司 和 -中央控制室 都已设置,NVCC使用指定的主机编译器 -中央控制室 .
1.2.3. CUDA开发人员工具
1.3. 已解决的问题
1.3.1. CUDA编译器
-
补充 NVCC_CBIN公司 允许系统管理员全局指定主机编译器的环境变量。 如果 NVCC_CBIN公司 由系统管理员设置,并且 -中央控制室 由用户设置, 无船承运人 将选择由指定的主机编译器 -中央控制室 .如果 NVCC_CBIN公司 已设置并且 -中央控制室 未设置, 无船承运人 将选择由指定的主机编译器 NVCC_CBIN公司 。如果两者都未设置, 无船承运人 将使用默认编译器。 有关更多详细信息,请参阅 nvcc帮助 .
1.4. 已知问题和限制
从图形启动中调用CUDA动态并行(CDP)尾部启动时,可能会发生挂起。 [ 4718251 ] -
要使用升级 库达 元包:[ 4752050 ] -
在Ubuntu 20.04上,首先切换到打开内核模块: $ 苏多 恰当的 - 得到 安装 - V(V) 英维迪亚 - 内核 - 来源 - 打开 $ 苏多 恰当的 - 得到 安装 英维迪亚 - 打开 在基于dnf的发行版上,必须禁用模块流: $ 回声 “module_hotfixes=1” | 球座 - 一 / 等 / 百胜 . 回购 . d日 / 库达 * . 回购 $ 苏多 dnf公司 安装 -- 允许 英维迪亚 - 打开 $ 苏多 dnf公司 模块 重置 英维迪亚 - 司机
-
在Azure Linux上,要加载NVIDIA内核模块 内核_锁定 必须通过删除来禁用引导参数 锁定=完整性 来自GRUB引导加载程序条目。 [ 4721469 ] -
在SLES 15.6上安装Arm SBSA驱动程序时,为了正确完成安装,必须立即重新启动系统。 这将允许modprobe为设置权限 /开发/nvidia* 设备节点正确。 [ 4775942 ] -
如果不这样做,并且nvidia-smi以root身份运行,则可能会使用不正确的权限创建设备节点。 如果发生这种情况,可以使用以下方法进行修复: $sudo chown-R:视频/dev/nvidia*
-
-
用户可能会遇到生成失败并出现错误 LNK2001: 未解决 外部的 符号 警卫检查呼叫$fo$ 使用最新发布的Windows SDK 10.0.26100(2024年5月)时。 此问题影响使用Visual Studio 2019和工具集v142构建的项目(包括CUDA示例)。 在Microsoft提供正式解决方案之前,用户可以通过以下解决方案解决此问题。 解决方法: 使用Visual Studio 2022和工具集v143; 使用Visual Studio 2019和工具集v142构建时,请选择以前的Windows SDK版本。
1.5. 弃用或删除的功能
1.5.1. 弃用或丢弃的操作系统
对Microsoft Windows 10 21H2的支持在12.6中取消。 不支持Microsoft Windows 10 21H2(SV1)。 不支持Debian 11.9。
1.5.2. 弃用的工具链
Microsoft Visual C/C++(MSVC)2017
GCC 7.3之前的所有GCC版本
1.5.3. CUDA工具
不支持CUDA-GDB的macOS主机客户端。 它将在即将发布的版本中删除。
2 CUDA图书馆
CUDA数学库工具链使用C++11功能,主机上需要一个与C++11兼容的标准库(libstdc++>=20150422)。
2.1. cuBLAS库
2.1.1. cuBLAS:12.6版更新1
-
已知问题 立方体LtMatmul 可以忽略用户指定的偏差或辅助数据类型( CUBLASLT_MATMUL_DESC_BIAS_DATA_类型 和 立方体体积_体积_体积_体积_体积_数据类型 )对于FP8 matmul操作,如果这些数据类型与记录的不匹配 中的限制 立方体LtMatmulDescAttributes_t . [ 4750343 ] 设置 CUDA_模块_加载 到 爱格 由于以下原因,可能导致料斗GPU上的库加载时间更长 PTX内核的JIT编译。 可以通过将此环境变量设置为 LAZY公司 . [ 4720601 ] 立方体LtMatmul 对于INT8输入,INT32累加、INT8输出和FP32比例因数可能会产生 当 分裂 使用缩减。 要解决此问题,可以使用 cublasLtMatmulAlgoConfigSet属性 将缩减方案设置为无,并将 分裂 值设置为1。 [ 4751576 ]
2.1.2. cuBLAS:12.6版
-
已知问题 使用INT8输入、INT8输出和FP32计算矩阵乘法和尾声 当使用第二个内核进行计算时,比例因子可能会有数值错误 结语。 这是因为第一个GEMM内核转换中间结果 从FP32到INT8,并将其存储以供后续尾声内核使用。 如果值为 在结束语和结束语将其带入 INT8范围内,将出现数值错误。 该问题在CUDA 12之前就已经存在 而且没有已知的解决方法。 [ 古巴比索-6831 ] 立方体LtMatmul 可以忽略用户指定的偏差或辅助数据类型 ( CUBLASLT_MATMUL_DESC_BIAS_DATA_类型 和 立方体体积_体积_体积_体积_体积_数据类型 ) 对于FP8 matmul操作,如果这些数据类型与记录的限制不匹配 在里面 立方体LtMatmulDescAttributes_t . [ 4750343 ]
-
已解决的问题 立方体LtMatmul 当矩阵的数据类型为 A类 和 B类 是不同的 FP8(例如, A类 是 古巴_R_8F_E4M3 和 B类 是 古巴_R_8F_E5M2 )和矩阵 天 布局是 CUBLASLT_ORDER_ROW按钮 . [ 4640468 ] 立方体Lt 在某些情况下,当 A类 , B类 、和 C类 属于类型 古巴_R_8I 和 计算类型为 CUBLAS_COMPUTE_32I计算机 . [ 4381102 ] cuBLAS在使用 K(K) 等于0。 [ 4614629 ]
2.1.3. cuBLAS:12.5版更新1
-
新功能 针对大型语言模型的矩阵乘法性能改进,特别是针对Hopper GPU上的小批量大小。
-
已知问题 对于跨越批次的情况,料斗GPU可能不支持偏差尾声(没有ReLU或GeLU)。 解决方法是手动执行批处理。 这将在未来的版本中修复。 cublasGemm成批分组Ex 和 立方<t>gemmGroupedBatched CPU开销大。 这将在即将发布的版本中解决。
-
已解决的问题 在极少数情况下,在Hopper GPU上与GEMM同时执行SYMM/HEMM可能会导致主机代码中出现争用情况,从而导致非法内存访问CUDA错误。 [ 4403010 ] 立方体LtMatmul 在以下条件下,可能会在Pascal GPU上产生非法指令CUDA错误:批处理大于1,beta不等于0,并且计算不正确(C!=D)。 [ 4566993 ]
2.1.4. cuBLAS:12.5版
-
新功能 cuBLAS添加了一个实验API,以支持混合精度分组批处理GEMM。 这样可以使用FP16或BF16输入/输出和FP32计算类型的成组批处理GEMM。 请参阅 立方体宝石分组批量Ex 了解更多详细信息。
-
已知问题 立方体LtMatmul 忽略的输入 CUBLASLT_MATMUL_DESC_D_SCALE_POINTER按钮 和 CUBLASLT_MATMUL_DESC_EPILOGUE_AUX_刻度指针 如果相应矩阵的元素不是FP8类型。
-
已解决的问题 立方体LtMatmul 忽略了所提供的比例类型和文档隐含的比例类型之间的不匹配,假设是后者。 例如,不支持的配置 立方体LtMatmul 如果缩放类型为FP32,所有其他类型为FP16,则运行时会隐式假设缩放类型是FP16,并产生错误的结果。 cuBLAS SYMV因大n维失败:ssymv为131072及以上,csymv和dsymv为92673及以上,zsymv为65536及以上。
2.1.5. cuBLAS:12.4版更新1
-
已知问题 将cuBLAS句柄流设置为 cudaStreamPerThread每线程 并通过设置工作区 cubrasSet工作区 将导致任何后续 cubrasSet工作区 呼叫失败。 这将在即将发布的版本中修复。 立方体LtMatmul 忽略所提供的缩放类型和文档中隐含的缩放类型之间的不匹配,并假定是后者。 例如,不支持的配置 立方体LtMatmul 如果缩放类型为FP32,所有其他类型为FP16,则运行时会隐式假设缩放类型是FP16,这可能会产生错误的结果。 这将在即将发布的版本中修复。
-
已解决的问题 立方体LtMatmul 忽略了 CUBLASLT_MATMUL_DESC_AMAX_D_POINTER(CUBLASLT _ MATMUL _ DESC_AMAX_D_指针) 而不是返回错误。 特别是,当输出数据类型也是FP8时,当前仅支持FP8 Matmul计算D的绝对最大值( 古巴_R_8F_E4M3 或 古巴_R_8F_E5M2 ). 减少了一些cuBLASLt API的主机端开销: 立方体LtMatmul() , cublasLtMatmulAlgoCheck() 、和 cublasLtMatmulAlgoGetHeuristic() 该问题在CUDA工具包12.4中介绍。 cublasLtMatmul() 和 cublasLtMatmulAlgoGetHeuristic() 可能导致一些基于Hopper的GPU(包括多实例GPU(MIG))出现浮点异常(FPE)。 该问题在cuBLAS 11.8中介绍。
2.1.6. cuBLAS:12.4版
-
新功能 cuBLAS添加了实验性API,以支持分组批处理GEMM的单精度和双精度。 单精度也支持数学模式, CUBLAS_TF32_传感器_ OP_MATH 分组批处理模式允许您同时求解不同维度(m、n、k)、领先维度(lda、ldb、ldc)、换位(transa、transb)和缩放因子(alpha、beta)的GEMM。 请参阅 成批的gemmGrouped 了解更多详细信息。
-
已知问题 使用创建当前上下文时 cuGreenCtx创建() ,cuBLAS无法正确检测可用SMs的数量。 用户可以使用API(例如 cublasSetSmCountTarget() . 当alpha为零且指针模式设置为 CUBLAS_POINTER_MODE_DEVICE(CUBLAS_指针_模式_偏差) 这与cuBLAS 12.3更新1中记录的已知问题相同。 立方体LtMatmul K等于1,结束语 CUBLASLT_EPILOGUE_D {释放,GELU}_BGRAD 可以在外访问工作区。 自cuBLAS 11.3更新1以来,该问题一直存在。 立方体LtMatmul 其中K等于1并且结束语 CUBLASLT_EPILOGUE_D(RELU,GELU) 如果没有提供工作区,可能会产生非法内存访问。 该问题自cuBLAS 11.6以来一直存在。 当在CUDA图形流捕获中捕获时,cuBLAS例程可以创建 内存节点 通过使用流顺序分配API, cudaMalloc异步 和 cudaFreeAsync(库达自由异步) 。但是,由于中当前不支持内存节点 子图 或启动的图形 从设备 ,在这种情况下,尝试捕获cuBLAS例程可能会失败。 要避免此问题,请使用 cublasSetWorkspace() 函数提供用户拥有的工作区内存。
2.1.7. cuBLAS:12.3版更新1
-
新功能 改进了具有高逐出率的工作负载的启发式缓存的性能。
-
已知问题 当alpha为零且指针模式设置为 CUBLAS_POINTER_MODE_DEVICE(CUBLAS_指针_模式_偏差) 。预期的行为是跳过相应的计算。 您可能会遇到以下问题:(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(CUBLAS_指针_模式_主机) .
-
已解决的问题 在以下条件下,cuBLASLt matmul运算可能会错误计算输出:矩阵A和B的数据类型为FP8,矩阵C和D的数据类型是FP32、FP16或BF16,β值为1.0,C和D矩阵相同,尾声包含GELU激活函数。 当使用CUDA Toolkit 12.2 update 1或更早版本中的cuBLASLt编译的应用程序使用CUDA工具箱12.2 uplate 2或CUDA Toolkit 12.3中的cuPLASlt运行时,矩阵乘法描述符使用 cublasLtMatmulDescInit() 有时不尊重使用 cublasLtMatmulDescSetAttribute() . 修复了在多进程服务(MPS)下料斗GPU上创建cuBLAS或cuBLASLt句柄的问题。 立方体LtMatmul K等于1,结束语 CUBLASLT_EPILOGUE_BGRAD{A、B} 可能返回了错误的偏差梯度结果。
2.1.8. cuBLAS:版本12.3
-
新功能 改进了NVIDIA L40S Ada GPU的性能。
-
已知问题 cuBLASLt matmul运算在以下情况下可能会计算错误输出:矩阵A和B的数据类型为FP8,矩阵C和D的数据类型是FP32、FP16或BF16,β值为1.0,C和D矩阵相同,尾声包含GELU激活函数。 当使用CUDA Toolkit 12.2 update 1或更早版本中的cuBLASLt编译的应用程序使用CUDA工具箱12.2 upport 2或更高版本中的cuBLASLt运行时,使用 cublasLtMatmulDescInit() 可能不考虑使用的属性更改 cublasLtMatmulDescSetAttribute() 。要解决此问题,请使用创建矩阵乘法描述符 立方体LtMatmulDescCreate() 而不是 cublasLtMatmulDescInit() 。这将在即将发布的版本中修复。
2.1.9. cuBLAS:12.2版更新2
-
新功能 cuBLASLt现在将尝试分解单个gemm内核无法运行的问题。 它通过将问题划分为较小的块并多次执行gemm内核来实现这一点。 这提高了非常大的m、n或批次大小案例的功能覆盖率,并使从cuBLAS API到cuBLASLt API的转换更加可靠。
-
已知问题 cuBLASLt matmul运算在以下情况下可能会计算错误输出:矩阵A和B的数据类型为FP8,矩阵C和D的数据类型是FP32、FP16或BF16,β值为1.0,C和D矩阵相同,尾声包含GELU激活函数。
2.1.10. cuBLAS:12.2版
-
已知问题 当MPS与一起使用时,料斗架构GPU上的cuBLAS初始化失败 CUDA_MPS_ACTIVE_THREAD_PERCENTAGE系列 设置为小于100%的值。 目前没有解决此问题的解决方案。 一些料斗内核对具有 CUBLASLT_EPILOGUE_RELU_BIAS按钮 或 CUBLASLT_EPILOGUE_GELU_BIAS公司 和一个非零 CUBLASLT_MATMUL_DESC_BIAS_BATCH_STRIDE(CUBLASLT _ MATMUL_DESC_BIAS_巴奇_斯特里德) 。内核将第一批的偏差向量应用于所有批次。 这将在未来的版本中修复。
2.1.11. cuBLAS:12.1版更新1
-
新功能 支持NVIDIA Ada GPU上的FP8。 提高了NVIDIA L4 Ada GPU的性能。 引入了一个API,用于指示cuBLASLt库不使用某些CPU指令。 这在cuBLASLt启发式使用的某些CPU指令对CPU性能产生负面影响的一些罕见情况下非常有用。 请参阅 https://docs.nvidia.com/cuda/cublas/index.html#禁用 -cpu指令 .
-
已知问题 使用 立方体矩阵布局创建() 函数,指向的对象 cublasLtMatrix布局_t 小于 cublasLtMatrix布局不透明_t (但足以支撑内部结构)。 因此,不应取消引用或显式复制对象,因为这可能会导致越界访问。 如果需要序列化布局或复制布局,建议手动分配大小为的对象 尺寸(立方体Lt矩阵布局Opaque_t) 字节,并使用初始化 cublasLtMatrix布局初始() 功能。 这同样适用于 立方LtMatmulDesc_t 和 cublasLtMatrix转换描述_t 。通过确保 cublasLtMatrix布局创建() 至少分配 大小(cublasLtMatrixLayoutOpaque_t) 字节。
2.1.12. cuBLAS:12.0版更新1
-
新功能 提高了NVIDIA H100 SXM和NVIDIA H100 PCIe GPU的性能。
-
已知问题 为了在NVIDIA Hopper体系结构上实现最佳性能,cuBLAS需要分配比以前体系结构(8 MiB)更大的内部工作空间(64 MiB)。 在当前和以前的版本中,cuBLAS分配了256 MiB。 这将在未来的版本中解决。 一个可能的解决方法是设置 CUBLAS_WORKSPACE_CONFIG(CUBLAS_工作空间_配置) 在NVIDIA Hopper体系结构上运行cuBLAS时,环境变量设置为:32768:2。
-
已解决的问题 减少了不使用cublasLt启发式缓存导致的cuBLAS主机端开销。 这始于CUDA Toolkit 12.0版本。 增加了向前兼容的单精度复合GEMM,不需要工作空间。
2.1.13. cuBLAS:12.0版
-
新功能 立方体LtMatmul 现在支持非零beta的FP8。 补充 整数64 支持更大问题规模的API; 参考 64位整数接口 . -
为添加更多特定于Hopper的内核 立方体LtMatmul 带有尾语: CUBLASLT_EPILOGUE_BGRAD{A、B} CUBLASLT_EPILOGUE公司_ {RELU、GELU}_AUX CUBLASLT_EPILOGUE_D{RELU、GELU}
通过添加以前仅在Windows和Linux的x86_64体系结构上支持的Hopper内核,改进了arm64-sbsa上的Hoppe性能。
-
已知问题 对于不需要工作空间的单精度复杂gemm,没有向前兼容的内核。 支持将在以后的版本中添加。
-
已解决的问题 修复了NVIDIA安培架构和更新GPU的问题,其中 立方体LtMatmul 结尾 CUBLASLT_EPILOGUE_BGRAD{A、B} 和一个非平凡的约简方案(也就是说,不是 CUBLASLT_REDULCTION_SCHEME_NONE(CUBLASLT _还原_化学_无) )可能会返回错误的偏差梯度结果。 立方体LtMatmul 对于gemv-like情况(即m或n等于1),可以忽略 CUBLASLT_EPILOGUE_RELU_BIAS按钮 和 CUBLASLT_EPILOGUE_BIAS公司 结语。
折旧 不允许包含 古巴。 小时 和 立方v2.h 在同一个翻译单元中。 -
远离的: CUBLAS_MATMUL_阶段_16x80 和 CUBLAS_MATMUL_阶段_64x80 从 cublasLtMatmulStages_t 。没有内核再利用这些阶段。 立方体Lt3mMode_t , CUBLASLT_MATMUL_PREF_MATH_MODE_任务 、和 CUBLASLT_MATMUL_PREF_GAUSSIAN_MODE_任务 从 cublasLtMatmulPreferenceAttribute属性_t 。相反,请使用中相应的标志 cublasLt数字隐含标志_t . CUBLASLT_MATMUL_PREF_POINTER_MODE_任务 , 立方体体积 、和 立方体体积_体积_参考_体积_目标 从 cublasLtMatmulPreferenceAttribute属性_t 。相应的参数直接取自 立方LtMatmulDesc_t . CUBLASLT_POINTER_MODE_MASK_NO_过滤 从 cublasLtPointer模式任务_t 。此面罩仅适用于 立方体体积_体积_参考_体积_模型_掩码 已删除。
2.2. 袖珍咖啡馆
2.2.1. 袖口:释放12.6
-
已知问题 大小为1的FFT istride/鸵鸟 > 1 FP16当前不支持。 在CTK 12.1或更早版本中,此用例存在已知的内存问题。 A类 袖口_无效_尺寸 CTK 12.2或更高版本中抛出错误。 [ 4662222 ]
2.2.2. 袖口:释放12.5
-
新功能 -
补充 实时链路时间优化(JIT LTO)内核,用于改进多种大小的R2C和C2R FFT的性能 . 我们建议测试使用和不使用JIT LTO内核的R2C/C2R用例,并比较结果性能。 您可以使用 per-plan特性 袖口API。
-
2.2.3. cuFFT:12.4版更新1
-
已解决的问题 来自 cuFFT LTO EA库 错误地添加到cuFFT Advanced API标题( 袖口Xt。 小时 )在CUDA 12.4中。 此例程现在已从收割台中删除。
2.2.4. 袖口:12.4版
-
新功能 补充 实时链接时间优化(JIT LTO)内核 以提高具有64位索引的FFT的性能。 补充 按计划属性 到袖口API。 可以利用这些新的例程让用户更好地控制cuFFT的行为。 目前,它们可以用于为64位FFT启用JIT LTO内核。 提高了某些单精度(fp32)FFT情况的精确度,尤其是涉及较大尺寸的FFT。
-
已知问题 错误地将cuFFT LTO EA库中的例程添加到cuFFT Advanced API头( 袖口Xt。 小时 ). cuFFT不支持此例程,在将来的版本中将从标头中删除。
-
已解决的问题
2.2.5. 袖口:12.3版更新1
-
已知问题 在与创建计划不同的上下文中执行实际到复杂(R2C)或复杂到实际(C2R)计划可能会导致未定义的行为。 这个问题将在即将发布的cuFFT中修复。
-
已解决的问题 复杂到复杂(C2C)执行功能( 袖口Exec 和类似的)现在可以在内核启动期间发生错误时正确地出错,例如由于缺少CUDA上下文。
2.2.6. 袖口:12.3版
-
新功能 回调内核在资源使用方面更加宽松,并且将使用更少的寄存器。 提高了因子大于127的双精度素数和复合FFT大小的精度。 对于某些FFT大小,计划时间略有改进。
2.2.7. 袖口:12.2版
-
新功能 袖口SetStream 可以在多GPU计划中使用来自任何GPU上下文的流,而不是来自中列出的第一个GPU的主上下文 袖口XtSetGPU . 改进了1000+个尺寸从62到16380的FFT的性能。 性能的改进跨越了数百种具有连续数据布局的FFT的单精度和双精度情况,通过PTX JIT跨越了多个GPU架构(从Maxwell到Hopper GPU)。 与12.1版本中的cuFFT相比,减少了静态库的大小。
-
已解决的问题 当线程同时创建和访问有1023个以上活动计划的计划时,cuFFT不再显示竞争条件。 当多线程调用时,cuFFT不再显示竞争条件 袖口XtSetGPU 同时。
2.2.8. cuFFT:12.1版更新1
-
已知问题 当一个线程调用时,cuFFT显示竞争条件 袖口创建 (或 袖口摧毁 )另一个线程调用任何API(除了 袖口创建 或 袖口摧毁 ),并且当活动计划的总数超过1023个时。 当多线程调用时,cuFFT显示竞争条件 袖口XtSetGPU 同时执行不同的计划。
2.2.9. 袖口:12.1版
-
新功能 数百个大小从14到28800不等的FFT在料斗GPU上的性能得到了改进。 对于具有连续数据布局的FFT,改进的性能跨越了542个单精度和双精度案例。
-
已知问题 从CUDA 11.8开始,CUDA Graphs不再支持以非常规模式转换加载数据的回调例程。 即将发布的版本将更新cuFFT回调实现,消除此限制。 基于cuFFT 11.4中单独编译的设备代码,cuFFT已弃用回调功能。
-
已解决的问题 如果在创建计划时使用的CUDA上下文在程序退出之前被破坏,则cuFFT不再在程序退出时使用计算机消毒剂产生错误。
2.2.10. 袖口:12.0版更新1
-
已解决的问题 减少了多GPU、单批次、1D FFT的划痕空间要求。
2.2.11. 袖口:12.0版
-
新功能 PTX JIT内核编译允许为Maxwell、Pascal、Volta和Turing架构添加许多新的加速案例。
-
已知问题 由于PTX JIT编译,cuFFT计划生成时间增加。 请参阅 计划初始化时间 .
-
已解决的问题 cuFFT计划的每个计划都有一个无意的小内存开销(几kB)。 此问题已解决。
2.3. cuSOLVER库
2.3.1. cuSOLVER:12.6版
-
新功能 的性能改进 cusolverDnXgesvdp() .
2.3.2. cuSOLVER:12.5版更新1
-
已解决的问题 上的潜在出站访问 设备上的缓冲区 通过调用 cusolverDnXlarft公司 已解决。
2.3.3. cuSOLVER:12.5版
-
新功能 的性能改进 cusolverDnXgesvd公司 和 cusolverDn<t>gesvd 如果 乔布 != “否” 或 工作 != “否” . 的性能改进 cusolverDnXgesvdp公司 如果 jobz公司 = CUSOLVER_EIG_MODE_NOVECTOR(缓冲_EIG_MODE_NOVECTOR) . 更低的工作空间要求 cusolverDnXgesvdp公司 对于高瘦矩阵。
-
已知问题 -
使用CUDA工具包12.4更新1,值 低密度晶体管 > k 在的呼叫中 cusolverDnXlarft公司 可能导致对的出站内存访问 设备上的缓冲区 。作为一种解决方法,可以分配一个较大的设备工作区缓冲区 workspaceInBytesOnDevice=ALIGN_32((ldt*k + n*k)*数据类型大小(数据类型T) ,使用 汽车 对准32 = []( 整数64_t val值 ) { 返回 (( val值 + 31 ) / 32 ) * 32 ; }; 和 汽车 数据类型大小 = []( cuda数据类型 日期 ) { 如果 ( 日期 == 古巴_R_32F ) 返回 大小 ( 浮动 ); 如果 ( 日期 == 古巴_R_64F ) 返回 大小 ( 双重的 ); 如果 ( 日期 == 古巴_C_32F ) 返回 大小 ( cu复合物 ); 如果 ( 日期 == CUDA_C_64F ) 返回 大小 ( cuDouble复合物 ); };
-
2.3.4. cuSOLVER:12.4版更新1
-
新功能 的性能 cusolverDnXlarft公司 已得到改进。 对于大型矩阵,加速比可能超过100倍。 H100上的性能始终优于A100。 中的变化 cusolverDnXlarft公司 也导致了适度的加速 cusolverDn<t>ormqr , cusolverDn<t>ormtr 、和 cusolverDnXsyevd公司 . 的性能 cusolverDnXgesvd公司 当寻找奇异向量时已经得到了改进。 计算左右奇异向量的作业配置速度快1.5倍。
-
已解决的问题 cusolverDnXtrtri_bufferSize 现在返回正确的工作空间大小(以字节为单位)。
-
折旧 使用长期弃用 cusolverDnCtrl , cusolverDnPolrs(库索尔弗德波尔茨) , 库索尔文DnGeqrf , cusolverDnGetrf公司 , cusolverDnGetrs公司 , cusolverDnSyevd公司 , cusolverDnSyevdx公司 , cusolverDnGesvd公司 ,及其随行人员 缓冲区大小 函数将导致弃用警告。 可以使用关闭警告 -DDISABLE_CUSOLVER_DEPRECATED(DDISABLE _通用_升级) 编译时标记; 然而,用户应该使用 cusolverDnXportf公司 , cusolverDnXports公司 , 库索尔文DnXgeqrf , cusolverDenX获取rf , cusolverDnXgetrs公司 , cusolverDnXsyevd公司 , cusolverDnXsyevdx公司 , cusolverDnXgesvd公司 ,以及相应的 缓冲区大小 而不是函数。
2.3.5. cuSOLVER:12.4版
-
新功能 cusolverDnXlarft公司 和 cusolverDnXlarft_bufferSize 引入了API。 cusolverDnXlarft公司 形成真实块反射器的三角形因子,而 cusolverDnXlarft_bufferSize 返回其所需的工作区大小(以字节为单位)。
-
已知问题 cusolverDnXtrtri_bufferSize` 返回不正确的所需设备工作区大小。 作为一种解决方法,可以将返回的大小乘以数据类型的大小(例如,如果矩阵a是double类型,则为8字节),以获得正确的工作空间大小。
2.3.6. cuSOLVER:12.2版更新2
-
已解决的问题 修复了一个问题 cusolverDn<t>gesvd() , cusolverDnGesvd() 、和 cusolverDnXgesvd() ,对于大于18918的矩阵,如果 乔布 或 工作 不等于' N个 ’.
2.3.7. cuSOLVER:12.2版
-
新功能 一种新的API,用于确保确定性结果或允许非确定性结果以提高性能。 请参见 cusolverDnSetDeterministicMode() 和 cusolverDnGetDeterministicMode() 。受影响的功能包括: cusolverDn<t>geqrf() , cusolverDn<t>syevd() , cusolverDn<t>syevdx() , cusolverDen<t>gesvdj() , cusolverDnXgeqrf() , cusolverDnXsyevd() , cusolverDnXsyevdx() , cusolverDnXgesvdr() 、和 cusolverDnXgesvdp() .
-
已知问题 并发执行 cusolverDn<t>getrf() 或 cusolverDnXgetrf() 在同一设备上的不同非阻塞CUDA流中可能会导致死锁。
2.4. cuSPARSE库
2.4.1. cuSPARSE:版本12.6
-
已知问题 cusparseSpMV_preprocess() 如果对同一矩阵调用两次或多次,则运行SpMV计算[ 海关-1897 ] cusparseSpMV_preprocess() 在以下情况下不会运行 cusparseSpMM_preprocess() 在同一矩阵上执行,反之亦然。 [ 海关-1897 ] 必须将相同的external_buffer用于所有 cusparseSpMV公司 电话。 [ 海关-1897 ]
2.4.2. cuSPARSE:12.5版更新1
-
新功能 在中添加了对BSR格式的支持 cusparseSpMM标准 .
-
已解决的问题 cusparseSpMM() 有时会得到错误的结果 α=0 , 数量_批次>1 , 批量运输 指示批之间存在填充。 cusparseSpMM_bufferSize() 当稀疏矩阵为Blocked Ellpack且密集矩阵只有一列(n=1)时,将返回错误的大小。 cusparseSpMM标准 返回错误的结果 k=0 (例如,当A有零列时)。 正确的行为是 C类 \*= 贝塔 。错误行为没有修改 C类 完全。 cusparse创建切片Ell 当切片大小大于矩阵行数时,将返回错误。 切片ELLPACK cusparseSpSV公司 对角线矩阵产生了错误的结果。 切片ELLPACK cusparseSpSV_analysis() 由于某些矩阵和某些切片大小的资源不足,失败。
2.4.3. cuSPARSE:12.5版
-
新功能 增加了对SpMV中混合输入类型的支持:单精度输入矩阵、双精度输入向量、双精度输出向量。
-
已解决的问题 cusparseSpMV() 当输出向量未对齐到16字节时,会引入无效的内存访问。
2.4.4. cuSPARSE:12.4版
-
新功能 增加了稀疏矩阵向量乘法的预处理步骤 cusparseSpMV_preprocess() . 添加了对混合实数类型和复杂类型的支持 cusparseSpMM() . 添加了新API cusparseSpSM_updateMatrix() 在分析和求解阶段更新稀疏矩阵 cusparseSpSM() .
-
已知问题 cusparseSpMV() 当输出向量未对齐到16字节时,会引入无效的内存访问。
-
已解决的问题 cusparseSpVV() 当稀疏向量有许多非零时,提供了错误的结果。
2.4.5. cuSPARSE:12.3版更新1
-
新功能 增加了对64和128英寸块大小的支持 cusparseSDDMM() . 添加了预处理步骤 cusparseSDDMM_reprocess() 对于BSR cusparseSDDMM() 这有助于提高主计算阶段的性能。
2.4.6. cuSPARSE:12.3版
-
新功能 这个 cusparseSpSV_bufferSize() 和 cusparseSpSV_analysis() 例程现在接受密集向量的NULL指针。 这个 cusparseSpSM_bufferSize() 和 cusparseSpSM_analysis() 例程现在接受值为NULL指针的密集矩阵描述符。
-
已知问题 这个 cusparseSpSV_analysis() 和 cusparseSpSM_analysis() 例程阻止调用/不异步。 可能会出现错误的结果 cusparseSpSV() 在矩阵A上使用切片ELLPACK格式和转置/转置共轭运算。
-
已解决的问题 cusparseSpSV() 在某些情况下提供了不确定的结果。 修复了导致 cusparseSpSV_analysis() 有时在多线程环境中挂起。 修复了一个问题 cusparseSpSV() 和 cusparseSpSV() 当输出向量/矩阵或输入矩阵包含NaN时,有时会产生错误的输出。
2.4.7. cuSPARSE:12.2版更新1
-
新功能 现在,在创建描述符以进行调试的过程中,该库提供了将稀疏矩阵转储到文件的机会。 请参阅日志API https://docs.nvidia.com/cuda/cussparse/index.html#cusparse -日志api .
-
已解决的问题 远离的 海关_SPMM_CSR_ALG3 回退以避免算法选择过程中的混淆。 阐明支持的操作 cusparseSDDMM() . cusparseCreateConstSlicedEll() 现在使用 常数 指针。 修复了罕见边缘情况下的错误结果 cusparseCsr2CscEx2() 以1为基数分度。 cusparseSpSM_bufferSize() 可能要求的内存比需要的略少。 cusparseSpMV() 现在只在严格需要时检查缓冲区指针的有效性。
-
折旧 一些遗留API已被正式弃用。 编译时警告已添加到所有警告中。
2.4.8. cuSPARSE:12.1版更新1
-
新功能 为支持SDDMM例程的通用API引入了块稀疏行(BSR)稀疏矩阵存储( cusparseSDDMM系统 ). 为支持稀疏矩阵向量乘法的通用API引入了切片Ellpack(SELL)稀疏矩阵存储格式( cusparseSpMV公司 )和具有单个右手边的三角形解算器( cusparseSpSV公司 ). 添加了新的API调用( cusparseSpSV_更新矩阵 )在分析步骤后,用一个右手边更新稀疏三角形解算器中的矩阵值和/或矩阵对角线。
2.4.9. cuSPARSE:12.0版更新1
-
新功能 cusparseSDDMM() 现在支持混合精度计算。 改进 cusparseSpMM() NVIDIA安培架构GPU上一些矩阵的alg2混合精度性能。 改进 cusparseSpMV() 性能与新的负载平衡算法。 cusparseSpSV() 和 cusparse.SpSM() 现在支持就地计算,即输出和输入向量/矩阵具有相同的内存地址。
-
已解决的问题 cusparseSpSM() 如果RHS矩阵的前导维数(ld)大于列/行数,则可能会产生错误的结果。
2.4.10. cuSPARSE:12.0版
-
新功能 JIT LTO功能( cusparseSpMMOp() )从驱动程序切换到nvJitLt到库。 从CUDA 12.0开始,用户需要链接到 libnvJit有限公司 ,请参阅 cuSPARSE文档 JIT LTO性能也得到了改进 cusparseSpMMOpPlan() . 例如,为通用API引入了常量描述符, cusparseConstSpVecGet() 现在,Generic API接口清楚地声明了cuSPARSE函数何时修改描述符及其数据。 向添加了两个新算法 cusparseSpGEMM() 内存利用率较低。 第一种算法计算中间产物数量的严格界限,而第二种算法允许将计算分为块。 补充 整数8_t 支持 cusparseGather() , cusparseScatter() 、和 cusparseCsr2cscEx2() . 改进 cusparseSpSV() 分析和求解阶段的性能。 改进 cusparseSpSM() 分析和求解阶段的性能。 改进 cusparseSDDMM() 性能并增加了对批处理计算的支持。 改进 cusparseCsr2cscEx2() 性能。
-
已解决的问题 cusparseSpSV() 和 cusparseSpSM() 可能会产生错误的结果。 cusparsedDnMatGetStridedBatch() 不接受 批次Stride == 0 .
-
折旧 删除了不推荐使用的CUDA 11.x API、枚举器和描述符。
2.5. 数学库
2.5.1. CUDA数学:12.6版更新1
-
已解决的问题 解决了12.6版中的问题4731352。
2.5.2. CUDA数学:12.6版
-
已知问题 作为正在进行的兼容性测试的结果,NVIDIA发现许多CUDA数学整数SIMD API处于静默状态 如果在用MSVC 17.10编译的程序中的CPU上使用,则会产生错误的结果。 根本原因是编码 在缩小整数转换期间暴露于未定义行为的API的基于头的实现中出错 对GPU功能进行基于主机的仿真时。 该问题将在CUDA的未来版本中修复。 受影响的应用程序是那些呼叫 __vimax3_s16x2 , __vimin3_s16x2 , __振动最大值_s16x2 、和 __vibmin_s16x2 在CPU上,而不是在CUDA内核中。 [ 4731352 ]
2.5.3. CUDA数学:12.5版
-
已知问题 作为正在进行的测试的结果,我们更新了两倍精度的区间界限 lgamma() 功能可能会经历大于记录的4ulp精度损失。 新间隔应为(-23.0001;-2.2637)。 该发现适用于CUDA 12.5和所有早期版本。 [ 4662420 ]
2.5.4. CUDA数学:12.4版
-
已解决的问题 中的主机特定代码 cuda_fp16/bf16 标头现在不需要进行类型运行,并且在基于严格关联规则的优化情况下可以正常工作。 [ 4311216 ]
2.5.5. CUDA数学:12.3版
-
新功能 SIMD整数CUDA数学API的性能得到了改进。
-
已解决的问题 这个 __hisinf() 数学API来自 古巴_fp16.h 和 cuda_bf16.h 如果使用 -标准=c++20 编译器选项,因为存在基础nvcc编译器问题,已在12.3版中解决。
-
已知问题 的用户 库达_fp16.h 和 cuda_bf16.h 建议标头禁用主机编译器严格的基于别名规则的优化(例如pass -fno-严格连接 宿主GCC编译器),因为这些可能会干扰 __一半 , __二分之一 , __nv _浮点16 , __nv _浮点162 类型实现并将用户程序暴露给未定义的行为。 注意,标头通过#pragma GCC diagnostic ignored禁止GCC诊断 -Wstrict-aliasing公司 。此行为可能会在将来版本的标头中得到改进。
2.5.6. CUDA数学:12.2版
-
新功能 CUDA数学API __一半 和 __nv _浮点16 类型得到了可用性改进,包括主机端对许多算术运算和转换的支持。 -
__一半 和 __nv _浮点16 类型具有与整型之间的隐式转换,默认情况下,整型现在可用于主机编译器。 由于不明确的重载解决方案,这些可能会导致生成问题。 建议用户更新代码以选择适当的重载。 要选择退出,用户可能需要定义以下宏(这些宏将在未来的CUDA版本中删除): __CUDA_FP16_DISABLE_IMPLICIT_INTEGER_CONVERTS_FOR_HOST_COMPILERS卡__ __CUDA_BF16_DISABLE_IMPLICIT_INTEGER_CONVERTS_FOR_HOST_COMPILERS系统__
-
已解决的问题 在正在进行的测试中,NVIDIA发现,由于算法错误,在默认的“四舍五入”模式下64位浮点除法的结果可能会产生无穷大的虚假溢出。 NVIDIA建议所有需要严格遵守IEEE754标准的开发人员更新CUDA工具包12.2或更新版本。 受影响的算法既存在于离线编译中,也存在于实时(JIT)编译中。 由于JIT编译由驱动程序处理,NVIDIA建议在需要符合IEEE754的情况下以及在使用JIT时更新到大于或等于R535(在Windows上为R536)的驱动程序版本。 这是一个软件算法修复程序,与特定硬件无关。 更新了单精度内在函数的观测到的最坏情况误差界 __expf() , __exp10f() 和双精度功能 asinh() , acosh() .
2.5.7. CUDA数学:12.1版
-
新功能 性能和准确性的改进 阿塔纳夫 , acosf公司 , 美国国家科学基金会 , 辛皮夫 , 科斯皮夫 , 功率 , 电流变液 、和 特加马夫 .
2.5.8. CUDA数学:12.0版
-
新功能 引入了新的integer/fp16/bf16 CUDA数学API,以帮助揭示新DPX指令的性能优势。 请参阅 https://docs.nvidia.com/cuda/cuda-math-api/index.html .
-
已知问题 在默认的“舍入到最近的偶数模式”中,导致双精度除法算法的双精度输入会产生虚假溢出:在 DBL_MAX(最大) 0x7FEF_FFFF_FFFF 应为。 受影响的CUDA数学API: __ddiv_rn() 受影响的CUDA语言操作:设备代码中的双精度/操作。
-
折旧 CUDA 12.0中删除了所有以前弃用的未文档化API。
2.6. NVIDIA性能原件(NPP)
2.6.1. 核电站:12.4版
-
新功能 增强的大文件支持 尺寸_t .
2.6.2. 核电站:12.0版
-
折旧 正在取消下一版本的非CTX API支持。
-
已解决的问题 核电站的性能问题 调整Sqr像素大小 API现已修复并显示性能有所提高。
2.7. nvJPEG库
2.7.1. nvJPEG:12.4版
-
新功能 单图像CUDA解码的IDCT性能优化。 零复制行为已更改:设置 NVJPEG_FLAGS_REDUCED_MEMORY_DECODE_ZERO_COPY格式 标志将不再启用 NVJPEG_FLAGS_REDUCED_MEMORY_DECODE .
2.7.2. nvJPEG:12.3版更新1
-
新功能 新API: nvjpeg缓冲区固定大小调整 和 nvjpeg缓冲区设备调整大小 可用于在使用前调整固定缓冲区和设备缓冲区的大小。
2.7.3. nvJPEG:12.2版
-
新功能 增加了对JPEG无损解码的支持(过程14,FO预测)。 L4T现在支持nvJPEG。
2.7.4. nvJPEG:12.0版
-
新功能 改进了nvJPEG编解码器的GPU内存优化。
-
已解决的问题 导致运行时失败的问题 nvJPEGDec多个实例 已用大量线程进行测试,已解决问题。 CMYK四分量颜色转换的问题现已解决。
-
已知问题 后端 NVJPEG_BACKEND_GPU_HYBRID格式 -无法处理具有额外扫描长度的双光束。
-
折旧 编码器中哈夫曼表的重用( nvjpegEncoderParamsCopyHuffman表格 ).
1 -
仅在部分Linux发行版上可用