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 : } // namespace
161 :
162 0 : inline int32_t GetPrimaryFormat(int32_t format) { return static_cast<int32_t>(static_cast<uint32_t>(format) & 0xffU); }
163 :
164 0 : inline int32_t GetSubFormat(int32_t format)
165 : {
166 0 : return static_cast<int32_t>((static_cast<uint32_t>(format) & 0xffff00U) >> K_BIT_NUM_OF_ONE_BYTE);
167 : }
168 :
169 34 : inline bool HasSubFormat(int32_t format) { return GetSubFormat(format) > 0; }
170 :
171 130 : int32_t DumpDataType::GetIrDataType(GeDataType dataType)
172 : {
173 130 : auto it = GE_DT_TO_PROTO_DT.find(dataType);
174 130 : int32_t protoDataType = it != GE_DT_TO_PROTO_DT.cend() ? static_cast<int32_t>(it->second) :
175 130 : static_cast<int32_t>(ProtoDataType::DT_UNDEFINED);
176 130 : IDE_LOGI("Dump dataType conversion: input=%d, output=%d", static_cast<int32_t>(dataType), protoDataType);
177 130 : return protoDataType;
178 : }
179 :
180 34 : std::string DumpDataType::FormatToSerialString(const int32_t format)
181 : {
182 34 : const auto it = FORMAT_STRING_MAPS.find(static_cast<toolkit::dump::OutputFormat>(GetPrimaryFormat(format)));
183 34 : if (it != FORMAT_STRING_MAPS.end()) {
184 34 : if (HasSubFormat(format)) {
185 6 : return std::string(it->second + ":" + std::to_string(GetSubFormat(format))).c_str();
186 : }
187 56 : return it->second.c_str();
188 : } else {
189 0 : IDE_LOGE("[Check][Param] Format not support %d", format);
190 0 : return "RESERVED";
191 : }
192 : }
193 :
194 34 : std::string DumpDataType::DataTypeToSerialString(const int32_t dataType)
195 : {
196 34 : const auto it = DT_STRING_MAPS.find(static_cast<toolkit::dump::OutputDataType>(dataType));
197 34 : if (it != DT_STRING_MAPS.end()) {
198 62 : return it->second.c_str();
199 : } else {
200 3 : IDE_LOGE("DataTypeToSerialString: datatype not support %d", dataType);
201 6 : return "UNDEFINED";
202 : }
203 : }
204 :
205 23 : std::string DumpDataType::TensorTypeToSerialString(const TensorType tensorType)
206 : {
207 23 : switch (tensorType) {
208 15 : case TensorType::INPUT:
209 30 : return "input";
210 4 : case TensorType::OUTPUT:
211 8 : return "output";
212 4 : case TensorType::WORKSPACE:
213 8 : return "workspace";
214 0 : default:
215 0 : IDE_LOGE("TensorTypeToSerialString: tensor type not support %d", static_cast<int32_t>(tensorType));
216 0 : return "unknown";
217 : }
218 : }
219 : } // namespace Adx
|