---
title: NB
description: "集合通信中，Ring算法通信步数为，其中N表示参与集合通信的rank数量，随着网络规模的增加，通信开销也会显著增加。RHD算法虽然将通信步数减少到了，但在rank数量不是2的幂时，需要进行数据合并操作，导致通信数据量增加。而NB算法（Nonuniform Bruck，非均匀的数据块通信算法）通过动态调整步长的多重环状结构，实现不同rank数量下均保持通信步数为，同时避免了额外的通信数据量增长。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/hcclug/hcclug_000122.html
sourcePath: /source/zh/canncommercial/900/API/hcclug/hcclug_000122.html
indexId: f912be4a688d28bfd4e9b9cf6e25dd158a9dd76a62e8d897a03834fd051daad859
---
# NB


#### 算法描述

集合通信中，Ring算法通信步数为，其中N表示参与集合通信的rank数量，随着网络规模的增加，通信开销也会显著增加。RHD算法虽然将通信步数减少到了，但在rank数量不是2的幂时，需要进行数据合并操作，导致通信数据量增加。而NB算法（Nonuniform Bruck，非均匀的数据块通信算法）通过动态调整步长的多重环状结构，实现不同rank数量下均保持通信步数为，同时避免了额外的通信数据量增长。

rank size是2的幂时，NB算法的通信过程如下图所示（以rank size等于4为例）。

图1 rank size为4时NB算法通信过程

rank size不是2的幂时，NB算法的通信过程如下图所示（以rank size等于5为例）。

图2 rank size为5时NB算法通信过程

对于ReduceScatter和AllGather算子，通信步数均为。- 针对ReduceScatter算子，每一步通信中，每张卡向通信步长为的目标卡发送数据，每步发送数据的份数为。
- 对于AllGather算子，每一步的通信步长递减，而通信数据量递增。当卡数不是2的幂时，最后一步的通信数据量为。


NB算法同样适用于“星型”和“胖树”拓扑，算法的时间复杂度为。


#### 耗时计算


**表1 NB算法中各操作耗时**

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