LCOV - code coverage report
Current view: top level - acl/aclrt_impl - context.cpp (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 118 118
Test Date: 2026-07-28 10:53:01 Functions: 100.0 % 15 15

            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 "acl_rt_impl_base.h"
      13              : 
      14              : #include "runtime/context.h"
      15              : #include "runtime/rts/rts_context.h"
      16              : #include "runtime/dev.h"
      17              : #include "runtime/config.h"
      18              : 
      19              : #include "common/log_inner.h"
      20              : #include "common/error_codes_inner.h"
      21              : #include "common/prof_reporter.h"
      22              : #include "common/resource_statistics.h"
      23              : #include "utils/data_type_utils.h"
      24              : 
      25              : #ifdef __cplusplus
      26              : extern "C" {
      27              : #endif
      28              : 
      29            7 : aclError aclrtCreateContextImpl(aclrtContext* context, int32_t deviceId)
      30              : {
      31            7 :     ACL_PROFILING_REG(acl::AclProfType::AclrtCreateContext);
      32            7 :     ACL_ADD_APPLY_TOTAL_COUNT(acl::ACL_STATISTICS_CREATE_DESTROY_CONTEXT);
      33            7 :     ACL_LOG_INFO("start to execute aclrtCreateContext, device is %d.", deviceId);
      34            7 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(context);
      35              : 
      36            5 :     rtContext_t rtCtx = nullptr;
      37            5 :     ACL_REQUIRES_RTS_OK(rtCtxCreateEx(&rtCtx, static_cast<uint32_t>(RT_CTX_NORMAL_MODE), deviceId));
      38            3 :     ACL_LOG_INFO("successfully execute aclrtCreateContext, device is %d.", deviceId);
      39            3 :     *context = static_cast<aclrtContext>(rtCtx);
      40            3 :     ACL_ADD_APPLY_SUCCESS_COUNT(acl::ACL_STATISTICS_CREATE_DESTROY_CONTEXT);
      41              : 
      42              :     // update platform info
      43            3 :     const auto err = acl::UpdatePlatformInfoWithDevice(deviceId);
      44            3 :     if (err != ACL_SUCCESS) {
      45            1 :         ACL_LOG_WARN("update platform info with device failed, error code is [%d], deviceId is [%d]", err, deviceId);
      46              :     }
      47            3 :     return ACL_SUCCESS;
      48            7 : }
      49              : 
      50            6 : aclError aclrtDestroyContextImpl(aclrtContext context)
      51              : {
      52            6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtDestroyContext);
      53            6 :     ACL_ADD_RELEASE_TOTAL_COUNT(acl::ACL_STATISTICS_CREATE_DESTROY_CONTEXT);
      54            6 :     ACL_LOG_INFO("start to execute aclrtDestroyContext.");
      55            6 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(context);
      56              : 
      57            4 :     ACL_REQUIRES_RTS_OK(rtCtxDestroyEx(static_cast<rtContext_t>(context)));
      58            2 :     ACL_LOG_INFO("successfully execute aclrtDestroyContext");
      59            2 :     ACL_ADD_RELEASE_SUCCESS_COUNT(acl::ACL_STATISTICS_CREATE_DESTROY_CONTEXT);
      60            2 :     return ACL_SUCCESS;
      61            6 : }
      62              : 
      63            6 : aclError aclrtSetCurrentContextImpl(aclrtContext context)
      64              : {
      65            6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtSetCurrentContext);
      66            6 :     ACL_LOG_INFO("start to execute aclrtSetCurrentContext.");
      67            6 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(context);
      68              : 
      69            4 :     ACL_REQUIRES_RTS_OK(rtCtxSetCurrent(static_cast<rtContext_t>(context)));
      70            2 :     ACL_LOG_INFO("successfully execute aclrtSetCurrentContext");
      71            2 :     return ACL_SUCCESS;
      72            6 : }
      73              : 
      74            6 : aclError aclrtGetCurrentContextImpl(aclrtContext* context)
      75              : {
      76            6 :     ACL_PROFILING_REG(acl::AclProfType::AclrtGetCurrentContext);
      77            6 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(context);
      78              : 
      79            4 :     rtContext_t rtCtx = nullptr;
      80            4 :     const rtError_t rtErr = rtCtxGetCurrent(&rtCtx);
      81            4 :     if (rtErr != RT_ERROR_NONE) {
      82            2 :         ACL_LOG_INFO("Cannot get current context, runtime errorCode is %d", static_cast<int32_t>(rtErr));
      83            2 :         return ACL_GET_ERRCODE_RTS(rtErr);
      84              :     }
      85              : 
      86            2 :     *context = rtCtx;
      87            2 :     return ACL_SUCCESS;
      88            6 : }
      89              : 
      90           10 : static aclError GetSysParamOpt(aclSysParamOpt opt, int64_t* value, bool isCtx)
      91              : {
      92           10 :     constexpr aclSysParamOpt OPT_STRONG_CONSISTENCY = static_cast<aclSysParamOpt>(2);
      93           10 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT_AND_FUNC_DESC(
      94              :         value, "Obtaining system parameter values from the current context");
      95           14 :     ACL_CHECK_INVALID_VALUE_WITH_DESC_AND_FUNC_DESC(
      96              :         (opt == ACL_OPT_DETERMINISTIC || opt == ACL_OPT_ENABLE_DEBUG_KERNEL || opt == OPT_STRONG_CONSISTENCY),
      97              :         acl::GetSysParamOptDesc(opt), "opt",
      98              :         "ACL_OPT_DETERMINISTIC(0) or ACL_OPT_ENABLE_DEBUG_KERNEL(1) or ACL_OPT_STRONG_CONSISTENCY(2)",
      99              :         ACL_ERROR_INVALID_PARAM, "Obtaining system parameter values from the current context");
     100            6 :     rtError_t rtErr = RT_ERROR_NONE;
     101            6 :     if (isCtx) {
     102            3 :         rtErr = rtCtxGetSysParamOpt(static_cast<rtSysParamOpt>(opt), value);
     103              :     } else {
     104            3 :         rtErr = rtGetSysParamOpt(static_cast<rtSysParamOpt>(opt), value);
     105              :     }
     106              : 
     107            6 :     if (rtErr != RT_ERROR_NONE) {
     108            4 :         if (rtErr == ACL_ERROR_RT_SYSPARAMOPT_NOT_SET) {
     109            2 :             ACL_LOG_WARN(
     110              :                 "option %d is not set, runtime errorCode is %d", static_cast<int32_t>(opt),
     111              :                 static_cast<int32_t>(rtErr));
     112              :         }
     113            4 :         return ACL_GET_ERRCODE_RTS(rtErr);
     114              :     }
     115            2 :     return ACL_SUCCESS;
     116              : }
     117              : 
     118           24 : static aclError SetSysParamOpt(aclSysParamOpt opt, int64_t value, bool isCtx)
     119              : {
     120           24 :     constexpr aclSysParamOpt OPT_STRONG_CONSISTENCY = static_cast<aclSysParamOpt>(2);
     121           42 :     ACL_CHECK_INVALID_VALUE_WITH_DESC_AND_FUNC_DESC(
     122              :         (opt == ACL_OPT_DETERMINISTIC || opt == ACL_OPT_ENABLE_DEBUG_KERNEL || opt == OPT_STRONG_CONSISTENCY),
     123              :         acl::GetSysParamOptDesc(opt), "opt",
     124              :         "ACL_OPT_DETERMINISTIC(0) or ACL_OPT_ENABLE_DEBUG_KERNEL(1) or ACL_OPT_STRONG_CONSISTENCY(2)",
     125              :         ACL_ERROR_INVALID_PARAM, "Setting system parameter values in the current context");
     126           18 :     if (isCtx) {
     127            9 :         ACL_REQUIRES_RTS_OK(rtCtxSetSysParamOpt(static_cast<rtSysParamOpt>(opt), value));
     128              :     } else {
     129            9 :         ACL_REQUIRES_RTS_OK(rtSetSysParamOpt(static_cast<rtSysParamOpt>(opt), value));
     130              :     }
     131           16 :     ACL_LOG_INFO("successfully execute aclrtCtxSetSysParamOpt");
     132           16 :     return ACL_SUCCESS;
     133              : }
     134              : 
     135            5 : aclError aclrtCtxGetSysParamOptImpl(aclSysParamOpt opt, int64_t* value)
     136              : {
     137            5 :     ACL_PROFILING_REG(acl::AclProfType::AclrtCtxGetSysParamOpt);
     138           10 :     return GetSysParamOpt(opt, value, true);
     139            5 : }
     140              : 
     141           12 : aclError aclrtCtxSetSysParamOptImpl(aclSysParamOpt opt, int64_t value)
     142              : {
     143           12 :     ACL_PROFILING_REG(acl::AclProfType::AclrtCtxSetSysParamOpt);
     144           12 :     ACL_LOG_INFO("start to execute aclrtCtxSetSysParamOpt, opt = %d, value = %ld.", static_cast<int32_t>(opt), value);
     145           24 :     return SetSysParamOpt(opt, value, true);
     146           12 : }
     147              : 
     148            5 : aclError aclrtGetSysParamOptImpl(aclSysParamOpt opt, int64_t* value) { return GetSysParamOpt(opt, value, false); }
     149              : 
     150           12 : aclError aclrtSetSysParamOptImpl(aclSysParamOpt opt, int64_t value)
     151              : {
     152           12 :     ACL_LOG_INFO("start to execute aclrtSetSysParamOpt, opt = %d, value = %ld.", static_cast<int32_t>(opt), value);
     153           12 :     return SetSysParamOpt(opt, value, false);
     154              : }
     155              : 
     156            2 : aclError aclrtPeekAtLastErrorImpl(aclrtLastErrLevel level)
     157              : {
     158            2 :     ACL_LOG_INFO("start to execute aclrtPeekAtLastError, level is %d", static_cast<int32_t>(level));
     159            5 :     ACL_REQUIRES_PARAM_EQUAL_REPORT(level, ACL_RT_THREAD_LEVEL);
     160            1 :     const rtLastErrLevel_t rtLevel = static_cast<rtLastErrLevel_t>(level);
     161            1 :     return rtPeekAtLastError(rtLevel);
     162              : }
     163              : 
     164            2 : aclError aclrtGetLastErrorImpl(aclrtLastErrLevel level)
     165              : {
     166            2 :     ACL_LOG_INFO("start to execute aclrtGetLastError, level is %d", static_cast<int32_t>(level));
     167            5 :     ACL_REQUIRES_PARAM_EQUAL_REPORT(level, ACL_RT_THREAD_LEVEL);
     168            1 :     const rtLastErrLevel_t rtLevel = static_cast<rtLastErrLevel_t>(level);
     169            1 :     return rtGetLastError(rtLevel);
     170              : }
     171              : 
     172            3 : aclError aclrtCtxGetCurrentDefaultStreamImpl(aclrtStream* stream)
     173              : {
     174            3 :     ACL_PROFILING_REG(acl::AclProfType::AclrtCtxGetCurrentDefaultStream);
     175            3 :     ACL_LOG_INFO("start to execute aclrtCtxGetCurrentDefaultStream");
     176            3 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(stream);
     177              : 
     178            2 :     const rtError_t rtErr = rtsCtxGetCurrentDefaultStream(stream);
     179            2 :     if (rtErr != RT_ERROR_NONE) {
     180            1 :         ACL_LOG_ERROR(
     181              :             "call rtsCtxGetCurrentDefaultStream failed, runtime errorCode is %d", static_cast<int32_t>(rtErr));
     182            1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     183              :     }
     184              : 
     185            1 :     ACL_LOG_INFO("successfully execute aclrtCtxGetCurrentDefaultStream");
     186            1 :     return ACL_SUCCESS;
     187            3 : }
     188              : 
     189            2 : aclError aclrtCtxGetFloatOverflowAddrImpl(void** overflowAddr)
     190              : {
     191            2 :     ACL_PROFILING_REG(acl::AclProfType::AclrtCtxGetFloatOverflowAddr);
     192              : 
     193            2 :     const rtError_t rtErr = rtsCtxGetFloatOverflowAddr(overflowAddr);
     194            2 :     if (rtErr != RT_ERROR_NONE) {
     195            1 :         ACL_LOG_ERROR("call rtsCtxGetFloatOverflowAddr failed, runtime errorCode is %d", static_cast<int32_t>(rtErr));
     196            1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     197              :     }
     198              : 
     199            1 :     return ACL_SUCCESS;
     200            2 : }
     201              : 
     202            4 : aclError aclrtGetPrimaryCtxStateImpl(int32_t deviceId, uint32_t* flags, int32_t* active)
     203              : {
     204            4 :     ACL_LOG_INFO("start to execute aclrtGetPrimaryCtxState");
     205            4 :     ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(active);
     206            3 :     ACL_CHECK_INVALID_PARAM_NO_VALUE(flags == nullptr, "flags", "flags is a reserved parameter and must be nullptr");
     207              : 
     208            2 :     uint32_t tmp = 0;
     209            2 :     const rtError_t rtErr = rtsGetPrimaryCtxState(deviceId, &tmp, active);
     210            2 :     if (rtErr != RT_ERROR_NONE) {
     211            1 :         ACL_LOG_WARN(
     212              :             "call aclrtGetPrimaryCtxState failed, runtime errorCode is %d, device id is %d",
     213              :             static_cast<int32_t>(rtErr), deviceId);
     214            1 :         return ACL_GET_ERRCODE_RTS(rtErr);
     215              :     }
     216            1 :     ACL_LOG_INFO("successfully execute aclrtGetPrimaryCtxState");
     217            1 :     return ACL_SUCCESS;
     218              : }
     219              : #ifdef __cplusplus
     220              : }
     221              : #endif
        

Generated by: LCOV version 2.0-1