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-18 17:47:01 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(
      38              :         lFlagAddr, rFlagAddr, localFlagBufforCheck, localFlagBufforWrite, remoteFlagBuf);
      39            0 :     if (ret != HCCL_SUCCESS) {
      40            0 :         HCCL_ERROR(
      41              :             "[AiCpuKernel][RunTransportRoceTx]InitAsyncFlag Failed, lFlagAddr is [%p], rFlagAddr is [%p], "
      42              :             "localFlagBufforCheck is [%p], localFlagBufforWrite is [%p], remoteFlagBuf is [%p]"
      43              :             "remoteFlagBuf.size is [%u]",
      44              :             lFlagAddr, rFlagAddr, localFlagBufforCheck, localFlagBufforWrite, remoteFlagBuf);
      45            0 :         return ret;
      46              :     }
      47              :     // start write flag 1
      48            0 :     ret = HcclAicpuUtils::PostSend(
      49              :         lfKey, rfKey, qpInfo, remoteFlagBuf[0], localFlagBufforWrite[0], true); // RDMA WriteFlag
      50            0 :     if (ret != HCCL_SUCCESS) {
      51            0 :         HCCL_ERROR(
      52              :             "[AiCpuKernel][RunTransportRoceTx]PostSendFlag Failed, lfKey is [%u], rfKey is [%u], qpInfo.qpPtr is [%p]"
      53              :             "localFlagBufforWrite.addr is [%llx], localFlagBufforWrite.size is [%u],remoteFlagBuf.addr is [%llx],"
      54              :             "remoteFlagBuf.size is [%u]",
      55              :             lfKey, rfKey, qpInfo.qpPtr, localFlagBufforWrite[0].addr, localFlagBufforWrite[0].size,
      56              :             remoteFlagBuf[0].addr, remoteFlagBuf[0].size);
      57            0 :         return ret;
      58              :     }
      59              :     // 轮询等待flag 1
      60            0 :     ret = AicpuHcclProcess::WaitAsyncFlag(localFlagBufforCheck, 1, timeout);
      61            0 :     if (ret != HCCL_SUCCESS) {
      62            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceTx]WaitFlag Failed lfKey %u rfKey %u.", lfKey, rfKey);
      63            0 :         return ret;
      64              :     }
      65              :     // 向对端开始写数据
      66            0 :     uint32_t lKey = SRInfo->lKey;
      67            0 :     uint32_t rKey = SRInfo->rKey;
      68            0 :     hccl::Transport::Buffer remoteBuf;
      69            0 :     remoteBuf.addr = reinterpret_cast<void*>(SRInfo->remoteAddr);
      70            0 :     remoteBuf.size = static_cast<uint32_t>(SRInfo->dataSize);
      71            0 :     hccl::Transport::Buffer localBuf;
      72            0 :     localBuf.addr = reinterpret_cast<void*>(SRInfo->localAddr);
      73            0 :     localBuf.size = static_cast<uint32_t>(SRInfo->dataSize);
      74            0 :     ret = HcclAicpuUtils::PostSend(lKey, rKey, qpInfo, remoteBuf, localBuf, true); // RDMA WriteData
      75            0 :     if (ret != HCCL_SUCCESS) {
      76            0 :         HCCL_ERROR(
      77              :             "[AiCpuKernel][RunTransportRoceTx]PostSendData Failed, lKey is [%u], rKey is [%u],"
      78              :             "qpInfo.qpPtr is [%llx],remoteBuf.addr is [%llx], remoteBuf.size is [%u], localBuf.addr is [%llx],"
      79              :             "localBuf.size is [%u]",
      80              :             lKey, rKey, qpInfo.qpPtr, remoteBuf.addr, remoteBuf.size, localBuf.addr, localBuf.size);
      81            0 :         return ret;
      82              :     }
      83              : 
      84              :     // 写完数据发个flag 2,告知对端数据已经写过去了
      85            0 :     ret = HcclAicpuUtils::PostSend(
      86              :         lfKey, rfKey, qpInfo, remoteFlagBuf[1], localFlagBufforWrite[1], true); // RDMA WriteFlag
      87            0 :     if (ret != HCCL_SUCCESS) {
      88            0 :         HCCL_ERROR(
      89              :             "[AiCpuKernel][RunTransportRoceTx]PostSendFlag Failed, now Operation is WriteFlag, lfKey is [%u], rfKey is "
      90              :             "[%u],"
      91              :             "localFlagBufforWrite.addr is [%llx], localFlagBufforWrite.size is [%u],remoteFlagBuf.addr is [%llx],"
      92              :             "remoteFlagBuf.size is [%u]",
      93              :             lfKey, rfKey, localFlagBufforWrite[1].addr, localFlagBufforWrite[1].size, remoteFlagBuf[1].addr,
      94              :             remoteFlagBuf[1].size);
      95            0 :         return ret;
      96              :     }
      97              :     // 轮询等待flag 2
      98            0 :     ret = AicpuHcclProcess::WaitAsyncFlag(localFlagBufforCheck, 2, timeout);
      99            0 :     if (ret != HCCL_SUCCESS) {
     100            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceTx]WaitFlag Failed lfKey %u rfKey %u.", lfKey, rfKey);
     101            0 :         return ret;
     102              :     }
     103              :     // 再发个flag 3,尾同步
     104            0 :     ret = HcclAicpuUtils::PostSend(
     105              :         lfKey, rfKey, qpInfo, remoteFlagBuf[2], localFlagBufforWrite[2], true); // RDMA WriteFlag
     106            0 :     if (ret != HCCL_SUCCESS) {
     107            0 :         HCCL_ERROR(
     108              :             "[AiCpuKernel][RunTransportRoceTx]PostSendFlag Failed, now Operation is WriteFlag, lfKey is [%u], rfKey is "
     109              :             "[%u],"
     110              :             "localFlagBufforWrite.addr is [%llx], localFlagBufforWrite.size is [%u],remoteFlagBuf.addr is [%llx],"
     111              :             "remoteFlagBuf.size is [%u]",
     112              :             lfKey, rfKey, localFlagBufforWrite[2].addr, localFlagBufforWrite[2].size, remoteFlagBuf[2].addr,
     113              :             remoteFlagBuf[2].size);
     114            0 :         return ret;
     115              :     }
     116              :     // 轮询等待flag 3
     117            0 :     ret = AicpuHcclProcess::WaitAsyncFlag(localFlagBufforCheck, 3, timeout);
     118            0 :     if (ret != HCCL_SUCCESS) {
     119            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceTx]WaitFlag Failed lfKey %u rfKey %u.", lfKey, rfKey);
     120            0 :         return ret;
     121              :     }
     122            0 :     HCCL_INFO("[AiCpuKernel][RunTransportRoceTx]Kernel run success");
     123            0 :     return HCCL_SUCCESS;
     124              : }
     125              : 
     126            0 : __attribute__((visibility("default"))) uint32_t RunTransportRoceRx(void* args)
     127              : {
     128            0 :     CHK_PTR_NULL(args);
     129            0 :     PostSendTaskParam* SRInfo = reinterpret_cast<PostSendTaskParam*>(args);
     130            0 :     HcclQpInfoV2 qpInfo = SRInfo->qpInfo;
     131            0 :     uint32_t lfKey = SRInfo->lfKey;
     132            0 :     uint32_t rfKey = SRInfo->rfKey;
     133            0 :     hccl::Transport::Buffer localFlagBufforWrite[3];
     134            0 :     hccl::Transport::Buffer localFlagBufforCheck[3];
     135            0 :     hccl::Transport::Buffer remoteFlagBuf[3];
     136              : 
     137            0 :     uint32_t* lFlagAddr = reinterpret_cast<uint32_t*>(SRInfo->localFlagAddr);
     138            0 :     uint32_t* rFlagAddr = reinterpret_cast<uint32_t*>(SRInfo->remoteFlagAddr);
     139            0 :     uint64_t timeout = SRInfo->timeOut;
     140              :     // Init Flag Area
     141            0 :     HcclResult ret = AicpuHcclProcess::InitAsyncFlag(
     142              :         lFlagAddr, rFlagAddr, localFlagBufforCheck, localFlagBufforWrite, remoteFlagBuf);
     143            0 :     if (ret != HCCL_SUCCESS) {
     144            0 :         HCCL_ERROR(
     145              :             "[AiCpuKernel][RunTransportRoceTx]InitAsyncFlag Failed, lFlagAddr is [%p], rFlagAddr is [%p], "
     146              :             "localFlagBufforCheck is [%p], localFlagBufforWrite is [%p], remoteFlagBuf is [%p]"
     147              :             "remoteFlagBuf.size is [%u]",
     148              :             lFlagAddr, rFlagAddr, localFlagBufforCheck, localFlagBufforWrite, remoteFlagBuf);
     149            0 :         return ret;
     150              :     }
     151              :     // start write flag 1
     152            0 :     ret = HcclAicpuUtils::PostSend(
     153              :         lfKey, rfKey, qpInfo, remoteFlagBuf[0], localFlagBufforWrite[0], true); // RDMA WriteFlag
     154            0 :     if (ret != HCCL_SUCCESS) {
     155            0 :         HCCL_ERROR(
     156              :             "[AiCpuKernel][RunTransportRoceRx]PostSendFlag Failed, lfKey is [%u], rfKey is [%u], qpInfo.qpPtr is [%p]"
     157              :             "localFlagBufforWrite.addr is [%llx], localFlagBufforWrite.size is [%u],remoteFlagBuf.addr is [%llx],"
     158              :             "remoteFlagBuf.size is [%u]",
     159              :             lfKey, rfKey, qpInfo.qpPtr, localFlagBufforWrite[0].addr, localFlagBufforWrite[0].size,
     160              :             remoteFlagBuf[0].addr, remoteFlagBuf[0].size);
     161            0 :         return ret;
     162              :     }
     163              :     // 轮询等待flag 1
     164            0 :     ret = AicpuHcclProcess::WaitAsyncFlag(localFlagBufforCheck, 1, timeout);
     165            0 :     if (ret != HCCL_SUCCESS) {
     166            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceRx]WaitFlag Failed lfKey %u rfKey %u.", lfKey, rfKey);
     167            0 :         return ret;
     168              :     }
     169              : 
     170            0 :     ret = HcclAicpuUtils::PostSend(
     171              :         lfKey, rfKey, qpInfo, remoteFlagBuf[1], localFlagBufforWrite[1], true); // RDMA WriteFlag
     172            0 :     if (ret != HCCL_SUCCESS) {
     173            0 :         HCCL_ERROR(
     174              :             "[AiCpuKernel][RunTransportRoceRx]PostSendFlag Failed, now Operation is WriteFlag, lfKey is [%u], rfKey is "
     175              :             "[%u],"
     176              :             "localFlagBufforWrite.addr is [%llx], localFlagBufforWrite.size is [%u],remoteFlagBuf.addr is [%llx],"
     177              :             "remoteFlagBuf.size is [%u]",
     178              :             lfKey, rfKey, localFlagBufforWrite[1].addr, localFlagBufforWrite[1].size, remoteFlagBuf[1].addr,
     179              :             remoteFlagBuf[1].size);
     180            0 :         return ret;
     181              :     }
     182              :     // 轮询等待flag 2
     183            0 :     ret = AicpuHcclProcess::WaitAsyncFlag(localFlagBufforCheck, 2, timeout);
     184            0 :     if (ret != HCCL_SUCCESS) {
     185            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceRx]WaitFlag Failed lfKey %u rfKey %u.", lfKey, rfKey);
     186            0 :         return ret;
     187              :     }
     188              :     // 再发个flag 3,尾同步
     189            0 :     ret = HcclAicpuUtils::PostSend(
     190              :         lfKey, rfKey, qpInfo, remoteFlagBuf[2], localFlagBufforWrite[2], true); // RDMA WriteFlag
     191            0 :     if (ret != HCCL_SUCCESS) {
     192            0 :         HCCL_ERROR(
     193              :             "[AiCpuKernel][RunTransportRoceRx]PostSendFlag Failed, now Operation is WriteFlag, lfKey is [%u], rfKey is "
     194              :             "[%u],"
     195              :             "localFlagBufforWrite.addr is [%llx], localFlagBufforWrite.size is [%u],remoteFlagBuf.addr is [%llx],"
     196              :             "remoteFlagBuf.size is [%u]",
     197              :             lfKey, rfKey, localFlagBufforWrite[2].addr, localFlagBufforWrite[2].size, remoteFlagBuf[2].addr,
     198              :             remoteFlagBuf[2].size);
     199            0 :         return ret;
     200              :     }
     201              :     // 轮询等待flag 3
     202            0 :     ret = AicpuHcclProcess::WaitAsyncFlag(localFlagBufforCheck, 3, timeout);
     203            0 :     if (ret != HCCL_SUCCESS) {
     204            0 :         HCCL_ERROR("[AiCpuKernel][RunTransportRoceRx]WaitFlag Failed lfKey %u rfKey %u.", lfKey, rfKey);
     205            0 :         return ret;
     206              :     }
     207            0 :     HCCL_INFO("[AiCpuKernel][RunTransportRoceRx]Kernel run success");
     208            0 :     return HCCL_SUCCESS;
     209              : }
     210              : } // extern "C"
        

Generated by: LCOV version 2.0-1