昇腾社区首页
中文
注册
开发者
下载

查询拓扑信息

背景

为了应对复杂的网络拓扑结构,通信算子需要根据通信域的拓扑结构选择最匹配的算法,为此,HCCL控制面提供了拓扑信息查询功能,供开发者使用。

拓扑信息

HCCL控制面接口支持查询的拓扑信息如下表所示。

拓扑信息

查询接口

获取Device在指定通信域中对应的rank序号。

HcclGetRankId

查询指定通信域的rank数。

HcclGetRankSize

查询包含当前rank的拓扑层级编号列表以及拓扑层级数量。

HcclRankGraphGetLayers

给定通信域和拓扑层级编号,返回该层级下本rank所在拓扑实例的所有rank编号列表以及rank数量。

HcclRankGraphGetRanksByLayer

给定通信域和拓扑层级编号,返回该层级下本rank所在拓扑实例的rank数量。

HcclRankGraphGetRankSizeByLayer

给定通信域和拓扑层级编号,返回本rank所在拓扑层级中的拓扑类型。

HcclRankGraphGetTopoTypeByLayer

给定通信域和拓扑层级编号,查询该层级下的拓扑实例数量,以及每个实例包含的rank数量。

HcclRankGraphGetInstSizeListByLayer

给定通信域和拓扑层级编号,查询源rank和目的rank之间的通信连接信息。

HcclRankGraphGetLinks

代码示例

查询通信域内当前rank的id:

1
2
3
4
5
u32 userRank = INVALID_VALUE_RANKID;
HcclResult ret = HcclGetRankId(comm, &userRank);
if (userRank == root && sendBuf == nullptr) {     // root节点的send_buff不允许为空
    return HCCL_E_PTR;
}

查询通信域的rank数量:

1
2
3
4
5
u32 rankSize = INVALID_VALUE_RANKSIZE;
HcclResult ret = HcclGetRankSize(comm, &rankSize);
if (userRank >= rankSize) {     // rank_id 超出范围
    return HCCL_E_PARA;
}

查询本卡与Server内0号卡之间的链路信息:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
u32 dstRank = 0;
u32 srcRank = rank;
CommLink *linkList = nullptr;
u32 listSize = 0;
HcclResult ret = HcclRankGraphGetLinks(comm, 0, srcRank, dstRank, &linkList, &listSize);
for (u32 i = 0; i < listSize; ++i) {
    CommLink& currentLink = linkList[i]; // 枚举所有链路对象
    if (currentLink.linkAttr.linkProtocol == CommProtocol::COMM_PROTOCOL_HCCS) {
        // 对HCCS链路的判断处理
    }
}

查询本卡所在通信域包含的超节点数量:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
u32 *netlayers = nullptr;
u32 netLayersNum = 0;
HcclResult ret = HcclRankGraphGetLayers(comm, &netlayers, &netLayersNum); // 获取通信域中包含的通信网络层次
u32 superPodNum;
u32 level1RankListNum = 0;
u32 *level1SizeList = nullptr;
if (netLayersNum == 3) { // 超节点场景
    ret = HcclRankGraphGetInstSizeListByLayer(comm, 1, &level1SizeList, &level1RankListNum);
    superPodNum = level1RankListNum;
}