原地操作
与 MPI 不同,MCCL 没有定义一个特殊的"原地"值来替换指针。相反,MCCL 优化了提供的指针实际上是"原地"的情况。
对于 mcclBroadcast、mcclReduce 和 mcclAllReduce 函数,这意味着传递 sendBuff == recvBuff 将执行原地操作,将最终结果存储在与初始数据读取的相同位置。
对于 mcclReduceScatter 和 mcclAllGather,当每个 rank 的指针位于全局缓冲区的 rank 偏移处时,执行原地操作。更精确地说,这些调用被认为是原地的:
mcclReduceScatter(data, data+rank*recvcount, recvcount, datatype, op, comm, stream);
mcclAllGather(data+rank*sendcount, data, sendcount, datatype, op, comm, stream);

