LCOV - code coverage report
Current view: top level - adump/impl - dump_datatype.cpp (source / functions) Coverage Total Hit
Test: coverage.info Lines: 77.8 % 27 21
Test Date: 2026-07-28 10:54:24 Functions: 66.7 % 6 4

            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 "dump_datatype.h"
      12              : #include <map>
      13              : #include "log/adx_log.h"
      14              : #include "proto/dump_task.pb.h"
      15              : namespace Adx {
      16              : namespace {
      17              : static constexpr uint32_t K_BIT_NUM_OF_ONE_BYTE = 8U;
      18              : const std::map<GeDataType, ProtoDataType> GE_DT_TO_PROTO_DT = {
      19              :     { GeDataType::DT_FLOAT, ProtoDataType::DT_FLOAT },
      20              :     { GeDataType::DT_FLOAT16, ProtoDataType::DT_FLOAT16 },
      21              :     { GeDataType::DT_INT8, ProtoDataType::DT_INT8 },
      22              :     { GeDataType::DT_INT16, ProtoDataType::DT_INT16 },
      23              :     { GeDataType::DT_UINT16, ProtoDataType::DT_UINT16 },
      24              :     { GeDataType::DT_UINT8, ProtoDataType::DT_UINT8 },
      25              :     { GeDataType::DT_INT32, ProtoDataType::DT_INT32 },
      26              :     { GeDataType::DT_INT64, ProtoDataType::DT_INT64 },
      27              :     { GeDataType::DT_UINT32, ProtoDataType::DT_UINT32 },
      28              :     { GeDataType::DT_UINT64, ProtoDataType::DT_UINT64 },
      29              :     { GeDataType::DT_BOOL, ProtoDataType::DT_BOOL },
      30              :     { GeDataType::DT_DOUBLE, ProtoDataType::DT_DOUBLE },
      31              :     { GeDataType::DT_STRING, ProtoDataType::DT_STRING },
      32              :     { GeDataType::DT_DUAL_SUB_INT8, ProtoDataType::DT_DUAL_SUB_INT8 },
      33              :     { GeDataType::DT_DUAL_SUB_UINT8, ProtoDataType::DT_DUAL_SUB_UINT8 },
      34              :     { GeDataType::DT_COMPLEX64, ProtoDataType::DT_COMPLEX64 },
      35              :     { GeDataType::DT_COMPLEX128, ProtoDataType::DT_COMPLEX128 },
      36              :     { GeDataType::DT_QINT8, ProtoDataType::DT_QINT8 },
      37              :     { GeDataType::DT_QINT16, ProtoDataType::DT_QINT16 },
      38              :     { GeDataType::DT_QINT32, ProtoDataType::DT_QINT32 },
      39              :     { GeDataType::DT_QUINT8, ProtoDataType::DT_QUINT8 },
      40              :     { GeDataType::DT_QUINT16, ProtoDataType::DT_QUINT16 },
      41              :     { GeDataType::DT_RESOURCE, ProtoDataType::DT_RESOURCE },
      42              :     { GeDataType::DT_STRING_REF, ProtoDataType::DT_STRING_REF },
      43              :     { GeDataType::DT_DUAL, ProtoDataType::DT_DUAL },
      44              :     { GeDataType::DT_VARIANT, ProtoDataType::DT_VARIANT },
      45              :     { GeDataType::DT_BF16, ProtoDataType::DT_BF16 },
      46              :     { GeDataType::DT_UNDEFINED, ProtoDataType::DT_UNDEFINED },
      47              :     { GeDataType::DT_INT4, ProtoDataType::DT_INT4 },
      48              :     { GeDataType::DT_UINT1, ProtoDataType::DT_UINT1 },
      49              :     { GeDataType::DT_INT2, ProtoDataType::DT_INT2 },
      50              :     { GeDataType::DT_UINT2, ProtoDataType::DT_UINT2 },
      51              :     { GeDataType::DT_COMPLEX32, ProtoDataType::DT_COMPLEX32 },
      52              :     { GeDataType::DT_HIFLOAT8, ProtoDataType::DT_HIFLOAT8 },
      53              :     { GeDataType::DT_FLOAT8_E5M2, ProtoDataType::DT_FLOAT8_E5M2 },
      54              :     { GeDataType::DT_FLOAT8_E4M3FN, ProtoDataType::DT_FLOAT8_E4M3FN },
      55              :     { GeDataType::DT_FLOAT8_E8M0, ProtoDataType::DT_FLOAT8_E8M0 },
      56              :     { GeDataType::DT_FLOAT6_E3M2, ProtoDataType::DT_FLOAT6_E3M2 },
      57              :     { GeDataType::DT_FLOAT6_E2M3, ProtoDataType::DT_FLOAT6_E2M3 },
      58              :     { GeDataType::DT_FLOAT4_E2M1, ProtoDataType::DT_FLOAT4_E2M1 },
      59              :     { GeDataType::DT_FLOAT4_E1M2, ProtoDataType::DT_FLOAT4_E1M2 },
      60              :     { GeDataType::DT_HIFLOAT4, ProtoDataType::DT_HIFLOAT4 },
      61              :     { GeDataType::DT_HIFLOAT4_SCALE, ProtoDataType::DT_HIFLOAT4_SCALE },
      62              : };
      63              : 
      64              : static const std::map<toolkit::dump::OutputDataType, std::string> DT_STRING_MAPS = {
      65              :     {toolkit::dump::DT_UNDEFINED,      "DT_UNDEFINED"},
      66              :     {toolkit::dump::DT_FLOAT,          "DT_FLOAT"},
      67              :     {toolkit::dump::DT_FLOAT16,        "DT_FLOAT16"},
      68              :     {toolkit::dump::DT_INT8,           "DT_INT8"},
      69              :     {toolkit::dump::DT_UINT8,          "DT_UINT8"},
      70              :     {toolkit::dump::DT_INT16,          "DT_INT16"},
      71              :     {toolkit::dump::DT_UINT16,         "DT_UINT16"},
      72              :     {toolkit::dump::DT_INT32,          "DT_INT32"},
      73              :     {toolkit::dump::DT_INT64,          "DT_INT64"},
      74              :     {toolkit::dump::DT_UINT32,         "DT_UINT32"},
      75              :     {toolkit::dump::DT_UINT64,         "DT_UINT64"},
      76              :     {toolkit::dump::DT_BOOL,           "DT_BOOL"},
      77              :     {toolkit::dump::DT_DOUBLE,         "DT_DOUBLE"},
      78              :     {toolkit::dump::DT_STRING,         "DT_STRING"},
      79              :     {toolkit::dump::DT_DUAL_SUB_INT8,  "DT_DUAL_SUB_INT8"},
      80              :     {toolkit::dump::DT_DUAL_SUB_UINT8, "DT_DUAL_SUB_UINT8"},
      81              :     {toolkit::dump::DT_COMPLEX64,      "DT_COMPLEX64"},
      82              :     {toolkit::dump::DT_COMPLEX128,     "DT_COMPLEX128"},
      83              :     {toolkit::dump::DT_QINT8,          "DT_QINT8"},
      84              :     {toolkit::dump::DT_QINT16,         "DT_QINT16"},
      85              :     {toolkit::dump::DT_QINT32,         "DT_QINT32"},
      86              :     {toolkit::dump::DT_QUINT8,         "DT_QUINT8"},
      87              :     {toolkit::dump::DT_QUINT16,        "DT_QUINT16"},
      88              :     {toolkit::dump::DT_RESOURCE,       "DT_RESOURCE"},
      89              :     {toolkit::dump::DT_STRING_REF,     "DT_STRING_REF"},
      90              :     {toolkit::dump::DT_DUAL,           "DT_DUAL"},
      91              :     {toolkit::dump::DT_VARIANT,        "DT_VARIANT"},
      92              :     {toolkit::dump::DT_BF16,           "DT_BF16"},
      93              :     {toolkit::dump::DT_INT4,           "DT_INT4"},
      94              :     {toolkit::dump::DT_UINT1,          "DT_UINT1"},
      95              :     {toolkit::dump::DT_INT2,           "DT_INT2"},
      96              :     {toolkit::dump::DT_UINT2,          "DT_UINT2"},
      97              :     {toolkit::dump::DT_HIFLOAT8,       "DT_HIFLOAT8"},
      98              :     {toolkit::dump::DT_FLOAT8_E5M2,    "DT_FLOAT8_E5M2"},
      99              :     {toolkit::dump::DT_FLOAT8_E4M3FN,  "DT_FLOAT8_E4M3FN"},
     100              :     {toolkit::dump::DT_FLOAT8_E8M0,    "DT_FLOAT8_E8M0"},
     101              :     {toolkit::dump::DT_FLOAT6_E3M2,    "DT_FLOAT6_E3M2"},
     102              :     {toolkit::dump::DT_FLOAT6_E2M3,    "DT_FLOAT6_E2M3"},
     103              :     {toolkit::dump::DT_FLOAT4_E2M1,    "DT_FLOAT4_E2M1"},
     104              :     {toolkit::dump::DT_FLOAT4_E1M2,    "DT_FLOAT4_E1M2"},
     105              :     {toolkit::dump::DT_HIFLOAT4,       "DT_HIFLOAT4"},
     106              :     {toolkit::dump::DT_HIFLOAT4_SCALE, "DT_HIFLOAT4_SCALE"},
     107              : };
     108              : 
     109              : static const std::map<toolkit::dump::OutputFormat, std::string> FORMAT_STRING_MAPS = {
     110              :     {toolkit::dump::FORMAT_NCHW, "NCHW"},
     111              :     {toolkit::dump::FORMAT_NHWC, "NHWC"},
     112              :     {toolkit::dump::FORMAT_ND, "ND"},
     113              :     {toolkit::dump::FORMAT_NC1HWC0, "NC1HWC0"},
     114              :     {toolkit::dump::FORMAT_FRACTAL_Z, "FRACTAL_Z"},
     115              :     {toolkit::dump::FORMAT_NC1C0HWPAD, "NC1C0HWPAD"},
     116              :     {toolkit::dump::FORMAT_NHWC1C0, "NHWC1C0"},
     117              :     {toolkit::dump::FORMAT_FSR_NCHW, "FSR_NCHW"},
     118              :     {toolkit::dump::FORMAT_FRACTAL_DECONV, "FRACTAL_DECONV"},
     119              :     {toolkit::dump::FORMAT_C1HWNC0, "C1HWNC0"},
     120              :     {toolkit::dump::FORMAT_FRACTAL_DECONV_TRANSPOSE, "FRACTAL_DECONV_TRANSPOSE"},
     121              :     {toolkit::dump::FORMAT_FRACTAL_DECONV_SP_STRIDE_TRANS, "FRACTAL_DECONV_SP_STRIDE_TRANS"},
     122              :     {toolkit::dump::FORMAT_NC1HWC0_C04, "NC1HWC0_C04"},
     123              :     {toolkit::dump::FORMAT_FRACTAL_Z_C04, "FRACTAL_Z_C04"},
     124              :     {toolkit::dump::FORMAT_CHWN, "CHWN"},
     125              :     {toolkit::dump::FORMAT_FRACTAL_DECONV_SP_STRIDE8_TRANS, "FRACTAL_DECONV_SP_STRIDE8_TRANS"},
     126              :     {toolkit::dump::FORMAT_HWCN, "HWCN"},
     127              :     {toolkit::dump::FORMAT_NC1KHKWHWC0, "NC1KHKWHWC0"},
     128              :     {toolkit::dump::FORMAT_BN_WEIGHT, "BN_WEIGHT"},
     129              :     {toolkit::dump::FORMAT_FILTER_HWCK, "FILTER_HWCK"},
     130              :     {toolkit::dump::FORMAT_HASHTABLE_LOOKUP_LOOKUPS, "HASHTABLE_LOOKUP_LOOKUPS"},
     131              :     {toolkit::dump::FORMAT_HASHTABLE_LOOKUP_KEYS, "HASHTABLE_LOOKUP_KEYS"},
     132              :     {toolkit::dump::FORMAT_HASHTABLE_LOOKUP_VALUE, "HASHTABLE_LOOKUP_VALUE"},
     133              :     {toolkit::dump::FORMAT_HASHTABLE_LOOKUP_OUTPUT, "HASHTABLE_LOOKUP_OUTPUT"},
     134              :     {toolkit::dump::FORMAT_HASHTABLE_LOOKUP_HITS, "HASHTABLE_LOOKUP_HITS"},
     135              :     {toolkit::dump::FORMAT_C1HWNCoC0, "C1HWNCoC0"},
     136              :     {toolkit::dump::FORMAT_MD, "MD"},
     137              :     {toolkit::dump::FORMAT_NDHWC, "NDHWC"},
     138              :     {toolkit::dump::FORMAT_FRACTAL_ZZ, "FRACTAL_ZZ"},
     139              :     {toolkit::dump::FORMAT_FRACTAL_NZ, "FRACTAL_NZ"},
     140              :     {toolkit::dump::FORMAT_NCDHW, "NCDHW"},
     141              :     {toolkit::dump::FORMAT_DHWCH, "DHWCH"},
     142              :     {toolkit::dump::FORMAT_NDC1HWC0, "NDC1HWC0"},
     143              :     {toolkit::dump::FORMAT_FRACTAL_Z_3D, "FRACTAL_Z_3D"},
     144              :     {toolkit::dump::FORMAT_CN, "CN"},
     145              :     {toolkit::dump::FORMAT_NC, "NC"},
     146              :     {toolkit::dump::FORMAT_DHWNC, "DHWNC"},
     147              :     {toolkit::dump::FORMAT_FRACTAL_Z_3D_TRANSPOSE, "FRACTAL_Z_3D_TRANSPOSE"},
     148              :     {toolkit::dump::FORMAT_FRACTAL_ZN_LSTM, "FRACTAL_ZN_LSTM"},
     149              :     {toolkit::dump::FORMAT_FRACTAL_Z_G, "FRACTAL_Z_G"},
     150              :     {toolkit::dump::FORMAT_RESERVED, "RESERVED"},
     151              :     {toolkit::dump::FORMAT_ALL, "ALL"},
     152              :     {toolkit::dump::FORMAT_NULL, "NULL"},
     153              :     {toolkit::dump::FORMAT_ND_RNN_BIAS, "ND_RNN_BIAS"},
     154              :     {toolkit::dump::FORMAT_FRACTAL_ZN_RNN, "FRACTAL_ZN_RNN"},
     155              :     {toolkit::dump::FORMAT_NYUV, "NYUV"},
     156              :     {toolkit::dump::FORMAT_NYUV_A, "NYUV_A"},
     157              :     {toolkit::dump::FORMAT_NCL, "NCL"},
     158              :     {toolkit::dump::FORMAT_FRACTAL_Z_WINO, "FRACTAL_Z_WINO"},
     159              :     {toolkit::dump::FORMAT_C1HWC0, "C1HWC0"}
     160              : };
     161              : } // namespace
     162              : 
     163            0 : inline int32_t GetPrimaryFormat(int32_t format)
     164              : {
     165            0 :     return static_cast<int32_t>(static_cast<uint32_t>(format) & 0xffU);
     166              : }
     167              : 
     168            0 : inline int32_t GetSubFormat(int32_t format)
     169              : {
     170            0 :     return static_cast<int32_t>((static_cast<uint32_t>(format) & 0xffff00U) >> K_BIT_NUM_OF_ONE_BYTE);
     171              : }
     172              : 
     173           11 : inline bool HasSubFormat(int32_t format)
     174              : {
     175           11 :     return GetSubFormat(format) > 0;
     176              : }
     177              : 
     178          114 : int32_t DumpDataType::GetIrDataType(GeDataType dataType)
     179              : {
     180          114 :     auto it = GE_DT_TO_PROTO_DT.find(dataType);
     181          222 :     int32_t protoDataType = it != GE_DT_TO_PROTO_DT.cend() ?
     182          108 :                             static_cast<int32_t>(it->second) :
     183          114 :                             static_cast<int32_t>(ProtoDataType::DT_UNDEFINED);
     184          114 :     IDE_LOGI("Dump dataType conversion: input=%d, output=%d",
     185              :                 static_cast<int32_t>(dataType), protoDataType);
     186          114 :     return protoDataType;
     187              : }
     188              : 
     189           11 : std::string DumpDataType::FormatToSerialString(const int32_t format)
     190              : {
     191           11 :     const auto it = FORMAT_STRING_MAPS.find(static_cast<toolkit::dump::OutputFormat>(GetPrimaryFormat(format)));
     192           11 :     if (it != FORMAT_STRING_MAPS.end()) {
     193           11 :         if (HasSubFormat(format)) {
     194            6 :             return std::string(it->second + ":" + std::to_string(GetSubFormat(format))).c_str();
     195              :         }
     196           10 :         return it->second.c_str();
     197              :     } else {
     198            0 :         IDE_LOGE("[Check][Param] Format not support %d", format);
     199            0 :         return "RESERVED";
     200              :     }
     201              : }
     202              : 
     203           11 : std::string DumpDataType::DataTypeToSerialString(const int32_t dataType)
     204              : {
     205           11 :     const auto it = DT_STRING_MAPS.find(static_cast<toolkit::dump::OutputDataType>(dataType));
     206           11 :     if (it != DT_STRING_MAPS.end()) {
     207           16 :         return it->second.c_str();
     208              :     } else {
     209            3 :         IDE_LOGE("DataTypeToSerialString: datatype not support %d", dataType);
     210            6 :         return "UNDEFINED";
     211              :     }
     212              : }
     213              : } // namespace Adx
        

Generated by: LCOV version 2.0-1