LCOV - code coverage report
Current view: top level - acl/aclrt_c/common - model_config_rt.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 19 19 100.0 %
Date: 2026-08-27 13:24:42 Functions: 2 2 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             : #include "model_config_rt.h"
      11             : #include <stdlib.h>
      12             : #include "log_inner.h"
      13             : 
      14             : #ifdef __cplusplus
      15             : extern "C"{
      16             : #endif
      17             : 
      18             : #define POLICY_MASK_LOW_BIT 0xFF
      19             : #define POLICY_MASK_HIGH_BIT 0xFF00
      20             : 
      21             : struct PageType {
      22             :   uint32_t aclPageType;
      23             :   uint32_t rtPageTypeBit;
      24             : };
      25             : 
      26             : static struct PageType g_pageMap[] = {
      27             :     {ACL_MEM_MALLOC_HUGE_FIRST, RT_MEMORY_POLICY_HUGE_PAGE_FIRST},
      28             :     {ACL_MEM_MALLOC_HUGE_ONLY, RT_MEMORY_POLICY_HUGE_PAGE_ONLY},
      29             :     {ACL_MEM_MALLOC_NORMAL_ONLY, RT_MEMORY_POLICY_DEFAULT_PAGE_ONLY},
      30             :     {ACL_MEM_MALLOC_HUGE_FIRST_P2P, RT_MEMORY_POLICY_HUGE_PAGE_FIRST_P2P},
      31             :     {ACL_MEM_MALLOC_HUGE_ONLY_P2P, RT_MEMORY_POLICY_HUGE_PAGE_ONLY_P2P},
      32             :     {ACL_MEM_MALLOC_NORMAL_ONLY_P2P, RT_MEMORY_POLICY_DEFAULT_PAGE_ONLY_P2P}};
      33             : 
      34             : 
      35          19 : static int Compare(const void *a, const void *b) {
      36          19 :   return (int)((*(const struct PageType*)a).aclPageType - (*(const struct PageType*)b).aclPageType);
      37             : }
      38             : 
      39             : 
      40           8 : aclError GetMemTypeFromPolicy(aclrtMemMallocPolicy policy, rtMemType_t *type) {
      41           8 :   uint32_t flags = RT_MEMORY_DEFAULT;
      42           8 :   if (((uint32_t)policy & POLICY_MASK_HIGH_BIT) == ACL_MEM_TYPE_LOW_BAND_WIDTH) {
      43           1 :     flags = RT_MEMORY_DDR;
      44           7 :   } else if (((uint32_t)policy & POLICY_MASK_HIGH_BIT) == ACL_MEM_TYPE_HIGH_BAND_WIDTH) {
      45           2 :     flags = RT_MEMORY_HBM;
      46             :   } else {
      47           5 :     ACL_LOG_WARN("invalid policy high bit!");
      48             :   }
      49             : 
      50           8 :   size_t pageMapLen = sizeof(g_pageMap) / sizeof(g_pageMap[0]);
      51           8 :   size_t pagePairLen = sizeof(g_pageMap[0]);
      52           8 :   struct PageType pagePair = {(uint32_t)policy & POLICY_MASK_LOW_BIT, 0};
      53           8 :   struct PageType *searchRet = (struct PageType*)bsearch(&pagePair, g_pageMap, pageMapLen, pagePairLen, Compare);
      54           8 :   if (searchRet == NULL) {
      55           1 :     ACL_LOG_ERROR("invalid policy low bit!");
      56           1 :     return ACL_ERROR_INVALID_PARAM;
      57             :   }
      58           7 :   flags |= (*searchRet).rtPageTypeBit;
      59           7 :   *type = flags;
      60           7 :   return ACL_SUCCESS;
      61             : }
      62             : #ifdef __cplusplus
      63             : }
      64             : #endif

Generated by: LCOV version 1.14