---
title: Ring
description: "Ring算法，所有的NPU以环形相连，每张卡都有左手卡与右手卡，一个负责数据接收，一个负责数据发送，循环完成梯度累加，再循环做参数同步。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/hcclug/hcclug_000117.html
sourcePath: /source/zh/canncommercial/900/API/hcclug/hcclug_000117.html
indexId: 5faf050f91171108cb44f754e0a84fd49c8628b7e755bcde794db2d284bb17da59
---
# Ring

#### 算法描述

Ring算法，所有的NPU以环形相连，每张卡都有左手卡与右手卡，一个负责数据接收，一个负责数据发送，循环完成梯度累加，再循环做参数同步。


Ring算法适用于“星型”或“胖树”拓扑互联，其特点是通过Ring环将所有NPU设备的单端口双工链路串联起来。

Ring算法实现AllReduce算子的流程如下图所示，每一步依次给下游发送对应的数据块，沿着环转一圈之后完成ReduceScatter阶段，再沿环转一圈完成AllGather阶段。


Ring算法的时间复杂度是O(n-1)，n为Ring环上的NPU设备个数。


#### 耗时计算

整体思路为：将所有参与的节点构成环，每个节点只和左右节点通信，如果节点数为p，则需要的通信次数为p-1，每次交换的数据。


**表1 Ring算法中各操作计算耗时**

| 操作 | 耗时 |
| --- | --- |
| Scatter |  |
| Gather |  |
| Broadcast | 实现为Scatter + AllGather，耗时为： |
| Reduce | 实现为ReduceScatter + Gather，耗时为： |
| ReduceScatter |  |
| AllGather |  |
| Allreduce | 实现为ReduceScatter + AllGather，耗时为： |
