NVIDIA HPC SDK 发行说明
1. 新特性
欢迎使用 NVIDIA HPC SDK 25.1 版本,这是一个全面的编译器和库套件,使开发人员能够对整个 HPC 平台进行编程,从 GPU 基础到 CPU,再到互连。HPC SDK 25.1 版本包括组件更新以及重要的功能和性能改进。
HPC-X 已更新至 2.21 版本,其中包括对 Grace-Hopper 系统的支持、错误修复以及 HPC 工作负载的性能提升。HPC-X 2.21 与 CUDA 12.0 驱动程序 (R525) 不兼容;HPC-X 2.20 可作为需要 CUDA 12.0 用户的后备选项。
C++ 扩展浮点类型
std::float[16|32|64|128]_t
现在可用于 nvc++,包括对 CPU 和 GPU 的支持。std::float16_t
是 IEEE 16 位浮点数,而不是 bfloat。-gpu=tripcount
选项在 nvc++ 和 nvfortran 的 25.1 版本中可用。请参阅 HPC 编译器用户指南 以获取更多信息。
2. 发行组件版本
NVIDIA HPC SDK 25.1 版本包含以下每个组件的版本
Linux_x86_64 |
Linux_aarch64 |
|||
---|---|---|---|---|
CUDA 11.8 |
CUDA 12.6 |
CUDA 11.8 |
CUDA 12.6 |
|
nvc++ |
25.1 |
25.1 |
||
nvc |
25.1 |
25.1 |
||
nvfortran |
25.1 |
25.1 |
||
nvcc |
11.8.89 |
12.6.77 |
11.8.89 |
12.6.77 |
NCCL |
2.18.5 |
2.18.5 |
2.19.3 |
2.19.3 |
NVSHMEM |
3.0.7 |
3.1.7 |
N/A |
3.1.7 |
cuBLAS |
11.11.4.17 |
12.6.4.1 |
11.11.3.6 |
12.6.4.1 |
cuBLASMp |
0.2.1 |
0.3.1 |
0.2.1 |
0.3.1 |
cuFFT |
10.9.0.58 |
11.3.0.4 |
10.9.0.58 |
11.3.0.4 |
cuFFTMp |
11.2.6 |
11.2.6 |
N/A |
11.2.6 |
cuRAND |
10.3.0.86 |
10.3.7.77 |
10.3.0.86 |
10.3.7.77 |
cuSOLVER |
11.4.1.48 |
11.7.1.2 |
11.4.1.48 |
11.7.1.2 |
cuSOLVERMp |
0.5.1.0 |
0.5.1.0 |
0.5.1.0 |
0.5.1.0 |
cuSPARSE |
11.7.5.86 |
12.5.4.2 |
11.7.5.86 |
12.5.4.2 |
cuTENSOR |
2.0.2 |
2.0.2 |
2.0.2 |
2.0.2 |
Nsight Compute |
2024.3.2 |
2024.3.2 |
||
Nsight Systems |
2024.7.1 |
2024.7.1 |
||
HPC-X |
2.14 |
2.21 |
2.14 |
2.21 |
OpenBLAS |
0.3.23 |
0.3.23 |
||
Scalapack |
2.2.0 |
2.2.0 |
||
Thrust |
1.15.1 |
2.5.0 |
1.15.1 |
2.5.0 |
CUB |
1.15.1 |
2.5.0 |
1.15.1 |
2.5.0 |
libcu++ |
1.8.1 |
2.5.0 |
1.8.1 |
2.5.0 |
3. 支持的平台
3.1. HPC SDK 的平台要求
架构 |
Linux 发行版 |
最低 gcc/glibc 工具链 |
最低 CUDA 驱动程序 |
---|---|---|---|
x86_64 |
RHEL/CentOS/Rocky 8.0 - 8.10
RHEL/Rocky 9.2 - 9.4
OpenSUSE Leap 15.4 - 15.4
SLES 15SP3, 15SP4, 15SP5, 15SP6
Ubuntu 18.04, 20.04, 22.04, 24.04
Debian 10-12
|
Fortran、C 以及最高 C++17:7.5
C++20:10.1
C++23:12.1
|
450.36.06 |
aarch64 |
RHEL/CentOS/Rocky 8.0 - 8.10
Rocky 9.2 - 9.3
Ubuntu 20.04, 22.04, 24.04
SLES 15SP6
Amazon Linux 2023
|
Fortran、C 以及最高 C++17:7.5
C++20:10.1
C++23:12.1
|
450.36.06 |
由 HPC 编译器为 x86_64 处理器生成的程序需要至少 AVX 指令,包括来自 Intel 的 Sandy Bridge 及更新的 CPU,以及来自 AMD 的 Bulldozer 及更新的 CPU。HPC SDK 包括对符合 SBSA 7.1 规范中附录 E 规定的 v8.1+ 服务器级 Arm CPU 的支持。
HPC 编译器与 gcc 和 g++ 兼容,并使用 GCC C 和 C++ 库;最低兼容的 GCC 版本在第 3 节的表格中列出。CUDA 和 NVIDIA Math Library 的最低系统要求可在 NVIDIA CUDA 工具包文档 中找到。
3.2. 支持的 CUDA 工具链版本
NVIDIA HPC SDK 在为使用 NVIDIA GPU 执行构建程序时,会使用 CUDA 工具链的元素。每个 HPC SDK 安装包都将所需的 CUDA 组件放入名为 [install-prefix]/[arch]/[nvhpc-version]/cuda 的安装目录中。
在具有 GPU 的系统上运行为 GPU 编译的程序之前,必须在该系统上安装 NVIDIA CUDA GPU 设备驱动程序。NVIDIA HPC SDK 不包含 CUDA 驱动程序。您必须从 NVIDIA 下载并安装相应的 CUDA 驱动程序,包括 CUDA 兼容性平台(如果需要)。
nvaccelinfo 工具在其输出中打印 CUDA 驱动程序版本。您可以使用它来查找系统上安装的 CUDA 驱动程序版本。
NVIDIA HPC SDK 25.1 包括以下 CUDA 工具链版本
CUDA 11.8
CUDA 12.6u2
最低要求的 CUDA 驱动程序版本在第 3.1 节的表格中列出。
4. 已知限制
以下是更有效地使用 HPC SDK 及其组件的用法建议,以应对遇到的意外行为或次优性能。
HPC 编译器
对于 nvfortran,定义的输入/输出过程的
IOSTAT
参数应为默认类型INTEGER
。声明为非默认类型的IOSTAT
可能会在运行时遇到未定义的行为。当指针被分配给具有 target 属性的数组哑元参数时,nvfortran 可能会将指针与数组参数的副本而不是实际参数关联。
nvfortran 支持将内部过程作为实际参数传递给 Fortran 子程序,前提是哑元参数被声明为接口块或过程哑元参数。nvfortran 不支持将内部过程作为实际参数传递给声明为 external 的哑元参数。
nvfortran 仅支持 Fortran 2003 标准的最大 7 个数组维度(Fortran 2008 将标准最大维度提高到 15 个)。此限制在 ISO_Fortran_binding.h C 头文件中的标准 CFI_MAX_RANK 宏中定义。
Fortran 2018 标准中“15.5.2.4 普通哑变量”部分,约束 C1540 和注释 5 允许 Fortran 编译器避免复制/复制输出参数传递,前提是实际参数和相应的哑元参数具有 ASYNCHRONOUS/VOLATILE 属性,并且哑元参数没有 VALUE 属性。此功能在 nvfortran 中使用 BIND(C) 接口(即,Fortran 调用 C)时完全支持。异步/易失性属性的复制/复制输出避免可能在 nvfortran 的其他情况下不可用。
在源分配或可分配赋值中使用的具有零大小派生类型可分配组件的 Fortran 派生类型对象可能会导致运行时段错误。
当使用
-stdpar
加速 C++ 并行算法时,算法调用不能包含虚函数调用或通过函数指针的函数调用,不能使用 C++ 异常,并且必须使用随机访问迭代器(原始指针作为迭代器效果最佳)。当未启用统一内存时,算法调用只能解引用指向堆的指针。有关更多详细信息,请参阅 C++ 并行算法文档。
MPI、HPC-X 和 UCX
HPC SDK 25.1 附带 HPC-X 2.21 版本,该版本与 CUDA 12.0 驱动程序 (R525) 不兼容。HPC-X 2.20 可作为需要 CUDA 12.0 用户的后备选项。可以通过加载
nvhpc-hpcx-2.20-cuda12
环境变量模块来选择 HPC-X 2.20。在
acc declare create
(以及相关的子句,如copyin
、device_resident
)中指定的任何程序数据如果在 HPC-X MPI 传输中使用,都可能导致应用程序崩溃。comm_libs/mpi/bin
中的 MPI 包装器会自动检测 CUDA 驱动程序,并从comm_libs/X.Y
中选择匹配的 MPI 库。需要完整 MPI 目录层次结构(例如,bin、include、lib)或通过 srun 启动的应用程序应通过加载nvhpc-hpcx-cuda11
或nvhpc-hpcx-cuda12
环境变量模块来绕过 MPI 包装器,具体取决于已安装的 CUDA 驱动程序版本。要使用 HPC-X,请使用提供的环境变量模块文件,或注意获取 hpcx-init.sh 脚本的源:
$ . ${NVHPCSDK_HOME}/comm_libs/X.Y/hpcx/latest/hpcx-init.sh
然后,运行此脚本定义的 hpcx_load 函数:hpcx_load
。这些操作将设置运行 HPC-X 时所需的重要环境变量。以下来自 HPC-X 的警告(在运行 MPI 作业时)– “WARNING: Open MPI tried to bind a process but failed. This is a warning only; your job will continue, though performance may be degraded”(警告:Open MPI 尝试绑定进程但失败。这只是一个警告;您的作业将继续,但性能可能会降低)– 是一个已知问题,可以通过以下方式抑制:export OMPI_MCA_hwloc_base_binding_policy=""
从 2.17.1 版本开始,HPC-X 不支持流顺序 CUDA 分配内存的最佳性能支持。实际上,这意味着 IPC 方法(如 MPI 调用
MPI_Send
和MPI_Recv
)在传递使用cudaMallocAsync
函数或其变体分配的数据时,吞吐量可能会显着降低。此限制将在未来的版本中删除。
数学库
与 NVPL 相关的已知问题在 NVPL 文档 中描述。
某些应用程序在使用 MKL 2023.1.0 版本在 Haswell 和 Broadwell 上运行时,当使用 4 个或更多 OpenMP 线程运行某些工作负载时,可能会遇到故障。该问题已在 MKL 2023.2.0 版本中解决。
cuSolverMp 在 HPC-X 目录中对 UCC 和 UCX 库有两个依赖项。要执行链接到 cuSolverMP 并使用 CUDA 11.8 的程序,请对 HPC-X 库使用 “nvhpc-hpcx-cuda11” 环境变量模块,或按如下方式设置环境变量 LD_LIBRARY_PATH:
LD_LIBRARY_PATH=${NVHPCSDK_HOME}/comm_libs/11.8/hpcx/latest/ucc/lib:${NVHPCSDK_HOME}/comm_libs/11.8/hpcx/latest/ucx/lib:$LD_LIBRARY_PATH
5. 弃用和变更
Maxwell、Pascal 和 Volta 架构将在 CUDA 12.8 中弃用,并且将在未来的版本中移除支持。
已弃用对将 stdpar 与 C++14 及更低版本一起使用的支持;使用 stdpar 时需要 C++17 或更高版本。
当 CUDA 的下一个主要版本可用时,HPC SDK 将附带最新版本的 CUDA 和 CUDA 12.<latest>;CUDA 11.8 将从 HPC SDK 包中移除,并且支持将被弃用。
-M[no]-acle-intrinsics
选项从 25.1 版本开始不再起作用,并将在 25.3 中移除。nvvp 和 nvprof 实用程序已被弃用,并将从 HPC SDK 的未来版本中移除。建议 nvvp 和 nvprof 的用户 迁移 到 NSight Systems 和 NSight Compute 应用程序。
OpenMPI 3 库已从 24.11 版本开始的 HPC SDK 中移除。OpenMPI 4 库将在未来的版本中移除。
对 CUDA 版本 11.0 和 11.1 的支持已从 24.11 版本开始的 HPC SDK 中移除。
以下标志已被弃用,不应使用:
-Mllvm
、-gpu=stacklimit
;-gpu=pinned
、-gpu=[no]managed
、-gpu=[no]unified
(有关更多信息,请参阅 此处)。以下已弃用的标志已从 24.11 版本开始的 HPC 编译器中移除
-Mcuda
,替换为-cuda
-Mcudalib
,替换为-cudalib
-ta
,替换为-acc=gpu
在未来的版本中,HPC SDK tar 包文件名将扩展为包含发行版本号,以及版本号。下载和安装来自 tar 文件包的 HPC SDK 的自动化可能需要更新。
从 24.7 版本开始,HPC 编译器将不会在优化级别
-O3
或更低级别执行倒数重写;倒数重写通过-Mfprelaxed
或-Ofast
选项启用。自适用于 Arm 的 HPC SDK 24.7 版本起,UCC 集合操作默认情况下已对 HPC-X 包禁用。希望重新启用 UCC 集合操作的用户可以在其环境中设置
OMPI_MCA_coll_ucc_enable=1
。某些系统上的性能可能取决于是否启用 UCC 集合操作。OMP_NUM_TEAMS
环境变量的效果在 24.7 中已更改。现在,它指定了团队数量的上限,符合 OpenMP 规范。在以前的版本中,团队数量始终设置为OMP_NUM_TEAMS
;现在,该值由 OpenMP 运行时决定,并且将不大于OMP_NUM_TEAMS
。NVCOMPILER_OMP_CUDA_GRID
环境变量可用于强制指定特定数量的团队。HPC SDK 中对 Power CPU 架构的支持已停止。
从 24.9 版本开始的 HPC SDK 中,对 Amazon Linux 2 和基于 RHEL 7 的操作系统的支持已停止,这与上游生命周期结束 (EOL) 相对应。
当处于 ANSI 模式时(例如,
-std=c++17
或-std=c99
),GNU 扩展宏linux
和unix
不再定义。如果您的代码以 ANSI 模式编译并且您依赖于这些宏中的任何一个,您将需要使用 ANSI 兼容宏__linux__
或__unix__
之一。仅限 Arm (aarch64):23.9 版本的 nvfortran 更改了 Fortran 复数函数的调用/返回序列,以匹配 GNU 的 gfortran 约定。在 23.9 版本之前,nvfortran 函数通过堆栈使用“隐藏”指针作为第一个参数返回复数值。现在,复数值按照 gfortan 约定通过浮点寄存器返回。随 NVIDIA HPC SDK for Arm 发布的所有库都已更新为遵循“gfortran”方法。链接到 Arm 性能库的用户将需要使用“gcc”版本而不是“arm”版本。所有 Fortran 代码(包括库)在使用 Arm 系统上的 nvfortran 时,必须重新编译使用复数的代码。
CUDA Fortran 纹理的支持在 CUDA 11.0 和 11.8 中已弃用,并且已从 CUDA 12 中移除。23.9 版本是最后一个包含 CUDA Fortran
texture
支持的 HPC 编译器版本。-Minfo=intensity
选项不再受支持。CUDA_HOME
环境变量被 HPC 编译器忽略。它被NVHPC_CUDA_HOME
替换。从 23.3 版本的 HPC 编译器开始,
-Mipa
选项已被禁用。从 23.11 版本开始,HPC SDK 仅捆绑 CUDA 11.8 和最新版本的 CUDA 12.x 系列。HPC 编译器中支持低于 11.0 的 CUDA 版本的代码路径不再经过测试或维护。
CUDA Fortran 中的 cudaDeviceSynchronize() 已被弃用,并且已从设备代码中移除支持。它在主机代码中仍然受支持。
从 NVIDIA HPC SDK 的 21.5 版本开始,NVC++ 和 NVFORTRAN 的
-cuda
选项不再自动链接 NVIDIA GPU 数学库。请参阅-cudalib
选项。从 NVIDIA HPC SDK 的 21.3 版本开始,HPC 编译器对 NVIDIA GPU 的 Kepler 架构的支持已被弃用。
声明
声明
所有 NVIDIA 设计规范、参考板、文件、图纸、诊断程序、列表和其他文档(统称和单独称为“材料”)均按“原样”提供。NVIDIA 不对材料作出任何明示、暗示、法定或其他方面的保证,并且明确声明不承担任何关于不侵权、适销性和特定用途适用性的暗示保证。
所提供的信息据信是准确可靠的。但是,NVIDIA 公司对使用此类信息或因使用此类信息而可能导致的侵犯第三方专利或其他权利的后果不承担任何责任。未通过暗示或其他方式授予 NVIDIA 公司任何专利权下的许可。本出版物中提及的规格如有更改,恕不另行通知。本出版物取代并取代之前提供的所有其他信息。未经 NVIDIA 公司明确书面批准,NVIDIA 公司产品不得用作生命支持设备或系统中的关键组件。
商标
NVIDIA、NVIDIA 徽标、CUDA、CUDA-X、GPUDirect、HPC SDK、NGC、NVIDIA Volta、NVIDIA DGX、NVIDIA Nsight、NVLink、NVSwitch 和 Tesla 是 NVIDIA Corporation 在美国和其他国家/地区的商标和/或注册商标。其他公司和产品名称可能是与其相关的各自公司的商标。