LCOV - code coverage report
Current view: top level - legacy/ascend910/framework/device - hccl_aicpu_transport_interface.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 0.0 % 96 0
Test Date: 2026-08-04 10:52:23 Functions: 0.0 % 2 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              : 
      11              : #include "hccl_aicpu_transport_interface.h"
      12              : 
      13              : #include <sstream>
      14              : #include "common/aicpu_hccl_def.h"
      15              : #include "common/aicpu_sqe_context.h"
      16              : #include "profiling_manager_device.h"
      17              : #include "framework/aicpu_hccl_process.h"
      18              : #include "utils/hccl_aicpu_utils.h"
      19              : 
      20              : extern "C" {
      21            0 : __attribute__((visibility("default"))) uint32_t RunTransportRoceTx(void *args)
      22              : {
      23            0 :     CHK_PTR_NULL(args);
      24            0 :     PostSendTaskParam *SRInfo = reinterpret_cast<PostSendTaskParam *>(args);
      25              :     // Check Local Flag
      26            0 :     uint32_t lfKey = SRInfo->lfKey;
      27            0 :     uint32_t rfKey = SRInfo->rfKey;
      28            0 :     HcclQpInfoV2 qpInfo = SRInfo->qpInfo;
      29            0 :     hccl::Transport::Buffer localFlagBufforWrite[3];
      30            0 :     hccl::Transport::Buffer localFlagBufforCheck[3];
      31            0 :     hccl::Transport::Buffer remoteFlagBuf[3];
      32            0 :     uint32_t *lFlagAddr = reinterpret_cast<uint32_t *>(SRInfo->localFlagAddr);
      33            0 :     uint32_t *rFlagAddr = reinterpret_cast<uint32_t *>(SRInfo->remoteFlagAddr);
      34            0 :     const uint64_t timeout = SRInfo->timeOut;
      35              : 
      36              :     // Init Flag Area
      37            0 :     HcclResult ret =AicpuHcclProcess::InitAsyncFlag(lFlagAddr, rFlagAddr, localFlagBufforCheck,
      38              :         localFlagBufforWrite, remoteFlagBuf);
      39            0 :     if(ret != HCCL_SUCCESS) {
      40            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceTx]InitAsyncFlag Failed, lFlagAddr is [%p], rFlagAddr is [%p], "
      41              :         "localFlagBufforCheck is [%p], localFlagBufforWrite is [%p], remoteFlagBuf is [%p]"
      42              :             "remoteFlagBuf.size is [%u]", lFlagAddr, rFlagAddr, localFlagBufforCheck, localFlagBufforWrite, remoteFlagBuf);
      43            0 :         return ret;
      44              :     }
      45              :     // start write flag 1
      46            0 :     ret = HcclAicpuUtils::PostSend(lfKey, rfKey, qpInfo, remoteFlagBuf[0], localFlagBufforWrite[0], true); // RDMA WriteFlag
      47            0 :     if(ret != HCCL_SUCCESS) {
      48            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceTx]PostSendFlag Failed, lfKey is [%u], rfKey is [%u], qpInfo.qpPtr is [%p]"
      49              :             "localFlagBufforWrite.addr is [%llx], localFlagBufforWrite.size is [%u],remoteFlagBuf.addr is [%llx],"
      50              :             "remoteFlagBuf.size is [%u]", lfKey, rfKey, qpInfo.qpPtr, localFlagBufforWrite[0].addr,
      51              :             localFlagBufforWrite[0].size, remoteFlagBuf[0].addr, remoteFlagBuf[0].size);
      52            0 :         return ret;
      53              :     }
      54              :     // 轮询等待flag 1
      55            0 :     ret = AicpuHcclProcess::WaitAsyncFlag(localFlagBufforCheck, 1, timeout);
      56            0 :     if(ret != HCCL_SUCCESS) {
      57            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceTx]WaitFlag Failed lfKey %u rfKey %u.", lfKey, rfKey);
      58            0 :         return ret;
      59              :     }
      60              :     // 向对端开始写数据
      61            0 :     uint32_t lKey = SRInfo->lKey;
      62            0 :     uint32_t rKey = SRInfo->rKey;
      63            0 :     hccl::Transport::Buffer remoteBuf;
      64            0 :     remoteBuf.addr = reinterpret_cast<void *>(SRInfo->remoteAddr);
      65            0 :     remoteBuf.size = static_cast<uint32_t>(SRInfo->dataSize);
      66            0 :     hccl::Transport::Buffer localBuf;
      67            0 :     localBuf.addr = reinterpret_cast<void *>(SRInfo->localAddr);
      68            0 :     localBuf.size = static_cast<uint32_t>(SRInfo->dataSize);
      69            0 :     ret = HcclAicpuUtils::PostSend(lKey, rKey, qpInfo, remoteBuf, localBuf, true); // RDMA WriteData
      70            0 :     if(ret != HCCL_SUCCESS) {
      71            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceTx]PostSendData Failed, lKey is [%u], rKey is [%u],"
      72              :         "qpInfo.qpPtr is [%llx],remoteBuf.addr is [%llx], remoteBuf.size is [%u], localBuf.addr is [%llx],"
      73              :         "localBuf.size is [%u]",lKey, rKey,qpInfo.qpPtr, remoteBuf.addr, remoteBuf.size,localBuf.addr, localBuf.size);
      74            0 :         return ret;
      75              :     }
      76              : 
      77              :     // 写完数据发个flag 2,告知对端数据已经写过去了
      78            0 :     ret = HcclAicpuUtils::PostSend(lfKey, rfKey, qpInfo, remoteFlagBuf[1], localFlagBufforWrite[1], true); // RDMA WriteFlag
      79            0 :     if(ret != HCCL_SUCCESS) {
      80            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceTx]PostSendFlag Failed, now Operation is WriteFlag, lfKey is [%u], rfKey is [%u],"
      81              :             "localFlagBufforWrite.addr is [%llx], localFlagBufforWrite.size is [%u],remoteFlagBuf.addr is [%llx],"
      82              :             "remoteFlagBuf.size is [%u]", lfKey, rfKey, localFlagBufforWrite[1].addr, localFlagBufforWrite[1].size,
      83              :             remoteFlagBuf[1].addr, remoteFlagBuf[1].size);
      84            0 :         return ret;
      85              :     }
      86              :     // 轮询等待flag 2
      87            0 :     ret = AicpuHcclProcess::WaitAsyncFlag(localFlagBufforCheck, 2, timeout);
      88            0 :     if(ret != HCCL_SUCCESS) {
      89            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceTx]WaitFlag Failed lfKey %u rfKey %u.", lfKey, rfKey);
      90            0 :         return ret;
      91              :     }
      92              :     // 再发个flag 3,尾同步
      93            0 :     ret = HcclAicpuUtils::PostSend(lfKey, rfKey, qpInfo, remoteFlagBuf[2], localFlagBufforWrite[2], true); // RDMA WriteFlag
      94            0 :     if(ret != HCCL_SUCCESS) {
      95            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceTx]PostSendFlag Failed, now Operation is WriteFlag, lfKey is [%u], rfKey is [%u],"
      96              :             "localFlagBufforWrite.addr is [%llx], localFlagBufforWrite.size is [%u],remoteFlagBuf.addr is [%llx],"
      97              :             "remoteFlagBuf.size is [%u]", lfKey, rfKey, localFlagBufforWrite[2].addr, localFlagBufforWrite[2].size,
      98              :             remoteFlagBuf[2].addr, remoteFlagBuf[2].size);
      99            0 :         return ret;
     100              :     }
     101              :     // 轮询等待flag 3
     102            0 :     ret = AicpuHcclProcess::WaitAsyncFlag(localFlagBufforCheck, 3, timeout);
     103            0 :     if(ret != HCCL_SUCCESS) {
     104            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceTx]WaitFlag Failed lfKey %u rfKey %u.", lfKey, rfKey);
     105            0 :         return ret;
     106              :     }
     107            0 :     HCCL_INFO("[AiCpuKernel][RunTransportRoceTx]Kernel run success");
     108            0 :     return HCCL_SUCCESS;
     109              : }
     110              : 
     111            0 : __attribute__((visibility("default"))) uint32_t RunTransportRoceRx(void *args)
     112              : {
     113            0 :     CHK_PTR_NULL(args);
     114            0 :     PostSendTaskParam *SRInfo = reinterpret_cast<PostSendTaskParam *>(args);
     115            0 :     HcclQpInfoV2 qpInfo = SRInfo->qpInfo;
     116            0 :     uint32_t lfKey = SRInfo->lfKey;
     117            0 :     uint32_t rfKey = SRInfo->rfKey;
     118            0 :     hccl::Transport::Buffer localFlagBufforWrite[3];
     119            0 :     hccl::Transport::Buffer localFlagBufforCheck[3];
     120            0 :     hccl::Transport::Buffer remoteFlagBuf[3];
     121              : 
     122            0 :     uint32_t *lFlagAddr = reinterpret_cast<uint32_t *>(SRInfo->localFlagAddr);
     123            0 :     uint32_t *rFlagAddr = reinterpret_cast<uint32_t *>(SRInfo->remoteFlagAddr);
     124            0 :     uint64_t timeout = SRInfo->timeOut;
     125              :     // Init Flag Area
     126            0 :     HcclResult ret =AicpuHcclProcess::InitAsyncFlag(lFlagAddr, rFlagAddr, localFlagBufforCheck,
     127              :         localFlagBufforWrite, remoteFlagBuf);
     128            0 :     if(ret != HCCL_SUCCESS) {
     129            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceTx]InitAsyncFlag Failed, lFlagAddr is [%p], rFlagAddr is [%p], "
     130              :         "localFlagBufforCheck is [%p], localFlagBufforWrite is [%p], remoteFlagBuf is [%p]"
     131              :             "remoteFlagBuf.size is [%u]", lFlagAddr, rFlagAddr, localFlagBufforCheck, localFlagBufforWrite, remoteFlagBuf);
     132            0 :         return ret;
     133              :     }
     134              :     // start write flag 1
     135            0 :     ret = HcclAicpuUtils::PostSend(lfKey, rfKey, qpInfo, remoteFlagBuf[0], localFlagBufforWrite[0], true); // RDMA WriteFlag
     136            0 :     if(ret != HCCL_SUCCESS) {
     137            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceRx]PostSendFlag Failed, lfKey is [%u], rfKey is [%u], qpInfo.qpPtr is [%p]"
     138              :             "localFlagBufforWrite.addr is [%llx], localFlagBufforWrite.size is [%u],remoteFlagBuf.addr is [%llx],"
     139              :             "remoteFlagBuf.size is [%u]", lfKey, rfKey, qpInfo.qpPtr, localFlagBufforWrite[0].addr,
     140              :             localFlagBufforWrite[0].size, remoteFlagBuf[0].addr, remoteFlagBuf[0].size);
     141            0 :         return ret;
     142              :     }
     143              :     // 轮询等待flag 1
     144            0 :     ret = AicpuHcclProcess::WaitAsyncFlag(localFlagBufforCheck, 1, timeout);
     145            0 :     if(ret != HCCL_SUCCESS) {
     146            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceRx]WaitFlag Failed lfKey %u rfKey %u.", lfKey, rfKey);
     147            0 :         return ret;
     148              :     }
     149              : 
     150            0 :     ret = HcclAicpuUtils::PostSend(lfKey, rfKey, qpInfo, remoteFlagBuf[1], localFlagBufforWrite[1], true); // RDMA WriteFlag
     151            0 :     if(ret != HCCL_SUCCESS) {
     152            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceRx]PostSendFlag Failed, now Operation is WriteFlag, lfKey is [%u], rfKey is [%u],"
     153              :             "localFlagBufforWrite.addr is [%llx], localFlagBufforWrite.size is [%u],remoteFlagBuf.addr is [%llx],"
     154              :             "remoteFlagBuf.size is [%u]", lfKey, rfKey, localFlagBufforWrite[1].addr, localFlagBufforWrite[1].size,
     155              :             remoteFlagBuf[1].addr, remoteFlagBuf[1].size);
     156            0 :         return ret;
     157              :     }
     158              :     // 轮询等待flag 2
     159            0 :     ret = AicpuHcclProcess::WaitAsyncFlag(localFlagBufforCheck, 2, timeout);
     160            0 :     if(ret != HCCL_SUCCESS) {
     161            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceRx]WaitFlag Failed lfKey %u rfKey %u.", lfKey, rfKey);
     162            0 :         return ret;
     163              :     }
     164              :     // 再发个flag 3,尾同步
     165            0 :     ret = HcclAicpuUtils::PostSend(lfKey, rfKey, qpInfo, remoteFlagBuf[2], localFlagBufforWrite[2], true); // RDMA WriteFlag
     166            0 :     if(ret != HCCL_SUCCESS) {
     167            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceRx]PostSendFlag Failed, now Operation is WriteFlag, lfKey is [%u], rfKey is [%u],"
     168              :             "localFlagBufforWrite.addr is [%llx], localFlagBufforWrite.size is [%u],remoteFlagBuf.addr is [%llx],"
     169              :             "remoteFlagBuf.size is [%u]", lfKey, rfKey, localFlagBufforWrite[2].addr, localFlagBufforWrite[2].size,
     170              :             remoteFlagBuf[2].addr, remoteFlagBuf[2].size);
     171            0 :         return ret;
     172              :     }
     173              :     // 轮询等待flag 3
     174            0 :     ret = AicpuHcclProcess::WaitAsyncFlag(localFlagBufforCheck, 3, timeout);
     175            0 :     if(ret != HCCL_SUCCESS) {
     176            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceRx]WaitFlag Failed lfKey %u rfKey %u.", lfKey, rfKey);
     177            0 :         return ret;
     178              :     }
     179            0 :     HCCL_INFO("[AiCpuKernel][RunTransportRoceRx]Kernel run success");
     180            0 :     return HCCL_SUCCESS;
     181              : }
     182              : }  // extern "C"
        

Generated by: LCOV version 2.0-1