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.4 % 63 50
Test Date: 2026-08-17 10:19:35 Functions: 92.0 % 25 23

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

Generated by: LCOV version 2.0-1