点对点通信函数¶
(自 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()部分内融合。
相关链接: 点对点通信。