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) |
参数说明
参数名 |
输入/输出 |
描述 |
---|---|---|
commit |
输入 |
bool类型。参数取值如下:
|
参数名 |
输入/输出 |
描述 |
---|---|---|
sendBuf |
输入 |
源数据buffer地址。 |
recvBuf |
输出 |
目的数据buffer地址,集合通信结果输出到此buffer中。 |
sendCount |
输入 |
参与AllGather操作的sendBuf的数据个数;recvBuf的数据size等于sendCount * rank size。 |
dataType |
输入 |
AllGather操作的数据类型,HcclDataType详细可参考表3。 |
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参数配合使用,规划通信数据地址。 |
返回值
返回该任务的标识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); }