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

Generated by: LCOV version 2.0-1