1 /*******************************************************************************
2 * Copyright 2018-2021 Intel Corporation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *******************************************************************************/
16 
17 #ifndef COMMON_TAG_TRAITS_HPP
18 #define COMMON_TAG_TRAITS_HPP
19 
20 #include <assert.h>
21 
22 #include "c_types_map.hpp"
23 #include "utils.hpp"
24 
25 namespace dnnl {
26 namespace impl {
27 
28 enum class block_dim_t {
29     _,
30     _A,
31     _B,
32     _C,
33     _D,
34     _E,
35     _AB,
36     _BC,
37     _CD,
38     _CE,
39 };
40 
41 enum class inner_blk_t {
42     _,
43     _4a,
44     _4b,
45     _8a,
46     _8b,
47     _16a,
48     _16b,
49     _32a,
50     _32b,
51     _32c,
52     _32d,
53     _32e,
54 
55     _4a4b,
56     _4b4a,
57     _4b4c,
58     _4c4b,
59     _8a8b,
60     _8b8a,
61     _8b8c,
62     _8c8b,
63     _16a16b,
64     _16a32b,
65     _16a48b,
66     _16a64b,
67     _16b64a,
68     _16b32a,
69     _16b16a,
70     _16b16c,
71     _16c16b,
72     _32a32b,
73     _16a2b,
74     _16a4b,
75     _16b2c,
76     _16b4c,
77     _32d4c,
78     _32e2c,
79     _32e4c,
80     _32c2e,
81 
82     _2c8b4c,
83     _8a16b2a,
84     _4b16a4b,
85     _4b32a4b,
86     _4b64a4b,
87     _2b8a4b,
88     _8b16a2b,
89     _8b32a2b,
90     _8b64a2b,
91     _8b16c2b,
92     _4c16b4c,
93     _8c16b2c,
94     _2b4c2b,
95     _2c4b2c,
96     _4b8c2b,
97     _4c8b2c,
98 
99     _16a16b2a,
100     _16a32b2a,
101     _16a48b2a,
102     _16a64b2a,
103     _16b16a2b,
104     _16b32a2b,
105     _16b48a2b,
106     _16b64a2b,
107     _16a16b4a,
108     _16a32b4a,
109     _16a48b4a,
110     _16a64b4a,
111     _16b16a4b,
112     _16b32a4b,
113     _16b48a4b,
114     _16b64a4b,
115     _16b16c2b,
116     _16c16b2c,
117     _16c16b4c,
118     _2a8b8a2b,
119     _2b8c8b2c,
120     _4a8b8a4b,
121     _4b8c8b4c,
122     _16c32b2c,
123     _16c48b2c,
124     _16c64b2c,
125     _16c32b4c,
126     _16c48b4c,
127     _16c64b4c,
128 };
129 
130 /** returns the offset within the block for weights blocked over oc and ic */
131 template <inner_blk_t f>
AB_or_BC_blk_off(int x0,int x1)132 constexpr int AB_or_BC_blk_off(int x0, int x1) {
133     using ib = inner_blk_t;
134     static_assert(
135             utils::one_of(f, ib::_4a4b, ib::_4b4a, ib::_4b4c, ib::_4c4b,
136                     ib::_8a8b, ib::_8b8a, ib::_8b8c, ib::_8c8b, ib::_16a16b,
137                     ib::_16b64a, ib::_16b32a, ib::_16b16a, ib::_16b16c,
138                     ib::_16c16b, ib::_32a32b, ib::_16a2b, ib::_16a4b,
139                     ib::_16b2c, ib::_16b4c, ib::_2c8b4c, ib::_8a16b2a,
140                     ib::_4b64a4b, ib::_4b32a4b, ib::_4b16a4b, ib::_2b8a4b,
141                     ib::_8b64a2b, ib::_8b32a2b, ib::_8b16a2b, ib::_8b16c2b,
142                     ib::_4c16b4c, ib::_8c16b2c, ib::_2b4c2b, ib::_2c4b2c,
143                     ib::_4b8c2b, ib::_4c8b2c, ib::_16a32b, ib::_16a48b,
144                     ib::_16a64b, ib::_16a16b2a, ib::_16a32b2a, ib::_16a48b2a,
145                     ib::_16a64b2a, ib::_16a16b4a, ib::_16a32b4a, ib::_16a48b4a,
146                     ib::_16a64b4a, ib::_16b16a2b, ib::_16b16a4b, ib::_16b16c2b,
147                     ib::_16c16b2c, ib::_16c16b4c, ib::_2a8b8a2b, ib::_2b8c8b2c,
148                     ib::_4a8b8a4b, ib::_4b8c8b4c, ib::_16b32a2b, ib::_16b48a2b,
149                     ib::_16b64a2b, ib::_16b32a4b, ib::_16b48a4b, ib::_16b64a4b,
150                     ib::_16c32b2c, ib::_16c48b2c, ib::_16c64b2c, ib::_16c32b4c,
151                     ib::_16c48b4c, ib::_16c64b4c),
152             "unexpected inner_blk format");
153 
154     // clang-format off
155     return false ? 0
156         : (f == ib::_4a4b || f == ib::_4b4c) ? 4 * x0 + x1
157         : (f == ib::_4b4a || f == ib::_4c4b) ? 4 * x1 + x0
158         : (f == ib::_8a8b || f == ib::_8b8c) ? 8 * x0 + x1
159         : (f == ib::_8b8a || f == ib::_8c8b) ? 8 * x1 + x0
160         : (f == ib::_16a16b || f == ib::_16b16c) ? 16 * x0 + x1
161         : (f == ib::_16b64a) ? 64 * x1 + x0
162         : (f == ib::_16b32a) ? 32 * x1 + x0
163         : (f == ib::_16b16a || f == ib::_16c16b) ? 16 * x1 + x0
164         : (f == ib::_16a2b || f == ib::_16b2c) ? 2 * x0 + x1
165         : (f == ib::_16a4b || f == ib::_16b4c) ? 4 * x0 + x1
166         : (f == ib::_32a32b || f == ib::_16a32b) ? 32 * x0 + x1
167         : (utils::one_of(f, ib::_8a16b2a, ib::_8b16c2b, ib::_16a16b2a, ib::_16b16c2b)) ? (x0 / 2) * 32 + x1 * 2 + x0 % 2
168         : (f == ib::_16a48b) ? x0 * 48 + x1
169         : (f == ib::_16a64b) ? x0 * 64 + x1
170         : (f == ib::_16a32b2a) ? (x0 / 2) * 64 + x1 * 2 + x0 % 2
171         : (f == ib::_16a48b2a) ? (x0 / 2) * 96 + x1 * 2 + x0 % 2
172         : (f == ib::_16a64b2a) ? (x0 / 2) * 128 + x1 * 2 + x0 % 2
173         : (f == ib::_16a16b4a) ? (x0 / 4) * 64 + x1 * 4 + x0 % 4
174         : (f == ib::_16a32b4a) ? (x0 / 4) * 128 + x1 * 4 + x0 % 4
175         : (f == ib::_16a48b4a) ? (x0 / 4) * 192 + x1 * 4 + x0 % 4
176         : (f == ib::_16a64b4a) ? (x0 / 4) * 256 + x1 * 4 + x0 % 4
177         : (f == ib::_4b16a4b || f == ib::_4c16b4c) ? (x1 / 4) * 64 + x0 * 4 + x1 % 4
178         : (f == ib::_4b32a4b) ? (x1 / 4) * 128 + x0 * 4 + x1 % 4
179         : (f == ib::_4b64a4b) ? (x1 / 4) * 256 + x0 * 4 + x1 % 4
180         : (f == ib::_2b8a4b || f == ib::_2c8b4c) ? (x1 / 4) * 32 + x0 * 4 + x1 % 4
181         : (f == ib::_16b16a2b || f == ib::_16c16b2c) ? (x1 / 2) * 32 + x0 * 2 + x1 % 2
182         : (f == ib::_16b16a4b || f == ib::_16c16b4c) ? (x1 / 4) * 64 + x0 * 4 + x1 % 4
183         : (f == ib::_8b16a2b || f == ib::_8c16b2c) ? (x1 / 2) * 32 + x0 * 2 + x1 % 2
184         : (f == ib::_8b32a2b) ? (x1 / 2) * 64 + x0 * 2 + x1 % 2
185         : (f == ib::_8b64a2b) ? (x1 / 2) * 128 + x0 * 2 + x1 % 2
186         : (f == ib::_2b4c2b || f == ib::_2c4b2c) ? (x0 / 2) * 8 + x1 * 2 + x0 % 2
187         : (f == ib::_4b8c2b || f == ib::_4c8b2c) ? (x0 / 2) * 16 + x1 * 2 + x0 % 2
188         : (f == ib::_2a8b8a2b || f == ib::_2b8c8b2c) ? (x0 / 8) * 128 + (x1 / 2) * 16 + (x0 % 8) * 2 + x1 % 2
189         : (f == ib::_4a8b8a4b || f == ib::_4b8c8b4c) ? (x0 / 8) * 256 + (x1 / 4) * 32 + (x0 % 8) * 4 + x1 % 4
190         : (f == ib::_16b32a2b || f == ib::_16c32b2c) ? (x1 / 2) * 64 + x0 * 2 + x1 % 2
191         : (f == ib::_16b48a2b || f == ib::_16c48b2c) ? (x1 / 2) * 96 + x0 * 2 + x1 % 2
192         : (f == ib::_16b64a2b || f == ib::_16c64b2c) ? (x1 / 2) * 128 + x0 * 2 + x1 % 2
193         : (f == ib::_16b32a4b || f == ib::_16c32b4c) ? (x1 / 4) * 128 + x0 * 4 + x1 % 4
194         : (f == ib::_16b48a4b || f == ib::_16c48b4c) ? (x1 / 4) * 192 + x0 * 4 + x1 % 4
195         : (f == ib::_16b64a4b || f == ib::_16c64b4c) ? (x1 / 4) * 256 + x0 * 4 + x1 % 4
196         : INT_MIN;
197     // clang-format on
198 }
199 
200 template <inner_blk_t b>
201 struct inner_blk_traits {
202     using ib = inner_blk_t;
203 };
204 
205 template <format_tag_t>
206 struct tag_traits {
207     // block_dim_t block_dims;
208     // inner_blk_t inner_blks;
209     // int ndims;
210 };
211 
212 #define DECL_TRAITS(_tag, _blk_fmt, _inner_blk, _ndims) \
213     template <> \
214     struct tag_traits<format_tag::_tag> { \
215         static constexpr block_dim_t block_dims = block_dim_t::_blk_fmt; \
216         static constexpr inner_blk_t inner_blks = inner_blk_t::_inner_blk; \
217         static constexpr int ndims = _ndims; \
218     }
219 
220 DECL_TRAITS(a, _, _, 1);
221 DECL_TRAITS(ab, _, _, 2);
222 DECL_TRAITS(abc, _, _, 3);
223 DECL_TRAITS(abcd, _, _, 4);
224 DECL_TRAITS(abcde, _, _, 5);
225 DECL_TRAITS(abcdef, _, _, 6);
226 DECL_TRAITS(abcdefg, _, _, 7);
227 DECL_TRAITS(abcdefgh, _, _, 8);
228 DECL_TRAITS(abcdefghi, _, _, 9);
229 DECL_TRAITS(abcdefghij, _, _, 10);
230 DECL_TRAITS(abcdefghijk, _, _, 11);
231 DECL_TRAITS(abcdefghijkl, _, _, 12);
232 DECL_TRAITS(abcdefghijlk, _, _, 12);
233 DECL_TRAITS(abcdefghikj, _, _, 11);
234 DECL_TRAITS(abcdefghji, _, _, 10);
235 DECL_TRAITS(abcdefgih, _, _, 9);
236 DECL_TRAITS(abcdefhg, _, _, 8);
237 DECL_TRAITS(abcdegf, _, _, 7);
238 DECL_TRAITS(abcdfe, _, _, 6);
239 DECL_TRAITS(abced, _, _, 5);
240 DECL_TRAITS(abdc, _, _, 4);
241 DECL_TRAITS(abdec, _, _, 5);
242 DECL_TRAITS(abdfce, _, _, 6);
243 DECL_TRAITS(acb, _, _, 3);
244 DECL_TRAITS(acbde, _, _, 5);
245 DECL_TRAITS(acbdef, _, _, 6);
246 DECL_TRAITS(abdefc, _, _, 6);
247 DECL_TRAITS(acdb, _, _, 4);
248 DECL_TRAITS(acdeb, _, _, 5);
249 DECL_TRAITS(ba, _, _, 2);
250 DECL_TRAITS(bac, _, _, 3);
251 DECL_TRAITS(bacd, _, _, 4);
252 DECL_TRAITS(bacde, _, _, 5);
253 DECL_TRAITS(bca, _, _, 3);
254 DECL_TRAITS(bcda, _, _, 4);
255 DECL_TRAITS(bcdea, _, _, 5);
256 DECL_TRAITS(cba, _, _, 3);
257 DECL_TRAITS(cdba, _, _, 4);
258 DECL_TRAITS(dcab, _, _, 4);
259 DECL_TRAITS(cdeba, _, _, 5);
260 DECL_TRAITS(decab, _, _, 5);
261 DECL_TRAITS(defcab, _, _, 6);
262 
263 DECL_TRAITS(Abc4a, _A, _4a, 3);
264 DECL_TRAITS(aBc4b, _B, _4b, 3);
265 DECL_TRAITS(ABc4b16a4b, _AB, _4b16a4b, 3);
266 DECL_TRAITS(ABc4b32a4b, _AB, _4b32a4b, 3);
267 DECL_TRAITS(ABc4b64a4b, _AB, _4b64a4b, 3);
268 DECL_TRAITS(ABc2b8a4b, _AB, _2b8a4b, 3);
269 DECL_TRAITS(ABc16a16b2a, _AB, _16a16b2a, 3);
270 DECL_TRAITS(ABc16b16a4b, _AB, _16b16a4b, 3);
271 DECL_TRAITS(ABc16b32a4b, _AB, _16b32a4b, 3);
272 DECL_TRAITS(ABc16b48a4b, _AB, _16b48a4b, 3);
273 DECL_TRAITS(ABc16b64a4b, _AB, _16b64a4b, 3);
274 DECL_TRAITS(ABc16b16a2b, _AB, _16b16a2b, 3);
275 DECL_TRAITS(ABc16b32a2b, _AB, _16b32a2b, 3);
276 DECL_TRAITS(ABc16b48a2b, _AB, _16b48a2b, 3);
277 DECL_TRAITS(ABc16b64a2b, _AB, _16b64a2b, 3);
278 DECL_TRAITS(ABc4b4a, _AB, _4b4a, 3);
279 DECL_TRAITS(Abcd4a, _A, _4a, 4);
280 DECL_TRAITS(aBcd4b, _B, _4b, 4);
281 DECL_TRAITS(ABcd4b4a, _AB, _4b4a, 4);
282 DECL_TRAITS(ABcd4a4b, _AB, _4a4b, 4);
283 DECL_TRAITS(aBCd4c16b4c, _BC, _4c16b4c, 4);
284 DECL_TRAITS(aBCd2c8b4c, _BC, _2c8b4c, 4);
285 DECL_TRAITS(aBCd16b16c2b, _BC, _16b16c2b, 4);
286 DECL_TRAITS(aBCd16c16b4c, _BC, _16c16b4c, 4);
287 DECL_TRAITS(aBCd16c16b2c, _BC, _16c16b2c, 4);
288 DECL_TRAITS(aBCdef16c16b4c, _BC, _16c16b4c, 6);
289 DECL_TRAITS(aBCdef16c16b2c, _BC, _16c16b2c, 6);
290 DECL_TRAITS(aBCd4c4b, _BC, _4c4b, 4);
291 DECL_TRAITS(aBCd4b4c, _BC, _4b4c, 4);
292 DECL_TRAITS(Abcde4a, _A, _4a, 5);
293 DECL_TRAITS(aBcde4b, _B, _4b, 5);
294 DECL_TRAITS(ABcde4b4a, _AB, _4b4a, 5);
295 DECL_TRAITS(ABcde4a4b, _AB, _4a4b, 5);
296 DECL_TRAITS(aBCde4c4b, _BC, _4c4b, 5);
297 DECL_TRAITS(aBcdef4b, _B, _4b, 6);
298 DECL_TRAITS(aBCdef4c4b, _BC, _4c4b, 6);
299 DECL_TRAITS(aBCdef4b4c, _BC, _4b4c, 6);
300 DECL_TRAITS(aBdc4b, _B, _4b, 4);
301 DECL_TRAITS(aBdec4b, _B, _4b, 5);
302 DECL_TRAITS(aBdefc4b, _B, _4b, 6);
303 DECL_TRAITS(Acb4a, _A, _4a, 3);
304 DECL_TRAITS(Acdb4a, _A, _4a, 4);
305 DECL_TRAITS(Acdeb4a, _A, _4a, 5);
306 
307 DECL_TRAITS(AB16b16a, _AB, _16b16a, 2);
308 DECL_TRAITS(AB16b32a, _AB, _16b32a, 2);
309 DECL_TRAITS(AB16b64a, _AB, _16b64a, 2);
310 DECL_TRAITS(AB8b16a2b, _AB, _8b16a2b, 2);
311 DECL_TRAITS(AB8b32a2b, _AB, _8b32a2b, 2);
312 DECL_TRAITS(AB8b64a2b, _AB, _8b64a2b, 2);
313 DECL_TRAITS(AB4b16a4b, _AB, _4b16a4b, 2);
314 DECL_TRAITS(AB4b32a4b, _AB, _4b32a4b, 2);
315 DECL_TRAITS(AB4b64a4b, _AB, _4b64a4b, 2);
316 DECL_TRAITS(AB16b16a4b, _AB, _16b16a4b, 2);
317 DECL_TRAITS(AB16b32a4b, _AB, _16b32a4b, 2);
318 DECL_TRAITS(AB16b48a4b, _AB, _16b48a4b, 2);
319 DECL_TRAITS(AB16b64a4b, _AB, _16b64a4b, 2);
320 DECL_TRAITS(AB16b16a2b, _AB, _16b16a2b, 2);
321 DECL_TRAITS(AB16b32a2b, _AB, _16b32a2b, 2);
322 DECL_TRAITS(AB16b48a2b, _AB, _16b48a2b, 2);
323 DECL_TRAITS(AB16b64a2b, _AB, _16b64a2b, 2);
324 
325 DECL_TRAITS(BA16a16b, _AB, _16a16b, 2);
326 DECL_TRAITS(BA16a32b, _AB, _16a32b, 2);
327 DECL_TRAITS(BA16a48b, _AB, _16a48b, 2);
328 DECL_TRAITS(BA16a64b, _AB, _16a64b, 2);
329 DECL_TRAITS(BA16a16b2a, _AB, _16a16b2a, 2);
330 DECL_TRAITS(BA16a32b2a, _AB, _16a32b2a, 2);
331 DECL_TRAITS(BA16a48b2a, _AB, _16a48b2a, 2);
332 DECL_TRAITS(BA16a64b2a, _AB, _16a64b2a, 2);
333 DECL_TRAITS(BA16a16b4a, _AB, _16a16b4a, 2);
334 DECL_TRAITS(BA16a32b4a, _AB, _16a32b4a, 2);
335 DECL_TRAITS(BA16a48b4a, _AB, _16a48b4a, 2);
336 DECL_TRAITS(BA16a64b4a, _AB, _16a64b4a, 2);
337 
338 DECL_TRAITS(Abc16a, _A, _16a, 3);
339 DECL_TRAITS(ABc16a16b, _AB, _16a16b, 3);
340 DECL_TRAITS(ABc4a4b, _AB, _4a4b, 3);
341 DECL_TRAITS(aBc16b, _B, _16b, 3);
342 DECL_TRAITS(ABc16b16a, _AB, _16b16a, 3);
343 DECL_TRAITS(ABc16b32a, _AB, _16b32a, 3);
344 DECL_TRAITS(ABc16b64a, _AB, _16b64a, 3);
345 DECL_TRAITS(ABc8a16b2a, _AB, _8a16b2a, 3);
346 DECL_TRAITS(ABc8a8b, _AB, _8a8b, 3);
347 DECL_TRAITS(aBc8b, _B, _8b, 3);
348 DECL_TRAITS(ABc8b16a2b, _AB, _8b16a2b, 3);
349 DECL_TRAITS(ABc8b32a2b, _AB, _8b32a2b, 3);
350 DECL_TRAITS(ABc8b64a2b, _AB, _8b64a2b, 3);
351 DECL_TRAITS(BAc8a16b2a, _AB, _8a16b2a, 3);
352 DECL_TRAITS(ABc8b8a, _AB, _8b8a, 3);
353 DECL_TRAITS(Abcd16a, _A, _16a, 4);
354 DECL_TRAITS(Abcd8a, _A, _8a, 4);
355 DECL_TRAITS(ABcd16a16b, _AB, _16a16b, 4);
356 DECL_TRAITS(aBcd16b, _B, _16b, 4);
357 DECL_TRAITS(ABcd16b16a, _AB, _16b16a, 4);
358 DECL_TRAITS(ABcd16b32a, _AB, _16b32a, 4);
359 DECL_TRAITS(ABcd16b64a, _AB, _16b64a, 4);
360 DECL_TRAITS(aBCd16b16c, _BC, _16b16c, 4);
361 DECL_TRAITS(aBCd16c16b, _BC, _16c16b, 4);
362 DECL_TRAITS(ABcd4b16a4b, _AB, _4b16a4b, 4);
363 DECL_TRAITS(ABcd4b32a4b, _AB, _4b32a4b, 4);
364 DECL_TRAITS(ABcd4b64a4b, _AB, _4b64a4b, 4);
365 DECL_TRAITS(ABcd2b8a4b, _AB, _2b8a4b, 4);
366 DECL_TRAITS(ABcd16a16b2a, _AB, _16a16b2a, 4);
367 DECL_TRAITS(ABcd16b16a4b, _AB, _16b16a4b, 4);
368 DECL_TRAITS(ABcd16b32a4b, _AB, _16b32a4b, 4);
369 DECL_TRAITS(ABcd16b48a4b, _AB, _16b48a4b, 4);
370 DECL_TRAITS(ABcd16b64a4b, _AB, _16b64a4b, 4);
371 DECL_TRAITS(ABcd16b16a2b, _AB, _16b16a2b, 4);
372 DECL_TRAITS(ABcd16b32a2b, _AB, _16b32a2b, 4);
373 DECL_TRAITS(ABcd16b48a2b, _AB, _16b48a2b, 4);
374 DECL_TRAITS(ABcd16b64a2b, _AB, _16b64a2b, 4);
375 DECL_TRAITS(ABcde16b16a2b, _AB, _16b16a2b, 5);
376 DECL_TRAITS(ABcde16b32a2b, _AB, _16b32a2b, 5);
377 DECL_TRAITS(ABcde16b48a2b, _AB, _16b48a2b, 5);
378 DECL_TRAITS(ABcde16b64a2b, _AB, _16b64a2b, 5);
379 DECL_TRAITS(ABcd8a16b2a, _AB, _8a16b2a, 4);
380 DECL_TRAITS(ABcd8a8b, _AB, _8a8b, 4);
381 DECL_TRAITS(aBcd8b, _B, _8b, 4);
382 DECL_TRAITS(ABcd8b16a2b, _AB, _8b16a2b, 4);
383 DECL_TRAITS(ABcd8b32a2b, _AB, _8b32a2b, 4);
384 DECL_TRAITS(ABcd8b64a2b, _AB, _8b64a2b, 4);
385 DECL_TRAITS(aBCd8b16c2b, _BC, _8b16c2b, 4);
386 DECL_TRAITS(BAcd8a16b2a, _AB, _8a16b2a, 4);
387 DECL_TRAITS(ABcd8b8a, _AB, _8b8a, 4);
388 DECL_TRAITS(aBCd8b8c, _BC, _8b8c, 4);
389 DECL_TRAITS(aBCd8c16b2c, _BC, _8c16b2c, 4);
390 DECL_TRAITS(aCBd8b16c2b, _BC, _8b16c2b, 4);
391 DECL_TRAITS(aBCd8c8b, _BC, _8c8b, 4);
392 DECL_TRAITS(Abcde16a, _A, _16a, 5);
393 DECL_TRAITS(ABcde16a16b, _AB, _16a16b, 5);
394 DECL_TRAITS(BAcde8a16b2a, _AB, _8a16b2a, 5);
395 DECL_TRAITS(ABcde4b16a4b, _AB, _4b16a4b, 5);
396 DECL_TRAITS(ABcde4b32a4b, _AB, _4b32a4b, 5);
397 DECL_TRAITS(ABcde4b64a4b, _AB, _4b64a4b, 5);
398 DECL_TRAITS(ABcde16b16a4b, _AB, _16b16a4b, 5);
399 DECL_TRAITS(ABcde16b32a4b, _AB, _16b32a4b, 5);
400 DECL_TRAITS(ABcde16b48a4b, _AB, _16b48a4b, 5);
401 DECL_TRAITS(ABcde16b64a4b, _AB, _16b64a4b, 5);
402 DECL_TRAITS(ABcde2b8a4b, _AB, _2b8a4b, 5);
403 DECL_TRAITS(aBcde16b, _B, _16b, 5);
404 DECL_TRAITS(ABcde16b16a, _AB, _16b16a, 5);
405 DECL_TRAITS(ABcde16b32a, _AB, _16b32a, 5);
406 DECL_TRAITS(ABcde16b64a, _AB, _16b64a, 5);
407 DECL_TRAITS(aBCde16b16c, _BC, _16b16c, 5);
408 DECL_TRAITS(aBCde16c16b, _BC, _16c16b, 5);
409 DECL_TRAITS(aBCde4c16b4c, _BC, _4c16b4c, 5);
410 DECL_TRAITS(aBCde16b16c2b, _BC, _16b16c2b, 5);
411 DECL_TRAITS(aBCde16c16b4c, _BC, _16c16b4c, 5);
412 DECL_TRAITS(aBCde16c16b2c, _BC, _16c16b2c, 5);
413 DECL_TRAITS(Abcde8a, _A, _8a, 5);
414 DECL_TRAITS(ABcde8a8b, _AB, _8a8b, 5);
415 DECL_TRAITS(aBcde8b, _B, _8b, 5);
416 DECL_TRAITS(ABcde8b16a2b, _AB, _8b16a2b, 5);
417 DECL_TRAITS(ABcde8b32a2b, _AB, _8b32a2b, 5);
418 DECL_TRAITS(ABcde8b64a2b, _AB, _8b64a2b, 5);
419 DECL_TRAITS(aBCde8b16c2b, _BC, _8b16c2b, 5);
420 DECL_TRAITS(aCBde8b16c2b, _BC, _8b16c2b, 5);
421 DECL_TRAITS(ABcde8b8a, _AB, _8b8a, 5);
422 DECL_TRAITS(aBCde8b8c, _BC, _8b8c, 5);
423 DECL_TRAITS(aBCde2c8b4c, _BC, _2c8b4c, 5);
424 DECL_TRAITS(aBCde8c16b2c, _BC, _8c16b2c, 5);
425 DECL_TRAITS(aBCde4b4c, _BC, _4b4c, 5);
426 DECL_TRAITS(aBCde8c8b, _BC, _8c8b, 5);
427 DECL_TRAITS(aBcdef16b, _B, _16b, 6);
428 DECL_TRAITS(aBCdef16b16c, _BC, _16b16c, 6);
429 DECL_TRAITS(aBCdef16c16b, _BC, _16c16b, 6);
430 DECL_TRAITS(aBCdef4c16b4c, _BC, _4c16b4c, 6);
431 DECL_TRAITS(aBCdef2c8b4c, _BC, _2c8b4c, 6);
432 DECL_TRAITS(aBCdef8b8c, _BC, _8b8c, 6);
433 DECL_TRAITS(aBCdef8c16b2c, _BC, _8c16b2c, 6);
434 DECL_TRAITS(aCBdef8b16c2b, _BC, _8b16c2b, 6);
435 DECL_TRAITS(aBCdef8c8b, _BC, _8c8b, 6);
436 DECL_TRAITS(aBdc16b, _B, _16b, 4);
437 DECL_TRAITS(aBdC16b2c, _BC, _16b2c, 4);
438 DECL_TRAITS(aBdC16b4c, _BC, _16b4c, 4);
439 DECL_TRAITS(aBdc8b, _B, _8b, 4);
440 DECL_TRAITS(aBdec16b, _B, _16b, 5);
441 DECL_TRAITS(aBdeC16b2c, _BC, _16b2c, 5);
442 DECL_TRAITS(aBdeC16b4c, _BC, _16b4c, 5);
443 DECL_TRAITS(aBdec8b, _B, _8b, 5);
444 DECL_TRAITS(aBdefc16b, _B, _16b, 6);
445 DECL_TRAITS(aBdefC16b2c, _BC, _16b2c, 6);
446 DECL_TRAITS(aBdefC16b4c, _BC, _16b4c, 6);
447 DECL_TRAITS(aBdefc8b, _B, _8b, 6);
448 DECL_TRAITS(aBedc16b, _B, _16b, 5);
449 DECL_TRAITS(Acb16a, _A, _16a, 3);
450 DECL_TRAITS(AcB16a2b, _AB, _16a2b, 3);
451 DECL_TRAITS(AcB16a4b, _AB, _16a4b, 3);
452 DECL_TRAITS(Acb8a, _A, _8a, 3);
453 DECL_TRAITS(aCBd16b16c, _BC, _16b16c, 4);
454 DECL_TRAITS(aCBde16b16c, _BC, _16b16c, 5);
455 DECL_TRAITS(Acdb16a, _A, _16a, 4);
456 DECL_TRAITS(AcdB16a2b, _AB, _16a2b, 4);
457 DECL_TRAITS(AcdB16a4b, _AB, _16a4b, 4);
458 DECL_TRAITS(Acdb8a, _A, _8a, 4);
459 DECL_TRAITS(Acdeb16a, _A, _16a, 5);
460 DECL_TRAITS(AcdeB16a2b, _AB, _16a2b, 5);
461 DECL_TRAITS(AcdeB16a4b, _AB, _16a4b, 5);
462 DECL_TRAITS(Acdeb8a, _A, _8a, 5);
463 DECL_TRAITS(Adcb16a, _A, _16a, 4);
464 DECL_TRAITS(BAc16a16b, _AB, _16a16b, 3);
465 DECL_TRAITS(BAcd16a16b, _AB, _16a16b, 4);
466 DECL_TRAITS(BAcde16a16b, _AB, _16a16b, 5);
467 DECL_TRAITS(ABcd32a32b, _AB, _32a32b, 4);
468 DECL_TRAITS(BAcde16b16a, _AB, _16b16a, 5);
469 DECL_TRAITS(ABcd4a8b8a4b, _AB, _4a8b8a4b, 4);
470 DECL_TRAITS(ABcd2a8b8a2b, _AB, _2a8b8a2b, 4);
471 DECL_TRAITS(aBCde4b8c8b4c, _BC, _4b8c8b4c, 5);
472 DECL_TRAITS(aBCde2b8c8b2c, _BC, _2b8c8b2c, 5);
473 DECL_TRAITS(aBdec32b, _B, _32b, 5);
474 DECL_TRAITS(aCBdef16c16b, _BC, _16c16b, 6);
475 DECL_TRAITS(aCBdef16b16c, _BC, _16b16c, 6);
476 DECL_TRAITS(Abcdef16a, _A, _16a, 6);
477 DECL_TRAITS(aCBd16c16b, _BC, _16c16b, 4);
478 DECL_TRAITS(aCBde16c16b, _BC, _16c16b, 4);
479 DECL_TRAITS(Acdb32a, _A, _32a, 4);
480 DECL_TRAITS(BAcd16b16a, _AB, _16b16a, 4);
481 DECL_TRAITS(BAc16b16a, _AB, _16b16a, 3);
482 DECL_TRAITS(aBCd2b4c2b, _BC, _2b4c2b, 4);
483 DECL_TRAITS(aBCde2b4c2b, _BC, _2b4c2b, 5);
484 DECL_TRAITS(aBCdef2b4c2b, _BC, _2b4c2b, 6);
485 DECL_TRAITS(aBCd2c4b2c, _BC, _2c4b2c, 4);
486 DECL_TRAITS(aBCde2c4b2c, _BC, _2c4b2c, 5);
487 DECL_TRAITS(aBCdef2c4b2c, _BC, _2c4b2c, 6);
488 DECL_TRAITS(aBCd4b8c2b, _BC, _4b8c2b, 4);
489 DECL_TRAITS(aBCde4b8c2b, _BC, _4b8c2b, 5);
490 DECL_TRAITS(aBCdef4b8c2b, _BC, _4b8c2b, 6);
491 DECL_TRAITS(aBCd4c8b2c, _BC, _4c8b2c, 4);
492 DECL_TRAITS(aBCde4c8b2c, _BC, _4c8b2c, 5);
493 DECL_TRAITS(aBCdef4c8b2c, _BC, _4c8b2c, 6);
494 DECL_TRAITS(abDc32d, _D, _32d, 4);
495 DECL_TRAITS(abDC32d4c, _CD, _32d4c, 4);
496 DECL_TRAITS(abCd32c, _C, _32c, 4);
497 DECL_TRAITS(abdEc32e, _E, _32e, 5);
498 DECL_TRAITS(abdEC32e2c, _CE, _32e2c, 5);
499 DECL_TRAITS(abdEC32e4c, _CE, _32e4c, 5);
500 DECL_TRAITS(abdCe32c, _C, _32c, 5);
501 DECL_TRAITS(abdCE32c2e, _CE, _32c2e, 5);
502 DECL_TRAITS(decbA16a, _A, _16a, 5);
503 
504 DECL_TRAITS(aBdC16c16b2c, _BC, _16c16b2c, 4);
505 DECL_TRAITS(aBdC16c16b4c, _BC, _16c16b4c, 4);
506 DECL_TRAITS(aBdC16c32b2c, _BC, _16c32b2c, 4);
507 DECL_TRAITS(aBdC16c32b4c, _BC, _16c32b4c, 4);
508 DECL_TRAITS(aBdC16c48b2c, _BC, _16c48b2c, 4);
509 DECL_TRAITS(aBdC16c48b4c, _BC, _16c48b4c, 4);
510 DECL_TRAITS(aBdC16c64b2c, _BC, _16c64b2c, 4);
511 DECL_TRAITS(aBdC16c64b4c, _BC, _16c64b4c, 4);
512 DECL_TRAITS(aBdeC16c16b2c, _BC, _16c16b2c, 5);
513 DECL_TRAITS(aBdeC16c16b4c, _BC, _16c16b4c, 5);
514 DECL_TRAITS(aBdeC16c32b2c, _BC, _16c32b2c, 5);
515 DECL_TRAITS(aBdeC16c32b4c, _BC, _16c32b4c, 5);
516 DECL_TRAITS(aBdeC16c48b2c, _BC, _16c48b2c, 5);
517 DECL_TRAITS(aBdeC16c48b4c, _BC, _16c48b4c, 5);
518 DECL_TRAITS(aBdeC16c64b2c, _BC, _16c64b2c, 5);
519 DECL_TRAITS(aBdeC16c64b4c, _BC, _16c64b4c, 5);
520 DECL_TRAITS(aBdefC16c16b2c, _BC, _16c16b2c, 6);
521 DECL_TRAITS(aBdefC16c16b4c, _BC, _16c16b4c, 6);
522 DECL_TRAITS(aBdefC16c32b2c, _BC, _16c32b2c, 6);
523 DECL_TRAITS(aBdefC16c32b4c, _BC, _16c32b4c, 6);
524 DECL_TRAITS(aBdefC16c48b2c, _BC, _16c48b2c, 6);
525 DECL_TRAITS(aBdefC16c48b4c, _BC, _16c48b4c, 6);
526 DECL_TRAITS(aBdefC16c64b2c, _BC, _16c64b2c, 6);
527 DECL_TRAITS(aBdefC16c64b4c, _BC, _16c64b4c, 6);
528 
529 DECL_TRAITS(AcB16b16a2b, _AB, _16b16a2b, 3);
530 DECL_TRAITS(AcB16b16a4b, _AB, _16b16a4b, 3);
531 DECL_TRAITS(AcB16b32a2b, _AB, _16b32a2b, 3);
532 DECL_TRAITS(AcB16b32a4b, _AB, _16b32a4b, 3);
533 DECL_TRAITS(AcB16b48a2b, _AB, _16b48a2b, 3);
534 DECL_TRAITS(AcB16b48a4b, _AB, _16b48a4b, 3);
535 DECL_TRAITS(AcB16b64a2b, _AB, _16b64a2b, 3);
536 DECL_TRAITS(AcB16b64a4b, _AB, _16b64a4b, 3);
537 DECL_TRAITS(AcdB16b16a2b, _AB, _16b16a2b, 4);
538 DECL_TRAITS(AcdB16b16a4b, _AB, _16b16a4b, 4);
539 DECL_TRAITS(AcdB16b32a2b, _AB, _16b32a2b, 4);
540 DECL_TRAITS(AcdB16b32a4b, _AB, _16b32a4b, 4);
541 DECL_TRAITS(AcdB16b48a2b, _AB, _16b48a2b, 4);
542 DECL_TRAITS(AcdB16b48a4b, _AB, _16b48a4b, 4);
543 DECL_TRAITS(AcdB16b64a2b, _AB, _16b64a2b, 4);
544 DECL_TRAITS(AcdB16b64a4b, _AB, _16b64a4b, 4);
545 DECL_TRAITS(AcdeB16b16a2b, _AB, _16b16a2b, 5);
546 DECL_TRAITS(AcdeB16b16a4b, _AB, _16b16a4b, 5);
547 DECL_TRAITS(AcdeB16b32a2b, _AB, _16b32a2b, 5);
548 DECL_TRAITS(AcdeB16b32a4b, _AB, _16b32a4b, 5);
549 DECL_TRAITS(AcdeB16b48a2b, _AB, _16b48a2b, 5);
550 DECL_TRAITS(AcdeB16b48a4b, _AB, _16b48a4b, 5);
551 DECL_TRAITS(AcdeB16b64a2b, _AB, _16b64a2b, 5);
552 DECL_TRAITS(AcdeB16b64a4b, _AB, _16b64a4b, 5);
553 
554 } // namespace impl
555 } // namespace dnnl
556 
557 #endif
558