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

Generated by: LCOV version 2.0-1