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
|