LCOV - code coverage report
Current view: top level - base_comm/primitives/api_c_adpt/ccu - ccu_primitives_impl.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 87.4 % 586 512
Test Date: 2026-08-18 17:47:01 Functions: 94.4 % 89 84

            Line data    Source code
       1              : /**
       2              :  * Copyright (c) 2026 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 "ccu_primitives_impl.h"
      12              : 
      13              : #include "ccu_log.h"
      14              : #include "hcom_common.h"
      15              : 
      16              : #include "ccu_kernel_mgr.h"
      17              : 
      18              : namespace {
      19              : // strict 校验:magic 不符 / version 越界 / size 不匹配当前版本一律拒绝。
      20           40 : CcuResult ValidateCcuCfgHeader(const CcuCfgHeader* header, uint32_t expectSize, uint32_t maxVersion)
      21              : {
      22           40 :     if (header == nullptr) {
      23            0 :         return CcuResult::CCU_E_PTR;
      24              :     }
      25           40 :     if (header->magic != CCU_CFG_MAGIC_WORD) {
      26            2 :         HCCL_ERROR("[ValidateCcuCfgHeader] bad magic 0x%x", header->magic);
      27            2 :         return CcuResult::CCU_E_PARA;
      28              :     }
      29           38 :     if (header->version == 0 || header->version > maxVersion) {
      30            0 :         HCCL_ERROR("[ValidateCcuCfgHeader] bad version %u (max %u)", header->version, maxVersion);
      31            0 :         return CcuResult::CCU_E_PARA;
      32              :     }
      33           38 :     if (header->size != expectSize) {
      34            0 :         HCCL_ERROR("[ValidateCcuCfgHeader] bad size %u (expect %u)", header->size, expectSize);
      35            0 :         return CcuResult::CCU_E_PARA;
      36              :     }
      37           38 :     return CcuResult::CCU_SUCCESS;
      38              : }
      39              : } // namespace
      40              : 
      41              : // Alloc 相关接口
      42          496 : CcuResult CcuVariableAlloc(CcuVariableHandle* varHandle)
      43              : {
      44          496 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
      45          496 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
      46          496 :     CCU_CHK_PTR_NULL(kernel);
      47          496 :     CCU_CHK_RET(kernel->VariableAlloc(varHandle));
      48          496 :     return CcuResult::CCU_SUCCESS;
      49              : }
      50              : 
      51           10 : CcuResult CcuAddressAlloc(CcuAddressHandle* addrHandle)
      52              : {
      53           10 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
      54           10 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
      55           10 :     CCU_CHK_PTR_NULL(kernel);
      56           10 :     CCU_CHK_RET(kernel->AddressAlloc(addrHandle));
      57           10 :     return CcuResult::CCU_SUCCESS;
      58              : }
      59              : 
      60           10 : CcuResult CcuEventAlloc(CcuEventHandle* eventHandle)
      61              : {
      62           10 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
      63           10 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
      64           10 :     CCU_CHK_PTR_NULL(kernel);
      65           10 :     CCU_CHK_RET(kernel->EventAlloc(eventHandle));
      66           10 :     return CcuResult::CCU_SUCCESS;
      67              : }
      68              : 
      69            2 : CcuResult CcuBufferAlloc(CcuBufferHandle* bufHandle)
      70              : {
      71            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
      72            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
      73            2 :     CCU_CHK_PTR_NULL(kernel);
      74            2 :     CCU_CHK_RET(kernel->BufferAlloc(bufHandle));
      75            2 :     return CcuResult::CCU_SUCCESS;
      76              : }
      77              : 
      78              : CcuResult
      79          156 : CcuLocalAddrAlloc(CcuLocalAddrHandle* localAddrHandle, CcuAddressHandle* addrHandle, CcuVariableHandle* tokenHandle)
      80              : {
      81          156 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
      82          156 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
      83          156 :     CCU_CHK_PTR_NULL(kernel);
      84          156 :     CCU_CHK_RET(kernel->LocalAddrAlloc(localAddrHandle, addrHandle, tokenHandle));
      85          156 :     return CcuResult::CCU_SUCCESS;
      86              : }
      87              : 
      88              : CcuResult
      89           37 : CcuRemoteAddrAlloc(CcuRemoteAddrHandle* remoteAddrHandle, CcuAddressHandle* addrHandle, CcuVariableHandle* tokenHandle)
      90              : {
      91           37 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
      92           37 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
      93           37 :     CCU_CHK_PTR_NULL(kernel);
      94           37 :     CCU_CHK_RET(kernel->RemoteAddrAlloc(remoteAddrHandle, addrHandle, tokenHandle));
      95           37 :     return CcuResult::CCU_SUCCESS;
      96              : }
      97              : 
      98            6 : CcuResult CcuBlockVariableAlloc(CcuVariableHandle* varHandles, uint32_t count)
      99              : {
     100            6 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     101            6 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     102            6 :     CCU_CHK_PTR_NULL(kernel);
     103            6 :     CCU_CHK_RET(kernel->BlockVariableAlloc(varHandles, count));
     104            6 :     return CcuResult::CCU_SUCCESS;
     105              : }
     106              : 
     107            6 : CcuResult CcuBlockEventAlloc(CcuEventHandle* eventHandles, uint32_t count)
     108              : {
     109            6 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     110            6 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     111            6 :     CCU_CHK_PTR_NULL(kernel);
     112            6 :     CCU_CHK_RET(kernel->BlockEventAlloc(eventHandles, count));
     113            6 :     return CcuResult::CCU_SUCCESS;
     114              : }
     115            7 : CcuResult CcuBlockBufferAlloc(CcuBufferHandle* bufHandles, uint32_t count)
     116              : {
     117            7 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     118            7 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     119            7 :     CCU_CHK_PTR_NULL(kernel);
     120            7 :     CCU_CHK_RET(kernel->BlockBufferAlloc(bufHandles, count));
     121            7 :     return CcuResult::CCU_SUCCESS;
     122              : }
     123           14 : CcuResult CcuVariableCreateByChannel(ChannelHandle channel, uint32_t varIndex, CcuVariableHandle* varHandle)
     124              : {
     125           14 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     126           14 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     127           14 :     CCU_CHK_PTR_NULL(kernel);
     128           14 :     CCU_CHK_RET(kernel->VariableCreateByChannel(channel, varIndex, varHandle));
     129           14 :     return CcuResult::CCU_SUCCESS;
     130              : }
     131              : 
     132           10 : CcuResult CcuVariableGetByIndex(CcuVariableHandle acqHandle, uint32_t index, CcuVariableHandle* varHandle)
     133              : {
     134           10 :     CCU_CHK_PTR_NULL(varHandle);
     135           10 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     136           10 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     137           10 :     CCU_CHK_PTR_NULL(kernel);
     138           10 :     CCU_CHK_RET(kernel->VariableCreateByAcquire(acqHandle, index, varHandle));
     139           10 :     return CcuResult::CCU_SUCCESS;
     140              : }
     141              : 
     142            4 : CcuResult CcuEventGetByIndex(CcuEventHandle acqHandle, uint32_t index, CcuEventHandle* eventHandle)
     143              : {
     144            4 :     CCU_CHK_PTR_NULL(eventHandle);
     145            4 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     146            4 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     147            4 :     CCU_CHK_PTR_NULL(kernel);
     148            4 :     CCU_CHK_RET(kernel->EventCreateByAcquire(acqHandle, index, eventHandle));
     149            4 :     return CcuResult::CCU_SUCCESS;
     150              : }
     151              : 
     152              : // Variable操作类 相关接口
     153          283 : CcuResult CcuVariableAssignImm(CcuVariableHandle resVar, uint64_t immediate)
     154              : {
     155          283 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     156          283 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     157          283 :     CCU_CHK_PTR_NULL(kernel);
     158          283 :     CCU_CHK_RET(kernel->VariableAssignImm(resVar, immediate));
     159              : 
     160          283 :     return CcuResult::CCU_SUCCESS;
     161              : }
     162          158 : CcuResult CcuVariableAssignVar(CcuVariableHandle dstVarHandle, CcuVariableHandle srcVarHandle)
     163              : {
     164          158 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     165          158 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     166          158 :     CCU_CHK_PTR_NULL(kernel);
     167          158 :     CCU_CHK_RET(kernel->VariableAssignVar(dstVarHandle, srcVarHandle));
     168              : 
     169          158 :     return CcuResult::CCU_SUCCESS;
     170              : }
     171              : 
     172          109 : CcuResult CcuVariableAddVarToVar(CcuVariableHandle resVar, CcuVariableHandle varA, CcuVariableHandle varB)
     173              : {
     174          109 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     175          109 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     176          109 :     CCU_CHK_PTR_NULL(kernel);
     177          109 :     CCU_CHK_RET(kernel->VariableAddVarToVar(resVar, varA, varB));
     178              : 
     179          109 :     return CcuResult::CCU_SUCCESS;
     180              : }
     181              : 
     182            2 : CcuResult CcuVariableSubVarToVar(CcuVariableHandle resVar, CcuVariableHandle varA, CcuVariableHandle varB)
     183              : {
     184            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     185            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     186            2 :     CCU_CHK_PTR_NULL(kernel);
     187            2 :     CCU_CHK_RET(kernel->VariableSubVarToVar(resVar, varA, varB));
     188              : 
     189            2 :     return CcuResult::CCU_SUCCESS;
     190              : }
     191              : 
     192            2 : CcuResult CcuVariableMulVarToVar(CcuVariableHandle resVar, CcuVariableHandle varA, CcuVariableHandle varB)
     193              : {
     194            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     195            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     196            2 :     CCU_CHK_PTR_NULL(kernel);
     197            2 :     CCU_CHK_RET(kernel->VariableMulVarToVar(resVar, varA, varB));
     198              : 
     199            2 :     return CcuResult::CCU_SUCCESS;
     200              : }
     201              : 
     202            1 : CcuResult CcuVariableAddImmToVar(CcuVariableHandle resVar, CcuVariableHandle varA, uint16_t immediate)
     203              : {
     204            1 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     205            1 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     206            1 :     CCU_CHK_PTR_NULL(kernel);
     207            1 :     CCU_CHK_RET(kernel->VariableAddImmToVar(resVar, varA, immediate));
     208              : 
     209            1 :     return CcuResult::CCU_SUCCESS;
     210              : }
     211              : 
     212            2 : CcuResult CcuVariableSubImmToVar(CcuVariableHandle resVar, CcuVariableHandle varA, uint16_t immediate)
     213              : {
     214            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     215            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     216            2 :     CCU_CHK_PTR_NULL(kernel);
     217            2 :     CCU_CHK_RET(kernel->VariableSubImmToVar(resVar, varA, immediate));
     218              : 
     219            2 :     return CcuResult::CCU_SUCCESS;
     220              : }
     221              : 
     222            2 : CcuResult CcuVariableMulImmToVar(CcuVariableHandle resVar, CcuVariableHandle varA, uint16_t immediate)
     223              : {
     224            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     225            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     226            2 :     CCU_CHK_PTR_NULL(kernel);
     227            2 :     CCU_CHK_RET(kernel->VariableMulImmToVar(resVar, varA, immediate));
     228              : 
     229            2 :     return CcuResult::CCU_SUCCESS;
     230              : }
     231              : 
     232            2 : CcuResult CcuVariableAndVarToVar(CcuVariableHandle resVar, CcuVariableHandle varA, CcuVariableHandle varB)
     233              : {
     234            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     235            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     236            2 :     CCU_CHK_PTR_NULL(kernel);
     237            2 :     CCU_CHK_RET(kernel->VariableAndVarToVar(resVar, varA, varB));
     238              : 
     239            2 :     return CcuResult::CCU_SUCCESS;
     240              : }
     241              : 
     242            2 : CcuResult CcuVariableOrVarToVar(CcuVariableHandle resVar, CcuVariableHandle varA, CcuVariableHandle varB)
     243              : {
     244            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     245            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     246            2 :     CCU_CHK_PTR_NULL(kernel);
     247            2 :     CCU_CHK_RET(kernel->VariableOrVarToVar(resVar, varA, varB));
     248              : 
     249            2 :     return CcuResult::CCU_SUCCESS;
     250              : }
     251              : 
     252            2 : CcuResult CcuVariableXorVarToVar(CcuVariableHandle resVar, CcuVariableHandle varA, CcuVariableHandle varB)
     253              : {
     254            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     255            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     256            2 :     CCU_CHK_PTR_NULL(kernel);
     257            2 :     CCU_CHK_RET(kernel->VariableXorVarToVar(resVar, varA, varB));
     258              : 
     259            2 :     return CcuResult::CCU_SUCCESS;
     260              : }
     261              : 
     262            1 : CcuResult CcuVariableNotVar(CcuVariableHandle resVar, CcuVariableHandle varA)
     263              : {
     264            1 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     265            1 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     266            1 :     CCU_CHK_PTR_NULL(kernel);
     267            1 :     CCU_CHK_RET(kernel->VariableNotVar(resVar, varA));
     268              : 
     269            1 :     return CcuResult::CCU_SUCCESS;
     270              : }
     271              : 
     272            2 : CcuResult CcuVariableShlVarToVar(CcuVariableHandle resVar, CcuVariableHandle varA, CcuVariableHandle varB)
     273              : {
     274            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     275            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     276            2 :     CCU_CHK_PTR_NULL(kernel);
     277            2 :     CCU_CHK_RET(kernel->VariableShlVarToVar(resVar, varA, varB));
     278              : 
     279            2 :     return CcuResult::CCU_SUCCESS;
     280              : }
     281              : 
     282            2 : CcuResult CcuVariableShrVarToVar(CcuVariableHandle resVar, CcuVariableHandle varA, CcuVariableHandle varB)
     283              : {
     284            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     285            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     286            2 :     CCU_CHK_PTR_NULL(kernel);
     287            2 :     CCU_CHK_RET(kernel->VariableShrVarToVar(resVar, varA, varB));
     288              : 
     289            2 :     return CcuResult::CCU_SUCCESS;
     290              : }
     291              : 
     292              : /*
     293              : Address 相关接口
     294              : */
     295           13 : CcuResult CcuAddressAssignImm(CcuAddressHandle addr, uint64_t immediate)
     296              : {
     297           13 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     298           13 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     299           13 :     CCU_CHK_PTR_NULL(kernel);
     300           13 :     CCU_CHK_RET(kernel->AddressAssignImm(addr, immediate));
     301           13 :     return CcuResult::CCU_SUCCESS;
     302              : }
     303              : 
     304           38 : CcuResult CcuAddressAssignAddr(CcuAddressHandle dstAddrHandle, CcuAddressHandle srcAddrHandle)
     305              : {
     306           38 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     307           38 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     308           38 :     CCU_CHK_PTR_NULL(kernel);
     309           38 :     CCU_CHK_RET(kernel->AddressAssignAddr(dstAddrHandle, srcAddrHandle));
     310           38 :     return CcuResult::CCU_SUCCESS;
     311              : }
     312              : 
     313           14 : CcuResult CcuAddressAssignVar(CcuAddressHandle addr, CcuVariableHandle var)
     314              : {
     315           14 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     316           14 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     317           14 :     CCU_CHK_PTR_NULL(kernel);
     318           14 :     CCU_CHK_RET(kernel->AddressAssignVar(addr, var));
     319           14 :     return CcuResult::CCU_SUCCESS;
     320              : }
     321              : 
     322            0 : CcuResult CcuAddressAddVarToAddr(CcuAddressHandle resAddr, CcuAddressHandle lhsAddr, CcuVariableHandle rhsVar)
     323              : {
     324            0 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     325            0 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     326            0 :     CCU_CHK_PTR_NULL(kernel);
     327            0 :     CCU_CHK_RET(kernel->AddressAddVarToAddr(resAddr, lhsAddr, rhsVar));
     328            0 :     return CcuResult::CCU_SUCCESS;
     329              : }
     330              : 
     331            2 : CcuResult CcuAddressAddAddrToAddr(CcuAddressHandle resAddr, CcuAddressHandle addrA, CcuAddressHandle addrB)
     332              : {
     333            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     334            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     335            2 :     CCU_CHK_PTR_NULL(kernel);
     336            2 :     CCU_CHK_RET(kernel->AddressAddAddrToAddr(resAddr, addrA, addrB));
     337            2 :     return CcuResult::CCU_SUCCESS;
     338              : }
     339              : 
     340           41 : CcuResult CcuAddressAddAssignVar(CcuAddressHandle addr, CcuVariableHandle var)
     341              : {
     342           41 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     343           41 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     344           41 :     CCU_CHK_PTR_NULL(kernel);
     345           41 :     CCU_CHK_RET(kernel->AddressAddAssignVar(addr, var));
     346           41 :     return CcuResult::CCU_SUCCESS;
     347              : }
     348              : 
     349            1 : CcuResult CcuAddressAddImmToAddr(CcuAddressHandle resAddr, CcuAddressHandle addrA, uint16_t imm)
     350              : {
     351            1 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     352            1 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     353            1 :     CCU_CHK_PTR_NULL(kernel);
     354            1 :     CCU_CHK_RET(kernel->AddressAddImmToAddr(resAddr, addrA, imm));
     355            1 :     return CcuResult::CCU_SUCCESS;
     356              : }
     357              : 
     358              : // 参数加载类 相关接口
     359           49 : CcuResult CcuLoadArg(CcuVariableHandle varHandle, uint32_t argId)
     360              : {
     361           49 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     362           49 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     363           49 :     CCU_CHK_PTR_NULL(kernel);
     364           49 :     CCU_CHK_RET(kernel->LoadArg(varHandle, argId));
     365           49 :     return CcuResult::CCU_SUCCESS;
     366              : }
     367              : 
     368            6 : CcuResult CcuLoadVar(uint64_t addr, CcuVariableHandle varHandle, uint32_t num)
     369              : {
     370            6 :     if (num == 0) {
     371            0 :         HCCL_ERROR("[CcuLoadVar] invalid args, num[%u]", num);
     372            0 :         return CcuResult::CCU_E_PARA;
     373              :     }
     374            6 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     375            6 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     376            6 :     CCU_CHK_PTR_NULL(kernel);
     377            6 :     CCU_CHK_RET(kernel->LoadVar(addr, varHandle, num));
     378            6 :     return CcuResult::CCU_SUCCESS;
     379              : }
     380              : 
     381            2 : CcuResult CcuLoadVarFromVarAddr(CcuVariableHandle addrHandle, CcuVariableHandle varHandle, uint32_t num)
     382              : {
     383            2 :     if (num == 0) {
     384            0 :         HCCL_ERROR("[CcuLoadVarFromVarAddr] invalid args, num[%u]", num);
     385            0 :         return CcuResult::CCU_E_PARA;
     386              :     }
     387            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     388            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     389            2 :     CCU_CHK_PTR_NULL(kernel);
     390            2 :     CCU_CHK_RET(kernel->CcuLoadVarFromVarAddr(addrHandle, varHandle, num));
     391            2 :     return CcuResult::CCU_SUCCESS;
     392              : }
     393              : 
     394            3 : CcuResult CcuStoreVar(uint64_t addr, CcuVariableHandle varHandle, uint32_t num)
     395              : {
     396            3 :     if (num == 0) {
     397            0 :         HCCL_ERROR("[CcuStoreVar] invalid args, num[%u]", num);
     398            0 :         return CcuResult::CCU_E_PARA;
     399              :     }
     400            3 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     401            3 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     402            3 :     CCU_CHK_PTR_NULL(kernel);
     403            3 :     CCU_CHK_RET(kernel->StoreVar(addr, varHandle, num));
     404            3 :     return CcuResult::CCU_SUCCESS;
     405              : }
     406              : 
     407            2 : CcuResult CcuStoreVarToVarAddr(CcuVariableHandle addrHandle, CcuVariableHandle varHandle, uint32_t num)
     408              : {
     409            2 :     if (num == 0) {
     410            0 :         HCCL_ERROR("[CcuStoreVarToVarAddr] invalid args, num[%u]", num);
     411            0 :         return CcuResult::CCU_E_PARA;
     412              :     }
     413            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     414            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     415            2 :     CCU_CHK_PTR_NULL(kernel);
     416            2 :     CCU_CHK_RET(kernel->CcuStoreVarToVarAddr(addrHandle, varHandle, num));
     417            2 :     return CcuResult::CCU_SUCCESS;
     418              : }
     419              : 
     420              : // Event信号同步类 相关接口
     421           15 : CcuResult CcuEventRecord(CcuEventHandle eventHandle, uint16_t mask)
     422              : {
     423           15 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     424           15 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     425           15 :     CCU_CHK_PTR_NULL(kernel);
     426           15 :     CCU_CHK_RET(kernel->EventRecord(eventHandle, mask));
     427           14 :     return CcuResult::CCU_SUCCESS;
     428              : }
     429           41 : CcuResult CcuEventWait(CcuEventHandle eventHandle, uint16_t mask)
     430              : {
     431           41 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     432           41 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     433           41 :     CCU_CHK_PTR_NULL(kernel);
     434           41 :     CCU_CHK_RET(kernel->EventWait(eventHandle, mask));
     435           41 :     return CcuResult::CCU_SUCCESS;
     436              : }
     437            6 : CcuResult CcuNotifyRecord(ChannelHandle channel, uint32_t remoteNotifyIdx, uint16_t mask)
     438              : {
     439            6 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     440            6 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     441            6 :     CCU_CHK_PTR_NULL(kernel);
     442            6 :     CCU_CHK_RET(kernel->NotifyRecord(channel, remoteNotifyIdx, mask));
     443            5 :     return CcuResult::CCU_SUCCESS;
     444              : }
     445           11 : CcuResult CcuNotifyWait(ChannelHandle channel, uint32_t localNotifyIdx, uint16_t mask)
     446              : {
     447           11 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     448           11 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     449           11 :     CCU_CHK_PTR_NULL(kernel);
     450           11 :     CCU_CHK_RET(kernel->NotifyWait(channel, localNotifyIdx, mask));
     451           10 :     return CcuResult::CCU_SUCCESS;
     452              : }
     453           10 : CcuResult CcuWriteVariableWithNotify(
     454              :     ChannelHandle channel, CcuVariableHandle varHandle, uint32_t remoteVarIdx, uint32_t remoteNotifyIdx, uint16_t mask)
     455              : {
     456           10 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     457           10 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     458           10 :     CCU_CHK_PTR_NULL(kernel);
     459           10 :     CCU_CHK_RET(kernel->WriteVariableWithNotify(channel, varHandle, remoteVarIdx, remoteNotifyIdx, mask));
     460            9 :     return CcuResult::CCU_SUCCESS;
     461              : }
     462            1 : CcuResult CcuLocalNotifyRecord(const char* notifyTag, uint16_t mask)
     463              : {
     464            1 :     CCU_CHK_PTR_NULL(notifyTag);
     465            1 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     466            1 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     467            1 :     CCU_CHK_PTR_NULL(kernel);
     468            1 :     CCU_CHK_RET(kernel->LocalNotifyRecord(notifyTag, mask));
     469            0 :     return CcuResult::CCU_SUCCESS;
     470              : }
     471            0 : CcuResult CcuLocalNotifyWait(const char* notifyTag, uint16_t mask)
     472              : {
     473            0 :     CCU_CHK_PTR_NULL(notifyTag);
     474            0 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     475            0 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     476            0 :     CCU_CHK_PTR_NULL(kernel);
     477            0 :     CCU_CHK_RET(kernel->LocalNotifyWait(notifyTag, mask));
     478            0 :     return CcuResult::CCU_SUCCESS;
     479              : }
     480              : 
     481              : // 本地数据拷贝 相关接口
     482            1 : CcuResult CcuLocalCopyMemToMem(
     483              :     CcuLocalAddrHandle dst, CcuLocalAddrHandle src, CcuVariableHandle len, CcuEventHandle event, uint16_t mask)
     484              : {
     485            1 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     486            1 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     487            1 :     CCU_CHK_PTR_NULL(kernel);
     488            1 :     CCU_CHK_RET(kernel->LocalCopyMemToMem(dst, src, len, event, mask));
     489            1 :     return CcuResult::CCU_SUCCESS;
     490              : }
     491              : 
     492           12 : CcuResult CcuLocalCopyMemToBuffer(
     493              :     CcuBufferHandle dst, CcuLocalAddrHandle src, CcuVariableHandle len, CcuEventHandle event, uint16_t mask)
     494              : {
     495           12 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     496           12 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     497           12 :     CCU_CHK_PTR_NULL(kernel);
     498           12 :     CCU_CHK_RET(kernel->LocalCopyMemToBuffer(dst, src, len, event, mask));
     499           12 :     return CcuResult::CCU_SUCCESS;
     500              : }
     501              : 
     502            8 : CcuResult CcuLocalCopyBufferToMem(
     503              :     CcuLocalAddrHandle dst, CcuBufferHandle src, CcuVariableHandle len, CcuEventHandle event, uint16_t mask)
     504              : {
     505            8 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     506            8 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     507            8 :     CCU_CHK_PTR_NULL(kernel);
     508            8 :     CCU_CHK_RET(kernel->LocalCopyBufferToMem(dst, src, len, event, mask));
     509            8 :     return CcuResult::CCU_SUCCESS;
     510              : }
     511              : // 本地reduce 相关接口
     512            0 : CcuResult CcuLocalMemReduce(
     513              :     CcuLocalAddrHandle dst, CcuLocalAddrHandle src, CcuVariableHandle len, HcclDataType dataType, HcclReduceOp opType,
     514              :     CcuEventHandle event, uint16_t mask)
     515              : {
     516            0 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     517            0 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     518            0 :     CCU_CHK_PTR_NULL(kernel);
     519            0 :     CCU_CHK_RET(kernel->LocalMemReduce(dst, src, len, dataType, opType, event, mask));
     520            0 :     return CcuResult::CCU_SUCCESS;
     521              : }
     522              : 
     523            4 : CcuResult CcuLocalBufferReduce(
     524              :     CcuBufferHandle* buffers, uint32_t count, HcclDataType dataType, HcclDataType outputDataType, HcclReduceOp opType,
     525              :     CcuVariableHandle len, CcuEventHandle event, uint16_t mask)
     526              : {
     527            4 :     if (buffers == nullptr || count == 0) {
     528            0 :         HCCL_ERROR("[CcuLocalBufferReduce] invalid args, buffers[%p] count[%u]", buffers, count);
     529            0 :         return CcuResult::CCU_E_PARA;
     530              :     }
     531            4 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     532            4 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     533            4 :     CCU_CHK_PTR_NULL(kernel);
     534            4 :     CCU_CHK_RET(kernel->LocalBufferReduce(buffers, count, dataType, outputDataType, opType, len, event, mask));
     535            4 :     return CcuResult::CCU_SUCCESS;
     536              : }
     537              : 
     538              : /*========== 远端数据传输操作 ==========*/
     539            4 : CcuResult CcuReadMemToMem(
     540              :     ChannelHandle channel, CcuLocalAddrHandle localHandle, CcuRemoteAddrHandle remoteHandle, CcuVariableHandle len,
     541              :     CcuEventHandle event, uint16_t mask)
     542              : {
     543            4 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     544            4 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     545            4 :     CCU_CHK_PTR_NULL(kernel);
     546            4 :     CCU_CHK_RET(kernel->ReadMemToMem(channel, localHandle, remoteHandle, len, event, mask));
     547            4 :     return CcuResult::CCU_SUCCESS;
     548              : }
     549              : 
     550            2 : CcuResult CcuReadMemToBuffer(
     551              :     ChannelHandle channel, CcuBufferHandle localHandle, CcuRemoteAddrHandle remoteHandle, CcuVariableHandle len,
     552              :     CcuEventHandle event, uint16_t mask)
     553              : {
     554            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     555            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     556            2 :     CCU_CHK_PTR_NULL(kernel);
     557            2 :     CCU_CHK_RET(kernel->ReadMemToBuffer(channel, localHandle, remoteHandle, len, event, mask));
     558            2 :     return CcuResult::CCU_SUCCESS;
     559              : }
     560              : 
     561            2 : CcuResult CcuReadMemToMemReduce(
     562              :     ChannelHandle channel, CcuLocalAddrHandle localHandle, CcuRemoteAddrHandle remoteHandle, CcuVariableHandle len,
     563              :     HcclDataType dataType, HcclReduceOp opType, CcuEventHandle event, uint16_t mask)
     564              : {
     565            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     566            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     567            2 :     CCU_CHK_PTR_NULL(kernel);
     568            2 :     CCU_CHK_RET(kernel->ReadMemToMemReduce(channel, localHandle, remoteHandle, len, dataType, opType, event, mask));
     569            2 :     return CcuResult::CCU_SUCCESS;
     570              : }
     571              : 
     572            3 : CcuResult CcuWriteMemToMem(
     573              :     ChannelHandle channel, CcuRemoteAddrHandle remoteHandle, CcuLocalAddrHandle localHandle, CcuVariableHandle len,
     574              :     CcuEventHandle event, uint16_t mask)
     575              : {
     576            3 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     577            3 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     578            3 :     CCU_CHK_PTR_NULL(kernel);
     579            3 :     CCU_CHK_RET(kernel->WriteMemToMem(channel, remoteHandle, localHandle, len, event, mask));
     580            3 :     return CcuResult::CCU_SUCCESS;
     581              : }
     582              : 
     583            2 : CcuResult CcuWriteBufferToMem(
     584              :     ChannelHandle channel, CcuRemoteAddrHandle remote, CcuBufferHandle local, CcuVariableHandle len,
     585              :     CcuEventHandle event, uint16_t mask)
     586              : {
     587            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     588            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     589            2 :     CCU_CHK_PTR_NULL(kernel);
     590            2 :     CCU_CHK_RET(kernel->WriteBufferToMem(channel, remote, local, len, event, mask));
     591            2 :     return CcuResult::CCU_SUCCESS;
     592              : }
     593              : 
     594            2 : CcuResult CcuWriteMemToMemReduce(
     595              :     ChannelHandle channel, CcuRemoteAddrHandle remote, CcuLocalAddrHandle local, CcuVariableHandle len,
     596              :     HcclDataType dataType, HcclReduceOp opType, CcuEventHandle event, uint16_t mask)
     597              : {
     598            2 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     599            2 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     600            2 :     CCU_CHK_PTR_NULL(kernel);
     601            2 :     CCU_CHK_RET(kernel->WriteMemToMemReduce(channel, remote, local, len, dataType, opType, event, mask));
     602            2 :     return CcuResult::CCU_SUCCESS;
     603              : }
     604              : 
     605              : /*========== 控制流操作 ==========*/
     606          102 : CcuResult CcuIfBegin(CcuVariableHandle var, uint64_t immediate, CcuConditionType condType, const char* label)
     607              : {
     608          102 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     609          102 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     610          102 :     CCU_CHK_PTR_NULL(kernel);
     611          102 :     CCU_CHK_RET(kernel->IfBegin(var, immediate, condType, label));
     612              : 
     613          101 :     return CcuResult::CCU_SUCCESS;
     614              : }
     615              : 
     616           22 : CcuResult CcuIfElse(const char* label)
     617              : {
     618           22 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     619           22 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     620           22 :     CCU_CHK_PTR_NULL(kernel);
     621           22 :     CCU_CHK_RET(kernel->IfElse(label));
     622              : 
     623           22 :     return CcuResult::CCU_SUCCESS;
     624              : }
     625              : 
     626           22 : CcuResult CcuIfEnd(const char* label)
     627              : {
     628           22 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     629           22 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     630           22 :     CCU_CHK_PTR_NULL(kernel);
     631           22 :     CCU_CHK_RET(kernel->IfEnd(label));
     632              : 
     633           22 :     return CcuResult::CCU_SUCCESS;
     634              : }
     635              : 
     636          104 : CcuResult CcuFlushPendingIfs()
     637              : {
     638          104 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     639          104 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     640          104 :     CCU_CHK_PTR_NULL(kernel);
     641          104 :     kernel->FlushClosablePendingIfs();
     642          104 :     return CcuResult::CCU_SUCCESS;
     643              : }
     644              : 
     645            3 : CcuResult CcuWhileBegin(CcuVariableHandle var, uint64_t immediate, CcuConditionType condType, const char* label)
     646              : {
     647            3 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     648            3 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     649            3 :     CCU_CHK_PTR_NULL(kernel);
     650            3 :     CCU_CHK_RET(kernel->WhileBegin(var, immediate, condType, label));
     651              : 
     652            3 :     return CcuResult::CCU_SUCCESS;
     653              : }
     654              : 
     655            4 : CcuResult CcuWhileEnd(const char* label)
     656              : {
     657            4 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     658            4 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     659            4 :     CCU_CHK_PTR_NULL(kernel);
     660            4 :     CCU_CHK_RET(kernel->WhileEnd(label));
     661              : 
     662            4 :     return CcuResult::CCU_SUCCESS;
     663              : }
     664              : 
     665            6 : CcuResult CcuDoWhileBegin(const char* label)
     666              : {
     667            6 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     668            6 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     669            6 :     CCU_CHK_PTR_NULL(kernel);
     670            6 :     CCU_CHK_RET(kernel->DoWhileBegin(label));
     671              : 
     672            6 :     return CcuResult::CCU_SUCCESS;
     673              : }
     674              : 
     675            5 : CcuResult CcuDoWhileEnd(CcuVariableHandle var, uint64_t immediate, CcuConditionType condType, const char* label)
     676              : {
     677            5 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     678            5 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     679            5 :     CCU_CHK_PTR_NULL(kernel);
     680            5 :     CCU_CHK_RET(kernel->DoWhileEnd(var, immediate, condType, label));
     681              : 
     682            5 :     return CcuResult::CCU_SUCCESS;
     683              : }
     684              : 
     685            3 : CcuResult CcuIfBeginVar(CcuVariableHandle lhs, CcuVariableHandle rhs, CcuConditionType condType, const char* label)
     686              : {
     687            3 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     688            3 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     689            3 :     CCU_CHK_PTR_NULL(kernel);
     690            3 :     CCU_CHK_RET(kernel->IfBeginVar(lhs, rhs, condType, label));
     691              : 
     692            3 :     return CcuResult::CCU_SUCCESS;
     693              : }
     694              : 
     695            1 : CcuResult CcuWhileBeginVar(CcuVariableHandle lhs, CcuVariableHandle rhs, CcuConditionType condType, const char* label)
     696              : {
     697            1 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     698            1 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     699            1 :     CCU_CHK_PTR_NULL(kernel);
     700            1 :     CCU_CHK_RET(kernel->WhileBeginVar(lhs, rhs, condType, label));
     701              : 
     702            1 :     return CcuResult::CCU_SUCCESS;
     703              : }
     704              : 
     705            1 : CcuResult CcuDoWhileEndVar(CcuVariableHandle lhs, CcuVariableHandle rhs, CcuConditionType condType, const char* label)
     706              : {
     707            1 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     708            1 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     709            1 :     CCU_CHK_PTR_NULL(kernel);
     710            1 :     CCU_CHK_RET(kernel->DoWhileEndVar(lhs, rhs, condType, label));
     711              : 
     712            1 :     return CcuResult::CCU_SUCCESS;
     713              : }
     714              : 
     715              : /*========== 函数调用操作 ==========*/
     716            8 : CcuResult CcuFuncBlockLookup(const void* funcPtr, uint64_t* outHandle)
     717              : {
     718            8 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     719            8 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     720            8 :     CCU_CHK_PTR_NULL(kernel);
     721            8 :     CCU_CHK_RET(kernel->FuncBlockLookup(funcPtr, outHandle));
     722            6 :     return CcuResult::CCU_SUCCESS;
     723              : }
     724              : 
     725            5 : CcuResult CcuFuncBlockBegin(const void* funcPtr, uint64_t* outHandle)
     726              : {
     727            5 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     728            5 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     729            5 :     CCU_CHK_PTR_NULL(kernel);
     730            5 :     CCU_CHK_RET(kernel->FuncBlockBegin(funcPtr, outHandle));
     731            5 :     return CcuResult::CCU_SUCCESS;
     732              : }
     733              : 
     734            4 : CcuResult CcuFuncBlockEnd(uint64_t handle)
     735              : {
     736            4 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     737            4 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     738            4 :     CCU_CHK_PTR_NULL(kernel);
     739            4 :     CCU_CHK_RET(kernel->FuncBlockEnd(handle));
     740            4 :     return CcuResult::CCU_SUCCESS;
     741              : }
     742              : 
     743            7 : CcuResult CcuFuncDefineInArg(uint64_t handle, CcuVariableHandle formal)
     744              : {
     745            7 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     746            7 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     747            7 :     CCU_CHK_PTR_NULL(kernel);
     748            7 :     CCU_CHK_RET(kernel->FuncDefineInArg(handle, formal));
     749            7 :     return CcuResult::CCU_SUCCESS;
     750              : }
     751              : 
     752            5 : CcuResult CcuFuncCall(uint64_t handle, const CcuVariableHandle* inArgs, uint32_t numIn)
     753              : {
     754            5 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     755            5 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     756            5 :     CCU_CHK_PTR_NULL(kernel);
     757            5 :     CCU_CHK_RET(kernel->FuncCall(handle, inArgs, numIn));
     758            5 :     return CcuResult::CCU_SUCCESS;
     759              : }
     760              : 
     761              : /*========== 循环操作 ==========*/
     762           51 : CcuResult CcuLoopCreate(CcuLoop* loop)
     763              : {
     764           51 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     765           51 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     766           51 :     CCU_CHK_PTR_NULL(kernel);
     767           51 :     CCU_CHK_RET(kernel->LoopCreate(loop));
     768           51 :     return CcuResult::CCU_SUCCESS;
     769              : }
     770              : 
     771           51 : CcuResult _CcuLoopBodyEnter(CcuLoop loop)
     772              : {
     773           51 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     774           51 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     775           51 :     CCU_CHK_PTR_NULL(kernel);
     776           51 :     CCU_CHK_RET(kernel->LoopBodyEnter(loop));
     777           51 :     return CcuResult::CCU_SUCCESS;
     778              : }
     779              : 
     780           51 : CcuResult _CcuLoopBodyExit(CcuLoop loop)
     781              : {
     782           51 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     783           51 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     784           51 :     CCU_CHK_PTR_NULL(kernel);
     785           51 :     CCU_CHK_RET(kernel->LoopBodyExit(loop));
     786           45 :     return CcuResult::CCU_SUCCESS;
     787              : }
     788              : 
     789            0 : CcuResult CcuLoopGroupCreate(CcuLoopGroup* group, uint32_t maxLoopNum, const CcuLoopGroupConfig* config)
     790              : {
     791            0 :     if (config == nullptr) {
     792            0 :         return CcuResult::CCU_E_PTR;
     793              :     }
     794              :     // 旧 config 无 varOffset,在边界归一化为 cfg(varOffset=0),kernel 只认 cfg。
     795            0 :     CcuLoopGroupCfg cfg{};
     796            0 :     CcuLoopGroupCfgInit(&cfg);
     797            0 :     cfg.cloneNum = config->cloneNum;
     798            0 :     cfg.cloneLoopOffset = config->cloneLoopOffset;
     799            0 :     cfg.addrOffset = config->addrOffset;
     800            0 :     cfg.ccuBufferOffset = config->ccuBufferOffset;
     801            0 :     cfg.eventOffset = config->eventOffset;
     802            0 :     cfg.varOffset = 0;
     803            0 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     804            0 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     805            0 :     CCU_CHK_PTR_NULL(kernel);
     806            0 :     CCU_CHK_RET(kernel->LoopGroupCreate(group, maxLoopNum, &cfg));
     807            0 :     return CcuResult::CCU_SUCCESS;
     808              : }
     809              : 
     810           11 : CcuResult CcuLoopGroupCreateFromVar(
     811              :     CcuLoopGroup* group, uint32_t maxLoopNum, CcuVariableHandle parallelVar, CcuVariableHandle offsetVar)
     812              : {
     813           11 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     814           11 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     815           11 :     CCU_CHK_PTR_NULL(kernel);
     816           11 :     CCU_CHK_RET(kernel->LoopGroupCreateFromVar(group, maxLoopNum, parallelVar, offsetVar));
     817           11 :     return CcuResult::CCU_SUCCESS;
     818              : }
     819              : 
     820            5 : CcuResult CcuLoopGroupCreateFromVarV2(
     821              :     CcuLoopGroup* group, uint32_t maxLoopNum, CcuVariableHandle parallelVarV2, CcuVariableHandle offsetVarV2,
     822              :     CcuVariableHandle varOffsetVar)
     823              : {
     824            5 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     825            5 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     826            5 :     CCU_CHK_PTR_NULL(kernel);
     827            5 :     CCU_CHK_RET(kernel->LoopGroupCreateFromVarV2(group, maxLoopNum, parallelVarV2, offsetVarV2, varOffsetVar));
     828            4 :     return CcuResult::CCU_SUCCESS;
     829              : }
     830              : 
     831            0 : CcuResult CcuLoopGroupAddLoop(CcuLoopGroup group, CcuLoop loop, const CcuLoopConfig* config)
     832              : {
     833            0 :     if (config == nullptr) {
     834            0 :         return CcuResult::CCU_E_PTR;
     835              :     }
     836            0 :     CcuLoopCfg cfg{};
     837            0 :     CcuLoopCfgInit(&cfg);
     838            0 :     cfg.addrOffset = config->addrOffset;
     839            0 :     cfg.iterNum = config->iterNum;
     840            0 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     841            0 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     842            0 :     CCU_CHK_PTR_NULL(kernel);
     843            0 :     CCU_CHK_RET(kernel->LoopGroupAddLoop(group, loop, &cfg));
     844            0 :     return CcuResult::CCU_SUCCESS;
     845              : }
     846              : 
     847           14 : CcuResult CcuLoopGroupCreateCfg(CcuLoopGroup* group, uint32_t maxLoopNum, const CcuLoopGroupCfg* cfg)
     848              : {
     849           14 :     if (cfg == nullptr) {
     850            0 :         return CcuResult::CCU_E_PTR;
     851              :     }
     852           14 :     CCU_CHK_RET(ValidateCcuCfgHeader(&cfg->header, sizeof(CcuLoopGroupCfg), CCU_LOOPGROUP_CFG_VERSION));
     853           13 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     854           13 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     855           13 :     CCU_CHK_PTR_NULL(kernel);
     856           13 :     CCU_CHK_RET(kernel->LoopGroupCreate(group, maxLoopNum, cfg));
     857           13 :     return CcuResult::CCU_SUCCESS;
     858              : }
     859              : 
     860           26 : CcuResult CcuLoopGroupAddLoopCfg(CcuLoopGroup group, CcuLoop loop, const CcuLoopCfg* cfg)
     861              : {
     862           26 :     if (cfg == nullptr) {
     863            0 :         return CcuResult::CCU_E_PTR;
     864              :     }
     865           26 :     CCU_CHK_RET(ValidateCcuCfgHeader(&cfg->header, sizeof(CcuLoopCfg), CCU_LOOP_CFG_VERSION));
     866           25 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     867           25 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     868           25 :     CCU_CHK_PTR_NULL(kernel);
     869           25 :     CCU_CHK_RET(kernel->LoopGroupAddLoop(group, loop, cfg));
     870           25 :     return CcuResult::CCU_SUCCESS;
     871              : }
     872              : 
     873           23 : CcuResult CcuLoopGroupAddLoopFromVar(CcuLoopGroup group, CcuLoop loop, CcuVariableHandle loopParamVar)
     874              : {
     875           23 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     876           23 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     877           23 :     CCU_CHK_PTR_NULL(kernel);
     878           23 :     CCU_CHK_RET(kernel->LoopGroupAddLoopFromVar(group, loop, loopParamVar));
     879           23 :     return CcuResult::CCU_SUCCESS;
     880              : }
     881              : 
     882            8 : CcuResult CcuLoopGroupAddLoopFromVarV2(
     883              :     CcuLoopGroup group, CcuLoop loop, CcuVariableHandle iterNumVar, CcuVariableHandle addrOffsetVar,
     884              :     CcuVariableHandle ctxIdVar)
     885              : {
     886            8 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     887            8 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     888            8 :     CCU_CHK_PTR_NULL(kernel);
     889            8 :     CCU_CHK_RET(kernel->LoopGroupAddLoopFromVarV2(group, loop, iterNumVar, addrOffsetVar, ctxIdVar));
     890            8 :     return CcuResult::CCU_SUCCESS;
     891              : }
     892              : 
     893              : // 控制流标签栈 C 接口(_CcuIfStack* / _CcuDoWhileStack*)
     894              : 
     895          104 : void _CcuIfStackPush(const char* label)
     896              : {
     897          104 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     898          104 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     899          104 :     if (kernel == nullptr) {
     900            0 :         HCCL_ERROR("[_CcuIfStackPush] no current kernel, label=%s", label != nullptr ? label : "(null)");
     901            0 :         return;
     902              :     }
     903          104 :     kernel->IfLabelStackPush(label);
     904              : }
     905              : 
     906          104 : void _CcuIfStackMarkBodyDone()
     907              : {
     908          104 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     909          104 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     910          104 :     if (kernel == nullptr) {
     911            0 :         HCCL_ERROR("[_CcuIfStackMarkBodyDone] no current kernel");
     912            0 :         return;
     913              :     }
     914          104 :     kernel->IfLabelStackMarkBodyDone();
     915              : }
     916              : 
     917           22 : const char* _CcuIfStackPopForElse()
     918              : {
     919           22 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     920           22 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     921           22 :     if (kernel == nullptr) {
     922            0 :         HCCL_ERROR("[_CcuIfStackPopForElse] no current kernel");
     923            0 :         return nullptr;
     924              :     }
     925           22 :     return kernel->IfLabelStackPopForElse();
     926              : }
     927              : 
     928            6 : void _CcuDoWhileStackPush(const char* label)
     929              : {
     930            6 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     931            6 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     932            6 :     if (kernel == nullptr) {
     933            0 :         HCCL_ERROR("[_CcuDoWhileStackPush] no current kernel, label=%s", label != nullptr ? label : "(null)");
     934            0 :         return;
     935              :     }
     936            6 :     kernel->DoWhileLabelStackPush(label);
     937              : }
     938              : 
     939           10 : const char* _CcuDoWhileStackPopForWhile()
     940              : {
     941           10 :     const uint32_t devLogicId = HcclGetThreadDeviceId();
     942           10 :     auto kernel = hcomm::CcuKernelMgr::GetInstance(devLogicId).GetCurrentKernel();
     943           10 :     if (kernel == nullptr) {
     944              :         // 见上方注释:CCU_WHILE 每次都会调本函数做模式判别,保持沉默。
     945            0 :         return nullptr;
     946              :     }
     947           10 :     return kernel->DoWhileLabelStackPopForWhile();
     948              : }
        

Generated by: LCOV version 2.0-1