LCOV - code coverage report
Current view: top level - aicpu_processer - ae_kernel_lib_manager.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 89.2 % 74 66
Test Date: 2026-08-12 11:05:02 Functions: 100.0 % 5 5

            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 "ae_kernel_lib_manager.hpp"
      12              : 
      13              : #include <vector>
      14              : #include <string>
      15              : #include "ae_kernel_lib_fwk.hpp"
      16              : #include "ae_kernel_lib_aicpu.hpp"
      17              : #include "ae_kernel_lib_aicpu_kfc.h"
      18              : #include "ae_def.hpp"
      19              : 
      20              : namespace cce {
      21              : /*
      22              :  * A inner function, the caller should make sure "kernelLib" is not null.
      23              :  * Get a  AIKernelLIb specialised by kernelType
      24              :  */
      25          128 : aeStatus_t AIKernelsLibManger::GetKernelLib(const aicpu::KernelType kernelType, AIKernelsLibBase*& kernelLib)
      26              : {
      27          128 :     switch (kernelType) {
      28            3 :         case aicpu::KERNEL_TYPE_FWK:
      29            3 :             kernelLib = AIKernelsLibFWK::GetInstance();
      30            3 :             break;
      31          122 :         case aicpu::KERNEL_TYPE_AICPU:
      32              :         case aicpu::KERNEL_TYPE_AICPU_CUSTOM:
      33          122 :             kernelLib = AIKernelsLibAiCpu::GetInstance();
      34          123 :             break;
      35            1 :         case aicpu::KERNEL_TYPE_AICPU_KFC:
      36              :         case aicpu::KERNEL_TYPE_AICPU_CUSTOM_KFC:
      37            1 :             kernelLib = AIKernelsLibAiCpuKFC::GetInstance();
      38            1 :             break;
      39            2 :         default:
      40            2 :             AE_ERR_LOG(AE_MODULE_ID, "Input param kernelType is invalid :%d", kernelType);
      41            2 :             break;
      42              :     }
      43              : 
      44          129 :     if (kernelLib == nullptr) {
      45            2 :         AE_ERR_LOG(AE_MODULE_ID, "Get kernelLib is NULL, kernel type=%d", kernelType);
      46            2 :         return AE_STATUS_BAD_PARAM;
      47              :     }
      48          127 :     return AE_STATUS_SUCCESS;
      49              : }
      50              : 
      51              : /**
      52              :  * Clear a AIKernelLIb in manager specialised by kernelType
      53              :  */
      54           25 : void AIKernelsLibManger::ClearKernelLib(const aicpu::KernelType kernelType)
      55              : {
      56           25 :     switch (kernelType) {
      57            2 :         case aicpu::KERNEL_TYPE_FWK:
      58            2 :             AIKernelsLibFWK::DestroyInstance();
      59            2 :             break;
      60            4 :         case aicpu::KERNEL_TYPE_AICPU:
      61              :         case aicpu::KERNEL_TYPE_AICPU_CUSTOM:
      62            4 :             AIKernelsLibAiCpu::DestroyInstance();
      63            4 :             break;
      64            5 :         case aicpu::KERNEL_TYPE_AICPU_KFC:
      65              :         case aicpu::KERNEL_TYPE_AICPU_CUSTOM_KFC:
      66            5 :             AIKernelsLibAiCpuKFC::DestroyInstance();
      67            5 :             break;
      68           14 :         default:
      69           14 :             break;
      70              :     }
      71           25 : }
      72              : 
      73            6 : aeStatus_t AIKernelsLibManger::BatchLoadKernelSo(
      74              :     const aicpu::KernelType kernelType, const uint32_t loadSoNum, const char_t* const* const soNames)
      75              : {
      76            6 :     AE_INFO_LOG(AE_MODULE_ID, "Start to batch load kernel so. kernelType=%d, loadSoNum=%u.", kernelType, loadSoNum);
      77            6 :     if (loadSoNum == 0U) {
      78            0 :         return AE_STATUS_SUCCESS;
      79              :     }
      80              :     // pair first is so name, second is so path
      81            6 :     std::vector<std::string> aicpuSoVec;
      82            6 :     std::vector<std::string> tfSoVec;
      83           16 :     for (uint32_t index = 0U; index < loadSoNum; index++) {
      84           10 :         if (soNames[index] == nullptr) {
      85            0 :             AE_WARN_LOG(AE_MODULE_ID, "soName is null.");
      86            0 :             continue;
      87              :         }
      88           10 :         std::string soName(soNames[index]);
      89           10 :         if (soName == "libtf_kernels.so") {
      90            3 :             tfSoVec.emplace_back(soName);
      91              :         } else {
      92            7 :             aicpuSoVec.push_back(soName);
      93              :         }
      94           10 :     }
      95              : 
      96            6 :     if (!tfSoVec.empty()) {
      97            3 :         if (AIKernelsLibFWK::GetInstance()->BatchLoadKernelSo(kernelType, tfSoVec) != AE_STATUS_SUCCESS) {
      98            3 :             AE_WARN_LOG(AE_MODULE_ID, "batch load kernel so failed.");
      99              :         }
     100              :     }
     101            6 :     if (!aicpuSoVec.empty()) {
     102            5 :         if (AIKernelsLibAiCpu::GetInstance()->BatchLoadKernelSo(kernelType, aicpuSoVec) != AE_STATUS_SUCCESS) {
     103            0 :             AE_WARN_LOG(AE_MODULE_ID, "batch load kernel so failed.");
     104              :         }
     105              :     }
     106            6 :     AE_INFO_LOG(AE_MODULE_ID, "Finish to batch load kernel so. loadSoNum=%u.", loadSoNum);
     107            6 :     return AE_STATUS_SUCCESS;
     108            6 : }
     109              : 
     110            2 : aeStatus_t AIKernelsLibManger::AddSoInWhiteList(const char_t* const soName)
     111              : {
     112            2 :     AIKernelsLibAiCpu* aicpuKernel = AIKernelsLibAiCpu::GetInstance();
     113            2 :     if (aicpuKernel == nullptr) {
     114            0 :         AE_ERR_LOG(AE_MODULE_ID, "Get kernelLib is NULL");
     115            0 :         return AE_STATUS_INNER_ERROR;
     116              :     }
     117            2 :     const std::string soNameStr(soName);
     118            2 :     AE_INFO_LOG(AE_MODULE_ID, "begin add so:%s", soNameStr.c_str());
     119            2 :     return aicpuKernel->AddSoInWhiteList(soNameStr);
     120            2 : }
     121              : 
     122            2 : void AIKernelsLibManger::DelteSoInWhiteList(const char_t* const soName)
     123              : {
     124            2 :     AIKernelsLibAiCpu* aicpuKernel = AIKernelsLibAiCpu::GetInstance();
     125            2 :     if (aicpuKernel == nullptr) {
     126            0 :         AE_ERR_LOG(AE_MODULE_ID, "Get kernelLib is NULL");
     127            0 :         return;
     128              :     }
     129            2 :     const std::string soNameStr(soName);
     130            2 :     AE_INFO_LOG(AE_MODULE_ID, "begin delete so:%s", soNameStr.c_str());
     131            2 :     aicpuKernel->DeleteSoInWhiteList(soNameStr);
     132            2 : }
     133              : } // namespace cce
        

Generated by: LCOV version 2.0-1