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

Generated by: LCOV version 2.0-1