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

Generated by: LCOV version 2.0-1