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: 79.0 % 62 49
Test Date: 2026-08-25 19:18:03 Functions: 90.5 % 21 19

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

Generated by: LCOV version 2.0-1