跳到主要内容

原地操作

与 MPI 不同,MCCL 没有定义一个特殊的"原地"值来替换指针。相反,MCCL 优化了提供的指针实际上是"原地"的情况。

对于 mcclBroadcastmcclReducemcclAllReduce 函数,这意味着传递 sendBuff == recvBuff 将执行原地操作,将最终结果存储在与初始数据读取的相同位置。

对于 mcclReduceScattermcclAllGather,当每个 rank 的指针位于全局缓冲区的 rank 偏移处时,执行原地操作。更精确地说,这些调用被认为是原地的:

mcclReduceScatter(data, data+rank*recvcount, recvcount, datatype, op, comm, stream);

mcclAllGather(data+rank*sendcount, data, sendcount, datatype, op, comm, stream);