LCOV - code coverage report
Current view: top level - legacy/ascend950/unified_platform/pub_inc - task_param.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 71.7 % 53 38
Test Date: 2026-08-04 10:52:23 Functions: 89.3 % 28 25

            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              : #ifndef TASK_PARAM_H
      11              : #define TASK_PARAM_H
      12              : 
      13              : #include <vector>
      14              : #include <string>
      15              : #include <memory>
      16              : #include "securec.h"
      17              : #include "hccl/base.h"
      18              : #include "const_val.h"
      19              : #include "enum_factory.h"
      20              : #include "ip_address.h"
      21              : #include "op_type.h"
      22              : 
      23              : namespace Hccl {
      24              : 
      25          217 : MAKE_ENUM(DmaOp, HCCL_DMA_READ, HCCL_DMA_WRITE, HCCL_DMA_NOTIFY_WAIT)
      26              : 
      27          117 : MAKE_ENUM(AlgType, NOT_SPECIFIED, RING, MULTI_RING, MESH, RECURSIVE_HD, BINARY_HD, PAIR_WISE, INVALID_VAL)
      28              : 
      29       453252 : MAKE_ENUM(TaskParamType, TASK_SDMA, TASK_RDMA, TASK_REDUCE_INLINE, TASK_REDUCE_TBE, TASK_NOTIFY_RECORD, TASK_NOTIFY_WAIT,
      30              :     TASK_SEND_NOTIFY, TASK_SEND_PAYLOAD, TASK_WRITE_WITH_NOTIFY, TASK_WRITE_REDUCE_WITH_NOTIFY, TASK_CCU, TASK_AICPU_KERNEL, TASK_AICPU_REDUCE, TASK_AIV, TASK_UB_INLINE_WRITE, TASK_UB_REDUCE_INLINE, TASK_UB,
      31              :     TASK_DPU_KERNEL, TASK_DPU_THREAD_FENCE, TASK_DPU_CHANNEL_FENCE, TASK_DPU_INLINE_WRITE, TASK_DPU_NOTIFY_WAIT, TASK_DPU_WRITE_WITH_NOTIFY)
      32              : 
      33          375 : MAKE_ENUM(DfxLinkType, ONCHIP, HCCS, PCIE, ROCE, SIO, HCCS_SW, STANDARD_ROCE, UB, UBoE, RESERVED)
      34              : 
      35              : MAKE_ENUM(CcuProfilinType, CCU_TASK_PROFILING, CCU_WAITCKE_PROFILING, CCU_LOOPGROUP_PROFILING, CCU_MAP_PROFILING)
      36              :  
      37              : constexpr uint16_t  CCU_MAX_CHANNEL_NUM     = 16;     // 最多16条link
      38              : constexpr uint16_t  INVALID_CKE_ID          = 0xFFFF; // CKE ID非法值
      39              : constexpr uint16_t  INVALID_VALUE_CHANNELID = 0xFFFF; // channel id非法值
      40              : constexpr u64       INVALID_VALUE_NOTIFYID  = 0xFFFFFFFFFFFFFFFF; // NOTIFY id非法值
      41              : constexpr u32       INVALID_VALUE_RANKID    = 0xFFFFFFFF;               // rank id非法值
      42              : struct CcuProfilingInfo {
      43              :     std::string name;          // CCU任务名或微码名
      44              :     uint8_t type;              // 枚举,0为Task粒度,1为WaitCKE,2为LoopGroup,3为channelId->RemoteRankId的映射
      45              :     uint8_t dieId;             // CCU任务执行的DieId
      46              :     uint8_t missionId;         // CCU任务执行的MissionId
      47              :     uint16_t instrId;
      48              :     uint8_t reduceOpType;      // 与HcclReduceOp类型保持一致
      49              :     uint8_t inputDataType;     // 与HcclDataType类型保持一致
      50              :     uint8_t outputDataType;    // 与HcclDataType类型保持一致
      51              :     uint64_t dataSize;         // 输入数据大小
      52              :     uint32_t ckeId;
      53              :     uint32_t mask;
      54              :     uint16_t channelId[CCU_MAX_CHANNEL_NUM];    // LoopGroup所包含的搬运指令使用的ChannelId
      55              :     uint32_t remoteRankId[CCU_MAX_CHANNEL_NUM]; // LoopGroup所包含的搬运指令的对端
      56              :     uint64_t channelHandle[CCU_MAX_CHANNEL_NUM]; // channelhandle句柄
      57              : 
      58          594 :     CcuProfilingInfo() : name(""), type(0), dieId(0), missionId(0), instrId(0), reduceOpType(0), inputDataType(0), outputDataType(0), dataSize(0), ckeId(0), mask(0) {
      59          297 :         (void)memset_s(channelId, sizeof(channelId), INVALID_VALUE_CHANNELID, sizeof(channelId));
      60         5049 :         for (u32 i = 0; i < CCU_MAX_CHANNEL_NUM; i++) { remoteRankId[i] = INVALID_VALUE_RANKID; }
      61         5049 :         for (u32 i = 0; i < CCU_MAX_CHANNEL_NUM; i++) { channelHandle[i] = INVALID_VALUE_NOTIFYID; }
      62          297 :     }
      63              : };
      64              : constexpr u32  ADD_LEN = 128;
      65              : struct ParaDMA {
      66              :     const void *src;
      67              :     const void *dst;
      68              :     std::size_t size;
      69              :     u64         notifyID;
      70              :     u32         notifyValue;
      71              :     DfxLinkType linkType;
      72              :     DmaOp       dmaOp;
      73              :     Eid         locEid{};
      74              :     Eid         rmtEid{};
      75              :     char        locAddr[ADD_LEN]{};
      76              :     char        rmtAddr[ADD_LEN]{};
      77              :     uint64_t    jettyHandle{0};
      78              :     uint32_t    jettyId{0};
      79              : };
      80              : 
      81              : struct ParaReduce {
      82              :     const void  *src;
      83              :     const void  *dst;
      84              :     std::size_t  size;
      85              :     u64          notifyID;
      86              :     u32          notifyValue;
      87              :     DfxLinkType  linkType;
      88              :     HcclReduceOp reduceOp{HcclReduceOp::HCCL_REDUCE_RESERVED};
      89              :     HcclDataType dataType{HcclDataType::HCCL_DATA_TYPE_RESERVED};
      90              :     Eid         locEid{};
      91              :         Eid         rmtEid{};
      92              :     uint64_t    jettyHandle{0};
      93              :     uint32_t    jettyId{0};
      94              : };
      95              : 
      96              : struct ParaNotify {
      97              :     u64 notifyID;
      98              :     u32 value;
      99              : };
     100              : 
     101              : struct ParaCcu {
     102              :     u8  dieId;
     103              :     u8  missionId;
     104              :     u8  execMissionId;
     105              :     u32 instrId;
     106              :     u64 executeId;
     107              :     u64 ccuKernelHandle{0};
     108              : };
     109              : 
     110              : struct ParaAiv{
     111              :     HcclCMDType cmdType;
     112              :     u32 tag;
     113              :     u64 count;
     114              :     u32 numBlocks;
     115              :     u32 rankSize;
     116              :     void* flagMem;
     117              :     u64 flagMemSize;
     118              :     u32 rank;
     119              :     u32 sendRecvRemoteRank;
     120              :     HcclDataType dataType;
     121              : };
     122              : 
     123              : struct TaskParam {
     124              :     TaskParamType taskType;
     125              :     u64           beginTime;
     126              :     u64           endTime;
     127              :     u64           aicpuTaskId{0};
     128              :     uint16_t      npuDevId{0};
     129              :     bool          isMaster{false};
     130              :     union {
     131              :         ParaDMA    DMA;    // taskType = SDMA/RDMA使用, 包括rtRDMASend写notify
     132              :         ParaReduce Reduce; // taskType = inline/CCE Reduce使用
     133              :         ParaNotify Notify; // taskType = Noitfy Record/Wait使用
     134              :         ParaCcu    Ccu;
     135              :         ParaAiv    Aiv; //aiv param
     136              :     } taskPara;
     137              :     std::shared_ptr<std::vector<CcuProfilingInfo>> ccuDetailInfo; // taskType为TASK_CCU时,ParaCcu的补充profiling信息
     138           39 :     std::string Describe() const
     139              :     {
     140           78 :         return StringFormat("TaskParam[taskType[%s] beginTime[%llu] endTime[%llu] aicpuTaskId[%llu]",
     141           78 :                             taskType.Describe().c_str(), beginTime, endTime, aicpuTaskId)
     142          117 :              + DescribeDetail(*this) + "]";
     143              :     }
     144              : 
     145              : private:
     146           39 :     static std::string DescribeDetail(const TaskParam &param)
     147              :     {
     148           39 :         std::string result;
     149           39 :         switch (param.taskType) {
     150            6 :             case TaskParamType::TASK_SDMA: case TaskParamType::TASK_RDMA:
     151              :             case TaskParamType::TASK_SEND_PAYLOAD: case TaskParamType::TASK_UB_INLINE_WRITE:
     152              :             case TaskParamType::TASK_UB: case TaskParamType::TASK_WRITE_WITH_NOTIFY:
     153              :             case TaskParamType::TASK_WRITE_REDUCE_WITH_NOTIFY: case TaskParamType::TASK_DPU_INLINE_WRITE:
     154              :             case TaskParamType::TASK_DPU_WRITE_WITH_NOTIFY:
     155           18 :                 result += StringFormat(" src[%p] dst[%p] size[%zu] notifyID[%llu] dmaOp[%s] linkType[%s] jettyHandle[%llu] jettyId[%u]",
     156            6 :                                        param.taskPara.DMA.src, param.taskPara.DMA.dst,
     157            6 :                                        param.taskPara.DMA.size, param.taskPara.DMA.notifyID,
     158           12 :                                        param.taskPara.DMA.dmaOp.Describe().c_str(),
     159            6 :                                        param.taskPara.DMA.linkType.Describe().c_str(),
     160           12 :                                        param.taskPara.DMA.jettyHandle, param.taskPara.DMA.jettyId);
     161            6 :                 break;
     162            8 :             case TaskParamType::TASK_REDUCE_INLINE: case TaskParamType::TASK_UB_REDUCE_INLINE:
     163              :             case TaskParamType::TASK_REDUCE_TBE:
     164           16 :                 result += StringFormat(" src[%p] dst[%p] size[%zu] notifyID[%llu] reduceOp[%d] dataType[%d] linkType[%s] jettyHandle[%llu] "
     165            8 :                                        "jettyId[%u]", param.taskPara.Reduce.src, param.taskPara.Reduce.dst, param.taskPara.Reduce.size,
     166            8 :                                        param.taskPara.Reduce.notifyID, static_cast<int>(param.taskPara.Reduce.reduceOp),
     167           16 :                                        static_cast<int>(param.taskPara.Reduce.dataType), param.taskPara.Reduce.linkType.Describe().c_str(),
     168           16 :                                        param.taskPara.DMA.jettyHandle, param.taskPara.DMA.jettyId);
     169            8 :                 break;
     170           18 :             case TaskParamType::TASK_NOTIFY_RECORD: case TaskParamType::TASK_NOTIFY_WAIT:
     171              :             case TaskParamType::TASK_SEND_NOTIFY: case TaskParamType::TASK_DPU_NOTIFY_WAIT:
     172              :             case TaskParamType::TASK_DPU_CHANNEL_FENCE:
     173           18 :                 result += StringFormat(" notifyID[%llu] value[%u]",
     174           18 :                                        param.taskPara.Notify.notifyID, param.taskPara.Notify.value);
     175           18 :                 break;
     176            0 :             case TaskParamType::TASK_AIV:
     177            0 :                 result += StringFormat(" cmdType[%d] tag[%u] count[%llu] numBlocks[%u] rankSize[%u]"
     178              :                                        " rank[%u] remoteRank[%u] dataType[%d]",
     179            0 :                                        static_cast<int>(param.taskPara.Aiv.cmdType), param.taskPara.Aiv.tag,
     180            0 :                                        param.taskPara.Aiv.count, param.taskPara.Aiv.numBlocks,
     181            0 :                                        param.taskPara.Aiv.rankSize, param.taskPara.Aiv.rank,
     182            0 :                                        param.taskPara.Aiv.sendRecvRemoteRank,
     183            0 :                                        static_cast<int>(param.taskPara.Aiv.dataType));
     184            0 :                 break;
     185            0 :             case TaskParamType::TASK_CCU:
     186            0 :                 result += StringFormat(" dieId[%u] missionId[%u] execMissionId[%u] instrId[%u] executeId[%llu]",
     187            0 :                                        param.taskPara.Ccu.dieId, param.taskPara.Ccu.missionId,
     188            0 :                                        param.taskPara.Ccu.execMissionId, param.taskPara.Ccu.instrId,
     189            0 :                                        param.taskPara.Ccu.executeId);
     190            0 :                 break;
     191            7 :             default:
     192            7 :                 break;
     193              :         }
     194           39 :         return result;
     195            0 :     }
     196              : };
     197              : 
     198              : const std::map<HcclCMDType, std::pair<Hccl::OpType, std::string>> CMD_OP_TYPE_INFO_MAP = {
     199              :     {HcclCMDType::HCCL_CMD_ALLREDUCE, {Hccl::OpType::ALLREDUCE, "OpType::ALLREDUCE"}},
     200              :     {HcclCMDType::HCCL_CMD_ALLGATHER, {Hccl::OpType::ALLGATHER, "OpType::ALLGATHER"}},
     201              :     {HcclCMDType::HCCL_CMD_REDUCE_SCATTER, {Hccl::OpType::REDUCESCATTER, "OpType::REDUCESCATTER"}},
     202              :     {HcclCMDType::HCCL_CMD_SEND, {Hccl::OpType::SEND, "OpType::SEND"}},
     203              :     {HcclCMDType::HCCL_CMD_RECEIVE, {Hccl::OpType::RECV, "OpType::RECV"}},
     204              :     {HcclCMDType::HCCL_CMD_ALLTOALL, {Hccl::OpType::ALLTOALL, "OpType::ALLTOALL"}},
     205              :     {HcclCMDType::HCCL_CMD_ALLTOALLV, {Hccl::OpType::ALLTOALLV, "OpType::ALLTOALLV"}},
     206              :     {HcclCMDType::HCCL_CMD_BROADCAST, {Hccl::OpType::BROADCAST, "OpType::BROADCAST"}},
     207              :     {HcclCMDType::HCCL_CMD_ALLGATHER_V, {Hccl::OpType::ALLGATHERV, "OpType::ALLGATHERV"}},
     208              :     {HcclCMDType::HCCL_CMD_REDUCE_SCATTER_V, {Hccl::OpType::REDUCESCATTERV, "OpType::REDUCESCATTERV"}},
     209              :     {HcclCMDType::HCCL_CMD_REDUCE, {Hccl::OpType::REDUCE, "OpType::REDUCE"}},
     210              :     {HcclCMDType::HCCL_CMD_ALLTOALLVC, {Hccl::OpType::ALLTOALLVC, "OpType::ALLTOALLVC"}},
     211              :     {HcclCMDType::HCCL_CMD_SCATTER, {Hccl::OpType::SCATTER, "OpType::SCATTER"}},
     212              :     {HcclCMDType::HCCL_CMD_BATCH_SEND_RECV, {Hccl::OpType::BATCHSENDRECV, "OpType::BATCHSENDRECV"}},
     213              :     {HcclCMDType::HCCL_CMD_HALF_ALLTOALLV, {Hccl::OpType::HALFALLTOALLV, "OpType::HALFALLTOALLV"}},
     214              :     {HcclCMDType::HCCL_CMD_BARRIER, {Hccl::OpType::BARRIER, "OpType::BARRIER"}},
     215              :     {HcclCMDType::HCCL_CMD_GATHER, {Hccl::OpType::GATHER, "OpType::GATHER"}},
     216              :     {HcclCMDType::HCCL_CMD_BATCH_GET, {Hccl::OpType::BATCHGET, "OpType::BATCHGET"}},
     217              :     {HcclCMDType::HCCL_CMD_BATCH_PUT, {Hccl::OpType::BATCHPUT, "OpType::BATCHPUT"}},
     218              : };
     219              : 
     220              : } // namespace Hccl
     221              : 
     222              : #endif
        

Generated by: LCOV version 2.0-1