集体操作
集体操作必须为每个 rank(因此是 MUSA 设备)调用,使用相同的计数和相同的数据类型,以形成一个完整的集体操作。不这样做将导致未定义的行为,包括挂起、崩溃或数据损坏。
AllReduce
AllReduce 操作在设备间对数据(例如,求和、最小值、最大值)进行归约,并将结果存储在每个 rank 的接收缓冲区中。
在 k 个 rank 之间的 求和 AllReduce 操作中,每个 rank 将提供一个包含 N 个值的数组,并在包含 N 个值的数组 out 中接收相同的结果,其中 out[i] = in0[i] + in1[i] + ... + in(k-1)[i]。

AllReduce 操作:每个 rank 接收跨 rank 输入值的归约结果。
相关链接:mcclAllReduce()。
Broadcast
Broadcast 操作从 root rank 复制一个 N 元素缓冲区到所有 rank。

Broadcast 操作:所有 rank 从 root rank 接收数据。
重要说明:root 参数是 rank 之一,不是设备编号,因此受到不同的 rank 到设备映射的影响。
相关链接:mcclBroadcast()。
Reduce
Reduce 操作执行与 AllReduce 相同的操作,但只将结果存储在指定 root rank 的接收缓冲区中。

Reduce 操作:一个 rank 接收跨 rank 输入值的归约结果。
重要说明:root 参数是 rank 之一(不是设备编号),因此受到不同的 rank 到设备映射的影响。
注意:Reduce 后跟 Broadcast,等同于 AllReduce 操作。
相关链接:mcclReduce()。
AllGather
AllGather 操作从 k 个 rank 中收集 N 个值到大小为 k*N 的输出缓冲区,并分配该结果到所有 rank。
输出按 rank 索引排序。因此,AllGather 操作受到不同的 rank 到设备映射的影响。

AllGather 操作:每个 rank 按 rank 顺序接收来自所有 rank 的数据聚合。
注意:执行 ReduceScatter 后跟 AllGather,等同于 AllReduce 操作。
相关链接:mcclAllGather()。
ReduceScatter
ReduceScatter 操作执行与 Reduce 相同的操作,但结果在 rank 之间以等大小的块分散,每个 rank 根据其 rank 索引获得一块数据。
由于 rank 决定数据布局,ReduceScatter 操作受到不同的 rank 到设备映射的影响。

ReduceScatter 操作:输入值在 rank 间归约,每个 rank 接收结果的子部分。
相关链接:mcclReduceScatter()。
AlltoAll
AlltoAll 操作会让每个 rank 向所有其他 rank 发送相同数量的数据,并从所有其他 rank 接收相同数量的数据。
相关链 接:mcclAlltoAll()。
Gather
Gather 操作会将每个 rank 上的数据收集到 root rank 的接收缓冲区中。
相关链接:mcclGather()。
Scatter
Scatter 操作会由 root rank 将数据块分发到所有 rank 的接收缓冲区中。
相关链接:mcclScatter()。

