Thesis

Understanding GPU-Driven RDMA requires not the narrow lens of "GPU initiates RDMA," but the systems thinking of multiple execution units working in tight coordination — the same mindset that defined the multi-core era. When multiple CPU cores began sharing memory, cache coherence and memory ordering transformed from "implicit assumptions" into first-class design problems — you could no longer pretend each core owned its own memory. The same paradigm shift is now happening in GPU communication: as GPU, NIC, and CPU become tightly coupled through PCIe and NVLink, sharing the HBM address space, memory consistency and data ordering are no longer "implementation details" of the communication stack — they are fundamental constraints that define the entire system design.

GPUDirect RDMA (2013) let NICs DMA directly into GPU HBM, breaking the traditional boundary that "data must stage through CPU memory." GPUDirect Async (2016) let the GPU trigger RDMA via MMIO doorbells, breaking the control boundary that "communication must be initiated by the CPU." GDAKI / GIN (2024) gave GPU kernels full ownership of the RDMA lifecycle (create QP, issue transfer, track completion), breaking the role boundary that "GPU is a compute device, network devices belong to the CPU."

Each broken boundary tightens the coupling between memory and communication — and sharpens the urgency of ordering (in what order does the remote peer see data updates) and consistency (when can the remote peer actually observe the data). Just as multi-core programming demands explicit memory model reasoning (acquire / release / sequential consistency), GPU-Driven RDMA programming demands explicit reasoning about signal / counter / fence semantics — not as an optimization, but as a correctness prerequisite.

"GPUDirect RDMA provides consistency guarantees only at kernel boundaries. GPU memory model semantics (relaxed ordering, write-back caching) prevent safe concurrent access to RDMA-registered memory from executing kernels, forcing applications to separate computation and communication."

— GPU-Initiated Networking for NCCL, arXiv:2511.15076

GIN's design — one-sided semantics, windows-based (a)symmetric memory, GIN contexts, asynchronous completion tracking, ordering semantics — is a systematic response to these five fundamental challenges born from the tight convergence of memory and communication.


1. Three Generations: The QP Control Transfer

GenerationTechnologyQP CreatorOperation TriggerCPU in Hot PathYear
Gen 1GPUDirect RDMACPU (ibv_create_qp)CPU (ibv_post_send)Every operation~2013
Gen 2GPUDirect AsyncCPU (pre-configured)GPU (doorbell MMIO)Setup only~2016*
Gen 3GDAKI / GPUNetIOGPU kernelGPU kernelNone~2024

\Gen 2 date reflects the general GPUDirect Async doorbell-triggering concept (~2016). IBGDA — the concrete InfiniBand implementation of this concept, used inside NVSHMEM — shipped later, in NVSHMEM 2.6.0 (~2022, experimental mode). The two dates should not be conflated.*

The critical metric is per-operation control overhead:

(Latency figures below are order-of-magnitude estimates based on known syscall/MMIO overheads, not figures reported in the GIN paper — the paper's own measured latencies appear in §V, e.g. 16.7μs GDAKI ping-pong at small message sizes, cited separately below.)

Gen 1 path:  GPU → CPU syscall → kernel transition → MMIO doorbell → NIC    (~1-2μs)
Gen 2 path: GPU → MMIO doorbell → NIC (~300ns, but QP static)
Gen 3 path: GPU → create QP + MMIO doorbell → NIC (~100-300ns, fully dynamic)

As the GIN paper states: "GPUDirect Async introduced partial control-path offload: GPU threads trigger pre-configured network operations writing to NIC doorbell registers that are memory-mapped into the GPU address space. However, the CPU must pre-construct communication descriptors, limiting operations to those pre-configured by the host and preventing fully autonomous device-driven networking."

Gen 2's fundamental limitation: QP is static — fixed count, fixed configuration, no runtime adaptation, no GPU-side error recovery.


2. Concept Hierarchy

GPUDirect (NVIDIA umbrella brand)
├── GPUDirect RDMA — NIC DMA directly to GPU HBM (zero-copy data path)
├── GPUDirect Async — GPU triggers pre-configured RDMA via doorbell
│ └── IBGDA — InfiniBand-specific implementation
├── GPUDirect Storage — SSD DMA directly to GPU HBM (GDS)
└── GDAKI (GPU full control of RDMA lifecycle, GPU creates/destroys QP)
└── DOCA GPUNetIO — the underlying SDK/device-verbs layer
├── used directly by NVSHMEM 3.7.0+ (see §3.2)
└── used by NCCL GIN's "GDAKI backend" (one of GIN's two backends, see §3.3)

Software Ecosystem
├── NCCL GIN — Collective communication + GIN device API (3 modes: LSA, Multimem, GIN)
├── NVSHMEM — PGAS one-sided put/get (≤3.6: IBGDA, 3.7.0+: GPUNetIO)
└── DeepEP — MoE communication library (V1: NVSHMEM, V2: NCCL GIN)

Note: "GDAKI" (GPUDirect Async Kernel-Initiated) is the name the GIN paper gives to its own direct-mode backend — not a pre-existing NVIDIA umbrella term. Both NVSHMEM's GPUNetIO backend and NCCL GIN's GDAKI backend are built on the same underlying DOCA GPUNetIO device-verbs layer; they are two different API surfaces over one substrate, not two names for the same thing.

GIN's Three Device API Modes (NCCL 2.28+)

Per the arXiv paper, NCCL 2.28 Device API supports three distinct modes:

ModeInterconnectMechanismUse Case
LSA (Load/Store Accessible)NVLink / PCIeDirect memory load/storeIntra-node P2P
MultimemNVLink SHARPHardware multicastIntra-node broadcast
GINInfiniBand / RoCEGPU-initiated RDMAInter-node communication

3. NVSHMEM vs GIN: Convergent Bottom, Divergent Top

3.1 NVSHMEM ≤3.6: IBGDA Backend

  • CPU creates QP at init time; GPU triggers via doorbell
  • nvshmemi_ibgda_put_nbi — GPU kernel issues RDMA put
  • Limitation: QP count static, error handling requires CPU

3.2 NVSHMEM 3.7.0+: GPUNetIO Backend

  • GPU kernel creates/destroys QP dynamically via DOCA GPUNetIO
  • Full lifecycle control: gpunetio_create_queue → gpunetio_workq_complete
  • CPU completely off the hot path

3.3 NCCL GIN: Dual Backend

The GIN paper reveals a critical design insight: two interchangeable backends for different hardware:

BackendHardware RequirementMechanism
GDAKIConnectX-6 Dx+ / BlueField (DOCA GPUNetIO capable)GPU directly programs NIC via device verbs
ProxyAny RDMA-capable NICGPU enqueues 64-byte descriptors to lock-free queue; CPU proxy thread executes

"The GDAKI backend leverages DOCA GPUNetIO for direct GPU-to-NIC communication, while the Proxy backend provides equivalent functionality via lock-free GPU-to-CPU queues over standard RDMA networks."

— arXiv:2511.15076

This dual-backend design means GIN is not limited to latest hardware — it degrades gracefully on older NICs via Proxy.

3.4 Convergence Point

Both NVSHMEM 3.7.0+ GPUNetIO and NCCL GIN GDAKI backend converge on the same mechanism:

GPU kernel → DOCA GPUNetIO device verbs → MMIO doorbell → NIC hardware

The hardware requirement is identical: NIC must expose memory-mapped queue pairs and doorbell registers via PCIe BAR (ConnectX-6 Dx and later).


4. GIN's Ecosystem Play: Plugin Architecture for Multi-Vendor Expansion

GIN's core strategy is not merely to provide a GPU-initiated communication API, but to build a GPU-centric communication ecosystem. This strategy is most clearly reflected in its three-layer software architecture and extensible network plugin framework.

4.1 Three-Layer Architecture: Separation of Concerns

GIN's three-layer architecture (NCCL Core → Device GIN API → GIN Network Plugin) defines clear responsibility boundaries for each layer:

LayerResponsibilityKey Design
NCCL Core (Host)Communicator initialization, memory window registration, resource allocationExtends existing NCCL infrastructure without breaking compatibility
Device GIN API (GPU)put/signal primitives callable from CUDA kernelsUnified interface, transparent backend switching (GDAKI or Proxy)
GIN Network PluginConcrete implementation of remote data movementDual semantics (GDAKI + Proxy), supports vendor customization

"GIN builds on a three-layer architecture: i) NCCL Core host-side APIs for device communicator setup and collective memory window registration; ii) Device-side APIs for remote memory operations callable from CUDA kernels; and iii) A network plugin architecture with dual semantics (GPUDirect Async Kernel-Initiated and Proxy) for broad hardware support."

— arXiv:2511.15076

4.2 Dual Backend → Multi-Vendor Expansion

GIN's network plugin architecture was designed from the ground up for multi-vendor participation:

Backend TypeControl Path OwnershipHardware RequirementCurrent Support
GDAKIPlugin fully owns (createContext + device code)ConnectX-6 Dx+ / DOCA GPUNetIONVIDIA InfiniBand
ProxyNCCL Core owns control structures; plugin provides only CPU data pathAny RDMA-capable NICNVIDIA InfiniBand
External PluginDynamically loaded via libnccl-net.soVendor-definedOpen to third-party vendors

"NCCL's InfiniBand transport implements both, while external vendors may supply their own. Under the Proxy interface, NCCL Core owns control structures, device-side queuing logic, and device API implementations, while plugins provide only CPU-based put, signal, test, and regMr operations, enabling networks without GPU-direct capabilities and lowering the barrier to GIN adoption."

— arXiv:2511.15076

The key mechanism is the NCCL_NET_PLUGIN environment variable — external plugins are loaded at runtime without modifying NCCL core code. This means:

  • AWS EFA (Elastic Fabric Adapter) can join the GIN ecosystem by implementing a Proxy-semantics libnccl-net.so plugin
  • Other NIC vendors (Marvell/Cisco/Mellanox, etc.) need only provide 4 basic CPU data-path operations (put/signal/test/regMr) to gain full GIN Device API capability
  • No GPU-direct capability required — the Proxy backend allows NICs without DOCA GPUNetIO to participate in the ecosystem

4.3 Ecosystem Goal: A GPU-Centric Unified Communication Layer

GIN's ecosystem logic can be summarized as:

               ┌─────────────────────────────────┐
│ Application Layer │
│ (PyTorch, vLLM, SGLang, TRT) │
└──────────────┬──────────────────┘
│
┌──────────────▼──────────────────┐
│ NCCL Device GIN API │ ← Unified programming interface
│ (put / signal / flush / ...) │
└──────────────┬──────────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
┌────▼─────┐ ┌────▼─────┐ ┌────▼─────┐
│ GDAKI │ │ Proxy │ │ External │
│ (NVIDIA │ │ (Generic │ │ (AWS EFA,│
│ IB/RoCE)│ │ RDMA) │ │ others) │
└──────────┘ └──────────┘ └──────────┘

"By providing both hardware-direct and CPU-assisted plugin interfaces, GIN offers functionality across diverse deployment scenarios while maintaining compatibility with NCCL's existing ecosystem."

— arXiv:2511.15076

GIN's ecosystem bet is: when all NIC vendors connect via plugins, NCCL GIN becomes the "USB interface" for GPU communication — universal, plug-and-play, hardware-agnostic. This stands in stark contrast to NVSHMEM's path: NVSHMEM is a single-vendor (NVIDIA) vertical integration solution, while GIN attempts to build a horizontally-layered, multi-vendor ecosystem.


5. What Problems Does GIN Solve? The Five Fundamental Challenges

GIN's design essentially answers one question: when a GPU directly initiates network communication, what fundamental problems must be solved? The paper itself names 5 design elements in §III-A (one-sided semantics, symmetric memory windows, GIN contexts, completion tracking, ordering semantics), listed as a flat set. Grouping them into "3 fundamental challenges in one-sided communication plus 2 programming usability requirements" below is my own reading of how these elements relate — not a taxonomy the paper draws explicitly.

5.1 Three Fundamental Challenges

In any one-sided communication system (GIN, NVSHMEM, OpenSHMEM), three foundational problems must be addressed:

#ChallengeCore QuestionGIN's Solution
1Data TransferHow does a GPU remotely write/read data?One-Sided Semantics (put / put with signal)
2OrderingIn what order does the remote peer see data updates?Ordering Semantics (signal guarantees visibility order of preceding puts)
3ConsistencyWhen can the remote peer actually observe the data?Asynchronous Completion Tracking (Signal/Counter for remote visibility notification)

"These components enable device-initiated one-sided communication through several key design elements: one-sided semantics for unilateral data movement, symmetric memory windows for zero-copy remote access, and asynchronous completion tracking with flexible ordering semantics."

— arXiv:2511.15076

5.2 Two Programming Usability Requirements

Beyond the three foundational challenges, GIN must also make it easy for programmers to write correct communication code:

#RequirementCore QuestionGIN's Solution
4Network ParallelismHow to fully utilize multiple NICs/ports/QPs?GIN Contexts (each context abstracts a GPU↔NIC channel)
5Memory FlexibilityMust memory be symmetric?Windows-based (A)Symmetric Memory (supports asymmetric capacities)

"GIN windows are designed to support asymmetry in capacity: each rank may register different buffer sizes. This flexibility proves essential for disaggregated serving architectures where prefill ranks require larger buffers than decode ranks."

— arXiv:2511.15076

5.3 Why Ordering and Consistency Are the Cornerstones of One-Sided Communication

Consider a simple example illustrating why these two concepts matter.

Scenario: GPU A needs to send a batch of data to GPU B and notify B that "data is ready."

GPU A (Sender)                   GPU B (Receiver)
───────────── ─────────────
put(data[0] → B) ──────→ (in network...)
put(data[1] → B) ──────→ (in network...)
signal(B, ready) ──────→ (in network...)
...
How does B know the data truly arrived?

Problem 1 — Ordering:

If signal arrives at B before the data (network reordering), B thinks "data is ready" but data[0] and data[1] are still in transit. B reads stale data.

GIN's solution:

"When a signal operation completes at the destination, it guarantees that all preceding put operations to that peer on the same context have completed and are visible to remote GPU threads."

A signal is an ordering anchor: signal visible = all preceding puts visible. Programmers need only attach a signal to the final put and then waitSignal — guaranteeing ordered visibility of the entire batch.

Problem 2 — Consistency:

Even after data arrives in B's HBM, B's GPU kernels may not immediately see it — because GPUs have write-back caches and relaxed memory models.

GIN distinguishes two completion states:

  • Local completion (flush): source buffers can be safely reused (data has left the sender)
  • Remote completion (waitSignal): data has arrived at destination and is visible to remote GPU threads

"The flush operation ensures only local completion—all pending operations have been consumed and source buffers can be safely reused—but makes no guarantees about remote visibility."

In one sentence: Ordering answers "in what order is data seen," Consistency answers "when can data be seen." Both are indispensable — without Ordering, data may arrive out of order; without Consistency, data may have arrived but remain unreadable. GIN unifies both through the signal mechanism: a signal guarantees both ordering (all preceding puts complete) and visibility (visible to remote GPU threads).

5.4 GIN vs NVSHMEM: Same Problems, Different Solutions

Notably, NVSHMEM as a mature PGAS library must also address all 5 challenges. The comparison:

Design ElementGINNVSHMEM
Data Transferput(team, peer, win, off, ...)put_nbi(dst_ptr, src_ptr, count, pe)
OrderingSignal-based (ID-addressed, lightweight)fence / quiet (QP-level)
ConsistencyCounter (local) + Signal (remote)quiet() per QP
Network ParallelismGIN Context (explicit multi-channel)QP per PE
Memory ModelWindow-based (supports asymmetric capacity)Symmetric Heap (global address space)

GIN's signal-based ordering is lighter-weight than NVSHMEM's fence/quiet — it guarantees only "put-signal order within the same context to the same peer," not global ordering. This selective guarantee enables higher network efficiency.


6. Runtime Ecosystem: Where the Real Difference Lies

Since the physical layer is identical, the differentiation is purely at the runtime semantic level.

NCCL: Collective-First

  • API: AllReduce, AllGather, ReduceScatter, Broadcast + device-side put/signal primitives
  • Topology: Deep NVLink/IB hierarchy awareness (rail/plane/world)
  • In-network compute: SHARP hardware reduction inside IB switches
  • Memory model: Collective symmetric memory via ncclCommWindowRegister
  • Elasticity: Dynamic rank join/leaving for production fault tolerance

NVSHMEM: PGAS-First

  • API: One-sided put/get/atomics (OpenSHMEM compatible)
  • Memory model: Symmetric heap (nvshmem_alloc) — all ranks see same global address space
  • HPC compatibility: OpenSHMEM standard API — existing HPC codes port with minimal changes
  • Transport: IBGDA (≤3.6) or GPUNetIO (3.7.0+) for inter-node, symmetric memory for intra-node

Key Semantic Difference

PropertyNCCLNVSHMEM
Communication patternCollective (all ranks participate)One-sided (initiator-only)
SynchronizationImplicit (collective barrier)Explicit (fence, barrier, quiet)
Address spaceWindow-based (rank-relative offset)Global symmetric address
Completion trackingSignal (remote) + Counter (local)fence / quiet / barrier
Standard compatibilityNVIDIA-proprietaryOpenSHMEM standard

7. The DeepEP Signal: Migration from NVSHMEM to NCCL GIN

DeepEP's version history is the clearest signal of ecosystem convergence:

VersionSymmetric Memory AllocationCommunication Backend
V1 Legacynvshmem_allocNVSHMEM IBGDA (nvshmemi_ibgda_put_nbi)
V2 ElasticncclMemAlloc / CUDA Driver APINCCL GIN (ncclGin put/signal)

The GIN paper explicitly uses DeepEP as the integration demonstration: "We demonstrate GIN's practicality through integration with DeepEP, an MoE communication library."

Why the migration matters: DeepEP V1 proved that GPU-initiated communication is essential for MoE. DeepEP V2 proves that GIN can match NVSHMEM's device-initiated capability while retaining NCCL's production infrastructure (hierarchical communicators, elasticity, fault tolerance).


8. Future Trajectory

Open Questions

1. If bottom converges, what decides the winner?

  • The runtime abstraction's ability to exploit GPU-initiated capability — not the raw mechanism itself.
  • NCCL's structural advantage: SHARP in-network reduction + topology-aware collectives.
  • NVSHMEM's structural advantage: OpenSHMEM standard + one-sided semantics for irregular patterns.

2. Will NVSHMEM be absorbed into NCCL?

  • Short term (1-2yr): No. OpenSHMEM compatibility is independent value for HPC.
  • Medium term: Partial. NCCL may expose one-sided put/get primitives, eroding NVSHMEM's differentiation.
  • Key signal: Does NCCL add a one-sided API? If yes, NVSHMEM's reason to exist shrinks dramatically.

3. Or long-term coexistence?

  • Most likely: unified bottom + divided top. GPU-initiated RDMA as common substrate; NCCL for ML collectives, NVSHMEM for HPC PGAS. Ecosystem inertia > technical merit.

9. References

#SourceURL
1GPU-Initiated Networking for NCCL (NVIDIA, arXiv:2511.15076)https://arxiv.org/abs/2511.15076
2NVIDIA GPUDirect RDMA Documentationhttps://docs.nvidia.com/cuda/gpudirect-rdma/
3NVIDIA Blog: Improving Network Performance using GPUDirect Asynchttps://developer.nvidia.com/blog/improving-network-performance-of-hpc-systems-using-nvidia-magnum-io-nvshmem-and-gpudirect-async/
4NVIDIA DOCA GPUNetIOhttps://docs.nvidia.com/doca/archive/doca-v2.5.0/gpunetio/index.html
5NVSHMEM Installation Guidehttps://docs.nvidia.com/nvshmem/release-notes-install-guide/install-guide/abstract.html
6DeepEP GitHubhttps://github.com/deepseek-ai/DeepEP
7NCCL Documentationhttps://docs.nvidia.com/deeplearning/nccl/user-guide/docs/

Key Source Paths (DeepEP)

FilePurpose
deep_ep/symmetric.hppV1 NVSHMEM alloc vs V2 NCCL ncclMemAlloc / CUDA Driver API
deep_ep/nccl.cuNCCL GIN context creation (ncclDevCommCreate with ginContextCount)
deep_ep/handle.cuhgin.put, gin.signal — GPU kernel-side remote operations
deep_ep/internode.cuV1 nvshmemi_ibgda_put_nbi_warp vs V2 GIN put

Key GIN Paper Sections

SectionContent
§ III-AKey GIN Design Elements (one-sided semantics, symmetric memory windows, GIN contexts, completion tracking, ordering semantics)
§ III-BDevice-Side API and Programming Model (ncclGin class, API organization, usage workflow)
§ III-CBackend Implementations (GDAKI vs Proxy comparison, Table I)
§ IVDeepEP Integration (integration requirements, backend strategy, Table II API mapping)
§ VPerformance Evaluation (point-to-point microbenchmarks, DeepEP HT/LL benchmarks)

Date: 2026-08-16

Method: Source analysis (DeepEP) + NVIDIA official docs + arXiv:2511.15076 (full paper deep read)