LCOV - code coverage report
Current view: top level - base_comm/resources/comm_engine_res/threads - res_pub.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 1 1
Test Date: 2026-08-18 17:47:01 Functions: 100.0 % 1 1

            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 RES_PUB_H
      12              : #define RES_PUB_H
      13              : #include <vector>
      14              : #include <functional>
      15              : #include "hccl/hccl_types.h"
      16              : #include "hccl/base.h"
      17              : constexpr u32 INVALID_U32 = UINT32_MAX;
      18              : constexpr u64 DFX_INVALID_U64 = UINT64_MAX;
      19              : constexpr s32 INVALID_RANKID = INT32_MAX;
      20              : 
      21              : // 以下枚举来源于 legacy/ascend950,以 enum : uint8_t 形式独立定义,
      22              : // 使 res_pub.h 脱离 legacy 头文件依赖。值与 MAKE_ENUM 原定义一致。
      23              : namespace Hccl {
      24              : 
      25              : enum OpTypeVal : u8 {
      26              :     OP_TYPE_ALLREDUCE = 0,
      27              :     OP_TYPE_BROADCAST = 1,
      28              :     OP_TYPE_ALLGATHER = 2,
      29              :     OP_TYPE_REDUCESCATTER = 3,
      30              :     OP_TYPE_SEND = 4,
      31              :     OP_TYPE_RECV = 5,
      32              :     OP_TYPE_BARRIER = 6,
      33              :     OP_TYPE_ALLTOALL = 7,
      34              :     OP_TYPE_REDUCE = 8,
      35              :     OP_TYPE_GATHER = 9,
      36              :     OP_TYPE_SCATTER = 10,
      37              :     OP_TYPE_ALLTOALLV = 11,
      38              :     OP_TYPE_ALLTOALLVC = 12,
      39              :     OP_TYPE_HALFALLTOALLV = 13,
      40              :     OP_TYPE_BATCHSENDRECV = 14,
      41              :     OP_TYPE_BATCHGET = 15,
      42              :     OP_TYPE_BATCHPUT = 16,
      43              :     OP_TYPE_ALLGATHERV = 17,
      44              :     OP_TYPE_REDUCESCATTERV = 18,
      45              :     OP_TYPE_DEBUGCASE = 19,
      46              :     OP_TYPE_INVALID = 20,
      47              :     OP_TYPE_COUNT
      48              : };
      49              : 
      50              : enum AlgTypeVal : u8 {
      51              :     ALG_TYPE_NOT_SPECIFIED = 0,
      52              :     ALG_TYPE_RING = 1,
      53              :     ALG_TYPE_MULTI_RING = 2,
      54              :     ALG_TYPE_MESH = 3,
      55              :     ALG_TYPE_RECURSIVE_HD = 4,
      56              :     ALG_TYPE_BINARY_HD = 5,
      57              :     ALG_TYPE_PAIR_WISE = 6,
      58              :     ALG_TYPE_INVALID_VAL = 7,
      59              :     ALG_TYPE_COUNT
      60              : };
      61              : 
      62              : enum TaskParamTypeVal : u8 {
      63              :     TASK_SDMA = 0,
      64              :     TASK_RDMA = 1,
      65              :     TASK_REDUCE_INLINE = 2,
      66              :     TASK_REDUCE_TBE = 3,
      67              :     TASK_NOTIFY_RECORD = 4,
      68              :     TASK_NOTIFY_WAIT = 5,
      69              :     TASK_SEND_NOTIFY = 6,
      70              :     TASK_SEND_PAYLOAD = 7,
      71              :     TASK_WRITE_WITH_NOTIFY = 8,
      72              :     TASK_WRITE_REDUCE_WITH_NOTIFY = 9,
      73              :     TASK_CCU = 10,
      74              :     TASK_AICPU_KERNEL = 11,
      75              :     TASK_AICPU_REDUCE = 12,
      76              :     TASK_AIV = 13,
      77              :     TASK_UB_INLINE_WRITE = 14,
      78              :     TASK_UB_REDUCE_INLINE = 15,
      79              :     TASK_UB = 16,
      80              :     TASK_DPU_KERNEL = 17,
      81              :     TASK_DPU_THREAD_FENCE = 18,
      82              :     TASK_DPU_CHANNEL_FENCE = 19,
      83              :     TASK_DPU_INLINE_WRITE = 20,
      84              :     TASK_DPU_NOTIFY_WAIT = 21,
      85              :     TASK_DPU_WRITE_WITH_NOTIFY = 22,
      86              :     TASK_PARAM_TYPE_COUNT
      87              : };
      88              : 
      89              : enum DfxLinkTypeVal : u8 {
      90              :     LINK_ONCHIP = 0,
      91              :     LINK_HCCS = 1,
      92              :     LINK_PCIE = 2,
      93              :     LINK_ROCE = 3,
      94              :     LINK_SIO = 4,
      95              :     LINK_HCCS_SW = 5,
      96              :     LINK_STANDARD_ROCE = 6,
      97              :     LINK_UB = 7,
      98              :     LINK_UBoE = 8,
      99              :     LINK_RESERVED = 9,
     100              :     LINK_TYPE_COUNT
     101              : };
     102              : 
     103              : enum DfxWorkflowMode : u8 {
     104              :     NEW_WORKFLOW_MODE_OPS_KERNEL_INFO_LIB = 0,
     105              :     NEW_WORKFLOW_MODE_OP_BASE = 1,
     106              :     NEW_WORKFLOW_MODE_RESERVED = 2
     107              : };
     108              : 
     109              : enum DfxTransportType : u8 {
     110              :     DFX_TRANSPORT_TYPE_SDMA = 0,
     111              :     DFX_TRANSPORT_TYPE_RDMA = 1,
     112              :     DFX_TRANSPORT_TYPE_LOCAL = 2,
     113              :     DFX_TRANSPORT_TYPE_UB = 3,
     114              :     DFX_TRANSPORT_TYPE_ROCE = 4
     115              : };
     116              : 
     117              : constexpr u32 DFX_INVALID_RANKID = 0xFFFFFFFF;
     118              : 
     119              : enum DfxTaskRole : u8 { NEW_TASK_ROLE_DST = 0, NEW_TASK_ROLE_SRC = 1 };
     120              : 
     121              : } // namespace Hccl
     122              : 
     123              : namespace Hccl {
     124              : 
     125              : // DFX 环形队列容量
     126              : constexpr u32 DFX_TASK_INFO_QUEUE_CAPACITY = 2048 + 128; // 2048 基础容量 + 128 余量
     127              : constexpr u32 DFX_OP_INFO_QUEUE_CAPACITY = 1024;
     128              : 
     129              : struct DfxDfxOpInfo {
     130              :     // 8B 对齐字段(7 × 8B = 56B)
     131              :     void* commHandle{
     132              :         nullptr}; // 通信域句柄,来源于 dfxOpInfo_->comm_,用于从 CollCommAicpu 获取上下文
     133              :                   //   groupName/localRank/rankSize 不存入 DfxDfxOpInfo:属于通信域级别(同一通信域内所有算子相同),
     134              :                   //   由 HcclCommDfxLite 存储并传递给 DfxProfilingHandlerLite 缓存使用
     135              :                   //   cclTag 不单独存储:与 opType 一一对应(均来自 CMD_OP_TYPE_INFO_MAP),
     136              :                   //   上报 Msprof 时通过 opTypeHashCache_[opType] 查表转为 GetProfHashId 哈希值
     137              :     u64 count{0}; // 发送数据个数,来源于 dfxOpInfo_->op_.dataCount
     138              :     u64 srcAddr{0}; // 算子级输入地址,来源于 dfxOpInfo_->op_.newInputMem
     139              :     u64 dstAddr{0}; // 算子级输出地址,来源于 dfxOpInfo_->op_.newOutputMem
     140              :     u64 srcSize{0}; // 算子级输入大小,来源于 dfxOpInfo_->op_.inputMemSize
     141              :     u64 dstSize{0}; // 算子级输出大小,来源于 dfxOpInfo_->op_.outputMemSize
     142              :     void* hcclCommDfxLite{
     143              :         nullptr}; // HcclCommDfxLite 指针(void* 避免 base_comm 对 coll_communicator_mgr 的编译期依赖)
     144              :                   //   上报时 static_cast<HcclCommDfxLite*>(hcclCommDfxLite)->GetChannelRemoteRankId(channelHandle)
     145              : 
     146              :     // 4B 对齐字段(3 × 4B = 12B,offset 56)
     147              :     u32 opIndex{0}; // 算子序号,标识当前是 algTag 数组的第几个,来源于 dfxOpInfo_->opIndex_
     148              :     u32 cpuWaitAicpuNotifyId{0}; // Host 等 Device 的 notify ID,来源于 dfxOpInfo_->cpuWaitAicpuNotifyId_
     149              :     u32 aicpuWaitCpuNotifyId{0}; // Device 等 Host 的 notify ID,来源于 DfxOpInfo
     150              : 
     151              :     // 1B 对齐字段(3 × 1B = 3B,offset 68)
     152              :     u8 opType{0}; // 算子类型枚举值,来源于 dfxOpInfo_->op_.opType(OpType 底层 uint8_t)
     153              :     u8 algType{0}; // 通信算法枚举值,来源于 AlgType 底层 uint8_t(如 RING/MESH 等;当前 Lite 路径固定为 NHR)
     154              :                    //   上报 Msprof 时通过 algTypeHashCache_[algType] 查表转为 GetProfHashId 哈希值
     155              :     u8 dataType{
     156              :         0}; // 数据类型枚举值,来源于 dfxOpInfo_->op_.dataType(HcclDataType 底层 uint8_t)
     157              :             //   由 SetCurrDfxOpInfo 从 oldDataType 转换后获取;从 task 级提升为算子级,每个算子只有一个 dataType
     158              : 
     159              :     // 变长尾部字段(offset 71,无需对齐填充)
     160              :     char algTag[288]{0}; // 算子标签字符串,来源于 dfxOpInfo_->algTag_,288 = TAG_MAX_LENGTH(256) + 32 余量
     161              :     // 71+288=359,尾部填充 1B 对齐到 360B
     162              : };
     163              : 
     164              : struct DfxTaskParaNotify { // Notify 任务参数(NOTIFY_RECORD/NOTIFY_WAIT)
     165              :     u64 sqeAddr;           // SQE 中的偏移地址
     166              : };
     167              : 
     168              : struct DfxTaskParaDma { // SDMA 任务参数,信息从 SQE 获取
     169              :     u64 sqeAddr;        // SQE 中的偏移地址
     170              : };
     171              : 
     172              : struct DfxTaskParaUbDma {      // UB DMA 任务参数
     173              :     u64 sqeAddr;               // SQE 中的偏移地址
     174              :     u64 srcAddr;               // 源地址
     175              :     u64 dstAddr;               // 目的地址
     176              :     u64 size;                  // 数据大小(字节)
     177              :     u32 notifyId{INVALID_U32}; // Notify ID,来源于 ParaDMA::notifyID,taskException 使用
     178              :                                //   write with notify SQE 中无此字段;cnt notify 不支持跨片
     179              : };
     180              : 
     181              : struct DfxTaskParaReduce {     // UB Reduce 任务参数
     182              :     u64 sqeAddr;               // SQE 中的偏移地址
     183              :     u64 srcAddr;               // 源地址
     184              :     u64 dstAddr;               // 目的地址
     185              :     u64 size;                  // 数据大小(字节)
     186              :     u32 notifyId{INVALID_U32}; // Notify ID,来源于 ParaReduce::notifyID,taskException 使用
     187              :     u8 reduceOp; // Reduce 操作类型枚举值(HcclReduceOp 底层 uint8_t,仅 Reduce 类 task 有效)
     188              : };
     189              : 
     190              : struct DfxTaskParaWriteValue { // P2P WriteValue 任务参数
     191              :     u64 sqeAddr;               // SQE 中的偏移地址
     192              :     u32 notifyId{INVALID_U32}; // Notify ID,来源于 ParaReduce::notifyID,taskException 使用
     193              : };
     194              : 
     195              : struct DfxTaskInfo {
     196              :     // 8B 对齐字段
     197              :     u64 dfxOpInfo{DFX_INVALID_U64};     // 算子级上下文指针,指向 AicpuTsThread 缓存的 DfxDfxOpInfo
     198              :     u64 channelHandle{DFX_INVALID_U64}; // Channel 句柄,来源于 TaskInfo::channelHandle_
     199              :                                         //   获取 remoteRankId;taskException 通过 dfxOpInfo->commHandle 定位通信域
     200              :                                         //   (与 DfxTaskInfo::hcclCommDfxLite 职责不重叠)
     201              :     // 任务参数(按 taskType 使用其中一个分支,与 TaskParam::taskPara 的 union 模式一致)
     202              :     union {
     203              :         DfxTaskParaNotify Notify; // NOTIFY_RECORD/NOTIFY_WAIT 使用
     204              :         DfxTaskParaDma Dma;       // SDMA 使用
     205              :         DfxTaskParaUbDma ubDma;
     206              :         DfxTaskParaReduce Reduce; // REDUCE 使用
     207              :         DfxTaskParaWriteValue writeValue;
     208              :     } taskPara;
     209              : 
     210              :     // 4B 对齐字段
     211              :     u32 sqId;   // Stream Queue ID
     212              :     u32 taskId; // Stream Queue Entry ID
     213              : 
     214              :     // 1B 对齐字段
     215              :     u8 taskType;      // 任务类型枚举值(TaskParamType 底层 uint8_t)
     216              :     u8 linkType;      // 链路类型枚举值(DfxLinkType 底层 uint8_t)
     217              :     u8 transportType; // 传输类型:0=SDMA, 1=RDMA, 2=LOCAL(由 remoteRank 推导),还有 UB Transport 写入的 UB
     218              :     // 尾部填充 1B 对齐到 64B
     219              : 
     220           22 :     bool IsTaskTypeValid() const { return taskType < static_cast<u8>(TaskParamTypeVal::TASK_PARAM_TYPE_COUNT); }
     221              : };
     222              : } // namespace Hccl
     223              : #endif // RES_PUB_H
        

Generated by: LCOV version 2.0-1