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-07-28 10:54:05 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          129 :     aeStatus_t AIKernelsLibManger::GetKernelLib(const aicpu::KernelType kernelType, AIKernelsLibBase *&kernelLib)
      26              :     {
      27          129 :         switch (kernelType) {
      28            3 :             case aicpu::KERNEL_TYPE_FWK:
      29            3 :                 kernelLib = AIKernelsLibFWK::GetInstance();
      30            3 :                 break;
      31          123 :             case aicpu::KERNEL_TYPE_AICPU:
      32              :             case aicpu::KERNEL_TYPE_AICPU_CUSTOM:
      33          123 :                 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(const aicpu::KernelType kernelType,
      74              :                                                      const uint32_t loadSoNum,
      75              :                                                      const char_t * const * const soNames)
      76              :     {
      77            6 :         AE_INFO_LOG(AE_MODULE_ID, "Start to batch load kernel so. kernelType=%d, loadSoNum=%u.", kernelType, loadSoNum);
      78            6 :         if (loadSoNum == 0U) {
      79            0 :             return AE_STATUS_SUCCESS;
      80              :         }
      81              :         // pair first is so name, second is so path
      82            6 :         std::vector<std::string> aicpuSoVec;
      83            6 :         std::vector<std::string> tfSoVec;
      84           16 :         for (uint32_t index = 0U; index < loadSoNum; index++) {
      85           10 :             if (soNames[index] == nullptr) {
      86            0 :                 AE_WARN_LOG(AE_MODULE_ID, "soName is null.");
      87            0 :                 continue;
      88              :             }
      89           10 :             std::string soName(soNames[index]);
      90           10 :             if (soName == "libtf_kernels.so") {
      91            3 :                 tfSoVec.emplace_back(soName);
      92              :             } else {
      93            7 :                 aicpuSoVec.push_back(soName);
      94              :             }
      95           10 :         }
      96              : 
      97            6 :         if (!tfSoVec.empty()) {
      98            3 :             if (AIKernelsLibFWK::GetInstance()->BatchLoadKernelSo(kernelType, tfSoVec) != AE_STATUS_SUCCESS) {
      99            3 :                 AE_WARN_LOG(AE_MODULE_ID, "batch load kernel so failed.");
     100              :             }
     101              :         }
     102            6 :         if (!aicpuSoVec.empty()) {
     103            5 :             if (AIKernelsLibAiCpu::GetInstance()->BatchLoadKernelSo(kernelType, aicpuSoVec) != AE_STATUS_SUCCESS) {
     104            0 :                 AE_WARN_LOG(AE_MODULE_ID, "batch load kernel so failed.");
     105              :             }
     106              :         }
     107            6 :         AE_INFO_LOG(AE_MODULE_ID, "Finish to batch load kernel so. loadSoNum=%u.", loadSoNum);
     108            6 :         return AE_STATUS_SUCCESS;
     109            6 :     }
     110              : 
     111            2 :     aeStatus_t AIKernelsLibManger::AddSoInWhiteList(const char_t * const soName)
     112              :     {
     113            2 :         AIKernelsLibAiCpu *aicpuKernel = AIKernelsLibAiCpu::GetInstance();
     114            2 :         if (aicpuKernel == nullptr) {
     115            0 :             AE_ERR_LOG(AE_MODULE_ID, "Get kernelLib is NULL");
     116            0 :             return AE_STATUS_INNER_ERROR;
     117              :         }
     118            2 :         const std::string soNameStr(soName);
     119            2 :         AE_INFO_LOG(AE_MODULE_ID, "begin add so:%s", soNameStr.c_str());
     120            2 :         return aicpuKernel->AddSoInWhiteList(soNameStr);
     121            2 :     }
     122              : 
     123            2 :     void AIKernelsLibManger::DelteSoInWhiteList(const char_t * const soName)
     124              :     {
     125            2 :         AIKernelsLibAiCpu *aicpuKernel = AIKernelsLibAiCpu::GetInstance();
     126            2 :         if (aicpuKernel == nullptr) {
     127            0 :             AE_ERR_LOG(AE_MODULE_ID, "Get kernelLib is NULL");
     128            0 :             return;
     129              :         }
     130            2 :         const std::string soNameStr(soName);
     131            2 :         AE_INFO_LOG(AE_MODULE_ID, "begin delete so:%s", soNameStr.c_str());
     132            2 :         aicpuKernel->DeleteSoInWhiteList(soNameStr);
     133            2 :     }
     134              : }
        

Generated by: LCOV version 2.0-1