NVSHMEM


NVSHMEM™ 是一个基于 OpenSHMEM 的并行编程接口 为 NVIDIA GPU 集群提供高效且可扩展的通信。NVSHMEM 为 数据跨越多个 GPU 的显存,并且可以通过细粒度 GPU 初始化进行访问 操作、CPU 发起的操作以及 CUDA® 流上的操作。


下载 NVSHMEM 文档 版本说明 GitHub NVSHMEM API 指南

消息传递接口 (MPI) 等现有通信模型使用 CPU 编排数据传输。相比之下,NVSHMEM 使用 GPU 发起的异步数据传输,从而消除 CPU 和 GPU 之间的同步用度。

高效、强扩展

NVSHMEM 支持包含通信和计算的长时间运行内核,从而减少用度 在强扩展时可能会限制应用程序的性能。

低用度

单侧通信基元允许启动进程或 GPU 线程 指定完成数据传输所需的所有信息。这种低用度模型支持多个 GPU 以便高效沟通。

自然异步

异步通信使程序员能够更轻松地交错计算和通信, 从而提高应用程序的整体性能。



NVSHMEM 3.6 版本新增功能

  • 增加了配置文件支持 (类似于 NCCL) ,可轻松且可重复地管理环境变量。
  • 新增实验性 NVSHMEM LTO-IR ( Link-Time Optimization IR) 库构建选项,可优化设备代码。
  • 通过 nvshmemx_buffer_register_symmetric 添加增强的用户缓冲区注册,并提供首选地址支持
  • 为平铺 API 调用添加了错误代码返回值,以改进错误处理
  • 增加了对 libfabric 传输的多网卡支持,可循环选择网卡。新的环境变量 NVSHMEM_LIBFABRIC_MAX_NIC_PER_PE 控制每个 PE 使用的 NIC 最大数量。
  • 改进了版本不匹配错误消息,以包含详细的主机和设备库版本信息。


NVSHMEM4Py 0.3.0 版本新增功能

  • 为 NVSHMEM4Py 添加了 CuTe DSL 支持,并为 RMA、集合、AMO 和内存操作提供设备端绑定。
  • 为 CuTe DSL 添加了点对点和组播张量的设备端构造。
  • 添加了辅助函数,可简化 NVSHMEM/ CuTe DSL 的使用。*
  • 将 Numba-CUDA 设置为可选依赖项,并将最低版本调整至 0.25。*
  • 修复了清理父缓冲区的对等/ 多内存缓冲区追踪假设。


主要特性


  • 将多个 GPU 的显存合并到一个可通过以下方式访问的分区全局地址空间中 NVSHMEM API
  • 包含低用度的内核内通信 API,供 GPU 线程使用
  • 包括基于流和 CPU 发起的通信 API
  • 支持 x86 和 Arm 处理器
  • 可与 MPI 和其他 OpenSHMEM 实现互操作


NVSHMEM 的优势


提升性能

卷积是一种计算密集型内核,广泛用于各种应用程序,包括图像 处理、机器学习和科学计算。空间并行化将域分解为 通过最近邻点通信分布在多个 GPU 上的子分区,通常称为 作为光环交换。

在利弗莫尔大型人工神经网络 (LBANN) 深度学习框架中,空间并行卷积 使用 MPI 和 NVSHMEM 等多种通信方法实现。基于 MPI 的光晕交换 使用标准的发送和接收基元,而基于 NVSHMEM 的实现使用单侧放置, 显著提升了劳伦斯利弗莫尔国家实验室的性能 Sierra 超级计算机


Sierra 超级计算机上的高效强扩展



在 NVIDIA DGX SuperPOD 上实现高效的强扩展

加快解决问题的速度

要缩短高性能科学计算工作负载的解决方案时间,通常需要 强扩展应用程序。QUDA 是一个用于在 GPU 上运行晶格量子色动力学 (QCD) 的库 由热门的 MIMD 格点计算 (MILC) 和 Chroma 代码使用。

支持 NVSHMEM 的 QUDA 可避免通信中的 CPU-GPU 同步,从而减少关键路径 并显著提高强扩展效率。

观看 GTC 2020 演讲



简化开发

共梯度 (CG) 方法是求解线性方程组的常用数值方法, CGSolve 是 Kokkos 编程模型中这种方法的实现。CGSolve 内核 展示了将 NVSHMEM 用作 Kokkos 等更高级别的编程模型的构建块。

NVSHMEM 使用 Kokkos 全局阵列数据结构实现高效的多节点和多 GPU 执行 无需显式代码即可在 GPU 之间进行通信。因此,支持 NVSHMEM 的 Kokkos 与使用 MPI 和 CUDA 相比,显著简化了开发。


Kokkos CGSolve 的高效编程


准备好开始使用 NVSHMEM 进行开发了吗?


开始使用