NVIDIA® NVSHMEM 2.10.1 发行说明

NVSHMEM 是 NVIDIA GPU 的 OpenSHMEM 规范的实现。NVSHMEM 编程接口在 NVIDIA GPU 集群上实现分区全局地址空间 (PGAS) 模型。NVSHMEM 提供了一个易于使用的接口来分配在 GPU 之间对称分布的内存。除了 CPU 端接口外,NVSHMEM 还提供 CUDA 内核端接口,允许 CUDA 线程访问对称分布内存中的任何位置。

发行说明描述了 NVSHMEM 2.10.1 和早期版本的主要特性、软件增强功能和改进以及已知问题。

主要特性和增强功能

此 NVSHMEM 版本包括以下主要特性和增强功能

  • 支持单节点和多节点 Grace Hopper 系统

  • 支持使用 libfabric 传输的 EFA 提供程序,可以使用 NVSHMEM_LIBFABRIC_PROVIDER=EFA 启用。应用程序。

  • 为 NVSHMEM 设备实现头文件添加了 NVRTC 支持。

  • 修复了 nvshmem_finalize 中的内存泄漏

  • 添加了在循环中通过任何引导程序调用 nvshmem_initnvshmem_finalize 的支持。以前,该支持仅存在于 MPI 引导程序中

  • Alltoall 集体 API 中的性能优化

  • 在 IBGDA 传输中,实现了 nvshmem_<typename>_g 操作到连续地址的 warp 级自动合并

  • 移除了 IBGDA 传输中冗余的一致性操作

  • 在使用 VMM API for NVSHMEM 对称堆时,添加了对同步内存操作的支持

  • 代码重构和错误修复

兼容性

NVSHMEM 2.10.1 已通过以下测试

CUDA 工具包

  • 11.0

  • 12.0

  • 12.2

  • 在 x86、Power 9 和 Grace 处理器上

GPU

  • Volta V100

  • Ampere A100

  • Hopper H100

局限性

  • NVSHMEM 尚不兼容 Cray 系统上的 PMI 客户端库,必须使用 NVSHMEM 内部 PMI-2 客户端库。可以通过为 Slurm 指定 –mpi=pmi2 和 NVSHMEM_BOOTSTRAP_PMI=PMI-2,使用 PMI 引导程序启动作业。也可以通过在构建 NVSHMEM 时设置 NVSHMEM_DEFAULT_PMI2=1 将 PMI-2 设置为默认 PMI。也可以通过使用 MPI 或 SHMEM 引导程序直接启动作业。

  • libfabric 传输尚不支持 VMM,必须通过设置 NVSHMEM_DISABLE_CUDA_VMM 禁用 VMM。

  • Slingshot-11 网络上的 Libfabric 支持需要设置以下环境变量 FI_CXI_OPTIMIZED_MRS=false。

  • 由于性能回退,默认情况下在 Power 9 系统上禁用 VMM 支持。

  • MPG 支持在 Power 9 系统上尚不可用。

  • 具有 PCIe 对等通信的系统需要以下之一

    • InfiniBand 以支持 NVSHMEM 原子 API。

    • 使用 NVSHMEM 的 UCX 传输,如果不存在 IB,将使用套接字进行原子操作。

  • NVSHMEM 主机 API 可以动态链接,但设备 API 只能静态链接。

    • 这是因为 CUDA 设备符号的链接在共享库之间不起作用。

  • nvshmem_barrier*、nvshmem_quiet 和 nvshmem_wait_until 仅确保具有 NVLink 和 InfiniBand 的系统上源 PE 和目标 PE 之间的排序和可见性。它们不确保全局排序和可见性。

  • 当使用 GDRcopy 构建并在旧版本的 460 驱动程序和之前的分支上使用 Infiniband 时,由于无法重用 BAR1 空间,NVSHMEM 无法分配完整的设备内存。这已在 CUDA 驱动程序版本 470 及更高版本以及最新的 460 驱动程序中得到修复。

  • 当 NVSHMEM 使用 cudaMalloc 映射对称堆时,它会设置 CU_POINTER_ATTRIBUTE_SYNC_MEMOPS 属性,该属性会自动同步对称堆上的同步 CUDA 内存操作。

  • 对于 CUDA 11.3 及更高版本,NVSHMEM 支持使用 CUDA VMM API 映射对称堆。但是,当您使用 VMM API 映射对称堆时,CUDA 不支持此属性,用户负责同步。有关同步 CUDA 内存操作的更多信息,请参阅 API 同步行为。

  • 在此版本中,Grace Hopper 系统上的 IBGDA 传输支持是实验性的。

  • IBGDA 不适用于 DMABUF。

已修复的问题

  • 在 2.8 版本中,CMake 构建 NVSHMEM 时动态链接到 libcudart.so,此问题已在此版本中修复。

重大变更

已弃用的特性

已知问题

当前不支持通过在编译时设置 NVSHMEM_COMPLEX_SUPPORT 启用的复杂类型。