BatchWrite

产品支持情况

产品

是否支持

Ascend 950PR/Ascend 950DT

x

Atlas A3 训练系列产品 / Atlas A3 推理系列产品

√

Atlas A2 训练系列产品 / Atlas A2 推理系列产品

√

Atlas 200I/500 A2 推理产品

x

Atlas 推理系列产品 AI Core

x

Atlas 推理系列产品 Vector Core

x

Atlas 训练系列产品

x

功能说明

集合通信BatchWrite的任务下发接口,返回该任务的标识handleId给用户。BatchWrite实现了一种点对点通信,这是一种直接传输数据的通信模式,能够同时将多份数据发送到不同的Global Memory地址上。

对于 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ,BatchWrite通信支持在相同或不同的昇腾AI Server之间进行。

对于 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ,BatchWrite通信必须在不同昇腾AI Server(通常是8卡或16卡的昇腾NPU设备组成的服务器形态的统称)之间进行。

图1 BatchWrite示意图

函数原型

1
2
template <bool commit = false>
__aicore__ inline HcclHandle BatchWrite(GM_ADDR batchWriteInfo, uint32_t itemNum, uint16_t queueID = 0U)

参数说明

表1 模板参数说明

参数名

输入/输出

描述

commit

输入

bool类型。参数取值如下:

  • true:在调用Prepare接口时,Commit同步通知服务端可以执行该通信任务。
  • false:在调用Prepare接口时,不通知服务端执行该通信任务。
表2 接口参数说明

参数名

输入/输出

描述

batchWriteInfo

输入

通信任务信息的Global Memory地址。一组通信数据的相关信息必须按指定的格式保存,在执行通信任务时,可以同时指定多组通信任务信息,执行通信任务时批量发送数据。

对于 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ,格式如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
struct BatchWriteItem {
    uint64_t type;
    uint32_t res1[5];
    uint32_t length;
    uint32_t srcAddrLow;
    uint32_t srcAddrHigh;
    uint32_t dstAddrLow;
    uint32_t dstAddrHigh;
    uint32_t res2[4];
};
  • type:预留参数,取值为0。
  • res1[5]:预留参数,无需填写该值。
  • length:待拷贝数据的长度。
  • srcAddrLow:待拷贝数据的源地址低32位。
  • srcAddrHigh:待拷贝数据的源地址高32位。
  • dstAddrLow:待拷贝数据的目的地址低32位。
  • dstAddrHigh:待拷贝数据的目的地址高32位。
  • res2[4]:预留参数,无需填写该值。

对于 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ,格式如下:

1
2
3
4
5
6
7
struct BatchWriteItem {
    uint64_t localBuf;
    uint64_t remoteBuf;
    uint64_t count;
    uint32_t dataType;
    uint32_t remoteRankId;
};
  • localBuf:本端发送数据的window地址。
  • remoteBuf:对端接收数据的window地址。
  • count:该通信任务发送的数据个数。
  • dataType:该通信任务发送的数据类型,支持的类型可参考HcclDataType参数说明。
  • remoteRankId:该通信任务发送数据的目的卡卡号。

itemNum

输入

批量任务的个数。该参数取值必须与batchWriteInfo中通信任务信息的组数一致。

对于 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ,该参数取值不能大于等于2048。

queueID

输入

指定当前通信所在的队列ID,默认值为0。

Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ,该参数仅支持取值为0。

返回值说明

返回该任务的标识handleId,handleId大于等于0。调用失败时,返回 -1。

约束说明

调用示例