LCOV - code coverage report
Current view: top level - legacy/ascend950/unified_platform/external_system - orion_adapter_rts.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 87.1 % 758 660
Test Date: 2026-08-04 10:52:23 Functions: 95.1 % 81 77

            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 "orion_adapter_rts.h"
      12              : #include "runtime_api_exception.h"
      13              : #include "exception_util.h"
      14              : #include "invalid_params_exception.h"
      15              : #include "log.h"
      16              : #include "acl/acl_rt.h"
      17              : #include "driver/ascend_hal.h"
      18              : #include "not_support_exception.h"
      19              : #include "adapter_error_manager_pub.h"
      20              : #include "dlrts_function_v2.h"
      21              : 
      22              : using namespace std;
      23              : namespace Hccl {
      24              : 
      25              : HcclResult HrtThreadExchangeCaptureMode(aclmdlRICaptureMode *mode);
      26              : constexpr u32 TOKEN_ID_RIGHT_SHIF = 8; // URMA_TOKEN_ID_RIGHT_SHIF,因URMA配置原因需要右移8位
      27              : namespace {
      28              :     constexpr char RT_SET_XPU_DEVICE[] = "rtSetXpuDevice";
      29              :     constexpr char RT_RESET_XPU_DEVICE[] = "rtResetXpuDevice";
      30              : }
      31              : const std::unordered_map<std::string, DevType> SOC_VER_CONVERT{{"Ascend310P1", DevType::DEV_TYPE_V51_310_P1},
      32              :                                                                {"Ascend310P3", DevType::DEV_TYPE_V51_310_P3},
      33              :                                                                {"Ascend910", DevType::DEV_TYPE_910A},
      34              :                                                                {"Ascend910A", DevType::DEV_TYPE_910A},
      35              :                                                                {"Ascend910B", DevType::DEV_TYPE_910A},
      36              :                                                                {"Ascend910ProA", DevType::DEV_TYPE_910A},
      37              :                                                                {"Ascend910ProB", DevType::DEV_TYPE_910A},
      38              :                                                                {"Ascend910PremiumA", DevType::DEV_TYPE_910A},
      39              :                                                                {"Ascend910B1", DevType::DEV_TYPE_910A2},
      40              :                                                                {"Ascend910B2", DevType::DEV_TYPE_910A2},
      41              :                                                                {"Ascend910B3", DevType::DEV_TYPE_910A2},
      42              :                                                                {"Ascend910B4", DevType::DEV_TYPE_910A2},
      43              :                                                                {"Ascend910B4-1", DevType::DEV_TYPE_910A2},
      44              :                                                                {"Ascend910_939", DevType::DEV_TYPE_910A3},
      45              :                                                                {"Ascend910_938", DevType::DEV_TYPE_910A3},
      46              :                                                                {"Ascend910_937", DevType::DEV_TYPE_910A3},
      47              :                                                                {"nosoc", DevType::DEV_TYPE_NOSOC}};
      48              : 
      49              : // 添加编译宏,防止返回82类型芯片造成已有UT失效
      50           58 : DevType HrtGetDeviceType()
      51              : {
      52           58 :     std::string targetChipVerStr;
      53           58 :     HrtGetSocVer(targetChipVerStr);
      54              : 
      55          174 :     HCCL_INFO("[HrtGetDeviceType]targetChipVerStr = %s.", targetChipVerStr.c_str());
      56           58 :     if (targetChipVerStr.find("Ascend950") != std::string::npos) {
      57          171 :         HCCL_INFO("[HrtGetDeviceType]DeviceType = DevType::DEV_TYPE_950.");
      58           57 :         return DevType::DEV_TYPE_950;
      59              :     }
      60              : 
      61            2 :     if (targetChipVerStr.find("Ascend910_96") != std::string::npos ||
      62            2 :         targetChipVerStr.find("Ascend960") != std::string::npos ||
      63            1 :         targetChipVerStr.find("ascend960") != std::string::npos) {
      64            0 :         HCCL_INFO("[HrtGetDeviceType]DeviceType = DevType::DEV_TYPE_960.");
      65            0 :         return DevType::DEV_TYPE_960;
      66              :     }
      67              : 
      68            1 :     auto iter = SOC_VER_CONVERT.find(targetChipVerStr);
      69            1 :     if (iter == SOC_VER_CONVERT.end()) {
      70              :         string msg = StringFormat("[Get][DeviceType]errNo[0x%016llx] rtGetSocVersion get "
      71              :                    "illegal chipver, chip_ver[%s].",
      72            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), targetChipVerStr.c_str());
      73            4 :         MACRO_THROW(RuntimeApiException, msg);
      74            1 :     }
      75            0 :     return iter->second;
      76           58 : }
      77              : 
      78          357 : DevId HrtGetDevicePhyIdByIndex(s32 deviceLogicId)
      79              : {
      80          357 :     DevType deviceType = HrtGetDeviceType();
      81          357 :     if (deviceType == DevType::DEV_TYPE_NOSOC) {
      82            1 :         return 0;
      83              :     }
      84              : 
      85          356 :     s32 devicePhyId = 0;
      86          356 :     aclError ret = aclrtGetPhyDevIdByLogicDevId(deviceLogicId, &devicePhyId);
      87          356 :     if (ret != ACL_SUCCESS) {
      88              :         string msg = StringFormat("[Get][DevicePhyId]errNo[0x%016llx] rtGet device PhyId by "
      89              :                    "index failed. return[%d], "
      90              :                    "para: devIndex[%d], phyId[%d].",
      91            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_DRV), ret, deviceLogicId, devicePhyId);
      92            4 :         MACRO_THROW(RuntimeApiException, msg);
      93            1 :     }
      94         1065 :     HCCL_INFO("[HrtGetDevicePhyIdByIndex]deviceLogicId=%d, devicePhyId=%d.", deviceLogicId, devicePhyId);
      95          355 :     return static_cast<DevId>(devicePhyId);
      96              : }
      97              : 
      98            3 : s32 HrtDeviceGetBareTgid()
      99              : {
     100            3 :     s32       pid = 0;
     101            3 :     aclError ret = aclrtDeviceGetBareTgid(&pid);
     102            9 :     HCCL_INFO("Call rtDeviceGetBareTgid, return value[%d], rtGet pid[%d].", ret, pid);
     103            3 :     if (ret != ACL_SUCCESS) {
     104              :         string msg = StringFormat("[Get][BareTgid]errNo[0x%016llx] rtGet pid fail. "
     105              :                    "return[%d], rtGet pid[%d].",
     106            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, pid);
     107            4 :         MACRO_THROW(RuntimeApiException, msg);
     108            1 :     }
     109            2 :     return pid;
     110              : }
     111              : 
     112           58 : void HrtGetSocVer(std::string &socName)
     113              : {
     114           58 :     const char *socNamePtr = aclrtGetSocName();
     115           58 :     if (socNamePtr == nullptr) {
     116              :         string msg = StringFormat("[Get][SocVer]errNo[0x%016llx] rtGet deviceVer failed.",
     117            1 :                    HCCL_ERROR_CODE((HcclResult::HCCL_E_RUNTIME)));
     118            4 :         MACRO_THROW(RuntimeApiException, msg);
     119            1 :     }
     120           57 :     socName = socNamePtr;
     121           57 : }
     122              : 
     123         1573 : s32 HrtGetDevice()
     124              : {
     125         1573 :     s32 deviceLogicId = 0;
     126         1573 :     aclError ret = aclrtGetDevice(&deviceLogicId);
     127         1573 :     if (ret != ACL_SUCCESS) {
     128              :         string msg = StringFormat("[Get][Device]errNo[0x%016llx] rtGet device fail, "
     129              :                      "please make sure that device is set. return[%d], para:deviceLogicId[%d]",
     130            2 :                      HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, deviceLogicId);
     131            8 :         MACRO_THROW(RuntimeApiException, msg);
     132            2 :     }
     133         4713 :     HCCL_INFO("[HrtGetDevice]deviceLogicId=%d.", deviceLogicId);
     134         1571 :     return deviceLogicId;
     135              : }
     136              : 
     137           14 : void HrtSetDevice(s32 deviceLogicId)
     138              : {
     139           14 :     aclError ret = aclrtSetDevice(deviceLogicId);
     140           42 :     HCCL_INFO("Call rtSetDevice, return value[%d], para: device_id[%d].", ret, deviceLogicId);
     141           14 :     if (ret != ACL_SUCCESS) {
     142              :         string msg = StringFormat("[Set][Device]errNo[0x%016llx] rtSet device fail. "
     143              :                    "return[%d], para:deviceLogicId[%d].",
     144            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, deviceLogicId);
     145            4 :         MACRO_THROW(RuntimeApiException, msg);
     146            1 :     }
     147           13 : }
     148              : 
     149            5 : void HrtResetDevice(s32 deviceLogicId)
     150              : {
     151            5 :     aclError ret = aclrtResetDevice(deviceLogicId);
     152           15 :     HCCL_INFO("Call aclrtResetDevice, return value[%d], para: device_id[%d].", ret, deviceLogicId);
     153            5 :     if (ret != ACL_SUCCESS) {
     154              :         string msg = StringFormat("[Reset][Device]errNo[0x%016llx] rtReset device fail. "
     155              :                    "return[%d], para: deviceLogicId[%d].",
     156            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, deviceLogicId);
     157            4 :         MACRO_THROW(RuntimeApiException, msg);
     158            1 :     }
     159            4 : }
     160              : 
     161            2 : u32 HrtGetDeviceCount()
     162              : {
     163            2 :     u32       count = 0;
     164            2 :     aclError ret   = aclrtGetDeviceCount(&count);
     165            6 :     HCCL_INFO("Call rtGetDeviceCount, return value[%d], para: count[%u].", ret, count);
     166            2 :     if (ret != ACL_SUCCESS) {
     167              :         string msg = StringFormat("[Get][DeviceCount]errNo[0x%016llx] rtGet device count fail. "
     168              :                    "return[%d], para:count[%u].",
     169            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, count);
     170            4 :         MACRO_THROW(RuntimeApiException, msg);
     171            1 :     }
     172            1 :     return count;
     173              : }
     174              : 
     175          115 : HcclResult HrtGetLogicDevIdByUserDevId(s32 userDevId, s32 &logicDevId)
     176              : {
     177          115 :     DevType deviceType = HrtGetDeviceType();
     178          115 :     if (deviceType == DevType::DEV_TYPE_NOSOC) {
     179            0 :         logicDevId = 0;
     180            0 :         return HCCL_SUCCESS;
     181              :     }
     182              : 
     183          115 :     aclError aclRet = aclrtGetLogicDevIdByUserDevId(userDevId, &logicDevId);  // userDevId 转 logicDevId
     184          115 :     if (aclRet != ACL_SUCCESS) {
     185            0 :         HCCL_ERROR("aclrtGetLogicDevIdByUserDevId failed, userDevId: %d, ret: %d", userDevId, aclRet);
     186            0 :         return HCCL_E_RUNTIME;
     187              :     }
     188              : 
     189          115 :     return HCCL_SUCCESS;
     190              : }
     191              : 
     192              : constexpr char RTS_SO_NAME[] = "libruntime.so";
     193              : DlRtsFunctionV2<RTS_SO_NAME> g_dlRts;
     194            3 : HcclResult HrtResetXpuDevice(uint32_t devType, const uint32_t devId)
     195              : {
     196            3 :     static auto funcPtr = reinterpret_cast<rtError_t(*)(uint32_t, const uint32_t)>(g_dlRts.Handle<RT_RESET_XPU_DEVICE>());
     197           12 :     CHK_PTR_NULL(funcPtr);
     198            0 :     rtError_t ret = funcPtr(devType, devId);
     199            0 :     if (ret != RT_ERROR_NONE) {
     200            0 :         HCCL_ERROR("[%s] reset xpu device failed, devType[%u], devId[%u], return[%d].", __func__, devType, devId, ret);
     201            0 :         return HCCL_E_RUNTIME;
     202              :     }
     203            0 :     return HCCL_SUCCESS;
     204              : }
     205              : 
     206            0 : HcclResult HrtSetXpuDevice(uint32_t devType, const uint32_t devId)
     207              : {
     208            0 :     static auto funcPtr = reinterpret_cast<rtError_t(*)(uint32_t, const uint32_t)>(g_dlRts.Handle<RT_SET_XPU_DEVICE>());
     209            0 :     CHK_PTR_NULL(funcPtr);
     210            0 :     rtError_t ret = funcPtr(devType, devId);
     211            0 :     if (ret != RT_ERROR_NONE) {
     212            0 :         HCCL_ERROR("[%s] set xpu device failed, devType[%u], devId[%u], return[%d].", __func__, devType, devId, ret);
     213            0 :         return HCCL_E_RUNTIME;
     214              :     }
     215            0 :     return HCCL_SUCCESS;
     216              : }
     217              : 
     218           78 : s32 HrtGetStreamId(aclrtStream ptr)
     219              : {
     220              :     s32       streamId;
     221           78 :     aclError ret = aclrtStreamGetId(ptr, &streamId);
     222          234 :     HCCL_INFO("Call aclrtStreamGetId, ptr[%p] return value[%d] streamId[%d].", ptr, ret, streamId);
     223           78 :     if (ret != ACL_SUCCESS) {
     224              :         string msg = StringFormat("[Get][StreamId]errNo[0x%016llx]. "
     225              :                    "rt get stream ID fail. ptr[%p], return[%d].",
     226            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ptr, ret);
     227            4 :         MACRO_THROW(RuntimeApiException, msg);
     228            1 :     }
     229              : 
     230           77 :     return streamId;
     231              : }
     232              : 
     233           16 : u64 HrtStreamGetMode(HcclRtStream const ptr)
     234              : {
     235           16 :     if (ptr == nullptr) {
     236            1 :         throw RuntimeApiException(StringFormat("ptr is null, call aclrtGetStreamAttribute failed, ptr=%p", ptr));
     237              :     }
     238           15 :     u64 stmMode  =  0;
     239           15 :     s32 streamId = -1;
     240           15 :     aclError ret = aclrtStreamGetId(ptr, &streamId);
     241           45 :     HCCL_DEBUG("[HrtStreamGetMode] ptr[%p], ret[%d].", ptr, ret);
     242              :     aclrtStreamAttrValue value;
     243           15 :     ret = aclrtGetStreamAttribute(ptr, ACL_STREAM_ATTR_FAILURE_MODE, &value);
     244           15 :     stmMode = value.failureMode;
     245           45 :     HCCL_INFO("Call rtStreamGetMode return value[%d]. stmMode[%llu].", ret, stmMode);
     246           15 :     if (ret != ACL_SUCCESS) {
     247              :         string msg = StringFormat("[Stream][GetMode]errNo[0x%016llx] rtStreamGetMode error. "
     248              :             "ptr[%p], stmMode[%llu], streamId[%d], rtRet[%d].", 
     249            0 :             HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ptr, stmMode, streamId, ret);
     250            0 :         MACRO_THROW(RuntimeApiException, msg);
     251            0 :     }
     252           15 :     return static_cast<u64>(stmMode);
     253              : }
     254              : 
     255          118 : void HrtStreamSetMode(HcclRtStream streamPtr, const uint64_t stmMode)
     256              : {
     257          118 :     if (streamPtr == nullptr) {
     258            1 :         throw RuntimeApiException(StringFormat("ptr is null, call aclrtSetStreamAttribute failed, ptr=%p", streamPtr));
     259              :     }
     260          117 :     s32 streamId = -1;
     261          117 :     aclError ret = aclrtStreamGetId(streamPtr, &streamId);
     262          351 :     HCCL_DEBUG("Call aclrtStreamGetId, return value[%d].", ret);
     263              :     aclrtStreamAttrValue value;
     264          117 :     value.failureMode = stmMode;
     265          117 :     ret = aclrtSetStreamAttribute(streamPtr, ACL_STREAM_ATTR_FAILURE_MODE, &value);
     266          351 :     HCCL_INFO("[HrtStreamSetMode]streamPtr[%p], stmMode[%llu], ret[%d].", streamPtr, stmMode, ret);
     267          117 :     if (ret != ACL_SUCCESS) {
     268              :         string msg = StringFormat("[Stream][SetMode]errNo[0x%016llx] rtStreamSetMode error. "
     269              :             "streamPtr[%p], rtRet[%d], stmMode[%llu].", 
     270            1 :             HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), streamPtr, ret, stmMode);
     271            4 :         MACRO_THROW(RuntimeApiException, msg);
     272            1 :     }
     273          116 : }
     274              : 
     275          291 : HcclResult HrtGetDeviceInfo(uint32_t deviceLogicId, int32_t moduleType, aclrtDevAttr infoType, int64_t &val)
     276              : {
     277          291 :     if(moduleType != DEV_MODULE_TYPE::MODULE_TYPE_SYSTEM)
     278              :     {
     279            0 :         THROW<NotSupportException>(StringFormat("[hrtGetDeviceInfo]Unsupported moduleType[%d].", moduleType));
     280              :     }
     281          291 :     aclError ret = aclrtGetDeviceInfo(deviceLogicId, infoType, reinterpret_cast<int64_t *>(&val));
     282          873 :     HCCL_INFO("[HrtGetDeviceInfo]deviceLogicId[%u], moduleType[%d], infoType[%d], return[%d], val[%lld].",
     283              :                 deviceLogicId, moduleType, infoType, ret, val);
     284          291 :     if (ret != ACL_SUCCESS) {
     285            0 :         HCCL_ERROR("[HrtGetDeviceInfo]errNo[0x%016llx] rt get device info failed, "
     286              :                    "deviceLogicId=%u, moduleType=%d, infoType=%d",
     287              :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), deviceLogicId, moduleType, infoType);
     288            0 :         return HcclResult::HCCL_E_RUNTIME;
     289              :     }
     290          291 :     return HcclResult::HCCL_SUCCESS;
     291              : }
     292              : 
     293              : constexpr uint64_t POD_MAINBOARD = 0x0;
     294              : constexpr uint64_t A_K_SERVER_MAINBOARD = 0x1;
     295              : constexpr uint64_t A_X_SERVER_MAINBOARD = 0x2;
     296              : constexpr uint64_t PCIE_STD_MAINBOARD = 0x3;
     297              : constexpr uint64_t RSV1_MAINBOARD = 0x4;
     298              : constexpr uint64_t RSV2_MAINBOARD = 0x5;
     299              : constexpr uint64_t EQUIP_MAINBOARD = 0x6;
     300              : constexpr uint64_t EVB_MAINBOARD = 0x7;
     301              : 
     302              : const std::unordered_map<uint64_t, HcclMainboardId> rtMainboardIdToHcclMainboardId = {
     303              :     {POD_MAINBOARD, HcclMainboardId::MAINBOARD_POD},
     304              :     {A_K_SERVER_MAINBOARD, HcclMainboardId::MAINBOARD_A_K_SERVER},
     305              :     {A_X_SERVER_MAINBOARD, HcclMainboardId::MAINBOARD_A_X_SERVER},
     306              :     {PCIE_STD_MAINBOARD, HcclMainboardId::MAINBOARD_PCIE_STD},
     307              :     {RSV1_MAINBOARD, HcclMainboardId::MAINBOARD_RSV},
     308              :     {RSV2_MAINBOARD, HcclMainboardId::MAINBOARD_RSV},
     309              :     {EQUIP_MAINBOARD, HcclMainboardId::MAINBOARD_EQUIPMENT},
     310              :     {EVB_MAINBOARD, HcclMainboardId::MAINBOARD_EVB}
     311              : };
     312              : 
     313              : /*
     314              :  * 获取Mainboard ID 5-7位,输出整机形态枚举值
     315              :  * Mainboard ID描述说明
     316              :  * Mainboard ID采用了16bit,区分形态,主从,以及端口配置
     317              :  * bit[7:5] 区分整机形态(当前POD和EVB没有区分A+X或A+K)
     318              :  * {
     319              :  *  000: 天成 POD
     320              :  *  001: A+K Server
     321              :  *  010: A+X Server
     322              :  *  011: PCIE标卡
     323              :  *  100-101: RSV
     324              :  *  110: 装备
     325              :  *  111: EVB
     326              :  * }
     327              :  * bit[4:1] 整机形态细分
     328              :  * {
     329              :  *  0000-1111
     330              :  * }
     331              :  * bit[0] 主从或池化
     332              :  * {
     333              :  *  0: 主从(NPU作为某个Host的从设备,Host主控)
     334              :  *  1: 池化(NPU作为资源池,其它Host对等访问)
     335              :  * }
     336              :  */
     337          291 : HcclResult HrtGetMainboardId(uint32_t deviceLogicId, HcclMainboardId &hcclMainboardId)
     338              : {
     339          291 :     constexpr int32_t moduleType = DEV_MODULE_TYPE::MODULE_TYPE_SYSTEM;
     340          291 :     constexpr aclrtDevAttr infoType = aclrtDevAttr::ACL_DEV_ATTR_MAINBOARD_ID;
     341          291 :     constexpr uint64_t BITS_5 = 5;
     342          291 :     constexpr uint64_t MASK_7 = 0x7;
     343          291 :     int64_t val = 0;
     344          291 :     CHK_RET(HrtGetDeviceInfo(deviceLogicId, moduleType, infoType, val));
     345          873 :     HCCL_INFO("[HrtGetMainboardId] deviceLogicId[%u] val[%lld].", deviceLogicId, val);
     346          291 :     CHK_PRT_RET(val < 0, HCCL_ERROR("[HrtGetMainboardId]val[%lld] < 0", val), HCCL_E_RUNTIME);
     347          291 :     uint64_t mainboardId = (static_cast<uint64_t>(val) >> BITS_5) & MASK_7; // 提取val的5-7位,判断整机形态
     348          291 :     auto it = rtMainboardIdToHcclMainboardId.find(mainboardId);
     349          291 :     if (it != rtMainboardIdToHcclMainboardId.end()) {
     350          291 :         hcclMainboardId = it->second;
     351              :     } else {
     352            0 :         hcclMainboardId = HcclMainboardId::MAINBOARD_OTHERS;
     353              :     }
     354          873 :     HCCL_INFO("[HrtGetMainboardId] deviceLogicId[%u] mainboardId[%llu] hcclMainboardId[%s].",
     355              :               deviceLogicId, mainboardId, hcclMainboardId.Describe().c_str());
     356          291 :     return HcclResult::HCCL_SUCCESS;
     357              : }
     358              : 
     359          104 : aclrtStream HrtStreamCreateWithFlags(uint32_t priority, uint32_t flag)
     360              : {
     361          104 :     aclrtStream ptr = nullptr;
     362          104 :     aclError ret = aclrtCreateStreamWithConfig(&ptr, priority, flag);
     363          312 :     HCCL_INFO("[HrtStreamCreateWithFlags] priority[%u], flags[%u], ptr[%p], ret[%d].", priority, flag, ptr, ret);
     364              : 
     365          104 :     if (ret != ACL_SUCCESS) {
     366              :         string msg = StringFormat("[Stream][CreateWithFlags]errNo[0x%016llx] rtStreamCreate error, "
     367              :                    "rtRet[%d], flags[%u].",
     368            0 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, flag);
     369            0 :         MACRO_THROW(RuntimeApiException, msg);
     370            0 :     }
     371              : 
     372          104 :     return ptr;
     373              : }
     374              : 
     375           99 : void HrtStreamDestroy(aclrtStream ptr)
     376              : {
     377           99 :     aclError ret = aclrtDestroyStreamForce(ptr);
     378          297 :     HCCL_INFO("[HrtStreamDestroy] ptr[%p], ret[%d].", ptr, ret);
     379           99 :     if (ret != ACL_SUCCESS) {
     380              :         string msg = StringFormat("[Stream][Destroy]errNo[0x%016llx] rt stream Destroy fail. " 
     381              :                                 "return[%d], ptr[%p].",
     382            1 :                                 HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, ptr);
     383            4 :         MACRO_THROW(RuntimeApiException, msg);
     384            1 :     }
     385           98 : }
     386              : 
     387            2 : void HrtStreamActive(aclrtStream activeStream, aclrtStream stream)
     388              : {
     389            2 :     aclError ret = aclrtActiveStream(activeStream, stream);
     390            6 :     HCCL_INFO("[HrtStreamActive] activeStream[%p], stream[%p], ret[%d].", activeStream, stream, ret);
     391            2 :     if (ret != ACL_SUCCESS) {
     392              :         string msg = StringFormat("[Activate][Stream]errNo[0x%016llx] "
     393              :                    "rt stream active fail. return[%d], active_stream=%p, stream=%p.",
     394            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, activeStream, stream);
     395            4 :         MACRO_THROW(RuntimeApiException, msg);
     396            1 :     }
     397            1 : }
     398              : 
     399            1 : inline s32 GetMsTimeFromExecTimeout()
     400              : {
     401            1 :     constexpr s32 HCCL_EXEC_TIME_OUT_OFFSET_S = 5; // 避免与notifywait timeout时间冲突,增加5s的偏移值
     402            1 :     constexpr u32 TIME_S_TO_MS                = 1000;
     403            1 :     s32           execTimeOut                 = 3000; // 从环境变量中获取超时时间
     404            1 :     s64           timeOutMs                   = (execTimeOut + HCCL_EXEC_TIME_OUT_OFFSET_S) * TIME_S_TO_MS;
     405            1 :     timeOutMs                                 = (timeOutMs > 0x7FFFFFFF) ? 0x7FFFFFFF : timeOutMs;
     406            1 :     return static_cast<s32>(static_cast<u64>(timeOutMs) & (0x7FFFFFFF));
     407              : }
     408              : 
     409            2 : void HcclStreamSynchronize(HcclRtStream ptr)
     410              : {
     411            2 :     if (ptr == nullptr) {
     412            1 :         string msg = StringFormat("ptr is null, call aclrtSynchronizeStreamWithTimeout failed, ptr=%p", ptr);
     413            4 :         MACRO_THROW(RuntimeApiException, msg);
     414            1 :     }
     415            3 :     HCCL_INFO("[HcclStreamSynchronize] ptr[%p].", ptr);
     416            1 :     s32       timeout = GetMsTimeFromExecTimeout();
     417            1 :     aclError  ret     = aclrtSynchronizeStreamWithTimeout(ptr, timeout);
     418            1 :     if (ret != ACL_SUCCESS) {
     419              :         string msg = StringFormat("[Synchronize][Stream]errNo[0x%016llx] rt "
     420              :                    "streamsynchronizewithtimeout fail. return[%d], stream[%p], timeout[%d].",
     421            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, ptr, timeout);
     422            4 :         MACRO_THROW(RuntimeApiException, msg);
     423            1 :     }
     424            0 : }
     425              : 
     426              : /*
     427              :  *RT_MEMORY_TS:aclrtMallocForTaskScheduler
     428              :  *RT_MEMORY_DDR:ACL_MEM_TYPE_LOW_BAND_WIDTH
     429              :  *RT_MEMORY_HBM:ACL_MEM_TYPE_HIGH_BAND_WIDTH
     430              : */
     431          754 : void *HrtMalloc(u64 size, aclrtMemType_t memType)
     432              : {
     433          754 :     aclError ret = ACL_SUCCESS;
     434          754 :     void     *devPtr = nullptr;
     435              :     aclrtMallocAttrValue moduleIdValue;
     436          754 :     moduleIdValue.moduleId = HCCL;
     437          754 :     aclrtMallocAttribute attrs{.attr = ACL_RT_MEM_ATTR_MODULE_ID, .value = moduleIdValue};
     438          754 :     aclrtMallocConfig cfg{.attrs = &attrs, .numAttrs = 1};
     439          754 :     ret = aclrtMallocWithCfg(&devPtr, size, static_cast<aclrtMemMallocPolicy>(memType), &cfg);
     440         2262 :     HCCL_INFO("[HrtMalloc] ret[%d] size[%llu], memType[%d], devPtr[%p], moudleId: HCCL.",
     441              :                 ret, size, memType, devPtr);
     442          754 :     if (ret == ACL_ERROR_RT_MEMORY_ALLOCATION) {
     443            0 :         RPT_INPUT_ERR(true, "EI0007", std::vector<std::string>({"resource_type", "resource_info"}),
     444              :                             std::vector<std::string>({"DeviceMemory", std::string("MallocWithCfg, size:") + std::to_string(size) + " bytes"}));
     445              :         string msg = StringFormat("[Malloc][Mem]errNo[0x%016llx] aclrtMallocWithCfg failed, "
     446              :                    "Reason: out of memory, return[%d], para: devPtrAddr[%p], size[%llu]",
     447            0 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, devPtr, size);
     448            0 :         MACRO_THROW(RuntimeApiException, msg);
     449            0 :     }
     450          754 :     if (ret != ACL_SUCCESS) {
     451            1 :         RPT_INPUT_ERR(true, "EI0007", std::vector<std::string>({"resource_type", "resource_info"}),
     452              :                             std::vector<std::string>({"DeviceMemory", std::string("MallocWithCfg, size:") + std::to_string(size)+ " bytes"}));
     453              :         string msg = StringFormat("[Malloc][Mem]errNo[0x%016llx] aclrtMallocWithCfg failed, "
     454              :                    "return[%d], para: devPtrAddr[%p], size[%llu]",
     455            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, devPtr, size);
     456            4 :         MACRO_THROW(RuntimeApiException, msg);
     457            1 :     }
     458          753 :     return devPtr;
     459            0 : }
     460              : 
     461         1062 : void HrtFree(void *devPtr)
     462              : {
     463         1062 :     aclError ret = aclrtFree(devPtr);
     464         3186 :     HCCL_INFO("[HrtFree] ret[%d], para: dev_ptr[%p].", ret, devPtr);
     465         1062 :     if (ret != RT_ERROR_NONE) {
     466              :         string msg = StringFormat("[Free][Mem]errNo[0x%016llx] aclrtFree failed. "
     467              :                    "return[%d], para: devPtrAddr[%p].",
     468            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, devPtr);
     469            4 :         MACRO_THROW(RuntimeApiException, msg);
     470            1 :     }
     471         1061 : }
     472              : 
     473         1939 : HcclResult MemcpyKindTranslate(rtMemcpyKind_t kind, aclrtMemcpyKind *rtKind)
     474              : {
     475         1939 :     switch (kind) {
     476            5 :         case rtMemcpyKind_t::RT_MEMCPY_HOST_TO_HOST: {
     477            5 :             *rtKind = ACL_MEMCPY_HOST_TO_HOST;
     478            5 :             return HCCL_SUCCESS;
     479              :         }
     480         1190 :         case rtMemcpyKind_t::RT_MEMCPY_HOST_TO_DEVICE: {
     481         1190 :             *rtKind = ACL_MEMCPY_HOST_TO_DEVICE;
     482         1190 :             return HCCL_SUCCESS;
     483              :         }
     484          742 :         case rtMemcpyKind_t::RT_MEMCPY_DEVICE_TO_HOST: {
     485          742 :             *rtKind = ACL_MEMCPY_DEVICE_TO_HOST;
     486          742 :             return HCCL_SUCCESS;
     487              :         }
     488            1 :         case rtMemcpyKind_t::RT_MEMCPY_DEVICE_TO_DEVICE: {
     489            1 :             *rtKind = ACL_MEMCPY_DEVICE_TO_DEVICE;
     490            1 :             return HCCL_SUCCESS;
     491              :         }
     492            1 :         default: {
     493            3 :             HCCL_ERROR("[MemcpyKindTranslate]Not support the memory copy type[%d].", kind);
     494            1 :             return HCCL_E_PARA;
     495              :         }
     496              :     }
     497              : }
     498              : 
     499         1939 : void HrtMemcpy(void *dst, uint64_t destMax, const void *src, uint64_t count, rtMemcpyKind_t kind)
     500              : {
     501         1939 :     aclmdlRICaptureMode mode = aclmdlRICaptureMode::ACL_MODEL_RI_CAPTURE_MODE_RELAXED;
     502         1939 :     HcclResult hcclRet = HrtThreadExchangeCaptureMode(&mode);
     503         1939 :     CHK_PRT_CONT(hcclRet != HCCL_SUCCESS && hcclRet != HCCL_E_NOT_SUPPORT,
     504              :         HCCL_WARNING("[hrtMemcpy] HrtThreadExchangeCaptureMode return [%d].", hcclRet));
     505         1939 :     aclrtMemcpyKind rtKind = ACL_MEMCPY_DEFAULT;
     506         1939 :     hcclRet = MemcpyKindTranslate(kind, &rtKind);
     507         1939 :     aclError ret = aclrtMemcpy(dst, destMax, src, count, rtKind);
     508         5817 :     HCCL_INFO("[HrtMemcpy] dst[%p], destMax[%llu], src[%p], count[%llu], ret[%d].",
     509              :                 dst, destMax, src, count, ret);
     510         1939 :     if (ret != ACL_SUCCESS) {
     511              :         string msg = StringFormat("[SyncCopy][Mem]errNo[0x%016llx] rtMemcpy failed. "
     512              :                    "return[%d], para: dstAddr[%p], destMax[%llu], srcAddr[%p], count[%llu], kind[%d].",
     513            4 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, dst, destMax, src, count, kind);
     514           16 :         MACRO_THROW(RuntimeApiException, msg);
     515            4 :     }
     516         1935 :     hcclRet = HrtThreadExchangeCaptureMode(&mode);
     517         1935 :     CHK_PRT_CONT(hcclRet != HCCL_SUCCESS && hcclRet != HCCL_E_NOT_SUPPORT,
     518              :         HCCL_WARNING("[hrtMemcpy] HrtThreadExchangeCaptureMode return [%d].", hcclRet));
     519         1935 : }
     520              : 
     521          249 : void HrtMemset(void *dst, uint64_t destMax, uint64_t count)
     522              : {
     523          747 :     HCCL_INFO("[HrtMemset] dst[%p], destMax[%llu], count[%llu].", dst, destMax, count);
     524          249 :     aclmdlRICaptureMode mode = aclmdlRICaptureMode::ACL_MODEL_RI_CAPTURE_MODE_RELAXED;
     525          249 :     HcclResult hcclRet = HrtThreadExchangeCaptureMode(&mode);
     526          249 :     CHK_PRT_CONT(hcclRet != HCCL_SUCCESS && hcclRet != HCCL_E_NOT_SUPPORT,
     527              :         HCCL_WARNING("[hrtMemSet] HrtThreadExchangeCaptureMode return [%d].", hcclRet));
     528          249 :     aclError ret = aclrtMemset(dst, destMax, 0, count);
     529          249 :     if (ret != ACL_SUCCESS) {
     530              :         string msg = StringFormat("[SyncSet][Mem]errNo[0x%016llx] aclrtMemset failed. "
     531              :                    "return[%d], para: dstAddr[%p], destMax[%llu], count[%llu].",
     532            0 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, dst, destMax, count);
     533            0 :         MACRO_THROW(RuntimeApiException, msg);
     534            0 :     }
     535          249 :     hcclRet = HrtThreadExchangeCaptureMode(&mode);
     536          249 :     CHK_PRT_CONT(hcclRet != HCCL_SUCCESS && hcclRet != HCCL_E_NOT_SUPPORT,
     537              :         HCCL_WARNING("[hrtMemSet] HrtThreadExchangeCaptureMode return [%d].", hcclRet));
     538          249 : }
     539              : 
     540            0 : void HrtMemsetV2(void *dst, size_t destMax, int32_t value, size_t count) {
     541            0 :     aclmdlRICaptureMode mode = aclmdlRICaptureMode::ACL_MODEL_RI_CAPTURE_MODE_RELAXED;
     542            0 :     HcclResult hcclRet = HrtThreadExchangeCaptureMode(&mode);
     543            0 :     CHK_PRT_CONT(hcclRet != HCCL_SUCCESS && hcclRet != HCCL_E_NOT_SUPPORT,
     544              :         HCCL_WARNING("[HrtMemsetV2] HrtThreadExchangeCaptureMode return [%d]", hcclRet));
     545            0 :     aclError ret = aclrtMemset(dst, destMax, value, count);
     546              : 
     547            0 :     HCCL_INFO("Call aclrtMemset, return value[%d]", ret);
     548            0 :     if (ret != ACL_SUCCESS) {
     549            0 :         HCCL_ERROR("[HrtMemsetV2]errNo[0x%016llx] aclrtMemset failed, "
     550              :                     "return[%d], para: dstAddr[%p], value[%d], count[%zu].",
     551              :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, dst, value, count);
     552            0 :         throw RuntimeApiException(StringFormat(
     553            0 :             "call aclrtMemset failed, dst=%p, value=0x%x, count=0x%zx", dst, value, count));
     554              :     }
     555            0 :     hcclRet = HrtThreadExchangeCaptureMode(&mode);
     556            0 :     CHK_PRT_CONT(hcclRet != HCCL_SUCCESS && hcclRet != HCCL_E_NOT_SUPPORT,
     557              :         HCCL_WARNING("[hrtMemSet] HrtThreadExchangeCaptureMode return [%d]", hcclRet));
     558            0 : }
     559              : 
     560            6 : void HrtIpcSetMemoryName(void *ptr, char_t *name, u64 ptrMaxLen, u32 nameMaxLen)
     561              : {
     562            6 :     aclError ret = aclrtIpcMemGetExportKey(ptr, ptrMaxLen, name, nameMaxLen, 1UL);
     563           18 :     HCCL_INFO("Call aclrtIpcMemGetExportKey, return value[%d], para: ptr[%p], name[%s], byteCount[%llu], nameLen[%u]",
     564              :               ret, ptr, name, ptrMaxLen, nameMaxLen);
     565            6 :     if (ret != ACL_SUCCESS) {
     566              :         string msg = StringFormat("[Set][IpcMemoryName]errNo[0x%016llx] rtSet Ipc Memory Name. "
     567              :                    "return[%d], para: ptr[%p], byteCount[%llu], name[%s].",
     568            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, ptr, ptrMaxLen, name);
     569            4 :         MACRO_THROW(RuntimeApiException, msg);
     570            1 :     }
     571            5 : }
     572              : 
     573            6 : void HrtIpcDestroyMemoryName(const char_t *name)
     574              : {
     575            6 :     aclError ret = aclrtIpcMemClose(reinterpret_cast<const char *>(name));
     576           18 :     HCCL_INFO("Call aclrtIpcMemClose, return[%d], para: name[%s]", ret, reinterpret_cast<const char *>(name));
     577            6 :     if (ret != ACL_SUCCESS) {
     578              :         string msg = StringFormat("[Destroy][IpcMemoryName]errNo[0x%016llx] "
     579              :                    "rtDestroy Ipc memory name fail. return[%d], para: name[%s].",
     580            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, name);
     581            4 :         MACRO_THROW(RuntimeApiException, msg);
     582            1 :     }
     583            5 : }
     584              : 
     585            3 : void *HrtIpcOpenMemory(const char_t *name)
     586              : {
     587            9 :     HCCL_INFO("[HrtIpcOpenMemory] name[%s].", name);
     588            3 :     void     *ptr = nullptr;
     589            3 :     aclError ret = aclrtIpcMemImportByKey(&ptr, name, 0UL);
     590            3 :     if (ret != ACL_SUCCESS) {
     591              :         string msg = StringFormat("[Open][IpcMemory]errNo[0x%016llx] "
     592              :                    "rtOpen ipc memory fail. return[%d], para: ptr[%p], name[%s].",
     593            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, ptr, name);
     594            4 :         MACRO_THROW(RuntimeApiException, msg);
     595            1 :     }
     596            2 :     return ptr;
     597              : }
     598              : 
     599            2 : void HrtIpcCloseMemory(const void *ptr)
     600              : {
     601            2 :     aclError ret = aclrtIpcMemClose(reinterpret_cast<const char *>(ptr));
     602            6 :     HCCL_INFO("Call aclrtIpcMemClose, return[%d], para: name[%s].", ret, reinterpret_cast<const char *>(ptr));
     603            2 :     if (ret != ACL_SUCCESS) {
     604              :         string msg = StringFormat("[Close][IpcMemory]errNo[0x%016llx] "
     605              :                    "rtClose ipc memory failed. return[%d], para: ptr[%p].",
     606            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, ptr);
     607            4 :         MACRO_THROW(RuntimeApiException, msg);
     608            1 :     }
     609            1 : }
     610              : 
     611            1 : void HrtIpcSetMemoryPid(const char_t *name, int pid)
     612              : {
     613            1 :     aclError ret = aclrtIpcMemSetImportPid(name, &pid, 1);
     614            3 :     HCCL_INFO("Call aclrtIpcMemSetImportPid, return value[%d], pid[%d], name[%s].", ret, pid, name);
     615            1 :     if (ret != ACL_SUCCESS) {
     616              :         string msg = StringFormat("[Set][IpcMemoryPid]errNo[0x%016llx] "
     617              :                    "rtSet ipc memory pid fail. return[%d], pid[%d], name[%s].",
     618            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, pid, name);
     619            4 :         MACRO_THROW(RuntimeApiException, msg);
     620            1 :     }
     621            0 : }
     622              : 
     623            8 : aclrtPtrAttributes  HrtPointerGetAttributes(const void *ptr)
     624              : {
     625           24 :     HCCL_INFO("[HrtPointerGetAttributes] ptr[%p].", ptr);
     626              :     aclrtPtrAttributes  ptrAttr;
     627            8 :     aclError             ret = aclrtPointerGetAttributes(ptr, reinterpret_cast<aclrtPtrAttributes *>(&ptrAttr));
     628            8 :     if (ret != ACL_SUCCESS) {
     629              :         string msg = StringFormat("[Get][PointAttr]errNo[0x%016llx] rt get point attr failed, "
     630              :                    "return[%d], para: ptrAddr[%p].",
     631            2 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, ptr);
     632            8 :         MACRO_THROW(RuntimeApiException, msg);
     633            2 :     }
     634            6 :     return ptrAttr;
     635              : }
     636              : 
     637            1 : void PrintMemoryAttr(const void *memAddr)
     638              : {
     639            1 :     if (LIKELY(!CheckInfoLogLevel())) {
     640            0 :         return;
     641              :     }
     642            1 :     aclrtPtrAttributes memAttr = HrtPointerGetAttributes(memAddr);
     643            3 :     HCCL_INFO("[PrintMemoryAttr] address[%p], page size[%u], type[%d]", memAddr, memAttr.pageSize,
     644              :               memAttr.location.type);
     645              : }
     646              : 
     647            8 : void HrtDevMemAlignWithPage(void *ptr, u64 size, void *&ipcPtr, u64 &ipcSize, u64 &ipcOff)
     648              : {
     649            8 :     aclrtPtrAttributes memAttr = HrtPointerGetAttributes(ptr);
     650              : 
     651           21 :     HCCL_INFO("[HrtDevMemAlignWithPage] ptr[%p], size[%llu], ipcPtr[%p], ipcSize[%llu], ipcOff[%llu], pageSize[%u].",
     652              :                 ptr, size, ipcPtr, ipcSize, ipcOff, memAttr.pageSize);
     653            7 :     if (memAttr.pageSize == 0) {
     654            1 :         ipcPtr  = ptr;
     655            1 :         ipcSize = size;
     656            1 :         ipcOff  = 0;
     657            1 :         return;
     658              :     }
     659              : 
     660            6 :     u64 tmpPtr = reinterpret_cast<u64>(ptr);
     661            6 :     ipcPtr     = reinterpret_cast<void *>((reinterpret_cast<u64>(ptr)) & (~(static_cast<u64>(memAttr.pageSize) - 1)));
     662            6 :     ipcOff     = tmpPtr - reinterpret_cast<u64>(ipcPtr);
     663            6 :     ipcSize    = size + ipcOff;
     664              : }
     665              : 
     666          141 : void *HrtMallocHost(u64 size)
     667              : {
     668          141 :     void *hostPtr = nullptr;
     669              :     aclrtMallocAttrValue moduleIdValue;
     670          141 :     moduleIdValue.moduleId = HCCL;
     671          141 :     aclrtMallocAttribute attrs{.attr = ACL_RT_MEM_ATTR_MODULE_ID, .value = moduleIdValue};
     672          141 :     aclrtMallocConfig cfg{.attrs = &attrs, .numAttrs = 1};
     673          141 :     aclError ret = aclrtMallocHostWithCfg(&hostPtr, size, &cfg);
     674          423 :     HCCL_INFO("Call aclrtMallocHostWithCfg. return value[%d], para: hostPtr[%p], size[%llu], moudleId: HCCL.", 
     675              :                 ret, hostPtr, size);
     676          141 :     if (ret != ACL_SUCCESS) {
     677            2 :         RPT_INPUT_ERR(true, "EI0007", std::vector<std::string>({"resource_type", "resource_info"}),
     678              :                             std::vector<std::string>({"HostMemory", std::string("MallocHostWithCfg, size:") + std::to_string(size)+ " bytes"}));
     679              :         string msg = StringFormat("[Malloc][Host]errNo[0x%016llx] rt malloc host fail. return[%d], "
     680              :                                 "para: size[%llu].",
     681            2 :                                 HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, size);
     682            8 :         MACRO_THROW(RuntimeApiException, msg);
     683            2 :     }
     684          139 :     return hostPtr;
     685            0 : }
     686              : 
     687          182 : void HrtFreeHost(void *hostPtr)
     688              : {
     689          546 :     HCCL_INFO("[HrtFreeHost] hostPtr[%p].", hostPtr);
     690          182 :     aclError ret = aclrtFreeHost(hostPtr);
     691          182 :     if (ret != ACL_SUCCESS) {
     692              :         string msg = StringFormat("[Free][Host]errNo[0x%016llx] rt free host fail. return[%d], "
     693              :                    "para: hostPtr[%p].",
     694            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, hostPtr);
     695            4 :         MACRO_THROW(RuntimeApiException, msg);
     696            1 :     }
     697          181 : }
     698              : 
     699          120 : aclrtNotify HrtNotifyCreate(s32 deviceLogicId)
     700              : {
     701          120 :     aclrtNotify ptr = nullptr;
     702              :     // aclrtCreateNotify 中通过 aclrtGetDevice 获取 deviceId,所以要求当前线程设置过 setDevice
     703          120 :     aclError  ret = aclrtCreateNotify(&ptr, ACL_NOTIFY_DEFAULT);
     704          120 :     if (ret != ACL_SUCCESS) {
     705              :         string msg = StringFormat("[Notify][Create]errNo[0x%016llx] rtNotifyCreate error. "
     706              :                    "return[%d], deviceId[%d], ptr[%p].",
     707            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, deviceLogicId, ptr);
     708            4 :         MACRO_THROW(RuntimeApiException, msg);
     709            1 :     }
     710          357 :     HCCL_INFO("[HrtNotifyCreate] deviceId[%d], ptr[%p].", deviceLogicId, ptr);
     711          119 :     return ptr;
     712              : }
     713              : 
     714          865 : void HrtNotifyDestroy(RtNotify_t ptr)
     715              : {
     716         2595 :     HCCL_INFO("[HrtNotifyDestroy] ptr[%p].", ptr);
     717          865 :     aclError ret = aclrtDestroyNotify(ptr);
     718          865 :     if (ret != ACL_SUCCESS) {
     719              :         string msg = StringFormat("[Notify][Destroy]errNo[0x%016llx] aclrtDestroyNotify error. "
     720              :                    "ptr[%p], return[%d].",
     721            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ptr, ret);
     722            4 :         MACRO_THROW(RuntimeApiException, msg);
     723            1 :     }
     724          864 : }
     725              : 
     726            2 : void HrtIpcSetNotifyName(RtNotify_t ptr, char_t *name, uint32_t len)
     727              : {
     728            2 :     aclError ret = aclrtNotifyGetExportKey(ptr, name, len, 2UL);
     729            6 :     HCCL_INFO("[HrtIpcSetNotifyName] ptr[%p], name[%s], len[%u], ret[%d].", ptr, name, len, ret);
     730            2 :     if (ret != ACL_SUCCESS) {
     731              :         string msg = StringFormat("[Set][IPCNotify]errNo[0x%016llx] IPC set notify name fail. "
     732              :                    "ptr[%p], name[%s], len[%u], return[%d].",
     733            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ptr, name, len, ret);
     734            4 :         MACRO_THROW(RuntimeApiException, msg);
     735            1 :     }
     736            1 : }
     737              : 
     738          120 : u32 HrtGetNotifyID(RtNotify_t notifyHandle)
     739              : {
     740          120 :     u32       notifyID = 0;
     741          120 :     aclError  ret      = aclrtGetNotifyId(notifyHandle, &notifyID);
     742          120 :     if (ret != ACL_SUCCESS) {
     743              :         string msg = StringFormat("[HrtGetNotifyID]rt get notify id failed. "
     744              :                                 "notifyHandle[%p], notifyID[%u], return[%d].",
     745            1 :                                 notifyHandle, notifyID, ret);
     746            4 :         MACRO_THROW(RuntimeApiException, msg);
     747            1 :     }
     748          357 :     HCCL_INFO("[HrtGetNotifyID] notifyHandle[%p], notifyID[%u].", notifyHandle, notifyID);
     749          119 :     return notifyID;
     750              : }
     751              : 
     752            2 : u64 HrtNotifyGetAddr(RtNotify_t notifyHandle)
     753              : {
     754            6 :     HCCL_INFO("[HrtNotifyGetAddr] notifyHandle[%p].", notifyHandle);
     755              :     uint64_t  addr;
     756            2 :     rtError_t ret = rtGetNotifyAddress(notifyHandle, &addr);
     757            2 :     if (ret != RT_ERROR_NONE) {
     758              :         string msg = StringFormat("[rtGetNotifyAddress]rt get notify address failed. "
     759              :                                 "notifyHandle[%p], addr[%llu], return[%d].",
     760            1 :                                 notifyHandle, addr, ret);
     761            4 :         MACRO_THROW(RuntimeApiException, msg);
     762            1 :     }
     763            1 :     return addr;
     764              : }
     765              : 
     766            1 : void HrtSetIpcNotifyPid(aclrtNotify notify, int32_t pid)
     767              : {
     768            1 :     aclError ret = aclrtNotifySetImportPid(notify, &pid, 1);
     769            3 :     HCCL_INFO("[HrtSetIpcNotifyPid] notify[%p], pid[%d], ret[%d].", notify, pid, ret);
     770            1 :     if (ret != ACL_SUCCESS) {
     771              :         string msg = StringFormat("[Set][IpcNotifyPid]errNo[0x%016llx] "
     772              :                    "rtSet ipc Notify pid fail. notify[%p], return[%d], pid[%d].",
     773            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), notify, ret, pid);
     774            4 :         MACRO_THROW(RuntimeApiException, msg);
     775            1 :     }
     776            0 : }
     777              : 
     778            2 : RtNotify_t HrtIpcOpenNotify(const char_t *name)
     779              : {
     780            2 :     uint64_t flags = 0;
     781            2 :     aclrtNotify* notify = nullptr;
     782            2 :     aclError ret = aclrtNotifyImportByKey(notify, name, static_cast<uint64_t>(flags));
     783            6 :     HCCL_INFO("[HrtIpcOpenNotify] ret[%d], para: notify[%p], name[%s].", ret, notify, name);
     784            2 :     if (ret != ACL_SUCCESS) {
     785              :         string msg = StringFormat("[rt][IpcOpenNotify]errNo[0x%016llx] rt ipc notify open fail. "
     786              :                    "return[%d]. para: notify[%p], name[%s], flags[%llu].",
     787            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, notify, name, flags);
     788            4 :         MACRO_THROW(RuntimeApiException, msg);
     789            1 :     }
     790            1 :     return notify;
     791              : }
     792              : 
     793            2 : u32 HrtNotifyGetOffset(RtNotify_t ptr)
     794              : {
     795            2 :     uint32_t  offset = 0;
     796            2 :     aclError ret = aclrtGetNotifyId(ptr, &offset);
     797            2 :     if (ret != ACL_SUCCESS) {
     798              :         string msg = StringFormat("[rt][NotifyGetOffset]errNo[0x%016llx] rt ipc notify open fail. "
     799              :                    "return[%d], ptr[%p], offset[%u].",
     800            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, ptr, offset);
     801            4 :         MACRO_THROW(RuntimeApiException, msg);
     802            1 :     }
     803            3 :     HCCL_INFO("[HrtNotifyGetOffset] ptr[%p], offset[%u].", ptr, offset);
     804            1 :     return offset;
     805              : }
     806              : 
     807           13 : void HrtNotifyWaitWithTimeOut(RtNotify_t notifyPtr, aclrtStream streamPtr, uint32_t timeOut)
     808              : {
     809           13 :     aclError ret = aclrtWaitAndResetNotify(notifyPtr, streamPtr, timeOut);
     810           39 :     HCCL_INFO("[HrtNotifyWaitWithTimeOut] notifyPtr[%p], streamPtr[%p], timeOut[%u], ret[%d].", 
     811              :                 notifyPtr, streamPtr, timeOut, ret);
     812           13 :     if (ret != ACL_SUCCESS) {
     813              :         string msg = StringFormat("call aclrtWaitAndResetNotify failed. notifyPtr=%p, streamPtr=%p, timeout=%u, return=%d.",
     814            1 :                                 notifyPtr, streamPtr, timeOut, ret);
     815            4 :         MACRO_THROW(RuntimeApiException, msg);
     816            1 :     }
     817           12 : }
     818              : 
     819           11 : void HrtNotifyRecord(RtNotify_t notifyPtr, aclrtStream streamPtr)
     820              : {
     821           11 :     aclError ret = aclrtRecordNotify(notifyPtr, streamPtr);
     822           33 :     HCCL_INFO("[HrtNotifyRecord] notifyPtr[%p], streamPtr[%p], ret[%d].", notifyPtr, streamPtr, ret);
     823           11 :     if (ret != ACL_SUCCESS) {
     824            1 :         string msg = StringFormat("call HrtNotifyRecord failed. notifyPtr=%p, streamPtr=%p, return=%d.", notifyPtr, streamPtr, ret);
     825            4 :         MACRO_THROW(RuntimeApiException, msg);
     826            1 :     }
     827           10 : }
     828              : 
     829            1 : void HrtMemAsyncCopy(void *dst, uint64_t destMax, const void *src, uint64_t count, aclrtMemcpyKind kind,
     830              :                      aclrtStream streamPtr)
     831              : {
     832            1 :     aclError ret = aclrtMemcpyAsync(dst, destMax, src, count, kind, streamPtr);
     833            3 :     HCCL_DEBUG("[HrtMemAsyncCopy] ret[%d], para: dstAddr[%p], destMax[%llu], "
     834              :                "srcAddr[%p], count[%llu], rtKind[%d], streamPtr[%p].", ret, dst, destMax, src, count, kind, streamPtr);
     835            1 :     if (ret != ACL_SUCCESS) {
     836              :         string msg = StringFormat("[AsyncCopy][Mem]errNo[0x%016llx] rt memory async copy failed. "
     837              :                    "return[%d], para: dstAddr[%p], destMax[%llu], srcAddr[%p], count[%llu], kind[%d], stream[%p].",
     838            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, dst, destMax, src, count, kind, streamPtr);
     839            4 :         MACRO_THROW(RuntimeApiException, msg);
     840            1 :     }
     841            0 : }
     842              : 
     843            4 : void HrtReduceAsync(void *dst, uint64_t destMax, const void *src, uint64_t count, aclrtReduceKind kind,
     844              :                     aclDataType type, aclrtStream streamPtr)
     845              : {
     846              :     // reserve 预留字段填 nullptr
     847            4 :     aclError ret = aclrtReduceAsync(dst, src, count, kind, type, streamPtr, nullptr);
     848           12 :     HCCL_INFO("Call rtReduceAsync, return value[%d], para: dst[%p], destMax[%llu], src[%p], count[%llu], rtReduceOp[%d], "
     849              :                "rtDataType[%d], streamPtr[%p].",
     850              :                ret, dst, destMax, src, count, kind, type, streamPtr);
     851            4 :     if (ret != ACL_SUCCESS) {
     852              :         string msg = StringFormat("[rt][ReduceAsync]errNo[0x%016llx] rt reduce async fail. "
     853              :                    "return[%d], para: dst[%p], destMax[%llu], src[%p], count[%llu], rtReduceOp[%d], rtDataType[%d], streamPtr[%p].",
     854            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, dst, destMax, src, count, kind, type, streamPtr);
     855            4 :         MACRO_THROW(RuntimeApiException, msg);
     856            1 :     }
     857            3 : }
     858              : 
     859            1 : void HrtRDMASend(u32 qpn, u32 wqeIndex, aclrtStream streamPtr)
     860              : {
     861            1 :     rtError_t ret = rtRDMASend(qpn, wqeIndex, streamPtr);
     862            3 :     HCCL_INFO("Call rtRDMASend, return value[%d]. Params: qpn[%u], wqeIndex[%u], streamPtr[%p].", ret, qpn, wqeIndex, streamPtr);
     863            1 :     if (ret != RT_ERROR_NONE) {
     864              :         string msg = StringFormat("[rt][RdmaSend]errNo[0x%016llx] rt rdma send fail. "
     865              :                    "return[%d]. para: qpn[%u], wqeIndex[%u], streamPtr[%p].",
     866            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, qpn, wqeIndex, streamPtr);
     867            4 :         MACRO_THROW(RuntimeApiException, msg);
     868            1 :     }
     869            0 : }
     870              : 
     871            1 : void HrtRDMADBSend(uint32_t dbindex, uint64_t dbinfo, aclrtStream streamPtr)
     872              : {
     873            3 :     HCCL_INFO("[HrtRDMADBSend] dbindex[%u], dbinfo[%llu], streamPtr[%p].", dbindex, dbinfo, streamPtr);
     874            1 :     rtError_t ret = rtRDMADBSend(dbindex, dbinfo, streamPtr);
     875            1 :     if (ret != RT_ERROR_NONE) {
     876              :         string msg = StringFormat("[rtRDMADBSend]errNo[0x%016llx] rt rdma send fail. "
     877              :                    "return[%d]. para: dbindex[%u], dbinfo[%llu], streamPtr[%p].",
     878            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, dbindex, dbinfo, streamPtr);
     879            4 :         MACRO_THROW(RuntimeApiException, msg);
     880            1 :     }
     881            0 : }
     882              : 
     883           41 : void HrtGetTaskIdAndStreamID(u32 &taskId, u32 &streamId)
     884              : {
     885           41 :     rtError_t ret = rtGetTaskIdAndStreamID(&taskId, &streamId);
     886          123 :     HCCL_INFO("[HrtGetTaskIdAndStreamID] ret[%d], para: taskId[%u], streamId[%u].", ret, taskId, streamId);
     887           41 :     if (ret != RT_ERROR_NONE) {
     888              :         string msg = StringFormat("[Get][TaskIdAndStreamID]errNo[0x%016llx] "
     889              :                    "rt get task ID and stream ID fail. return[%d], taskId[%u], streamId[%u].",
     890            1 :                    HCCL_ERROR_CODE(HcclResult::HCCL_E_RUNTIME), ret, taskId, streamId);
     891            4 :         MACRO_THROW(RuntimeApiException, msg);
     892            1 :     }
     893           40 : }
     894              : 
     895            6 : void HrtUbDbSend(const HrtUbDbInfo &info, aclrtStream streamPtr)
     896              : {
     897            6 :     THROW<NotSupportException>(StringFormat("Unsupported rtUbDbSend"));
     898              : }
     899              : 
     900            2 : void HrtUbDirectSend(const HrtUbWqeInfo &info, aclrtStream streamPtr)
     901              : {
     902            2 :     THROW<NotSupportException>(StringFormat("Unsupported rtUbDirectSend"));
     903              : }
     904              : 
     905           64 : aclrtCntNotify HrtCntNotifyCreate(u32 deviceId)
     906              : {
     907              :         aclrtCntNotify handle;
     908           64 :     aclError     ret = aclrtCntNotifyCreate(&handle, RT_NOTIFY_FLAG_DEFAULT);
     909          192 :     HCCL_INFO("Call aclrtCntNotifyCreate, return value[%d] devId[%u].", ret, deviceId);
     910           64 :     if (ret != ACL_SUCCESS) {
     911            0 :         string msg = StringFormat("Call aclrtCntNotifyCreate failed");
     912            0 :         THROW<RuntimeApiException>(msg);
     913            0 :     }
     914           64 :     return handle;
     915              : }
     916              : 
     917           64 : u32 HrtGetCntNotifyId(const aclrtCntNotify inCntNotify)
     918              : {
     919           64 :     u32       notifyId = 0; // 待接口rtGetCntNotifyId(inCntNotify, notifyId)上库,目前打桩;
     920           64 :     aclError ret      = aclrtCntNotifyGetId(inCntNotify, &notifyId);
     921          192 :     HCCL_INFO("[HrtGetCntNotifyId] ret[%d], inCntNotify[%p], notifyId[%u]", ret, inCntNotify, notifyId);
     922           64 :     if (ret != ACL_SUCCESS) {
     923              :         string msg = StringFormat("Call rtGetCntNotifyId failed. return[%d], inCntNotify[%p], notifyId[%u].", 
     924            0 :             ret, inCntNotify, notifyId);
     925            0 :         THROW<RuntimeApiException>(msg);
     926            0 :     }
     927           64 :     return notifyId;
     928              : }
     929              : 
     930           80 : void HrtCntNotifyDestroy(const aclrtCntNotify inCntNotify)
     931              : {
     932           80 :     aclError ret = aclrtCntNotifyDestroy(inCntNotify);
     933          240 :     HCCL_INFO("[HrtCntNotifyDestroy] ret[%d], inCntNotify[%p].", ret, inCntNotify);
     934           80 :     if (ret != ACL_SUCCESS) {
     935            0 :         string msg = StringFormat("Call aclrtCntNotifyDestroy failed");
     936            0 :         THROW<RuntimeApiException>(msg);
     937            0 :     }
     938           80 : }
     939              : 
     940              : const std::map<HrtCntNotifyRecordMode, aclrtCntNotifyRecordMode> HRT_CNT_NOTIFY_RECORD_MODE_MAP
     941              :     = {{HrtCntNotifyRecordMode::WRITE_BIT, aclrtCntNotifyRecordMode::ACL_RT_CNT_NOTIFY_RECORD_BIT_OR_MODE},
     942              :        {HrtCntNotifyRecordMode::STORE, aclrtCntNotifyRecordMode::ACL_RT_CNT_NOTIFY_RECORD_SET_VALUE_MODE}};
     943           19 : void HrtCntNotifyRecord(const aclrtCntNotify inCntNotify, const aclrtStream streamPtr, HrtCntNotifyRecordMode mode, u32 value)
     944              : {
     945           19 :     aclrtCntNotifyRecordInfo recordInfo{};
     946           19 :     recordInfo.mode  = HRT_CNT_NOTIFY_RECORD_MODE_MAP.at(mode);
     947           19 :     recordInfo.value = value;
     948           19 :     aclError ret    = aclrtCntNotifyRecord(inCntNotify, streamPtr, &recordInfo);
     949           57 :     HCCL_INFO("[HrtCntNotifyRecord] inCntNotify[%p], streamPtr[%p], mode[%d], value[%u], ret[%d].", 
     950              :                 inCntNotify, streamPtr, mode, value, ret);
     951           19 :     if (ret != ACL_SUCCESS) {
     952            0 :         string msg = StringFormat("Call aclrtCntNotifyRecord failed");
     953            0 :         THROW<RuntimeApiException>(msg);
     954            0 :     }
     955           19 : }
     956              : // david接口 包间接口
     957              : const std::map<HrtCntNotifyWaitMode, aclrtCntNotifyWaitMode> HRT_CNT_NOTIFY_WAIT_MODE_MAP
     958              :     = {{HrtCntNotifyWaitMode::EQUAL, aclrtCntNotifyWaitMode::ACL_RT_CNT_NOTIFY_WAIT_EQUAL_MODE},
     959              :        {HrtCntNotifyWaitMode::BITMAP, aclrtCntNotifyWaitMode::ACL_RT_CNT_NOTIFY_WAIT_EQUAL_WITH_BITMASK_MODE}};
     960           19 : void HrtCntNotifyWaitWithTimeOut(const aclrtCntNotify inCntNotify, const aclrtStream streamPtr, HrtCntNotifyWaitMode
     961              :                     mode, u32 value, u32 timeout, bool isClear)
     962              : {
     963           19 :     aclrtCntNotifyWaitInfo waitInfo{};
     964           19 :     waitInfo.mode    = HRT_CNT_NOTIFY_WAIT_MODE_MAP.at(mode);
     965           19 :     waitInfo.value   = value;
     966           19 :     waitInfo.isClear = isClear;
     967           19 :     waitInfo.timeout = timeout;
     968           19 :     aclError ret    = aclrtCntNotifyWaitWithTimeout(inCntNotify, streamPtr, &waitInfo);
     969           57 :     HCCL_INFO("[HrtCntNotifyWaitWithTimeOut] inCntNotify[%p], streamPtr[%p], mode[%d], "
     970              :                 "value[%u], timeout[%u], isClear[%d], ret[%d].",
     971              :                 inCntNotify, streamPtr, mode, value, timeout, isClear, ret);
     972           19 :     if (ret != ACL_SUCCESS) {
     973              :         string msg = StringFormat("Call rtCntNotifyWaitWithTimeout failed. return[%d], inCntNotify[%p], "
     974              :                     "streamPtr[%p], mode[%d], value[%u], timeout[%u], isClear[%d].", 
     975            0 :                     ret, inCntNotify, streamPtr, mode, value, timeout, isClear);
     976            0 :         THROW<RuntimeApiException>(msg);
     977            0 :     }
     978           19 : }
     979              : 
     980            3 : aclrtNotify HrtNotifyCreateWithFlag(u32 devId, u32 flag)
     981              : {
     982            3 :     aclrtNotify ptr = nullptr;
     983            3 :     aclError  ret = aclrtCreateNotify(&ptr, flag);
     984            9 :     HCCL_INFO("Call HrtNotifyCreateWithFlag, return value[%d], flag[%u] devid[%u].", ret, flag, devId);
     985            3 :     if (ret != ACL_SUCCESS) {
     986              :         string msg = StringFormat("Call rtNotifyCreateWithFlag failed. return[%d], devId[%u], flag[%u].", 
     987            1 :                     ret, devId, flag);
     988            1 :         THROW<RuntimeApiException>(msg);
     989            1 :     }
     990            2 :     return ptr;
     991              : }
     992              : 
     993            2 : RtNotify_t HrtIpcOpenNotifyWithFlag(const char_t *name, uint32_t flags)
     994              : {
     995            6 :     HCCL_INFO("[HrtIpcOpenNotifyWithFlag] name[%s], flags[%u].", name, flags);
     996            2 :     RtNotify_t ptr = nullptr;
     997            2 :     aclError ret = aclrtNotifyImportByKey(&ptr, name, static_cast<uint64_t>(flags));
     998            2 :     if (ret != ACL_SUCCESS) {
     999              :         string msg = StringFormat("Call rtIpcOpenNotifyWithFlag failed. return[%d], name[%p], flags[%u], ptr[%p].", 
    1000            1 :                     ret, name, flags, ptr);
    1001            1 :         THROW<RuntimeApiException>(msg);
    1002            1 :     }
    1003            1 :     return ptr;
    1004              : }
    1005              : 
    1006              : // 兜底extern形式
    1007            8 : void HrtAicpuLaunchKernelWithHostArgs(aclrtFuncHandle funcHandle, uint32_t numBlocks, aclrtStream stream,
    1008              :                                       aclrtLaunchKernelCfg *cfg, void *hostArgs, size_t argsSize,
    1009              :                                       aclrtPlaceHolderInfo *placeHolderArray, size_t placeHolderNum)
    1010              : {
    1011            8 :     rtError_t ret = aclrtLaunchKernelWithHostArgs(funcHandle, numBlocks, stream, cfg, hostArgs, argsSize,
    1012              :                                                   placeHolderArray, placeHolderNum);
    1013            8 :     if (ret != RT_ERROR_NONE) {
    1014            1 :         THROW<RuntimeApiException>(StringFormat("Call aclrtLaunchKernelWithHostArgs failed, with ret[%d]", ret));
    1015              :     }
    1016            7 : }
    1017              : 
    1018           13 : void HrtRegTaskFailCallbackByModule(aclrtExceptionInfoCallback callback)
    1019              : {
    1020           39 :     HCCL_INFO("[HrtRegTaskFailCallbackByModule] callback[%p].", callback);
    1021           13 :     aclError ret = aclrtSetExceptionInfoCallback(callback);
    1022           13 :     if (ret != ACL_SUCCESS) {
    1023              :         string msg = StringFormat("Call aclrtSetExceptionInfoCallback failed. return[%d], callback[%p].", 
    1024            0 :                                     ret, callback);
    1025            0 :         THROW<RuntimeApiException>(msg);
    1026            0 :     }
    1027           13 : }
    1028              : 
    1029            6 : u32 HrtStreamGetSqId(const aclrtStream ptr)
    1030              : {
    1031           18 :     HCCL_INFO("[HrtStreamGetSqId] ptr[%p].", ptr);
    1032              :     u32       sqId;
    1033            6 :     rtError_t ret = rtStreamGetSqid(ptr, &sqId);
    1034            6 :     if (ret != RT_ERROR_NONE) {
    1035            1 :         string msg = StringFormat("Call rtStreamGetSqid failed. return[%d], ptr[%p], sqId[%u].", ret, ptr, sqId);
    1036            1 :         THROW<RuntimeApiException>(msg);
    1037            1 :     }
    1038            5 :     return sqId;
    1039              : }
    1040              : 
    1041           11 : u32 HrtStreamGetCqId(const aclrtStream ptr)
    1042              : {
    1043           33 :     HCCL_INFO("[HrtStreamGetCqId] ptr[%p].", ptr);
    1044              :     u32 cqId;
    1045              :     u32 logicCqId;
    1046           11 :     rtError_t ret = rtStreamGetCqid(ptr, &cqId, &logicCqId);
    1047           11 :     if (ret != RT_ERROR_NONE) {
    1048            0 :         THROW<RuntimeApiException>(StringFormat("Call rtStreamGetCqid failed, with ret[%d]", ret));
    1049              :     }
    1050           11 :     return logicCqId;
    1051              : }
    1052              : 
    1053           20 : void HrtCcuLaunch(rtCcuTaskInfo_t &taskInfo, aclrtStream const streamPtr)
    1054              : {
    1055           60 :     HCCL_INFO("[HrtCcuLaunch] taskInfo[%p], streamPtr[%p].", &taskInfo, streamPtr);
    1056           20 :     auto ret = rtCCULaunch(&taskInfo, streamPtr);
    1057           20 :     if (ret != RT_ERROR_NONE) {
    1058            2 :         std::string msg;
    1059            2 :         if (ret == ACL_ERROR_RT_STREAM_TASK_FULL) {
    1060              :             // task 队列满
    1061            2 :             msg = StringFormat("[%s] rtCCULaunch failed because the task queue on the stream is full. "
    1062              :                     "ret[%d], param: taskInfo[%p], streamPtr[%p]. "
    1063              :                     "Possible causes: 1) too many tasks have been submitted to the stream; "
    1064              :                     "2) the HCCL buffer is configured too small.",
    1065            1 :                     __func__, ret, &taskInfo, streamPtr);
    1066              :         } else {
    1067            2 :             msg = StringFormat("Call rtCCULaunch failed. return[%d], taskInfo[%p], streamPtr[%p].",
    1068            1 :                     ret, &taskInfo, streamPtr);
    1069              :         }
    1070            2 :         THROW<RuntimeApiException>(msg);
    1071            2 :     }
    1072           18 : }
    1073              : 
    1074           37 : void HrtUbDevQueryInfo(rtUbDevQueryCmd cmd, void *devInfo)
    1075              : {
    1076          111 :     HCCL_INFO("[HrtUbDevQueryInfo] cmd[%d], devInfo[%p].", cmd, devInfo);
    1077           37 :     auto ret = rtUbDevQueryInfo(cmd, devInfo);
    1078           37 :     if (ret != RT_ERROR_NONE) {
    1079              :         string msg = StringFormat("Call rtUbDevQueryInfo failed. return[%d], cmd[%d], devInfo[%p].", 
    1080            1 :                                 ret, cmd, devInfo);
    1081            1 :         THROW<RuntimeApiException>(msg);
    1082            1 :     }
    1083           36 :     if (cmd == QUERY_PROCESS_TOKEN) {
    1084           36 :         rtMemUbTokenInfo *info = static_cast<rtMemUbTokenInfo *>(devInfo);
    1085           36 :         info->tokenId = info->tokenId >> TOKEN_ID_RIGHT_SHIF;
    1086              :     }
    1087           36 : }
    1088              : // pair<tokendId, tokenValue>
    1089            9 : std::pair<u32, u32> HrtUbDevQueryToken(u64 addr, u64 size)
    1090              : {
    1091           27 :     HCCL_INFO("[HrtUbDevQueryToken] addr[%llu], size[%llu].", addr, size);
    1092              :     rtMemUbTokenInfo info;
    1093            9 :     info.va   = addr;
    1094            9 :     info.size = size;
    1095            9 :     auto ret  = rtUbDevQueryInfo(QUERY_PROCESS_TOKEN, &info);
    1096            9 :     if (ret != RT_ERROR_NONE) {
    1097            3 :         HCCL_WARNING("query(va=0x%llx, size=0x%llx) token failed, ret=%d", addr, size, ret);
    1098            1 :         return std::make_pair(0, 0);
    1099              :     }
    1100              : 
    1101            8 :     return {info.tokenId >> TOKEN_ID_RIGHT_SHIF, info.tokenValue};
    1102              : }
    1103              : 
    1104              : const std::map<HrtDevResProcType, rtDevResProcType_t> HRT_DEV_RES_PROC_TYPE_MAP
    1105              :     = {{HrtDevResProcType::PROCESS_CP1, RT_PROCESS_CP1}, {HrtDevResProcType::PROCESS_HCCP, RT_PROCESS_HCCP}};
    1106              : 
    1107              : const std::map<HrtDevResType, rtDevResType_t> HRT_DEV_RES_TYPE_MAP
    1108              :     = {{HrtDevResType::RES_TYPE_STARS_NOTIFY_RECORD, RT_RES_TYPE_STARS_NOTIFY_RECORD},
    1109              :        {HrtDevResType::RES_TYPE_CCU_CKE, RT_RES_TYPE_CCU_CKE},
    1110              :        {HrtDevResType::RES_TYPE_CCU_XN, RT_RES_TYPE_CCU_XN},
    1111              :        {HrtDevResType::RES_TYPE_STARS_CNT_NOTIFY_BIT_WR, RT_RES_TYPE_STARS_CNT_NOTIFY_BIT_WR}};
    1112          115 : HrtDevResAddrInfo HrtGetDevResAddress(const HrtDevResInfo &devResInfo)
    1113              : {
    1114          345 :     HCCL_INFO("[HrtGetDevResAddress] devResInfo.dieId[%u], devResInfo.procType[%u], "
    1115              :                 "devResInfo.resType[%u], devResInfo.flag[%u], devResInfo.resId[%u].", 
    1116              :                 devResInfo.dieId, devResInfo.procType, devResInfo.resType, devResInfo.flag, devResInfo.resId);
    1117              :     rtDevResInfo resInfo;
    1118          115 :     resInfo.dieId    = devResInfo.dieId;
    1119          115 :     resInfo.procType = HRT_DEV_RES_PROC_TYPE_MAP.at(devResInfo.procType);
    1120          115 :     resInfo.resType  = HRT_DEV_RES_TYPE_MAP.at(devResInfo.resType);
    1121          115 :     resInfo.flag     = devResInfo.flag;
    1122          115 :     resInfo.resId    = devResInfo.resId;
    1123              : 
    1124          115 :     uint64_t         addr = 0;
    1125          115 :     u32              len  = 0;
    1126              :     rtDevResAddrInfo addrInfo;
    1127          115 :     addrInfo.resAddress = &addr;
    1128          115 :     addrInfo.len        = &len;
    1129          115 :     auto ret            = rtGetDevResAddress(&resInfo, &addrInfo);
    1130          115 :     if (ret != RT_ERROR_NONE) {
    1131              :         string msg = StringFormat("Call rtGetDevResAddress failed. return[%d], devResInfo.dieId[%u], "
    1132              :                                 "devResInfo.procType[%u], devResInfo.resType[%u], devResInfo.flag[%u], "
    1133              :                                 "devResInfo.resId[%u].", 
    1134            1 :                                 ret, devResInfo.dieId, devResInfo.procType, devResInfo.resType, devResInfo.flag, 
    1135            1 :                                 devResInfo.resId);
    1136            1 :         THROW<RuntimeApiException>(msg);
    1137            1 :     }
    1138          114 :     HrtDevResAddrInfo devResAddrInfo;
    1139          114 :     devResAddrInfo.address = addr;
    1140          114 :     devResAddrInfo.len     = len;
    1141          342 :     HCCL_INFO("devResAddrInfo.address[%llu], devResAddrInfo.len[%u].", devResAddrInfo.address, devResAddrInfo.len);
    1142          114 :     return devResAddrInfo;
    1143              : }
    1144              : 
    1145          115 : void HrtReleaseDevResAddress(const HrtDevResInfo &devResInfo)
    1146              : {
    1147          345 :     HCCL_INFO("[HrtReleaseDevResAddress] devResInfo.dieId[%u], devResInfo.procType[%u], "
    1148              :                 "devResInfo.resType[%u], devResInfo.flag[%u], devResInfo.resId[%u].", 
    1149              :                 devResInfo.dieId, devResInfo.procType, devResInfo.resType, devResInfo.flag, devResInfo.resId);
    1150              :     rtDevResInfo resInfo;
    1151          115 :     resInfo.dieId    = devResInfo.dieId;
    1152          115 :     resInfo.procType = HRT_DEV_RES_PROC_TYPE_MAP.at(devResInfo.procType);
    1153          115 :     resInfo.resType  = HRT_DEV_RES_TYPE_MAP.at(devResInfo.resType);
    1154          115 :     resInfo.flag     = devResInfo.flag;
    1155          115 :     resInfo.resId    = devResInfo.resId;
    1156              : 
    1157          115 :     rtError_t ret = rtReleaseDevResAddress(&resInfo);
    1158          115 :     if (ret != RT_ERROR_NONE) {
    1159              :         string msg = StringFormat("Call rtReleaseDevResAddress failed. return[%d], devResInfo.dieId[%u], "
    1160              :                                     "devResInfo.procType[%u],devResInfo.resType[%u], devResInfo.flag[%u], "
    1161              :                                     "devResInfo.resId[%u].", 
    1162            1 :                                     ret, devResInfo.dieId, devResInfo.procType, devResInfo.resType, 
    1163            1 :                                     devResInfo.flag, devResInfo.resId);
    1164            1 :         THROW<RuntimeApiException>(msg);
    1165            1 :     }
    1166          114 : }
    1167              : 
    1168            5 : aclrtEvent HrtEventCreateWithFlag(u32 flag)
    1169              : {
    1170           15 :     HCCL_INFO("[HrtEventCreateWithFlag] flag[%u].", flag);
    1171            5 :     aclrtEvent ptr = nullptr;
    1172            5 :     aclError ret = aclrtCreateEventWithFlag(&ptr, flag);
    1173            5 :     if (ret != ACL_SUCCESS) {
    1174            1 :         string msg = StringFormat("Call rtEventCreateWithFlag failed. return[%d], flag[%u], ptr[%p].", ret, flag, ptr);
    1175            1 :         THROW<RuntimeApiException>(msg);
    1176            1 :     }
    1177            4 :     return ptr;
    1178              : }
    1179              : 
    1180            7 : void HrtEventDestroy(RtEvent_t eventPtr)
    1181              : {
    1182           21 :     HCCL_INFO("[HrtEventDestroy] eventPtr[%p].", eventPtr);
    1183            7 :     aclError ret = aclrtDestroyEvent(eventPtr);
    1184            7 :     if (ret != ACL_SUCCESS) {
    1185            1 :         string msg = StringFormat("Call aclrtDestroyEvent failed. return[%d], eventPtr[%p].", ret, eventPtr);
    1186            1 :         THROW<RuntimeApiException>(msg);
    1187            1 :     }
    1188            6 : }
    1189              : 
    1190            4 : void HrtEventRecord(RtEvent_t eventPtr, aclrtStream streamPtr)
    1191              : {
    1192           12 :     HCCL_INFO("[HrtEventRecord] eventPtr[%p], streamPtr[%p].", eventPtr, streamPtr);
    1193            4 :     aclError ret = aclrtRecordEvent(eventPtr, streamPtr);
    1194            4 :     if (ret != ACL_SUCCESS) {
    1195              :         string msg = StringFormat("Call aclrtRecordEvent failed. return[%d], eventPtr[%p], streamPtr[%p].", 
    1196            1 :                     ret, eventPtr, streamPtr);
    1197            1 :         THROW<RuntimeApiException>(msg);
    1198            1 :     }
    1199            3 : }
    1200              : 
    1201              : const std::map<aclrtEventWaitStatus, HrtEventStatus> HRT_EVENT_STATUS_MAP{
    1202              :     {ACL_EVENT_WAIT_STATUS_NOT_READY, HrtEventStatus::EVENT_INIT},
    1203              :     {ACL_EVENT_WAIT_STATUS_COMPLETE, HrtEventStatus::EVENT_RECORDED},
    1204              : };
    1205              : 
    1206            4 : HrtEventStatus HrtEventQueryStatus(RtEvent_t eventPtr)
    1207              : {
    1208           12 :     HCCL_INFO("[HrtEventQueryStatus] eventPtr[%p].", eventPtr);
    1209            4 :     aclrtEventWaitStatus status = ACL_EVENT_WAIT_STATUS_NOT_READY;
    1210            4 :     aclError ret = aclrtQueryEventWaitStatus(eventPtr, &status);
    1211            4 :     if (ret != ACL_SUCCESS) {
    1212            1 :         string msg = StringFormat("Call aclrtQueryEventWaitStatus failed. return[%d], eventPtr[%p].", ret, eventPtr);
    1213            1 :         THROW<RuntimeApiException>(msg);
    1214            1 :     }
    1215            3 :     if (HRT_EVENT_STATUS_MAP.find(status) == HRT_EVENT_STATUS_MAP.end()) {
    1216            0 :         THROW<InvalidParamsException>(
    1217            0 :             StringFormat("event status[%u] not in HRT_EVENT_STATUS_MAP.", static_cast<u32>(status)));
    1218              :     }
    1219            6 :     return HRT_EVENT_STATUS_MAP.at(status);
    1220              : }
    1221              : 
    1222            6 : void HrtWriteValue(u64 addr, u32 piVal, const aclrtStream streamPtr)
    1223              : {
    1224            6 :     THROW<NotSupportException>(StringFormat("Unsupported rtWriteValue"));
    1225              : }
    1226              : 
    1227            2 : void HrtDeviceAbortRegCallBack(aclrtDeviceTaskAbortCallback callback, void *args, const std::string& name)
    1228              : {
    1229            2 :     aclError ret = aclrtSetDeviceTaskAbortCallback(name.c_str(), callback, args);
    1230            2 :     if (ret != ACL_SUCCESS) {
    1231            0 :         string msg = StringFormat("call rtSetTaskAbortCallBack failed. ret=[%d].", ret);
    1232            0 :         THROW<RuntimeApiException>(msg);
    1233            0 :     }
    1234            2 : }
    1235              : 
    1236         4372 : HcclResult HrtThreadExchangeCaptureMode(aclmdlRICaptureMode *mode)
    1237              : {
    1238        13116 :     HCCL_INFO("[HrtThreadExchangeCaptureMode] mode[%p].", mode);
    1239         4372 :     aclError ret = aclmdlRICaptureThreadExchangeMode(mode);
    1240         4372 :     if (ret == ACL_ERROR_RT_FEATURE_NOT_SUPPORT) {
    1241            0 :         HCCL_WARNING("[HrtThreadExchangeCaptureMode] rtThreadExchangeCaptureMode not support!, ret=%d, mode=%p.",
    1242              :                         ret, mode);
    1243            0 :         return HCCL_E_NOT_SUPPORT;
    1244              :     } else {
    1245         4372 :         CHK_PRT_RET(ret != ACL_SUCCESS, HCCL_ERROR("[HrtThreadExchangeCaptureMode]rtThreadExchangeCaptureMode "
    1246              :             "failed mode:%d, return value[%d].", *mode, ret), HCCL_E_RUNTIME);
    1247              :     }
    1248         4372 :     return HCCL_SUCCESS;
    1249              : }
    1250              : 
    1251            0 : HcclResult HrtMemPrefetchToDevice(void *devPtr, uint64_t len)
    1252              : {
    1253            0 :     CHK_PRT_RET(aclrtMemP2PMap == nullptr, HCCL_ERROR("aclrtMemP2PMap is nullptr, "
    1254              :             "Does not support this interface."), HCCL_E_RUNTIME);
    1255            0 :         aclError ret = aclrtMemP2PMap(devPtr, static_cast<size_t>(len), HrtGetDevice(), 0);
    1256            0 :     HCCL_INFO("[HrtMemPrefetchToDevice] devPtr[%p], len[%llu], ret[%d].", devPtr, len, ret);
    1257            0 :     if (ret != ACL_SUCCESS) {
    1258            0 :         HCCL_ERROR("aclrtMemP2PMap fail ret = %d", ret);
    1259            0 :         return HCCL_E_RUNTIME;
    1260              :     }
    1261            0 :     return HCCL_SUCCESS;
    1262              : }
    1263              : 
    1264            1 : HcclResult HrtEnableP2P(u32 deviceLogicId, u32 devicePhyId)
    1265              : {
    1266            1 :     rtError_t ret = rtEnableP2P(deviceLogicId, devicePhyId, 0);
    1267              : 
    1268            3 :     HCCL_INFO("rt enableP2P deviceLogicId[%u] and devicePhyId[%u] ret[%d]", deviceLogicId, devicePhyId, ret);
    1269              : 
    1270            1 :     CHK_PRT_RET(ret != RT_ERROR_NONE, HCCL_ERROR("[Enable][P2P]errNo[0x%016llx] rt enableP2P deviceLogicId[%u] and "\
    1271              :         "devicePhyId[%u] fail[%d]", HCCL_ERROR_CODE(HCCL_E_RUNTIME), deviceLogicId, devicePhyId, ret), HCCL_E_RUNTIME);
    1272              : 
    1273            1 :     return HCCL_SUCCESS;
    1274              : }
    1275              : 
    1276            1 : HcclResult HrtDisableP2P(u32 deviceLogicId, u32 devicePhyId)
    1277              : {
    1278            1 :     rtError_t ret = rtDisableP2P(deviceLogicId, devicePhyId);
    1279              : 
    1280            3 :     HCCL_INFO("rt disableP2P deviceLogicId[%u] and devicePhyId[%u] ret[%d]", deviceLogicId, devicePhyId, ret);
    1281              : 
    1282            1 :     CHK_PRT_RET(ret != RT_ERROR_NONE, HCCL_ERROR("[Disable][P2P]errNo[0x%016llx] rt disableP2P deviceLogicId[%u] and "\
    1283              :         "devicePhyId[%u] fail[%d]", HCCL_ERROR_CODE(HCCL_E_RUNTIME), deviceLogicId, devicePhyId, ret), HCCL_E_RUNTIME);
    1284            1 :     return HCCL_SUCCESS;
    1285              : }
    1286              : 
    1287            0 : HcclResult HrtGetP2PStatus(u32 deviceLogicId, u32 devicePhyId, uint32_t *status)
    1288              : {
    1289            0 :     rtError_t ret = rtGetP2PStatus(deviceLogicId, devicePhyId, status);
    1290              : 
    1291            0 :     HCCL_DEBUG("rt getp2pstatus deviceLogicId[%u] and devicePhyId[%u] ret[%d], status[%u]",
    1292              :         deviceLogicId, devicePhyId, ret, *status);
    1293            0 :     CHK_PRT_RET(ret != RT_ERROR_NONE, HCCL_ERROR("[Get][P2PStatus]errNo[0x%016llx]Call rtGetP2PStatus failed, "
    1294              :             "ret[%d], deviceLogicId[%u], devicePhyId[%u]",
    1295              :             HCCL_ERROR_CODE(HCCL_E_RUNTIME), ret, deviceLogicId, devicePhyId), HCCL_E_RUNTIME);
    1296            0 :     return HCCL_SUCCESS;
    1297              : }
    1298              : } // namespace Hccl
        

Generated by: LCOV version 2.0-1