LCOV - code coverage report
Current view: top level - legacy/ascend910/algorithm/pub_inc - ffts_common_pub.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 46.7 % 182 85
Test Date: 2026-08-04 10:52:23 Functions: 31.2 % 16 5

            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 FFTS_COMMON_PUB_H
      12              : #define FFTS_COMMON_PUB_H
      13              : 
      14              : #include <cstdint>
      15              : #include <map>
      16              : #include <vector>
      17              : #include <memory>
      18              : 
      19              : #include "hccl/base.h"
      20              : #include "adapter_rts_common.h"
      21              : #include "hccl_common.h"
      22              : #include "common.h"
      23              : #include "device_capacity.h"
      24              : 
      25              : namespace hccl {
      26              : enum class ReduceType {
      27              :     INLINE_REDUCE = 0,
      28              :     TBE_REDUCE
      29              : };
      30              : 
      31              : enum class CopyPattern {
      32              :     ZCOPY = 0,
      33              :     BCOPY
      34              : };
      35              : 
      36              : using HcclOpMetaInfo = struct HcclOpMetaInfoDef {
      37              :     HcclCMDType opType = HcclCMDType::HCCL_CMD_INVALID;
      38              :     bool isRootRank = false;
      39              :     bool isSmallCount = false;
      40              :     uint32_t rootRank = INVALID_UINT;
      41              :     uint32_t KEY_SIZE = 100;
      42              :     bool isDefaultPath = true; // 是否为默认子图路径
      43              :     ReduceType reduceType = ReduceType::INLINE_REDUCE;
      44              :     CopyPattern copyPattern = CopyPattern::BCOPY;
      45              :     u64 alltoallvSendDataSize = 0;
      46              :     u64 alltoallvcSendDataSize = 0;
      47              :     u32 piplineSliceNum = 1;
      48              :     HcclDataType dataType = HCCL_DATA_TYPE_RESERVED;
      49              :     u32 algolevel1Type = 0;
      50              :     bool hugeData = false;
      51              :     u64 sliceNum = 1;
      52              :     bool dataSplit = false;
      53              :     bool isAivMode = false;
      54              :     bool isEnableCache = true;
      55              :     u8 deterministic = 0;
      56              :     bool preloadCopyOpt = false;
      57              : 
      58           56 :     static bool CheckEnableCache(const HcclOpMetaInfoDef &opMetaInfo)
      59              :     {
      60           56 :         if (opMetaInfo.opType == HcclCMDType::HCCL_CMD_BATCH_SEND_RECV || opMetaInfo.opType == HcclCMDType::HCCL_CMD_SEND ||
      61           56 :             opMetaInfo.opType == HcclCMDType::HCCL_CMD_RECEIVE || opMetaInfo.hugeData) {
      62            0 :             return false;
      63              :         }
      64              : 
      65           56 :         if (opMetaInfo.alltoallvSendDataSize > RDMA_SEND_MAX_SIZE ||
      66           56 :             opMetaInfo.alltoallvcSendDataSize > RDMA_SEND_MAX_SIZE) {
      67            0 :             return false;
      68              :         }
      69          112 :         return !((opMetaInfo.opType == HcclCMDType::HCCL_CMD_ALLTOALLV ||
      70           56 :             opMetaInfo.opType == HcclCMDType::HCCL_CMD_ALLTOALL ||
      71           56 :             opMetaInfo.opType == HcclCMDType::HCCL_CMD_ALLTOALLVC) &&
      72           56 :             (opMetaInfo.copyPattern == CopyPattern::BCOPY));
      73              :     }
      74              : 
      75           22 :     static HcclOpMetaInfoDef GetOneForAllReduce(u32 algolevel1Type = 0,
      76              :         HcclDataType dataType = HCCL_DATA_TYPE_RESERVED, ReduceType reduceType = ReduceType::INLINE_REDUCE,
      77              :         bool isSmallCount = false, u32 piplineSliceNum = 1, bool hugeData = false,
      78              :         CopyPattern copyPattern = CopyPattern::BCOPY, u64 sliceNum = 1,
      79              :         bool isAivModeConfig = false, bool isDefaultPathConfig = true, bool dataSplitConfig = false,
      80              :         u8 deterministicConfig = 0)
      81              :     {
      82           22 :         HcclOpMetaInfoDef meta;
      83           22 :         meta.opType = HcclCMDType::HCCL_CMD_ALLREDUCE;
      84           22 :         meta.copyPattern = copyPattern;
      85           22 :         meta.reduceType = reduceType;
      86           22 :         meta.dataType = dataType;
      87           22 :         meta.isSmallCount = isSmallCount;
      88           22 :         meta.piplineSliceNum = piplineSliceNum;
      89           22 :         meta.algolevel1Type = algolevel1Type;
      90           22 :         meta.hugeData = hugeData;
      91           22 :         meta.sliceNum = sliceNum;
      92           22 :         meta.isAivMode = isAivModeConfig;
      93           22 :         meta.isEnableCache = CheckEnableCache(meta);
      94           22 :         meta.isDefaultPath = isDefaultPathConfig;
      95           22 :         meta.dataSplit = dataSplitConfig;
      96           22 :         meta.deterministic = deterministicConfig;
      97           22 :         return meta;
      98              :     }
      99              : 
     100           18 :     static HcclOpMetaInfoDef GetOneForAllGather(u32 algolevel1Type = 0, bool hugeData = false, bool smallCount = false,
     101              :         CopyPattern copyPattern = CopyPattern::BCOPY, bool dataSplit = false, bool isAivMode = false)
     102              :     {
     103           18 :         HcclOpMetaInfoDef meta;
     104           18 :         meta.opType = HcclCMDType::HCCL_CMD_ALLGATHER;
     105           18 :         meta.copyPattern = copyPattern;
     106           18 :         meta.algolevel1Type = algolevel1Type;
     107           18 :         meta.hugeData = hugeData;
     108           18 :         meta.isSmallCount = smallCount; 
     109           18 :         meta.isEnableCache = CheckEnableCache(meta);
     110           18 :         meta.dataSplit = dataSplit;
     111           18 :         meta.isAivMode = isAivMode;
     112           18 :         return meta;
     113              :     }
     114              : 
     115            0 :     static HcclOpMetaInfoDef GetOneForAllGatherV(u32 algolevel1Type = 0, bool hugeData = false, bool smallCount = false,
     116              :         CopyPattern copyPattern = CopyPattern::BCOPY, bool dataSplit = false)
     117              :     {
     118            0 :         HcclOpMetaInfoDef meta;
     119            0 :         meta.opType = HcclCMDType::HCCL_CMD_ALLGATHER_V;
     120            0 :         meta.copyPattern = copyPattern;
     121            0 :         meta.algolevel1Type = algolevel1Type;
     122            0 :         meta.hugeData = hugeData;
     123            0 :         meta.isSmallCount = smallCount; 
     124            0 :         meta.isEnableCache = CheckEnableCache(meta);
     125            0 :         meta.dataSplit = dataSplit;
     126            0 :         return meta;
     127              :     }
     128              : 
     129            0 :     static HcclOpMetaInfoDef GetOneForBroadcast(bool isRootRank, uint32_t rootRank,
     130              :         bool hugeData = false, bool isSmallCount = false, u64 sliceNum = 1, CopyPattern copyPattern = CopyPattern::BCOPY)
     131              :     {
     132            0 :         HcclOpMetaInfoDef meta;
     133            0 :         meta.opType = HcclCMDType::HCCL_CMD_BROADCAST;
     134            0 :         meta.isSmallCount = isSmallCount;             // 是否小数据
     135            0 :         meta.isRootRank = isRootRank;
     136            0 :         meta.rootRank = rootRank;
     137            0 :         meta.hugeData = hugeData;
     138            0 :         meta.sliceNum = sliceNum;
     139            0 :         meta.copyPattern = copyPattern;
     140            0 :         meta.isEnableCache = CheckEnableCache(meta);
     141            0 :         return meta;
     142              :     }
     143              : 
     144            0 :     static HcclOpMetaInfoDef GetOneForScatter(uint32_t rootRank, bool hugeData = false)
     145              :     {
     146            0 :         HcclOpMetaInfoDef meta;
     147            0 :         meta.opType = HcclCMDType::HCCL_CMD_SCATTER;
     148            0 :         meta.rootRank = rootRank;
     149            0 :         meta.hugeData = hugeData;
     150            0 :         meta.isEnableCache = CheckEnableCache(meta);
     151            0 :         return meta;
     152              :     }
     153              : 
     154           16 :     static HcclOpMetaInfoDef GetOneForReduceScatter(
     155              :         u32 algolevel1Type = 0, HcclDataType dataType = HCCL_DATA_TYPE_RESERVED,
     156              :         ReduceType reduceType = ReduceType::INLINE_REDUCE, bool hugeData = false,
     157              :         bool isSmallCount = false, CopyPattern copyPattern = CopyPattern::BCOPY, bool dataSplit = false,
     158              :         u8 deterministicConfig = 0, bool isAivModeConfig = false, bool preloadCopyFlag = false)
     159              :     {
     160           16 :         HcclOpMetaInfoDef meta;
     161           16 :         meta.opType = HcclCMDType::HCCL_CMD_REDUCE_SCATTER;
     162           16 :         meta.reduceType = reduceType;
     163           16 :         meta.dataType = dataType;
     164           16 :         meta.algolevel1Type = algolevel1Type;
     165           16 :         meta.hugeData = hugeData;
     166           16 :         meta.isSmallCount = isSmallCount; // 是否小数据
     167           16 :         meta.copyPattern = copyPattern;
     168           16 :         meta.isEnableCache = CheckEnableCache(meta);
     169           16 :         meta.dataSplit = dataSplit;
     170           16 :         meta.deterministic = deterministicConfig;
     171           16 :         meta.isAivMode = isAivModeConfig;
     172           16 :         meta.preloadCopyOpt = preloadCopyFlag;
     173           16 :         return meta;
     174              :     }
     175              : 
     176            0 :     static HcclOpMetaInfoDef GetOneForReduceScatterV(
     177              :         u32 algolevel1Type = 0, HcclDataType dataType = HCCL_DATA_TYPE_RESERVED,
     178              :         ReduceType reduceType = ReduceType::INLINE_REDUCE, bool hugeData = false,
     179              :         bool isSmallCount = false, CopyPattern copyPattern = CopyPattern::BCOPY, bool dataSplit = false,
     180              :         u8 deterministicConfig = 0)
     181              :     {
     182            0 :         HcclOpMetaInfoDef meta;
     183            0 :         meta.opType = HcclCMDType::HCCL_CMD_REDUCE_SCATTER_V;
     184            0 :         meta.reduceType = reduceType;
     185            0 :         meta.dataType = dataType;
     186            0 :         meta.algolevel1Type = algolevel1Type;
     187            0 :         meta.hugeData = hugeData;
     188            0 :         meta.isSmallCount = isSmallCount; // 是否小数据
     189            0 :         meta.copyPattern = copyPattern;
     190            0 :         meta.isEnableCache = CheckEnableCache(meta);
     191            0 :         meta.dataSplit = dataSplit;
     192            0 :         meta.deterministic = deterministicConfig;
     193            0 :         return meta;
     194              :     }
     195              : 
     196            0 :     static HcclOpMetaInfoDef GetOneForAllToAll(CopyPattern copyPattern, u64 dataSize, bool hugeData = false,
     197              :         bool isAivMode = false)
     198              :     {
     199            0 :         HcclOpMetaInfoDef meta;
     200            0 :         meta.opType = HcclCMDType::HCCL_CMD_ALLTOALL;
     201            0 :         meta.copyPattern = copyPattern;
     202            0 :         meta.alltoallvcSendDataSize = dataSize;
     203            0 :         meta.hugeData = hugeData;
     204            0 :         meta.isAivMode = isAivMode;
     205            0 :         meta.isEnableCache = CheckEnableCache(meta);
     206            0 :         return meta;
     207              :     }
     208              : 
     209            0 :     static HcclOpMetaInfoDef GetOneForAllToAllV(CopyPattern copyPattern, u64 dataSize,
     210              :         bool hugeData = false, bool isSmallCount = false)
     211              :     {
     212            0 :         HcclOpMetaInfoDef meta;
     213            0 :         meta.opType = HcclCMDType::HCCL_CMD_ALLTOALLV;
     214            0 :         meta.copyPattern = copyPattern;
     215            0 :         meta.alltoallvSendDataSize = dataSize;
     216            0 :         meta.hugeData = hugeData;
     217            0 :         meta.isSmallCount = isSmallCount;  // 是否小数据
     218            0 :         meta.isEnableCache = CheckEnableCache(meta);
     219            0 :         return meta;
     220              :     }
     221              : 
     222            0 :     static HcclOpMetaInfoDef GetOneForAllToAllVC(CopyPattern copyPattern, u64 dataSize, bool hugeData = false)
     223              :     {
     224            0 :         HcclOpMetaInfoDef meta;
     225            0 :         meta.opType = HcclCMDType::HCCL_CMD_ALLTOALLVC;
     226            0 :         meta.copyPattern = copyPattern;
     227            0 :         meta.alltoallvcSendDataSize = dataSize;
     228            0 :         meta.hugeData = hugeData;
     229            0 :         meta.isEnableCache = CheckEnableCache(meta);
     230            0 :         return meta;
     231              :     }
     232              : 
     233            0 :     static HcclOpMetaInfoDef GetOneForSend()
     234              :     {
     235            0 :         HcclOpMetaInfoDef meta;
     236            0 :         meta.opType = HcclCMDType::HCCL_CMD_SEND;
     237            0 :         meta.isEnableCache = CheckEnableCache(meta);
     238            0 :         return meta;
     239              :     }
     240              : 
     241            0 :     static HcclOpMetaInfoDef GetOneForRecieve()
     242              :     {
     243            0 :         HcclOpMetaInfoDef meta;
     244            0 :         meta.opType = HcclCMDType::HCCL_CMD_RECEIVE;
     245            0 :         meta.isEnableCache = CheckEnableCache(meta);
     246            0 :         return meta;
     247              :     }
     248              : 
     249            0 :     static HcclOpMetaInfoDef GetOneForBatchSendRecv()
     250              :     {
     251            0 :         HcclOpMetaInfoDef meta;
     252            0 :         meta.opType = HcclCMDType::HCCL_CMD_BATCH_SEND_RECV;
     253            0 :         meta.isEnableCache = CheckEnableCache(meta);
     254            0 :         return meta;
     255              :     }
     256              : 
     257            0 :     static HcclOpMetaInfoDef GetOneForReduce(bool isRootRank, uint32_t rootRank, u32 algolevel1Type = 0,
     258              :         HcclDataType dataType = HCCL_DATA_TYPE_RESERVED, ReduceType reduceType = ReduceType::INLINE_REDUCE,
     259              :         bool hugeDataConfig = false, u8 deterministicConfig = 0)
     260              :     {
     261            0 :         HcclOpMetaInfoDef meta;
     262            0 :         meta.opType = HcclCMDType::HCCL_CMD_REDUCE;
     263            0 :         meta.isRootRank = isRootRank;
     264            0 :         meta.rootRank = rootRank;
     265            0 :         meta.reduceType = reduceType;
     266            0 :         meta.dataType = dataType;
     267            0 :         meta.algolevel1Type = algolevel1Type;
     268            0 :         meta.hugeData = hugeDataConfig;
     269            0 :         meta.isEnableCache = CheckEnableCache(meta);
     270            0 :         meta.deterministic = deterministicConfig;
     271            0 :         return meta;
     272              :     }
     273              : 
     274           56 :     std::string GetCacheKey() const
     275              :     {
     276              : #ifndef CCL_KERNEL_AICPU
     277           56 :         std::string key;
     278           56 :         key.reserve(KEY_SIZE);
     279           56 :         key.append(std::to_string(static_cast<int>(opType)));
     280           56 :         key.append(1, '_');
     281           56 :         key.append(1, isRootRank ? '1' : '0');
     282           56 :         key.append(1, '_');
     283           56 :         key.append(std::to_string(static_cast<int>(reduceType)));
     284           56 :         key.append(1, '_');
     285           56 :         key.append(std::to_string(rootRank));
     286           56 :         key.append(1, '_');
     287           56 :         key.append(std::to_string(sliceNum));
     288           56 :         key.append(1, '_');
     289           56 :         key.append(std::to_string(static_cast<int>(dataType)));
     290           56 :         key.append(1, '_');
     291           56 :         key.append(1, isSmallCount ? '1' : '0');
     292           56 :         key.append(1, '_');
     293           56 :         key.append(1, isDefaultPath ? '1' : '0');
     294           56 :         key.append(1, '_');
     295           56 :         key.append(std::to_string(piplineSliceNum));
     296           56 :         key.append(1, '_');
     297           56 :         key.append(std::to_string(algolevel1Type));
     298           56 :         key.append(1, '_');
     299           56 :         key.append(std::to_string(static_cast<int>(copyPattern)));
     300           56 :         key.append(1, '_');
     301           56 :         key.append(1, dataSplit ? '1' : '0');
     302           56 :         key.append(1, '_');
     303           56 :         key.append(1, isAivMode ? '1' : '0');
     304           56 :         key.append(1, '_');
     305           56 :         key.append(std::to_string(deterministic));
     306           56 :         key.append(1, '_');
     307           56 :         key.append(std::to_string(preloadCopyOpt));
     308           56 :         return key;
     309              : #else
     310              :         return "";
     311              : #endif
     312            0 :     }
     313              : };
     314              : }
     315              : #endif // FFTS_COMMON_PUB_H
        

Generated by: LCOV version 2.0-1