LCOV - code coverage report
Current view: top level - legacy/ascend910/platform/task - dispatcher_common.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 57.3 % 143 82
Test Date: 2026-08-18 17:47:01 Functions: 55.2 % 29 16

            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              : #include "dispatcher_pub.h"
      12              : #ifndef HCCD
      13              : #include "dispatcher_graph_pub.h"
      14              : #endif
      15              : #include "dispatcher_virtural_pub.h"
      16              : #include "dispatcher_aicpu_pub.h"
      17              : #include "dispatcher.h"
      18              : #include "externalinput_pub.h"
      19              : #include "adapter_hal.h"
      20              : 
      21              : using namespace hccl;
      22              : typedef HcclResult (*FftsCounterCallBack)(const HcclDispatcher&, Stream&);
      23              : FftsCounterCallBack g_InitTaskCallback = nullptr;
      24              : FftsCounterCallBack g_LaunchTaskCallback = nullptr;
      25           47 : void RegisterInitTaskCallBack(HcclResult (*p1)(const HcclDispatcher&, hccl::Stream&)) { g_InitTaskCallback = p1; }
      26              : 
      27           47 : void RegisterLaunchTaskCallBack(HcclResult (*p1)(const HcclDispatcher&, hccl::Stream&)) { g_LaunchTaskCallback = p1; }
      28              : 
      29         1059 : HcclResult RegisterLoadTaskCallBack(
      30              :     HcclDispatcher dispatcherPtr, void* userPtr, void (*p1)(void* userPtr, void* param, u32 length))
      31              : 
      32              : {
      33         1059 :     CHK_PTR_NULL(dispatcherPtr);
      34         1059 :     reinterpret_cast<DispatcherPub*>(dispatcherPtr)->RegLoadTaskCallBack(userPtr, p1);
      35         1059 :     return HCCL_SUCCESS;
      36              : }
      37              : 
      38           78 : HcclResult ForceProfOn(HcclDispatcher& dispatcherPtr, bool isForce)
      39              : {
      40           78 :     CHK_PTR_NULL(dispatcherPtr);
      41           78 :     reinterpret_cast<DispatcherPub*>(dispatcherPtr)->ForceProf(isForce);
      42           72 :     return HCCL_SUCCESS;
      43              : }
      44         1067 : HcclResult HcclDispatcherInit(DispatcherType type, const s32 devicePhyId, HcclDispatcher* dispatcher)
      45              : {
      46         1067 :     CHK_RET(DlProfFunc::GetInstance().DlProfFunctionInit());
      47         1067 :     CHK_PTR_NULL(dispatcher);
      48         1067 :     u32 deviceLogicId = INVALID_UINT;
      49         1067 :     if (static_cast<s32>(devicePhyId) != HOST_DEVICE_ID) {
      50         1067 :         CHK_RET(hrtGetDeviceIndexByPhyId(devicePhyId, deviceLogicId));
      51              :     } else {
      52            0 :         deviceLogicId = devicePhyId;
      53              :     }
      54              : 
      55         1067 :     DispatcherPub* pDispatcher = nullptr;
      56         1067 :     if (type == DispatcherType::DISPATCHER_NORMAL) {
      57          543 :         if (GetExternalInputHcclEnableFfts()) {
      58              : // DispatcherGraph 不编到device侧的so里面
      59              : #ifndef HCCD
      60          113 :             pDispatcher = new (std::nothrow) DispatcherGraph(deviceLogicId);
      61              : #endif
      62              :         } else {
      63          430 :             pDispatcher = new (std::nothrow) DispatcherPub(deviceLogicId);
      64              :         }
      65          524 :     } else if (type == DispatcherType::DISPATCHER_VIRTURAL) {
      66          524 :         pDispatcher = new (std::nothrow) DispatcherVirtural(deviceLogicId);
      67              :     } else {
      68            0 :         HCCL_ERROR("Not support the dispatcher type[%d]", type);
      69            0 :         return HCCL_E_NOT_SUPPORT;
      70              :     }
      71         1067 :     CHK_PTR_NULL(pDispatcher);
      72         1067 :     HcclResult ret = pDispatcher->Init();
      73         1067 :     if (ret != HCCL_SUCCESS) {
      74            0 :         HCCL_ERROR("Dispatcher init failed, type[%d]", type);
      75            0 :         delete pDispatcher;
      76            0 :         pDispatcher = nullptr;
      77            0 :         return ret;
      78              :     }
      79         1067 :     *dispatcher = pDispatcher;
      80         1067 :     return HCCL_SUCCESS;
      81              : }
      82              : 
      83         1078 : HcclResult HcclDispatcherDestroy(HcclDispatcher dispatcherPtr)
      84              : {
      85         1078 :     if (dispatcherPtr != nullptr) {
      86         1078 :         DispatcherPub* dispatcher = reinterpret_cast<DispatcherPub*>(dispatcherPtr);
      87         1078 :         delete dispatcher;
      88         1075 :         dispatcherPtr = nullptr;
      89              :     }
      90         1075 :     return HCCL_SUCCESS;
      91              : }
      92              : 
      93           92 : HcclResult HcclSetGlobalWorkSpace(HcclDispatcher dispatcherPtr, std::vector<void*>& globalWorkSpaceAddr)
      94              : {
      95           92 :     CHK_PTR_NULL(dispatcherPtr);
      96           92 :     return reinterpret_cast<DispatcherPub*>(dispatcherPtr)->SetGlobalWorkSpace(globalWorkSpaceAddr);
      97              : }
      98              : 
      99            0 : HcclResult HcclSetNotifyWaitMode(HcclDispatcher dispatcherPtr, const SyncMode notifyWaitMode)
     100              : {
     101            0 :     CHK_PTR_NULL(dispatcherPtr);
     102            0 :     return reinterpret_cast<DispatcherPub*>(dispatcherPtr)->SetNotifyWaitMode(notifyWaitMode);
     103              : }
     104              : 
     105            0 : HcclResult HcclGetNotifyWaitMode(HcclDispatcher dispatcherPtr, SyncMode* notifyWaitMode)
     106              : {
     107            0 :     CHK_PTR_NULL(dispatcherPtr);
     108            0 :     CHK_PTR_NULL(notifyWaitMode);
     109              : 
     110            0 :     *notifyWaitMode = reinterpret_cast<DispatcherPub*>(dispatcherPtr)->GetNotifyWaitMode();
     111            0 :     return HCCL_SUCCESS;
     112              : }
     113              : 
     114           80 : HcclResult HcclD2DMemcpyAsync(
     115              :     HcclDispatcher dispatcherPtr, DeviceMem& dst, const DeviceMem& src, Stream& stream, const u32 remoteUserRank,
     116              :     const LinkType linkType)
     117              : {
     118           80 :     CHK_PTR_NULL(dispatcherPtr);
     119           80 :     CHK_PTR_NULL(dst.ptr());
     120           80 :     CHK_PTR_NULL(src.ptr());
     121              : 
     122           80 :     return reinterpret_cast<DispatcherPub*>(dispatcherPtr)->MemcpyAsync(dst, src, stream, remoteUserRank, linkType);
     123              : }
     124              : 
     125            0 : HcclResult HcclMemcpyAsync(
     126              :     HcclDispatcher dispatcherPtr, void* dst, const uint64_t destMax, const void* src, uint64_t count,
     127              :     const HcclRtMemcpyKind kind, Stream& stream, const u32 remoteUserRank, const LinkType linkType)
     128              : {
     129            0 :     CHK_PTR_NULL(dispatcherPtr);
     130            0 :     CHK_PTR_NULL(dst);
     131            0 :     CHK_PTR_NULL(src);
     132              : 
     133              :     return reinterpret_cast<DispatcherPub*>(dispatcherPtr)
     134            0 :         ->MemcpyAsync(dst, destMax, src, count, kind, stream, remoteUserRank, linkType);
     135              : }
     136              : 
     137            9 : HcclResult HcclReduceAsync(
     138              :     HcclDispatcher dispatcherPtr, void* src, uint64_t count, const HcclDataType datatype, const HcclReduceOp reduceOp,
     139              :     Stream& stream, void* dst, const u32 remoteUserRank, const LinkType linkType, const u64 reduceAttr)
     140              : {
     141            9 :     CHK_PTR_NULL(dispatcherPtr);
     142            9 :     CHK_PTR_NULL(dst);
     143            9 :     CHK_PTR_NULL(src);
     144              : 
     145              :     return reinterpret_cast<DispatcherPub*>(dispatcherPtr)
     146            9 :         ->ReduceAsync(src, count, datatype, reduceOp, stream, dst, remoteUserRank, linkType, reduceAttr);
     147              : }
     148              : 
     149              : HcclResult
     150            0 : HcclDispatcherWaitValue(HcclDispatcher dispatcherPtr, hccl::Stream& stream, u64 waitAddr, u64 valueAddr, bool reset)
     151              : {
     152            0 :     CHK_PTR_NULL(dispatcherPtr);
     153            0 :     return reinterpret_cast<DispatcherPub*>(dispatcherPtr)->WaitValue(stream, waitAddr, valueAddr, reset);
     154              : }
     155            0 : HcclResult HcclDispatcherWriteValue(HcclDispatcher dispatcherPtr, hccl::Stream& stream, u64 writeAddr, u64 valueAddr)
     156              : {
     157            0 :     CHK_PTR_NULL(dispatcherPtr);
     158            0 :     return reinterpret_cast<DispatcherPub*>(dispatcherPtr)->WriteValue(stream, writeAddr, valueAddr);
     159              : }
     160              : 
     161            0 : HcclResult HcclSignalRecord(
     162              :     HcclDispatcher dispatcherPtr, HcclRtNotify signal, Stream& stream, u32 userRank, u64 offset, s32 stage, bool inchip,
     163              :     u64 signalAddr)
     164              : {
     165            0 :     CHK_PTR_NULL(dispatcherPtr);
     166            0 :     CHK_PTR_NULL(signal);
     167              : 
     168              :     return reinterpret_cast<DispatcherPub*>(dispatcherPtr)
     169            0 :         ->SignalRecord(signal, stream, userRank, offset, stage, inchip, signalAddr);
     170              : }
     171            0 : HcclResult HcclSignalWait(
     172              :     HcclDispatcher dispatcherPtr, HcclRtNotify signal, Stream& stream, u32 userRank, u32 remoteUserRank, s32 stage,
     173              :     bool inchip)
     174              : {
     175            0 :     CHK_PTR_NULL(dispatcherPtr);
     176            0 :     CHK_PTR_NULL(signal);
     177              : 
     178              :     return reinterpret_cast<DispatcherPub*>(dispatcherPtr)
     179            0 :         ->SignalWait(signal, stream, userRank, remoteUserRank, stage, inchip);
     180              : }
     181              : 
     182            9 : HcclResult LaunchTask(HcclDispatcher dispatcherPtr, Stream& stream)
     183              : {
     184            9 :     CHK_PTR_NULL(dispatcherPtr);
     185            9 :     if (g_LaunchTaskCallback != nullptr) {
     186            9 :         CHK_RET(g_LaunchTaskCallback(dispatcherPtr, stream));
     187              :     }
     188            9 :     std::vector<Stream> subStreams;
     189            9 :     HcclResult ret = reinterpret_cast<DispatcherPub*>(dispatcherPtr)->LaunchTasksEx(stream, subStreams);
     190            9 :     return ret;
     191            9 : }
     192              : 
     193           94 : HcclResult LaunchTaskExtend(HcclDispatcher dispatcherPtr, Stream& stream, std::vector<Stream>& subStreams)
     194              : {
     195           94 :     CHK_PTR_NULL(dispatcherPtr);
     196           94 :     if (g_LaunchTaskCallback != nullptr) {
     197           94 :         CHK_RET(g_LaunchTaskCallback(dispatcherPtr, stream));
     198              :     }
     199           94 :     return reinterpret_cast<DispatcherPub*>(dispatcherPtr)->LaunchTasksEx(stream, subStreams);
     200              : }
     201              : 
     202           56 : HcclResult InitTask(
     203              :     HcclDispatcher dispatcherPtr, hccl::Stream& stream, const bool enableCache, const std::string& key,
     204              :     bool useGraphConstructorV2)
     205              : {
     206           56 :     CHK_PTR_NULL(dispatcherPtr);
     207              : 
     208           56 :     CHK_RET(reinterpret_cast<DispatcherPub*>(dispatcherPtr)->ResetGraphCtx(enableCache, key, useGraphConstructorV2));
     209           56 :     if (g_InitTaskCallback != nullptr) {
     210           56 :         CHK_RET(g_InitTaskCallback(dispatcherPtr, stream));
     211              :     }
     212           56 :     return HCCL_SUCCESS;
     213              : }
     214              : 
     215            0 : HcclResult AddRetryPreamble(HcclDispatcher dispatcherPtr, hccl::Stream& stream)
     216              : {
     217            0 :     CHK_PTR_NULL(dispatcherPtr);
     218              : 
     219            0 :     CHK_RET(reinterpret_cast<DispatcherPub*>(dispatcherPtr)->AddRetryPreamble(stream));
     220            0 :     return HCCL_SUCCESS;
     221              : }
     222              : 
     223            2 : HcclResult SetNormalMode(HcclDispatcher dispatcherPtr)
     224              : {
     225            2 :     CHK_PTR_NULL(dispatcherPtr);
     226              : 
     227            0 :     reinterpret_cast<DispatcherPub*>(dispatcherPtr)->SetNormalMode();
     228              : 
     229            0 :     return HCCL_SUCCESS;
     230              : }
     231              : 
     232            0 : HcclResult HcclGetCallbackResult(HcclDispatcher dispatcherPtr)
     233              : {
     234            0 :     CHK_PTR_NULL(dispatcherPtr);
     235              : 
     236            0 :     return reinterpret_cast<DispatcherPub*>(dispatcherPtr)->GetCallbackResult();
     237              : }
     238              : 
     239            0 : HcclResult StreamSync(HcclDispatcher dispatcherPtr, Stream& stream)
     240              : {
     241            0 :     CHK_PTR_NULL(dispatcherPtr);
     242              : 
     243            0 :     CHK_RET(reinterpret_cast<DispatcherPub*>(dispatcherPtr)->StreamSync(stream));
     244            0 :     return HCCL_SUCCESS;
     245              : }
     246              : 
     247              : HcclResult
     248           11 : HcclSetOpExecStatusCallback(HcclDispatcher dispatcherPtr, std::function<HcclResult()> checkOpExecStatusCallback)
     249              : {
     250           11 :     CHK_RET(CheckRunSideIsDevice());
     251           11 :     CHK_PTR_NULL(dispatcherPtr);
     252              : 
     253           11 :     reinterpret_cast<DispatcherAiCpu*>(dispatcherPtr)->SetOpExecStatusCallback(checkOpExecStatusCallback);
     254           11 :     return HCCL_SUCCESS;
     255              : }
     256              : 
     257           11 : HcclResult HcclSetSqeTimeOut(HcclDispatcher dispatcherPtr, const u64 timeOut)
     258              : {
     259           11 :     CHK_RET(CheckRunSideIsDevice());
     260           11 :     CHK_PTR_NULL(dispatcherPtr);
     261              : 
     262           11 :     reinterpret_cast<DispatcherAiCpu*>(dispatcherPtr)->SetSqeTimeOut(timeOut);
     263           11 :     return HCCL_SUCCESS;
     264              : }
     265              : 
     266            0 : HcclResult HcclSetSqFullWaitTimeOut(HcclDispatcher dispatcherPtr, const u64 timeOut)
     267              : {
     268            0 :     CHK_RET(CheckRunSideIsDevice());
     269            0 :     CHK_PTR_NULL(dispatcherPtr);
     270              : 
     271            0 :     reinterpret_cast<DispatcherAiCpu*>(dispatcherPtr)->SetSqFullWaitTimeOut(timeOut);
     272            0 :     return HCCL_SUCCESS;
     273              : }
     274              : 
     275            0 : HcclResult HcclSetOpRingBufferIdx(HcclDispatcher dispatcherPtr, const u32 opRingBufferIdx)
     276              : {
     277            0 :     CHK_RET(CheckRunSideIsDevice());
     278            0 :     CHK_PTR_NULL(dispatcherPtr);
     279              : 
     280            0 :     reinterpret_cast<DispatcherAiCpu*>(dispatcherPtr)->SetOpRingBufferIdx(opRingBufferIdx);
     281            0 :     return HCCL_SUCCESS;
     282              : }
     283              : 
     284         1048 : HcclResult HcclSetExecTimeOut(HcclDispatcher dispatcherPtr, s32 execTimeOut)
     285              : {
     286         1048 :     CHK_PTR_NULL(dispatcherPtr);
     287         1048 :     CHK_RET(reinterpret_cast<DispatcherPub*>(dispatcherPtr)->SetHcclExecTimeOut(execTimeOut));
     288         1048 :     return HCCL_SUCCESS;
     289              : }
     290            0 : HcclResult SetMultiQpMode(HcclDispatcher dispatcherPtr, bool multiQpMode)
     291              : {
     292            0 :     CHK_PTR_NULL(dispatcherPtr);
     293              : 
     294            0 :     CHK_RET(reinterpret_cast<DispatcherPub*>(dispatcherPtr)->SetMultiQpMode(multiQpMode));
     295            0 :     return HCCL_SUCCESS;
     296              : }
        

Generated by: LCOV version 2.0-1