CUDA Stream Semantics

NCCL 调用与一个 stream 关联,该 stream 作为集体通信函数的最后一个参数传递。当操作已有效排队到给定 stream 时,或者返回错误时,NCCL 调用返回。然后,集体操作在 CUDA 设备上异步执行。可以使用标准 CUDA 语义查询操作状态,例如,调用 cudaStreamSynchronize 或使用 CUDA 事件。

在同一 ncclGroupStart/End() 组内混合使用多个 Stream

NCCL 允许在一个 group call 中使用多个 stream。这将强制所有 stream 在 NCCL 内核启动之前存在 stream 依赖性,并阻塞所有 stream 直到 NCCL 内核完成。

它的行为就像 NCCL group 操作发布在每个 stream 上一样,但鉴于它是一个单一操作,它将导致 stream 之间的全局同步点。