下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

AllGather

功能说明

集合通信算子AllGather的任务下发接口,返回该任务的标识handleId给用户。AllGather的功能为:将通信域内所有节点的输入按照rank id重新排序,然后拼接起来,再将结果发送到所有节点的输出。

函数原型

1
2
template <bool commit = false>
__aicore__ inline HcclHandle AllGather(GM_ADDR sendBuf, GM_ADDR recvBuf, uint64_t sendCount, HcclDataType dataType, uint64_t strideCount, uint8_t repeat = 1)

参数说明

表1 模板参数说明

参数名

输入/输出

描述

commit

输入

bool类型。参数取值如下:

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

参数名

输入/输出

描述

sendBuf

输入

源数据buffer地址。

recvBuf

输出

目的数据buffer地址,集合通信结果输出到此buffer中。

sendCount

输入

参与AllGather操作的sendBuf的数据个数;recvBuf的数据size等于sendCount * rank size。

dataType

输入

AllGather操作的数据类型,HcclDataType详细可参考表3

strideCount

输入

  • strideCount=0,表示多张卡的数据拼接到一张卡的recvBuf时,相邻数据块保持地址连续。卡rank[i]的数据块将被放在recvBuf中,且偏移数据量为i*sendCount。非多轮切分场景下,推荐用户设置该参数为0。
  • strideCount>0,表示多张卡的数据拼接到一张卡的recvBuf时,相邻数据块在recvBuf中起始地址的偏移数据量为strideCount。卡rank[i]的数据块将被放在recvBuf中,且偏移数据量为i*strideCount。

注意:上述的偏移数据量为数据个数,单位为sizeof(dataType)。

repeat

输入

一次下发的AllGather通信任务个数。repeat取值≥1,默认值为1。当repeat>1时,每个AllGather任务的sendBuf和recvBuf地址由服务端自动算出,计算公式如下:

sendBuf[i] = sendBuf + sendCount* sizeof(datatype) * i, i∈[0, repeat)

recvBuf[i] = recvBuf + sendCount* sizeof(datatype) * i, i∈[0, repeat)

注意:当设置repeat>1时,须与strideCount参数配合使用,规划通信数据地址。

图1 AllGather通信示例

返回值

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

支持的型号

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

注意事项

  • 调用本接口前确保已调用过Init接口
  • 该接口只能在AI Cube核或者AI Vector核两者之一上调用
  • 该接口只在0核上工作

调用示例

// 假设已构造好HcclCombineOpParam对象hcclCombineOpParam,以及recvBuf和sendBuf
Hccl hccl;
hccl.Init(reinterpret_cast<GM_ADDR>(&hcclCombineOpParam));
if (g_coreType == AIC) {
    HcclHandle handleId = hccl.AllGather(sendBuf, recvBuf, 100, HcclDataType::HCCL_DATA_TYPE_INT8, 10);
}
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词