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-07-28 12:11:00 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       429030 : 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          372 : 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          520 :     CcuProfilingInfo() : name(""), type(0), dieId(0), missionId(0), instrId(0), reduceOpType(0), inputDataType(0), outputDataType(0), dataSize(0), ckeId(0), mask(0) {
      59          260 :         (void)memset_s(channelId, sizeof(channelId), INVALID_VALUE_CHANNELID, sizeof(channelId));
      60         4420 :         for (u32 i = 0; i < CCU_MAX_CHANNEL_NUM; i++) { remoteRankId[i] = INVALID_VALUE_RANKID; }
      61         4420 :         for (u32 i = 0; i < CCU_MAX_CHANNEL_NUM; i++) { channelHandle[i] = INVALID_VALUE_NOTIFYID; }
      62          260 :     }
      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              : };
      78              : 
      79              : struct ParaReduce {
      80              :     const void  *src;
      81              :     const void  *dst;
      82              :     std::size_t  size;
      83              :     u64          notifyID;
      84              :     u32          notifyValue;
      85              :     DfxLinkType  linkType;
      86              :     HcclReduceOp reduceOp{HcclReduceOp::HCCL_REDUCE_RESERVED};
      87              :     HcclDataType dataType{HcclDataType::HCCL_DATA_TYPE_RESERVED};
      88              :     Eid         locEid{};
      89              :         Eid         rmtEid{};
      90              : };
      91              : 
      92              : struct ParaNotify {
      93              :     u64 notifyID;
      94              :     u32 value;
      95              : };
      96              : 
      97              : struct ParaCcu {
      98              :     u8  dieId;
      99              :     u8  missionId;
     100              :     u8  execMissionId;
     101              :     u32 instrId;
     102              :     u64 executeId;
     103              :     u64 ccuKernelHandle{0};
     104              : };
     105              : 
     106              : struct ParaAiv{
     107              :     HcclCMDType cmdType;
     108              :     u32 tag;
     109              :     u64 count;
     110              :     u32 numBlocks;
     111              :     u32 rankSize;
     112              :     void* flagMem;
     113              :     u64 flagMemSize;
     114              :     u32 rank;
     115              :     u32 sendRecvRemoteRank;
     116              :     HcclDataType dataType;
     117              : };
     118              : 
     119              : struct TaskParam {
     120              :     TaskParamType taskType;
     121              :     u64           beginTime;
     122              :     u64           endTime;
     123              :     u64           aicpuTaskId{0};
     124              :     uint16_t      npuDevId{0};
     125              :     bool          isMaster{false};
     126              :     union {
     127              :         ParaDMA    DMA;    // taskType = SDMA/RDMA使用, 包括rtRDMASend写notify
     128              :         ParaReduce Reduce; // taskType = inline/CCE Reduce使用
     129              :         ParaNotify Notify; // taskType = Noitfy Record/Wait使用
     130              :         ParaCcu    Ccu;
     131              :         ParaAiv    Aiv; //aiv param
     132              :     } taskPara;
     133              :     std::shared_ptr<std::vector<CcuProfilingInfo>> ccuDetailInfo; // taskType为TASK_CCU时,ParaCcu的补充profiling信息
     134           39 :     std::string Describe() const
     135              :     {
     136           78 :         return StringFormat("TaskParam[taskType[%s] beginTime[%llu] endTime[%llu] aicpuTaskId[%llu]",
     137           78 :                             taskType.Describe().c_str(), beginTime, endTime, aicpuTaskId)
     138          117 :              + DescribeDetail(*this) + "]";
     139              :     }
     140              : 
     141              : private:
     142           39 :     static std::string DescribeDetail(const TaskParam &param)
     143              :     {
     144           39 :         std::string result;
     145           39 :         switch (param.taskType) {
     146            6 :             case TaskParamType::TASK_SDMA: case TaskParamType::TASK_RDMA:
     147              :             case TaskParamType::TASK_SEND_PAYLOAD: case TaskParamType::TASK_UB_INLINE_WRITE:
     148              :             case TaskParamType::TASK_UB: case TaskParamType::TASK_WRITE_WITH_NOTIFY:
     149              :             case TaskParamType::TASK_WRITE_REDUCE_WITH_NOTIFY: case TaskParamType::TASK_DPU_INLINE_WRITE:
     150              :             case TaskParamType::TASK_DPU_WRITE_WITH_NOTIFY:
     151           18 :                 result += StringFormat(" src[%p] dst[%p] size[%zu] notifyID[%llu] dmaOp[%s] linkType[%s]",
     152            6 :                                        param.taskPara.DMA.src, param.taskPara.DMA.dst,
     153            6 :                                        param.taskPara.DMA.size, param.taskPara.DMA.notifyID,
     154           12 :                                        param.taskPara.DMA.dmaOp.Describe().c_str(),
     155           18 :                                        param.taskPara.DMA.linkType.Describe().c_str());
     156            6 :                 break;
     157            8 :             case TaskParamType::TASK_REDUCE_INLINE: case TaskParamType::TASK_UB_REDUCE_INLINE:
     158              :             case TaskParamType::TASK_REDUCE_TBE:
     159           16 :                 result += StringFormat(" src[%p] dst[%p] size[%zu] notifyID[%llu] reduceOp[%d] dataType[%d] linkType[%s]",
     160            8 :                                        param.taskPara.Reduce.src, param.taskPara.Reduce.dst,
     161            8 :                                        param.taskPara.Reduce.size, param.taskPara.Reduce.notifyID,
     162            8 :                                        static_cast<int>(param.taskPara.Reduce.reduceOp),
     163            8 :                                        static_cast<int>(param.taskPara.Reduce.dataType),
     164           24 :                                        param.taskPara.Reduce.linkType.Describe().c_str());
     165            8 :                 break;
     166           18 :             case TaskParamType::TASK_NOTIFY_RECORD: case TaskParamType::TASK_NOTIFY_WAIT:
     167              :             case TaskParamType::TASK_SEND_NOTIFY: case TaskParamType::TASK_DPU_NOTIFY_WAIT:
     168              :             case TaskParamType::TASK_DPU_CHANNEL_FENCE:
     169           18 :                 result += StringFormat(" notifyID[%llu] value[%u]",
     170           18 :                                        param.taskPara.Notify.notifyID, param.taskPara.Notify.value);
     171           18 :                 break;
     172            0 :             case TaskParamType::TASK_AIV:
     173            0 :                 result += StringFormat(" cmdType[%d] tag[%u] count[%llu] numBlocks[%u] rankSize[%u]"
     174              :                                        " rank[%u] remoteRank[%u] dataType[%d]",
     175            0 :                                        static_cast<int>(param.taskPara.Aiv.cmdType), param.taskPara.Aiv.tag,
     176            0 :                                        param.taskPara.Aiv.count, param.taskPara.Aiv.numBlocks,
     177            0 :                                        param.taskPara.Aiv.rankSize, param.taskPara.Aiv.rank,
     178            0 :                                        param.taskPara.Aiv.sendRecvRemoteRank,
     179            0 :                                        static_cast<int>(param.taskPara.Aiv.dataType));
     180            0 :                 break;
     181            0 :             case TaskParamType::TASK_CCU:
     182            0 :                 result += StringFormat(" dieId[%u] missionId[%u] execMissionId[%u] instrId[%u] executeId[%llu]",
     183            0 :                                        param.taskPara.Ccu.dieId, param.taskPara.Ccu.missionId,
     184            0 :                                        param.taskPara.Ccu.execMissionId, param.taskPara.Ccu.instrId,
     185            0 :                                        param.taskPara.Ccu.executeId);
     186            0 :                 break;
     187            7 :             default:
     188            7 :                 break;
     189              :         }
     190           39 :         return result;
     191            0 :     }
     192              : };
     193              : 
     194              : const std::map<HcclCMDType, std::pair<Hccl::OpType, std::string>> CMD_OP_TYPE_INFO_MAP = {
     195              :     {HcclCMDType::HCCL_CMD_ALLREDUCE, {Hccl::OpType::ALLREDUCE, "OpType::ALLREDUCE"}},
     196              :     {HcclCMDType::HCCL_CMD_ALLGATHER, {Hccl::OpType::ALLGATHER, "OpType::ALLGATHER"}},
     197              :     {HcclCMDType::HCCL_CMD_REDUCE_SCATTER, {Hccl::OpType::REDUCESCATTER, "OpType::REDUCESCATTER"}},
     198              :     {HcclCMDType::HCCL_CMD_SEND, {Hccl::OpType::SEND, "OpType::SEND"}},
     199              :     {HcclCMDType::HCCL_CMD_RECEIVE, {Hccl::OpType::RECV, "OpType::RECV"}},
     200              :     {HcclCMDType::HCCL_CMD_ALLTOALL, {Hccl::OpType::ALLTOALL, "OpType::ALLTOALL"}},
     201              :     {HcclCMDType::HCCL_CMD_ALLTOALLV, {Hccl::OpType::ALLTOALLV, "OpType::ALLTOALLV"}},
     202              :     {HcclCMDType::HCCL_CMD_BROADCAST, {Hccl::OpType::BROADCAST, "OpType::BROADCAST"}},
     203              :     {HcclCMDType::HCCL_CMD_ALLGATHER_V, {Hccl::OpType::ALLGATHERV, "OpType::ALLGATHERV"}},
     204              :     {HcclCMDType::HCCL_CMD_REDUCE_SCATTER_V, {Hccl::OpType::REDUCESCATTERV, "OpType::REDUCESCATTERV"}},
     205              :     {HcclCMDType::HCCL_CMD_REDUCE, {Hccl::OpType::REDUCE, "OpType::REDUCE"}},
     206              :     {HcclCMDType::HCCL_CMD_ALLTOALLVC, {Hccl::OpType::ALLTOALLVC, "OpType::ALLTOALLVC"}},
     207              :     {HcclCMDType::HCCL_CMD_SCATTER, {Hccl::OpType::SCATTER, "OpType::SCATTER"}},
     208              :     {HcclCMDType::HCCL_CMD_BATCH_SEND_RECV, {Hccl::OpType::BATCHSENDRECV, "OpType::BATCHSENDRECV"}},
     209              :     {HcclCMDType::HCCL_CMD_HALF_ALLTOALLV, {Hccl::OpType::HALFALLTOALLV, "OpType::HALFALLTOALLV"}},
     210              :     {HcclCMDType::HCCL_CMD_BARRIER, {Hccl::OpType::BARRIER, "OpType::BARRIER"}},
     211              :     {HcclCMDType::HCCL_CMD_GATHER, {Hccl::OpType::GATHER, "OpType::GATHER"}},
     212              :     {HcclCMDType::HCCL_CMD_BATCH_GET, {Hccl::OpType::BATCHGET, "OpType::BATCHGET"}},
     213              :     {HcclCMDType::HCCL_CMD_BATCH_PUT, {Hccl::OpType::BATCHPUT, "OpType::BATCHPUT"}},
     214              : };
     215              : 
     216              : } // namespace Hccl
     217              : 
     218              : #endif
        

Generated by: LCOV version 2.0-1