LCOV - code coverage report
Current view: top level - acl/aclrt_impl - kernel.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 405 409 99.0 %
Date: 2026-08-27 13:24:42 Functions: 36 36 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 "acl_rt_impl.h"
      12             : #include <map>
      13             : #include "runtime/kernel.h"
      14             : #include "runtime/rts/rts_kernel.h"
      15             : #include "runtime/rt_stars_define.h"
      16             : #include "runtime/rts/rts_stars.h"
      17             : #include "runtime/rts/rts_model.h"
      18             : #include "common/log_inner.h"
      19             : #include "common/error_codes_inner.h"
      20             : #include "common/prof_reporter.h"
      21             : #include "common/resource_statistics.h"
      22             : namespace {
      23             : static const std::map<aclDataType, rtRandomNumDataType> kMapDataType = {
      24             :     { ACL_INT32, RT_RANDOM_NUM_DATATYPE_INT32 },
      25             :     { ACL_INT64, RT_RANDOM_NUM_DATATYPE_INT64 },
      26             :     { ACL_UINT32, RT_RANDOM_NUM_DATATYPE_UINT32 },
      27             :     { ACL_UINT64, RT_RANDOM_NUM_DATATYPE_UINT64 },
      28             :     { ACL_BF16, RT_RANDOM_NUM_DATATYPE_BF16 },
      29             :     { ACL_FLOAT16, RT_RANDOM_NUM_DATATYPE_FP16 },
      30             :     { ACL_FLOAT, RT_RANDOM_NUM_DATATYPE_FP32 },
      31             : };
      32             : }
      33             : 
      34           6 : aclrtBinary aclrtCreateBinaryImpl(const void *data, size_t dataLen)
      35             : {
      36           6 :   ACL_ADD_APPLY_TOTAL_COUNT(acl::ACL_STATISTICS_CREATE_DESTROY_ALLOCATOR_BINARY_DESC);
      37           6 :   ACL_LOG_INFO("start to execute aclrtCreateBinary");
      38           6 :   ACL_REQUIRES_NOT_NULL_RET_NULL_INPUT_REPORT(data);
      39             : 
      40           5 :   rtDevBinary_t *binaryDesc = new(std::nothrow) rtDevBinary_t();
      41           5 :   ACL_CHECK_WITH_MESSAGE_AND_RETURN(binaryDesc != nullptr, nullptr, "Allocate memory for binaryDesc failed.");
      42             : 
      43           5 :   binaryDesc->magic = 0U;
      44           5 :   binaryDesc->version = 0U;
      45           5 :   binaryDesc->data = data;
      46           5 :   binaryDesc->length = static_cast<uint64_t>(dataLen);
      47             : 
      48           5 :   ACL_ADD_APPLY_SUCCESS_COUNT(acl::ACL_STATISTICS_CREATE_DESTROY_ALLOCATOR_BINARY_DESC);
      49           5 :   return binaryDesc;
      50             : }
      51             : 
      52           6 : aclError aclrtDestroyBinaryImpl(aclrtBinary binary)
      53             : {
      54           6 :   ACL_ADD_RELEASE_TOTAL_COUNT(acl::ACL_STATISTICS_CREATE_DESTROY_ALLOCATOR_BINARY_DESC);
      55           6 :   ACL_LOG_INFO("start to execute aclrtDestroyBinary");
      56           6 :   ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(binary);
      57             : 
      58           5 :   delete reinterpret_cast<rtDevBinary_t *>(binary);
      59             : 
      60           5 :   ACL_ADD_RELEASE_SUCCESS_COUNT(acl::ACL_STATISTICS_CREATE_DESTROY_ALLOCATOR_BINARY_DESC);
      61           5 :   return ACL_SUCCESS;
      62             : }
      63             : 
      64           4 : aclError aclrtBinaryLoadImpl(const aclrtBinary binary, aclrtBinHandle *binHandle)
      65             : {
      66           4 :   ACL_ADD_APPLY_TOTAL_COUNT(acl::ACL_STATISTICS_LOAD_UNLOAD_BINARY);
      67           4 :   ACL_LOG_INFO("start to execute aclrtBinaryLoad");
      68           4 :   ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(binary);
      69           3 :   ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(binHandle);
      70           2 :   rtDevBinary_t *bin = reinterpret_cast<rtDevBinary_t *>(binary);
      71           2 :   const rtError_t rtErr = rtBinaryLoadWithoutTilingKey(bin->data, bin->length, binHandle);
      72           2 :   if (rtErr != RT_ERROR_NONE) {
      73           1 :     ACL_LOG_CALL_ERROR("rtBinaryLoad failed, runtime result = %d.", rtErr);
      74           1 :     return ACL_GET_ERRCODE_RTS(rtErr);
      75             :   }
      76             : 
      77           1 :   ACL_ADD_APPLY_SUCCESS_COUNT(acl::ACL_STATISTICS_LOAD_UNLOAD_BINARY);
      78           1 :   return ACL_SUCCESS;
      79             : }
      80             : 
      81           3 : aclError aclrtBinaryUnLoadImpl(aclrtBinHandle binHandle)
      82             : {
      83           3 :   ACL_ADD_RELEASE_TOTAL_COUNT(acl::ACL_STATISTICS_LOAD_UNLOAD_BINARY);
      84           3 :   ACL_LOG_INFO("start to execute aclrtBinaryUnLoad");
      85           3 :   ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(binHandle);
      86             : 
      87           2 :   const rtError_t rtErr = rtBinaryUnLoad(binHandle);
      88           2 :   if (rtErr != RT_ERROR_NONE) {
      89           1 :     ACL_LOG_CALL_ERROR("rtBinaryUnLoad failed, runtime result = %d.", rtErr);
      90           1 :     return ACL_GET_ERRCODE_RTS(rtErr);
      91             :   }
      92             : 
      93           1 :   ACL_ADD_RELEASE_SUCCESS_COUNT(acl::ACL_STATISTICS_LOAD_UNLOAD_BINARY);
      94           1 :   return ACL_SUCCESS;
      95             : }
      96             : 
      97           5 : aclError aclrtBinaryGetFunctionImpl(const aclrtBinHandle binHandle, const char *kernelName, aclrtFuncHandle *funcHandle)
      98             : {
      99           5 :   ACL_LOG_INFO("start to execute aclrtBinaryGetFunction");
     100           5 :   ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(binHandle);
     101           4 :   ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(kernelName);
     102           3 :   ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(funcHandle);
     103             : 
     104             :   // currently not support multi kernel, so tilingKey always use 0
     105           2 :   const rtError_t rtErr = rtsFuncGetByName(binHandle, kernelName, funcHandle);
     106           2 :   if (rtErr != RT_ERROR_NONE) {
     107           1 :     ACL_LOG_CALL_ERROR("rtBinaryGetFunction failed, runtime result = %d.", rtErr);
     108           1 :     return ACL_GET_ERRCODE_RTS(rtErr);
     109             :   }
     110             : 
     111           1 :   return ACL_SUCCESS;
     112             : }
     113             : 
     114           6 : aclError aclrtLaunchKernelImpl(aclrtFuncHandle funcHandle, uint32_t numBlocks, const void *argsData,
     115             :                                size_t argsSize, aclrtStream stream)
     116             : {
     117          12 :     ACL_PROFILING_REG(acl::AclProfType::AclrtLaunchKernel);
     118           6 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(funcHandle);
     119           5 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(argsData);
     120             : 
     121           4 :     rtArgsEx_t argsInfo = {};
     122           4 :     argsInfo.args = const_cast<void *>(argsData);
     123           4 :     argsInfo.argsSize = static_cast<uint32_t>(argsSize);
     124           4 :     argsInfo.isNoNeedH2DCopy = 1U;
     125             : 
     126           4 :     const rtError_t rtErr = rtLaunchKernelByFuncHandleV3(funcHandle, numBlocks, &argsInfo, stream, nullptr);
     127           4 :     if (rtErr != RT_ERROR_NONE) {
     128           2 :         if (rtErr == ACL_ERROR_RT_INVALID_HANDLE) {
     129           1 :             ACL_LOG_WARN("rtLaunchKernelByFuncHandleV3 funHandle is invalid, runtime result = %d.", rtErr);
     130           1 :             return ACL_ERROR_RT_INVALID_HANDLE;
     131             :         } else {
     132           1 :             ACL_LOG_CALL_ERROR("rtLaunchKernelByFuncHandleV3 failed, runtime result = %d.", rtErr);
     133           1 :             return ACL_GET_ERRCODE_RTS(rtErr);
     134             :         }
     135             :     }
     136           2 :   return ACL_SUCCESS;
     137             : }
     138             : 
     139           3 : aclError aclrtBinaryLoadFromFileImpl(const char* binPath, aclrtBinaryLoadOptions *options, aclrtBinHandle *binHandle)
     140             : {
     141           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtBinaryLoadFromFile);
     142           3 :     ACL_LOG_INFO("start to execute aclrtBinaryLoadFromFile, binPath[%s]", binPath);
     143           3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(binPath);
     144           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(binHandle);
     145           2 :     const rtLoadBinaryConfig_t *rt_options = nullptr;
     146           2 :     if (options != nullptr) {
     147           1 :        rt_options = reinterpret_cast<rtLoadBinaryConfig_t *>(options);
     148             :     }
     149           2 :     const auto rtErr = rtsBinaryLoadFromFile(binPath, rt_options, binHandle);
     150           2 :     if (rtErr != RT_ERROR_NONE) {
     151           1 :        ACL_LOG_CALL_ERROR("Binary load from file Failed, runtime result = %d", rtErr);
     152           1 :        return ACL_GET_ERRCODE_RTS(rtErr);
     153             :     }
     154           1 :     return ACL_SUCCESS;
     155             : }
     156             : 
     157           3 : aclError aclrtBinaryGetDevAddressImpl(const aclrtBinHandle binHandle, void **binAddr, size_t *binSize)
     158             : {
     159           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtBinaryGetDevAddress);
     160           3 :     ACL_LOG_INFO("start to execute aclrtBinaryGetDevAddress");
     161           3 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(binHandle);
     162           2 :     uint32_t tempBinSize = 0U;
     163             : 
     164           2 :     const auto rtErr = rtsBinaryGetDevAddress(binHandle, binAddr, &tempBinSize);
     165           2 :     if (rtErr != RT_ERROR_NONE) {
     166           1 :         ACL_LOG_INFO("get bin address failed, runtime result = %d", rtErr);
     167           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     168             :     }
     169           1 :     *binSize = static_cast<size_t>(tempBinSize);
     170           1 :     ACL_LOG_INFO("successfully execute aclrtBinaryGetDevAddress");
     171           1 :     return ACL_SUCCESS;
     172             : }
     173             : 
     174           3 : aclError aclrtBinaryGetFunctionByEntryImpl(aclrtBinHandle binHandle, uint64_t funcEntry, aclrtFuncHandle *funcHandle)
     175             : {
     176           3 :     ACL_LOG_INFO("start to execute aclrtBinaryGetFunctionByEntry");
     177           3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(binHandle);
     178           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(funcHandle);
     179             : 
     180           2 :     const auto rtErr = rtsFuncGetByEntry(binHandle, funcEntry, funcHandle);
     181           2 :     if (rtErr != RT_ERROR_NONE) {
     182           1 :        ACL_LOG_CALL_ERROR("Binary get function by entry Failed, runtime result = %d", rtErr);
     183           1 :        return ACL_GET_ERRCODE_RTS(rtErr);
     184             :     }
     185           1 :     return ACL_SUCCESS;
     186             : }
     187             : 
     188           3 : aclError aclrtGetFunctionAddrImpl(aclrtFuncHandle funcHandle, void **aicAddr, void **aivAddr)
     189             : {
     190           3 :     ACL_LOG_INFO("start to execute aclrtGetFunctionAddr");
     191           3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(funcHandle);
     192           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(aicAddr);
     193           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(aivAddr);
     194             : 
     195           2 :     const auto rtErr = rtsFuncGetAddr(funcHandle, aicAddr, aivAddr);
     196           2 :     if (rtErr != RT_ERROR_NONE) {
     197           1 :        ACL_LOG_CALL_ERROR("Get function addr Failed, runtime result = %d", rtErr);
     198           1 :        return ACL_GET_ERRCODE_RTS(rtErr);
     199             :     }
     200           1 :     return ACL_SUCCESS;
     201             : }
     202             : 
     203           6 : aclError aclrtLaunchKernelWithConfigImpl(aclrtFuncHandle funcHandle, uint32_t numBlocks, aclrtStream stream,
     204             :                                          aclrtLaunchKernelCfg *cfg, aclrtArgsHandle argsHandle, void *reserve)
     205             : {
     206          12 :     ACL_PROFILING_REG(acl::AclProfType::AclrtLaunchKernelWithConfig);
     207           6 :     ACL_LOG_INFO("Start to execute aclrtLaunchKernelWithConfig");
     208           6 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(funcHandle);
     209           5 :     ACL_REQUIRES_POSITIVE_WITH_INPUT_REPORT(numBlocks);
     210           4 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(argsHandle);
     211           3 :     if (reserve != nullptr) {
     212           0 :         ACL_LOG_ERROR("[Check][reserve]param is reserved and only support currently nullptr.");
     213           0 :         return ACL_ERROR_INVALID_PARAM;
     214             :     }
     215             : 
     216           3 :     rtKernelLaunchCfg_t *rt_cfg = nullptr;
     217           3 :     if (cfg != nullptr ) {
     218           1 :         rt_cfg = reinterpret_cast<rtKernelLaunchCfg_t *>(cfg);
     219             :     }
     220           3 :     const auto rtErr = rtsLaunchKernelWithConfig(funcHandle, numBlocks, stream, rt_cfg, argsHandle, reserve);
     221           3 :     if (rtErr != RT_ERROR_NONE) {
     222           2 :         if (rtErr == ACL_ERROR_RT_INVALID_HANDLE) {
     223           1 :             ACL_LOG_WARN("Launch kernel with config funHandle is invalid, runtime result = %d.", rtErr);
     224           1 :             return ACL_ERROR_RT_INVALID_HANDLE;
     225             :         } else {
     226           1 :             ACL_LOG_CALL_ERROR("Launch kernel with config failed, runtime result = %d.", rtErr);
     227           1 :             return ACL_GET_ERRCODE_RTS(rtErr);
     228             :         }
     229             :     }
     230           1 :     return ACL_SUCCESS;
     231             : }
     232             : 
     233           3 : aclError aclrtKernelArgsInitImpl(aclrtFuncHandle funcHandle, aclrtArgsHandle *argsHandle)
     234             : {
     235           3 :     ACL_LOG_INFO("Start to execute aclrtKernelArgsInit");
     236           3 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(funcHandle);
     237           2 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(argsHandle);
     238             : 
     239           2 :     const auto rtErr = rtsKernelArgsInit(funcHandle, argsHandle);
     240           2 :     if (rtErr != RT_ERROR_NONE) {
     241           1 :         ACL_LOG_CALL_ERROR("Initialize kernel args Failed, runtime result = %d", rtErr);
     242           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     243             :     }
     244           1 :     return ACL_SUCCESS;
     245             : }
     246             : 
     247           6 : aclError aclrtKernelArgsInitByUserMemImpl(aclrtFuncHandle funcHandle, aclrtArgsHandle argsHandle, void *userHostMem,
     248             :                                           size_t actualArgsSize)
     249             : {
     250           6 :     ACL_LOG_INFO("Start to execute aclrtKernelArgsInitByUserMem");
     251           6 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(funcHandle);
     252           5 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(argsHandle);
     253           4 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(userHostMem);
     254           3 :     ACL_REQUIRES_POSITIVE_WITH_INPUT_REPORT(actualArgsSize);
     255             : 
     256           2 :     const auto rtErr = rtsKernelArgsInitByUserMem(funcHandle, argsHandle, userHostMem, actualArgsSize);
     257           2 :     if (rtErr != RT_ERROR_NONE) {
     258           1 :         ACL_LOG_CALL_ERROR("Initialize kernel args by user mem Failed, runtime result = %d", rtErr);
     259           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     260             :     }
     261           1 :     return ACL_SUCCESS;
     262             : }
     263             : 
     264           3 : aclError aclrtKernelArgsGetMemSizeImpl(aclrtFuncHandle funcHandle, size_t userArgsSize, size_t *actualArgsSize)
     265             : {
     266           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtKernelArgsGetMemSize);
     267           3 :     ACL_LOG_INFO("Start to execute aclrtKernelArgsGetMemSize");
     268           3 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(funcHandle);
     269           2 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(actualArgsSize);
     270             : 
     271           2 :     const auto rtErr = rtsKernelArgsGetMemSize(funcHandle, userArgsSize, actualArgsSize);
     272           2 :     if (rtErr != RT_ERROR_NONE) {
     273           1 :         ACL_LOG_CALL_ERROR("Get kernel args mem size Failed, runtime result = %d", rtErr);
     274           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     275             :     }
     276           1 :     return ACL_SUCCESS;
     277             : }
     278             : 
     279           3 : aclError aclrtKernelArgsGetHandleMemSizeImpl(aclrtFuncHandle funcHandle, size_t *memSize)
     280             : {
     281           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtKernelArgsGetHandleMemSize);
     282           3 :     ACL_LOG_INFO("Start to execute aclrtKernelArgsGetHandleMemSize");
     283           3 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(funcHandle);
     284           2 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(memSize);
     285             : 
     286           2 :     const auto rtErr = rtsKernelArgsGetHandleMemSize(funcHandle, memSize);
     287           2 :     if (rtErr != RT_ERROR_NONE) {
     288           1 :         ACL_LOG_CALL_ERROR("Get kernel args handle mem size Failed, runtime result = %d", rtErr);
     289           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     290             :     }
     291           1 :     return ACL_SUCCESS;
     292             : }
     293             : 
     294           5 : aclError aclrtKernelArgsAppendImpl(aclrtArgsHandle argsHandle, void *param, size_t paramSize,
     295             :                                    aclrtParamHandle *paramHandle)
     296             : {
     297          10 :     ACL_PROFILING_REG(acl::AclProfType::AclrtKernelArgsAppend);
     298           5 :     ACL_LOG_INFO("Start to execute aclrtKernelArgsAppend");
     299           5 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(argsHandle);
     300           4 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(param);
     301           3 :     ACL_REQUIRES_POSITIVE_WITH_INPUT_REPORT(paramSize);
     302           2 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(paramHandle);
     303             : 
     304           2 :     const auto rtErr = rtsKernelArgsAppend(argsHandle, param, paramSize, paramHandle);
     305           2 :     if (rtErr != RT_ERROR_NONE) {
     306           1 :         ACL_LOG_CALL_ERROR("Append kernel args Failed, runtime result = %d", rtErr);
     307           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     308             :     }
     309           1 :     return ACL_SUCCESS;
     310             : }
     311             : 
     312           3 : aclError aclrtKernelArgsAppendPlaceHolderImpl(aclrtArgsHandle argsHandle, aclrtParamHandle *paramHandle)
     313             : {
     314           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtKernelArgsAppendPlaceHolder);
     315           3 :     ACL_LOG_INFO("Start to execute aclrtKernelArgsAppendPlaceHolder");
     316           3 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(argsHandle);
     317           2 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(paramHandle);
     318             : 
     319           2 :     const auto rtErr = rtsKernelArgsAppendPlaceHolder(argsHandle, paramHandle);
     320           2 :     if (rtErr != RT_ERROR_NONE) {
     321           1 :         ACL_LOG_CALL_ERROR("Append kernel args placeholder Failed, runtime result = %d", rtErr);
     322           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     323             :     }
     324           1 :     return ACL_SUCCESS;
     325             : }
     326             : 
     327           5 : aclError aclrtKernelArgsGetPlaceHolderBufferImpl(aclrtArgsHandle argsHandle, aclrtParamHandle paramHandle,
     328             :                                                  size_t dataSize, void **bufferAddr)
     329             : {
     330          10 :     ACL_PROFILING_REG(acl::AclProfType::AclrtKernelArgsGetPlaceHolderBuffer);
     331           5 :     ACL_LOG_INFO("Start to execute aclrtKernelArgsGetPlaceHolderBuffer");
     332           5 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(argsHandle);
     333           4 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(paramHandle);
     334           3 :     ACL_REQUIRES_POSITIVE_WITH_INPUT_REPORT(dataSize);
     335           2 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(bufferAddr);
     336             : 
     337           2 :     const auto rtErr = rtsKernelArgsGetPlaceHolderBuffer(argsHandle, paramHandle, dataSize, bufferAddr);
     338           2 :     if (rtErr != RT_ERROR_NONE) {
     339           1 :         ACL_LOG_CALL_ERROR("Get kernel args placeholder buffer Failed, runtime result = %d", rtErr);
     340           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     341             :     }
     342           1 :     return ACL_SUCCESS;
     343             : }
     344             : 
     345           6 : aclError aclrtKernelArgsParaUpdateImpl(aclrtArgsHandle argsHandle, aclrtParamHandle paramHandle, void *param,
     346             :                                        size_t paramSize)
     347             : {
     348          12 :     ACL_PROFILING_REG(acl::AclProfType::AclrtKernelArgsParaUpdate);
     349           6 :     ACL_LOG_INFO("Start to execute aclrtKernelArgsParaUpdate");
     350           6 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(argsHandle);
     351           5 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(paramHandle);
     352           4 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(param);
     353           3 :     ACL_REQUIRES_POSITIVE_WITH_INPUT_REPORT(paramSize);
     354             : 
     355           2 :     const auto rtErr = rtsKernelArgsParaUpdate(argsHandle, paramHandle, param, paramSize);
     356           2 :     if (rtErr != RT_ERROR_NONE) {
     357           1 :         ACL_LOG_CALL_ERROR("Update kernel args placeholder Failed, runtime result = %d", rtErr);
     358           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     359             :     }
     360           1 :     return ACL_SUCCESS;
     361             : }
     362             : 
     363           2 : aclError aclrtKernelArgsFinalizeImpl(aclrtArgsHandle argsHandle)
     364             : {
     365           2 :     ACL_LOG_INFO("Start to execute aclrtKernelArgsFinalize");
     366           2 :     ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT(argsHandle);
     367             : 
     368           2 :     const auto rtErr = rtsKernelArgsFinalize(argsHandle);
     369           2 :     if (rtErr != RT_ERROR_NONE) {
     370           1 :         ACL_LOG_CALL_ERROR("Finalize kernel args Failed, runtime result = %d", rtErr);
     371           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     372             :     }
     373           1 :     return ACL_SUCCESS;
     374             : }
     375             : 
     376           2 : aclError aclrtGetThreadLastTaskIdImpl(uint32_t *taskId)
     377             : {
     378           4 :     ACL_PROFILING_REG(acl::AclProfType::AclrtGetThreadLastTaskId);
     379           2 :     ACL_LOG_DEBUG("start to execute aclrtGetThreadLastTaskId");
     380           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(taskId);
     381           2 :     const rtError_t rtErr = rtsGetThreadLastTaskId(taskId);
     382           2 :     if (rtErr != RT_ERROR_NONE) {
     383           1 :         ACL_LOG_CALL_ERROR("call rtsGetThreadLastTaskId failed, runtime result = %d", rtErr);
     384           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     385             :     }
     386           1 :     return ACL_SUCCESS;
     387             : }
     388             : 
     389           4 : aclError aclrtGetFunctionNameImpl(aclrtFuncHandle funcHandle, uint32_t maxLen, char *name)
     390             : {
     391           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtGetFunctionName);
     392           4 :     ACL_LOG_DEBUG("start to execute aclrtGetFunctionName, maxLen is [%u]", maxLen);
     393           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(name);
     394           2 :     const rtError_t rtErr = rtsFuncGetName(static_cast<rtFuncHandle>(funcHandle), maxLen, name);
     395           2 :     if (rtErr != RT_ERROR_NONE) {
     396           1 :         ACL_LOG_CALL_ERROR("call rtsFuncGetName failed, runtime result = %d", rtErr);
     397           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     398             :     }
     399           1 :     return ACL_SUCCESS;
     400             : }
     401             : 
     402           4 : aclError aclrtBinaryLoadFromDataImpl(const void *data, size_t length,
     403             :     const aclrtBinaryLoadOptions *options, aclrtBinHandle *binHandle)
     404             : {
     405           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtBinaryLoadFromData);
     406           4 :     ACL_LOG_DEBUG("start to execute aclrtBinaryLoadFromData, length is [%zu]", length);
     407           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(data);
     408           3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(binHandle);
     409           2 :     const rtError_t rtErr = rtsBinaryLoadFromData(data, length,
     410             :         reinterpret_cast<const rtLoadBinaryConfig_t*>(options), static_cast<rtBinHandle*>(binHandle));
     411           2 :     if (rtErr != RT_ERROR_NONE) {
     412           1 :         ACL_LOG_CALL_ERROR("call rtsBinaryLoadFromData failed, runtime result = %d", rtErr);
     413           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     414             :     }
     415           1 :     return ACL_SUCCESS;
     416             : }
     417             : 
     418           6 : aclError aclrtRegisterCpuFuncImpl(const aclrtBinHandle handle, const char *funcName,
     419             :     const char *kernelName, aclrtFuncHandle *funcHandle)
     420             : {
     421          12 :     ACL_PROFILING_REG(acl::AclProfType::AclrtRegisterCpuFunc);
     422           6 :     ACL_LOG_DEBUG("start to execute aclrtRegisterCpuFunc");
     423           6 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(handle);
     424           5 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(funcName);
     425           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(kernelName);
     426           3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(funcHandle);
     427           2 :     const rtError_t rtErr = rtsRegisterCpuFunc(static_cast<rtBinHandle>(handle), funcName, kernelName,
     428             :         static_cast<rtFuncHandle*>(funcHandle));
     429           2 :     if (rtErr != RT_ERROR_NONE) {
     430           1 :         ACL_LOG_CALL_ERROR("call rtsRegisterCpuFunc failed, runtime result = %d", rtErr);
     431           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     432             :     }
     433           1 :     return ACL_SUCCESS;
     434             : }
     435             : 
     436           5 : aclError aclrtCmoWaitBarrierImpl(aclrtBarrierTaskInfo *taskInfo, aclrtStream stream, uint32_t flag)
     437             : {
     438          10 :     ACL_PROFILING_REG(acl::AclProfType::AclrtCmoWaitBarrier);
     439           5 :     ACL_LOG_DEBUG("start to execute aclrtCmoWaitBarrier, flag is [%u]", flag);
     440           5 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(taskInfo);
     441           4 :     if ((taskInfo->barrierNum == 0U) || (taskInfo->barrierNum > ACL_RT_CMO_MAX_BARRIER_NUM)) {
     442           2 :         ACL_LOG_ERROR("[Check][taskInfo]param taskInfo is invalid, taskInfo->barrierNum must be in range (0, 6]");
     443           2 :         return ACL_ERROR_INVALID_PARAM;
     444             :     }
     445           2 :     rtBarrierTaskInfo_t rtTaskInfo;
     446           2 :     rtTaskInfo.logicIdNum = taskInfo->barrierNum;
     447           4 :     for (size_t i = 0U; i < taskInfo->barrierNum; i++) {
     448           2 :         rtTaskInfo.cmoInfo[i].cmoType = static_cast<uint16_t>(taskInfo->cmoInfo[i].cmoType) +
     449             :             (static_cast<uint16_t>(RT_CMO_PREFETCH) - static_cast<uint16_t>(ACL_RT_CMO_TYPE_PREFETCH));
     450           2 :         rtTaskInfo.cmoInfo[i].logicId = taskInfo->cmoInfo[i].barrierId;
     451             :     }
     452           2 :     const rtError_t rtErr = rtsLaunchBarrierTask(&rtTaskInfo, static_cast<rtStream_t>(stream), flag);
     453           2 :     if (rtErr != RT_ERROR_NONE) {
     454           1 :         ACL_LOG_CALL_ERROR("call rtsLaunchBarrierTask failed, runtime result = %d", rtErr);
     455           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     456             :     }
     457           1 :     return ACL_SUCCESS;
     458             : }
     459             : 
     460           6 : aclError aclrtLaunchKernelV2Impl(aclrtFuncHandle funcHandle, uint32_t numBlocks, const void *argsData,
     461             :                                  size_t argsSize, aclrtLaunchKernelCfg *cfg, aclrtStream stream)
     462             : {
     463          12 :     ACL_PROFILING_REG(acl::AclProfType::AclrtLaunchKernelV2);
     464           6 :     ACL_LOG_INFO("Start to execute aclrtLaunchKernelV2");
     465           6 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(funcHandle);
     466           5 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(argsData);
     467             : 
     468           4 :     rtKernelLaunchCfg_t *rt_cfg = nullptr;
     469           4 :     if (cfg != nullptr ) {
     470           1 :         rt_cfg = reinterpret_cast<rtKernelLaunchCfg_t *>(cfg);
     471             :     }
     472             : 
     473           4 :     const rtError_t rtErr = rtsLaunchKernelWithDevArgs(funcHandle, numBlocks, stream, rt_cfg,
     474             :         argsData, static_cast<uint32_t>(argsSize), nullptr);
     475           4 :     if (rtErr != RT_ERROR_NONE) {
     476           2 :         if (rtErr == ACL_ERROR_RT_INVALID_HANDLE) {
     477           1 :             ACL_LOG_WARN("rtsLaunchKernelWithDevArgs funHandle is invalid, runtime result = %d.", rtErr);
     478           1 :             return ACL_ERROR_RT_INVALID_HANDLE;
     479             :         } else {
     480           1 :             ACL_LOG_CALL_ERROR("rtsLaunchKernelWithDevArgs failed, runtime result = %d.", rtErr);
     481           1 :             return ACL_GET_ERRCODE_RTS(rtErr);
     482             :         }
     483             :     }
     484             : 
     485           2 :     return ACL_SUCCESS;
     486             : }
     487             : 
     488           6 : aclError aclrtLaunchKernelWithHostArgsImpl(aclrtFuncHandle funcHandle, uint32_t numBlocks, aclrtStream stream,
     489             :                                            aclrtLaunchKernelCfg *cfg, void *hostArgs, size_t argsSize,
     490             :                                            aclrtPlaceHolderInfo *placeHolderArray, size_t placeHolderNum)
     491             : {
     492          12 :     ACL_PROFILING_REG(acl::AclProfType::AclrtLaunchKernelWithHostArgs);
     493           6 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(funcHandle);
     494           5 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(hostArgs);
     495             : 
     496           4 :     rtKernelLaunchCfg_t *rt_cfg = nullptr;
     497           4 :     rtPlaceHolderInfo_t *rt_placeHolderArray = nullptr;
     498           4 :     if (cfg != nullptr ) {
     499           1 :         rt_cfg = reinterpret_cast<rtKernelLaunchCfg_t *>(cfg);
     500             :     }
     501             : 
     502           4 :     if (placeHolderArray != nullptr ) {
     503           1 :         rt_placeHolderArray = reinterpret_cast<rtPlaceHolderInfo_t *>(placeHolderArray);
     504             :     }
     505             : 
     506           4 :     const rtError_t rtErr = rtsLaunchKernelWithHostArgs(funcHandle, numBlocks, stream, rt_cfg,
     507             :         hostArgs, static_cast<uint32_t>(argsSize), rt_placeHolderArray, placeHolderNum);
     508           4 :     if (rtErr != RT_ERROR_NONE) {
     509           2 :         if (rtErr == ACL_ERROR_RT_INVALID_HANDLE) {
     510           1 :             ACL_LOG_WARN("rtsLaunchKernelWithHostArgs funHandle is invalid, runtime result = %d.", rtErr);
     511           1 :             return ACL_ERROR_RT_INVALID_HANDLE;
     512             :         } else {
     513           1 :             ACL_LOG_CALL_ERROR("rtsLaunchKernelWithHostArgs failed, runtime result = %d.", rtErr);
     514           1 :             return ACL_GET_ERRCODE_RTS(rtErr);
     515             :         }
     516             :     }
     517             : 
     518           2 :     return ACL_SUCCESS;
     519             : }
     520             : 
     521           2 : aclError aclrtGetFloatOverflowStatusImpl(void *outputAddr, uint64_t outputSize, aclrtStream stream)
     522             : {
     523           4 :     ACL_PROFILING_REG(acl::AclProfType::AclrtGetFloatOverflowStatus);
     524           2 :     ACL_LOG_INFO("start to execute aclrtGetFloatOverflowStatus, outputSize = %lu", outputSize);
     525           2 :     const rtError_t rtErr = rtsGetFloatOverflowStatus(outputAddr, outputSize, static_cast<rtStream_t>(stream));
     526           2 :     if (rtErr != RT_ERROR_NONE) {
     527           1 :         ACL_LOG_CALL_ERROR("rtsGetFloatOverflowStatus failed, runtime result = %d.", static_cast<int32_t>(rtErr));
     528           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     529             :     }
     530           1 :     ACL_LOG_INFO("successfully execute aclrtGetFloatOverflowStatus");
     531           1 :     return ACL_SUCCESS;
     532             : }
     533             : 
     534           2 : aclError aclrtResetFloatOverflowStatusImpl(aclrtStream stream)
     535             : {
     536           4 :     ACL_PROFILING_REG(acl::AclProfType::AclrtResetFloatOverflowStatus);
     537           2 :     ACL_LOG_INFO("start to execute aclrtResetFloatOverflowStatus");
     538           2 :     const rtError_t rtErr = rtsResetFloatOverflowStatus(static_cast<rtStream_t>(stream));
     539           2 :     if (rtErr != RT_ERROR_NONE) {
     540           1 :         ACL_LOG_CALL_ERROR("rtsResetFloatOverflowStatus failed, runtime result = %d.", static_cast<int32_t>(rtErr));
     541           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     542             :     }
     543           1 :     ACL_LOG_INFO("successfully execute aclrtResetFloatOverflowStatus");
     544           1 :     return ACL_SUCCESS;
     545             : }
     546             : 
     547           2 : aclError aclrtNpuGetFloatOverFlowStatusImpl(void *outputAddr, uint64_t outputSize, uint32_t checkMode, aclrtStream stream)
     548             : {
     549           4 :     ACL_PROFILING_REG(acl::AclProfType::AclrtNpuGetFloatOverFlowStatus);
     550           2 :     ACL_LOG_INFO("start to execute aclrtNpuGetFloatOverFlowStatus, outputSize = %lu", outputSize);
     551           2 :     const rtError_t rtErr = rtsNpuGetFloatOverFlowStatus(outputAddr, outputSize, checkMode, static_cast<rtStream_t>(stream));
     552           2 :     if (rtErr != RT_ERROR_NONE) {
     553           1 :         ACL_LOG_CALL_ERROR("rtsNpuGetFloatOverFlowStatus failed, runtime result = %d.", static_cast<int32_t>(rtErr));
     554           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     555             :     }
     556           1 :     ACL_LOG_INFO("successfully execute aclrtNpuGetFloatOverFlowStatus");
     557           1 :     return ACL_SUCCESS;
     558             : }
     559             : 
     560           2 : aclError aclrtNpuClearFloatOverFlowStatusImpl(uint32_t checkMode, aclrtStream stream)
     561             : {
     562           4 :     ACL_PROFILING_REG(acl::AclProfType::AclrtNpuClearFloatOverFlowStatus);
     563           2 :     ACL_LOG_INFO("start to execute aclrtNpuClearFloatOverFlowStatus");
     564           2 :     const rtError_t rtErr = rtsNpuClearFloatOverFlowStatus(checkMode, static_cast<rtStream_t>(stream));
     565           2 :     if (rtErr != RT_ERROR_NONE) {
     566           1 :         ACL_LOG_CALL_ERROR("rtsNpuClearFloatOverFlowStatus failed, runtime result = %d.", static_cast<int32_t>(rtErr));
     567           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     568             :     }
     569           1 :     ACL_LOG_INFO("successfully execute aclrtNpuClearFloatOverFlowStatus");
     570           1 :     return ACL_SUCCESS;
     571             : }
     572             : 
     573           2 : aclError aclrtGetHardwareSyncAddrImpl(void **addr)
     574             : {
     575           4 :     ACL_PROFILING_REG(acl::AclProfType::AclrtGetHardwareSyncAddr);
     576           2 :     const rtError_t rtErr = rtsGetHardwareSyncAddr(addr);
     577           2 :     if (rtErr != RT_ERROR_NONE) {
     578           1 :         ACL_LOG_CALL_ERROR("call rtsGetHardwareSyncAddr failed, runtime result = %d.", static_cast<int32_t>(rtErr));
     579           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     580             :     }
     581           1 :     return ACL_SUCCESS;
     582             : }
     583             : 
     584           4 : aclError aclrtRandomNumAsyncImpl(const aclrtRandomNumTaskInfo *taskInfo, const aclrtStream stream, void *reserve)
     585             : {
     586           8 :     ACL_PROFILING_REG(acl::AclProfType::AclrtRandomNumAsync);
     587           4 :     ACL_LOG_INFO("start to execute aclrtRandomNumAsync");
     588           4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(taskInfo);
     589           3 :     aclDataType type = taskInfo->dataType;
     590           3 :     if (kMapDataType.count(type) == 0) {
     591           1 :          ACL_LOG_ERROR("[Check][param]param dataType [%d] is invalid.", static_cast<int32_t>(type));
     592           1 :         return ACL_ERROR_INVALID_PARAM;
     593             :     }
     594           2 :     rtRandomNumTaskInfo_t *rtTaskInfo = const_cast<rtRandomNumTaskInfo_t *>(reinterpret_cast<const rtRandomNumTaskInfo_t *>(taskInfo));
     595           2 :     rtTaskInfo->dataType = kMapDataType.at(type);
     596           2 :     const rtError_t rtErr = rtsLaunchRandomNumTask(
     597             :         rtTaskInfo,
     598             :         static_cast<rtStream_t>(stream), reserve);
     599           2 :     if (rtErr != RT_ERROR_NONE) {
     600           1 :       ACL_LOG_CALL_ERROR(
     601             :           "call rtsLaunchRandomNumTask failed, runtime result = %d.",
     602             :           static_cast<int32_t>(rtErr));
     603           1 :       return ACL_GET_ERRCODE_RTS(rtErr);
     604             :     }
     605           1 :     ACL_LOG_INFO("successfully execute aclrtRandomNumAsync");
     606           1 :     return ACL_SUCCESS;
     607             : }
     608             : 
     609           7 : aclError aclrtTaskUpdateAsyncImpl(aclrtStream taskStream, uint32_t taskId, aclrtTaskUpdateInfo *info, aclrtStream execStream)
     610             : {
     611          14 :     ACL_PROFILING_REG(acl::AclProfType::AclrtTaskUpdateAsync);
     612           7 :     ACL_LOG_INFO("start to execute aclrtTaskUpdateAsync");
     613           7 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(info);
     614             :     const rtError_t rtErr =
     615           6 :         rtsLaunchUpdateTask(static_cast<rtStream_t>(taskStream), taskId,
     616             :                             static_cast<rtStream_t>(execStream),
     617             :                             reinterpret_cast<rtTaskUpdateCfg_t *>(info));
     618           6 :     if (rtErr != RT_ERROR_NONE) {
     619           1 :       ACL_LOG_CALL_ERROR(
     620             :           "call rtsLaunchUpdateTask failed, runtime result = %d.",
     621             :           static_cast<int32_t>(rtErr));
     622           1 :       return ACL_GET_ERRCODE_RTS(rtErr);
     623             :     }
     624           5 :     ACL_LOG_INFO("successfully execute aclrtTaskUpdateAsync");
     625           5 :     return ACL_SUCCESS;
     626             : }
     627             : 
     628           5 : aclError aclrtCacheLastTaskOpInfoImpl(const void * const infoPtr, const size_t infoSize)
     629             : {
     630          10 :     ACL_PROFILING_REG(acl::AclProfType::AclrtCacheLastTaskOpInfo);
     631           5 :     ACL_LOG_INFO("start to execute aclrtCacheLastTaskOpInfo");
     632           5 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(infoPtr);
     633           4 :     ACL_REQUIRES_POSITIVE_WITH_INPUT_REPORT(infoSize);
     634             : 
     635           3 :     const rtError_t rtErr = rtCacheLastTaskOpInfo(infoPtr, infoSize);
     636           3 :     if (rtErr != RT_ERROR_NONE) {
     637           2 :         if (rtErr == ACL_ERROR_RT_FEATURE_NOT_SUPPORT) {
     638           1 :             ACL_LOG_WARN("rtCacheLastTaskOpInfo unsupport, runtime result = %d", static_cast<int32_t>(rtErr));
     639             :         } else {
     640           1 :             ACL_LOG_CALL_ERROR("call rtCacheLastTaskOpInfo failed, runtime result = %d.", static_cast<int32_t>(rtErr));
     641             :         }
     642           2 :         return ACL_GET_ERRCODE_RTS(rtErr);
     643             :     }
     644           1 :     ACL_LOG_INFO("successfully execute aclrtCacheLastTaskOpInfo");
     645           1 :     return ACL_SUCCESS;
     646             : }
     647             : 
     648           3 : aclError aclrtGetFunctionAttributeImpl(aclrtFuncHandle funcHandle, aclrtFuncAttribute attrType, int64_t *attrValue)
     649             : {
     650           6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtGetFunctionAttribute);
     651           3 :     ACL_LOG_INFO("start to execute aclrtGetFunctionAttribute");
     652           3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(funcHandle);
     653           2 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(attrValue);
     654             : 
     655           1 :     const rtError_t rtErr = rtFunctionGetAttribute(funcHandle, static_cast<rtFuncAttribute>(attrType), attrValue);
     656           1 :     if (rtErr != RT_ERROR_NONE) {
     657           1 :         ACL_LOG_CALL_ERROR("call rtFunctionGetAttribute failed, runtime result = %d.", static_cast<int32_t>(rtErr));
     658           1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     659             :     }
     660             : 
     661           0 :     ACL_LOG_INFO("successfully execute aclrtGetFunctionAttribute");
     662           0 :     return ACL_SUCCESS;
     663             : }

Generated by: LCOV version 1.14