点对点通信函数¶
(自 NCCL 2.7 起) 当 ranks 需要相互发送和接收任意数据时,需要使用点对点通信原语,这些数据不能表示为广播或 allgather,即当所有发送和接收的数据都不同时。
ncclSend¶
-
ncclResult_t
ncclSend
(const void* sendbuff, size_t count, ncclDataType_t datatype, int peer, ncclComm_t comm, cudaStream_t stream)¶ 将数据从
sendbuff
发送到 rankpeer
。Rank
peer
需要使用相同的datatype
和相同的count
调用 ncclRecv。此操作对于 GPU 是阻塞的。 如果多个
ncclSend()
和ncclRecv()
操作需要并发进行才能完成,则它们必须在ncclGroupStart()
/ncclGroupEnd()
部分内融合。
相关链接: 点对点通信。
ncclRecv¶
-
ncclResult_t
ncclRecv
(void* recvbuff, size_t count, ncclDataType_t datatype, int peer, ncclComm_t comm, cudaStream_t stream)¶ 从 rank
peer
接收数据到recvbuff
中。Rank
peer
需要使用相同的datatype
和相同的count
调用 ncclSend。此操作对于 GPU 是阻塞的。 如果多个
ncclSend()
和ncclRecv()
操作需要并发进行才能完成,则它们必须在ncclGroupStart()
/ncclGroupEnd()
部分内融合。
相关链接: 点对点通信。