NCCL 2.29 – One-Sided Host APIs #2007
gab9talavera
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
One-Sided Host APIs
One-Sided Host APIs introduce host-initiated one-sided Remote Memory Access (RMA) APIs in NCCL 2.29 that allow a rank to directly write data into remote memory without requiring a matching operation from the target rank. These APIs support both scale-up (NVLink/PCIe) and scale-out (network) communication. The implementation avoids Streaming Multiprocessor (SM) involvement, enabling SM resources to remain available for computation. For scale-up transfers, data movement is handled by GPU Copy Engines over NVLink or PCIe, while scale-out transfers are coordinated by a CPU proxy over the network.
A typical usage pattern starts with
ncclPutSignal, which writes to a peer's registered window and updates a remote signal. The target rank can subsequently synchronize on this signal usingncclWaitSignal. Memory exposed for one-sided access must first be registered with the communicator viancclCommWindowRegister.For more complex communication patterns involving multiple peers,
ncclPutSignalcalls can be batched usingncclGroupStart/ncclGroupEnd. Grouping allows multiple one-sided operations to be launched concurrently, reducing host overhead and improving launch efficiency. Within a group,putoperations targeting different peers or different contexts may execute out of order and overlap, and no ordering should be inferred across peers. NCCL guarantees ordering per peer and per context: operations issued to the same peer and context complete in program order. A signal update also provides completion semantics, guaranteeing that all preceding puts to the same peer and context have been delivered before the signal is observed by the receiver.For barrier-style or fan-in synchronization across many ranks, grouped
ncclPutSignaloperations should be paired with a corresponding set ofncclWaitSignaldescriptors on the receiving side.One-sided APIs require CUDA 12.5 or higher. For additional details and usage guidelines, see the NCCL documentation on one-sided communication.
—
Authored by Zhenhao He (@zhenhaohe)
All reactions