LCOV - code coverage report
Current view: top level - legacy/ascend910/algorithm/impl/coll_executor/coll_reduce_scatter - coll_aligned_reduce_scatter_double_ring_for_910_93_executor.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 19.0 % 42 8
Test Date: 2026-08-04 10:52:23 Functions: 66.7 % 3 2

            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              : #include "coll_aligned_reduce_scatter_double_ring_for_910_93_executor.h"
      12              : #include "alg_template_register.h"
      13              : 
      14              : namespace hccl {
      15            2 : CollAlignedReduceScatterDoubleRingFor91093Executor::CollAlignedReduceScatterDoubleRingFor91093Executor(
      16              :     const HcclDispatcher dispatcher,
      17            2 :     std::unique_ptr<TopoMatcher> &topoMatcher)
      18            2 :     : CollReduceScatterRingFor91093Executor(dispatcher, topoMatcher)
      19              : {
      20            2 :     DMAReduceFlag_ = (workflowMode_ == HcclWorkflowMode::HCCL_WORKFLOW_MODE_OP_BASE);
      21            2 : }
      22              : 
      23            0 : HcclResult CollAlignedReduceScatterDoubleRingFor91093Executor::DoubleRingReduceScatter(
      24              :     const std::string &tag, DeviceMem inputMem, DeviceMem outputMem,
      25              :     const u64 count, const HcclDataType dataType, const HcclReduceOp reductionOp,
      26              :     const std::vector<std::vector<Slice> > multRingsSliceZero, Stream stream, s32 profStage,
      27              :     const u64 baseOffset, const HcomCollOpInfo *opInfo,
      28              :     const std::vector<std::vector<Slice>> multRingsUserMemSlice, const bool disableDMAReduce)
      29              : {
      30              :     (void)tag;
      31            0 :     HCCL_CONFIG_INFO(HCCL_ALG, 
      32              :         "[CollAlignedReduceScatterDoubleRingFor91093Executor][DoubleRingReduceScatter] DoubleRingReduceScatter starts");
      33            0 :     HcclResult ret = HCCL_SUCCESS;
      34            0 :     u32 ringNum = multRingsSliceZero.size();
      35            0 :     CHK_RET(CheckCommSize(COMM_LEVEL0, ringNum));
      36              : 
      37              :     // 拿到ring环映射关系
      38            0 :     SubCommInfo level0ZeroCommInfo = GetSubCommInfo(COMM_LEVEL0, COMM_INDEX_0);
      39            0 :     auto nicList = topoAttr_.nicList;
      40              :     std::vector<std::vector<u32>> multiRingsOrder =
      41            0 :         GetRingsOrderByTopoType(level0ZeroCommInfo.localRankSize, topoType_, nicList);
      42              : 
      43            0 :     u64 reduceAttr = GetReduceAttr(inputMem, outputMem, dataType, reductionOp);
      44              : 
      45            0 :     SubCommInfo level0RingCommInfo = GetSubCommInfo(COMM_LEVEL0, COMM_INDEX_0);
      46              :     // 生成两个ring上的userMemIn_上对应的slices
      47            0 :     std::vector<std::vector<Slice>> userMemInputSlicesOfDoubleRing;
      48            0 :     CHK_RET(CollectMultiRingsUserMemSlices(ringNum, dataType,
      49              :         opInfo, multRingsSliceZero,
      50              :         multiRingsOrder, multRingsUserMemSlice,
      51              :         userMemInputSlicesOfDoubleRing));
      52              :     // 生成两个ring上的rankOrder
      53            0 :     std::vector<std::vector<u32>> rankOrders;
      54            0 :     CHK_RET(CollectMultiRingsRankOrder(ringNum, multiRingsOrder, rankOrders));
      55              :     // 初始化executor
      56            0 :     std::unique_ptr<AlgTemplateBase> tempAlg = AlgTemplateRegistry::Instance().GetAlgTemplate(
      57            0 :         TemplateType::TEMPLATE_REDUCESCATTER_DB_RING, dispatcher_);
      58            0 :     HCCL_CONFIG_INFO(HCCL_ALG, "[%s] Run TEMPLATE_REDUCESCATTER_DB_RING in COMM_LEVEL0", __func__);
      59            0 :     CHK_SMART_PTR_NULL(tempAlg);
      60            0 :     ret = tempAlg->Prepare(inputMem, inputMem, outputMem, count, dataType, stream, multRingsSliceZero,
      61              :         reductionOp, LEVEL0_BRIDGE_RANK_ID, baseOffset, disableDMAReduce,
      62            0 :         reduceAttr, opInfo, topoAttr_.userRank, algResResp_->slaveStreams,
      63            0 :         algResResp_->notifiesMain, algResResp_->notifiesAux, rankOrders, userMemInputSlicesOfDoubleRing);
      64            0 :     CHK_PRT_RET(ret != HCCL_SUCCESS,
      65              :         HCCL_ERROR("[CollAlignedReduceScatterDoubleRingFor91093Executor][DoubleRingReduceScatter] Double ring ReduceScatter failed"
      66              :         "failed,return[%d]", ret), ret);
      67            0 :     u32 ringIndexOp = COMM_INDEX_0;
      68            0 :     u32 rankSize = level0RingCommInfo.localRankSize;
      69            0 :     ret = tempAlg->RegisterProfiler(
      70            0 :         ((ringIndexOp + 1) << PROF_RINGINDEX_OFFSET_OF_PLANEID) +
      71            0 :         (rankSize << PROF_RANKSIZE_OFFSET_OF_PLANEID) + level0RingCommInfo.localRank,
      72              :         profStage, HCCL_EXEC_STEP_NOT_SET, stream);
      73            0 :     CHK_PRT_RET(ret != HCCL_SUCCESS,
      74              :         HCCL_ERROR("[CollAlignedReduceScatterDoubleRingFor91093Executor][DoubleRingReduceScatter] Double ring ReduceScatter failed "
      75              :         "failed,return[%d]", ret), ret);
      76              :     // 空拷贝用于后续操作附着
      77            0 :     CHK_RET(AlgTemplateBase::ExecEmptyTask(inputMem, outputMem, stream, dispatcher_));
      78            0 :     ret = RunTemplate(tempAlg, level0RingCommInfo);
      79            0 :     CHK_PRT_RET(ret != HCCL_SUCCESS,
      80              :         HCCL_ERROR("[CollAlignedReduceScatterDoubleRingFor91093Executor][DoubleRingReduceScatter] Double ring ReduceScatter failed "
      81              :         "failed,return[%d]", ret), ret);
      82              : 
      83            0 :     CHK_RET(AlgTemplateBase::ExecEmptyTask(inputMem, outputMem, stream, dispatcher_));
      84            0 :     return HCCL_SUCCESS;
      85            0 : }
      86              : 
      87           17 : HcclResult CollAlignedReduceScatterDoubleRingFor91093Executor::RunIntraSeverReduceScatter(
      88              :     const std::string &tag, DeviceMem &inputMem, DeviceMem &outputMem,
      89              :     const u64 count, const HcclDataType &dataType, const HcclReduceOp &reductionOp,
      90              :     const std::vector<std::vector<Slice>> &multRingsSliceZero, const Stream &stream, s32 profStage,
      91              :     const u64 baseOffset, const HcomCollOpInfo *opInfo,
      92              :     const std::vector<std::vector<Slice>> &multRingsUserMemSlice, const bool disableDMAReduce)
      93              : {
      94           17 :     CHK_RET(DoubleRingReduceScatter(tag, inputMem, outputMem, count, dataType, reductionOp,
      95              :         multRingsSliceZero, stream, profStage, baseOffset, opInfo, multRingsUserMemSlice, disableDMAReduce));
      96           16 :     return HCCL_SUCCESS;
      97              : }
      98              : REGISTER_EXEC("AlignedReduceScatterDoubleRingFor91093Executor", AlignedReduceScatterDoubleRingFor91093,
      99              :     CollAlignedReduceScatterDoubleRingFor91093Executor);
     100              : }
        

Generated by: LCOV version 2.0-1