GPU-Centric Communication
导言
“GPU-aware” 很容易让人产生一个错觉:只要通信库能够接收 GPU buffer,数据就会完全绕开 CPU,通信也已经由 GPU 自主推进。现实并没有这么整齐。API 可能从 CPU 发起,数据却直接流向 NIC;GPU 也可能负责触发传输,但报文仍由 CPU 预先构造。
The Landscape of GPU-Centric Communication 给出的关键视角,是把通信拆成 API、报文构造、触发和数据路径,再观察每项责任究竟落在 CPU、GPU 还是 NIC。沿着这套坐标回看二十年演进,会发现主线不是“带宽越来越高”,而是先消除冗余拷贝,再缩短数据路径,最后把控制权逐步迁到 GPU。
不只是在绕开 CPU¶
传统多 GPU 程序把 GPU 当作计算设备,把通信当作 CPU 的辅助任务。一次跨节点传输可能要经历 GPU memory、host staging buffer、NIC buffer 与远端 GPU;即使 Payload 后来已经可以绕开 host memory,CPU 仍可能负责构造报文、敲 NIC doorbell、等待完成并启动下一段 kernel。
因此,论文把 GPU-centric communication 宽泛地定义为:减少 CPU 在多 GPU 执行关键路径中参与程度的机制。这里的关键词是“减少”,不是“清零”。一条路径是否 GPU-centric,不能只看数据有没有经过 CPU,也不能只看 API 名字里有没有 CUDA、ROCm 或 GPU-aware。论文 Section 2
这个定义澄清了几个经常被混用的判断:
- GPU buffer 可用,不等于 device-side API。 GPU-aware MPI 可以直接接收 device pointer,但标准 MPI 调用仍位于 host。
- 直接数据路径,不等于 GPU 负责控制。 GPUDirect RDMA 允许 NIC 读写 GPU memory,报文准备和触发仍可能由 CPU 完成。
- GPU 发起,不等于完全 device-native。 GPUDirect Async 让 GPU 触发 CPU 预注册的操作,控制权只迁移了一部分。
- CPU 不在关键路径,不等于系统不需要 CPU。 初始化、资源注册、异常处理、调试和系统服务仍需要 CPU 的全局视野。
这也是我认为这篇综述最有价值的地方:它没有再发明一个笼统标签,而是追问一次通信究竟由谁做了什么。
把通信拆成四个动作¶
单节点通信主要看两个对象:API 在哪里调用,以及 数据实际从哪里经过。跨节点多了 NIC,分类必须再加入两个动作:谁构造或注册报文,以及 谁触发传输。
论文 Figure 2 把跨节点路径排成五级。读图时不要只盯着绿色数据箭头;蓝色报文构造路径、紫色触发点和绿色 API 圆点,才解释了为什么两条同样使用 RDMA 的路径仍有不同的 CPU 依赖。
图 1:来自论文 Figure 2,展示跨节点通信的 API、报文构造、触发与数据路径;论文将该图标注为 CC-BY。点击可查看原始分辨率。
五级变化可以压缩成一条责任迁移链:
- Host Native:CPU 调 API、构造报文、触发 NIC,数据还要经过 host,两次拷贝把 CPU 与内存总线都放进关键路径。
- Pinned Host Native:GPU 与 NIC 共享 pinned memory,去掉一段中间拷贝,但控制仍在 CPU。
- GPU RDMA:NIC 可以直接访问 GPU memory,Payload 不再绕行 host;API、报文构造和触发依然可能留在 CPU。
- GPU-Triggered:CPU 预先准备操作,运行中的 GPU 负责敲 doorbell。数据路径与触发已经下沉,报文构造尚未完全迁移。
- Device Native:device-side API、报文构造、触发和直接数据路径都落在 GPU/NIC 一侧,CPU 退出稳态通信关键路径。
分类的是执行路径
同一个库会随硬件、transport、P2P/RDMA 开关和消息大小走不同路径。论文的五级不是给 NCCL、MPI 或 SHMEM 贴永久标签,而是描述一次具体运行中的执行者与数据流。没有 RDMA 时,即使 GPU 负责控制,Payload 仍可能回退到 host memory。
时间线里的四次迁权¶
把 Figure 3 当作产品年表看,很容易只记住 CUDA 版本和 NVLink 代际。更有效的读法,是按颜色追踪四层积木如何相互解锁:绿色解决地址和内存可达性,蓝色缩短数据或控制路径,紫色提供物理互联,黄色与棕色再把底层机制组织成可编程的库。
图 2:来自论文 Figure 3(arXiv v4),展示 2006—2026 年 NVIDIA GPU-centric communication 与 networking 技术时间线;论文将该图标注为 CC-BY。年份、CUDA 版本、GPU 架构、技术节点和图例按原图完整保留;点击可查看 5263×1687 原图。
这张图呈现的并不是一条单线替代史,而是四次相互叠加的迁权。
地址先变得可用¶
Pinned memory 先减少 pageable memory 到临时 page-locked buffer 的 staging;UVA 让 CPU 与多个 GPU 共享虚拟地址空间,库可以从 pointer 判断内存位置;IPC 又把同节点的 device buffer 暴露给其他进程;UVM 则用按页迁移进一步隐藏显式拷贝。
这些机制首先改善的是可寻址性和编程接口,并不自动等于最快数据路径。尤其 UVM 的目标包含透明迁移与内存超配,它和显式 P2P/RDMA 解决的不是同一个问题。论文 Section 3.1
数据再绕开 host¶
GPUDirect 1.0 让 GPU 与 NIC 共享 pinned region,消除两块 host buffer 之间的 CPU copy;GPUDirect 2.0/P2P 建立同节点 GPU memory 之间的直接 PCIe 路径,并支持 DMA copy 与 kernel 内 remote load/store;GPUDirect RDMA 再允许 NIC 通过 PCIe BAR 直接读写跨节点 GPU memory。
这一步把“零拷贝”从宣传词变成了可检查的数据路径:真正被消除的是哪些 staging buffer 和 handoff。但 RDMA 主要优化 Payload,控制面仍没有自然消失。论文 Section 3.2
控制权开始下沉¶
GPUDirect Async 的转折在于控制路径:CPU 预注册网络操作,GPU kernel 在需要时触发 NIC。它减少了返回 host、同步、再发起通信的往返,却仍受预注册操作与 kernel boundary 约束。
更接近 device-native 的路径出现在 NVSHMEM IBGDA、ROC_SHMEM GPU-IB、GPUNetIO,以及论文 v4 讨论的 NCCL 2.28 Device API:GPU 不只是消费一项 host 已经安排好的工作,而是在 kernel 内表达通信、触发传输并等待结果。不过越接近这种模式,GPU-NIC memory ordering、cache flush 与跨设备同步就越不能含糊。
互联和软件栈补齐规模¶
GPUDirect 建立“能直达”的路径,NVLink 与 NVSwitch 解决“直达后是否有足够带宽、是否能覆盖更多 GPU”。前者提供 GPU 间高带宽互联,后者用交换结构减少非直连 GPU 经中间 GPU 路由的问题。GPU-aware MPI、NCCL、NVSHMEM、UCX 等库随后把这些硬件与 runtime primitive 组合为不同语义。
所以 Figure 3 中真正重要的不是哪一年多了一个圆点,而是:memory manager、data/control path、interconnect 与 library 必须同时成熟,device-native 才能从硬件能力变成应用可用的执行模型。
三类库回答不同问题¶
论文把主流用户层选择分成 GPU-aware MPI、GPU Collective Communication Library(GPUCCL)与 GPU-centric OpenSHMEM(GPUSHMEM)。它们并不是同一条性能轴上的三档产品,而是三种通信契约。论文 Section 4
MPI 保留消息语义¶
GPU-aware MPI 的优势是延续成熟的 rank、communicator 与 point-to-point/collective 生态,同时允许 device buffer 直接进入 MPI 调用。实现可以在节点内选择 IPC,在节点间选择 GPUDirect RDMA 或 ROCm RDMA,也可以通过 UCX 动态选择 transport。
它的根本摩擦来自 MPI 与 GPU stream 的语义错位。GPU kernel launch 对 host 异步,stream 用队列顺序表达依赖;标准 MPI 却没有正式的 stream 参数。为了保证 send buffer 已经生产完、recv buffer 可以消费,程序经常需要 host-blocking synchronization,kernel launch pipeline 和通信计算重叠因而被截断。MPIX Streams 等扩展正在补这个缺口,但论文指出它们尚未进入正式 MPI 标准。
GPUCCL 优化规则 collective¶
NCCL、RCCL 与 oneCCL 面向 AllReduce、AllGather、ReduceScatter 等规则 collective。NCCL/RCCL 把通信与 reduction 放进 GPU kernel,并按拓扑构造 ring、tree 和并行 channel;这与深度学习中形状稳定、重复调用的 collective 很契合。
但“同为 GPUCCL”也不意味着内部路径相同。NCCL 与 RCCL 更接近 GPU-resident collective kernel;论文描述的 oneCCL 主要通过 CPU worker、SYCL/Level Zero queue 与 MPI/libfabric backend 推进。RCCL 还必须显式面对多 XCD 与 Infinity Fabric 的非均匀拓扑。API 相似只能说明迁移成本较低,不能推出控制路径和性能相同。
GPUSHMEM 服务细粒度通信¶
NVSHMEM、ROC_SHMEM 与 Intel SHMEM 用 PGAS/对称内存暴露 one-sided Put/Get、signal、barrier 和 collective。device-side API 可以在 kernel 内根据动态状态决定目标 PE、地址和通信时机,适合 irregular access、persistent kernel 与细粒度通信计算融合。
代价也落在同一个位置。对称堆要求所有 PE 协同分配等大小对象,既有 runtime 未必容易接入;communication thread block 会与 computation 争用 SM、register 和 shared memory;global barrier 往往需要 cooperative launch,限制 hardware oversubscription。越把控制权交给 GPU,程序员越需要自己面对资源划分、memory ordering 和可观测性。
三类路径可以用下面的边界来记忆:
| 路径 | 最自然的对象 | 主要优势 | 主要摩擦 |
|---|---|---|---|
| GPU-aware MPI | rank、message、communicator | 兼容既有 HPC 程序,point-to-point 生态成熟 | 缺少标准 stream 语义,可能引入 host 同步 |
| GPUCCL | 规则 collective、固定 shape | topology-aware,适合训练中的重复 collective | 动态细粒度表达较弱,通信 kernel 与计算争资源 |
| GPUSHMEM | PE、symmetric heap、one-sided operation | device-side、动态、细粒度,适合 persistent kernel | 对称分配、同步、一致性与调试复杂 |
这张表只比较抽象边界,不替代目标机器上的测量。论文汇总的 benchmark 结论会随系统、消息大小、节点数、transport 和实现版本变化:MPI 往往在 point-to-point 更有竞争力,GPUCCL 往往更擅长 collective,GPUSHMEM 则在能够利用 kernel fusion 和细粒度访问的应用里体现优势。不存在脱离 workload 的总冠军。
CPU 退出后,成本去了哪里¶
GPU-centric 路径的直接收益很清楚:减少 host staging、kernel launch 往返与 CPU-induced latency barrier,让 fine-grained communication 更容易与计算交错。强扩展时,每张 GPU 分到的计算越来越少,固定的 host launch 和同步延迟越来越显眼,此时把触发与同步留在 kernel 内尤其有吸引力。论文 Section 5
但成本没有消失,只是换了位置。
- GPU 资源争用。 Direct Load/Store 和 communication kernel 使用 GPU thread 推进,可能与计算争抢 SM;DMA copy 使用独立 copy engine,不一定有同样冲突。
- 一致性边界。 GPUDirect RDMA 的 GPU-NIC consistency 曾主要在 kernel boundary 上得到保证。persistent kernel 不返回 host 时,必须显式处理 flush、ordering 与 completion,不能把“数据到达”直接等同于“远端可安全读取”。
- 拓扑异构。 同节点 GPU pair 的带宽可能不同,跨节点又多一层数量级差异;固定 ring/tree 未必适合每个规模和消息大小,collective synthesis 还可能面对昂贵搜索。
- 可移植性。 NVIDIA、AMD、Intel 的 memory model、interconnect 和 device API 并不完全对称。UCX/UCC 提供了重要的统一层,但更通用的抽象可能丢掉 native fast path,必须实测。
- 调试盲区。 传统 profiler 擅长观察 host-controlled call,却难以把 kernel 内 remote load/store、NVSHMEM operation 或 GPU-triggered transfer 归因到源码和对象;多 GPU race detection 仍明显不足。
CPU 的角色被重写,而不是被删除
论文在展望中专门收回了“CPU-free”容易造成的过度想象:CPU 仍适合承担初始化、资源注册、监控、调试、异常处理与 OS 服务。更准确的目标是让 CPU 退出稳态数据与控制关键路径,而不是让整台系统失去 host。
如何选择一条路径¶
如果把论文观点转成工程决策,我会先问下面四个问题,而不是先问“哪个库最快”:
- 通信粒度是否规则? 重复、固定 shape 的 AllReduce/AllGather 优先从 NCCL/RCCL 等 GPUCCL 开始;动态目标、细粒度 Put/Get 更接近 GPUSHMEM 的优势区。
- 既有语义能否改变? 大型 MPI 代码最现实的起点通常是 GPU-aware MPI、UCX/UCC 与 stream extension;为了 device-native 重写对称堆和 persistent kernel,迁移成本可能超过收益。
- 瓶颈在数据还是控制? 如果 profile 显示 host staging 占主导,P2P/RDMA 已经可能解决主要问题;只有 CPU launch、同步和短消息 latency 成为关键路径时,GPU-triggered/device-native 才是下一步。
- 正确性和可观测性是否过关? 在采用 persistent kernel、device-side API 或 GPU-NIC 直接交互前,应验证 memory ordering、cache flush、completion semantics、资源占用和故障恢复,并保留 MPI/NCCL baseline。
最小验证矩阵至少要固定 GPU/NIC 拓扑、消息大小、节点数、精度、transport 与库版本,同时分别记录 latency、effective bandwidth、CPU utilization、GPU occupancy 和端到端 step time。只跑聚合后的平均带宽,可能会掩盖瞬时噪声、tail latency 和某条回退路径。
仍未闭合的问题¶
论文最后留下的开放问题,比“继续提高带宽”更偏向系统软件:
- stream-aware 与 device-side 标准化:MPI、collective 与 PGAS 能否在不牺牲可移植性的前提下共享 GPU execution context。
- 自动生成 collective:如何根据拓扑、消息大小和运行时干扰选择算法,而不为每个规模重新进行高成本搜索。
- device-native 可观测性:如何把细粒度传输归因到源码、对象和 Rank,并检测跨 GPU race hazard。
- 通信与计算的资源分工:应该占用 GPU thread、copy engine、NIC/DPU,还是把 reduction 下沉到 switch。
- 压缩域通信:压缩能减少网络字节,但 compression/decompression 也会吃掉 GPU 计算;能否直接在压缩数据上做 collective operation,决定它是否真正减少总成本。
这些问题共同指向一个边界:通信控制下沉越深,硬件能够隐藏的细节越多,但 runtime 必须重新提供一致性、调度、调试和可移植性。GPU autonomy 不是免费午餐,而是一次系统责任的重新划分。
结语¶
回到开头,“GPU-aware”只能说明库认识 device buffer,不能说明整条路径由 GPU 自主执行。要判断一套方案究竟走到了哪里,仍要逐项检查:API 在哪调用,谁构造报文,谁触发传输,Payload 经过哪里。
Figure 3 之所以值得完整保留,也正在于它没有讲一个简单的替代故事。Pinned memory、UVA、GPUDirect、NVLink/NVSwitch 与 MPI/NCCL/NVSHMEM 并不是排队接班,而是在不同层次逐步移走 CPU 的 staging、寻址、触发和调度责任。
现在可以确认的是:GPU-centric communication 的主轴是数据路径与控制路径的分阶段迁移。论文不能替目标 workload 选出唯一最优库,也没有证明 CPU 应该从系统中消失。下一步真正有用的动作,是拿 Figure 2 的四个维度审计自己的运行路径,再用端到端测量判断:当前需要迁走的,究竟是一段数据拷贝,还是一次控制往返。
参考资料¶
- Didem Unat et al., The Landscape of GPU-Centric Communication, arXiv:2409.09874v4, 2026-04-23.
- 论文 PDF v4,本文关于分类、技术演进、用户层通信库与开放问题的观点均据此版本整理。
- arXiv TeX Source v4,Figure 2 与 Figure 3 从论文源码包中的原始 PDF 图渲染,未改绘数据或时间节点。

