查询拓扑信息
背景
为了应对复杂的网络拓扑结构,通信算子需要根据通信域的拓扑结构选择最匹配的算法,为此,HCCL控制面提供了拓扑信息查询功能,供开发者使用。
拓扑信息
HCCL控制面接口支持查询的拓扑信息如下表所示。
|
拓扑信息 |
查询接口 |
|---|---|
|
获取Device在指定通信域中对应的rank序号。 |
|
|
查询指定通信域的rank数。 |
|
|
查询包含当前rank的拓扑层级编号列表以及拓扑层级数量。 |
|
|
给定通信域和拓扑层级编号,返回该层级下本rank所在拓扑实例的所有rank编号列表以及rank数量。 |
|
|
给定通信域和拓扑层级编号,返回该层级下本rank所在拓扑实例的rank数量。 |
|
|
给定通信域和拓扑层级编号,返回本rank所在拓扑层级中的拓扑类型。 |
|
|
给定通信域和拓扑层级编号,查询该层级下的拓扑实例数量,以及每个实例包含的rank数量。 |
|
|
给定通信域和拓扑层级编号,查询源rank和目的rank之间的通信连接信息。 |
代码示例
查询通信域内当前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; } |
父主题: 通信算子开发