LCOV - code coverage report
Current view: top level - legacy/ascend950/framework/communicator - communicator_impl.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 84.5 % 58 49
Test Date: 2026-08-04 10:52:23 Functions: 85.0 % 20 17

            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              : #ifndef HCCL_COMMUNICATOR_IMPL_H
      11              : #define HCCL_COMMUNICATOR_IMPL_H
      12              : 
      13              : #include <set>
      14              : #include <vector>
      15              : #include <unordered_map>
      16              : #include <string>
      17              : #include <atomic>
      18              : #include "types.h"
      19              : #include "coll_service_default_impl.h"
      20              : #include "coll_service_ai_cpu_impl.h"
      21              : #include "conn_local_notify_manager.h"
      22              : #include "conn_local_cnt_notify_manager.h"
      23              : #include "data_buf_manager.h"
      24              : #include "local_rma_buf_manager.h"
      25              : #include "queue_notify_manager.h"
      26              : #include "remote_rma_buf_manager.h"
      27              : #include "rma_conn_manager.h"
      28              : #include "stream_manager.h"
      29              : #include "queue_wait_group_cnt_notify_manager.h"
      30              : #include "host_device_sync_notify_manager.h"
      31              : #include "queue_bcast_post_cnt_notify_manager.h"
      32              : #include "mem_transport_manager.h"
      33              : #include "rank_gph.h"
      34              : #include "rank_graph_builder.h"
      35              : #include "snap_shot_parse.h"
      36              : #include "comm_type.h"
      37              : #include "mirror_task_manager.h"
      38              : #include "aicpu_stream_manager.h"
      39              : #include "profiling_reporter.h"
      40              : #include "hdc.h"
      41              : #include "hccl_one_sided_service.h"
      42              : #include "coll_alg_component.h"
      43              : #include "ub_memory_transport_mgr.h"
      44              : #include "ccu_super_fast_load.h"
      45              : #include "ccu_stream_sync_notify_manager.h"
      46              : #include "ccu_driver_handle.h"
      47              : #include "hccl_common_v2.h"
      48              : #include "hccl_rank_graph.h"
      49              : #include "hccl_aiv_utils.h"
      50              : #include "error_message_v2.h"
      51              : #include "hccp.h"
      52              : #include "aicpu/launch_device.h"
      53              : #include "communicator_dpu_types.h"
      54              : 
      55              : namespace Hccl {
      56              : 
      57              : using HcclUs = std::chrono::steady_clock::time_point;
      58              : class CommunicatorImpl {
      59              : public:
      60              :     HcclResult Init(const CommParams &commParams, const std::string &rankTablePath);
      61              :     HcclResult Init(const CommParams &commParams, const std::string &ranktableM, const HcclCommConfig &config);
      62              :     HcclResult Init(const CommParams &commParams, const RankTableInfo &ranktable, const HcclCommConfig &config);
      63              : 
      64              :     HcclResult CreateSubComm(const CommParams &subCommParams, const std::vector<u32> &rankIds,
      65              :                              CommunicatorImpl *subCommImpl);
      66              :     HcclResult CreateSubComm(const CommParams &subCommParams, const std::vector<u32> &rankIds,
      67              :                              CommunicatorImpl *subCommImpl, HcclCommConfig &subConfig);
      68              : 
      69              :     HcclResult LoadOpbasedCollOp(const CollOpParams &opParams, void *stream);
      70              : 
      71              :     HcclResult AllocCollOpResource(const CollOpParams &opParams, void **addr);
      72              : 
      73              :     HcclResult AllocCommResource(void *mc2Tiling, void **commContext);
      74              : 
      75              :     HcclResult GetCcuTaskInfo(void *tilingData, void *ccuTaskGroup) const;
      76              :     HcclResult GetTopoDesc(HcclTopoDescs *topoDescs, uint32_t topoSize) const;
      77              : 
      78              :     HcclResult CalcCollOffloadOpRes(const OpType opType, u64 dataSize, HcclDataType dataType, CollOffloadOpResReq &resReq);
      79              :     HcclResult SetCollOffloadSlaveStreams(const std::string &opTag, std::vector<void *> slaveStreams);
      80              :     HcclResult SetCollOffloadScratchBuf(const std::string &opTag, void *scratchMemPtr, u64 requiredScratchMemSize);
      81              :     HcclResult LoadOffloadCollOp(std::string &opTag, const CollOpParams &opParams, void *stream);
      82              : 
      83              :     HcclResult SaveTopoDesc(std::string &identifier);
      84              :     HcclResult GetConfigInCCLbufferSize(uint64_t *cclBufSize);
      85              :     HcclResult GetNetLayers(uint32_t **netLayers, uint32_t *netLayerNum);
      86              :     HcclResult GetInstSizeByNetLayer(uint32_t netLayer, uint32_t *rankNum);
      87              :     HcclResult GetInstTopoTypeByNetLayer(uint32_t netLayer, uint32_t *topoType);
      88              :     HcclResult GetInstRanksByNetLayer(uint32_t netLayer, uint32_t **ranks, uint32_t *rankNum);
      89              :     HcclResult GetInstSizeListByNetLayer(uint32_t netLayer, uint32_t **instSizeList, uint32_t *listSize);
      90              :     HcclResult GetLinks(uint32_t netLayer, uint32_t srcRank, uint32_t dstRank, CommLink **linkList, uint32_t *listSize);
      91              :     HcclResult GetTopoInstsByLayer(uint32_t netLayer, uint32_t **topoInsts, uint32_t *topoInstNum);
      92              :     HcclResult GetTopoType(uint32_t netLayer, uint32_t topoInstId, CommTopo *topoType);
      93              :     HcclResult GetRanksByTopoInst(uint32_t netLayer, uint32_t topoInstId, uint32_t **ranks, uint32_t *rankNum);
      94              :     
      95              :     HcclResult GetEndpointNum(uint32_t layer, uint32_t topoInstId, uint32_t* num);
      96              :     HcclResult GetEndpointDesc(uint32_t layer, uint32_t topoInstId, uint32_t *descNum, EndpointDesc *endpointDesc);
      97              :     HcclResult GetEndpointInfo(uint32_t rankId, const EndpointDesc *endPointDesc, EndpointAttr endpointAttr, uint32_t infoLen, void *info);
      98              : 
      99              :     u32 GetCcuMc2ServerNum();
     100              : 
     101              :     const string &GetId() const;
     102              : 
     103              :     u32 GetIdIndex() const;
     104              : 
     105              :     RankId GetMyRank() const;
     106              : 
     107              :     u32 GetRankSize() const;
     108              : 
     109              :     u32 GetDeviceLogicId() const;
     110              : 
     111              :     u32 GetDevicePhyId() const;
     112              : 
     113              :     u64 GetBufferSize() const;
     114              : 
     115              :     const DevType &GetDevType() const;
     116              : 
     117              :     shared_ptr<RankGraph> GetRankGraph() const;
     118              : 
     119              :     bool GetOpAiCpuTSFeatureFlag() const;
     120              : 
     121              :     bool GetOpAivFeatureFlag() const;
     122              : 
     123              :     bool GetOpCcuFeatureFlag() const;
     124              : 
     125              :     bool GetCommAiCpuTSFeatureFlag() const;
     126              : 
     127              :     bool GetCommCcuFeatureFlag() const;
     128              : 
     129              :     virtual DataBufManager &GetDataBufferManager() const; // NOTE:添加 virtual用于UT打桩
     130              : 
     131              :     virtual LocalRmaBufManager &GetLocalRmaBufManager() const;
     132              : 
     133              :     virtual RemoteRmaBufManager &GetRemoteRmaBufManager() const;
     134              : 
     135              :     virtual QueueNotifyManager &GetAicpuQueueNotifyManager() const;
     136              : 
     137              :     virtual QueueNotifyManager &GetCcuQueueNotifyManager() const;
     138              : 
     139              :     virtual ConnLocalNotifyManager &GetConnLocalNotifyManager() const;
     140              : 
     141              :     virtual ConnLocalCntNotifyManager &GetConnLocalCntNotifyManager() const;
     142              : 
     143              :     virtual QueueWaitGroupCntNotifyManager &GetQueueWaitGroupCntNotifyManager() const;
     144              : 
     145              :     virtual QueueBcastPostCntNotifyManager &GetBcastPostCntNotifyManager() const;
     146              : 
     147              :     virtual StreamManager &GetStreamManager() const;
     148              : 
     149              :     virtual AicpuStreamManager &GetAicpuStreamManager() const;
     150              : 
     151              :     virtual CollServiceBase *GetCollService() const;
     152              : 
     153              :     virtual CollServiceBase *GetCcuCollService() const;
     154              : 
     155              :     virtual SocketManager &GetSocketManager() const;
     156              : 
     157              :     virtual RmaConnManager &GetRmaConnManager() const;
     158              : 
     159              :     virtual const string &GetEstablishLinkSocketTag() const;
     160              : 
     161              :     virtual CollOperator *GetCurrentCollOperator() const;
     162              : 
     163              :     virtual MemTransportManager *GetMemTransportManager() const;
     164              : 
     165              :     virtual HostDeviceSyncNotifyManager &GetHostDeviceSyncNotifyManager() const;
     166              : 
     167              :     virtual Trace &GetTrace() const;
     168              : 
     169              :     virtual u32 GetOpBaseOpIndex() const;
     170              : 
     171              :     virtual u32 GetOpIndex() const;
     172              : 
     173              :     u32 GetSubmittedOpCnt() const;
     174              : 
     175              :     HDCommunicate &GetKfcControlTransferH2D() const;
     176              : 
     177              :     HDCommunicate &GetKfcStatusTransferD2H() const;
     178              : 
     179              :     HcclResult Suspend();
     180              : 
     181              :     HcclResult Clean();
     182              : 
     183              :     HcclResult Resume();
     184              : 
     185            5 :     void SetAicpuKernelLaunched(bool flag)
     186              :     {
     187            5 :         isAicpuKernelLaunched = flag;
     188            5 :     }
     189              : 
     190              :     const NotifyTimeoutCfg &GetNotifyTimeoutCfg() const;
     191              : 
     192          283 :     const shared_ptr<DevBuffer> &GetCclBuffer() const
     193              :     {
     194              :         // 接口设计不合理,其他数据结构无权管理hccl buffer生命周期
     195              :         // 建议改为传递裸指针,但整改范围较大,本次性能优化暂不处理
     196          283 :         return cclBuffer;
     197              :     }
     198              : 
     199            1 :     const shared_ptr<DevBuffer> GetAivTagBuffer() const
     200              :     {
     201            1 :         return aivTagBuffer;
     202              :     }
     203              : 
     204            8 :     const shared_ptr<DevBuffer> GetAivOffloadTagBuffer() const
     205              :     {
     206            8 :         return aivOffloadTagBuffer;
     207              :     }
     208              : 
     209              :     const shared_ptr<DevBuffer> GetInCclBuffer() const
     210              :     {
     211              :         return inCclBuffer;
     212              :     }
     213              :  
     214              :     const shared_ptr<DevBuffer> GetOutCclBuffer() const
     215              :     {
     216              :         return outCclBuffer;
     217              :     }
     218              : 
     219            0 :     const shared_ptr<DevBuffer> GetKFCWorkSpace(const char *memTag) const
     220              :     {
     221            0 :         std::string tag = memTag != nullptr ? std::string(memTag) : "";
     222            0 :         auto it = tagWorkspaceMap_.find(tag);
     223            0 :         return it != tagWorkspaceMap_.end() ? it->second : nullptr;
     224            0 :     }
     225              : 
     226              :     HcclResult CreateCommCclBuf();
     227              :     HcclResult GetInCclBuf(void* &commInputPtr, u64 &commInputSize);
     228              :     HcclResult GetOutCclBuf(void* &commOutputPtr, u64 &commOutputSize);
     229              :     HcclResult GetIndirectInCclBuf(void* &commIndirectInputPtr, u64 &commIndirectInputSize);
     230              :     HcclResult GetIndirectOutCclBuf(void* &commIndirectOutputPtr, u64 &commIndirectOutputSize);
     231              : 
     232              :     HcclResult GetLocalCclBuffer(void **addr, uint64_t *size);
     233              :     HcclResult GetDevMemWorkSpace(const std::string &memTag, uint64_t *size, void **addr, bool *newCreated);
     234              :     HcclResult CreateWorkspaceBuf(const char *memTag, uint64_t *size, bool *newCreated);
     235              :     HcclResult AllocAndRegKFCWorkSpace(uint64_t size, const std::string &memTag);
     236              :     HcclResult CleanupKFCWorkSpaceOnFailure(DpuShmem &shmem, HcclResult ret);
     237              :     HcclResult GetKFCWorkSpaceVA(const std::string &memTag, const uint64_t *size, void **addr, bool *newCreated);
     238              :     HcclResult DestroyKFCWorkSpaceVA();
     239              : 
     240              :     bool IsWorldGroup() const;
     241              : 
     242              :     // 静态信息序列化,供获取保存快照size时使用
     243            5 :     BinaryStream &GetStaticBinaryInfo()
     244              :     {
     245            5 :         return staticBinaryInfo;
     246              :     }
     247              :     // 获取rankTable的字节流,供一致性校验crc时带localId使用
     248              :     u32 GetRanktableCrc(bool isContainLoaId) const;
     249              :     HcclResult RecoverRankGraphData(SnapShotComm &snapShotComm, const char *changeInfo);
     250              :     HcclResult RecoverTransportData(u32 savedSubmittedOpCnt, const std::vector< std::pair<u32, RankId>> &levelRankPairs, u32 savedStep, vector<std::pair<LinkGroup, u32>> linkGroupPair);
     251              :     HcclResult RecoverExeCfgData(const OpExecuteConfig& inOpExeCfg, const OpExecuteConfig &inCommExeCfg, bool inIsLoadOp);
     252              :     virtual HcclResult GetSnapShotDynamicBuf(BinaryStream &buf) const;
     253              : 
     254              :     HcclResult RecoverComm(SnapShotComm &snapShotComm, u32 stepParam, const char *changeInfo);
     255              :     HcclResult RecoverComm(const SnapShotSubComm &snapShotSubComm, std::unique_ptr<RankGraph> &inputRankGraph, u32 inputStep);
     256              :     HcclResult RecoverSubComm(const SnapShotSubComm &snapShotSubComm, CommunicatorImpl *subCommImpl, u32 step);
     257              :     HcclResult RecoverOpMode(u32 opMode);
     258              :     std::set<RankId> GetNeighboorRanks() const;
     259              :     virtual u32 GetCollOpIndex() const;
     260              : 
     261              :     virtual u32 GetStep() const;
     262              :     bool        IsCommReady();
     263              :     void CovertToCurrentCollOperator(std::string &opTag, const CollOpParams &opParams, OpMode opMode, bool isLaunch = true, bool isHcomSelectAlg = false);
     264              : 
     265              :     virtual MirrorTaskManager &GetMirrorTaskManager() const;
     266              :     virtual ProfilingReporter &GetProfilingReporter() const;
     267              : 
     268              :     ~CommunicatorImpl();
     269              :     HcclResult NotifyAicpuDestroyComm();
     270              :     
     271              :     virtual HcclResult GetOneSidedService(HcclOneSidedService** service) const;
     272              :     u32  GetUsedChannelCount(u32 dieId);
     273              :     void PrintChannelInfoCallback() const;
     274              :     void RegisterPrintChannelInfoCallback(std::function<void()> callback);
     275              :     void SetCommStatus(CommStatus commStatus);
     276              :     CommStatus GetCommStatus() const;
     277              : 
     278              :      /* mc2数据上报 */
     279              :     void ReportHcclMC2Info(const Stream &kfcStream, Stream &stream, const std::vector<Stream*> &aicpuStreams);
     280              :     
     281          464 :     const OpExecuteConfig& GetOpExecuteConfig() const // 获取算子粒度 加速模式
     282              :     {
     283          464 :         return opExecuteConfig;
     284              :     }
     285          137 :     const OpExecuteConfig& GetCommExecuteConfig() const // 获取通讯域粒度 加速模式
     286              :     {
     287          137 :         return commExecuteConfig;
     288              :     }
     289              :     void SetOpExecuteConfig(const OpExecuteConfig& inConfig);
     290              :     void SetCommExecuteConfig(const OpExecuteConfig& inConfig);
     291           43 :     const std::string& GetCurAlgName() const
     292              :     {
     293           43 :         return curAlgName;
     294              :     }
     295           31 :     CollAlgComponent* GetCollAlgComponent()
     296              :     {
     297           31 :         return collAlgComponent.get();
     298              :     }
     299              : 
     300              :     std::map<AivOpCacheArgs, std::shared_ptr<InsQueue>> hcclCacheMap_; //存储aiv cache信息
     301              :     HcclResult GetCacheMap(AivOpCacheArgs& opCacheParam , std::shared_ptr<InsQueue>& tempInsQue);
     302              :     HcclResult SetAccelerator(HcclAccelerator hcclAccelerator, bool isCcuMsAvailable);
     303              :     HcclResult GetAccelerator(int32_t* accelerator) const;
     304              :     void ExecAlgSelect(const CollOpParams &opParams, const OpMode &opMode);
     305              : 
     306              :     bool IsOpUsingCcuMs() const; // 算子粒度
     307              :     bool IsOpUsingCcuSched() const; // 算子粒度
     308              :     bool IsOpUsingAiv() const;  // 算子粒度
     309              :     bool IsOpUsingAivOnly() const;   // 算子粒度
     310              :     bool IsCommUsingCcuMs() const; // 通信域粒度
     311              :     bool IsCommUsingCcuSched() const; // 通信域粒度
     312              :     void RegisterAcceStateCallBack(std::function<HcclResult(const std::string &commId, bool isUsingCcuMs, bool isUsingCcuSched)> inCallback);
     313              :     HcclResult AcceleratorFallback();// 加速模式回退
     314              : 
     315              :     virtual UbMemoryTransportMgr *GetUbMemoryTransportMgr() const;
     316            1 :     u32 GetAivTag() const
     317              :     {
     318            1 :         return aivTag;
     319              :     }
     320              : 
     321            2 :     u32 GetAivOffloadTag() const
     322              :     {
     323            2 :         return aivOffloadTag;
     324              :     }
     325            0 :     u8 GetAlgorithmType() const
     326              :     {
     327            0 :         return algorithmType_;
     328              :     }
     329              : 
     330            2 :     void SetAivTag(u32 tag)
     331              :     {
     332            2 :         aivTag = tag;
     333            2 :     }
     334              : 
     335            2 :     void SetAivClearEnable(bool enable)
     336              :     {
     337            2 :         aivClearEnable = enable;
     338            2 :     }
     339              : 
     340            1 :     bool GetAivClearEnable() const
     341              :     {
     342            1 :         return aivClearEnable;
     343              :     }
     344              : 
     345            1 :     void SetAivCoreLimit(u32 newAivCoreLimit)
     346              :     {
     347            1 :         aivCoreLimit = newAivCoreLimit;
     348            1 :     }
     349              :     HcclResult CalcTaskNum(OpType opType, DataType dataType, u64 count, u32 &taskNum) const;
     350              :     void       CollAlgComponentInit();
     351              : 
     352              :     virtual CcuStreamSyncNotifyManager &GetCcuStreamSyncNotifyManager() const;
     353              : 
     354           15 :     void saveCCUParams(std::vector<std::vector<CcuTaskParam>> &&ccuParams,
     355              :                        std::vector<std::vector<CcuProfilingInfo>>&&ccuProfilingInfo, u64 execId, CcuInstType insType, 
     356              :                        bool isSlave = false)
     357              :     {
     358           15 :         auto &ccuParamsMapping = colCcuParamMapping[currentCollOperator->opType];
     359           15 :         auto &ccuParamsNotCacheKey = colParamsNotCacheKey[currentCollOperator->opType];
     360           29 :         if (ccuParamsMapping.find(ccuParamsMappingKey) == ccuParamsMapping.end() &&
     361           29 :             ccuParamsNotCacheKey.find(ccuParamsMappingKey) == ccuParamsNotCacheKey.end()) {
     362           13 :             ccuParamsMapping.emplace(std::piecewise_construct, std::forward_as_tuple(ccuParamsMappingKey),
     363           13 :                                      std::forward_as_tuple(std::move(ccuParams), std::move(ccuProfilingInfo), execId,
     364           26 :                                                            insType, isSlave, static_cast<void *>(this)));
     365              :         } else {
     366            2 :             ccuParamsMapping.erase(ccuParamsMappingKey);
     367            2 :             if (ccuParamsMapping.empty()) {
     368            2 :                 colCcuParamMapping.erase(currentCollOperator->opType);
     369              :             }
     370            2 :             ccuParamsNotCacheKey.emplace(ccuParamsMappingKey);
     371              :         }
     372           15 :     }
     373              : 
     374            0 :     inline bool isEnableSuperFasterLoad() const
     375              :     {
     376            0 :         return superFasterLoad;
     377              :     }
     378              : 
     379              :     HcclResult CreateBarrierMemory(void *&sendBuf, void *&recvBuf, uint64_t count);
     380              : 
     381              :     HcclResult HcomSelectAlg(const CollOpParams &opParams, int32_t aivCoreLimit, bool &ifAiv, std::string &algName);
     382              :     HcclResult CalcNumBlocks(const CollOpParams &opParams, int32_t aivCoreLimit, std::string &algName,
     383              :                             u32 &numBlocks) const;
     384              :     HcclResult GetAlgExecParam(const CollOpParams &opParams, bool clearEnable, void *&commContext, u64 &len,
     385              :                                u32 aivCoreLimit);
     386              :     
     387              :     HcclResult ClearOpResource(const std::string &opTag);// 清空opTag所属资源
     388              :     HcclResult GetAicpuOpStreamNotify(rtStream_t *opStream, u8 aicpuNotifyNum, void** aicpuNotify) const;
     389              :     static std::string GetTopoFilePath();
     390              :     std::vector<LinkData> GetFullMeshLinks() const;
     391              :     ErrorMessageReport GetAicpuTaskException();
     392              :     u32 GetRankInParentComm() const;
     393              :     aclrtFuncHandle GetAicpuKernelFuncHandle(const char *kernelName) const;
     394              :     bool IsCommWithPCIEProtocol() const;   // 判断通信域内是否有rank之间存在PCIE链路
     395              :     HcclResult Mc2AiCpuStreamAllocAndGetV2(rtStream_t *aiCpuStream);
     396              :     HcclResult SaveDpuStreamId();
     397            1 :     uint32_t GetDpuStreamId() const {
     398            1 :         return dpuStreamId;
     399              :     }
     400              :      
     401              :     HcclResult GetRankIpPortMap(RankIpPortMapPtr& rankIpPortMap);
     402              :     HcclResult SetRankIpPortMap(const RankIpPortMapPtr& rankIpPortMap);
     403              : 
     404              : private:
     405              :     std::string                                id;
     406              :     static std::atomic<u32>                    globalIndex; // 全局通信域唯一一个index, 对应锁保护
     407              :     u32                                        idIndex{0};  // 每个通信域唯一一个index
     408              :     std::string                                establishLinkSocketTag;
     409              :     RankId                                     myRank;
     410              :     u32                                        rankSize;
     411              :     RankId                                     rankInParentComm;
     412              :     DevType                                    devType;
     413              :     DevId                                      devPhyId;
     414              :     DevId                                      devLogicId;
     415              :     HcclCommConfig                             config;
     416              :     std::shared_ptr<RankGraph>                 rankGraph;
     417              :     uint32_t                                   dpuStreamId{0};
     418              :     unique_ptr<DataBufManager>                 dataBufferManager;
     419              :     unique_ptr<LocalRmaBufManager>             localRmaBufManager;
     420              :     unique_ptr<RemoteRmaBufManager>            remoteRmaBufManager;
     421              :     unique_ptr<QueueNotifyManager>             aicpuQueueNotifyManager_;
     422              :     unique_ptr<QueueNotifyManager>             ccuQueueNotifyManager_;
     423              :     unique_ptr<QueueWaitGroupCntNotifyManager> queueWaitGroupCntNotifyManager;
     424              :     unique_ptr<QueueBcastPostCntNotifyManager> queueBcastPostCntNotifyManager;
     425              :     unique_ptr<ConnLocalNotifyManager>         connLocalNotifyManager;
     426              :     unique_ptr<ConnLocalCntNotifyManager>      connLocalCntNotifyManager;
     427              :     unique_ptr<StreamManager>                  streamManager;
     428              :     unique_ptr<AicpuStreamManager>             aicpuStreamManager;
     429              :     unique_ptr<SocketManager>                  socketManager;
     430              :     unique_ptr<RmaConnManager>                 rmaConnectionManager;
     431              :     CollServiceBase                           *collService{nullptr};
     432              :     unique_ptr<CollOperator>                   currentCollOperator;
     433              :     unique_ptr<HostDeviceSyncNotifyManager>    hostDeviceSyncNotifyManager;
     434              :     unique_ptr<Trace>                          trace;
     435              :     unique_ptr<MemTransportManager>            memTransportManager{};
     436              :     unique_ptr<MirrorTaskManager>              mirrorTaskManager;
     437              :     unique_ptr<UbMemoryTransportMgr>           ubMemoryTransportMgr{};
     438              :     unique_ptr<ProfilingReporter>              profilingReporter;
     439              :     unique_ptr<HDCommunicate>                  kfcControlTransferH2D;
     440              :     unique_ptr<HDCommunicate>                  kfcStatusTransferD2H;
     441              :     unique_ptr<HcclOneSidedService>            oneSidedService;
     442              :     std::function<void()>                      printChannelInfoCallback{nullptr};
     443              :     unique_ptr<CcuStreamSyncNotifyManager>     ccuStreamSyncNotifyManager;
     444              :     std::shared_ptr<CcuDriverHandle> ccuDrvHandle{nullptr};
     445              : 
     446              :     std::vector<u32> netLayersVec;
     447              :     std::vector<uint32_t> instSizeVec;
     448              :     std::vector<uint32_t> rankListVec;
     449              :     std::vector<CommLink> linkListVec;
     450              :     std::vector<uint32_t> ranksVec;
     451              :     std::vector<uint32_t> topoInstsVec;
     452              :     std::vector<u32> enableP2PDevices_;
     453              : 
     454              :     NotifyTimeoutCfg notifyTimeoutCfg;
     455              : 
     456              :     u32 step           = 0; // 全局device信息的step
     457              :     u32 opBaseOpIndex  = 0; // 单算子次数
     458              :     u32 collOpIndex    = 0; // 集合通信算子次数
     459              :     u32 opIndex        = 0; // 下发算子总计数(单算子/图模式/CCU快速下发)
     460              :     u32 sendRecvIndex  = 0; // send/recv 算子次数
     461              :     u32 submittedOpCnt = 0;
     462              :     u32 aivCoreLimit   = MAX_NUM_BLOCKS;
     463              : 
     464              :     void RegisterOffloadSlaveStreams(const std::string &opTag, std::vector<void *> slaveStreams) const;
     465              :     void RegisterOffloadScratchBuffer(const std::string &opTag, void *scratchMemPtr, u64 requiredScratchMemSize);
     466              :     bool initFlag = false;
     467              :     bool devModeFlag = false;
     468              :     bool isSuspended = false;
     469              :     bool isCleaned = false;
     470              :     bool isAicpuKernelLaunched = false;
     471              :     bool isDpuKernelLaunched = false;
     472              :     bool isWorldGroup = false;
     473              :     bool aivClearEnable = false;
     474              : 
     475              :     std::shared_ptr<DevBuffer> cclBuffer;
     476              :     u64                        cclBufferSize = 0;
     477              :     std::shared_ptr<DevBuffer> aivTagBuffer;
     478              :     std::shared_ptr<DevBuffer> indirectInCclBuffer;
     479              :     std::shared_ptr<DevBuffer> indirectOutCclBuffer;
     480              :     std::shared_ptr<DevBuffer> aivOffloadTagBuffer;
     481              :     std::shared_ptr<DevBuffer> inCclBuffer;
     482              :     std::shared_ptr<DevBuffer> outCclBuffer;
     483              :     // 为barrier算子新增的buffer与判断;
     484              :     std::shared_ptr<DevBuffer> barrierInMemory;
     485              :     std::shared_ptr<DevBuffer> barrierOutMemory;
     486              :     std::unordered_map<std::string, std::shared_ptr<DevBuffer>> tagWorkspaceMap_;
     487              :     bool isFirstBarrier = true;
     488              :     DpuKernelLaunchParam hostArgs;
     489              :     std::unordered_map<std::string, DpuShmem> tagDpuShmemArgsMap_ = {{"DPUTAG", DpuShmem{}},
     490              :                                                                     {"DPUTASKEXCEPTION", DpuShmem{}}};
     491              :     void* hostShareBuf{nullptr}; // 在dpu线程中,从DPUTAG共享内存拷出算法信息的存放地址,作为入参给算法注册的回调
     492              :     std::unordered_map<std::string, std::shared_ptr<DevBuffer>> tagWorkspaceVAMap_;
     493              :     aclrtStream dpuStream;
     494              :     aclrtContext dpuContext;
     495              :     aclrtContext npuContext;
     496              : 
     497              :     std::unordered_map<std::string, std::shared_ptr<Buffer>> offloadScrachBufferMap;
     498              :     BinaryStream                                             staticBinaryInfo; // 静态信息序列化流
     499              : 
     500              :     std::atomic<CommStatus> status_{CommStatus::COMM_IDLE}; // 通信域状态
     501              :     std::vector<u32>                           rankIdsVec; // 子通信域使用:序列化解析
     502              :     std::unique_ptr<RankTableInfo>             ranktableInfo;  // 主通信域使用:序列化解析
     503              :     std::shared_ptr<TopoInfo>                  topoInfo;  // 主通信域使用:序列化解析
     504              : 
     505              :     std::map<AcceleratorState, std::shared_ptr<CollServiceBase>> collServices; // 初始化3种collService,供算法选择
     506              :     std::shared_ptr<CollAlgComponent>          collAlgComponent; // 初始化算法组件
     507              :     OpExecuteConfig                            opExecuteConfig; // 算子粒度 加速模式
     508              :     OpExecuteConfig                            commExecuteConfig; // 通信域粒度 加速模式
     509              :     std::string                                curAlgName; // 当前算法名称
     510              :     bool                                       isLoadOp{false}; // 是否已加载过算子,只要算子下发过就不让改加速模式 loadop offload AllocCommResource
     511              :     u32                                        aivTag{1}; // aiv kernal内部用于标志位计数
     512              :     u32                                        aivOffloadTag{0};// aiv kernal内部用于标志位计数
     513              :     u8                                         algorithmType_{0};
     514              :     std::atomic<u32>                           tagResourceIndex_{0};
     515              :     
     516              :     std::function<HcclResult(const std::string &commId, bool isUsingCcuMs, bool isUsingCcuSched)> callback;
     517              :     CollOpParams                               curOpParams; // 当前算子参数
     518              :     std::map<std::pair<OpType, string>, std::pair<AcceleratorState, string>> 
     519              :         opAcceStateCache{}; // opType + algName --> acceleratorState + newAlgName
     520              :     AicpuBinaryHolder aicpuKernelHolder_;
     521              : 
     522              :     void InitCommonData(const CommParams &commParams);
     523              :     void InitCommonDataNotInitDevType(const CommParams &commParams, const HcclCommConfig &commConfig);
     524              :     void InitCommonData(const CommParams &commParams, const HcclCommConfig &commConfig);
     525              :     void InitRankGraph(const string &ranktableM);
     526              :     void InitRankGraph(std::unique_ptr<RankGraph> &inputRankGraph);
     527              :     void InitRankGraph(const RankTableInfo &ranktable);
     528              :     void CheckRankGraph() const;
     529              :     void CheckRankGraphAddrs() const;
     530              :     HcclResult CheckCommStatus() const;
     531              :     void InitDataBufferManager();
     532              :     void InitNotifyManager();
     533              :     void InitStreamManager();
     534              :     void InitCollService();
     535              :     void InitHccpHdc() const;
     536              :     void InitCcuSuperFastLoad();
     537              :     void InitPreResource();
     538              :     void DeInitPreResource();
     539              :     void InitSocketManager();
     540              :     void InitRmaConnManager();
     541              :     void InitMemTransportManager();
     542              :     void InitHostDeviceSyncNotifyManager();
     543              :     HcclResult InitTraceManager();
     544              :     void InitHDCommunicate();
     545              :     void InitOneSidedService();
     546              :     void InitUbMemoryTransportMgr();
     547              :     void RefreshSubmittedOpcnt();
     548              :     void SingleRankProc(const CollOpParams &opParams, void *stream) const;
     549              :     void ConvertCollOperatorA2A(const CollOpParams &opParams, bool isLaunch = true, bool isHcomSelectAlg = false);
     550              :     void DefaultConvertCollOperatorA2A(const CollOpParams &opParams);
     551              :     void LaunchConvertCollOperatorA2A(const CollOpParams &opParams, bool isHcomSelectAlg = false);
     552              :     void ConvertCollOperatorMem(const CollOpParams &opParams, u64 size);
     553              :     void CalcA2ASendRecvMem(const CollOpParams &opParams, u64 &sendSize, u64 &recvSize, bool isHcomSelectAlg = false) const;
     554              :     void ConvertCollOperatorMemV(const CollOpParams &opParams, bool isHcomSelectAlg = false);
     555              :     void RegisterAicpuKernel();
     556              : 
     557              :     // dpu相关
     558              :     void InitHccpPeer() const;           // 拉起peer模式HCCP进程
     559              :     bool IsNeedDpu();             // 判断是否需要Host网卡参与集合通信
     560              :     void InitDpuKernel();
     561              :     std::unordered_set<IpAddress> GetHostIpFromRankGraph();
     562              :     HcclResult LaunchDpuKernel(aclrtFuncHandle &funcHandle);
     563              :     HcclResult PrepareDpuKernelResource(aclrtFuncHandle &funcHandle);
     564              :     HcclResult DestroyDpuKernelResource();
     565              :     HcclResult WaitDpuKernelThreadTerminate();
     566              :     HcclResult InitAndLaunchDpuKernel();
     567              :     HcclResult InitAndLaunchAicpuKernel(); // 保存dpu taskexception共享内存到aicpu全局map中
     568              :     HcclResult DestroyDpuTaskexpShmemInDevice();
     569              : 
     570              :     HcclResult Init(const CommParams &commParams, std::unique_ptr<RankGraph> &inputRankGraph, DevId inputDevLogicId);
     571              :     HcclResult Init(const CommParams &commParams, std::unique_ptr<RankGraph> &inputRankGraph,
     572              :                     HcclCommConfig &subConfig, DevId inputDevLogicId);
     573              :     HcclResult InitCommResource(const CommParams &commParams);
     574              : 
     575              :     void WaitReady() const;
     576              : 
     577              :     void InitMirrorTaskManager();
     578              :     HcclResult InitProfilingReporter();
     579              :     void UpdateProfStat();
     580              :     void InitTaskExceptionHandler() const;
     581              : 
     582              :     // 配置cachedReq属性:静态图模式:true, 动态图模式:false, 单算子模式:false
     583              :     void ReportProfInfo(uint64_t beginTime, bool cachedReq, bool opbased);
     584              : 
     585              :     void SelectCollService(); // 根据配置选择对应的collService
     586              :     
     587              :     CcuSFLMappingKey ccuParamsMappingKey{};
     588              :     std::unordered_map<const OpType, std::unordered_map<CcuSFLMappingKey, CachedCCUParams, ArrayHasher>>
     589              :         colCcuParamMapping{};
     590              :     std::unordered_map<const OpType, std::unordered_set<CcuSFLMappingKey, ArrayHasher>> colParamsNotCacheKey{};
     591              :     bool superFasterLoad{false};
     592              :     bool taskExceptionEnv{true}; // 默认HCCL_DFS_CONFIG="task_exception:on" 且默认on下不开启快速下发
     593              :     bool enableProfilingEnv{false};
     594              :     bool TryFastCcuLaunch(const CollOpParams &opParams, aclrtStream const stream);
     595              :     void FillAllToAllVArgs(const CollOpParams &opParams, rtCcuTaskInfo_t *&ccuParams) const;
     596              :     void ExecuteFastCcuLaunch(const CollOpParams &opParams, aclrtStream const stream, CachedCCUParams &params);
     597              : 
     598              :     void OpAcceleratorStateFallback(); // 算子粒度加速模式状态回退
     599              :     HcclResult ReLoadOpbasedOp();
     600              :     HcclResult ReLoadOffloadOp();
     601              : 
     602              :     void TryInitCcuFeature() const; // 根据通信域加速模式和rank信息,选择打开ccu功能,依赖hdc通道
     603              : 
     604              :     template<typename BufferType>
     605              :     static std::shared_ptr<BufferType> BarrierAllocBuffer(std::size_t size);
     606              : 
     607              :     void AppendLocalDieIdForLinks(); 
     608              :     HcclResult SetAivControledCoreNum(bool isAiv);
     609              : 
     610              :     void CheckAcceleratorConsistency(AcceleratorState commAccelerator, AcceleratorState tilingAccelerator) const;
     611              :     HcclResult GetTilingAccelerator(void *mc2Tiling, AcceleratorState& acceleratorState) const;
     612              : 
     613              :     // AICPU场景aclgraph专用
     614              :     HcclResult OffloadResourcePre(std::string &opTag, const CollOpParams &opParams);
     615              :     
     616              :     RankIpPortMapPtr rankIpPortMap_;
     617              : };
     618              : } // namespace Hccl
     619              : 
     620              : #endif // HCCL_COMMUNICATOR_IMPL_H
        

Generated by: LCOV version 2.0-1