LCOV - code coverage report
Current view: top level - acl/aclrt_impl - memory.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1230 1272 96.7 %
Date: 2026-08-27 13:24:42 Functions: 111 111 100.0 %

          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 <map>
      12             : #include <algorithm>
      13             : #include <functional>
      14             : #include "acl_rt_impl.h"
      15             : #include "runtime/mem.h"
      16             : #include "runtime/rts/rts_mem.h"
      17             : #include "runtime/dev.h"
      18             : #include "runtime/rts/rts_device.h"
      19             : #include "runtime/rt_stars.h"
      20             : #include "runtime/rt_mem_queue.h"
      21             : #include "runtime/rt_inner_mem.h"
      22             : #include "common/log_inner.h"
      23             : #include "common/error_codes_inner.h"
      24             : #include "common/prof_reporter.h"
      25             : #include "common/resource_statistics.h"
      26             : 
      27             : namespace {
      28             : constexpr uint32_t MEM_SIZE_MAX = 96U;
      29             : constexpr size_t DATA_MEMORY_ALIGN_SIZE = 32UL;
      30             : constexpr unsigned int FLAG_START_DYNAMIC_ALLOC_MEM = 0x200U;
      31             : constexpr uint32_t DRV_MEM_HOST_NUMA_SIDE = 2U;
      32             : 
      33             : static const std::map<aclDataType, rtDataType> kMapDataType = {
      34             :     { ACL_FLOAT, RT_DATA_TYPE_FP32 },
      35             :     { ACL_FLOAT16, RT_DATA_TYPE_FP16 },
      36             :     { ACL_INT16, RT_DATA_TYPE_INT16 },
      37             :     { ACL_INT4, RT_DATA_TYPE_INT4 },
      38             :     { ACL_INT8, RT_DATA_TYPE_INT8 },
      39             :     { ACL_INT32, RT_DATA_TYPE_INT32 },
      40             :     { ACL_BF16, RT_DATA_TYPE_BFP16 },
      41             :     { ACL_UINT8, RT_DATA_TYPE_UINT8 },
      42             :     { ACL_UINT16, RT_DATA_TYPE_UINT16 },
      43             :     { ACL_UINT32, RT_DATA_TYPE_UINT32 },
      44             : };
      45             : 
      46             : using Handler = std::function<void(rtDrvMemProp_t&, bool, bool)>;
      47             : static const std::map<int32_t, Handler> memAttrHandlers = {
      48             :     // HBM (Direct Assign)
      49           7 :     {ACL_HBM_MEM_HUGE,    [](rtDrvMemProp_t& p, bool, bool) { p.pg_type = HUGE_PAGE_TYPE; p.mem_type = HBM_TYPE; }},
      50           4 :     {ACL_HBM_MEM_NORMAL,  [](rtDrvMemProp_t& p, bool, bool) { p.pg_type = NORMAL_PAGE_TYPE; p.mem_type = HBM_TYPE; }},
      51           3 :     {ACL_HBM_MEM_HUGE1G,  [](rtDrvMemProp_t& p, bool, bool) { p.pg_type = HUGE1G_PAGE_TYPE; p.mem_type = HBM_TYPE; }},
      52             : 
      53             :     // DDR (Host Only)
      54           1 :     {ACL_DDR_MEM_HUGE,        [](rtDrvMemProp_t& p, bool isHost, bool) { if(isHost) { p.pg_type = HUGE_PAGE_TYPE; p.mem_type = DDR_TYPE; } }},
      55           1 :     {ACL_DDR_MEM_NORMAL,      [](rtDrvMemProp_t& p, bool isHost, bool) { if(isHost) { p.pg_type = NORMAL_PAGE_TYPE; p.mem_type = DDR_TYPE; } }},
      56           1 :     {ACL_DDR_MEM_P2P_HUGE,    [](rtDrvMemProp_t& p, bool isHost, bool) { if(isHost) { p.pg_type = HUGE_PAGE_TYPE; p.mem_type = P2P_DDR_TYPE; } }},
      57           1 :     {ACL_DDR_MEM_P2P_NORMAL,  [](rtDrvMemProp_t& p, bool isHost, bool) { if(isHost) { p.pg_type = NORMAL_PAGE_TYPE; p.mem_type = P2P_DDR_TYPE; } }},
      58             : 
      59             :     // Generic (Host / Device)
      60           2 :     {ACL_MEM_NORMAL,      [](rtDrvMemProp_t& p, bool isHost, bool isDev) { if(isHost) { p.pg_type = NORMAL_PAGE_TYPE; p.mem_type = DDR_TYPE; } else if(isDev) { p.pg_type = NORMAL_PAGE_TYPE; p.mem_type = HBM_TYPE; } }},
      61           2 :     {ACL_MEM_HUGE,        [](rtDrvMemProp_t& p, bool isHost, bool isDev) { if(isHost) { p.pg_type = HUGE_PAGE_TYPE; p.mem_type = DDR_TYPE; } else if(isDev) { p.pg_type = HUGE_PAGE_TYPE; p.mem_type = HBM_TYPE; } }},
      62           2 :     {ACL_MEM_HUGE1G,      [](rtDrvMemProp_t& p, bool isHost, bool isDev) { if(isHost) { p.pg_type = HUGE1G_PAGE_TYPE; p.mem_type = DDR_TYPE; } else if(isDev) { p.pg_type = HUGE1G_PAGE_TYPE; p.mem_type = HBM_TYPE; } }},
      63             : 
      64             :     // P2P (Host / Device)
      65           2 :     {ACL_MEM_P2P_NORMAL,  [](rtDrvMemProp_t& p, bool isHost, bool isDev) { if(isHost) { p.pg_type = NORMAL_PAGE_TYPE; p.mem_type = P2P_DDR_TYPE; } else if(isDev) { p.pg_type = NORMAL_PAGE_TYPE; p.mem_type = P2P_HBM_TYPE; } }},
      66           2 :     {ACL_MEM_P2P_HUGE,    [](rtDrvMemProp_t& p, bool isHost, bool isDev) { if(isHost) { p.pg_type = HUGE_PAGE_TYPE; p.mem_type = P2P_DDR_TYPE; } else if(isDev) { p.pg_type = HUGE_PAGE_TYPE; p.mem_type = P2P_HBM_TYPE; } }},
      67           2 :     {ACL_MEM_P2P_HUGE1G,  [](rtDrvMemProp_t& p, bool isHost, bool isDev) { if(isHost) { p.pg_type = HUGE1G_PAGE_TYPE; p.mem_type = P2P_DDR_TYPE; } else if(isDev) { p.pg_type = HUGE1G_PAGE_TYPE; p.mem_type = P2P_HBM_TYPE; } }}
      68             : };
      69             : 
      70          34 : inline aclError MemcpyKindTranslate(const aclrtMemcpyKind kind, rtMemcpyKind_t &rtKind)
      71             : {
      72          34 :     switch (kind) {
      73           7 :         case ACL_MEMCPY_HOST_TO_DEVICE: {
      74           7 :             rtKind = RT_MEMCPY_HOST_TO_DEVICE;
      75           7 :             break;
      76             :         }
      77           7 :         case ACL_MEMCPY_DEVICE_TO_DEVICE: {
      78           7 :             rtKind = RT_MEMCPY_DEVICE_TO_DEVICE;
      79           7 :             break;
      80             :         }
      81           4 :         case ACL_MEMCPY_DEVICE_TO_HOST: {
      82           4 :             rtKind = RT_MEMCPY_DEVICE_TO_HOST;
      83           4 :             break;
      84             :         }
      85           4 :         case ACL_MEMCPY_HOST_TO_HOST: {
      86           4 :             rtKind = RT_MEMCPY_HOST_TO_HOST;
      87           4 :             break;
      88             :         }
      89           4 :         case ACL_MEMCPY_DEFAULT: {
      90           4 :             rtKind = RT_MEMCPY_DEFAULT;
      91           4 :             break;
      92             :         }
      93           4 :         case ACL_MEMCPY_HOST_TO_BUF_TO_DEVICE: {
      94           4 :             rtKind = RT_MEMCPY_HOST_TO_DEVICE_EX;
      95           4 :             break;
      96             :         }
      97           4 :         default: {
      98           4 :             ACL_LOG_ERROR("[Check][MemcpyKindTranslate]param kind invalid, which is %d.", static_cast<int32_t>(kind));
      99          12 :             acl::AclErrorLogManager::ReportInputError(acl::INVALID_PARAM_MSG,
     100           8 :                 std::vector<const char *>({"param", "value", "reason"}),
     101           8 :                 std::vector<const char *>({"kind", std::to_string(kind).c_str(),
     102             :                 "Memcpy kind should be ACL_MEMCPY_HOST_TO_DEVICE,"
     103             :                 "ACL_MEMCPY_DEVICE_TO_DEVICE, ACL_MEMCPY_DEVICE_TO_HOST,"
     104             :                 "ACL_MEMCPY_HOST_TO_HOST, ACL_MEMCPY_DEFAULT or ACL_MEMCPY_HOST_TO_BUF_TO_DEVICE."}));
     105           4 :             return ACL_ERROR_INVALID_PARAM;
     106             :         }
     107             :     }
     108          30 :     return ACL_SUCCESS;
     109             : }
     110             : 
     111          15 : aclError CheckMemcpy2dParam(const void *const dst, const size_t dpitch, const void *const src, const size_t spitch,
     112             :     const size_t width, const size_t height, const aclrtMemcpyKind kind, rtMemcpyKind_t &rtKind)
     113             : {
     114          15 :     ACL_LOG_DEBUG("start to execute CheckMemcpy2dParam");
     115          15 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(dst);
     116          15 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(src);
     117          15 :     ACL_REQUIRES_POSITIVE(height);
     118          13 :     ACL_REQUIRES_POSITIVE(width);
     119             : 
     120          13 :     if ((width > spitch) || (width > dpitch)) {
     121           2 :         ACL_LOG_ERROR("[Check][Width]input param width[%zu] must be smaller than spitch[%zu] and dpitch[%zu]",
     122             :             width, spitch, dpitch);
     123           6 :         acl::AclErrorLogManager::ReportInputError(acl::INVALID_PARAM_MSG,
     124           4 :             std::vector<const char *>({"param", "value", "reason"}),
     125           4 :             std::vector<const char *>({"width", std::to_string(width).c_str(), "must be smaller than spitch and dpitch"}));
     126           2 :         return ACL_ERROR_INVALID_PARAM;
     127             :     }
     128             : 
     129          11 :     switch (kind) {
     130           4 :         case ACL_MEMCPY_HOST_TO_DEVICE: {
     131           4 :             rtKind = RT_MEMCPY_HOST_TO_DEVICE;
     132           4 :             break;
     133             :         }
     134           0 :         case ACL_MEMCPY_DEVICE_TO_HOST: {
     135           0 :             rtKind = RT_MEMCPY_DEVICE_TO_HOST;
     136           0 :             break;
     137             :         }
     138           1 :         case ACL_MEMCPY_DEVICE_TO_DEVICE: {
     139           1 :             rtKind = RT_MEMCPY_DEVICE_TO_DEVICE;
     140           1 :             break;
     141             :         }
     142           2 :         case ACL_MEMCPY_DEFAULT: {
     143           2 :             rtKind = RT_MEMCPY_DEFAULT;
     144           2 :             break;
     145             :         }
     146           4 :         default: {
     147           4 :             ACL_LOG_ERROR("[Check][Kind]invalid kind of memcpy, kind = %d", static_cast<int32_t>(kind));
     148          12 :             acl::AclErrorLogManager::ReportInputError(acl::INVALID_PARAM_MSG,
     149           8 :                 std::vector<const char *>({"param", "value", "reason"}),
     150           8 :                 std::vector<const char *>({"kind", std::to_string(kind).c_str(), "invalid kind of memcpy"}));
     151           4 :             return ACL_ERROR_INVALID_PARAM;
     152             :         }
     153             :     }
     154           7 :     return ACL_SUCCESS;
     155             : }
     156             : }
     157             : 
     158             : namespace acl {
     159          53 : aclError GetAlignedAndPaddingSize(const size_t size, const bool isPadding, size_t &alignedSize)
     160             : {
     161             :     // check overflow, the max value of size must be less than 0xFFFFFFFFFFFFFFFF-32*2
     162          53 :     if ((size + (DATA_MEMORY_ALIGN_SIZE * 2UL)) < size) {
     163           7 :         ACL_LOG_INNER_ERROR("[Check][Size]size too large: %zu", size);
     164           7 :         return ACL_ERROR_INVALID_PARAM;
     165             :     }
     166             : 
     167             :     // align size to multiple of 32 and padding 32 if needed
     168          46 :     const size_t appendSize = isPadding ? DATA_MEMORY_ALIGN_SIZE * 2UL : DATA_MEMORY_ALIGN_SIZE;
     169          46 :     alignedSize = (size + appendSize - 1UL) / DATA_MEMORY_ALIGN_SIZE * DATA_MEMORY_ALIGN_SIZE;
     170          46 :     return ACL_SUCCESS;
     171             : }
     172             : 
     173          42 : aclError aclMallocMemInner(void **devPtr, const size_t size, bool isPadding,
     174             :                            const aclrtMemMallocPolicy policy, const uint16_t moduleId)
     175             : {
     176          42 :     ACL_ADD_APPLY_TOTAL_COUNT(acl::ACL_STATISTICS_MALLOC_FREE);
     177          42 :     ACL_LOG_DEBUG("start to execute aclMallocMemInner, size = %zu", size);
     178          42 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(devPtr);
     179             :     // size must be greater than zero
     180          39 :     if (size == 0UL) {
     181           3 :         ACL_LOG_ERROR("malloc size must be greater than zero");
     182           9 :         acl::AclErrorLogManager::ReportInputError(acl::INVALID_PARAM_MSG,
     183           6 :             std::vector<const char *>({"param", "value", "reason"}),
     184           6 :             std::vector<const char *>({"size", std::to_string(size).c_str(), "size must be greater than zero"}));
     185           3 :         return ACL_ERROR_INVALID_PARAM;
     186             :     }
     187          36 :     size_t alignedSize = size;
     188          36 :     const bool huge1g = (policy == ACL_MEM_MALLOC_HUGE1G_ONLY) || (policy == ACL_MEM_MALLOC_HUGE1G_ONLY_P2P);
     189          36 :     isPadding = !huge1g && isPadding;
     190          36 :     ACL_REQUIRES_OK(acl::GetAlignedAndPaddingSize(size, isPadding, alignedSize));
     191          33 :     uint32_t flags = RT_MEMORY_DEFAULT;
     192          33 :     if (policy == ACL_MEM_MALLOC_HUGE_FIRST) {
     193           9 :         flags |= RT_MEMORY_POLICY_HUGE_PAGE_FIRST;
     194          24 :     } else if (policy == ACL_MEM_MALLOC_HUGE_ONLY) {
     195           4 :         flags |= RT_MEMORY_POLICY_HUGE_PAGE_ONLY;
     196          20 :     } else if (policy == ACL_MEM_MALLOC_NORMAL_ONLY) {
     197           3 :         flags |= RT_MEMORY_POLICY_DEFAULT_PAGE_ONLY;
     198          17 :     } else if (policy == ACL_MEM_MALLOC_HUGE_FIRST_P2P) {
     199           3 :         flags |= RT_MEMORY_POLICY_HUGE_PAGE_FIRST_P2P;
     200          14 :     } else if (policy == ACL_MEM_MALLOC_HUGE_ONLY_P2P) {
     201           7 :         flags |= RT_MEMORY_POLICY_HUGE_PAGE_ONLY_P2P;
     202           7 :     } else if (policy == ACL_MEM_MALLOC_NORMAL_ONLY_P2P) {
     203           3 :         flags |= RT_MEMORY_POLICY_DEFAULT_PAGE_ONLY_P2P;
     204           4 :     } else if (policy == ACL_MEM_MALLOC_HUGE1G_ONLY) {
     205           2 :         flags |= RT_MEMORY_POLICY_HUGE1G_PAGE_ONLY;
     206           2 :     } else if (policy == ACL_MEM_MALLOC_HUGE1G_ONLY_P2P) {
     207           2 :         flags |= RT_MEMORY_POLICY_HUGE1G_PAGE_ONLY_P2P;
     208             :     } else {
     209           0 :         flags = RT_MEMORY_DEFAULT;
     210             :     }
     211          33 :     const rtError_t rtErr = rtMalloc(devPtr, alignedSize, flags, moduleId);
     212          33 :     if (rtErr != RT_ERROR_NONE) {
     213           3 :         ACL_LOG_CALL_ERROR("alloc device memory failed, runtime result = %d", rtErr);
     214           3 :         return ACL_GET_ERRCODE_RTS(rtErr);
     215             :     }
     216          30 :     ACL_ADD_APPLY_SUCCESS_COUNT(acl::ACL_STATISTICS_MALLOC_FREE);
     217          30 :     return ACL_SUCCESS;
     218             : }
     219             : 
     220          10 : aclError aclrtMallocInnerWithCfg(void **devPtr, const size_t size, aclrtMemMallocPolicy policy, rtMallocAdvise advise,
     221             :     aclrtMallocConfig *cfg)
     222             : {
     223          10 :     ACL_ADD_APPLY_TOTAL_COUNT(acl::ACL_STATISTICS_MALLOC_FREE);
     224          10 :     ACL_LOG_DEBUG("start to execute aclrtMallocInnerWithCfg, size = %zu", size);
     225          10 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(devPtr);
     226             : 
     227             :     // check attrs pointer
     228           9 :     if ((cfg != nullptr) && (cfg->numAttrs != 0) && (cfg->attrs == nullptr)) {
     229           1 :         ACL_LOG_ERROR("[Check][attrs]param must not be null when numAttrs is not 0.");
     230           1 :         acl::AclErrorLogManager::ReportInputError("EH0002", {"param"}, {"cfg"});
     231           1 :         return ACL_ERROR_INVALID_PARAM;
     232             :     }
     233             :     // size must be greater than zero
     234           8 :     if (size == 0UL) {
     235           1 :         ACL_LOG_ERROR("malloc size must be greater than zero");
     236           3 :         acl::AclErrorLogManager::ReportInputError(acl::INVALID_PARAM_MSG,
     237           2 :             std::vector<const char *>({"param", "value", "reason"}),
     238           2 :             std::vector<const char *>({"size", std::to_string(size).c_str(), "size must be greater than zero"}));
     239           1 :         return ACL_ERROR_INVALID_PARAM;
     240             :     }
     241             : 
     242           7 :     rtError_t rtErr = rtsMalloc(devPtr, size, static_cast<rtMallocPolicy>(policy), advise,
     243             :         reinterpret_cast<rtMallocConfig_t*>(cfg));
     244           7 :     if (rtErr != RT_ERROR_NONE) {
     245           2 :         ACL_LOG_CALL_ERROR("alloc memory failed, runtime result = %d", rtErr);
     246           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     247             :     }
     248           5 :     ACL_ADD_APPLY_SUCCESS_COUNT(acl::ACL_STATISTICS_MALLOC_FREE);
     249           5 :     return ACL_SUCCESS;
     250             : }
     251             : } // namespace acl
     252             : 
     253          30 : aclError aclrtMallocImpl(void **devPtr, size_t size, aclrtMemMallocPolicy policy)
     254             : {
     255          60 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMalloc);
     256          30 :     ACL_LOG_DEBUG("start to execute aclrtMalloc, size = %zu", size);
     257          60 :     return acl::aclMallocMemInner(devPtr, size, true, policy, acl::APP_MODE_ID_U16);
     258             : }
     259             : 
     260          12 : aclError aclrtMallocAlign32Impl(void **devPtr, size_t size, aclrtMemMallocPolicy policy)
     261             : {
     262          12 :     ACL_LOG_DEBUG("start to execute aclrtMallocAlign32, size = %zu", size);
     263          12 :     return acl::aclMallocMemInner(devPtr, size, false, policy, acl::APP_MODE_ID_U16);
     264             : }
     265             : 
     266          11 : aclError aclrtMallocCachedImpl(void **devPtr, size_t size, aclrtMemMallocPolicy policy)
     267             : {
     268          22 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMallocCached);
     269          11 :     ACL_ADD_APPLY_TOTAL_COUNT(acl::ACL_STATISTICS_MALLOC_FREE);
     270          11 :     ACL_LOG_DEBUG("start to execute aclrtMallocCached, size = %zu", size);
     271          11 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(devPtr);
     272             : 
     273          11 :     if (size == 0UL) {
     274           2 :         ACL_LOG_INNER_ERROR("malloc size must be greater than zero");
     275           2 :         return ACL_ERROR_INVALID_PARAM;
     276             :     }
     277           9 :     size_t alignedSize = size;
     278           9 :     const bool huge1g = (policy == ACL_MEM_MALLOC_HUGE1G_ONLY) || (policy == ACL_MEM_MALLOC_HUGE1G_ONLY_P2P);
     279           9 :     const bool isPadding = !huge1g;
     280           9 :     ACL_REQUIRES_OK(acl::GetAlignedAndPaddingSize(size, isPadding, alignedSize));
     281           7 :     uint32_t cacheFlags = RT_MEMORY_DEFAULT;
     282           7 :     if (policy == ACL_MEM_MALLOC_HUGE_FIRST) {
     283           3 :         cacheFlags |= RT_MEMORY_POLICY_HUGE_PAGE_FIRST;
     284           4 :     } else if (policy == ACL_MEM_MALLOC_HUGE_ONLY) {
     285           2 :         cacheFlags |= RT_MEMORY_POLICY_HUGE_PAGE_ONLY;
     286           2 :     } else if (policy == ACL_MEM_MALLOC_NORMAL_ONLY) {
     287           1 :         cacheFlags |= RT_MEMORY_POLICY_DEFAULT_PAGE_ONLY;
     288           1 :     } else if (policy == ACL_MEM_MALLOC_HUGE1G_ONLY) {
     289           1 :         cacheFlags |= RT_MEMORY_POLICY_HUGE1G_PAGE_ONLY;
     290             :     } else {
     291           0 :         cacheFlags = RT_MEMORY_DEFAULT;
     292             :     }
     293           7 :     const rtError_t rtErr = rtMallocCached(devPtr, alignedSize, cacheFlags, acl::APP_MODE_ID_U16);
     294           7 :     if (rtErr != RT_ERROR_NONE) {
     295           2 :         ACL_LOG_CALL_ERROR("alloc device memory with cache failed, runtime result = %d", static_cast<int32_t>(rtErr));
     296           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     297             :     }
     298           5 :     ACL_ADD_APPLY_SUCCESS_COUNT(acl::ACL_STATISTICS_MALLOC_FREE);
     299           5 :     return ACL_SUCCESS;
     300             : }
     301             : 
     302           7 : aclError aclrtMallocWithCfgImpl(void **devPtr, size_t size, aclrtMemMallocPolicy policy, aclrtMallocConfig *cfg)
     303             : {
     304          14 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMallocWithCfg);
     305           7 :     ACL_ADD_APPLY_TOTAL_COUNT(acl::ACL_STATISTICS_MALLOC_FREE);
     306           7 :     ACL_LOG_DEBUG("start to execute aclrtMallocWithCfg, size = %zu", size);
     307          14 :     return acl::aclrtMallocInnerWithCfg(devPtr, size, policy, RT_MEM_ADVISE_NONE, cfg);
     308             : }
     309             : 
     310           3 : aclError aclrtMallocForTaskSchedulerImpl(void **devPtr, size_t size, aclrtMemMallocPolicy policy,
     311             :                                          aclrtMallocConfig *cfg)
     312             : {
     313           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMallocForTaskScheduler);
     314           3 :     ACL_LOG_DEBUG("start to execute aclrtMallocForTaskScheduler, size = %zu", size);
     315           6 :     return acl::aclrtMallocInnerWithCfg(devPtr, size, policy, RT_MEM_ADVISE_TS, cfg);
     316             : }
     317             : 
     318           5 : aclError aclrtMallocHostWithCfgImpl(void **ptr, uint64_t size, aclrtMallocConfig *cfg)
     319             : {
     320          10 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMallocHostWithCfg);
     321           5 :     ACL_ADD_APPLY_TOTAL_COUNT(acl::ACL_STATISTICS_MALLOC_FREE);
     322           5 :     ACL_LOG_DEBUG("start to execute aclrtMallocHostWithCfg, size = %zu", size);
     323           5 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(ptr);
     324             :     // size must be greater than zero
     325           4 :     if (size == 0UL) {
     326           1 :         ACL_LOG_ERROR("malloc size must be greater than zero");
     327           3 :         acl::AclErrorLogManager::ReportInputError(acl::INVALID_PARAM_MSG,
     328           2 :             std::vector<const char *>({"param", "value", "reason"}),
     329           2 :             std::vector<const char *>({"size", std::to_string(size).c_str(), "size must be greater than zero"}));
     330           1 :         return ACL_ERROR_INVALID_PARAM;
     331             :     }
     332           3 :     const rtError_t rtErr = rtsMallocHost(ptr, size, reinterpret_cast<rtMallocConfig_t*>(cfg));
     333           3 :     if (rtErr != RT_ERROR_NONE) {
     334           1 :         ACL_LOG_CALL_ERROR("alloc host memory with cfg failed, runtime result = %d", rtErr);
     335           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     336             :     }
     337           2 :     ACL_ADD_APPLY_SUCCESS_COUNT(acl::ACL_STATISTICS_MALLOC_FREE);
     338           2 :     return ACL_SUCCESS;
     339             : }
     340             : 
     341           3 : aclError aclrtPointerGetAttributesImpl(const void *ptr, aclrtPtrAttributes *attributes)
     342             : {
     343           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtPointerGetAttributes);
     344           3 :     ACL_LOG_DEBUG("start to execute aclrtPointerGetAttributes");
     345           3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(ptr);
     346           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(attributes);
     347           2 :     const rtError_t rtErr = rtsPointerGetAttributes(ptr, reinterpret_cast<rtPtrAttributes_t*>(attributes));
     348           2 :     if (rtErr != RT_ERROR_NONE) {
     349           1 :         ACL_LOG_CALL_ERROR("call rtsPointerGetAttributes failed, runtime result = %d", rtErr);
     350           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     351             :     }
     352           1 :     return ACL_SUCCESS;
     353             : }
     354             : 
     355           4 : aclError aclrtHostRegisterImpl(void *ptr, uint64_t size, aclrtHostRegisterType type, void **devPtr)
     356             : {
     357           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtHostRegister);
     358           4 :     ACL_LOG_DEBUG("start to execute aclrtHostRegister");
     359           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(ptr);
     360           3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(devPtr);
     361             :     // size must be greater than zero
     362           3 :     if (size == 0UL) {
     363           1 :         ACL_LOG_ERROR("register size must be greater than zero");
     364           3 :         acl::AclErrorLogManager::ReportInputError(acl::INVALID_PARAM_MSG,
     365           2 :             std::vector<const char *>({"param", "value", "reason"}),
     366           2 :             std::vector<const char *>({"size", std::to_string(size).c_str(), "size must be greater than zero"}));
     367           1 :         return ACL_ERROR_INVALID_PARAM;
     368             :     }
     369           2 :     const rtError_t rtErr = rtsHostRegister(ptr, size, static_cast<rtHostRegisterType>(type), devPtr);
     370           2 :     if (rtErr != RT_ERROR_NONE) {
     371           1 :         ACL_LOG_CALL_ERROR("call rtsHostRegister failed, runtime result = %d", rtErr);
     372           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     373             :     }
     374           1 :     return ACL_SUCCESS;
     375             : }
     376             : 
     377           5 : aclError aclrtHostRegisterV2Impl(void *ptr, uint64_t size, uint32_t flag)
     378             : {
     379          10 :     ACL_PROFILING_REG(acl::AclProfType::AclrtHostRegisterV2);
     380           5 :     ACL_LOG_DEBUG("start to execute aclrtHostRegisterV2");
     381           5 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(ptr);
     382             :     // size must be greater than zero
     383           4 :     if (size == 0UL) {
     384           1 :         ACL_LOG_ERROR("register size must be greater than zero");
     385           3 :         acl::AclErrorLogManager::ReportInputError(acl::INVALID_PARAM_MSG,
     386           2 :             std::vector<const char *>({"param", "value", "reason"}),
     387           2 :             std::vector<const char *>({"size", std::to_string(size).c_str(), "size must be greater than zero"}));
     388           1 :         return ACL_ERROR_INVALID_PARAM;
     389             :     }
     390           3 :     const rtError_t rtErr = rtHostRegisterV2(ptr, size, flag);
     391           3 :     if (rtErr != RT_ERROR_NONE) {
     392           1 :         ACL_LOG_CALL_ERROR("call rtHostRegisterV2 failed, runtime result = %d", rtErr);
     393           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     394             :     }
     395           2 :     return ACL_SUCCESS;
     396             : }
     397             : 
     398           4 : aclError aclrtHostGetDevicePointerImpl(void *pHost, void **pDevice, uint32_t flag)
     399             : {
     400           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtHostGetDevicePointer);
     401           4 :     ACL_LOG_DEBUG("start to execute aclrtHostGetDevicePointer");
     402           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(pHost);
     403           3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(pDevice);
     404           3 :     if (flag != 0UL) {
     405           1 :         ACL_LOG_ERROR("register flag must be zero");
     406           3 :         acl::AclErrorLogManager::ReportInputError(acl::INVALID_PARAM_MSG,
     407           2 :             std::vector<const char *>({"param", "value", "reason"}),
     408           2 :             std::vector<const char *>({"flag", std::to_string(flag).c_str(), "flag must be zero"}));
     409           1 :         return ACL_ERROR_INVALID_PARAM;
     410             :     }
     411           2 :     const rtError_t rtErr = rtHostGetDevicePointer(pHost, pDevice, flag);
     412           2 :     if (rtErr != RT_ERROR_NONE) {
     413           1 :         ACL_LOG_CALL_ERROR("call aclrtHostGetDevicePointer failed, runtime result = %d", rtErr);
     414           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     415             :     }
     416           1 :     return ACL_SUCCESS;
     417             : }
     418             : 
     419           3 : aclError aclrtHostUnregisterImpl(void *ptr)
     420             : {
     421           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtHostUnregister);
     422           3 :     ACL_LOG_DEBUG("start to execute aclrtHostUnregister");
     423           3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(ptr);
     424           2 :     const rtError_t rtErr = rtsHostUnregister(ptr);
     425           2 :     if (rtErr != RT_ERROR_NONE) {
     426           1 :         ACL_LOG_CALL_ERROR("call rtsHostUnregister failed, runtime result = %d", rtErr);
     427           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     428             :     }
     429           1 :     return ACL_SUCCESS;
     430             : }
     431             : 
     432           2 : aclError aclrtHostMemMapCapabilitiesImpl(uint32_t deviceId, aclrtHacType hacType,
     433             :     aclrtHostMemMapCapability *capabilities)
     434             : {
     435           4 :     ACL_PROFILING_REG(acl::AclProfType::AclrtHostMemMapCapabilities);
     436           2 :     ACL_LOG_DEBUG("start to execute aclrtHostMemMapCapabilities, deviceId = %u", deviceId);
     437           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(capabilities);
     438           2 :     const rtError_t rtErr = rtHostMemMapCapabilities(deviceId, static_cast<rtHacType>(hacType),
     439             :         reinterpret_cast<rtHostMemMapCapability*>(capabilities));
     440           2 :     if (rtErr != RT_ERROR_NONE) {
     441           1 :         if (rtErr == ACL_ERROR_RT_FEATURE_NOT_SUPPORT) {
     442           0 :             ACL_LOG_WARN("rtHostMemMapCapabilities not support this feature, runtime result = %d", static_cast<int32_t>(rtErr));
     443             :         } else {
     444           1 :             ACL_LOG_CALL_ERROR("call rtHostMemMapCapabilities failed, runtime result = %d", static_cast<int32_t>(rtErr));
     445             :         }
     446           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     447             :     }
     448           1 :     return ACL_SUCCESS;
     449             : }
     450             : 
     451           6 : aclError aclrtMemFlushImpl(void *devPtr, size_t size)
     452             : {
     453          12 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemFlush);
     454           6 :     ACL_LOG_DEBUG("start to execute aclrtMemFlush, size = %zu", size);
     455           6 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(devPtr);
     456             : 
     457           5 :     if (size == 0UL) {
     458           2 :         ACL_LOG_INNER_ERROR("flush cache size must be greater than zero");
     459           2 :         return ACL_ERROR_INVALID_PARAM;
     460             :     }
     461           3 :     const rtError_t rtErr = rtFlushCache(devPtr, size);
     462           3 :     if (rtErr != RT_ERROR_NONE) {
     463           2 :         ACL_LOG_CALL_ERROR("flush cache data to ddr failed, runtime result = %d, size = %zu",
     464             :             static_cast<int32_t>(rtErr), size);
     465           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     466             :     }
     467           1 :     return ACL_SUCCESS;
     468             : }
     469             : 
     470           6 : aclError aclrtMemInvalidateImpl(void *devPtr, size_t size)
     471             : {
     472          12 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemInvalidate);
     473           6 :     ACL_LOG_INFO("start to execute aclrtMemInvalidate, size = %zu", size);
     474           6 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(devPtr);
     475             : 
     476           5 :     if (size == 0UL) {
     477           2 :         ACL_LOG_INNER_ERROR("invalidate cache size must be greater than zero");
     478           2 :         return ACL_ERROR_INVALID_PARAM;
     479             :     }
     480           3 :     const rtError_t rtErr = rtInvalidCache(devPtr, size);
     481           3 :     if (rtErr != RT_ERROR_NONE) {
     482           2 :         ACL_LOG_CALL_ERROR("invalidate cache data failed, runtime result = %d, size = %zu",
     483             :             static_cast<int32_t>(rtErr), size);
     484           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     485             :     }
     486           1 :     return ACL_SUCCESS;
     487             : }
     488             : 
     489          21 : aclError aclrtFreeImpl(void *devPtr)
     490             : {
     491          42 :     ACL_PROFILING_REG(acl::AclProfType::AclrtFree);
     492          21 :     ACL_ADD_RELEASE_TOTAL_COUNT(acl::ACL_STATISTICS_MALLOC_FREE);
     493          21 :     ACL_LOG_DEBUG("start to execute aclrtFree");
     494          21 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(devPtr);
     495             : 
     496          20 :     const rtError_t rtErr = rtFree(devPtr);
     497          20 :     if (rtErr != RT_ERROR_NONE) {
     498           1 :         ACL_LOG_CALL_ERROR("free device memory failed, runtime result = %d", rtErr);
     499           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     500             :     }
     501          19 :     ACL_ADD_RELEASE_SUCCESS_COUNT(acl::ACL_STATISTICS_MALLOC_FREE);
     502          19 :     return ACL_SUCCESS;
     503             : }
     504             : 
     505          13 : aclError aclrtMallocHostImpl(void **hostPtr, size_t size)
     506             : {
     507          26 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMallocHost);
     508          13 :     ACL_ADD_APPLY_TOTAL_COUNT(acl::ACL_STATISTICS_MALLOC_FREE_HOST);
     509          13 :     ACL_LOG_DEBUG("start to execute aclrtMallocHost, size = %zu", size);
     510          13 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(hostPtr);
     511             :     // size must be greater than zero
     512          11 :     if (size == 0UL) {
     513           2 :         ACL_LOG_INNER_ERROR("malloc size must be greater than zero");
     514           2 :         return ACL_ERROR_INVALID_PARAM;
     515             :     }
     516           9 :     const rtError_t rtErr = rtMallocHost(hostPtr, size, acl::APP_MODE_ID_U16);
     517           9 :     if (rtErr != RT_ERROR_NONE) {
     518           2 :         ACL_LOG_CALL_ERROR("alloc host memory failed, runtime result = %d", rtErr);
     519           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     520             :     }
     521           7 :     ACL_ADD_APPLY_SUCCESS_COUNT(acl::ACL_STATISTICS_MALLOC_FREE_HOST);
     522           7 :     return ACL_SUCCESS;
     523             : }
     524             : 
     525           2 : aclError aclrtMemAllocManagedImpl(void **ptr, uint64_t size, uint32_t flag)
     526             : {
     527           4 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemAllocManaged);
     528           2 :     ACL_LOG_DEBUG("start to execute aclrtMemAllocManaged");
     529           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(ptr);
     530           2 :     if (flag != ACL_RT_MEM_ATTACH_GLOBAL) {
     531           1 :         ACL_LOG_INNER_ERROR("flag must be ACL_RT_MEM_ATTACH_GLOBAL");
     532           1 :         return ACL_ERROR_INVALID_PARAM;
     533             :     }
     534           1 :     const rtError_t rtErr = rtMemAllocManaged(ptr, size, RT_MEMORY_ATTACH_GLOBAL, acl::APP_MODE_ID_U16);
     535           1 :     if (rtErr != RT_ERROR_NONE) {
     536           0 :         ACL_LOG_CALL_ERROR("alloc uvm memory failed, runtime result = %d", rtErr);
     537           0 :         return ACL_GET_ERRCODE_RTS(rtErr);
     538             :     }
     539           1 :     return ACL_SUCCESS;
     540             : }
     541             : 
     542           7 : aclError aclrtFreeHostImpl(void *hostPtr)
     543             : {
     544          14 :     ACL_PROFILING_REG(acl::AclProfType::AclrtFreeHost);
     545           7 :     ACL_ADD_RELEASE_TOTAL_COUNT(acl::ACL_STATISTICS_MALLOC_FREE_HOST);
     546           7 :     ACL_LOG_DEBUG("start to execute aclrtFreeHost");
     547           7 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(hostPtr);
     548           6 :     const rtError_t rtErr = rtFreeHost(hostPtr);
     549           6 :     if (rtErr != RT_ERROR_NONE) {
     550           1 :         ACL_LOG_CALL_ERROR("free host memory failed, runtime result = %d", rtErr);
     551           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     552             :     }
     553           5 :     ACL_ADD_RELEASE_SUCCESS_COUNT(acl::ACL_STATISTICS_MALLOC_FREE_HOST);
     554           5 :     return ACL_SUCCESS;
     555             : }
     556             : 
     557           4 : aclError aclrtFreeWithDevSyncImpl(void *devPtr)
     558             : {
     559           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtFreeWithDevSync);
     560           4 :     ACL_ADD_RELEASE_TOTAL_COUNT(acl::ACL_STATISTICS_MALLOC_FREE);
     561           4 :     ACL_LOG_DEBUG("start to execute aclrtFreeWithDevSync");
     562           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(devPtr);
     563             : 
     564           3 :     const rtError_t rtErr = rtFreeWithDevSync(devPtr);
     565           3 :     if (rtErr != RT_ERROR_NONE) {
     566           1 :         ACL_LOG_CALL_ERROR("free device memory with device synchronize failed, runtime result = %d", rtErr);
     567           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     568             :     }
     569           2 :     ACL_ADD_RELEASE_SUCCESS_COUNT(acl::ACL_STATISTICS_MALLOC_FREE);
     570           2 :     return ACL_SUCCESS;
     571             : }
     572             : 
     573           4 : aclError aclrtFreeHostWithDevSyncImpl(void *hostPtr)
     574             : {
     575           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtFreeHostWithDevSync);
     576           4 :     ACL_ADD_RELEASE_TOTAL_COUNT(acl::ACL_STATISTICS_MALLOC_FREE_HOST);
     577           4 :     ACL_LOG_DEBUG("start to execute aclrtFreeHostWithDevSync");
     578           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(hostPtr);
     579           3 :     const rtError_t rtErr = rtFreeHostWithDevSync(hostPtr);
     580           3 :     if (rtErr != RT_ERROR_NONE) {
     581           1 :         ACL_LOG_CALL_ERROR("free host memory with device synchronize failed, runtime result = %d", rtErr);
     582           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     583             :     }
     584           2 :     ACL_ADD_RELEASE_SUCCESS_COUNT(acl::ACL_STATISTICS_MALLOC_FREE_HOST);
     585           2 :     return ACL_SUCCESS;
     586             : }
     587             : 
     588          10 : aclError aclrtMemcpyImpl(void *dst,
     589             :                          size_t destMax,
     590             :                          const void *src,
     591             :                          size_t count,
     592             :                          aclrtMemcpyKind kind)
     593             : {
     594          20 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemcpy);
     595          10 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(dst);
     596           9 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(src);
     597             : 
     598           8 :     rtMemcpyKind_t rtKind = RT_MEMCPY_RESERVED;
     599           8 :     const aclError ret = MemcpyKindTranslate(kind, rtKind);
     600           8 :     if (ret != ACL_SUCCESS) {
     601           1 :         ACL_LOG_INNER_ERROR("invalid kind of memcpy, kind = %d", static_cast<int32_t>(kind));
     602           1 :         return ret;
     603             :     }
     604             : 
     605           7 :     const rtError_t rtErr = rtMemcpy(dst, destMax, src, count, rtKind);
     606           7 :     if (rtErr != RT_ERROR_NONE) {
     607           1 :         ACL_LOG_CALL_ERROR("synchronized memcpy failed, kind = %d, runtime result = %d",
     608             :             static_cast<int32_t>(kind), static_cast<int32_t>(rtErr));
     609           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     610             :     }
     611           6 :     return ACL_SUCCESS;
     612             : }
     613             : 
     614           3 : aclError aclrtMemsetImpl(void *devPtr, size_t maxCount, int32_t value, size_t count)
     615             : {
     616           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemset);
     617           3 :     ACL_LOG_DEBUG("start to execute aclrtMemset, maxSize = %zu, size = %zu, value = %d",
     618             :         maxCount, count, value);
     619           3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(devPtr);
     620             : 
     621           2 :     const rtError_t rtErr = rtMemset(devPtr, maxCount, static_cast<uint32_t>(value), count);
     622           2 :     if (rtErr != RT_ERROR_NONE) {
     623           1 :         ACL_LOG_CALL_ERROR("set memory failed, runtime result = %d", static_cast<int32_t>(rtErr));
     624           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     625             :     }
     626           1 :     return ACL_SUCCESS;
     627             : }
     628             : 
     629          21 : aclError aclrtMemcpyAsyncImpl(void *dst,
     630             :                               size_t destMax,
     631             :                               const void *src,
     632             :                               size_t count,
     633             :                               aclrtMemcpyKind kind,
     634             :                               aclrtStream stream)
     635             : {
     636          42 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemcpyAsync);
     637          21 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(dst);
     638          19 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(src);
     639          17 :     rtMemcpyKind_t rtKindVal = RT_MEMCPY_RESERVED;
     640          17 :     const aclError ret = MemcpyKindTranslate(kind, rtKindVal);
     641          17 :     if (ret != ACL_SUCCESS) {
     642           2 :         ACL_LOG_INNER_ERROR("invalid kind of memcpy, kind = %d", static_cast<int32_t>(kind));
     643           2 :         return ret;
     644             :     }
     645             : 
     646          15 :     ACL_REQUIRES_CALL_RTS_OK(rtMemcpyAsync(dst, destMax, src, count, rtKindVal, static_cast<rtStream_t>(stream)),
     647             :                              rtMemcpyAsync);
     648          13 :     return ACL_SUCCESS;
     649             : }
     650             : 
     651          11 : aclError aclrtMemcpyAsyncWithConditionImpl(void *dst,
     652             :                                            size_t destMax,
     653             :                                            const void *src,
     654             :                                            size_t count,
     655             :                                            aclrtMemcpyKind kind,
     656             :                                            aclrtStream stream)
     657             : {
     658          22 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemcpyAsyncWithCondition);
     659          11 :     ACL_LOG_DEBUG("start to execute aclrtMemcpyAsyncWithCondition, destMaxSize = %zu, srcSize = %zu, kind = %d",
     660             :                   destMax, count, static_cast<int32_t>(kind));
     661          11 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(dst);
     662          10 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(src);
     663           9 :     rtMemcpyKind_t rtKindVal = RT_MEMCPY_RESERVED;
     664           9 :     const aclError ret = MemcpyKindTranslate(kind, rtKindVal);
     665           9 :     if (ret != ACL_SUCCESS) {
     666           1 :         ACL_LOG_INNER_ERROR("invalid kind of memcpy, kind = %d", static_cast<int32_t>(kind));
     667           1 :         return ret;
     668             :     }
     669             : 
     670           8 :     rtMemcpyAttributeValue_t memcpyAttrValue;
     671             :     // bit0 standing for not checking matching between address and kind, bit1 standing for checking page-locked addr
     672           8 :     memcpyAttrValue.checkBitmap = 0x00000002U;
     673           8 :     rtMemcpyAttribute_t memcpyAttr = {
     674             :         .id = RT_MEMCPY_ATTRIBUTE_CHECK,
     675             :         .value = memcpyAttrValue
     676           8 :     };
     677           8 :     rtMemcpyConfig_t memcpyConfig = {
     678             :         .attrs = &memcpyAttr,
     679             :         .numAttrs = 1U
     680           8 :     };
     681             : 
     682           8 :     ACL_REQUIRES_CALL_RTS_OK(rtMemcpyAsyncEx(dst, destMax, src, count, rtKindVal, static_cast<rtStream_t>(stream),
     683             :                              &memcpyConfig), rtMemcpyAsyncEx);
     684           7 :     return ACL_SUCCESS;
     685             : }
     686             : 
     687           6 : aclError aclrtMemsetAsyncImpl(void *devPtr, size_t maxCount, int32_t value, size_t count, aclrtStream stream)
     688             : {
     689          12 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemsetAsync);
     690           6 :     ACL_LOG_DEBUG("start to execute aclrtMemsetAsync, maxCount = %zu, value = %d, count = %zu",
     691             :         maxCount, value, count);
     692           6 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(devPtr);
     693             : 
     694           4 :     ACL_REQUIRES_CALL_RTS_OK(rtMemsetAsync(devPtr, maxCount, static_cast<uint32_t>(value), count, stream),
     695             :                              rtMemsetAsync);
     696           2 :     return ACL_SUCCESS;
     697             : }
     698             : 
     699           8 : aclError aclrtDeviceCanAccessPeerImpl(int32_t *canAccessPeer, int32_t deviceId, int32_t peerDeviceId)
     700             : {
     701          16 :     ACL_PROFILING_REG(acl::AclProfType::AclrtDeviceCanAccessPeer);
     702           8 :     ACL_LOG_INFO("start to execute aclrtDeviceCanAccessPeer");
     703             : 
     704           8 :     if (deviceId == peerDeviceId) {
     705           2 :         ACL_LOG_INNER_ERROR("deviceId shouldn't be equal to peeerDeviceId");
     706           2 :         return ACL_ERROR_INVALID_PARAM;
     707             :     }
     708             : 
     709           6 :     uint32_t peerPhyId = 0U;
     710           6 :     rtError_t rtErr = rtGetDevicePhyIdByIndex(static_cast<uint32_t>(peerDeviceId), &peerPhyId);
     711           6 :     if (rtErr != RT_ERROR_NONE) {
     712           2 :         ACL_LOG_CALL_ERROR("call rtGetDevicePhyIdByIndex failed, deviceId = %d, peerDeviceId = %d, "
     713             :             "runtime result = %d", deviceId, peerDeviceId, static_cast<int32_t>(rtErr));
     714           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     715             :     }
     716             : 
     717           4 :     rtErr = rtDeviceCanAccessPeer(canAccessPeer, static_cast<uint32_t>(deviceId), peerPhyId);
     718           4 :     if (rtErr != RT_ERROR_NONE) {
     719           2 :         ACL_LOG_CALL_ERROR("call rtDeviceCanAccessPeer failed, deviceId = %d, peerPhyId = %u, "
     720             :             "runtime result = %d", deviceId, peerPhyId, static_cast<int32_t>(rtErr));
     721           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     722             :     }
     723             : 
     724           2 :     return ACL_SUCCESS;
     725             : }
     726             : 
     727          10 : aclError aclrtDeviceEnablePeerAccessImpl(int32_t peerDeviceId, uint32_t flags)
     728             : {
     729          20 :     ACL_PROFILING_REG(acl::AclProfType::AclrtDeviceEnablePeerAccess);
     730          10 :     ACL_LOG_INFO("start to execute aclrtDeviceEnablePeerAccess");
     731             : 
     732          10 :     if (flags != 0U) {
     733           2 :         ACL_LOG_INNER_ERROR("the flags must be 0, but current is %u", flags);
     734           2 :         return ACL_ERROR_FEATURE_UNSUPPORTED;
     735             :     }
     736             : 
     737           8 :     int32_t deviceId = 0;
     738           8 :     rtError_t rtErr = rtGetDevice(&deviceId);
     739           8 :     if (rtErr != RT_ERROR_NONE) {
     740           2 :         ACL_LOG_CALL_ERROR("call rtGetDevice failed, runtime result = %d", static_cast<int32_t>(rtErr));
     741           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     742             :     }
     743             : 
     744           6 :     if (deviceId == peerDeviceId) {
     745           1 :         ACL_LOG_INNER_ERROR("deviceId shouldn't be equal to peeerDeviceId, deviceId = %d, peerDeviceId = %d",
     746             :             deviceId, peerDeviceId);
     747           1 :         return ACL_ERROR_INVALID_PARAM;
     748             :     }
     749             : 
     750           5 :     uint32_t peerPhyId = 0U;
     751           5 :     rtErr = rtGetDevicePhyIdByIndex(static_cast<uint32_t>(peerDeviceId), &peerPhyId);
     752           5 :     if (rtErr != RT_ERROR_NONE) {
     753           2 :         ACL_LOG_CALL_ERROR("call rtGetDevicePhyIdByIndex failed, peerDeviceId = %d, runtime result = %d",
     754             :             peerDeviceId, static_cast<int32_t>(rtErr));
     755           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     756             :     }
     757             : 
     758           3 :     rtErr = rtEnableP2P(static_cast<uint32_t>(deviceId), peerPhyId, flags);
     759           3 :     if (rtErr != RT_ERROR_NONE) {
     760           2 :         ACL_LOG_CALL_ERROR("call rtEnableP2P failed, deviceId = %d, peerPhyId = %u, runtime result = %d",
     761             :             deviceId, peerPhyId, static_cast<int32_t>(rtErr));
     762           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     763             :     }
     764             : 
     765           1 :     return ACL_SUCCESS;
     766             : }
     767             : 
     768           9 : aclError aclrtDeviceDisablePeerAccessImpl(int32_t peerDeviceId)
     769             : {
     770          18 :     ACL_PROFILING_REG(acl::AclProfType::AclrtDeviceDisablePeerAccess);
     771           9 :     ACL_LOG_INFO("start to execute aclrtDeviceDisablePeerAccess");
     772             : 
     773           9 :     int32_t deviceId = 0;
     774           9 :     rtError_t rtErr = rtGetDevice(&deviceId);
     775           9 :     if (rtErr != RT_ERROR_NONE) {
     776           2 :         ACL_LOG_CALL_ERROR("call rtGetDevice failed, runtime result = %d", static_cast<int32_t>(rtErr));
     777           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     778             :     }
     779             : 
     780           7 :     if (deviceId == peerDeviceId) {
     781           2 :         ACL_LOG_INNER_ERROR("deviceId shouldn't be equal to peeerDeviceId, deviceId = %d, peerDeviceId = %d",
     782             :             deviceId, peerDeviceId);
     783           2 :         return ACL_ERROR_INVALID_PARAM;
     784             :     }
     785             : 
     786           5 :     uint32_t peerPhyId = 0U;
     787           5 :     rtErr = rtGetDevicePhyIdByIndex(static_cast<uint32_t>(peerDeviceId), &peerPhyId);
     788           5 :     if (rtErr != RT_ERROR_NONE) {
     789           2 :         ACL_LOG_CALL_ERROR("call rtGetDevicePhyIdByIndex failed, peerDeviceId = %u, runtime result = %d",
     790             :             peerDeviceId, static_cast<int32_t>(rtErr));
     791           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     792             :     }
     793             : 
     794           3 :     rtErr = rtDisableP2P(static_cast<uint32_t>(deviceId), peerPhyId);
     795           3 :     if (rtErr != RT_ERROR_NONE) {
     796           2 :         ACL_LOG_CALL_ERROR("call rtDisableP2P failed, deviceId = %d, peerPhyId = %u, runtime result = %d",
     797             :             deviceId, peerPhyId, static_cast<int32_t>(rtErr));
     798           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     799             :     }
     800             : 
     801           1 :     return ACL_SUCCESS;
     802             : }
     803             : 
     804           7 : aclError aclrtGetMemInfoImpl(aclrtMemAttr attr, size_t *free, size_t *total)
     805             : {
     806          14 :     ACL_PROFILING_REG(acl::AclProfType::AclrtGetMemInfo);
     807           7 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(free);
     808           7 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(total);
     809           7 :     ACL_LOG_DEBUG("start to execute aclrtGetMemInfo, memory attribute = %d", static_cast<int32_t>(attr));
     810             : 
     811           7 :     const rtError_t rtErr = rtMemGetInfoEx(static_cast<rtMemInfoType_t>(attr), free, total);
     812           7 :     if (rtErr != RT_ERROR_NONE) {
     813           2 :         ACL_LOG_CALL_ERROR("get memory information failed, runtime result = %d", static_cast<int32_t>(rtErr));
     814           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     815             :     }
     816             : 
     817           5 :     ACL_LOG_DEBUG("successfully execute aclrtGetMemInfo, memory attribute = %d, free memory = %zu bytes, "
     818             :         "total memory = %zu bytes", static_cast<int32_t>(attr), *free, *total);
     819           5 :     return ACL_SUCCESS;
     820             : }
     821             : 
     822           2 : aclError aclrtGetMemUsageInfoImpl(int32_t deviceId, aclrtMemUsageInfo *memUsageInfo, size_t inputNum, size_t *outputNum)
     823             : {
     824           4 :     ACL_PROFILING_REG(acl::AclProfType::AclrtGetMemUsageInfo);
     825           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(memUsageInfo);
     826           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(outputNum);
     827           2 :     ACL_LOG_DEBUG("start to execute aclrtGetMemUsageInfo, deviceId = %d, inputNum = %zu", static_cast<int32_t>(deviceId), inputNum);
     828             : 
     829           2 :     const rtError_t rtErr = rtGetMemUsageInfo(static_cast<uint32_t>(deviceId), reinterpret_cast<rtMemUsageInfo_t*>(memUsageInfo), inputNum, outputNum);
     830           2 :     if (rtErr != RT_ERROR_NONE) {
     831           1 :         ACL_LOG_CALL_ERROR("get memory usage information failed, runtime result = %d", static_cast<int32_t>(rtErr));
     832           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     833             :     }
     834             : 
     835           1 :     ACL_LOG_DEBUG("successfully execute aclrtGetMemUsageInfo, deviceId = %d, inputNum = %zu", deviceId, inputNum);
     836           1 :     return ACL_SUCCESS;
     837             : }
     838             : 
     839           7 : aclError aclrtMemcpy2dImpl(void *dst,
     840             :                            size_t dpitch,
     841             :                            const void *src,
     842             :                            size_t spitch,
     843             :                            size_t width,
     844             :                            size_t height,
     845             :                            aclrtMemcpyKind kind)
     846             : {
     847          14 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemcpy2d);
     848           7 :     ACL_LOG_DEBUG("start to execute aclrtMemcpy2d, dpitch = %zu, spitch = %zu, width = %zu, height = %zu, kind = %d",
     849             :         dpitch, spitch, width, height, static_cast<int32_t>(kind));
     850             : 
     851           7 :     rtMemcpyKind_t rtKind = RT_MEMCPY_RESERVED;
     852           7 :     const aclError ret = CheckMemcpy2dParam(dst, dpitch, src, spitch, width, height, kind, rtKind);
     853           7 :     if (ret != ACL_SUCCESS) {
     854           4 :         return ret;
     855             :     }
     856             : 
     857           3 :     const rtError_t rtErr = rtMemcpy2d(dst, dpitch, src, spitch, width, height, rtKind);
     858           3 :     if (rtErr != RT_ERROR_NONE) {
     859           1 :         ACL_LOG_CALL_ERROR("[Synchronized][Memcpy]synchronized memcpy failed, kind = %d, runtime result = %d",
     860             :             static_cast<int32_t>(kind), static_cast<int32_t>(rtErr));
     861           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     862             :     }
     863             : 
     864           2 :     ACL_LOG_DEBUG("Successfuly execute aclrtMemcpy2d, dpitch = %zu, spitch = %zu, width = %zu, height = %zu, "
     865             :         "kind = %d", dpitch, spitch, width, height, static_cast<int32_t>(kind));
     866           2 :     return ACL_SUCCESS;
     867             : }
     868             : 
     869           8 : aclError aclrtMemcpy2dAsyncImpl(void *dst,
     870             :                                 size_t dpitch,
     871             :                                 const void *src,
     872             :                                 size_t spitch,
     873             :                                 size_t width,
     874             :                                 size_t height,
     875             :                                 aclrtMemcpyKind kind,
     876             :                                 aclrtStream stream)
     877             : {
     878          16 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemcpy2dAsync);
     879           8 :     ACL_LOG_DEBUG("start to execute aclrtMemcpy2dAsync, dpitch = %zu, spitch = %zu, width = %zu, height = %zu,"
     880             :         " kind = %d", dpitch, spitch, width, height, static_cast<int32_t>(kind));
     881             : 
     882           8 :     rtMemcpyKind_t rtKindVal = RT_MEMCPY_RESERVED;
     883           8 :     const aclError ret = CheckMemcpy2dParam(dst, dpitch, src, spitch, width, height, kind, rtKindVal);
     884           8 :     if (ret != ACL_SUCCESS) {
     885           4 :         return ret;
     886             :     }
     887             : 
     888           4 :     ACL_REQUIRES_CALL_RTS_OK(rtMemcpy2dAsync(dst, dpitch, src, spitch, width, height, rtKindVal, stream),
     889             :                              rtMemcpy2dAsync);
     890             : 
     891           3 :     ACL_LOG_DEBUG("Successfuly execute aclrtMemcpy2dAsync, dpitch = %zu, spitch = %zu, width = %zu, height = %zu, "
     892             :         "kind = %d", dpitch, spitch, width, height, static_cast<int32_t>(kind));
     893           3 :     return ACL_SUCCESS;
     894             : }
     895             : 
     896          10 : aclError aclrtReserveMemAddressImpl(void **virPtr,
     897             :                                     size_t size,
     898             :                                     size_t alignment,
     899             :                                     void *expectPtr,
     900             :                                     uint64_t flags)
     901             : {
     902          20 :     ACL_PROFILING_REG(acl::AclProfType::AclrtReserveMemAddress);
     903          10 :     ACL_ADD_APPLY_TOTAL_COUNT(acl::ACL_STATISTICS_RESERVE_RELEASE_MEMORY_ADDRESS);
     904          10 :     ACL_LOG_DEBUG("start to execute aclrtReserveMemAddress, size = %zu", size);
     905          10 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(virPtr);
     906             : 
     907          10 :     if (size == 0UL) {
     908           1 :         ACL_LOG_ERROR("reserve size must be greater than zero");
     909           1 :         return ACL_ERROR_INVALID_PARAM;
     910             :     }
     911           9 :     if ((flags != 1ULL) && (flags != 0ULL)) {
     912           1 :         ACL_LOG_ERROR("flags of page type must be 0 or 1");
     913           1 :         return ACL_ERROR_INVALID_PARAM;
     914             :     }
     915             : 
     916           8 :     const rtError_t rtErr = rtReserveMemAddress(virPtr, size, alignment, expectPtr, flags);
     917           8 :     if (rtErr != RT_ERROR_NONE) {
     918           2 :         if (rtErr == ACL_ERROR_RT_FEATURE_NOT_SUPPORT) {
     919           1 :             ACL_LOG_WARN("reserve memory address unsupport, runtime result = %d", static_cast<int32_t>(rtErr));
     920             :         } else {
     921           1 :             ACL_LOG_CALL_ERROR("reserve memory address failed, runtime result = %d", static_cast<int32_t>(rtErr));
     922             :         }   
     923           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     924             :     }
     925           6 :     ACL_ADD_APPLY_SUCCESS_COUNT(acl::ACL_STATISTICS_RESERVE_RELEASE_MEMORY_ADDRESS);
     926           6 :     return ACL_SUCCESS;
     927             : }
     928             : 
     929           8 : aclError aclrtReleaseMemAddressImpl(void *virPtr)
     930             : {
     931          16 :     ACL_PROFILING_REG(acl::AclProfType::AclrtReleaseMemAddress);
     932           8 :     ACL_ADD_RELEASE_TOTAL_COUNT(acl::ACL_STATISTICS_RESERVE_RELEASE_MEMORY_ADDRESS);
     933           8 :     ACL_LOG_DEBUG("start to execute aclrtReleaseMemAddress");
     934           8 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(virPtr);
     935             : 
     936           8 :     const rtError_t rtErr = rtReleaseMemAddress(virPtr);
     937           8 :     if (rtErr != RT_ERROR_NONE) {
     938           2 :         ACL_LOG_CALL_ERROR("release memory address failed, runtime result = %d", static_cast<int32_t>(rtErr));
     939           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     940             :     }
     941           6 :     ACL_ADD_RELEASE_SUCCESS_COUNT(acl::ACL_STATISTICS_RESERVE_RELEASE_MEMORY_ADDRESS);
     942           6 :     return ACL_SUCCESS;
     943             : }
     944             : 
     945          34 : aclError aclrtMallocPhysicalImpl(aclrtDrvMemHandle *handle,
     946             :                                  size_t size,
     947             :                                  const aclrtPhysicalMemProp *prop,
     948             :                                  uint64_t flags)
     949             : {
     950          68 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMallocPhysical);
     951          34 :     ACL_ADD_APPLY_TOTAL_COUNT(acl::ACL_STATISTICS_MALLOC_FREE_PHYSICAL_MEMORY);
     952          34 :     ACL_LOG_DEBUG("start to execute aclrtMallocPhysical, size = %zu", size);
     953          34 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(handle);
     954          34 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(prop);
     955          34 :     ACL_CHECK_WITH_MESSAGE_AND_RETURN(size != 0UL, ACL_ERROR_INVALID_PARAM,
     956             :                                       "malloc size must be greater than zero");
     957          33 :     ACL_CHECK_WITH_MESSAGE_AND_RETURN(flags == 0UL, ACL_ERROR_INVALID_PARAM,
     958             :                                       "flags must be 0");
     959          32 :     ACL_CHECK_WITH_MESSAGE_AND_RETURN(prop->handleType == ACL_MEM_HANDLE_TYPE_NONE,
     960             :                                       ACL_ERROR_INVALID_PARAM, "handleType must be ACL_MEM_HANDLE_TYPE_NONE");
     961          31 :     ACL_CHECK_WITH_MESSAGE_AND_RETURN(prop->allocationType == ACL_MEM_ALLOCATION_TYPE_PINNED,
     962             :                                       ACL_ERROR_INVALID_PARAM,
     963             :                                       "allocationType must be ACL_MEM_ALLOCATION_TYPE_PINNED");
     964          29 :     ACL_CHECK_WITH_MESSAGE_AND_RETURN(prop->location.type != ACL_MEM_LOCATION_TYPE_UNREGISTERED,
     965             :                                       ACL_ERROR_INVALID_PARAM,
     966             :                                       "locationType does not support ACL_MEM_LOCATION_TYPE_UNREGISTERED");
     967             : 
     968          29 :     rtDrvMemProp_t rtProp = {};
     969          29 :     rtProp.side = prop->location.type;
     970          29 :     rtProp.devid = prop->location.id;
     971          29 :     rtProp.module_id = acl::APP_MODE_ID_U16;
     972          29 :     rtProp.reserve = prop->reserve;
     973             :     // host alloc
     974          29 :     bool isHostAlloc = (prop->location.type == ACL_MEM_LOCATION_TYPE_HOST) || (prop->location.type == ACL_MEM_LOCATION_TYPE_HOST_NUMA);
     975             :     // device alloc
     976          29 :     bool isDeviceAlloc = (prop->location.type == ACL_MEM_LOCATION_TYPE_DEVICE);
     977          29 :     if (isDeviceAlloc && ((prop->memAttr == ACL_DDR_MEM_HUGE) || (prop->memAttr == ACL_DDR_MEM_NORMAL) || (prop->memAttr == ACL_DDR_MEM_P2P_HUGE) 
     978          18 :         || (prop->memAttr == ACL_DDR_MEM_P2P_NORMAL))) {
     979           1 :         ACL_LOG_ERROR("memAttr [%d] only support ACL_MEM_LOCATION_TYPE_HOST/ACL_MEM_LOCATION_TYPE_HOST_NUMA.", static_cast<int32_t>(prop->memAttr));
     980           1 :         return ACL_ERROR_INVALID_PARAM;
     981             :     }
     982          28 :     auto it = memAttrHandlers.find(static_cast<int32_t>(prop->memAttr));
     983          28 :     if (it != memAttrHandlers.end()) {
     984          26 :         it->second(rtProp, isHostAlloc, isDeviceAlloc);
     985             :     } else {
     986           2 :         ACL_LOG_ERROR("memAttr [%d] not support. "
     987             :                       "For details, please refer to the manual.",
     988             :                       static_cast<int32_t>(prop->memAttr));
     989           2 :         return ACL_ERROR_INVALID_PARAM;
     990             :     }
     991             : 
     992          26 :     const rtError_t rtErr = rtMallocPhysical(reinterpret_cast<rtDrvMemHandle*>(handle), size, &rtProp, flags);
     993          26 :     if (rtErr != RT_ERROR_NONE) {
     994           1 :         ACL_LOG_CALL_ERROR("malloc physical memory failed, runtime result = %d", static_cast<int32_t>(rtErr));
     995           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     996             :     }
     997          25 :     ACL_ADD_APPLY_SUCCESS_COUNT(acl::ACL_STATISTICS_MALLOC_FREE_PHYSICAL_MEMORY);
     998          25 :     return ACL_SUCCESS;
     999             : }
    1000             : 
    1001           6 : aclError aclrtFreePhysicalImpl(aclrtDrvMemHandle handle)
    1002             : {
    1003          12 :     ACL_PROFILING_REG(acl::AclProfType::AclrtFreePhysical);
    1004           6 :     ACL_ADD_RELEASE_TOTAL_COUNT(acl::ACL_STATISTICS_MALLOC_FREE_PHYSICAL_MEMORY);
    1005           6 :     ACL_LOG_DEBUG("start to execute aclrtFreePhysical");
    1006           6 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(handle);
    1007             : 
    1008           6 :     const rtError_t rtErr = rtFreePhysical(reinterpret_cast<rtDrvMemHandle>(handle));
    1009           6 :     if (rtErr != RT_ERROR_NONE) {
    1010           1 :         ACL_LOG_CALL_ERROR("free physical memory failed, runtime result = %d", static_cast<int32_t>(rtErr));
    1011           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1012             :     }
    1013           5 :     ACL_ADD_RELEASE_SUCCESS_COUNT(acl::ACL_STATISTICS_MALLOC_FREE_PHYSICAL_MEMORY);
    1014           5 :     return ACL_SUCCESS;
    1015             : }
    1016             : 
    1017           6 : aclError aclrtMapMemImpl(void *virPtr,
    1018             :                          size_t size,
    1019             :                          size_t offset,
    1020             :                          aclrtDrvMemHandle handle,
    1021             :                          uint64_t flags)
    1022             : {
    1023          12 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMapMem);
    1024           6 :     ACL_ADD_APPLY_TOTAL_COUNT(acl::ACL_STATISTICS_MAP_UNMAP_MEMORY);
    1025           6 :     ACL_LOG_DEBUG("start to execute aclrtMapMem, size = %zu, offset = %zu", size, offset);
    1026           6 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(virPtr);
    1027           6 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(handle);
    1028             : 
    1029           6 :     if (size == 0UL) {
    1030           1 :         ACL_LOG_ERROR("map size must be greater than zero");
    1031           1 :         return ACL_ERROR_INVALID_PARAM;
    1032             :     }
    1033           5 :     if (flags != 0UL) {
    1034           1 :         ACL_LOG_ERROR("flags must be 0");
    1035           1 :         return ACL_ERROR_INVALID_PARAM;
    1036             :     }
    1037             : 
    1038           4 :     const rtError_t rtErr = rtMapMem(virPtr, size, offset, reinterpret_cast<rtDrvMemHandle>(handle), flags);
    1039           4 :     if (rtErr != RT_ERROR_NONE) {
    1040           1 :         ACL_LOG_CALL_ERROR("map memory failed, runtime result = %d", static_cast<int32_t>(rtErr));
    1041           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1042             :     }
    1043           3 :     ACL_ADD_APPLY_SUCCESS_COUNT(acl::ACL_STATISTICS_MAP_UNMAP_MEMORY);
    1044           3 :     return ACL_SUCCESS;
    1045             : }
    1046             : 
    1047           4 : aclError aclrtUnmapMemImpl(void *virPtr)
    1048             : {
    1049           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtUnmapMem);
    1050           4 :     ACL_ADD_RELEASE_TOTAL_COUNT(acl::ACL_STATISTICS_MAP_UNMAP_MEMORY);
    1051           4 :     ACL_LOG_DEBUG("start to execute aclrtUnmapMem");
    1052           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(virPtr);
    1053             : 
    1054           4 :     const rtError_t rtErr = rtUnmapMem(virPtr);
    1055           4 :     if (rtErr != RT_ERROR_NONE) {
    1056           1 :         ACL_LOG_CALL_ERROR("unmap memory failed, runtime result = %d", static_cast<int32_t>(rtErr));
    1057           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1058             :     }
    1059           3 :     ACL_ADD_RELEASE_SUCCESS_COUNT(acl::ACL_STATISTICS_MAP_UNMAP_MEMORY);
    1060           3 :     return ACL_SUCCESS;
    1061             : }
    1062             : 
    1063           2 : aclError aclrtMemGetAccessImpl(void *virPtr, aclrtMemLocation *location, uint64_t *flag) 
    1064             : {
    1065           4 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemGetAccess);
    1066           2 :     ACL_LOG_DEBUG("start to execute aclrtMemGetAccess");
    1067           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(virPtr);
    1068           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(location);
    1069           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(flag);
    1070             : 
    1071           2 :     const rtError_t rtErr = rtMemGetAccess(virPtr, reinterpret_cast<rtMemLocation*>(location), flag);
    1072           2 :     if (rtErr != ACL_RT_SUCCESS) {
    1073           1 :         ACL_LOG_CALL_ERROR("get access failed, runtime result = %d", static_cast<int32_t>(rtErr));
    1074           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1075             :     }
    1076           1 :     return ACL_SUCCESS;
    1077             : }
    1078             : 
    1079           4 : aclError aclrtMemExportToShareableHandleImpl(aclrtDrvMemHandle handle, aclrtMemHandleType handleType,
    1080             :                                              uint64_t flags, uint64_t *shareableHandle)
    1081             : {
    1082           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemExportToShareableHandle);
    1083           4 :     ACL_LOG_DEBUG("start to execute aclrtMemExportToShareableHandle");
    1084           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(handle);
    1085           3 :     ACL_REQUIRES_TRUE(handleType == ACL_MEM_HANDLE_TYPE_NONE, ACL_ERROR_INVALID_PARAM,
    1086             :                     "handleType in MemExportToShareableHandle must be ACL_MEM_HANDLE_TYPE_NONE !");
    1087           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(shareableHandle);
    1088             : 
    1089           2 :     const rtError_t rtErr = rtsMemExportToShareableHandle(reinterpret_cast<rtDrvMemHandle>(handle),
    1090             :                                                         RT_MEM_HANDLE_TYPE_NONE, flags, shareableHandle);
    1091           2 :     if (rtErr != RT_ERROR_NONE) {
    1092           1 :         ACL_LOG_CALL_ERROR("export shareable handle failed, runtime result = %d", static_cast<int32_t>(rtErr));
    1093           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1094             :     }
    1095           1 :     return ACL_SUCCESS;
    1096             : }
    1097             : 
    1098           3 : aclError aclrtMemExportToShareableHandleV2Impl(aclrtDrvMemHandle handle, uint64_t flags, 
    1099             :     aclrtMemSharedHandleType shareType, void *shareableHandle) 
    1100             : {
    1101           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemExportToShareableHandleV2);
    1102           3 :     ACL_LOG_DEBUG("start to execute aclrtMemExportToShareableHandleV2");
    1103           3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(handle);
    1104           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(shareableHandle);
    1105             : 
    1106           2 :     const rtError_t rtErr = rtMemExportToShareableHandleV2(reinterpret_cast<rtDrvMemHandle>(handle),
    1107             :         static_cast<rtMemSharedHandleType>(shareType), flags, shareableHandle);
    1108           2 :     if (rtErr != ACL_RT_SUCCESS) {
    1109           1 :         ACL_LOG_CALL_ERROR("export shareable handle failed, runtime result = %d", static_cast<int32_t>(rtErr));
    1110           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1111             :     }
    1112           1 :     return ACL_SUCCESS;
    1113             : }  
    1114             : 
    1115           3 : aclError aclrtMemImportFromShareableHandleImpl(uint64_t shareableHandle,
    1116             :                                                int32_t deviceId, aclrtDrvMemHandle *handle)
    1117             : {
    1118           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemImportFromShareableHandle);
    1119           3 :     ACL_LOG_DEBUG("start to execute aclrtMemImportFromShareableHandle");
    1120           3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(handle);
    1121             : 
    1122           2 :     const rtError_t rtErr = rtMemImportFromShareableHandle(shareableHandle, deviceId,
    1123             :                                                             reinterpret_cast<rtDrvMemHandle*>(handle));
    1124           2 :     if (rtErr != RT_ERROR_NONE) {
    1125           1 :         ACL_LOG_CALL_ERROR("import from shareable handle failed, shareableHandle[%lu], deviceId[%d], runtime result = %d",
    1126             :                         shareableHandle, deviceId, static_cast<int32_t>(rtErr));
    1127           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1128             :     }
    1129           1 :     return ACL_SUCCESS;
    1130             : }
    1131             : 
    1132           4 : aclError aclrtMemImportFromShareableHandleV2Impl(void *shareableHandle, aclrtMemSharedHandleType shareType,
    1133             :     uint64_t flags, aclrtDrvMemHandle *handle)
    1134             : {
    1135           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemImportFromShareableHandleV2);
    1136           4 :     ACL_LOG_DEBUG("start to execute aclrtMemImportFromShareableHandleV2");
    1137           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(shareableHandle);
    1138           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(handle);
    1139           3 :     ACL_REQUIRES_TRUE(flags == 0UL, ACL_ERROR_INVALID_PARAM,
    1140             :         "flags in aclrtMemImportFromShareableHandleV2 must be 0 !");
    1141             : 
    1142           2 :     int32_t deviceId = 0;
    1143           2 :     const rtError_t rtRet = rtsGetDevice(&deviceId);
    1144           2 :     if (rtRet != ACL_RT_SUCCESS) {
    1145           0 :         return rtRet;
    1146             :     }
    1147             : 
    1148           2 :     const rtError_t rtErr = rtMemImportFromShareableHandleV2(shareableHandle, 
    1149             :         static_cast<rtMemSharedHandleType>(shareType), flags, deviceId, reinterpret_cast<rtDrvMemHandle*>(handle));
    1150           2 :     if (rtErr != ACL_RT_SUCCESS) {
    1151           1 :         ACL_LOG_CALL_ERROR("import from shareable handle failed, shareableHandle[%lu], deviceId[%d], runtime result = %d",
    1152             :             *(static_cast<uint64_t*>(shareableHandle)), deviceId, static_cast<int32_t>(rtErr));
    1153           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1154             :     }
    1155           1 :     return ACL_SUCCESS;
    1156             : }
    1157             : 
    1158           4 : aclError aclrtMemSetPidToShareableHandleImpl(uint64_t shareableHandle, int32_t *pid, size_t pidNum)
    1159             : {
    1160           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemSetPidToShareableHandle);
    1161           4 :     ACL_LOG_DEBUG("start to execute aclrtMemSetPidToShareableHandle");
    1162           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(pid);
    1163           3 :     ACL_REQUIRES_TRUE(pidNum > 0UL, ACL_ERROR_INVALID_PARAM,
    1164             :                         "pidNum in SetPidToShareableHandle must be large than 0 !");
    1165             : 
    1166           2 :     const rtError_t rtErr = rtMemSetPidToShareableHandle(shareableHandle, pid, static_cast<uint32_t>(pidNum));
    1167           2 :     if (rtErr != RT_ERROR_NONE) {
    1168           1 :         ACL_LOG_CALL_ERROR("set pid to shareable handle failed, shareableHandle[%lu], pidNum[%zu], runtime result = %d",
    1169             :                         shareableHandle, pidNum, static_cast<int32_t>(rtErr));
    1170           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1171             :     }
    1172           1 :     return ACL_SUCCESS;
    1173             : }
    1174             : 
    1175           4 : aclError aclrtMemSetPidToShareableHandleV2Impl(void *shareableHandle, aclrtMemSharedHandleType shareType,
    1176             :     int32_t *pid, size_t pidNum)
    1177             : {
    1178           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemSetPidToShareableHandleV2);
    1179           4 :     ACL_LOG_DEBUG("start to execute AclrtMemSetPidToShareableHandleV2");
    1180           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(shareableHandle);
    1181           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(pid);
    1182           3 :     ACL_REQUIRES_TRUE(pidNum > 0UL, ACL_ERROR_INVALID_PARAM,
    1183             :         "pidNum in SetPidToShareableHandle must be large than 0 !");
    1184             : 
    1185           2 :     const rtError_t rtErr = rtMemSetPidToShareableHandleV2(shareableHandle,
    1186             :         static_cast<rtMemSharedHandleType>(shareType), pid, static_cast<uint32_t>(pidNum));
    1187           2 :     if (rtErr != ACL_RT_SUCCESS) {
    1188           1 :         ACL_LOG_CALL_ERROR("set pid to shareable handle failed, shareableHandle[%lu], pidNum[%zu], runtime result = %d",
    1189             :             *(static_cast<uint64_t*>(shareableHandle)), pidNum, static_cast<int32_t>(rtErr));
    1190           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1191             :     }
    1192           1 :     return ACL_SUCCESS;
    1193             : }
    1194             : 
    1195           7 : aclError aclrtMemGetAllocationGranularityImpl(aclrtPhysicalMemProp *prop, aclrtMemGranularityOptions option,
    1196             :                                               size_t *granularity)
    1197             : {
    1198          14 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemGetAllocationGranularity);
    1199           7 :     ACL_LOG_DEBUG("start to execute aclrtMemGetAllocationGranularity");
    1200           7 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(prop);
    1201           6 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(granularity);
    1202             : 
    1203           5 :     rtDrvMemProp_t rtProp1 = {};
    1204           5 :     rtProp1.side = prop->location.type;
    1205           5 :     rtProp1.devid = prop->location.id;
    1206           5 :     rtProp1.module_id = acl::APP_MODE_ID_U16;
    1207           5 :     rtProp1.reserve = prop->reserve;
    1208             :     // host alloc
    1209           5 :     bool isHostAlloc = (prop->location.type == ACL_MEM_LOCATION_TYPE_HOST) || (prop->location.type == ACL_MEM_LOCATION_TYPE_HOST_NUMA);
    1210             :     // device alloc
    1211           5 :     bool isDeviceAlloc = (prop->location.type == ACL_MEM_LOCATION_TYPE_DEVICE);
    1212           5 :     if (isDeviceAlloc && ((prop->memAttr == ACL_DDR_MEM_HUGE) || (prop->memAttr == ACL_DDR_MEM_NORMAL) || (prop->memAttr == ACL_DDR_MEM_P2P_HUGE) 
    1213           0 :         || (prop->memAttr == ACL_DDR_MEM_P2P_NORMAL))) {
    1214           0 :         ACL_LOG_ERROR("memAttr [%d] only support ACL_MEM_LOCATION_TYPE_HOST/ACL_MEM_LOCATION_TYPE_HOST_NUMA.", static_cast<int32_t>(prop->memAttr));
    1215           0 :         return ACL_ERROR_INVALID_PARAM;
    1216             :     }
    1217           5 :     auto it = memAttrHandlers.find(static_cast<int32_t>(prop->memAttr));
    1218           5 :     if (it != memAttrHandlers.end()) {
    1219           4 :         it->second(rtProp1, isHostAlloc, isDeviceAlloc);
    1220             :     } else {
    1221           1 :         ACL_LOG_ERROR("memAttr [%d] not support. "
    1222             :                       "For details, please refer to the manual.",
    1223             :                       static_cast<int32_t>(prop->memAttr));
    1224           1 :         return ACL_ERROR_INVALID_PARAM;
    1225             :     }
    1226             : 
    1227           4 :     const rtError_t rtErr = rtMemGetAllocationGranularity(&rtProp1,
    1228             :         static_cast<rtDrvMemGranularityOptions>(option), granularity);
    1229           4 :     if (rtErr != RT_ERROR_NONE) {
    1230           1 :         ACL_LOG_CALL_ERROR("Get Allocation Granularity failed, runtime result = %d", static_cast<int32_t>(rtErr));
    1231           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1232             :     }
    1233           3 :     return ACL_SUCCESS;
    1234             : }
    1235             : 
    1236           3 : aclError aclrtDeviceGetBareTgidImpl(int32_t *pid)
    1237             : {
    1238           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtDeviceGetBareTgid);
    1239           3 :     ACL_LOG_DEBUG("start to execute aclrtDeviceGetBareTgid");
    1240           3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(pid);
    1241             : 
    1242           2 :     const rtError_t rtErr = rtDeviceGetBareTgid(reinterpret_cast<uint32_t *>(pid));
    1243           2 :     if (rtErr != RT_ERROR_NONE) {
    1244           1 :         ACL_LOG_CALL_ERROR("Get Bare Tgid Falied, runtime result = %d", static_cast<int32_t>(rtErr));
    1245           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1246             :     }
    1247           1 :     return ACL_SUCCESS;
    1248             : }
    1249             : 
    1250           4 : aclError aclrtCmoAsyncImpl(void *src, size_t size, aclrtCmoType cmoType, aclrtStream stream)
    1251             : {
    1252           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtCmoAsync);
    1253           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(src);
    1254           3 :     if (size == 0UL) {
    1255           1 :         ACL_LOG_ERROR("size must be greater than zero");
    1256           1 :         return ACL_ERROR_INVALID_PARAM;
    1257             :     }
    1258           2 :     const rtCmoOpCode_t type = static_cast<rtCmoOpCode_t>(static_cast<uint32_t>(cmoType) +
    1259             :         (static_cast<uint32_t>(RT_CMO_PREFETCH) - static_cast<uint32_t>(ACL_RT_CMO_TYPE_PREFETCH)));
    1260           2 :     ACL_REQUIRES_CALL_RTS_OK(rtCmoAsync(src, size, type, stream), rtCmoAsync);
    1261           1 :     return ACL_SUCCESS;
    1262             : }
    1263             : 
    1264           2 : aclError aclrtGetMemcpyDescSizeImpl(aclrtMemcpyKind kind, size_t *descSize)
    1265             : {
    1266           2 :     ACL_LOG_INFO("start to execute aclrtGetMemcpyDescSize");
    1267           2 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(descSize);
    1268           2 :     ACL_CHECK_LESS_UINT(static_cast<uint32_t>(kind), static_cast<uint32_t>(RT_MEMCPY_KIND_MAX));
    1269           2 :     const auto rt_mem_kind = static_cast<rtMemcpyKind>(static_cast<uint32_t>(kind));
    1270           2 :     const auto rtErr = rtsGetMemcpyDescSize(rt_mem_kind, descSize);
    1271           2 :     if (rtErr != RT_ERROR_NONE) {
    1272           1 :        ACL_LOG_CALL_ERROR("Get memcpy desc size Failed, runtime result = %d", rtErr);
    1273           1 :        return ACL_GET_ERRCODE_RTS(rtErr);
    1274             :     }
    1275           1 :     return ACL_SUCCESS;
    1276             : }
    1277             : 
    1278           6 : aclError aclrtSetMemcpyDescImpl(void *desc, aclrtMemcpyKind kind, void *srcAddr, void *dstAddr, size_t count,
    1279             :                                 void *config)
    1280             : {
    1281           6 :     ACL_LOG_INFO("start to execute aclrtSetMemcpyDesc");
    1282           6 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(desc);
    1283           5 :     ACL_CHECK_LESS_UINT(static_cast<uint32_t>(kind), static_cast<uint32_t>(RT_MEMCPY_KIND_MAX));
    1284           5 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(srcAddr);
    1285           4 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(dstAddr);
    1286           3 :     ACL_REQUIRES_POSITIVE_WITH_INPUT_REPORT(count);
    1287           2 :     if (config != nullptr) {
    1288           0 :         ACL_LOG_ERROR("[Check][config]param is reserved and only support currently nullptr."); \
    1289           0 :         return ACL_ERROR_INVALID_PARAM;
    1290             :     }
    1291             : 
    1292           2 :     const auto rt_mem_kind = static_cast<rtMemcpyKind>(static_cast<uint32_t>(kind));
    1293           2 :     const auto rtErr = rtsSetMemcpyDesc(static_cast<rtMemcpyDesc_t>(desc), rt_mem_kind, srcAddr, dstAddr,
    1294             :                                         count, nullptr);
    1295           2 :     if (rtErr != RT_ERROR_NONE) {
    1296           1 :         ACL_LOG_CALL_ERROR("Set memcpy desc Failed, runtime result = %d", rtErr);
    1297           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1298             :     }
    1299           1 :     return ACL_SUCCESS;
    1300             : }
    1301             : 
    1302           4 : aclError aclrtMemcpyAsyncWithDescImpl(void *desc, aclrtMemcpyKind kind, aclrtStream stream)
    1303             : {
    1304           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemcpyAsyncWithDesc);
    1305           4 :     ACL_LOG_INFO("start to execute aclrtMemcpyAsyncWithDesc");
    1306           4 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(desc);
    1307           3 :     ACL_CHECK_LESS_UINT(static_cast<uint32_t>(kind), static_cast<uint32_t>(RT_MEMCPY_KIND_MAX));
    1308           3 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(stream);
    1309             : 
    1310           2 :     const auto rt_mem_kind = static_cast<rtMemcpyKind>(static_cast<int32_t>(kind));
    1311           2 :     const auto rtErr = rtsMemcpyAsyncWithDesc(static_cast<rtMemcpyDesc_t>(desc), rt_mem_kind, nullptr, stream);
    1312           2 :     if (rtErr != RT_ERROR_NONE) {
    1313           1 :         ACL_LOG_CALL_ERROR("Async memcpy with desc Failed, runtime result = %d", rtErr);
    1314           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1315             :     }
    1316           1 :     return ACL_SUCCESS;
    1317             : }
    1318             : 
    1319           3 : aclError aclrtMemcpyAsyncWithOffsetImpl(void **dst, size_t destMax, size_t dstDataOffset, const void **src,
    1320             :     size_t count, size_t srcDataOffset, aclrtMemcpyKind kind, aclrtStream stream)
    1321             : {
    1322           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemcpyAsyncWithOffset);
    1323           3 :     ACL_LOG_INFO("start to execute aclrtMemcpyAsyncWithOffset");
    1324           3 :     const auto memKind = static_cast<rtMemcpyKind>(static_cast<int32_t>(kind));
    1325           3 :     const auto rtErr = rtMemcpyAsyncWithOffset(dst, destMax, dstDataOffset, src, count, srcDataOffset, memKind, stream);
    1326           3 :     if (rtErr != RT_ERROR_NONE) {
    1327           2 :         if (rtErr == ACL_ERROR_RT_FEATURE_NOT_SUPPORT) {
    1328           1 :             ACL_LOG_WARN("rtMemcpyAsyncWithOffset unsupport, runtime result = %d", static_cast<int32_t>(rtErr));
    1329             :         } else {
    1330           1 :             ACL_LOG_CALL_ERROR("call rtMemcpyAsyncWithOffset Failed, runtime result = %d", rtErr);
    1331             :         }
    1332           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1333             :     }
    1334           1 :     ACL_LOG_INFO("successfully execute aclrtMemcpyAsyncWithOffset");
    1335           1 :     return ACL_SUCCESS;
    1336             : }
    1337             : 
    1338           3 : aclError aclrtValueWriteImpl(void* devAddr, uint64_t value, uint32_t flag, aclrtStream stream)
    1339             : {
    1340           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtValueWrite);
    1341           3 :     ACL_LOG_INFO("start to execute aclrtValueWrite");
    1342           3 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(devAddr);
    1343             : 
    1344           2 :     const auto rtErr = rtsValueWrite(devAddr, value, flag, static_cast<rtStream_t>(stream));
    1345           2 :     if (rtErr != RT_ERROR_NONE) {
    1346           1 :         ACL_LOG_CALL_ERROR("call rtsValueWrite Failed, runtime result = %d", rtErr);
    1347           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1348             :     }
    1349           1 :     return ACL_SUCCESS;
    1350             : }
    1351             : 
    1352           3 : aclError aclrtValueWaitImpl(void* devAddr, uint64_t value, uint32_t flag, aclrtStream stream)
    1353             : {
    1354           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtValueWait);
    1355           3 :     ACL_LOG_INFO("start to execute aclrtValueWait");
    1356           3 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(devAddr);
    1357             : 
    1358           2 :     const auto rtErr = rtsValueWait(devAddr, value, flag, static_cast<rtStream_t>(stream));
    1359           2 :     if (rtErr != RT_ERROR_NONE) {
    1360           1 :         ACL_LOG_CALL_ERROR("call rtsValueWait Failed, runtime result = %d", rtErr);
    1361           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1362             :     }
    1363           1 :     return ACL_SUCCESS;
    1364             : }
    1365             : 
    1366          14 : aclError aclrtReduceAsyncImpl(void *dst, const void *src, uint64_t count, aclrtReduceKind kind,
    1367             :     aclDataType type, aclrtStream stream, void *reserve)
    1368             : {
    1369          28 :     ACL_PROFILING_REG(acl::AclProfType::AclrtReduceAsync);
    1370          14 :     ACL_LOG_DEBUG("start to execute aclrtReduceAsync, count = [%lu], kind = [%u], type = [%u]", count,
    1371             :         static_cast<uint32_t>(kind), static_cast<uint32_t>(type));
    1372          14 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(dst);
    1373          13 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(src);
    1374          12 :     if (reserve != nullptr) {
    1375           1 :         ACL_LOG_ERROR("[Check][reserve]param must be null.");
    1376           1 :         acl::AclErrorLogManager::ReportInputError("EH0002", {"param"}, {"reserve"});
    1377           1 :         return ACL_ERROR_INVALID_PARAM;
    1378             :     }
    1379             : 
    1380             :     rtDataType dataType;
    1381          11 :     if (kMapDataType.count(type) > 0) {
    1382          11 :         dataType = kMapDataType.at(type);
    1383             :     } else {
    1384           0 :         ACL_LOG_ERROR("[Check][param]param type [%d] is invalid.", static_cast<int32_t>(type));
    1385           0 :         acl::AclErrorLogManager::ReportInputError(acl::INVALID_PARAM_MSG, {"param"}, {"type"});
    1386           0 :         return ACL_ERROR_INVALID_PARAM;
    1387             :     }
    1388             : 
    1389          11 :     rtReduceInfo_t reduceInfo;
    1390          11 :     reduceInfo.dst = dst;
    1391          11 :     reduceInfo.src = const_cast<void*>(src);
    1392          11 :     reduceInfo.count = static_cast<size_t>(count);
    1393          11 :     reduceInfo.kind = static_cast<rtReduceKind>(kind);
    1394          11 :     reduceInfo.type = dataType;
    1395          11 :     const rtError_t rtErr = rtsLaunchReduceAsyncTask(&reduceInfo, static_cast<rtStream_t>(stream), reserve);
    1396          11 :     if (rtErr != RT_ERROR_NONE) {
    1397           1 :         ACL_LOG_CALL_ERROR("call rtsLaunchReduceAsyncTask failed, runtime result = %d", rtErr);
    1398           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1399             :     }
    1400          10 :     return ACL_SUCCESS;
    1401             : }
    1402             : 
    1403           1 : aclError aclrtGetBufFromChainImpl(aclrtMbuf headBuf, uint32_t index, aclrtMbuf *buf)
    1404             : {
    1405           2 :     ACL_PROFILING_REG(acl::AclProfType::AclrtGetBufFromChain);
    1406           1 :     ACL_REQUIRES_NOT_NULL(headBuf);
    1407           1 :     ACL_REQUIRES_NOT_NULL(buf);
    1408           1 :     ACL_REQUIRES_CALL_RTS_OK(rtMbufChainGetMbuf(headBuf, index, buf), rtMbufChainGetMbuf);
    1409           1 :     return ACL_SUCCESS;
    1410             : }
    1411             : 
    1412           1 : aclError aclrtGetBufChainNumImpl(aclrtMbuf headBuf, uint32_t *num)
    1413             : {
    1414           2 :     ACL_PROFILING_REG(acl::AclProfType::AclrtGetBufChainNum);
    1415           1 :     ACL_REQUIRES_NOT_NULL(headBuf);
    1416           1 :     ACL_REQUIRES_NOT_NULL(num);
    1417           1 :     ACL_REQUIRES_CALL_RTS_OK(rtMbufChainGetMbufNum(headBuf, num), rtMbufChainGetMbufNum);
    1418           1 :     return ACL_SUCCESS;
    1419             : }
    1420             : 
    1421           1 : aclError aclrtAppendBufChainImpl(aclrtMbuf headBuf, aclrtMbuf buf)
    1422             : {
    1423           2 :     ACL_PROFILING_REG(acl::AclProfType::AclrtAppendBufChain);
    1424           1 :     ACL_REQUIRES_NOT_NULL(headBuf);
    1425           1 :     ACL_REQUIRES_NOT_NULL(buf);
    1426           1 :     ACL_REQUIRES_CALL_RTS_OK(rtMbufChainAppend(headBuf, buf), rtMbufChainAppend);
    1427           1 :     return ACL_SUCCESS;
    1428             : }
    1429             : 
    1430           1 : aclError aclrtCopyBufRefImpl(const aclrtMbuf buf, aclrtMbuf *newBuf)
    1431             : {
    1432           2 :     ACL_PROFILING_REG(acl::AclProfType::AclrtCopyBufRef);
    1433           1 :     ACL_REQUIRES_NOT_NULL(buf);
    1434           1 :     ACL_REQUIRES_NOT_NULL(newBuf);
    1435           1 :     ACL_REQUIRES_CALL_RTS_OK(rtMbufCopyBufRef(buf, newBuf), rtMbufCopyBufRef);
    1436           1 :     return ACL_SUCCESS;
    1437             : }
    1438             : 
    1439           1 : aclError aclrtGetBufUserDataImpl(const aclrtMbuf buf, void *dataPtr, size_t size, size_t offset)
    1440             : {
    1441           2 :     ACL_PROFILING_REG(acl::AclProfType::AclrtGetBufUserData);
    1442             :     // The current default private data area size is 96B, if offset+size exceeds 96, an error is reported
    1443           1 :     ACL_CHECK_LESS_UINT((size + offset), MEM_SIZE_MAX);
    1444           1 :     ACL_REQUIRES_NOT_NULL(buf);
    1445           1 :     ACL_REQUIRES_NOT_NULL(dataPtr);
    1446           1 :     uint64_t bufSize = 0U;
    1447           1 :     void *tmpDataPtr = nullptr;
    1448           1 :     ACL_REQUIRES_CALL_RTS_OK(rtMbufGetPrivInfo(buf, &tmpDataPtr, &bufSize), rtMbufGetPrivInfo);
    1449           1 :     ACL_CHECK_LESS_UINT(size, static_cast<size_t>(bufSize));
    1450           1 :     ACL_REQUIRES_NOT_NULL(tmpDataPtr);
    1451           1 :     const auto ret = memcpy_s(dataPtr, size, (static_cast<uint8_t *>(tmpDataPtr) + offset), size);
    1452           1 :     if (ret != EOK) {
    1453           0 :         ACL_LOG_INNER_ERROR("call memcpy_s failed, result = %d, size = %zu, bufSize = %lu, offset = %zu",
    1454             :                             ret, size, bufSize, offset);
    1455           0 :         return ACL_ERROR_FAILURE;
    1456             :     }
    1457           1 :     return ACL_SUCCESS;
    1458             : }
    1459             : 
    1460           1 : aclError aclrtSetBufUserDataImpl(aclrtMbuf buf, const void *dataPtr, size_t size, size_t offset)
    1461             : {
    1462           2 :     ACL_PROFILING_REG(acl::AclProfType::AclrtSetBufUserData);
    1463             :     // The current default private data area size is 96B, if offset+size exceeds 96, an error is reported
    1464           1 :     ACL_CHECK_LESS_UINT((size + offset), MEM_SIZE_MAX);
    1465           1 :     ACL_REQUIRES_NOT_NULL(buf);
    1466           1 :     ACL_REQUIRES_NOT_NULL(dataPtr);
    1467           1 :     uint64_t bufSize = 0U;
    1468           1 :     void *tmpDataPtr = nullptr;
    1469           1 :     ACL_REQUIRES_CALL_RTS_OK(rtMbufGetPrivInfo(buf, &tmpDataPtr, &bufSize), rtMbufGetPrivInfo);
    1470           1 :     ACL_CHECK_LESS_UINT(size, static_cast<size_t>(bufSize));
    1471           1 :     ACL_REQUIRES_NOT_NULL(tmpDataPtr);
    1472           1 :     const auto ret = memcpy_s((static_cast<uint8_t *>(tmpDataPtr) + offset),
    1473             :                               (static_cast<size_t>(bufSize) - offset),
    1474             :                               dataPtr, size);
    1475           1 :     if (ret != EOK) {
    1476           0 :         ACL_LOG_INNER_ERROR("call memcpy_s failed, result = %d, size = %zu, bufSize = %lu, offset = %zu",
    1477             :                             ret, size, bufSize, offset);
    1478           0 :         return ACL_ERROR_FAILURE;
    1479             :     }
    1480           1 :     return ACL_SUCCESS;
    1481             : }
    1482             : 
    1483           4 : aclError aclrtGetBufDataImpl(const aclrtMbuf buf, void **dataPtr, size_t *size)
    1484             : {
    1485           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtGetBufData);
    1486           4 :     ACL_REQUIRES_NOT_NULL(buf);
    1487           1 :     ACL_REQUIRES_NOT_NULL(dataPtr);
    1488           1 :     ACL_REQUIRES_NOT_NULL(size);
    1489           1 :     ACL_REQUIRES_CALL_RTS_OK(rtMbufGetBuffAddr(buf, dataPtr), rtMbufGetBuffAddr);
    1490           1 :     uint64_t bufSize = 0U;
    1491           1 :     ACL_REQUIRES_CALL_RTS_OK(rtMbufGetBuffSize(buf, &bufSize), rtMbufGetBuffSize);
    1492           1 :     *size = static_cast<size_t>(bufSize);
    1493           1 :     return ACL_SUCCESS;
    1494             : }
    1495             : 
    1496           1 : aclError aclrtGetBufDataLenImpl(aclrtMbuf buf, size_t *len)
    1497             : {
    1498           2 :     ACL_PROFILING_REG(acl::AclProfType::AclrtGetBufDataLen);
    1499           1 :     ACL_REQUIRES_NOT_NULL(buf);
    1500           1 :     ACL_REQUIRES_NOT_NULL(len);
    1501           1 :     uint64_t dataLen = 0U;
    1502           1 :     ACL_REQUIRES_CALL_RTS_OK(rtMbufGetDataLen(buf, &dataLen), rtMbufGetDataLen);
    1503           1 :     *len = static_cast<size_t>(dataLen);
    1504           1 :     return ACL_SUCCESS;
    1505             : }
    1506             : 
    1507           1 : aclError aclrtSetBufDataLenImpl(aclrtMbuf buf, size_t len)
    1508             : {
    1509           2 :     ACL_PROFILING_REG(acl::AclProfType::AclrtSetBufDataLen);
    1510           1 :     ACL_REQUIRES_NOT_NULL(buf);
    1511           1 :     ACL_REQUIRES_CALL_RTS_OK(rtMbufSetDataLen(buf, len), rtMbufSetDataLen);
    1512           1 :     return ACL_SUCCESS;
    1513             : }
    1514             : 
    1515           8 : aclError aclrtFreeBufImpl(aclrtMbuf buf)
    1516             : {
    1517          16 :     ACL_PROFILING_REG(acl::AclProfType::AclrtFreeBuf);
    1518           8 :     ACL_REQUIRES_NOT_NULL(buf);
    1519           8 :     const rtError_t rtRet = rtMbufFree(buf);
    1520           8 :     if (rtRet != RT_ERROR_NONE) {
    1521           0 :         ACL_LOG_CALL_ERROR("[Free][buf]fail to call rtMbufFree, result is [%d]", rtRet);
    1522           0 :         return rtRet;
    1523             :     }
    1524           8 :     buf = nullptr;
    1525           8 :     return ACL_SUCCESS;
    1526             : }
    1527             : 
    1528           4 : aclError aclrtAllocBufImpl(aclrtMbuf *buf, size_t size)
    1529             : {
    1530           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtAllocBuf);
    1531           4 :     ACL_LOG_INFO("start to execute aclrtAllocBuf, size is [%zu]", size);
    1532           4 :     ACL_REQUIRES_NOT_NULL(buf);
    1533             :     // size must be greater than zero
    1534           3 :     if (size == 0UL) {
    1535           1 :         ACL_LOG_ERROR("malloc size must be greater than zero");
    1536           3 :         acl::AclErrorLogManager::ReportInputError(acl::INVALID_PARAM_MSG,
    1537           2 :             std::vector<const char *>({"param", "value", "reason"}),
    1538           2 :             std::vector<const char *>({"size", std::to_string(size).c_str(), "size must be greater than zero"}));
    1539           1 :         return ACL_ERROR_INVALID_PARAM;
    1540             :     }
    1541           2 :     const rtError_t rtRet = rtMbufAlloc(buf, size);
    1542           2 :     if (rtRet != RT_ERROR_NONE) {
    1543           1 :         ACL_LOG_CALL_ERROR("[Alloc][buf]fail to call rtMbufAlloc, result is [%d]", rtRet);
    1544           1 :         return rtRet;
    1545             :     }
    1546           1 :     return ACL_SUCCESS;
    1547             : }
    1548             : 
    1549           3 : aclError aclrtCmoAsyncWithBarrierImpl(void *src, size_t size, aclrtCmoType cmoType, uint32_t barrierId,
    1550             :     aclrtStream stream)
    1551             : {
    1552           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtCmoAsyncWithBarrier);
    1553           3 :     ACL_LOG_INFO("start to execute aclrtCmoAsyncWithBarrier, size is [%zu], cmoType is [%u], barrierId is [%u]",
    1554             :         size, static_cast<uint32_t>(cmoType), barrierId);
    1555           3 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(src);
    1556           2 :     const rtCmoOpCode rtCmoType = static_cast<rtCmoOpCode>(static_cast<uint32_t>(cmoType) +
    1557             :         (static_cast<uint32_t>(RT_CMO_PREFETCH) - static_cast<uint32_t>(ACL_RT_CMO_TYPE_PREFETCH)));
    1558           2 :     const auto rtErr = rtsCmoAsyncWithBarrier(src, size, rtCmoType, barrierId, static_cast<rtStream_t>(stream));
    1559           2 :     if (rtErr != RT_ERROR_NONE) {
    1560           1 :         ACL_LOG_CALL_ERROR("call rtsCmoAsyncWithBarrier Failed, runtime result = %d", rtErr);
    1561           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1562             :     }
    1563           1 :     return ACL_SUCCESS;
    1564             : }
    1565             : 
    1566          24 : static aclError MemcpyBatchImpl(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches,
    1567             :     aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs, size_t *failIndex,
    1568             :     aclrtStream stream, bool async)
    1569             : {
    1570          24 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(dsts);
    1571          22 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(destMaxs);
    1572          20 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(srcs);
    1573          18 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(sizes);
    1574          16 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(attrs);
    1575          14 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(attrsIndexes);
    1576          12 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(failIndex);
    1577             : 
    1578          10 :     if (numBatches == 0UL) {
    1579           2 :         ACL_LOG_ERROR("param numBatches must be greater than zero");
    1580           6 :         acl::AclErrorLogManager::ReportInputError(acl::INVALID_PARAM_MSG,
    1581           4 :             std::vector<const char *>({"param", "value", "reason"}),
    1582           4 :             std::vector<const char *>({"numBatches", std::to_string(numBatches).c_str(),
    1583             :                 "numBatches must be greater than zero"}));
    1584           2 :         return ACL_ERROR_INVALID_PARAM;
    1585             :     }
    1586             : 
    1587          55 :     for (size_t i = 0UL; i < numBatches; i++) {
    1588          49 :         if (destMaxs[i] < sizes[i]) {
    1589           2 :             ACL_LOG_ERROR("element of destMaxs must be equal to or greater than corresponding element of sizes");
    1590           6 :             acl::AclErrorLogManager::ReportInputError(acl::INVALID_PARAM_MSG,
    1591           4 :                 std::vector<const char *>({"param", "value", "reason"}),
    1592           4 :                 std::vector<const char *>({"destMaxs", std::to_string(destMaxs[i]).c_str(),
    1593             :                     "element of destMaxs must be equal to or greater than corresponding element of sizes"}));
    1594           2 :             return ACL_ERROR_INVALID_PARAM;
    1595             :         }
    1596             :     }
    1597             : 
    1598           6 :     constexpr uint32_t rsvMaxSize = sizeof(aclrtMemcpyBatchAttr::rsv) / sizeof(uint8_t);
    1599          10 :     for (size_t idx = 0UL; idx < numAttrs; idx++) {
    1600          70 :         for (uint32_t i = 0U; i < rsvMaxSize; i++) {
    1601          66 :             if (attrs[idx].rsv[i] != 0U) {
    1602           2 :                 ACL_LOG_ERROR("rsv field of attrs[%zu] must be zero", idx);
    1603           2 :                 return ACL_ERROR_INVALID_PARAM;
    1604             :             }
    1605             :         }
    1606             :     }
    1607             : 
    1608           4 :     if (async) {
    1609           2 :         const auto rtErr = rtsMemcpyBatchAsync(dsts, destMaxs, srcs, sizes, numBatches, reinterpret_cast<rtMemcpyBatchAttr*>(attrs),
    1610             :             attrsIndexes, numAttrs, failIndex, stream);
    1611           2 :         if (rtErr != RT_ERROR_NONE) {
    1612           1 :             ACL_LOG_CALL_ERROR("call rtsMemcpyBatchAsync failed, runtime result = %d.", static_cast<int32_t>(rtErr));
    1613           1 :             return ACL_GET_ERRCODE_RTS(rtErr);
    1614             :         }
    1615           1 :         ACL_LOG_INFO("successfully execute aclrtMemcpyBatchAsync");
    1616             :     } else {
    1617           2 :         const auto rtErr = rtsMemcpyBatch(dsts, srcs, sizes, numBatches, reinterpret_cast<rtMemcpyBatchAttr*>(attrs),
    1618             :             attrsIndexes, numAttrs, failIndex);
    1619           2 :         if (rtErr != RT_ERROR_NONE) {
    1620           1 :             ACL_LOG_CALL_ERROR("call rtsMemcpyBatch failed, runtime result = %d.", static_cast<int32_t>(rtErr));
    1621           1 :             return ACL_GET_ERRCODE_RTS(rtErr);
    1622             :         }
    1623           1 :         ACL_LOG_INFO("successfully execute aclrtMemcpyBatch");
    1624             :     }
    1625             : 
    1626           2 :     return ACL_SUCCESS;
    1627             : }
    1628             : 
    1629           4 : aclError aclrtIpcMemGetExportKeyImpl(void *devPtr, size_t size, char *key, size_t len, uint64_t flags)
    1630             : {
    1631           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtIpcMemGetExportKey);
    1632           4 :     ACL_LOG_INFO("start to execute aclrtIpcMemGetExportKey, size is [%zu], len is [%zu], flags is [%lu]",
    1633             :         size, len, flags);
    1634           4 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(devPtr);
    1635           3 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(key);
    1636           2 :     const auto rtErr = rtsIpcMemGetExportKey(devPtr, size, key, static_cast<uint32_t>(len), flags);
    1637           2 :     if (rtErr != RT_ERROR_NONE) {
    1638           1 :         ACL_LOG_CALL_ERROR("call rtsIpcMemGetExportKey failed, runtime result = %d", rtErr);
    1639           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1640             :     }
    1641           1 :     return ACL_SUCCESS;
    1642             : }
    1643             : 
    1644           3 : aclError aclrtIpcMemCloseImpl(const char *key)
    1645             : {
    1646           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtIpcMemClose);
    1647           3 :     ACL_LOG_INFO("start to execute aclrtIpcMemClose");
    1648           3 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(key);
    1649           2 :     const auto rtErr = rtsIpcMemClose(key);
    1650           2 :     if (rtErr != RT_ERROR_NONE) {
    1651           1 :         ACL_LOG_CALL_ERROR("call rtsIpcMemClose failed, runtime result = %d", rtErr);
    1652           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1653             :     }
    1654           1 :     return ACL_SUCCESS;
    1655             : }
    1656             : 
    1657           4 : aclError aclrtIpcMemImportByKeyImpl(void **devPtr, const char *key, uint64_t flags)
    1658             : {
    1659           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtIpcMemImportByKey);
    1660           4 :     ACL_LOG_INFO("start to execute aclrtIpcMemImportByKey, flags is [%lu]", flags);
    1661           4 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(devPtr);
    1662           3 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(key);
    1663           2 :     const auto rtErr = rtsIpcMemImportByKey(devPtr, key, flags);
    1664           2 :     if (rtErr != RT_ERROR_NONE) {
    1665           1 :         ACL_LOG_CALL_ERROR("call rtsIpcMemImportByKey failed, runtime result = %d", rtErr);
    1666           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1667             :     }
    1668           1 :     return ACL_SUCCESS;
    1669             : }
    1670             : 
    1671          12 : aclError aclrtMemcpyBatchImpl(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches,
    1672             :     aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs, size_t *failIndex)
    1673             : {
    1674          24 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemcpyBatch);
    1675          12 :     ACL_LOG_INFO("start to execute aclrtMemcpyBatch");
    1676          12 :     return MemcpyBatchImpl(dsts, destMaxs, srcs, sizes, numBatches, attrs, attrsIndexes, numAttrs, failIndex,
    1677          24 :         nullptr, false);
    1678             : }
    1679             : 
    1680          12 : aclError aclrtMemcpyBatchAsyncImpl(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes,
    1681             :     size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs, size_t *failIndex,
    1682             :     aclrtStream stream)
    1683             : {
    1684          24 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemcpyBatchAsync);
    1685          12 :     ACL_LOG_INFO("start to execute aclrtMemcpyBatchAsync");
    1686          12 :     return MemcpyBatchImpl(dsts, destMaxs, srcs, sizes, numBatches, attrs, attrsIndexes, numAttrs, failIndex,
    1687          24 :         stream, true);
    1688             : }
    1689             : 
    1690           4 : aclError aclrtIpcMemSetImportPidImpl(const char *key, int32_t *pid, size_t num)
    1691             : {
    1692           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtIpcMemSetImportPid);
    1693           4 :     ACL_LOG_INFO("start to execute aclrtIpcMemSetImportPid, num is [%zu]", num);
    1694           4 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(key);
    1695           3 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(pid);
    1696           2 :     const auto rtErr = rtsIpcMemSetImportPid(key, pid, static_cast<int32_t>(num));
    1697           2 :     if (rtErr != RT_ERROR_NONE) {
    1698           1 :         ACL_LOG_CALL_ERROR("call rtsIpcMemSetImportPid failed, runtime result = %d", rtErr);
    1699           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1700             :     }
    1701           1 :     return ACL_SUCCESS;
    1702             : }
    1703             : 
    1704           2 : aclError aclrtIpcMemSetAttrImpl(const char *key, aclrtIpcMemAttrType type, uint64_t attr)
    1705             : {
    1706           4 :     ACL_PROFILING_REG(acl::AclProfType::AclrtIpcMemSetAttr);
    1707           2 :     ACL_LOG_INFO("start to execute aclrtIpcMemSetAttr, type is [%d], attr is [%lu]", type, attr);
    1708           2 :     const auto rtErr = rtIpcSetMemoryAttr(key, type, attr);
    1709           2 :     if (rtErr != RT_ERROR_NONE) {
    1710           1 :         ACL_LOG_CALL_ERROR("call rtIpcSetMemoryAttr failed, runtime result = %d", rtErr);
    1711           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1712             :     }
    1713           1 :     ACL_LOG_INFO("successfully execute aclrtIpcMemSetAttr");
    1714           1 :     return ACL_SUCCESS;
    1715             : }
    1716             : 
    1717           2 : aclError aclrtIpcMemImportPidInterServerImpl(const char *key, aclrtServerPid *serverPids, size_t num)
    1718             : {
    1719           4 :     ACL_PROFILING_REG(acl::AclProfType::AclrtIpcMemImportPidInterServer);
    1720           2 :     ACL_LOG_INFO("start to execute aclrtIpcMemImportPidInterServer, num is [%zu]", num);
    1721           2 :     const auto rtErr = rtIpcMemImportPidInterServer(key, reinterpret_cast<const rtServerPid *>(serverPids), num);
    1722           2 :     if (rtErr != RT_ERROR_NONE) {
    1723           1 :         ACL_LOG_CALL_ERROR("call aclrtIpcMemImportPidInterServer failed, runtime result = %d", rtErr);
    1724           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1725             :     }
    1726           1 :     ACL_LOG_INFO("successfully execute aclrtIpcMemImportPidInterServer");
    1727           1 :     return ACL_SUCCESS;
    1728             : }
    1729             : 
    1730           1 : aclError aclrtCheckMemTypeImpl(void** addrList, uint32_t size, uint32_t memType, uint32_t *checkResult, uint32_t reserve)
    1731             : {
    1732           2 :     ACL_PROFILING_REG(acl::AclProfType::AclrtCheckMemType);
    1733           1 :     ACL_LOG_INFO("start to execute AclrtCheckMemType, size is [%u], memType is [%u], reserve is [%u]", size, memType, reserve);
    1734           1 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(addrList);
    1735           1 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(checkResult);
    1736           1 :     const auto rtErr = rtsCheckMemType(addrList, size, memType, checkResult, reserve);
    1737           1 :     if (rtErr != RT_ERROR_NONE) {
    1738           0 :         ACL_LOG_CALL_ERROR("call rtsCheckMemType failed, runtime result = %d", rtErr);
    1739           0 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1740             :     }
    1741           1 :     return ACL_SUCCESS;
    1742             : }
    1743             : 
    1744           3 : aclError aclrtDevicePeerAccessStatusImpl(int32_t deviceId, int32_t peerDeviceId, int32_t *status)
    1745             : {
    1746           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtDevicePeerAccessStatus);
    1747           3 :     ACL_LOG_INFO("start to execute aclrtDevicePeerAccessStatus");
    1748           3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(status);
    1749           2 :     const rtError_t rtErr = rtsGetP2PStatus(
    1750             :         static_cast<uint32_t>(deviceId), static_cast<uint32_t>(peerDeviceId), reinterpret_cast<uint32_t *>(status));
    1751           2 :     if (rtErr != RT_ERROR_NONE) {
    1752           1 :         ACL_LOG_CALL_ERROR("call rtsGetP2PStatus failed, runtime result = %d.", static_cast<int32_t>(rtErr));
    1753           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1754             :     }
    1755           1 :     ACL_LOG_INFO("successfully execute aclrtDevicePeerAccessStatus");
    1756           1 :     return ACL_SUCCESS;
    1757             : }
    1758             : 
    1759           2 : aclError aclrtCmoGetDescSizeImpl(size_t *size)
    1760             : {
    1761           4 :     ACL_PROFILING_REG(acl::AclProfType::AclrtCmoGetDescSize);
    1762           2 :     ACL_LOG_DEBUG("start to execute aclrtCmoGetDescSize");
    1763           2 :     const rtError_t rtErr = rtsGetCmoDescSize(size);
    1764           2 :     if (rtErr != RT_ERROR_NONE) {
    1765           1 :         ACL_LOG_CALL_ERROR("call rtsGetCmoDescSize failed, runtime result = %d", rtErr);
    1766           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1767             :     }
    1768           1 :     ACL_LOG_INFO("successfully execute aclrtCmoGetDescSize");
    1769           1 :     return ACL_SUCCESS;
    1770             : }
    1771             : 
    1772           2 : aclError aclrtCmoSetDescImpl(void *cmoDesc, void *src, size_t size)
    1773             : {
    1774           4 :     ACL_PROFILING_REG(acl::AclProfType::AclrtCmoSetDesc);
    1775           2 :     ACL_LOG_DEBUG("start to execute aclrtCmoSetDesc, memLen =%zu", size);
    1776           2 :     const rtError_t rtErr = rtsSetCmoDesc(cmoDesc, src, size);
    1777           2 :     if (rtErr != RT_ERROR_NONE) {
    1778           1 :         ACL_LOG_CALL_ERROR("call rtsSetCmoDesc failed, runtime result = %d", rtErr);
    1779           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1780             :     }
    1781           1 :     ACL_LOG_INFO("successfully execute aclrtCmoSetDesc");
    1782           1 :     return ACL_SUCCESS;
    1783             : }
    1784             : 
    1785           2 : static rtCmoOpCode ConvertCmoType(aclrtCmoType cmoType)
    1786             : {
    1787           2 :     constexpr uint32_t offset =
    1788             :         static_cast<uint32_t>(RT_CMO_PREFETCH) - static_cast<uint32_t>(ACL_RT_CMO_TYPE_PREFETCH);
    1789           2 :     return static_cast<rtCmoOpCode>(static_cast<uint32_t>(cmoType) + offset);
    1790             : }
    1791             : 
    1792           2 : aclError aclrtCmoAsyncWithDescImpl(void *cmoDesc, aclrtCmoType cmoType, aclrtStream stream, const void *reserve)
    1793             : {
    1794           4 :     ACL_PROFILING_REG(acl::AclProfType::AclrtCmoAsyncWithDesc);
    1795           2 :     ACL_LOG_DEBUG("start to execute aclrtCmoAsyncWithDesc");
    1796           2 :     const rtCmoOpCode rtCmoType = ConvertCmoType(cmoType);
    1797           2 :     const rtError_t rtErr = rtsLaunchCmoAddrTask(cmoDesc, stream, rtCmoType, reserve);
    1798           2 :     if (rtErr != RT_ERROR_NONE) {
    1799           1 :         ACL_LOG_CALL_ERROR("call rtsLaunchCmoAddrTask failed, runtime result = %d", rtErr);
    1800           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1801             :     }
    1802           1 :     ACL_LOG_INFO("successfully execute aclrtCmoAsyncWithDesc");
    1803           1 :     return ACL_SUCCESS;
    1804             : }
    1805             : 
    1806           4 : aclError aclrtMemSetAccessImpl(void *virPtr, size_t size, aclrtMemAccessDesc *desc, size_t count)
    1807             : {
    1808           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemSetAccess);
    1809           4 :     ACL_LOG_INFO("start to execute aclrtMemSetAccess");
    1810             :     
    1811           4 :     const rtError_t rtErr = rtMemSetAccess(virPtr, size, reinterpret_cast<rtMemAccessDesc*>(desc), count);
    1812           4 :     if (rtErr != RT_ERROR_NONE) {
    1813           2 :         if (rtErr == ACL_ERROR_RT_FEATURE_NOT_SUPPORT) {
    1814           1 :             ACL_LOG_WARN("call aclrtMemSetAccess failed, runtime result = %d.", static_cast<int32_t>(rtErr));
    1815             :         } else {
    1816           1 :             ACL_LOG_CALL_ERROR("call aclrtMemSetAccess failed, runtime result = %d.", static_cast<int32_t>(rtErr));
    1817             :         }   
    1818           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1819             :     }
    1820           2 :     ACL_LOG_INFO("successfully execute aclrtMemSetAccess");
    1821           2 :     return ACL_SUCCESS;
    1822             : }
    1823             : 
    1824           3 : aclError aclrtMemRetainAllocationHandleImpl(void* virPtr, aclrtDrvMemHandle *handle) 
    1825             : {
    1826           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemRetainAllocationHandle);
    1827           3 :     ACL_LOG_DEBUG("start to execute aclrtMemRetainAllocationHandle");
    1828           3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(virPtr);
    1829           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(handle);
    1830             : 
    1831           2 :     const rtError_t rtErr = rtMemRetainAllocationHandle(virPtr, reinterpret_cast<rtDrvMemHandle*>(handle));
    1832           2 :     if (rtErr != ACL_RT_SUCCESS) {
    1833           1 :         ACL_LOG_CALL_ERROR("get handle failed, runtime result = %d", static_cast<int32_t>(rtErr));
    1834           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1835             :     }
    1836           1 :     return ACL_SUCCESS;
    1837             : }
    1838             : 
    1839             : //initialize the mapping table
    1840             : static const MemAttrMapping mapping[] {
    1841             :     {HUGE_PAGE_TYPE, HBM_TYPE, true, ACL_HBM_MEM_HUGE},
    1842             :     {NORMAL_PAGE_TYPE, HBM_TYPE, true, ACL_HBM_MEM_NORMAL},
    1843             :     {HUGE1G_PAGE_TYPE, HBM_TYPE, true, ACL_HBM_MEM_HUGE1G},
    1844             :     {NORMAL_PAGE_TYPE, P2P_DDR_TYPE, true, ACL_DDR_MEM_P2P_NORMAL},
    1845             :     {NORMAL_PAGE_TYPE, DDR_TYPE, true, ACL_MEM_NORMAL},
    1846             :     {HUGE_PAGE_TYPE, DDR_TYPE, true, ACL_MEM_HUGE},
    1847             :     {HUGE1G_PAGE_TYPE, DDR_TYPE, true, ACL_MEM_HUGE1G},
    1848             :     {HUGE_PAGE_TYPE, P2P_DDR_TYPE, true, ACL_MEM_P2P_HUGE},
    1849             :     {HUGE1G_PAGE_TYPE, P2P_DDR_TYPE, true, ACL_MEM_P2P_HUGE1G},
    1850             :     {NORMAL_PAGE_TYPE, HBM_TYPE, false, ACL_HBM_MEM_NORMAL},
    1851             :     {HUGE_PAGE_TYPE, HBM_TYPE, false, ACL_HBM_MEM_HUGE},
    1852             :     {HUGE1G_PAGE_TYPE, HBM_TYPE, false, ACL_HBM_MEM_HUGE1G},
    1853             :     {NORMAL_PAGE_TYPE, DDR_TYPE, false, ACL_MEM_NORMAL},
    1854             :     {HUGE_PAGE_TYPE, DDR_TYPE, false, ACL_MEM_HUGE},
    1855             :     {HUGE1G_PAGE_TYPE, DDR_TYPE, false, ACL_MEM_HUGE1G},
    1856             :     {NORMAL_PAGE_TYPE, P2P_HBM_TYPE, false, ACL_MEM_P2P_NORMAL},
    1857             :     {HUGE_PAGE_TYPE, P2P_HBM_TYPE, false, ACL_MEM_P2P_HUGE},
    1858             :     {HUGE1G_PAGE_TYPE, P2P_HBM_TYPE, false, ACL_MEM_P2P_HUGE1G}
    1859             : };
    1860             : 
    1861           5 : aclError aclrtMemGetAllocationPropertiesFromHandleImpl(aclrtDrvMemHandle handle, aclrtPhysicalMemProp* prop)
    1862             : {
    1863          10 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemGetAllocationPropertiesFromHandle);
    1864           5 :     ACL_LOG_DEBUG("start to execute AclrtMemGetAllocationPropertiesFromHandle");
    1865           5 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(handle);
    1866           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(prop);
    1867             : 
    1868           4 :     rtDrvMemProp_t rtProp = {};
    1869           4 :     const rtError_t rtErr = rtMemGetAllocationPropertiesFromHandle(reinterpret_cast<rtDrvMemHandle>(handle), &rtProp);
    1870           4 :     if (rtErr != ACL_RT_SUCCESS) {
    1871           1 :         ACL_LOG_CALL_ERROR("get handle failed, runtime result = %d", static_cast<int32_t>(rtErr));
    1872           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1873             :     }
    1874             : 
    1875           3 :     prop->handleType = ACL_MEM_HANDLE_TYPE_NONE;
    1876           3 :     prop->allocationType = ACL_MEM_ALLOCATION_TYPE_PINNED;
    1877           3 :     if (rtProp.side == DRV_MEM_HOST_NUMA_SIDE) {
    1878             :         // convert drv side to acl locationtype
    1879           0 :         prop->location.type = ACL_MEM_LOCATION_TYPE_HOST_NUMA;
    1880             :     } else {
    1881           3 :         prop->location.type = static_cast<aclrtMemLocationType>(rtProp.side);
    1882             :     }
    1883           3 :     prop->location.id = rtProp.devid;
    1884           3 :     prop->reserve = rtProp.reserve;
    1885             : 
    1886             :     //host alloc
    1887           3 :     bool isHostAlloc = (prop->location.type == ACL_MEM_LOCATION_TYPE_HOST) || (prop->location.type == ACL_MEM_LOCATION_TYPE_HOST_NUMA);
    1888             : 
    1889           3 :     const auto& it = std::find_if(std::begin(mapping), std::end(mapping),
    1890           9 :         [rtProp, isHostAlloc](const MemAttrMapping& entry) {
    1891           9 :             return (entry.pgType == rtProp.pg_type) &&
    1892           9 :                 (entry.memType == rtProp.mem_type) &&
    1893           9 :                 (entry.isHostAlloc == isHostAlloc);
    1894           3 :         });
    1895           3 :     if (it != std::end(mapping)) {
    1896           3 :         prop->memAttr = it->memAttr;
    1897             :     } else {
    1898           0 :         ACL_LOG_ERROR("memAttr not found for pg_type=%u, mem_type=%u, isHostAlloc=%u",
    1899             :                       rtProp.pg_type, rtProp.mem_type, isHostAlloc);
    1900           0 :         return ACL_ERROR_INVALID_PARAM;
    1901             :     }
    1902           3 :     return ACL_SUCCESS;
    1903             : }
    1904             : 
    1905           5 : aclError aclrtReserveMemAddressNoUCMemoryImpl(void **virPtr, size_t size, size_t alignment, void *expectPtr, uint64_t flags)
    1906             : {
    1907          10 :     ACL_PROFILING_REG(acl::AclProfType::AclrtReserveMemAddressNoUCMemory);
    1908           5 :     ACL_LOG_DEBUG("start to execute aclrtReserveMemAddressNoUCMemory, size = %zu", size);
    1909           5 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(virPtr);
    1910             : 
    1911           5 :     if (size == 0UL) {
    1912           1 :         ACL_LOG_ERROR("size is [%zu], reserve size must be greater than zero", size);
    1913           3 :         acl::AclErrorLogManager::ReportInputError(acl::INVALID_PARAM_MSG,
    1914           2 :             std::vector<const char *>({"param", "value", "reason"}),
    1915           2 :             std::vector<const char *>({"size", std::to_string(size).c_str(), "reserve size must be greater than zero"}));
    1916           1 :         return ACL_ERROR_INVALID_PARAM;
    1917             :     }
    1918           4 :     if ((flags != 1ULL) && (flags != 0ULL)) {
    1919           1 :         ACL_LOG_ERROR("flags is [%lu], flags of page type must be 0 or 1", flags);
    1920           3 :         acl::AclErrorLogManager::ReportInputError(acl::INVALID_PARAM_MSG,
    1921           2 :             std::vector<const char *>({"param", "value", "reason"}),
    1922           2 :             std::vector<const char *>({"flags", std::to_string(flags).c_str(), "flags of page type must be 0 or 1"}));
    1923           1 :         return ACL_ERROR_INVALID_PARAM;
    1924             :     }
    1925             : 
    1926           3 :     flags = flags | FLAG_START_DYNAMIC_ALLOC_MEM; // bit 9置1
    1927           3 :     const rtError_t rtErr = rtReserveMemAddress(virPtr, size, alignment, expectPtr, flags);
    1928           3 :     if (rtErr != RT_ERROR_NONE) {
    1929           2 :         if (rtErr == ACL_ERROR_RT_FEATURE_NOT_SUPPORT) {
    1930           1 :             ACL_LOG_WARN("reserve memory address without UCMemeory unsupport, runtime result = %d", static_cast<int32_t>(rtErr));
    1931             :         } else {
    1932           1 :             ACL_LOG_CALL_ERROR("reserve memory address without UCMemeory failed, runtime result = %d", static_cast<int32_t>(rtErr));
    1933             :         }   
    1934           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1935             :     }
    1936           1 :     return ACL_SUCCESS;
    1937             : }
    1938             : 
    1939           2 : aclError aclrtMemGetAddressRangeImpl(void *ptr, void **pbase, size_t *psize)
    1940             : {
    1941           4 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemGetAddressRange);
    1942           2 :     ACL_LOG_DEBUG("start to execute aclrtMemGetAddressRange");
    1943           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(ptr);
    1944           1 :     const rtError_t rtErr = rtMemGetAddressRange(ptr, pbase, psize);
    1945           1 :     if (rtErr != RT_ERROR_NONE) {
    1946           0 :         ACL_LOG_CALL_ERROR("call  aclrtMemGetAddressRange failed, runtime result = %d.", static_cast<int32_t>(rtErr));
    1947           0 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1948             :     }
    1949           1 :     ACL_LOG_INFO("successfully execute aclrtMemGetAddressRange");
    1950           1 :     return ACL_SUCCESS;
    1951             : }
    1952             : 
    1953           5 : aclError aclrtMemP2PMapImpl(void *devPtr, size_t size, int32_t dstDevId, uint64_t flags)
    1954             : {
    1955          10 :     ACL_PROFILING_REG(acl::AclProfType::aclrtMemP2PMap);
    1956           5 :     ACL_LOG_INFO("start to execute aclrtMemP2PMap");
    1957           5 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(devPtr);
    1958           4 :     ACL_REQUIRES_TRUE(size > 0UL, ACL_ERROR_INVALID_PARAM, "size in aclrtMemP2PMap must be large than 0 !");
    1959           3 :     ACL_REQUIRES_TRUE(flags == 0UL, ACL_ERROR_INVALID_PARAM, "flags in aclrtMemP2PMap must be 0 !");
    1960           2 :     uint32_t phyId = 0U;
    1961           2 :     rtError_t rtErr = rtGetDevicePhyIdByIndex(static_cast<uint32_t>(dstDevId), &phyId);
    1962           2 :     if (rtErr != RT_ERROR_NONE) {
    1963           1 :         ACL_LOG_CALL_ERROR("call rtGetDevicePhyIdByIndex failed, dstDevId = %u, runtime result = %d",
    1964             :             dstDevId, static_cast<int32_t>(rtErr));
    1965           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1966             :     }
    1967           1 :     rtErr = rtMemPrefetchToDevice(devPtr, size, phyId);
    1968           1 :     if (rtErr != RT_ERROR_NONE) {
    1969           0 :         ACL_LOG_CALL_ERROR("call  aclrtMemP2PMap failed, runtime result = %d.", static_cast<int32_t>(rtErr));
    1970           0 :         return ACL_GET_ERRCODE_RTS(rtErr);
    1971             :     }
    1972           1 :     ACL_LOG_INFO("successfully execute aclrtMemP2PMap");
    1973           1 :     return ACL_SUCCESS;
    1974             : }
    1975             : 
    1976           3 : aclError aclrtMemPoolCreateImpl(aclrtMemPool *memPool, const aclrtMemPoolProps *poolProps)
    1977             : {
    1978           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemPoolCreate);
    1979           3 :     ACL_LOG_INFO("start to execute aclrtMemPoolCreate.");
    1980           3 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(memPool);
    1981           3 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(poolProps);
    1982             : 
    1983           3 :     if (poolProps->allocType != aclrtMemAllocationType::ACL_MEM_ALLOCATION_TYPE_PINNED) {
    1984           0 :         ACL_LOG_ERROR("[Check]param:poolProp.allocType must be ACL_MEM_ALLOCATION_TYPE_PINNED, but got: %d.",
    1985             :             poolProps->allocType);
    1986           0 :         return ACL_ERROR_INVALID_PARAM;
    1987             :     }
    1988             : 
    1989           3 :     if (poolProps->location.type != aclrtMemLocationType::ACL_MEM_LOCATION_TYPE_DEVICE) {
    1990           1 :         ACL_LOG_ERROR("[Check]param:poolProp.location.type must be ACL_MEM_LOCATION_TYPE_DEVICE, but got: %d.",
    1991             :             poolProps->location.type);
    1992           1 :         return ACL_ERROR_INVALID_PARAM;
    1993             :     }
    1994             : 
    1995           2 :     rtMemPoolProps rtPoolProps;
    1996           2 :     rtPoolProps.side = ACL_MEM_LOCATION_TYPE_DEVICE;
    1997           2 :     rtPoolProps.devId = poolProps->location.id;
    1998           2 :     rtPoolProps.handleType = static_cast<rtDrvMemHandleType>(poolProps->handleType);
    1999           2 :     rtPoolProps.maxSize = poolProps->maxSize;
    2000           2 :     rtPoolProps.reserve = 0;
    2001             : 
    2002           2 :     uint8_t zeros[sizeof(poolProps->reserved)] = {0};
    2003           2 :     if (memcmp(poolProps->reserved, zeros, sizeof(poolProps->reserved)) != 0) {
    2004           1 :         ACL_LOG_CALL_ERROR("poolProps reserve invaild.");
    2005           1 :         return ACL_ERROR_INVALID_PARAM;
    2006             :     }
    2007             : 
    2008           1 :     const auto rtErr = rtMemPoolCreate(reinterpret_cast<rtMemPool_t*>(memPool), &rtPoolProps);
    2009           1 :     if (rtErr != RT_ERROR_NONE) {
    2010           0 :         ACL_LOG_CALL_ERROR("call rtMemPoolCreate failed, runtime result = %d.", rtErr);
    2011           0 :         return ACL_GET_ERRCODE_RTS(rtErr);
    2012             :     }
    2013           1 :     return ACL_SUCCESS;
    2014             : }
    2015             : 
    2016           1 : aclError aclrtMemPoolDestroyImpl(const aclrtMemPool memPool)
    2017             : {
    2018           2 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemPoolDestroy);
    2019           1 :     ACL_LOG_INFO("start to execute aclrtMemPoolDestroy.");
    2020           1 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(memPool);
    2021             : 
    2022           1 :     const auto rtErr = rtMemPoolDestroy(static_cast<rtMemPool_t>(memPool));
    2023           1 :     if (rtErr != RT_ERROR_NONE) {
    2024           0 :         ACL_LOG_CALL_ERROR("call rtMemPoolDestroy failed, runtime result = %d.", rtErr);
    2025           0 :         return ACL_GET_ERRCODE_RTS(rtErr);
    2026             :     }
    2027           1 :     return ACL_SUCCESS;
    2028             : }
    2029             : 
    2030           1 : aclError aclrtMemPoolSetAttrImpl(aclrtMemPool memPool, aclrtMemPoolAttr attr, void *value)
    2031             : {
    2032           2 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemPoolSetAttr);
    2033           1 :     ACL_LOG_INFO("start to execute aclrtMemPoolSetAttr.");
    2034           1 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(memPool);
    2035             : 
    2036           1 :     const auto rtErr = rtMemPoolSetAttr(static_cast<rtMemPool_t>(memPool), static_cast<rtMemPoolAttr>(attr), value);
    2037           1 :     if (rtErr != RT_ERROR_NONE) {
    2038           0 :         ACL_LOG_CALL_ERROR("call rtMemPoolSetAttr failed, runtime result = %d.", rtErr);
    2039           0 :         return ACL_GET_ERRCODE_RTS(rtErr);
    2040             :     }
    2041           1 :     return ACL_SUCCESS;
    2042             : }
    2043             : 
    2044           1 : aclError aclrtMemPoolGetAttrImpl(aclrtMemPool memPool, aclrtMemPoolAttr attr, void *value)
    2045             : {
    2046           2 :     ACL_PROFILING_REG(acl::AclProfType::AclrtMemPoolGetAttr);
    2047           1 :     ACL_LOG_INFO("start to execute aclrtMemPoolGetAttr.");
    2048           1 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(memPool);
    2049             : 
    2050           1 :     const auto rtErr = rtMemPoolGetAttr(static_cast<rtMemPool_t>(memPool), static_cast<rtMemPoolAttr>(attr), value);
    2051           1 :     if (rtErr != RT_ERROR_NONE) {
    2052           0 :         ACL_LOG_CALL_ERROR("call rtMemPoolGetAttr failed, runtime result = %d.", rtErr);
    2053           0 :         return ACL_GET_ERRCODE_RTS(rtErr);
    2054             :     }
    2055           1 :     return ACL_SUCCESS;
    2056             : }

Generated by: LCOV version 1.14