LCOV - code coverage report
Current view: top level - legacy/ascend950/service/collective - coll_operator_check.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 95.7 % 115 110
Test Date: 2026-08-04 10:52:23 Functions: 100.0 % 9 9

            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_operator_check.h"
      12              : #include "exception_util.h"
      13              : #include "adapter_error_manager_pub.h"
      14              : 
      15              : namespace Hccl {
      16              : 
      17           13 : void ReportOpCheckFailed(const std::string &paraName, const std::string &localPara, const std::string &remotePara, const OpType& optype, const std::string& optag)
      18              : {
      19           13 :     std::string opInfo = "Unknown";
      20           38 :     for (const auto& pair : HCOM_OP_TYPE_STR_MAP_V2) {
      21           38 :         if (pair.second == optype) {
      22           13 :             opInfo = std::string(pair.first);
      23           13 :             break;
      24              :         }
      25              :     }
      26              :     // 上报故障码EI0005
      27           13 :     RPT_INPUT_ERR(true, "EI0005", std::vector<std::string>({"ccl_op", "group", "para_name", "local_para", "remote_para"}),
      28              :                             std::vector<std::string>({opInfo, optag, paraName, localPara, remotePara}));
      29           26 :     THROW<InvalidParamsException>(StringFormat(
      30              :         "[RankConsistentImpl][CompareFrame][%s]op information%s group%s %s check fail. "
      31              :         "local[%s], remote[%s]", __func__, opInfo.c_str(), optag.c_str(), paraName.c_str(), localPara.c_str(), remotePara.c_str()));
      32           13 : }
      33              : 
      34            9 : void ReportOpCheckFailed(const std::string &paraName, uint32_t localPara, uint32_t remotePara, const OpType& optype, const std::string& optag)
      35              : {
      36            9 :     std::string opInfo = "Unknown";
      37           34 :     for (const auto& pair : HCOM_OP_TYPE_STR_MAP_V2) {
      38           34 :         if (pair.second == optype) {
      39            9 :             opInfo = std::string(pair.first);
      40            9 :             break;
      41              :         }
      42              :     }
      43              :     // 上报故障码EI0005
      44            9 :     RPT_INPUT_ERR(true, "EI0005", std::vector<std::string>({"ccl_op", "group", "para_name", "local_para", "remote_para"}),
      45              :                             std::vector<std::string>({opInfo, optag, paraName, std::to_string(localPara), std::to_string(remotePara)}));
      46           18 :     THROW<InvalidParamsException>(StringFormat(
      47              :         "[RankConsistentImpl][CompareFrame][%s]op information%s group%s %s check fail. "
      48              :         "local[%u], remote[%u]", __func__, opInfo.c_str(), optag.c_str(), paraName.c_str(), localPara, remotePara));
      49            9 : }
      50              : 
      51            6 : void CompareDataDesOp(const CollOperator &localOpData, const CollOperator &remoteOpData)
      52              : {
      53            6 :     if (localOpData.dataDes.dataCount != remoteOpData.dataDes.dataCount) {
      54            3 :         ReportOpCheckFailed("dataDes.dataCount", localOpData.dataDes.dataCount, remoteOpData.dataDes.dataCount, localOpData.opType, localOpData.opTag);
      55              :     }
      56              : 
      57            5 :     if (localOpData.dataDes.dataType != remoteOpData.dataDes.dataType) {
      58            4 :         ReportOpCheckFailed("dataDes.dataType", localOpData.dataDes.dataType.Describe(),
      59            3 :                             remoteOpData.dataDes.dataType.Describe(), localOpData.opType, localOpData.opTag);
      60              :     }
      61              : 
      62            4 :     if (localOpData.dataDes.strideCount != remoteOpData.dataDes.strideCount) {
      63            3 :         ReportOpCheckFailed("dataDes.strideCount", localOpData.dataDes.strideCount, remoteOpData.dataDes.strideCount, localOpData.opType, localOpData.opTag);
      64              :     }
      65            3 : }
      66              : 
      67            2 : void CompareVDataDesOp(const CollOperator &localOpData, const CollOperator &remoteOpData)
      68              : {
      69            2 :     if (localOpData.vDataDes.dataType != remoteOpData.vDataDes.dataType) {
      70            4 :         ReportOpCheckFailed("vDataDes.dataType", localOpData.vDataDes.dataType.Describe(),
      71            2 :                             remoteOpData.vDataDes.dataType.Describe(), localOpData.opType, localOpData.opTag);
      72              :     }
      73            1 : }
      74              : 
      75            5 : void CompareAlltoAllOp(const CollOperator &localOpData, const CollOperator &remoteOpData)
      76              : {
      77            5 :     if (localOpData.all2AllDataDes.sendType != remoteOpData.all2AllDataDes.recvType) {
      78            4 :         ReportOpCheckFailed("all2AllDataDes.sendType", localOpData.all2AllDataDes.sendType.Describe(),
      79            3 :                             remoteOpData.all2AllDataDes.recvType.Describe(), localOpData.opType, localOpData.opTag);
      80              :     }
      81              : 
      82            4 :     if (localOpData.all2AllDataDes.recvType != remoteOpData.all2AllDataDes.sendType) {
      83            4 :         ReportOpCheckFailed("all2AllDataDes.recvType", localOpData.all2AllDataDes.recvType.Describe(),
      84            3 :                             remoteOpData.all2AllDataDes.sendType.Describe(), localOpData.opType, localOpData.opTag);
      85              :     }
      86              : 
      87            3 :     if (localOpData.all2AllDataDes.sendCount != remoteOpData.all2AllDataDes.recvCount) {
      88            2 :         ReportOpCheckFailed("all2AllDataDes.sendCount", localOpData.all2AllDataDes.sendCount,
      89            2 :                             remoteOpData.all2AllDataDes.recvCount, localOpData.opType, localOpData.opTag);
      90              :     }
      91              : 
      92            2 :     if (localOpData.all2AllDataDes.recvCount != remoteOpData.all2AllDataDes.sendCount) {
      93            2 :         ReportOpCheckFailed("all2AllDataDes.recvCount", localOpData.all2AllDataDes.recvCount,
      94            1 :                             remoteOpData.all2AllDataDes.sendCount, localOpData.opType, localOpData.opTag);
      95              :     }
      96            1 : }
      97              : 
      98            3 : void CompareAlltoAllVOp(const CollOperator &localOpData, const CollOperator &remoteOpData)
      99              : {
     100            3 :     if (localOpData.all2AllVDataDes.sendType != remoteOpData.all2AllVDataDes.recvType) {
     101            4 :         ReportOpCheckFailed("all2AllVDataDes.sendType", localOpData.all2AllVDataDes.sendType.Describe(),
     102            3 :                             remoteOpData.all2AllVDataDes.recvType.Describe(), localOpData.opType, localOpData.opTag);
     103              :     }
     104              : 
     105            2 :     if (localOpData.all2AllVDataDes.recvType != remoteOpData.all2AllVDataDes.sendType) {
     106            4 :         ReportOpCheckFailed("all2AllVDataDes.recvType", localOpData.all2AllVDataDes.recvType.Describe(),
     107            2 :                             remoteOpData.all2AllVDataDes.sendType.Describe(), localOpData.opType, localOpData.opTag);
     108              :     }
     109            1 : }
     110              : 
     111            3 : void CompareAlltoAllVCOp(const CollOperator &localOpData, const CollOperator &remoteOpData)
     112              : {
     113            3 :     if (localOpData.all2AllVCDataDes.sendType != remoteOpData.all2AllVCDataDes.recvType) {
     114            4 :         ReportOpCheckFailed("all2AllVCDataDes.sendType", localOpData.all2AllVCDataDes.sendType.Describe(),
     115            3 :                             remoteOpData.all2AllVCDataDes.recvType.Describe(), localOpData.opType, localOpData.opTag);
     116              :     }
     117              :  
     118            2 :     if (localOpData.all2AllVCDataDes.recvType != remoteOpData.all2AllVCDataDes.sendType) {
     119            4 :         ReportOpCheckFailed("all2AllVCDataDes.recvType", localOpData.all2AllVCDataDes.recvType.Describe(),
     120            2 :                             remoteOpData.all2AllVCDataDes.sendType.Describe(), localOpData.opType, localOpData.opTag);
     121              :     }
     122            1 : }
     123              : 
     124           29 : void CompareNormalOp(const CollOperator &localOpData, const CollOperator &remoteOpData)
     125              : {
     126           29 :     if (localOpData.opMode != remoteOpData.opMode) {
     127            0 :         ReportOpCheckFailed("opMode", localOpData.opMode.Describe(), remoteOpData.opMode.Describe(), localOpData.opType, localOpData.opTag);
     128              :     }
     129              : 
     130           29 :     if (localOpData.opType == OpType::SEND) {
     131            2 :         if (remoteOpData.opType != OpType::RECV) {
     132            0 :             ReportOpCheckFailed("opType", localOpData.opType.Describe(), remoteOpData.opType.Describe(), localOpData.opType, localOpData.opTag);
     133              :         }
     134           27 :     } else if (localOpData.opType == OpType::RECV) {
     135            0 :         if (remoteOpData.opType != OpType::SEND) {
     136            0 :             ReportOpCheckFailed("opType", localOpData.opType.Describe(), remoteOpData.opType.Describe(), localOpData.opType, localOpData.opTag);
     137              :         }
     138           27 :     } else if (localOpData.opType != remoteOpData.opType) {
     139            5 :         ReportOpCheckFailed("opType", localOpData.opType.Describe(), remoteOpData.opType.Describe(), localOpData.opType, localOpData.opTag);
     140              :     }
     141              : 
     142           28 :     if (localOpData.reduceOp != remoteOpData.reduceOp) {
     143            5 :         ReportOpCheckFailed("reduceOp", localOpData.reduceOp.Describe(), remoteOpData.reduceOp.Describe(), localOpData.opType, localOpData.opTag);
     144              :     }
     145              : 
     146           27 :     if (localOpData.dataType != remoteOpData.dataType) {
     147            5 :         ReportOpCheckFailed("dataType", localOpData.dataType.Describe(), remoteOpData.dataType.Describe(), localOpData.opType, localOpData.opTag);
     148              :     }
     149              : 
     150           26 :     if (localOpData.opType != OpType::ALLGATHERV && localOpData.opType != OpType::REDUCESCATTERV) {
     151           24 :         if (localOpData.dataCount != remoteOpData.dataCount) {
     152            3 :             ReportOpCheckFailed("dataCount", localOpData.dataCount, remoteOpData.dataCount, localOpData.opType, localOpData.opTag);
     153              :         }
     154              :     }
     155              : 
     156           25 :     if (localOpData.root != remoteOpData.root) {
     157            3 :         ReportOpCheckFailed("root", localOpData.root, remoteOpData.root, localOpData.opType, localOpData.opTag);
     158              :     }
     159              : 
     160           24 :     if (localOpData.opType == OpType::SEND || localOpData.opType == OpType::RECV) {
     161            2 :         if (localOpData.myRank != remoteOpData.sendRecvRemoteRank) {
     162            3 :             ReportOpCheckFailed("sendRecvRemoteRank", localOpData.myRank, remoteOpData.sendRecvRemoteRank, localOpData.opType, localOpData.opTag);
     163              :         }
     164              :     }
     165              : 
     166           23 :     if (localOpData.opTag !=  remoteOpData.opTag) {
     167            3 :         ReportOpCheckFailed("opTag", localOpData.opTag, remoteOpData.opTag, localOpData.opType, localOpData.opTag);
     168              :     }
     169              : 
     170           22 :     if (localOpData.staticAddr != remoteOpData.staticAddr) {
     171            2 :         ReportOpCheckFailed("staticAddr",
     172            1 :                     static_cast<uint32_t>(localOpData.staticAddr), static_cast<uint32_t>(remoteOpData.staticAddr), localOpData.opType, localOpData.opTag);
     173              :     }
     174              : 
     175           21 :     if (localOpData.staticShape != remoteOpData.staticShape) {
     176            2 :         ReportOpCheckFailed("staticShape",
     177            1 :                     static_cast<uint32_t>(localOpData.staticShape), static_cast<uint32_t>(remoteOpData.staticShape), localOpData.opType, localOpData.opTag);
     178              :     }
     179              : 
     180           20 :     if (localOpData.outputDataType != remoteOpData.outputDataType) {
     181            4 :         ReportOpCheckFailed("outputDataType", localOpData.outputDataType.Describe(),
     182            2 :                             remoteOpData.outputDataType.Describe(), localOpData.opType, localOpData.opTag);
     183              :     }
     184           19 : }
     185              : 
     186              : /*
     187              : 当前校验类型不支持vDataDes和all2AllVCDataDes相关内容;batchSendRecvDataDes中的itemNum字段没有校验的必要,双端该值可能不相等
     188              : */
     189           29 : void CheckCollOperator(const CollOperator &localOpData, const CollOperator &remoteOpData)
     190              : {
     191           29 :     CompareNormalOp(localOpData, remoteOpData);
     192              : 
     193           19 :     if (localOpData.opType == OpType::BATCHSENDRECV) {
     194            0 :         return;
     195              :     }
     196              : 
     197           19 :     if (localOpData.opType == OpType::ALLTOALL) {
     198            5 :         CompareAlltoAllOp(localOpData, remoteOpData);
     199            1 :         return;
     200              :     }
     201              : 
     202           14 :     if (localOpData.opType == OpType::ALLTOALLV) {
     203            3 :         CompareAlltoAllVOp(localOpData, remoteOpData);
     204            1 :         return;
     205              :     }
     206              : 
     207           11 :     if (localOpData.opType == OpType::ALLTOALLVC) {
     208            3 :         CompareAlltoAllVCOp(localOpData, remoteOpData);
     209            1 :         return;
     210              :     }
     211              : 
     212            8 :     if (localOpData.opType == OpType::ALLGATHERV || localOpData.opType == OpType::REDUCESCATTERV) {
     213            2 :         CompareVDataDesOp(localOpData, remoteOpData);
     214            1 :         return;
     215              :     }
     216              : 
     217            6 :     CompareDataDesOp(localOpData, remoteOpData);
     218            3 :     return;
     219              : }
     220              : } // namesapce Hccl
        

Generated by: LCOV version 2.0-1