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

Generated by: LCOV version 2.0-1