Demystifying NVSHMEM: A System-Level Analysis on Symmetric Memory and Device-Initiated Operations in GPU Communication
Yijun Ma, Siyuan Shen, Tiancheng Chen, Akhil Langer, Jiri Kraus, Benjamin Glick, Craig Belusar, Jeff Hammond, Torsten Hoefler
cs.DC
2026-06-04
源码拆解NVSHMEM 3.3.9:节点内put达313 GB/s,跨节点AllReduce不足0.2 GB/s。
NCCL把多卡训练的集体通信做成了默认选项,但它的传统接口是CPU发起的。专家并行、稀疏all-to-all、halo交换这类数据依赖、细粒度的通信,CPU调度会把延迟吃掉。NVSHMEM走另一条路:把OpenSHMEM的PGAS模型搬到GPU上,让kernel自己对远端对称内存做put/get和原子操作。
这份库的真实行为散落在文档、源码和应用经验里。ETH Zürich和NVIDIA把NVSHMEM 3.3.9从编程模型拆到传输层,并用DeepSeek的DeepEP作案例,标出它能逼近硬件上限的地方,以及集体实现现在卡在哪。
核心是对称堆。初始化时用CUDA VMM预留虚拟地址,物理页按需提交。P2P可达的GPU堆被映射到固定偏移,远端地址等于对端堆基址加本地偏移,kernel里就是一次load/store。跨节点或没有P2P时走慢路径:有IBGDA就由GPU直接给NIC发RDMA,否则写一个host-pinned描述符,CPU proxy线程代发。
集体操作建在这套RMA之上。每个team有一块pSync对称缓冲,小消息用LL/LL128把数据和到达标志打进一次原子写。算法选择是规则树,不是解析模型。设备端集体按thread、warp、block作用域,没有公开的grid变体;多CTA只在host侧on-stream路径、且需要NVLS时才复制team。
fence只保证对同一目标PE的发出顺序,不保证完成;quiet才等到对端可见。sync和barrier都走dissemination,barrier会先quiet。team很轻,但不能被同一PE上两个并发集体共用内部资源。
DeepEP训练路径把集群拆成8个NVSHMEM world,只在同槽位GPU之间做跨节点RDMA,节点内再用NVLink转发;推理路径砍掉NVLink转发,用IBGDA put加原子计数。NVSHMEM在这里只是跨节点基板,调度和流水线是DeepEP自己写的。
测量在CoreWeave H200集群上,节点内NVLink-4,跨节点ConnectX-7。设备端RMA:
| 路径 | 操作 | 峰值带宽 |
| 节点内P2P | bulk put | 313 GB/s |
| 节点内P2P | bulk get | 141 GB/s |
| 节点内P2P | scalar p | 172 GB/s |
| 节点内P2P | scalar g | 低于9 GB/s |
| 跨节点IBGDA | bulk put / get | 48.0 / 48.2 GB/s |
| 跨节点IBGDA | scalar p / g | 15.6 / 1.28 GB/s |
节点内put离450 GB/s单向NVLink参考还有一段。scalar get每次远程load都要等返回,管线铺不开。节点内延迟大约1.3–2.5 μs;IBGDA跨节点bulk在256 B大约9.4–9.5 μs。
AllReduce更刺眼。节点内on-stream多CTA走到264 GB/s,接近NCCL NVLS的276 GB/s;强制单CTA的device-block路径只有30 GB/s。跨节点两边NVSHMEM变体都低于0.20 GB/s,NCCL ring 180 GB/s、NVLS Tree 252 GB/s。小消息节点内device路径3.8–7.1 μs,和NCCL差不多;跨节点NVSHMEM延迟到64 KiB已经是毫秒级,NCCL仍在几十微秒。
NVIDIA自己在DeepEP上对比NCCL GIN和NVSHMEM,HT/LL的dispatch和combine通常差1–2%。这篇没有另做一遍。
做MoE通信或自定义kernel的人,NVSHMEM仍然是细粒度、设备发起RMA的基板。NCCL Device API和GIN正在把对称内存和设备发起通信收进集体库,GIN论文也承认NVSHMEM在底层one-sided上仍有优势。集体通信、尤其是跨节点AllReduce,现在不该指望NVSHMEM内置实现。
这是一份系统软件解剖,不是新算法。对已经在用NVSHMEM的团队,价值是把快慢路径、team约束和集体短板一次讲清楚。
论文自己点出:内置集体的多CTA支持弱,跨节点集体几乎没优化。微基准不是全面性能研究,跨节点NVSHMEM还出现超时缺测。DeepEP案例停在V1,V2已经切到NCCL GIN。分析针对3.3.9,公开API文档核到3.5.19,内部路径以后可能变。没有给出和NCCL GIN在同一套微基准上的正式对照。