LCOV - code coverage report
Current view: top level - legacy/ascend910/framework/nslbdp - hccl_nslbdp.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 1 1
Test Date: 2026-08-18 17:47:01 Functions: 100.0 % 1 1

            Line data    Source code
       1              : /**
       2              :  * Copyright (c) 2025 Huawei Technologies Co., Ltd.
       3              :  * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
       4              :  * CANN Open Software License Agreement Version 2.0 (the "License").
       5              :  * Please refer to the License for details. You may not use this file except in compliance with the License.
       6              :  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
       7              :  * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
       8              :  * See LICENSE in the root of the software repository for the full text of the License.
       9              :  */
      10              : 
      11              : #ifndef HCCL_NSLBDP_H
      12              : #define HCCL_NSLBDP_H
      13              : 
      14              : #include <vector>
      15              : #include <memory>
      16              : #include <map>
      17              : #include <mutex>
      18              : 
      19              : #include "hccl/base.h"
      20              : #include "hccl_common.h"
      21              : #include "hccl_comm_pub.h"
      22              : #include "topoinfo_struct.h"
      23              : #include "sal_pub.h"
      24              : #include "comm.h"
      25              : #include "coll_alg_param.h"
      26              : #include "hccl_nslbdp_pub.h"
      27              : 
      28              : namespace hccl {
      29              : 
      30              : constexpr unsigned int NSLBDP_ILLEGAL_TLVBUFFERSIZE = 0;
      31              : constexpr unsigned int NSLBDP_ILLEGAL_MSGLENGTH = 0;
      32              : constexpr unsigned int NSLBDP_TYPE_TBL_COMM_INFO = 1001;
      33              : constexpr unsigned int NSLBDP_TYPE_TBL_OPER = 1002;
      34              : constexpr unsigned int NSLBDP_TYPE_TBL_ADJ = 1003;
      35              : constexpr unsigned int NSLBDP_TYPE_TBL_RANK = 1004;
      36              : constexpr unsigned int NSLBDP_TYPE_TBL_RANK_DIST = 1005;
      37              : constexpr unsigned int NSLBDP_TYPE_TBL_ROOT_RANK = 1006;
      38              : constexpr unsigned int NSLBDP_TYPE_INIT_NETCO = 9001;
      39              : constexpr unsigned int NSLBDP_TYPE_DEINIT_NETCO = 9002;
      40              : 
      41              : constexpr u32 NSLBDP_RANKTOTALNUM_BLOCK_FIR = 1024;
      42              : constexpr u32 NSLBDP_RANKTOTALNUM_BLOCK_SEC = 2 * 1024;
      43              : constexpr u32 NSLBDP_RANKTOTALNUM_BLOCK_THR = 3 * 1024;
      44              : constexpr u32 NSLBDP_RANKTOTALNUM_BLOCK_FOU = 4 * 1024;
      45              : 
      46              : constexpr u32 NSLBDP_HIGH_8BIT = 8;
      47              : 
      48              : constexpr u16 NSLBDP_COMMINTERVAL_FLAG = 128;
      49              : constexpr u16 NSLBDP_COMMINTERVAL_FLAGSEC = 256;
      50              : constexpr u16 NSLBDP_COMMINTERVAL_FLAGTHR = 512;
      51              : constexpr u16 NSLBDP_COMMINTERVAL_FLAGFOU = 1024;
      52              : constexpr u16 NSLBDP_COMMINTERVAL_FLAGFIV = 2048;
      53              : constexpr u16 NSLBDP_COMMINTERVAL_FLAGSIX = 4096;
      54              : 
      55              : constexpr u32 NSLBDP_PKTNUM_FIR = 1;
      56              : constexpr u32 NSLBDP_PKTNUM_SEC = 2;
      57              : constexpr u32 NSLBDP_PKTNUM_THR = 3;
      58              : constexpr u32 NSLBDP_PKTNUM_FOU = 4;
      59              : 
      60              : constexpr u32 NSLBDP_TASKID_OFFSET = 32;
      61              : 
      62              : constexpr u32 NSLBDP_INITIME_MILLISENDS = 1000;
      63              : 
      64              : constexpr u32 NSLBDP_PAIRWISE = 5;
      65              : 
      66              : constexpr u32 NSLBDP_BEGINFOURBIT = 2;
      67              : 
      68              : constexpr u32 NSLBDP_SPLIT_SIZE = 3;
      69              : 
      70              : constexpr u16 NSLBDP_PRIVATE_PORT = 3;
      71              : constexpr u16 NSLBDP_RANGE_ID = 14;
      72              : constexpr u16 NSLBDP_COMMON_RANGE = 11;
      73              : constexpr u16 NSLBDP_ALGO_RANGE = 4;
      74              : 
      75              : constexpr u32 NSLBDP_TRAFFICCONUT = 60;
      76              : 
      77              : enum class NslbDpAlgType {
      78              :     NSLBDP_WHOLE_RING = 0, // 单层拓扑, 所有level均为Whole ring时,组成一个大环
      79              :     NSLBDP_HD,             // HDR
      80              :     NSLBDP_RING,           // Ring
      81              :     NSLBDP_PIPELINE,       // Pipeline
      82              :     NSLBDP_STAR,
      83              :     NSLBDP_NHR,       // NHR
      84              :     NSLBDP_NHR_V1,    // NHR_V1
      85              :     NSLBDP_NB,        // NB
      86              :     NSLBDP_AHC,       // AHC
      87              :     NSLBDP_AHC_BROKE, // AHC_BROKE
      88              :     NSLBDP_RESERVED
      89              : };
      90              : 
      91              : constexpr u8 NSLBDP_CMD_INVALID = 0;
      92              : constexpr u8 NSLBDP_CMD_BROADCAST = 1;
      93              : constexpr u8 NSLBDP_CMD_ALLREDUCE = 2;
      94              : constexpr u8 NSLBDP_CMD_REDUCE = 3;
      95              : constexpr u8 NSLBDP_CMD_SEND = 4;
      96              : constexpr u8 NSLBDP_CMD_RECEIVE = 5;
      97              : constexpr u8 NSLBDP_CMD_ALLGATHER = 6;
      98              : constexpr u8 NSLBDP_CMD_REDUCE_SCATTER = 7;
      99              : constexpr u8 NSLBDP_CMD_ALLTOALLV = 8;
     100              : constexpr u8 NSLBDP_CMD_ALLTOALLVC = 9;
     101              : constexpr u8 NSLBDP_CMD_ALLTOALL = 10;
     102              : constexpr u8 NSLBDP_CMD_GATHER = 11;
     103              : constexpr u8 NSLBDP_CMD_SCATTER = 12;
     104              : constexpr u8 NSLBDP_CMD_BATCH_SEND_RECV = 13;
     105              : constexpr u8 NSLBDP_CMD_BATCH_PUT = 14;
     106              : constexpr u8 NSLBDP_CMD_BATCH_GET = 15;
     107              : constexpr u8 NSLBDP_CMD_ALL = 16;
     108              : 
     109              : constexpr u8 NSLB_ALGO_TYPE_DEFAULT = 0;
     110              : constexpr u8 NSLB_ALGO_TYPE_RING = 1;
     111              : constexpr u8 NSLB_ALGO_TYPE_PIPELINE = 2;
     112              : constexpr u8 NSLB_ALGO_TYPE_FULLMESH = 3;
     113              : constexpr u8 NSLB_ALGO_TYPE_HDR = 4;
     114              : constexpr u8 NSLB_ALGO_TYPE_PAIRWISE = 5;
     115              : constexpr u8 NSLB_ALGO_TYPE_NHR = 6;
     116              : constexpr u8 NSLB_ALGO_TYPE_NHR_V1 = 7;
     117              : constexpr u8 NSLB_ALGO_TYPE_NB = 8;
     118              : constexpr u8 NSLB_ALGO_TYPE_NULL = 9;
     119              : constexpr u8 NSLB_ALGO_TYPE_NA = 10;
     120              : constexpr u8 NSLB_ALGO_TYPE_FAST_DOUBLE_RING = 11;
     121              : constexpr u8 NSLB_ALGO_TYPE_AHC = 12;
     122              : 
     123              : constexpr u16 NSLB_COMM_INTERVAL_FLAG_BEGIN = 0;
     124              : constexpr u16 NSLB_COMM_INTERVAL_FLAG_FIR = 1;
     125              : constexpr u16 NSLB_COMM_INTERVAL_FLAG_SEC = 2;
     126              : constexpr u16 NSLB_COMM_INTERVAL_FLAG_THR = 3;
     127              : constexpr u16 NSLB_COMM_INTERVAL_FLAG_FOR = 4;
     128              : constexpr u16 NSLB_COMM_INTERVAL_FLAG_FIV = 5;
     129              : constexpr u16 NSLB_COMM_INTERVAL_FLAG_SIX = 6;
     130              : constexpr u16 NSLB_COMM_INTERVAL_FLAG_SEV = 7;
     131              : constexpr u16 NSLB_COMM_INTERVAL_FLAG_MAX = 8;
     132              : 
     133              : constexpr unsigned int MODULE_TYPE_NSLB = 0;
     134              : constexpr unsigned int MODULE_TYPE_MAX = 1;
     135              : 
     136              : constexpr u32 NSLBDP_UNDERDCORES_COUNT = 3;
     137              : 
     138              : using nslb_msg = struct nslb_msg {
     139              :     unsigned int type;
     140              :     unsigned int length;
     141              :     std::string data;
     142              : 
     143           12 :     nslb_msg() : type(INVALID_UINT), length(0), data("") {}
     144              : };
     145              : 
     146              : class hcclNslbDp {
     147              : public:
     148              :     static hcclNslbDp& GetInstance();
     149              :     NslbDpCommConfigVal GetNslbDpCommConfig();
     150              :     HcclResult HcclSetGlobalRankTotalNum(u32 nRanks);
     151              : 
     152              :     bool GetInitNetCoFlag();
     153              :     HcclResult ClearInitNetCoFlag();
     154              :     void InitCmmDesc(std::string& identifier_nslb);
     155              :     std::string GetCmmDesc();
     156              :     void SetDeviceType();
     157              :     void SetGlobalCommTaskId(u64 taskId);
     158              :     void SetGlobalCommNodeId(u32 nodeId);
     159              :     void SetGlobalCommLocalRankNum(u32 localRankNum);
     160              :     void SetGlobalCommRankTotalNum(u32 rankTotalNum);
     161              :     bool GetDeviceType();
     162              :     u64 GetGlobalCommTaskId();
     163              :     u32 GetGlobalCommNodeId();
     164              :     u32 GetTlvInitBufferSize();
     165              :     u8 GetGlobalCommLocalRankNum();
     166              :     u8 GetNslbOpType(HcclCMDType opType);
     167              :     u8 GetNslbLevel1AlgType(AlgTypeLevel1 algValue);
     168              :     u8 GetNslbLevel2AlgType(AlgTypeLevel2 algValue);
     169              :     u32 GetGlobalCommRankTotalNum();
     170              :     u32 Getl4SPortId();
     171              :     u64 GetNslbDpFirstFourBit(u8 opType, u8 algType);
     172              :     bool CheckAlgoConsistency(HcclCMDType opType, std::string& algName);
     173              :     void SplitString(const std::string& identifier, std::vector<std::string>& splitInfo, const std::string& frag);
     174              :     void SetGlobalDisRankTable(const HcclBasicRankInfo& rankTable);
     175              :     HcclResult SetCommInfo_NoRankTable(const RankTable_t rankTable, std::string identifier);
     176              :     HcclResult SetCommInfo_RankTableExit(RankTable_t rankTable);
     177              :     HcclResult SetGlobalRank_RankTableExit(const RankTable_t rankTable);
     178              :     HcclResult GenerateOpAndAdjTable(
     179              :         HcclCMDType opType, u32 rootRank, u32 srcLocalRankId, u8 algType, std::string identifier, u64 count,
     180              :         u32 rankSize);
     181              :     HcclResult GetAlgAdjacencyTable(
     182              :         HcclCMDType opType, u32 srcLocalRankId, u32 rootRank, u8 algType, std::string identifier, AdjInfo nslbAdjInfo);
     183              :     HcclResult GetNslbDpl4SPortId(u32 rankSize, u8 algType, u16* l4SPortId);
     184              :     HcclResult SendCommRankTable(uint32_t rank, NslbDpCommConfigVal globalCommInfo);
     185              :     bool CheckMultiMachine(const RankTable_t rankTable);
     186              :     bool CheckSupportOptype(HcclCMDType opType);
     187              :     bool CheckCommDescExit(NslbDpOperatorInfo& OperatorInfo);
     188              :     bool CheckSameOperatorVal(size_t operSize, NslbDpOperatorInfo& OperatorInfo, u32 rootRank);
     189              :     void SetGlobalCommRankTable_RootInfo(
     190              :         const RankTable_t& rankTable, const HcclBasicRankInfo& localRankInfo, const std::vector<RankInfo>& rankLists,
     191              :         const std::string& identifier, u32 nRanks, u32 rank);
     192              :     void GetGlobalRankTable(const RankTable_t* rankTable, u32 nRanks, HcclUs startut);
     193              :     void fullCommonGlobalRankInfo(NslbDpGlobalRankInfo tab_f, NslbDpGlobalRankVal& cominfo);
     194              :     void fullCommConfigInfo(NslbDpCommConfigInfo& tab_f, NslbDpCommConfigVal cominfo, u32 packetNum);
     195              :     void fullcommDescInitTime(std::string identifier, NslbDpOperatorInfo& OperatorInfo);
     196              :     HcclResult SetNslbDpRootRank(HcclCMDType opType, u32 rootRank, std::string identifier, u8 algType);
     197              :     HcclResult SendRankTable(NslbDpCommConfigInfo tab_f);
     198              :     std::vector<uint8_t> serializeTLV_TableFir(NslbDpCommConfigInfo cominfo);
     199              :     HcclResult SendTableProc(u32 rank, u32 packetNum, NslbDpCommConfigVal cominfo);
     200              :     HcclResult SendTableFir(uint32_t rank);
     201              :     HcclResult SetH2DTlvInitInfo(u32 buffer_size, void* tlv_handle);
     202              :     u32 ipToUint32(const std::string& ipAddress);
     203              :     HcclResult SendOpAndAdjTable();
     204              :     HcclResult SendRankTableOpAndAdj(NslbDpOperatorInfo& tab_f);
     205              :     std::vector<uint8_t> serializeTLV_TableOpAndAdj(NslbDpOperatorInfo& info);
     206              :     HcclResult SendAlgorithmInfoTable();
     207              :     HcclResult SendRankTableAlgorithmInfo(NslbDpAlgorithmTlv& tab_f);
     208              :     std::vector<uint8_t> serializeTLV_TableAlgorithmInfo(NslbDpAlgorithmTlv& info);
     209              :     HcclResult SendGlobalRankTable(uint32_t rank);
     210              :     HcclResult SendTableGlobalRankProc(uint32_t rank, uint32_t packetNum, NslbDpGlobalRankVal& cominfo);
     211              :     std::vector<uint8_t> serializeTLV_TableGlobalRankInfo(NslbDpGlobalRankInfo& info);
     212              :     HcclResult SendRankTableGlobalRank(NslbDpGlobalRankInfo& tab_f);
     213              :     HcclResult SendGlobalDisRankTable();
     214              :     HcclResult SendRankTableGlobalDisRankVal(NslbDpGlobalDisRankVal& tab_f);
     215              :     std::vector<uint8_t> serializeTLV_TableGlobalDisRankVal(NslbDpGlobalDisRankVal& info);
     216              :     HcclResult SendRootRankTable();
     217              :     HcclResult SendRankTableRootRank(NslbDpRootRank& tab_f);
     218              :     std::vector<uint8_t> serializeTLV_TableRootRank(NslbDpRootRank& config);
     219              :     HcclResult InitNetCo();
     220              :     void DeinitNetCo();
     221              :     bool check910_93_ = false;
     222              :     std::atomic<bool> nslbdpIsInitNetCo_ = {false};
     223              :     void* nslbdp_handle_;
     224              :     unsigned int nslbdp_buffsize_;
     225              :     std::string nslbdp_identifier_;
     226              :     u32 hcclNslbDpL4SPortId_;
     227              :     // 上层调用数据存储关键字唯一标识的taskid等信息
     228              :     NslbDpGlobalCommInfo hcclNslbDpGlobalCommInfo_;
     229              :     // 分表1-基础数据. 承载通信与信息
     230              :     std::vector<NslbDpCommConfigVal> hcclNslbDpCommConfig_;
     231              :     // 分表2-基础数据,承载执行的算子算法信息
     232              :     std::vector<NslbDpOperatorInfo> hcclNslbDpOperatorVal_;
     233              :     // 分表3-基础数据,承载执行的算子算法的邻接信息
     234              :     std::vector<NslbDpAlgorithmInfo> hcclNslbDpAlgorithmInfo_;
     235              :     // 分表4-基础数据,在非ranktble场景下创建通信与场景承载全局通信域信息
     236              :     NslbDpGlobalRankVal hcclNslbDpGlobalRankVal_;
     237              :     // 分表5-基础数据,在非ranktble场景下创建通信与场景域场景下的分布式rank表
     238              :     NslbDpGlobalDisRankVal hcclNslbDpGlobalDisRankVal_;
     239              :     // 分表6-基础数据,非对称算子 statter, reduce,bcast 算子场景下会有rootrabnk表
     240              :     NslbDpRootRank hcclNslbDpRootRankVal_;
     241              : 
     242              : private:
     243              :     hcclNslbDp();
     244              :     ~hcclNslbDp();
     245              :     bool CheckAhcCommInfo(NslbDpCommConfigVal comInfo);
     246              :     bool CheckAhcSupport(u8 algType, std::string identifier);
     247              :     bool InitAlgInfoCommDesc(NslbDpAlgorithmInfo& algorithmInfo, const std::string& identifier);
     248              :     bool FillAlgInfoCommMd5(NslbDpAlgorithmInfo& algorithmInfo);
     249              :     void FillAlgInfoBaseFields(
     250              :         NslbDpAlgorithmInfo& algorithmInfo, HcclCMDType opType, u32 srcLocalRankId, u32 rootRank, u8 algType);
     251              :     bool IsAlgAdjacencyDuplicated(const NslbDpAlgorithmInfo& algorithmInfo);
     252              :     bool FillAlgInfoAdjInfo(NslbDpAlgorithmInfo& algorithmInfo, const AdjInfo& nslbAdjInfo, u32 srcLocalRankId);
     253              : };
     254              : 
     255              : } // namespace hccl
     256              : 
     257              : #endif /* HCCL_NSLB_DP_PUB_H */
        

Generated by: LCOV version 2.0-1