LCOV - code coverage report
Current view: top level - legacy/ascend950/unified_platform/resource/stream/aicpu - rtsq_a5.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 85.4 % 199 170
Test Date: 2026-07-28 12:11:00 Functions: 93.1 % 29 27

            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 <chrono>
      11              : #include <unordered_map>
      12              : #include "rtsq_a5.h"
      13              : #include "log.h"
      14              : #include "exception_util.h"
      15              : #include "internal_exception.h"
      16              : #include "sqe_build_a5.h"
      17              : #include "sqe.h"
      18              : #ifdef CCL_KERNEL_AICPU
      19              : #include "aicpu_ts_primitives_c_adpt.h"
      20              : #endif
      21              : 
      22              : namespace Hccl {
      23              : using namespace std;
      24              : constexpr u32 RTSQ_A5_PART_ID   = 0;
      25              : constexpr u32 PRINT_INTERVAL  = 30;
      26              : 
      27          169 : RtsqA5::RtsqA5(u32 devPhyId, u32 streamId, u32 sqId) : RtsqBase(devPhyId, streamId, sqId)
      28              : {
      29          169 :     SetTaskIdBySqeId();
      30          169 : }
      31              : 
      32            0 : RtsqA5::RtsqA5(u32 devPhyId, u32 streamId, u32 sqId, bool launchFlag) : RtsqBase(devPhyId, streamId, sqId)
      33              : {
      34            0 :     SetTaskIdBySqeId();
      35            0 :     launchFlag_ = launchFlag;
      36            0 : }
      37              : 
      38            1 : void RtsqA5::Reset()
      39              : {
      40            1 :     RtsqBase::Reset();
      41            1 :     pendingSqeCnt = 0;
      42            1 :     s32 sRet      = memset_s(locBuf, RTSQ_SQE_SIZE * PER_LAUNCH_SQE_CNT, 0, RTSQ_SQE_SIZE * PER_LAUNCH_SQE_CNT);
      43            1 :     if (UNLIKELY(sRet != EOK)) {
      44            0 :         auto msg = StringFormat("[RtsqA5][Reset] locBuf memset fail. errorno[%d]", sRet);
      45            0 :         THROW<InternalException>(msg);
      46            0 :     }
      47            3 :     HCCL_INFO("[NsRecovery]RtsqA5::%s success", __func__);
      48            1 : }
      49              : 
      50              : // 计算head和tail之间的距离
      51            6 : u32 RtsqA5::GetTailToHeadDist() const
      52              : {
      53            6 :     if (UNLIKELY(sqHead_ == sqTail_)) { // 头尾相同,则距离大小为sq深度
      54            4 :         return sqDepth_;
      55              :     }
      56            2 :     return (sqTail_ < sqHead_) ? (sqHead_ - sqTail_) : (sqDepth_ - (sqTail_ - sqHead_));
      57              : }
      58              : 
      59            2 : void RtsqA5::MakeSureAvailableSpace()
      60              : {
      61            2 :     u32  availableSpace = GetTailToHeadDist();
      62            2 :     auto startTime      = std::chrono::steady_clock::now();
      63              : #ifdef CCL_KERNEL_AICPU
      64              :     sqFullTimeout_ = GetSqFullTimeOut();
      65              : #endif
      66            2 :     const std::chrono::seconds printInterval(PRINT_INTERVAL); // 打印间隔30s
      67            2 :     auto                       lastPrintTime = std::chrono::steady_clock::now() - printInterval;
      68            6 :     HCCL_INFO("[%s]sqId:%u, sqFullTimeout_: %u s, sqHead:%u, sqTail:%u, pendingSqeCnt:%u",
      69              :         __func__, sqId_, sqFullTimeout_, sqHead_, sqTail_, pendingSqeCnt);
      70              : 
      71            2 :     while (availableSpace <= pendingSqeCnt) {
      72            0 :         sqHead_        = QuerySqHead();
      73            0 :         availableSpace = GetTailToHeadDist();
      74            0 :         if (availableSpace > pendingSqeCnt) {
      75            0 :             break; // 避免head没更新导致假反压
      76              :         }
      77              : 
      78            0 :         auto curTime = std::chrono::steady_clock::now();
      79            0 :         if (UNLIKELY(curTime - lastPrintTime >= printInterval)) {
      80            0 :             HCCL_RUN_INFO("[%s]while loop, sqId:%u, sqHead:%u, sqTail:%u, availableSpace:%u, pendingSqeCnt:%u, "
      81              :                 "sqFullTimeout_:%u s", __func__, sqId_, sqHead_, sqTail_, availableSpace, pendingSqeCnt, sqFullTimeout_);
      82            0 :             lastPrintTime = curTime;
      83              :         }
      84              : 
      85            0 :         CheckLaunchTaskStatus(startTime, curTime);
      86              : #ifdef CCL_KERNEL_AICPU
      87              :         HcclResult ret = HandleDispatchAllStreams();
      88              :         if (UNLIKELY(ret != HCCL_SUCCESS)) {
      89              :             auto msg = StringFormat("RtsqA5::%s HandleDispatchAllStreams failed, ret = %d, sqId:%u, ", __func__, ret, sqId_);
      90              :             HCCL_ERROR("%s", msg.c_str());
      91              :             THROW<InternalException>(msg);
      92              :         }
      93              : #endif
      94            0 :         if (checkOpExecStatusCallback_ != nullptr) {
      95            0 :             checkOpExecStatusCallback_();
      96              :         }
      97              :     }
      98            2 : }
      99              : 
     100            5 : void RtsqA5::CheckLaunchTaskStatus(const std::chrono::steady_clock::time_point &startTime,
     101              :     const std::chrono::steady_clock::time_point &curTime)
     102              : {
     103            5 :     bool isTimeout = (sqFullTimeout_ == 0) ? false : ((curTime - startTime) >= std::chrono::seconds(sqFullTimeout_));
     104              :     // step1 检测是否launch超时,如果超时打印rtsq full的ERROR日志
     105            5 :     if (UNLIKELY(isTimeout)) {
     106            6 :         HCCL_ERROR("Rtsq full, sqFullTimeout_:%u. sqId:%u, sqHead:%u, sqTail:%u, pendingSqeCnt:%u",
     107              :             sqFullTimeout_, sqId_, sqHead_, sqTail_, pendingSqeCnt);
     108              :     }
     109              : 
     110            5 :     HcclResult checkRet = (checkExecStatusCallback_ != nullptr) ? checkExecStatusCallback_(isTimeout) : HCCL_SUCCESS;
     111              :     // step2 通信域状态为HCCL_COMM_STATUS_SUSPENDING状态,则终止launch不抛异
     112            5 :     if (UNLIKELY(checkRet == HCCL_E_SUSPENDING)) {
     113            3 :         pendingSqeCnt = 0;
     114            3 :         return;
     115              :     }
     116              :     // step3 调用回调检查执行状态:1、如果超时,打印taskException;2、如果通信域不可用,终止launch
     117            2 :     if (UNLIKELY(isTimeout || checkRet != HCCL_SUCCESS)) {
     118            2 :         THROW<InternalException>(StringFormat("[%s]stop launch Task, isTimeout[%d], checkRet[%d]",
     119              :             __func__, isTimeout, checkRet));
     120              :     }
     121              : }
     122              : 
     123            6 : void RtsqA5::CopyLocBufToSq()
     124              : {
     125            6 :     u8 *sqCurrAddr = reinterpret_cast<u8 *>(sqBaseAddr_) + sqTail_ * RTSQ_SQE_SIZE;
     126            6 :     if (sqTail_ >= sqHead_) {
     127            5 :         u32 depthLeft = sqDepth_ - sqTail_;
     128            5 :         if (pendingSqeCnt <= depthLeft) { // 没有回绕
     129            9 :             HCCL_INFO("RtsqA5::%s copy sqe from sqe buffer, sqId_: %u, streamId_: %u, cur head: %u, cur tail: %u, size: %u, depth remain: %u", 
     130              :                 __func__, sqId_, streamId_, sqHead_, sqTail_, pendingSqeCnt, depthLeft);
     131            3 :             int ret = memcpy_sp(sqCurrAddr, pendingSqeCnt * AC_SQE_SIZE, locBuf, pendingSqeCnt * RTSQ_SQE_SIZE);
     132            3 :             if (UNLIKELY(ret != 0)) {
     133            4 :                 THROW<InternalException>(StringFormat("RtsqA5::%s sqe memcpy_sp failed, ret = %d", __func__, ret));
     134              :             }
     135              :         } else {
     136            6 :             HCCL_INFO("RtsqA5::%s copy sqe twice, sqId_: %u, streamId_: %u, cur head: %u, cur tail: %u, cnt: %u, depth remain: %u", 
     137              :                 __func__, sqId_, streamId_, sqHead_, sqTail_, pendingSqeCnt, depthLeft);
     138              :             // 先拷贝rtsq里剩余空间大小
     139            2 :             int ret = memcpy_sp(sqCurrAddr, depthLeft * AC_SQE_SIZE, locBuf, depthLeft * RTSQ_SQE_SIZE);
     140            2 :             if (ret != 0) {
     141            1 :                 THROW<InternalException>(
     142            3 :                     StringFormat("RtsqA5::%s rtsq remaining space memcpy_sp failed, ret = %d", __func__, ret));
     143              :             }
     144              :             // 拷贝剩余sqe
     145            1 :             ret = memcpy_sp(reinterpret_cast<u8 *>(sqBaseAddr_), sqHead_ * RTSQ_SQE_SIZE, locBuf + depthLeft * RTSQ_SQE_SIZE,
     146              :                            (pendingSqeCnt - depthLeft) * AC_SQE_SIZE);
     147            1 :             if (UNLIKELY(ret != 0)) {
     148            0 :                 THROW<InternalException>(
     149            0 :                     StringFormat("RtsqA5::%s remaining sqe memcpy_sp failed, ret = %d", __func__, ret));
     150              :             }
     151              :         }
     152              :     } else {
     153            3 :         HCCL_INFO("RtsqA5::%s copy sqe from sqe buffer, tail < head, sqId_: %u, streamId_: %u, cur head: %u, cur tail: %u, size: %u", 
     154              :                 __func__, sqId_, streamId_, sqHead_, sqTail_, pendingSqeCnt);
     155            1 :         int ret = memcpy_sp(sqCurrAddr, pendingSqeCnt * AC_SQE_SIZE, locBuf, pendingSqeCnt * RTSQ_SQE_SIZE);
     156            1 :         if (UNLIKELY(ret != 0)) {
     157            0 :             THROW<InternalException>(StringFormat("RtsqA5::%s sqe memcpy_sp failed, ret = %d", __func__, ret));
     158              :         }
     159              :     }
     160            3 : }
     161              : 
     162              : // 向芯片RTSQ VA中写入 SQE,并触发芯片执行
     163            4 : void RtsqA5::LaunchTask()
     164              : {
     165           12 :     HCCL_INFO("RtsqA5::%s: START, pendingSqeCnt[%u]", __func__, pendingSqeCnt);
     166              : 
     167            4 :     if (pendingSqeCnt == 0) { // 没有SQE ,直接返回
     168            6 :         HCCL_INFO("RtsqA5::%s: pendingSqeCnt is %u, return", __func__, pendingSqeCnt);
     169            2 :         return;
     170              :     }
     171              :     // 确保 rtsq 有足够空间放pending SQE
     172            2 :     MakeSureAvailableSpace();
     173              : 
     174            2 :     if (pendingSqeCnt == 0) {
     175            0 :         return;
     176              :     }
     177              :     // localBuffer拷贝到 RTSQ
     178            2 :     CopyLocBufToSq();
     179              : 
     180              :     // 更新tail,触发芯片执行
     181            2 :     u32 newTail = (sqTail_ + pendingSqeCnt) % sqDepth_;
     182            2 :     ConfigSqTail(newTail);
     183            2 :     sqTail_ = newTail;
     184              : 
     185              :     // 清空本地的locBuffer和sqeCnt数目
     186            6 :     HCCL_INFO("RtsqA5::%s: END, pendingSqeCnt[%u], sqHead_[%u] sqTail_[%u]", __func__, pendingSqeCnt, sqHead_, sqTail_);
     187            2 :     pendingSqeCnt = 0;
     188            2 :     (void)memset_s(locBuf, RTSQ_SQE_SIZE * PER_LAUNCH_SQE_CNT, 0, RTSQ_SQE_SIZE * PER_LAUNCH_SQE_CNT); // locBuffer清零
     189              : }
     190              : 
     191            2 : void RtsqA5::TryLaunchTask()
     192              : {
     193            2 :     if (pendingSqeCnt == 0) {
     194            1 :         return;
     195              :     }
     196              : 
     197            1 :     sqHead_ = QuerySqHead();
     198            1 :     u32 availableSpace = GetTailToHeadDist();
     199            1 :     if (availableSpace <= pendingSqeCnt) {
     200            0 :         return;
     201              :     }
     202              : 
     203            1 :     CopyLocBufToSq();
     204              : 
     205            1 :     u32 newTail = (sqTail_ + pendingSqeCnt) % sqDepth_;
     206            1 :     ConfigSqTail(newTail);
     207            1 :     sqTail_ = newTail;
     208              : 
     209            1 :     pendingSqeCnt = 0;
     210            1 :     (void)memset_s(locBuf, RTSQ_SQE_SIZE * PER_LAUNCH_SQE_CNT, 0, RTSQ_SQE_SIZE * PER_LAUNCH_SQE_CNT);
     211            3 :     HCCL_INFO("RtsqA5::%s: END, pendingSqeCnt[%u], sqHead_[%u] sqTail_[%u]", __func__, pendingSqeCnt, sqHead_, sqTail_);
     212              : }
     213              : 
     214           33 : u8 *RtsqA5::GetCurrSqeBuffer()
     215              : {
     216           33 :     return locBuf + pendingSqeCnt * RTSQ_SQE_SIZE;
     217              : }
     218              : 
     219           30 : void RtsqA5::RefreshInfo()
     220              : {
     221           30 :     SetTaskIdBySqeId();
     222           30 :     pendingSqeCnt++;
     223              :     
     224              : #ifdef CCL_KERNEL_AICPU
     225              :     if (launchFlag_ && !IsBatchLaunchMode()) {
     226              :         LaunchTask();
     227              :         return;
     228              :     }
     229              : #endif
     230              : 
     231           30 :     if (pendingSqeCnt != PER_LAUNCH_SQE_CNT) {
     232           30 :         return;
     233              :     }
     234              :     // 挂起的sqe数量为128个,则需要向芯片RTSQ中写入task
     235            0 :     LaunchTask();
     236              : }
     237              : 
     238            1 : void RtsqA5::NotifyWait(u32 notifyId)
     239              : {
     240            1 :     NotifyWait(notifyId, GetKernelExecTimeoutFromEnvConfig());
     241            1 : }
     242              : 
     243           10 : void RtsqA5::NotifyWait(u32 notifyId, u32 timeout)
     244              : {
     245           10 :     BuildA5SqeNotifyWait(streamId_, taskId_, notifyId, timeout, GetCurrSqeBuffer());
     246           30 :     HCCL_INFO("RtsqA5::NotifyWait: streamId %u, taskId %u, notifyId %u, timeout %u", streamId_, taskId_, notifyId, timeout);
     247           10 :     RefreshInfo();
     248           10 : }
     249              : 
     250            1 : void RtsqA5::NotifyRecordLoc(u32 notifyId)
     251              : {
     252            1 :     BuildA5SqeNotifyRecord(streamId_, taskId_, notifyId, GetCurrSqeBuffer());
     253            3 :     HCCL_INFO("RtsqA5::NotifyRecordLoc: streamId %u, taskId %u, notifyId %u", streamId_, taskId_, notifyId);
     254            1 :     RefreshInfo();
     255            1 : }
     256              : 
     257            1 : void RtsqA5::Cnt1toNNotifyWait(u32 notifyId, u32 value)
     258              : {
     259            1 :     BuildA5SqeCnt1toNNotifyWait(streamId_, taskId_, notifyId, value, GetCurrSqeBuffer());
     260            3 :     HCCL_INFO("RtsqA5::Cnt1toNNotifyWait: streamId %u, taskId %u, notifyId %u", streamId_, taskId_, notifyId);
     261            1 :     RefreshInfo();
     262            1 : }
     263              : 
     264            1 : void RtsqA5::Cnt1toNNotifyRecord(u32 notifyId, u32 value)
     265              : {
     266            1 :     BuildA5SqeCnt1toNNotifyRecord(streamId_, taskId_, notifyId, value, GetCurrSqeBuffer());
     267            3 :     HCCL_INFO("RtsqA5::Cnt1toNNotifyWait: streamId %u, taskId %u, notifyId %u", streamId_, taskId_, notifyId);
     268            1 :     RefreshInfo();
     269            1 : }
     270              : 
     271            1 : void RtsqA5::CntNto1NotifyWait(u32 notifyId, u32 value)
     272              : {
     273            1 :     BuildA5SqeCntNto1NotifyWait(streamId_, taskId_, notifyId, value, GetCurrSqeBuffer());
     274            3 :     HCCL_INFO("RtsqA5::CntNto1NotifyWait: streamId %u, taskId %u, notifyId %u", streamId_, taskId_, notifyId);
     275            1 :     RefreshInfo();
     276            1 : }
     277              : 
     278            1 : void RtsqA5::CntNto1NotifyRecord(u32 notifyId, u32 value)
     279              : {
     280            1 :     BuildA5SqeCntNto1NotifyRecord(streamId_, taskId_, notifyId, value, GetCurrSqeBuffer());
     281            3 :     HCCL_INFO("RtsqA5::CntNto1NotifyRecord: streamId %u, taskId %u, notifyId %u", streamId_, taskId_, notifyId);
     282            1 :     RefreshInfo();
     283            1 : }
     284              : 
     285            1 : void RtsqA5::SdmaCopy(u64 srcAddr, u64 dstAddr, u32 size, u32 partId)
     286              : {
     287              :     // 不带reduce的拷贝,opcode填0
     288              :     (void)partId;
     289            1 :     BuildA5SqeSdmaCopy(streamId_, taskId_, dstAddr, srcAddr, size, RTSQ_A5_PART_ID, 0, GetCurrSqeBuffer());
     290            3 :     HCCL_INFO("RtsqA5::SdmaCopy: streamId %u, taskId %u, srcAddr 0x%llx, dstAddr 0x%llx, size %u", streamId_, taskId_,
     291              :         srcAddr, dstAddr, size);
     292            1 :     RefreshInfo();
     293            1 : }
     294              : 
     295              : const std::unordered_map<ReduceOp, RtStarsMemcpyAsyncOperationKind, EnumClassHash> ReduceOpToStarsOpKindMap
     296              :     = {{ReduceOp::SUM, RtStarsMemcpyAsyncOperationKind::RT_STARS_MEMCPY_ASYNC_OP_KIND_ADD},
     297              :        {ReduceOp::MAX, RtStarsMemcpyAsyncOperationKind::RT_STARS_MEMCPY_ASYNC_OP_KIND_MAX},
     298              :        {ReduceOp::MIN, RtStarsMemcpyAsyncOperationKind::RT_STARS_MEMCPY_ASYNC_OP_KIND_MIN},
     299              :        {ReduceOp::EQUAL, RtStarsMemcpyAsyncOperationKind::RT_STARS_MEMCPY_ASYNC_OP_KIND_EQUAL}};
     300              : 
     301              : const std::unordered_map<DataType, RtStarsMemcpyAsyncDataType, EnumClassHash> DataTypeToStarsDataTypeMap
     302              :     = {{DataType::INT8, RtStarsMemcpyAsyncDataType::RT_STARS_MEMCPY_ASYNC_DATA_TYPE_INT8},
     303              :        {DataType::INT16, RtStarsMemcpyAsyncDataType::RT_STARS_MEMCPY_ASYNC_DATA_TYPE_INT16},
     304              :        {DataType::INT32, RtStarsMemcpyAsyncDataType::RT_STARS_MEMCPY_ASYNC_DATA_TYPE_INT32},
     305              :        {DataType::FP16, RtStarsMemcpyAsyncDataType::RT_STARS_MEMCPY_ASYNC_DATA_TYPE_FP16},
     306              :        {DataType::FP32, RtStarsMemcpyAsyncDataType::RT_STARS_MEMCPY_ASYNC_DATA_TYPE_FP32},
     307              :        {DataType::BFP16, RtStarsMemcpyAsyncDataType::RT_STARS_MEMCPY_ASYNC_DATA_TYPE_BFP16}};
     308              : 
     309            3 : void RtsqA5::SdmaReduce(u64 srcAddr, u64 dstAddr, u32 size, u32 partId, const ReduceIn &reduceIn)
     310              : {
     311              :     (void)partId;
     312            3 :     if (UNLIKELY(ReduceOpToStarsOpKindMap.find(reduceIn.reduceOp) == ReduceOpToStarsOpKindMap.end()
     313              :         || DataTypeToStarsDataTypeMap.find(reduceIn.dataType) == DataTypeToStarsDataTypeMap.end())) {
     314            3 :         THROW<InternalException>(StringFormat("Sdma does not support reduceOp %s dataType %s",
     315            3 :                                               reduceIn.reduceOp.Describe().c_str(),
     316            3 :                                               reduceIn.dataType.Describe().c_str()));
     317              :     }
     318              : 
     319            2 :     u8 op   = static_cast<u8>(ReduceOpToStarsOpKindMap.at(reduceIn.reduceOp));
     320            2 :     u8 type = static_cast<u8>(DataTypeToStarsDataTypeMap.at(reduceIn.dataType));
     321              : 
     322            2 :     BuildA5SqeSdmaCopy(streamId_, taskId_, dstAddr, srcAddr, size, RTSQ_A5_PART_ID, (op | type), GetCurrSqeBuffer());
     323            6 :     HCCL_INFO("RtsqA5::SdmaReduce: streamId %u, taskId %u, srcAddr 0x%llx, dstAddr 0x%llx, size %u", streamId_, taskId_,
     324              :         srcAddr, dstAddr, size);
     325            2 :     RefreshInfo();
     326            2 : }
     327              : 
     328            2 : bool RtsqA5::IsRtsqQueueSpaceSufficient()
     329              : {
     330              :     // 判断逻辑与rtsq内部保持一致,rtsq剩余空间需要大于(rtsq挂起的任务数量+本次任务)
     331            2 :     u32  availableSpace = GetTailToHeadDist();
     332            2 :     if (availableSpace > pendingSqeCnt + 1) {
     333            1 :         return true;
     334              :     }
     335              : 
     336              :     // 否则的话,需要再次查询一次head,确认是否是因为head没有更新导致空间不足,如果查询后空间仍然不足,则返回false
     337            1 :     sqHead_        = QuerySqHead();
     338            1 :     availableSpace = GetTailToHeadDist();
     339              : 
     340            1 :     return (availableSpace > pendingSqeCnt + 1);
     341              : }
     342              : 
     343            3 : HcclResult RtsqA5::SetPreStreamSyncReady() 
     344              : {
     345            3 :     isPreStreamSync = true;
     346            3 :     return HCCL_SUCCESS;
     347              : }
     348              : 
     349            4 : HcclResult RtsqA5::SetPreStreamSyncFin() 
     350              : {
     351            4 :     isPreStreamSync = false;
     352            4 :     return HCCL_SUCCESS;
     353              : }
     354              : 
     355           89 : bool RtsqA5::GetPreStreamSyncStatus()
     356              : {
     357           89 :     return isPreStreamSync;
     358              : }
     359              : 
     360            1 : void RtsqA5::UbDbSend(const UbJettyLiteId &jettyLiteId, u16 piValue)
     361              : {
     362              :     // piValue需要使用u16数据类型,保证自然增长,用于判断是否翻转
     363            1 :     BuildA5SqeUbDbSend(streamId_, taskId_, jettyLiteId, piValue, GetCurrSqeBuffer());
     364            3 :     HCCL_INFO("RtsqA5::UbDbSend: piValue(UbPi):%u, SqTail(Rtsq Pi):%u", piValue, sqTail_);
     365            1 :     RefreshInfo();
     366            1 : }
     367              : 
     368            6 : void RtsqA5::RdmaDbSend(const uint64_t &dbAddr, const uint64_t &dbValue)
     369              : {
     370            6 :     BuildA5SqeRdmaDbSend(streamId_, taskId_, dbAddr, dbValue, GetCurrSqeBuffer());
     371           18 :     HCCL_INFO("RtsqA5::RdmaDbSend: RdmaDbSend Sqe: %s, dbAddr:0x%llx, dbValue:0x%llx, SqTail(Rtsq Pi):%u",
     372              :         Bytes2hex(GetCurrSqeBuffer(), RTSQ_SQE_SIZE).c_str(), dbAddr, dbValue, sqTail_);
     373            6 :     RefreshInfo();
     374            6 : }
     375              : 
     376            1 : void RtsqA5::CCoreNotifyWait(u64 waitAddr, u64 curTurnCntAddr, bool last)
     377              : {
     378            1 :     BuildA5SqeCCoreNotifyWait(streamId_, taskId_, waitAddr, curTurnCntAddr, last, GetCurrSqeBuffer());
     379            3 :     HCCL_INFO("RtsqA5::CCoreNotifyWait: streamId %u, taskId %u, waitAddr %llu, curTurnCntAddr %llu, last %d", streamId_,
     380              :               taskId_, waitAddr, curTurnCntAddr, last);
     381            1 :     RefreshInfo();
     382            1 : }
     383              : 
     384            1 : void RtsqA5::CCoreNotifyRecord(u64 recordAddr, u64 curTurnCntAddr)
     385              : {
     386            1 :     BuildA5SqeCCoreNotifyRecord(streamId_, taskId_, recordAddr, curTurnCntAddr, GetCurrSqeBuffer());
     387            3 :     HCCL_INFO("RtsqA5::CCoreNotifyRecord: streamId %u, taskId %u, recordAddr %llu, curTurnCntAddr %llu", streamId_, taskId_,
     388              :               recordAddr, curTurnCntAddr);
     389            1 :     RefreshInfo();
     390            1 : }
     391              : 
     392            0 : void RtsqA5::P2PWriteValue(u64 remoteAddr, u32 writeValue)
     393              : {
     394            0 :     BuildA5SqeP2pWriteValue(streamId_, taskId_, remoteAddr, writeValue, GetCurrSqeBuffer());
     395            0 :     HCCL_INFO("RtsqA5::P2PWriteValue: streamId %u, taskId %u, remoteAddr %llu, writeValue %llu",
     396              :         streamId_, taskId_, remoteAddr, writeValue);
     397            0 :     RefreshInfo();
     398            0 : }
     399              : }
        

Generated by: LCOV version 2.0-1