NVSHMEM 框架介绍
专为分布式内存系统设计。英伟达在其 GPU 平台上通过。英伟达的 SHMEM 实现(NVSHMEM)通过。问题,为超算与 AI 场景提供了高性能通信基础。优化,解决了分布式 GPU 应用中的。
·
1. 框架概述
OpenSHMEM 是一个 高性能、低延迟的通信库,专为分布式内存系统设计。英伟达在其 GPU 平台上通过 NVSHMEM 库提供了对 OpenSHMEM 标准的优化实现,主要特点包括:
核心组件
- PGAS 模型:
将分布式内存抽象为统一的全局地址空间,允许进程直接访问远程内存(无需显式消息传递)。 - 对称内存分配:
所有进程通过shmem_malloc()分配相同大小的内存块,形成全局对称堆(Symmetric Heap)。 - 单边通信(One-Sided Communication):
支持shmem_put()(远程写)、shmem_get()(远程读)等操作,避免同步开销。 - 原子操作:
提供shmem_atomic_add()等原子操作,适用于锁-free 编程。 - 集合操作:
如shmem_barrier()(同步)、shmem_broadcast()(广播)等。
英伟达的扩展(NVSHMEM)
- GPU 内存支持:
直接操作 GPU 显存(通过nvshmem_malloc()),避免 CPU-GPU 数据拷贝。 - NVLink 优化:
利用 GPU 间的高速互连(如 NVLink)加速通信。 - CUDA 集成:
支持在 CUDA 核函数中调用 SHMEM 操作。
2. 解决的关键问题
(1) 降低通信延迟
- 传统 MPI 瓶颈:
MPI 的双边通信(Send/Recv)需双方进程参与,同步开销大。 - SHMEM 方案:
单边通信允许进程主动读写远程内存,无需目标进程介入,显著减少延迟。
(2) 简化编程模型
- 全局地址空间:
开发者无需管理复杂的数据分布逻辑,通过全局指针直接访问远程数据。 - 示例代码对比:
// MPI 发送数据(需显式匹配 Send/Recv) MPI_Send(data, count, MPI_INT, dest, tag, MPI_COMM_WORLD); // SHMEM 直接写入远程内存 shmem_int_put(dest_ptr, data, count, dest_pe);
(3) 高性能 GPU 间通信
- 传统问题:
GPU 间通信需通过 CPU 中转(如 MPI + CUDA),引入额外拷贝开销。 - NVSHMEM 方案:
直接在 GPU 显存上执行通信,利用 NVLink 或 InfiniBand 实现高带宽、低延迟传输。
(4) 扩展性优化
- 集合操作异步化:
shmem_barrier_all()等操作在硬件层面优化,支持大规模节点同步。 - 通信与计算重叠:
单边通信天然支持异步操作,易于隐藏通信延迟。
3. 典型应用场景
- 大规模科学计算:
如分子动力学模拟(LAMMPS)、气候模型(CESM)。 - AI 分布式训练:
参数服务器(Parameter Server)中高效同步梯度。 - 图计算:
稀疏数据访问模式受益于 PGAS 的直接内存操作。
4. 性能优势
- 延迟:
NVSHMEM 在 GPU 间通信延迟可低至 1~2 微秒(NVLink 场景)。 - 带宽:
接近硬件上限(如 NVLink 带宽达 200 GB/s)。 - 扩展性:
在 Summit 超算等万级 GPU 集群中验证了线性扩展能力。
总结
英伟达的 SHMEM 实现(NVSHMEM)通过 PGAS 模型、单边通信和 GPU 直接通信优化,解决了分布式 GPU 应用中的 高延迟、编程复杂性 和 扩展性瓶颈 问题,为超算与 AI 场景提供了高性能通信基础。
如需进一步了解,可参考:
更多推荐



所有评论(0)