1/*******************************************************************************
2* Copyright 2016-2022 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/// @file
18/// C API types definitions
19
20#ifndef ONEAPI_DNNL_DNNL_TYPES_H
21#define ONEAPI_DNNL_DNNL_TYPES_H
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27/// @cond DO_NOT_DOCUMENT_THIS
28#include <stddef.h>
29#include <stdint.h>
30/// @endcond
31
32#include "oneapi/dnnl/dnnl_common_types.h"
33
34/// @addtogroup dnnl_api
35/// @{
36
37/// @addtogroup dnnl_api_memory
38/// @{
39
40/// Memory format kind
41typedef enum {
42 /// Undefined memory format kind, used for empty memory descriptors.
43 dnnl_format_kind_undef = 0,
44 /// A special format kind that indicates that the actual format will be
45 /// selected by a primitive automatically.
46 dnnl_format_kind_any,
47 /// A tensor in a generic format described by the stride and blocking
48 /// values in each dimension.
49 dnnl_blocked,
50 /// A special format kind that indicates that tensor format is opaque.
51 dnnl_format_kind_opaque,
52 /// Parameter to allow internal only format kinds without undefined
53 /// behavior. This parameter is chosen to be valid for so long as
54 /// sizeof(int) >= 2.
55 dnnl_format_kind_max = 0x7fff,
56} dnnl_format_kind_t;
57
58/// Memory format tag specification.
59///
60/// oneDNN formats describe physical data layout. The physical layout
61/// is described as a sequence of the dimensions as they are laid out in the
62/// memory (from the outer-most to the inner-most). Note that this order
63/// doesn't affect the logical order of the dimensions that is kept in the
64/// `dims` field of the dnnl_memory_desc_t structure. The logical order of the
65/// dimensions is specified by the primitive that uses the tensor.
66///
67/// For example, CNN 5D tensor always has its logical dimensions in the order
68/// `(batch, channels, depth, height, width)`, while the physical layout might be
69/// `NCDHW` (corresponds to #dnnl_ncdhw format tag) or
70/// `NDHWC` (corresponds to #dnnl_ndhwc format tag).
71///
72/// ~~~cpp
73/// int batch = 2, channels = 16, depth = 13, height = 13, width = 13;
74///
75/// int ndims = 5; // 5D tensor
76/// dnnl_dims_t dims = {batch, channels, depth, height, width};
77/// dnnl_memory_desc_t data_in_ncdhw;
78/// dnnl_memory_desc_create_with_tag(
79/// &data_in_ncdhw, 5, dims, dnnl_f32, dnnl_ncdhw);
80///
81/// // note that in both cases dims passed are the same
82/// dnnl_memory_desc_t data_in_ndhwc;
83/// dnnl_memory_desc_create_with_tag(
84/// &data_in_ndhwc, 5, dims, dnnl_f32, dnnl_ndhwc);
85///
86/// dnnl_memory_desc_destroy(data_in_ncdhw);
87/// dnnl_memory_desc_destroy(data_in_ndhwc);
88/// ~~~
89///
90/// Memory format tags can be further divided into two categories:
91/// - Domain-agnostic names, i.e. names the do not depend on the tensor usage
92/// in the specific primitive. These names use letters from `a` to `l` to
93/// denote logical dimension from 1 to 12, and form the order in which the
94/// dimensions are laid in memory. For instance, #dnnl_ab is used to denote
95/// 2D tensor where the second logical dimension (aka `b`) is the innermost,
96/// i.e. has stride = 1, and the first logical dimension (`a`) laid out in
97/// memory with stride equal to the size of second dimension. On the other
98/// hand, #dnnl_ba is just transposed version of the same tensor: the
99/// first dimension (`a`) becomes the innermost one.
100/// - Domain-specific names, i.e. names that make sense only in the context of
101/// a certain domain, such as CNN. This names are just aliases to the
102/// corresponding domain-agnostic tags and used mostly for the convenience.
103/// For example, #dnnl_nc is used to denote 2D CNN activations tensor
104/// memory format, where channels are the innermost dimension and batch is an
105/// outermost one. Moreover, #dnnl_nc is just an alias to #dnnl_ab,
106/// since for oneDNN CNN primitives the logical dimensions of
107/// activations tensors come in order: batch, channels, spatial.
108/// In other words, batch corresponds to the first logical dimension (`a`),
109/// channels correspond to the second one (`b`).
110///
111/// The following domain-specific notation applies to memory format tags:
112/// - @c 'n' denotes the mini-batch dimension
113/// - @c 'c' denotes a channels dimension
114/// - When there are multiple channel dimensions (for example, in convolution
115/// weights tensor), @c 'i' and @c 'o' denote dimensions of input and output
116/// channels
117/// - @c 'd', @c 'h', and @c 'w' denote spatial depth, height, and width
118/// respectively
119///
120/// Upper-case letters indicate that the data is laid out in blocks for a
121/// particular dimension. In such cases, the format name contains both upper-
122/// and lower-case letters for that dimension with a lower-case letter preceded
123/// by the block size. For example: #dnnl_nChw8c describes a format where the
124/// outermost dimension is mini-batch, followed by the channel block number,
125/// followed by the spatial height and width, and finally followed by 8-element
126/// channel blocks.
127///
128/// @sa @ref dev_guide_understanding_memory_formats
129typedef enum {
130 /// Undefined memory format tag
131 dnnl_format_tag_undef = 0,
132 /// Undefined memory format tag.
133 /// The primitive selects a format automatically.
134 dnnl_format_tag_any,
135
136 // Semantic agnostic section
137 // The physical order of dimensions is defined by the permutation of the
138 // characters, assuming that ab..z defines the natural order.
139
140 // Plain formats
141
142 dnnl_a, ///< plain 1D tensor
143 dnnl_ab, ///< plain 2D tensor
144 dnnl_abc, ///< plain 3D tensor
145 dnnl_abcd, ///< plain 4D tensor
146 dnnl_abcde, ///< plain 5D tensor
147 dnnl_abcdef, ///< plain 6D tensor
148 dnnl_abcdefg, ///< plain 7D tensor
149 dnnl_abcdefgh, ///< plain 8D tensor
150 dnnl_abcdefghi, ///< plain 9D tensor
151 dnnl_abcdefghij, ///< plain 10D tensor
152 dnnl_abcdefghijk, ///< plain 11D tensor
153 dnnl_abcdefghijkl, ///< plain 12D tensor
154
155 // Permuted plain formats
156
157 dnnl_ba, ///< permuted 2D tensor
158 dnnl_acb, ///< permuted 3D tensor
159 dnnl_bac, ///< permuted 3D tensor
160 dnnl_bca, ///< permuted 3D tensor
161 dnnl_cab, ///< permuted 3D tensor
162 dnnl_cba, ///< permuted 3D tensor
163 dnnl_abdc, ///< permuted 4D tensor
164 dnnl_acbd, ///< permuted 4D tensor
165 dnnl_acdb, ///< permuted 4D tensor
166 dnnl_adbc, ///< permuted 4D tensor
167 dnnl_adcb, ///< permuted 4D tensor
168 dnnl_bacd, ///< permuted 4D tensor
169 dnnl_bcda, ///< permuted 4D tensor
170 dnnl_cdab, ///< permuted 4D tensor
171 dnnl_cdba, ///< permuted 4D tensor
172 dnnl_dcab, ///< permuted 4D tensor
173 dnnl_abced, ///< permuted 5D tensor
174 dnnl_abdec, ///< permuted 5D tensor
175 dnnl_acbde, ///< permuted 5D tensor
176 dnnl_acdeb, ///< permuted 5D tensor
177 dnnl_adecb, ///< permuted 5D tensor
178 dnnl_bacde, ///< permuted 5D tensor
179 dnnl_bcdea, ///< permuted 5D tensor
180 dnnl_cdeab, ///< permuted 5D tensor
181 dnnl_cdeba, ///< permuted 5D tensor
182 dnnl_decab, ///< permuted 5D tensor
183 dnnl_abcdfe, ///< permuted 6D tensor
184 dnnl_abdefc, ///< permuted 6D tensor
185 dnnl_abdfce, ///< permuted 6D tensor
186 dnnl_acbdef, ///< permuted 6D tensor
187 dnnl_adefcb, ///< permuted 6D tensor
188 dnnl_defcab, ///< permuted 6D tensor
189 dnnl_abcdegf, ///< permuted 7D tensor
190 dnnl_abcdefhg, ///< permuted 8D tensor
191 dnnl_abcdefgih, ///< permuted 9D tensor
192 dnnl_abcdefghji, ///< permuted 10D tensor
193 dnnl_abcdefghikj, ///< permuted 11D tensor
194 dnnl_abcdefghijlk, ///< permuted 12D tensor
195
196 // Opaque blocked formats
197
198 dnnl_Abc16a,
199 dnnl_ABc16a16b,
200 dnnl_ABc32a32b,
201 dnnl_ABc4a4b,
202 /// 3D tensor blocked by 2nd dimension with block size 16
203 dnnl_aBc16b,
204 dnnl_ABc16b16a,
205 dnnl_Abc4a,
206 /// 3D tensor blocked by 2nd dimension with block size 32
207 dnnl_aBc32b,
208 /// 3D tensor blocked by 2nd dimension with block size 4
209 dnnl_aBc4b,
210 dnnl_ABc4b16a4b,
211 dnnl_ABc2b8a4b,
212 dnnl_ABc16b16a4b,
213 dnnl_ABc16b16a2b,
214 dnnl_ABc4b4a,
215 dnnl_ABc8a16b2a,
216 dnnl_ABc8a8b,
217 dnnl_ABc8a4b,
218 /// 3D tensor blocked by 2nd dimension with block size 8
219 dnnl_aBc8b,
220 dnnl_ABc8b16a2b,
221 dnnl_BAc8a16b2a,
222 dnnl_ABc8b8a,
223 dnnl_Abcd16a,
224 dnnl_Abcd8a,
225 dnnl_ABcd16a16b,
226 dnnl_Abcd32a,
227 dnnl_ABcd32a32b,
228 /// 4D tensor blocked by 2nd dimension with block size 16
229 dnnl_aBcd16b,
230 dnnl_ABcd16b16a,
231 dnnl_aBCd16b16c,
232 dnnl_aBCd16c16b,
233 dnnl_Abcd4a,
234 /// 4D tensor blocked by 2nd dimension with block size 32
235 dnnl_aBcd32b,
236 /// 4D tensor blocked by 2nd dimension with block size 4
237 dnnl_aBcd4b,
238 dnnl_ABcd4b16a4b,
239 dnnl_ABcd16b16a4b,
240 dnnl_ABcd16b16a2b,
241 dnnl_ABcd4b4a,
242 dnnl_ABcd4a4b,
243 dnnl_aBCd2c4b2c,
244 dnnl_aBCd4b8c2b,
245 dnnl_aBCd4c16b4c,
246 dnnl_aBCd2c8b4c,
247 dnnl_aBCd16c16b4c,
248 dnnl_aBCd16c16b2c,
249 dnnl_aBCd4c4b,
250 dnnl_aBCd4b4c,
251 dnnl_ABcd8a16b2a,
252 dnnl_ABcd2b8a4b,
253 dnnl_ABcd8a8b,
254 dnnl_ABcd8a4b,
255 /// 4D tensor blocked by 2nd dimension with block size 8
256 dnnl_aBcd8b,
257 dnnl_aBCd4c8b2c,
258 dnnl_ABcd8b16a2b,
259 dnnl_aBCd8b16c2b,
260 dnnl_BAcd8a16b2a,
261 /// 4D tensor blocked by 1st and 2nd dimension with block size 8
262 dnnl_ABcd8b8a,
263 dnnl_aBCd8b8c,
264 dnnl_aBCd8b4c,
265 dnnl_aBCd8c16b2c,
266 dnnl_ABcde8a16b2a,
267 dnnl_aCBd8b16c2b,
268 dnnl_aBCd8c8b,
269 dnnl_Abcde16a,
270 dnnl_Abcde32a,
271 dnnl_ABcde16a16b,
272 dnnl_BAcde8a16b2a,
273 /// 4D tensor blocked by 3rd dimension with block size 4
274 dnnl_aBCd2b4c2b,
275 /// 5D tensor blocked by 1st dimension with block size 16
276 dnnl_ABcde4b16a4b,
277 /// 5D tensor blocked by 1st dimension with block size 8
278 dnnl_ABcde2b8a4b,
279 /// 5D tensor blocked by 2nd dimension with block size 16
280 dnnl_aBcde16b,
281 dnnl_ABcde16b16a,
282 dnnl_aBCde16b16c,
283 dnnl_aBCde16c16b,
284 dnnl_aBCde2c8b4c,
285 dnnl_Abcde4a,
286 /// 5D tensor blocked by 2nd dimension with block size 32
287 dnnl_aBcde32b,
288 /// 5D tensor blocked by 2nd dimension with block size 4
289 dnnl_aBcde4b,
290 dnnl_ABcde4b4a,
291 dnnl_ABcde4a4b,
292 dnnl_aBCde4b4c,
293 dnnl_aBCde2c4b2c,
294 dnnl_aBCde4b8c2b,
295 dnnl_aBCde4c16b4c,
296 dnnl_aBCde16c16b4c,
297 dnnl_aBCde16c16b2c,
298 dnnl_aBCde4c4b,
299 dnnl_Abcde8a,
300 dnnl_ABcde8a8b,
301 dnnl_ABcde8a4b,
302 dnnl_BAcde16b16a,
303 /// 5D tensor blocked by 2nd dimension with block size 8
304 dnnl_aBcde8b,
305 dnnl_ABcde8b16a2b,
306 dnnl_aBCde8b16c2b,
307 dnnl_aBCde4c8b2c,
308 dnnl_aCBde8b16c2b,
309 dnnl_ABcde8b8a,
310 dnnl_ABcde32a32b,
311 dnnl_aBCde8b8c,
312 dnnl_aBCde8b4c,
313 dnnl_ABc4a8b8a4b,
314 dnnl_ABcd4a8b8a4b,
315 dnnl_ABcde4a8b8a4b,
316 dnnl_BAc4b8a8b4a,
317 dnnl_BAcd4b8a8b4a,
318 dnnl_BAcde4b8a8b4a,
319 dnnl_ABcd2a8b8a2b,
320 dnnl_aBCd4b8c8b4c,
321 dnnl_aBCde4b8c8b4c,
322 dnnl_aBCde2b8c8b2c,
323 dnnl_aBCde8c16b2c,
324 dnnl_aBCde8c8b,
325 /// 5D tensor blocked by 3rd dimension with block size 4
326 dnnl_aBCde2b4c2b,
327 /// 6D tensor blocked by 2nd dimension with block size 16
328 dnnl_aBcdef16b,
329 dnnl_aBCdef16b16c,
330 dnnl_aBCdef16c16b,
331 dnnl_aBCdef4c16b4c,
332 /// 6D tensor blocked by 2nd dimension with block size 8
333 dnnl_aBCdef2c8b4c,
334 dnnl_aBCdef4c8b2c,
335 /// 6D tensor blocked by 3rd dimension with block size 4
336 dnnl_aBCdef2b4c2b,
337 /// 6D tensor blocked by 2nd dimension with block size 4
338 dnnl_aBcdef4b,
339 dnnl_aBCdef4c4b,
340 dnnl_aBCdef4b4c,
341 dnnl_aBCdef2c4b2c,
342 dnnl_aBCdef4b8c2b,
343 dnnl_aBCdef8b8c,
344 dnnl_aBCdef8b4c,
345 dnnl_aBCdef8c16b2c,
346 dnnl_aBCdef4b8c8b4c,
347 dnnl_aBCdef8b16c2b,
348 dnnl_aCBdef8b16c2b,
349 dnnl_aBCdef8c8b,
350 dnnl_aBdc16b,
351 dnnl_aBdC16b2c,
352 dnnl_aBdC16b4c,
353 dnnl_aBdc4b,
354 dnnl_aBdc8b,
355 dnnl_aBdec16b,
356 dnnl_aBdeC16b2c,
357 dnnl_aBdeC16b4c,
358 dnnl_aBdec32b,
359 dnnl_aBdec4b,
360 dnnl_aBdec8b,
361 dnnl_aBdefc16b,
362 dnnl_aBdefC16b2c,
363 dnnl_aCBdef16c16b,
364 dnnl_aBdefc4b,
365 dnnl_aBdefc8b,
366 dnnl_Abcdef16a,
367 dnnl_Abcdef32a,
368 dnnl_aBedc16b,
369 dnnl_Acb16a,
370 dnnl_AcB16a2b,
371 dnnl_AcB16a4b,
372 dnnl_Acb4a,
373 dnnl_Acb8a,
374 dnnl_aCBd16b16c,
375 dnnl_aCBd16c16b,
376 dnnl_aCBde16b16c,
377 dnnl_aCBde16c16b,
378 dnnl_Acdb16a,
379 dnnl_AcdB16a2b,
380 dnnl_AcdB16a4b,
381 dnnl_Acdb32a,
382 dnnl_Acdb4a,
383 dnnl_Acdb8a,
384 dnnl_Acdeb16a,
385 dnnl_AcdeB16a2b,
386 dnnl_Acdeb4a,
387 dnnl_Acdeb8a,
388 dnnl_Adcb16a,
389 dnnl_BAc16a16b,
390 dnnl_BAc16b16a,
391 dnnl_BAcd16a16b,
392 dnnl_BAcd16b16a,
393 dnnl_aCBd4c8b8c4b,
394 dnnl_aCBde4c8b8c4b,
395 dnnl_aCBdef4c8b8c4b,
396 dnnl_BAcde16a16b,
397 dnnl_aCBdef16b16c,
398 dnnl_ABc16b32a,
399 dnnl_ABc16b64a,
400 dnnl_ABc4b32a4b,
401 dnnl_ABc4b64a4b,
402 dnnl_ABc8b32a2b,
403 dnnl_ABc8b64a2b,
404 dnnl_AB16b16a,
405 dnnl_AB16b32a,
406 dnnl_AB16b64a,
407 dnnl_AB8b16a2b,
408 dnnl_AB8b32a2b,
409 dnnl_AB8b64a2b,
410 dnnl_AB4b16a4b,
411 dnnl_AB4b32a4b,
412 dnnl_AB4b64a4b,
413 dnnl_AB16b16a4b,
414 dnnl_ABcd16b32a,
415 dnnl_ABcd16b64a,
416 dnnl_ABcd4b32a4b,
417 dnnl_ABcd4b64a4b,
418 dnnl_ABcd8b32a2b,
419 dnnl_ABcd8b64a2b,
420 dnnl_ABcde4b32a4b,
421 dnnl_ABcde4b64a4b,
422 dnnl_ABcde16b16a4b,
423 dnnl_ABcde16b16a2b,
424 dnnl_ABcde16b32a,
425 dnnl_ABcde16b64a,
426 dnnl_ABcde8b32a2b,
427 dnnl_ABcde8b64a2b,
428 dnnl_aBCdef16c16b4c,
429 dnnl_aBCdef16c16b2c,
430 dnnl_AB32a32b8a4b,
431 dnnl_AB8a4b,
432 dnnl_AB32a32b8a2b,
433 dnnl_AB8a2b,
434 dnnl_abDc32d,
435 dnnl_abDC32d4c,
436 dnnl_abdEc32e,
437 dnnl_abdEC32e2c,
438 dnnl_abdEC32e4c,
439 dnnl_aBdefC16b4c,
440 dnnl_AcdeB16a4b,
441 dnnl_ABcd16a16b2a,
442 dnnl_ABc16a16b2a,
443 dnnl_aBCd16b16c2b,
444 dnnl_aBCde16b16c2b,
445 dnnl_Acb32a,
446 dnnl_AcB32a2b,
447 dnnl_AcB32a4b,
448 dnnl_Acb48a,
449 dnnl_AcB48a2b,
450 dnnl_AcB48a4b,
451 dnnl_Acb64a,
452 dnnl_AcB64a2b,
453 dnnl_AcB64a4b,
454 dnnl_cBa2b,
455 dnnl_cBa4b,
456 dnnl_aBdc32b,
457 dnnl_aBdC32b2c,
458 dnnl_aBdC32b4c,
459 dnnl_aBdc48b,
460 dnnl_aBdC48b2c,
461 dnnl_aBdC48b4c,
462 dnnl_aBdc64b,
463 dnnl_aBdC64b2c,
464 dnnl_aBdC64b4c,
465 dnnl_adCb2c,
466 dnnl_adCb4c,
467 dnnl_AcdB32a2b,
468 dnnl_AcdB32a4b,
469 dnnl_Acdb48a,
470 dnnl_AcdB48a2b,
471 dnnl_AcdB48a4b,
472 dnnl_Acdb64a,
473 dnnl_AcdB64a2b,
474 dnnl_AcdB64a4b,
475 dnnl_cdBa2b,
476 dnnl_cdBa4b,
477 dnnl_aBdeC32b2c,
478 dnnl_aBdeC32b4c,
479 dnnl_aBdec48b,
480 dnnl_aBdeC48b2c,
481 dnnl_aBdeC48b4c,
482 dnnl_aBdec64b,
483 dnnl_aBdeC64b2c,
484 dnnl_aBdeC64b4c,
485 dnnl_adeCb2c,
486 dnnl_adeCb4c,
487 dnnl_Acdeb32a,
488 dnnl_AcdeB32a2b,
489 dnnl_AcdeB32a4b,
490 dnnl_Acdeb48a,
491 dnnl_AcdeB48a2b,
492 dnnl_AcdeB48a4b,
493 dnnl_Acdeb64a,
494 dnnl_AcdeB64a2b,
495 dnnl_AcdeB64a4b,
496 dnnl_cdeBa2b,
497 dnnl_cdeBa4b,
498 dnnl_aBdefc32b,
499 dnnl_aBdefC32b2c,
500 dnnl_aBdefC32b4c,
501 dnnl_aBdefc48b,
502 dnnl_aBdefC48b2c,
503 dnnl_aBdefC48b4c,
504 dnnl_aBdefc64b,
505 dnnl_aBdefC64b2c,
506 dnnl_aBdefC64b4c,
507 dnnl_adefCb2c,
508 dnnl_adefCb4c,
509 dnnl_AB16b32a4b,
510 dnnl_AB16b48a4b,
511 dnnl_AB16b64a4b,
512 dnnl_AB16b16a2b,
513 dnnl_AB16b32a2b,
514 dnnl_AB16b48a2b,
515 dnnl_AB16b64a2b,
516 dnnl_ABc16b32a4b,
517 dnnl_ABc16b48a4b,
518 dnnl_ABc16b64a4b,
519 dnnl_ABc16b32a2b,
520 dnnl_ABc16b48a2b,
521 dnnl_ABc16b64a2b,
522 dnnl_ABcd16b32a4b,
523 dnnl_ABcd16b48a4b,
524 dnnl_ABcd16b64a4b,
525 dnnl_ABcd16b32a2b,
526 dnnl_ABcd16b48a2b,
527 dnnl_ABcd16b64a2b,
528 dnnl_ABcde16b32a4b,
529 dnnl_ABcde16b48a4b,
530 dnnl_ABcde16b64a4b,
531 dnnl_ABcde16b32a2b,
532 dnnl_ABcde16b48a2b,
533 dnnl_ABcde16b64a2b,
534 dnnl_ABc32a16b,
535 dnnl_ABcd32a16b,
536 dnnl_ABcde32a16b,
537 dnnl_AB48a16b,
538 dnnl_AB48a32b,
539 dnnl_ABc40a16b,
540 dnnl_ABc40a32b,
541 dnnl_aBC48b16c,
542 dnnl_aBC48b32c,
543 dnnl_ABcd40a16b,
544 dnnl_ABcd40a32b,
545 dnnl_abCd32c,
546 dnnl_abdCe32c,
547 dnnl_abdCE32c2e,
548 dnnl_BA16a16b2a,
549 dnnl_BA16a32b2a,
550 dnnl_BA16a48b2a,
551 dnnl_BA16a64b2a,
552 dnnl_BA16a16b4a,
553 dnnl_BA16a32b4a,
554 dnnl_BA16a48b4a,
555 dnnl_BA16a64b4a,
556 dnnl_ABcd8a2b,
557 dnnl_aBdeC16c16b2c,
558 dnnl_aBdeC16c16b4c,
559 dnnl_aBdefC16c16b2c,
560 dnnl_AcB16b16a2b,
561 dnnl_AcB16b16a4b,
562 dnnl_AcdB16b16a2b,
563 dnnl_AcdB16b16a4b,
564 dnnl_AcdeB16b16a2b,
565 dnnl_aBdefC16c16b4c,
566 dnnl_AcdeB16b16a4b,
567 dnnl_AcB16b32a2b,
568 dnnl_AcB16b32a4b,
569 dnnl_AcB16b48a2b,
570 dnnl_AcB16b48a4b,
571 dnnl_AcB16b64a2b,
572 dnnl_AcB16b64a4b,
573 dnnl_aBdC16c16b2c,
574 dnnl_aBdC16c16b4c,
575 dnnl_aBdC16c32b2c,
576 dnnl_aBdC16c32b4c,
577 dnnl_aBdC16c48b2c,
578 dnnl_aBdC16c48b4c,
579 dnnl_aBdC16c64b2c,
580 dnnl_aBdC16c64b4c,
581 dnnl_AcdB16b32a2b,
582 dnnl_AcdB16b32a4b,
583 dnnl_AcdB16b48a2b,
584 dnnl_AcdB16b48a4b,
585 dnnl_AcdB16b64a2b,
586 dnnl_AcdB16b64a4b,
587 dnnl_aBdeC16c32b2c,
588 dnnl_aBdeC16c32b4c,
589 dnnl_aBdeC16c48b2c,
590 dnnl_aBdeC16c48b4c,
591 dnnl_aBdeC16c64b2c,
592 dnnl_aBdeC16c64b4c,
593 dnnl_AcdeB16b32a2b,
594 dnnl_AcdeB16b32a4b,
595 dnnl_AcdeB16b48a2b,
596 dnnl_AcdeB16b48a4b,
597 dnnl_AcdeB16b64a2b,
598 dnnl_AcdeB16b64a4b,
599 dnnl_aBdefC16c32b2c,
600 dnnl_aBdefC16c32b4c,
601 dnnl_aBdefC16c48b2c,
602 dnnl_aBdefC16c48b4c,
603 dnnl_aBdefC16c64b2c,
604 dnnl_aBdefC16c64b4c,
605 dnnl_decbA16a,
606 dnnl_ABc4a2b,
607 dnnl_ABc8a2b,
608 dnnl_aBCd8b2c,
609 dnnl_ABcde4a2b,
610 dnnl_ABcde8a2b,
611 dnnl_ABcde40a16b,
612 dnnl_ABcde40a32b,
613 dnnl_aBCde8b2c,
614 dnnl_ABcde4a8b8a2b,
615 dnnl_ABcd4a8b8a2b,
616 dnnl_ABc4a8b8a2b,
617 dnnl_aBCdef4b8c8b2c,
618 dnnl_aBCde4b8c8b2c,
619 dnnl_aBCd4b8c8b2c,
620 dnnl_BAcde4b8a8b2a,
621 dnnl_BAcd4b8a8b2a,
622 dnnl_BAc4b8a8b2a,
623 dnnl_aCBdef4c8b8c2b,
624 dnnl_aCBde4c8b8c2b,
625 dnnl_aCBd4c8b8c2b,
626 dnnl_aBCdef8b2c,
627 dnnl_AB32a16b,
628 dnnl_AB32a32b,
629 dnnl_BA4b8a8b2a,
630 dnnl_BA4b8a8b4a,
631 dnnl_aBC32b16c,
632 dnnl_aBC32b32c,
633 dnnl_aCB4c8b8c2b,
634 dnnl_aCB4c8b8c4b,
635 dnnl_ABcd4a2b,
636 dnnl_ABc2b8a16b4a,
637 dnnl_ABcd2b8a16b4a,
638 dnnl_ABcde2b8a16b4a,
639 dnnl_ABc2a8b16a4b,
640 dnnl_ABc2a8b16a2b,
641 dnnl_ABc2b32a8b,
642 dnnl_ABcd2a8b16a4b,
643 dnnl_ABcd2a8b16a2b,
644 dnnl_aCBd2c8b16c2b,
645 dnnl_ABcd2b32a8b,
646 dnnl_aBCd2c8b16c2b,
647 dnnl_ABcde2a8b16a4b,
648 dnnl_ABcde2a8b16a2b,
649 dnnl_aCBde2c8b16c2b,
650 dnnl_ABcde2b32a8b,
651 dnnl_aBC2b8c16b2c,
652 dnnl_aBCd2b8c16b2c,
653 dnnl_aBCde2b8c16b2c,
654 dnnl_aBCdef2b8c16b2c,
655 dnnl_BAcde2b8a16b4a,
656 dnnl_BAcd2b8a16b4a,
657 dnnl_BAc2b8a16b4a,
658 dnnl_BAcde2b8a16b2a,
659 dnnl_BAcd2b8a16b2a,
660 dnnl_BAc2b8a16b2a,
661 dnnl_aBCde2c8b16c2b,
662 dnnl_aBCdef2c8b16c2b,
663 dnnl_aCBdef2c8b16c2b,
664 dnnl_aBCd2b8c16b4c,
665 dnnl_aBCde2b8c16b4c,
666 dnnl_BA4b8a16b2a,
667 dnnl_BA4b8a16b4a,
668 dnnl_aCB4c8b16c2b,
669 dnnl_aCB4c8b16c4b,
670 dnnl_BA16a16b,
671 dnnl_BA16a32b,
672 dnnl_BA16a48b,
673 dnnl_BA16a64b,
674 dnnl_aCB16c2b,
675 dnnl_aCB16c4b,
676 dnnl_BA16b2a,
677 dnnl_BA16b4a,
678 dnnl_aBC16b16c,
679 dnnl_aBC16b32c,
680 dnnl_AB16a16b,
681 dnnl_AB16a32b,
682 dnnl_ABcde16a16b2a,
683 dnnl_aBCdef16b16c2b,
684 dnnl_Acedb16a,
685 dnnl_aBdfec16b,
686 dnnl_abdEC64e2c,
687 dnnl_abdEC64e4c,
688 dnnl_aCB16b16c,
689 dnnl_aCB16b32c,
690 dnnl_aCB16b48c,
691 dnnl_aCB16b64c,
692 dnnl_aCB16b16c2b,
693 dnnl_aCB16b32c2b,
694 dnnl_aCB16b48c2b,
695 dnnl_aCB16b64c2b,
696 dnnl_aCB16b16c4b,
697 dnnl_aCB16b32c4b,
698 dnnl_aCB16b48c4b,
699 dnnl_aCB16b64c4b,
700 dnnl_abCd4c,
701 dnnl_abCde4c,
702 dnnl_abCdef4c,
703 dnnl_abCde32c,
704 dnnl_abCdef32c,
705 dnnl_ABcd16a32b,
706 dnnl_decbA8a,
707 dnnl_aCdefB16b32c2b,
708 dnnl_aCdefB16b32c4b,
709 dnnl_aCdefB16b48c2b,
710 dnnl_aCdefB16b48c4b,
711 dnnl_aCdefB16b64c2b,
712 dnnl_aCdefB16b64c4b,
713 dnnl_BcdeA16a32b2a,
714 dnnl_BcdeA16a32b4a,
715 dnnl_BcdeA16a48b2a,
716 dnnl_BcdeA16a48b4a,
717 dnnl_BcdeA16a64b2a,
718 dnnl_BcdeA16a64b4a,
719 dnnl_aCdefb32c,
720 dnnl_aCdefB32c2b,
721 dnnl_aCdefB32c4b,
722 dnnl_aCdefb48c,
723 dnnl_aCdefB48c2b,
724 dnnl_aCdefB48c4b,
725 dnnl_aCdefb64c,
726 dnnl_aCdefB64c2b,
727 dnnl_aCdefB64c4b,
728 dnnl_Bcdea32b,
729 dnnl_BcdeA32b2a,
730 dnnl_BcdeA32b4a,
731 dnnl_Bcdea48b,
732 dnnl_BcdeA48b2a,
733 dnnl_BcdeA48b4a,
734 dnnl_Bcdea64b,
735 dnnl_BcdeA64b2a,
736 dnnl_BcdeA64b4a,
737 dnnl_Bca32b,
738 dnnl_BcA32b2a,
739 dnnl_BcA32b4a,
740 dnnl_Bca48b,
741 dnnl_BcA48b2a,
742 dnnl_BcA48b4a,
743 dnnl_Bca64b,
744 dnnl_BcA64b2a,
745 dnnl_BcA64b4a,
746 dnnl_aCdb32c,
747 dnnl_aCdB32c2b,
748 dnnl_aCdB32c4b,
749 dnnl_aCdb48c,
750 dnnl_aCdB48c2b,
751 dnnl_aCdB48c4b,
752 dnnl_aCdb64c,
753 dnnl_aCdB64c2b,
754 dnnl_aCdB64c4b,
755 dnnl_BcA16a16b2a,
756 dnnl_BcA16a16b4a,
757 dnnl_BcdA16a16b2a,
758 dnnl_BcdA16a16b4a,
759 dnnl_BcdeA16a16b2a,
760 dnnl_BcdeA16a16b4a,
761 dnnl_aCdB16b16c2b,
762 dnnl_aCdB16b16c4b,
763 dnnl_aCdeB16b16c2b,
764 dnnl_aCdeB16b16c4b,
765 dnnl_aCdefB16b16c2b,
766 dnnl_aCdefB16b16c4b,
767 dnnl_BcA16a32b2a,
768 dnnl_BcA16a32b4a,
769 dnnl_BcA16a48b2a,
770 dnnl_BcA16a48b4a,
771 dnnl_BcA16a64b2a,
772 dnnl_BcA16a64b4a,
773 dnnl_aCdB16b32c2b,
774 dnnl_aCdB16b32c4b,
775 dnnl_aCdB16b48c2b,
776 dnnl_aCdB16b48c4b,
777 dnnl_aCdB16b64c2b,
778 dnnl_aCdB16b64c4b,
779 dnnl_BcdA16a32b2a,
780 dnnl_BcdA16a32b4a,
781 dnnl_BcdA16a48b2a,
782 dnnl_BcdA16a48b4a,
783 dnnl_BcdA16a64b2a,
784 dnnl_BcdA16a64b4a,
785 dnnl_aCdeB16b32c2b,
786 dnnl_aCdeB16b32c4b,
787 dnnl_aCdeB16b48c2b,
788 dnnl_aCdeB16b48c4b,
789 dnnl_aCdeB16b64c2b,
790 dnnl_aCdeB16b64c4b,
791 dnnl_Bca16b,
792 dnnl_BcA16b2a,
793 dnnl_BcA16b4a,
794 dnnl_Bcda16b,
795 dnnl_BcdA16b2a,
796 dnnl_BcdA16b4a,
797 dnnl_Bcdea16b,
798 dnnl_BcdeA16b2a,
799 dnnl_BcdeA16b4a,
800 dnnl_aCdb16c,
801 dnnl_aCdB16c2b,
802 dnnl_aCdB16c4b,
803 dnnl_aCdeb16c,
804 dnnl_aCdeB16c2b,
805 dnnl_aCdeB16c4b,
806 dnnl_aCdefb16c,
807 dnnl_aCdefB16c2b,
808 dnnl_aCdefB16c4b,
809 dnnl_Bcda32b,
810 dnnl_BcdA32b2a,
811 dnnl_BcdA32b4a,
812 dnnl_Bcda48b,
813 dnnl_BcdA48b2a,
814 dnnl_BcdA48b4a,
815 dnnl_Bcda64b,
816 dnnl_BcdA64b2a,
817 dnnl_BcdA64b4a,
818 dnnl_aCdeb32c,
819 dnnl_aCdeB32c2b,
820 dnnl_aCdeB32c4b,
821 dnnl_aCdeb48c,
822 dnnl_aCdeB48c2b,
823 dnnl_aCdeB48c4b,
824 dnnl_aCdeb64c,
825 dnnl_aCdeB64c2b,
826 dnnl_aCdeB64c4b,
827
828 /// Just a sentinel, not real memory format tag. Must be changed after new
829 /// format tag is added.
830 dnnl_format_tag_last,
831
832 // Aliases
833
834 /// 1D tensor, an alias to #dnnl_a
835 dnnl_x = dnnl_a,
836 /// 2D CNN activations tensor, an alias to #dnnl_ab
837 dnnl_nc = dnnl_ab,
838 /// 2D CNN activations tensor, an alias to #dnnl_ba
839 dnnl_cn = dnnl_ba,
840 /// 2D RNN statistics tensor, an alias to #dnnl_ab
841 dnnl_tn = dnnl_ab,
842 /// 2D RNN statistics tensor, an alias to #dnnl_ba
843 dnnl_nt = dnnl_ba,
844 /// 3D CNN activations tensor, an alias to #dnnl_abc
845 dnnl_ncw = dnnl_abc,
846 /// 3D CNN activations tensor, an alias to #dnnl_acb
847 dnnl_nwc = dnnl_acb,
848 /// 4D CNN activations tensor, an alias to #dnnl_abcd
849 dnnl_nchw = dnnl_abcd,
850 /// 4D CNN activations tensor, an alias to #dnnl_acdb
851 dnnl_nhwc = dnnl_acdb,
852 /// 4D CNN activations tensor, an alias to #dnnl_bcda
853 dnnl_chwn = dnnl_bcda,
854 /// 5D CNN activations tensor, an alias to #dnnl_abcde
855 dnnl_ncdhw = dnnl_abcde,
856 /// 5D CNN activations tensor, an alias to #dnnl_acdeb
857 dnnl_ndhwc = dnnl_acdeb,
858
859 /// 2D CNN weights tensor, an alias to #dnnl_ab
860 dnnl_oi = dnnl_ab,
861 /// 2D CNN weights tensor, an alias to #dnnl_ba
862 dnnl_io = dnnl_ba,
863 /// 3D CNN weights tensor, an alias to #dnnl_abc
864 dnnl_oiw = dnnl_abc,
865 /// 3D CNN weights tensor, an alias to #dnnl_acb
866 dnnl_owi = dnnl_acb,
867 /// 3D CNN weights tensor, an alias to #dnnl_cba
868 dnnl_wio = dnnl_cba,
869 /// 3D CNN weights tensor, an alias to #dnnl_cab
870 dnnl_woi = dnnl_cab,
871 /// 3D CNN weights tensor, an alias to #dnnl_bca
872 dnnl_iwo = dnnl_bca,
873 /// 4D CNN weights tensor, an alias to #dnnl_abcd
874 dnnl_oihw = dnnl_abcd,
875 /// 4D CNN weights tensor, an alias to #dnnl_cdba
876 dnnl_hwio = dnnl_cdba,
877 /// 4D CNN weights tensor, an alias to #dnnl_cdab
878 dnnl_hwoi = dnnl_cdab,
879 /// 4D CNN weights tensor, an alias to #dnnl_acdb
880 dnnl_ohwi = dnnl_acdb,
881 /// 4D CNN weights tensor, an alias to #dnnl_bcda
882 dnnl_ihwo = dnnl_bcda,
883 /// 4D CNN weights tensor, an alias to #dnnl_bacd
884 dnnl_iohw = dnnl_bacd,
885 /// 5D CNN weights tensor, an alias to #dnnl_abcde
886 dnnl_oidhw = dnnl_abcde,
887 /// 5D CNN weights tensor, an alias to #dnnl_bacde
888 dnnl_iodhw = dnnl_bacde,
889 /// 5D CNN weights tensor, an alias to #dnnl_cdeba
890 dnnl_dhwio = dnnl_cdeba,
891 /// 5D CNN weights tensor, an alias to #dnnl_cdeab
892 dnnl_dhwoi = dnnl_cdeab,
893 /// 5D CNN weights tensor, an alias to #dnnl_acdeb
894 dnnl_odhwi = dnnl_acdeb,
895 /// 5D CNN weights tensor, an alias to #dnnl_bcdea
896 dnnl_idhwo = dnnl_bcdea,
897
898 /// 4D CNN weights tensor (incl. groups), an alias to #dnnl_abcd
899 dnnl_goiw = dnnl_abcd,
900 /// 4D CNN weights tensor (incl. groups), an alias to #dnnl_abdc
901 dnnl_gowi = dnnl_abdc,
902 /// 4D CNN weights tensor (incl. groups), an alias to #dnnl_dcab
903 dnnl_wigo = dnnl_dcab,
904 /// 5D CNN weights tensor (incl. groups), an alias to #dnnl_abcde
905 dnnl_goihw = dnnl_abcde,
906 /// 5D CNN weights tensor (incl. groups), an alias to #dnnl_abdec
907 dnnl_gohwi = dnnl_abdec,
908 /// 5D CNN weights tensor (incl. groups), an alias to #dnnl_decab
909 dnnl_hwigo = dnnl_decab,
910 /// 5D CNN weights tensor (incl. groups), an alias to #dnnl_acbde
911 dnnl_giohw = dnnl_acbde,
912 /// 6D CNN weights tensor (incl. groups), an alias to #dnnl_abcdef
913 dnnl_goidhw = dnnl_abcdef,
914 /// 6D CNN weights tensor (incl. groups), an alias to #dnnl_abdefc
915 dnnl_godhwi = dnnl_abdefc,
916 /// 6D CNN weights tensor (incl. groups), an alias to #dnnl_acbdef
917 dnnl_giodhw = dnnl_acbdef,
918 /// 6D CNN weights tensor (incl. groups), an alias to #dnnl_defcab
919 dnnl_dhwigo = dnnl_defcab,
920
921 /// 3D RNN data tensor in the format (seq_length, batch, input channels),
922 /// an alias to #dnnl_abc.
923 dnnl_tnc = dnnl_abc,
924 /// 3D RNN data tensor in the format (batch, seq_length, input channels),
925 /// an alias to #dnnl_bac.
926 dnnl_ntc = dnnl_bac,
927 /// 4D RNN states tensor in the format (num_layers, num_directions,
928 /// batch, state channels), an alias to #dnnl_abcd.
929 dnnl_ldnc = dnnl_abcd,
930 /// 5D RNN weights tensor in the format (num_layers, num_directions,
931 /// input_channels, num_gates, output_channels), an alias to #dnnl_abcde.
932 ///
933 /// - For LSTM cells, the gates order is input, forget, candidate
934 /// and output gate.
935 /// - For GRU cells, the gates order is update, reset and output gate.
936 dnnl_ldigo = dnnl_abcde,
937 /// 5D RNN weights tensor in the format (num_layers, num_directions,
938 /// num_gates, output_channels, input_channels), an alias to #dnnl_abdec.
939 ///
940 /// - For LSTM cells, the gates order is input, forget, candidate
941 /// and output gate.
942 /// - For GRU cells, the gates order is update, reset and output gate.
943 dnnl_ldgoi = dnnl_abdec,
944 /// 4D LSTM projection tensor in the format (num_layers, num_directions,
945 /// num_channels_in_hidden_state, num_channels_in_recurrent_projection),
946 /// an alias to #dnnl_abcd.
947 dnnl_ldio = dnnl_abcd,
948 /// 4D LSTM projection tensor in the format (num_layers, num_directions,
949 /// num_channels_in_recurrent_projection, num_channels_in_hidden_state),
950 /// an alias to #dnnl_abdc.
951 dnnl_ldoi = dnnl_abdc,
952 /// 4D RNN bias tensor in the format (num_layers, num_directions,
953 /// num_gates, output_channels), an alias to #dnnl_abcd.
954 ///
955 /// - For LSTM cells, the gates order is input, forget, candidate
956 /// and output gate.
957 /// - For GRU cells, the gates order is update, reset and output gate.
958 dnnl_ldgo = dnnl_abcd,
959 /// 5D LSTM projection tensor
960 dnnl_ldOi32o = dnnl_abDc32d,
961 dnnl_ldOI32o4i = dnnl_abDC32d4c,
962 dnnl_ldIo32i = dnnl_abCd32c,
963 /// 6D RNN weights tensor
964 dnnl_ldgOi32o = dnnl_abdEc32e,
965 dnnl_ldgOI32o2i = dnnl_abdEC32e2c,
966 dnnl_ldgOI32o4i = dnnl_abdEC32e4c,
967 dnnl_ldgOI64o2i = dnnl_abdEC64e2c,
968 dnnl_ldgOI64o4i = dnnl_abdEC64e4c,
969 dnnl_ldgIo32i = dnnl_abdCe32c,
970 dnnl_ldgIO32i2o = dnnl_abdCE32c2e,
971
972 // Opaque data types, are not to be used explicitly
973
974 // data
975 /// 5D CNN activations tensor blocked by channels with block size 32,
976 /// an alias to #dnnl_aBcde32b
977 dnnl_nCdhw32c = dnnl_aBcde32b,
978 /// 5D CNN activations tensor blocked by channels with block size 16,
979 /// an alias to #dnnl_aBcde16b
980 dnnl_nCdhw16c = dnnl_aBcde16b,
981 /// 5D CNN activations tensor blocked by channels with block size 4,
982 /// an alias to #dnnl_aBcde4b
983 dnnl_nCdhw4c = dnnl_aBcde4b,
984 /// 5D CNN activations tensor blocked by channels with block size 8,
985 /// an alias to #dnnl_aBcde8b
986 dnnl_nCdhw8c = dnnl_aBcde8b,
987 /// 4D CNN activations tensor blocked by channels with block size 32,
988 /// an alias to #dnnl_aBcd32b
989 dnnl_nChw32c = dnnl_aBcd32b,
990 /// 4D CNN activations tensor blocked by channels with block size 16,
991 /// an alias to #dnnl_aBcd16b
992 dnnl_nChw16c = dnnl_aBcd16b,
993 /// 4D CNN activations tensor blocked by channels with block size 4,
994 /// an alias to #dnnl_aBcd4b
995 dnnl_nChw4c = dnnl_aBcd4b,
996 /// 4D CNN activations tensor blocked by channels with block size 8,
997 /// an alias to #dnnl_aBcd8b
998 dnnl_nChw8c = dnnl_aBcd8b,
999 /// 3D CNN activations tensor blocked by channels with block size 32,
1000 /// an alias to #dnnl_aBc32b
1001 dnnl_nCw32c = dnnl_aBc32b,
1002 /// 3D CNN activations tensor blocked by channels with block size 16,
1003 /// an alias to #dnnl_aBc16b
1004 dnnl_nCw16c = dnnl_aBc16b,
1005 /// 3D CNN activations tensor blocked by channels with block size 4,
1006 /// an alias to #dnnl_aBc4b
1007 dnnl_nCw4c = dnnl_aBc4b,
1008 /// 3D CNN activations tensor blocked by channels with block size 8,
1009 /// an alias to #dnnl_aBc8b
1010 dnnl_nCw8c = dnnl_aBc8b,
1011 dnnl_NCw16n16c = dnnl_ABc16a16b,
1012 dnnl_NCdhw16n16c = dnnl_ABcde16a16b,
1013 dnnl_NChw16n16c = dnnl_ABcd16a16b,
1014 dnnl_NCw32n16c = dnnl_ABc32a16b,
1015 dnnl_NChw32n16c = dnnl_ABcd32a16b,
1016 dnnl_NChw16n32c = dnnl_ABcd16a32b,
1017 dnnl_NCdhw32n16c = dnnl_ABcde32a16b,
1018 dnnl_NCw32n32c = dnnl_ABc32a32b,
1019 dnnl_NChw32n32c = dnnl_ABcd32a32b,
1020 dnnl_NCdhw32n32c = dnnl_ABcde32a32b,
1021
1022 // weights, 2D
1023 dnnl_OI16i16o = dnnl_AB16b16a,
1024 dnnl_OI16i32o = dnnl_AB16b32a,
1025 dnnl_OI16i64o = dnnl_AB16b64a,
1026 dnnl_OI8i16o2i = dnnl_AB8b16a2b,
1027 dnnl_OI8i32o2i = dnnl_AB8b32a2b,
1028 dnnl_OI8i64o2i = dnnl_AB8b64a2b,
1029 dnnl_OI4i16o4i = dnnl_AB4b16a4b,
1030 dnnl_OI4i32o4i = dnnl_AB4b32a4b,
1031 dnnl_OI4i64o4i = dnnl_AB4b64a4b,
1032 dnnl_OI16i16o4i = dnnl_AB16b16a4b,
1033 // weights, 3D
1034 dnnl_IOw16o16i = dnnl_BAc16a16b,
1035 dnnl_IOw16i16o = dnnl_BAc16b16a,
1036 dnnl_OIw16i16o = dnnl_ABc16b16a,
1037 dnnl_OIw16i32o = dnnl_ABc16b32a,
1038 dnnl_OIw16i64o = dnnl_ABc16b64a,
1039 dnnl_OIw16o16i = dnnl_ABc16a16b,
1040 dnnl_Oiw16o = dnnl_Abc16a,
1041 dnnl_OIw4i16o4i = dnnl_ABc4b16a4b,
1042 dnnl_OIw4i32o4i = dnnl_ABc4b32a4b,
1043 dnnl_OIw4i64o4i = dnnl_ABc4b64a4b,
1044 dnnl_OIw2i8o4i = dnnl_ABc2b8a4b,
1045 dnnl_OIw16i16o4i = dnnl_ABc16b16a4b,
1046 dnnl_OIw16i16o2i = dnnl_ABc16b16a2b,
1047 dnnl_OIw16o16i2o = dnnl_ABc16a16b2a,
1048 dnnl_OIw4i4o = dnnl_ABc4b4a,
1049 dnnl_OIw4o4i = dnnl_ABc4a4b,
1050 dnnl_Oiw4o = dnnl_Abc4a,
1051 dnnl_OIw8i16o2i = dnnl_ABc8b16a2b,
1052 dnnl_OIw8i32o2i = dnnl_ABc8b32a2b,
1053 dnnl_OIw8i64o2i = dnnl_ABc8b64a2b,
1054 dnnl_OIw8i8o = dnnl_ABc8b8a,
1055 dnnl_OIw8o16i2o = dnnl_ABc8a16b2a,
1056 dnnl_IOw8o16i2o = dnnl_BAc8a16b2a,
1057 dnnl_OIw8o8i = dnnl_ABc8a8b,
1058 dnnl_OIw8o4i = dnnl_ABc8a4b,
1059 dnnl_Owi16o = dnnl_Acb16a,
1060 dnnl_OwI16o2i = dnnl_AcB16a2b,
1061 dnnl_OwI16o4i = dnnl_AcB16a4b,
1062 dnnl_Iwo16i = dnnl_Bca16b,
1063 dnnl_IwO16i2o = dnnl_BcA16b2a,
1064 dnnl_IwO16i4o = dnnl_BcA16b4a,
1065 dnnl_Owi4o = dnnl_Acb4a,
1066 dnnl_Owi8o = dnnl_Acb8a,
1067
1068 // weights, 4D
1069 dnnl_IOhw16i16o = dnnl_BAcd16b16a,
1070 dnnl_IOhw16o16i = dnnl_BAcd16a16b,
1071 dnnl_Ohwi16o = dnnl_Acdb16a,
1072 dnnl_OhwI16o2i = dnnl_AcdB16a2b,
1073 dnnl_OhwI16o4i = dnnl_AcdB16a4b,
1074 dnnl_Ihwo16i = dnnl_Bcda16b,
1075 dnnl_IhwO16i2o = dnnl_BcdA16b2a,
1076 dnnl_IhwO16i4o = dnnl_BcdA16b4a,
1077 dnnl_Ohwi32o = dnnl_Acdb32a,
1078 dnnl_Ohwi4o = dnnl_Acdb4a,
1079 dnnl_Ohwi8o = dnnl_Acdb8a,
1080 dnnl_OIhw16i16o = dnnl_ABcd16b16a,
1081 dnnl_OIhw16i32o = dnnl_ABcd16b32a,
1082 dnnl_OIhw16i64o = dnnl_ABcd16b64a,
1083 dnnl_OIhw16o16i = dnnl_ABcd16a16b,
1084 dnnl_Oihw16o = dnnl_Abcd16a,
1085 dnnl_OIhw4i16o4i = dnnl_ABcd4b16a4b,
1086 dnnl_OIhw4i32o4i = dnnl_ABcd4b32a4b,
1087 dnnl_OIhw4i64o4i = dnnl_ABcd4b64a4b,
1088 dnnl_OIhw16i16o4i = dnnl_ABcd16b16a4b,
1089 dnnl_OIhw16i16o2i = dnnl_ABcd16b16a2b,
1090 dnnl_OIhw16o16i2o = dnnl_ABcd16a16b2a,
1091 dnnl_OIhw4i4o = dnnl_ABcd4b4a,
1092 dnnl_OIhw4o4i = dnnl_ABcd4a4b,
1093 dnnl_Oihw4o = dnnl_Abcd4a,
1094 dnnl_OIhw8i16o2i = dnnl_ABcd8b16a2b,
1095 dnnl_OIhw8i32o2i = dnnl_ABcd8b32a2b,
1096 dnnl_OIhw8i64o2i = dnnl_ABcd8b64a2b,
1097 dnnl_OIhw8i8o = dnnl_ABcd8b8a,
1098 dnnl_OIhw8o16i2o = dnnl_ABcd8a16b2a,
1099 dnnl_OIhw2i8o4i = dnnl_ABcd2b8a4b,
1100 dnnl_IOhw8o16i2o = dnnl_BAcd8a16b2a,
1101 dnnl_OIhw8o8i = dnnl_ABcd8a8b,
1102 dnnl_OIhw8o4i = dnnl_ABcd8a4b,
1103 dnnl_Owhi16o = dnnl_Adcb16a,
1104
1105 // weights, 5D
1106 dnnl_Odhwi16o = dnnl_Acdeb16a,
1107 dnnl_OdhwI16o2i = dnnl_AcdeB16a2b,
1108 dnnl_OdhwI16o4i = dnnl_AcdeB16a4b,
1109 dnnl_Idhwo16i = dnnl_Bcdea16b,
1110 dnnl_IdhwO16i2o = dnnl_BcdeA16b2a,
1111 dnnl_IdhwO16i4o = dnnl_BcdeA16b4a,
1112 dnnl_Odhwi4o = dnnl_Acdeb4a,
1113 dnnl_Odhwi8o = dnnl_Acdeb8a,
1114 dnnl_Odwhi16o = dnnl_Acedb16a,
1115 dnnl_OIdhw16i16o = dnnl_ABcde16b16a,
1116 dnnl_OIdhw16i32o = dnnl_ABcde16b32a,
1117 dnnl_OIdhw16i64o = dnnl_ABcde16b64a,
1118 dnnl_OIdhw16o16i = dnnl_ABcde16a16b,
1119 dnnl_Oidhw16o = dnnl_Abcde16a,
1120 dnnl_OIdhw4i4o = dnnl_ABcde4b4a,
1121 dnnl_OIdhw4o4i = dnnl_ABcde4a4b,
1122 dnnl_Oidhw4o = dnnl_Abcde4a,
1123 dnnl_OIdhw8i16o2i = dnnl_ABcde8b16a2b,
1124 dnnl_OIdhw8i32o2i = dnnl_ABcde8b32a2b,
1125 dnnl_OIdhw8i64o2i = dnnl_ABcde8b64a2b,
1126 dnnl_OIdhw8i8o = dnnl_ABcde8b8a,
1127 dnnl_OIdhw8o16i2o = dnnl_ABcde8a16b2a,
1128 dnnl_IOdhw8o16i2o = dnnl_BAcde8a16b2a,
1129 dnnl_OIdhw4i16o4i = dnnl_ABcde4b16a4b,
1130 dnnl_OIdhw4i32o4i = dnnl_ABcde4b32a4b,
1131 dnnl_OIdhw4i64o4i = dnnl_ABcde4b64a4b,
1132 dnnl_OIdhw16i16o4i = dnnl_ABcde16b16a4b,
1133 dnnl_OIdhw16i16o2i = dnnl_ABcde16b16a2b,
1134 dnnl_OIdhw2i8o4i = dnnl_ABcde2b8a4b,
1135 dnnl_OIdhw8o8i = dnnl_ABcde8a8b,
1136 dnnl_OIdhw8o4i = dnnl_ABcde8a4b,
1137 dnnl_IOdhw16i16o = dnnl_BAcde16b16a,
1138 dnnl_OIdhw4o8i8o4i = dnnl_ABcde4a8b8a4b,
1139 dnnl_IOdhw16o16i = dnnl_BAcde16a16b,
1140 dnnl_OIdhw16o16i2o = dnnl_ABcde16a16b2a,
1141
1142 // weights w/ groups, 3D
1143 dnnl_Goiw16g = dnnl_Abcd16a,
1144 dnnl_Goiw8g = dnnl_Abcd8a,
1145 dnnl_Goiw4g = dnnl_Abcd4a,
1146 dnnl_gIOw16o16i = dnnl_aCBd16b16c,
1147 dnnl_gIOw16i16o = dnnl_aCBd16c16b,
1148 dnnl_gOIw16i16o = dnnl_aBCd16c16b,
1149 dnnl_gOIw16o16i = dnnl_aBCd16b16c,
1150 dnnl_gOiw16o = dnnl_aBcd16b,
1151 dnnl_gOIw4i16o4i = dnnl_aBCd4c16b4c,
1152 dnnl_gOIw2i8o4i = dnnl_aBCd2c8b4c,
1153 dnnl_gOIw16i16o4i = dnnl_aBCd16c16b4c,
1154 dnnl_gOIw16i16o2i = dnnl_aBCd16c16b2c,
1155 dnnl_gOIw16o16i2o = dnnl_aBCd16b16c2b,
1156 dnnl_gOIw4i4o = dnnl_aBCd4c4b,
1157 dnnl_gOIw4o4i = dnnl_aBCd4b4c,
1158 dnnl_gOiw4o = dnnl_aBcd4b,
1159 dnnl_gOIw8i16o2i = dnnl_aBCd8c16b2c,
1160 dnnl_gOIw8i8o = dnnl_aBCd8c8b,
1161 dnnl_gOIw8o16i2o = dnnl_aBCd8b16c2b,
1162 dnnl_gIOw8o16i2o = dnnl_aCBd8b16c2b,
1163 dnnl_gOIw8o8i = dnnl_aBCd8b8c,
1164 dnnl_gOIw8o4i = dnnl_aBCd8b4c,
1165 dnnl_gOwi16o = dnnl_aBdc16b,
1166 dnnl_gOwI16o2i = dnnl_aBdC16b2c,
1167 dnnl_gOwI16o4i = dnnl_aBdC16b4c,
1168 dnnl_gIwo16i = dnnl_aCdb16c,
1169 dnnl_gIwO16i2o = dnnl_aCdB16c2b,
1170 dnnl_gIwO16i4o = dnnl_aCdB16c4b,
1171 dnnl_gOwi4o = dnnl_aBdc4b,
1172 dnnl_gOwi8o = dnnl_aBdc8b,
1173 dnnl_Goiw32g = dnnl_Abcd32a,
1174 dnnl_gOIw2i4o2i = dnnl_aBCd2c4b2c,
1175 dnnl_gOIw2o4i2o = dnnl_aBCd2b4c2b,
1176 dnnl_gOIw4i8o2i = dnnl_aBCd4c8b2c,
1177 dnnl_gOIw4o8i2o = dnnl_aBCd4b8c2b,
1178 dnnl_goIw4i = dnnl_abCd4c,
1179 dnnl_goIw32i = dnnl_abCd32c,
1180
1181 // weights w/ groups, 4D
1182 dnnl_gIOhw16i16o = dnnl_aCBde16c16b,
1183 dnnl_gIOhw16o16i = dnnl_aCBde16b16c,
1184 dnnl_gOhwi16o = dnnl_aBdec16b,
1185 dnnl_gOhwI16o2i = dnnl_aBdeC16b2c,
1186 dnnl_gOhwI16o4i = dnnl_aBdeC16b4c,
1187 dnnl_gIhwo16i = dnnl_aCdeb16c,
1188 dnnl_gIhwO16i2o = dnnl_aCdeB16c2b,
1189 dnnl_gIhwO16i4o = dnnl_aCdeB16c4b,
1190 dnnl_gOhwi32o = dnnl_aBdec32b,
1191 dnnl_gOhwi4o = dnnl_aBdec4b,
1192 dnnl_gOhwi8o = dnnl_aBdec8b,
1193 dnnl_Goihw16g = dnnl_Abcde16a,
1194 dnnl_gOIhw16i16o = dnnl_aBCde16c16b,
1195 dnnl_gOIhw16o16i = dnnl_aBCde16b16c,
1196 dnnl_gOihw16o = dnnl_aBcde16b,
1197 dnnl_gOIhw2i8o4i = dnnl_aBCde2c8b4c,
1198 dnnl_gOIhw4i16o4i = dnnl_aBCde4c16b4c,
1199 dnnl_gOIhw16i16o4i = dnnl_aBCde16c16b4c,
1200 dnnl_gOIhw16i16o2i = dnnl_aBCde16c16b2c,
1201 dnnl_gOIhw16o16i2o = dnnl_aBCde16b16c2b,
1202 dnnl_gOIhw4i4o = dnnl_aBCde4c4b,
1203 dnnl_gOIhw4o4i = dnnl_aBCde4b4c,
1204 dnnl_gOihw4o = dnnl_aBcde4b,
1205 dnnl_Goihw8g = dnnl_Abcde8a,
1206 dnnl_Goihw4g = dnnl_Abcde4a,
1207 dnnl_gOIhw8i16o2i = dnnl_aBCde8c16b2c,
1208 dnnl_gOIhw8i8o = dnnl_aBCde8c8b,
1209 dnnl_gOIhw8o16i2o = dnnl_aBCde8b16c2b,
1210 dnnl_gIOhw8o16i2o = dnnl_aCBde8b16c2b,
1211 dnnl_gOIhw8o8i = dnnl_aBCde8b8c,
1212 dnnl_gOIhw8o4i = dnnl_aBCde8b4c,
1213 dnnl_Goihw32g = dnnl_Abcde32a,
1214 dnnl_gOwhi16o = dnnl_aBedc16b,
1215 dnnl_goIhw4i = dnnl_abCde4c,
1216 dnnl_goIhw32i = dnnl_abCde32c,
1217
1218 dnnl_OIw4o8i8o4i = dnnl_ABc4a8b8a4b,
1219 dnnl_OIhw4o8i8o4i = dnnl_ABcd4a8b8a4b,
1220 dnnl_IOw4i8o8i4o = dnnl_BAc4b8a8b4a,
1221 dnnl_IOhw4i8o8i4o = dnnl_BAcd4b8a8b4a,
1222 dnnl_IOdhw4i8o8i4o = dnnl_BAcde4b8a8b4a,
1223
1224 dnnl_OIhw2o8i8o2i = dnnl_ABcd2a8b8a2b,
1225 dnnl_gOIw4o8i8o4i = dnnl_aBCd4b8c8b4c,
1226 dnnl_gOIhw4o8i8o4i = dnnl_aBCde4b8c8b4c,
1227 dnnl_gOIdhw4o8i8o4i = dnnl_aBCdef4b8c8b4c,
1228 dnnl_gIOw4i8o8i4o = dnnl_aCBd4c8b8c4b,
1229 dnnl_gIOhw4i8o8i4o = dnnl_aCBde4c8b8c4b,
1230 dnnl_gIOdhw4i8o8i4o = dnnl_aCBdef4c8b8c4b,
1231 dnnl_gOIhw2o8i8o2i = dnnl_aBCde2b8c8b2c,
1232 dnnl_gOIhw2i4o2i = dnnl_aBCde2c4b2c,
1233 dnnl_gOIhw2o4i2o = dnnl_aBCde2b4c2b,
1234 dnnl_gOIhw4i8o2i = dnnl_aBCde4c8b2c,
1235 dnnl_gOIhw4o8i2o = dnnl_aBCde4b8c2b,
1236
1237 // weights w/ groups, 6D
1238 dnnl_gIOdhw16i16o = dnnl_aCBdef16c16b,
1239 dnnl_gIOdhw16o16i = dnnl_aCBdef16b16c,
1240 dnnl_gOdhwi16o = dnnl_aBdefc16b,
1241 dnnl_gOdhwI16o2i = dnnl_aBdefC16b2c,
1242 dnnl_gOdhwI16o4i = dnnl_aBdefC16b4c,
1243 dnnl_gIdhwo16i = dnnl_aCdefb16c,
1244 dnnl_gIdhwO16i2o = dnnl_aCdefB16c2b,
1245 dnnl_gIdhwO16i4o = dnnl_aCdefB16c4b,
1246 dnnl_gOdhwi4o = dnnl_aBdefc4b,
1247 dnnl_gOdhwi8o = dnnl_aBdefc8b,
1248 dnnl_gOdwhi16o = dnnl_aBdfec16b,
1249 dnnl_gOIdhw16i16o = dnnl_aBCdef16c16b,
1250 dnnl_gOIdhw4i16o4i = dnnl_aBCdef4c16b4c,
1251 dnnl_gOIdhw16i16o4i = dnnl_aBCdef16c16b4c,
1252 dnnl_gOIdhw2i8o4i = dnnl_aBCdef2c8b4c,
1253 dnnl_gOIdhw16i16o2i = dnnl_aBCdef16c16b2c,
1254 dnnl_gOIdhw16o16i = dnnl_aBCdef16b16c,
1255 dnnl_gOIdhw16o16i2o = dnnl_aBCdef16b16c2b,
1256 dnnl_gOidhw16o = dnnl_aBcdef16b,
1257 dnnl_gOIdhw4i4o = dnnl_aBCdef4c4b,
1258 dnnl_gOIdhw4o4i = dnnl_aBCdef4b4c,
1259 dnnl_gOidhw4o = dnnl_aBcdef4b,
1260 dnnl_gOIdhw8i16o2i = dnnl_aBCdef8c16b2c,
1261 dnnl_gOIdhw8i8o = dnnl_aBCdef8c8b,
1262 dnnl_gOIdhw8o16i2o = dnnl_aBCdef8b16c2b,
1263 dnnl_gIOdhw8o16i2o = dnnl_aCBdef8b16c2b,
1264 dnnl_gOIdhw8o8i = dnnl_aBCdef8b8c,
1265 dnnl_gOIdhw8o4i = dnnl_aBCdef8b4c,
1266 dnnl_Goidhw16g = dnnl_Abcdef16a,
1267 dnnl_Goidhw32g = dnnl_Abcdef32a,
1268 dnnl_gOIdhw2i4o2i = dnnl_aBCdef2c4b2c,
1269 dnnl_gOIdhw4i8o2i = dnnl_aBCdef4c8b2c,
1270 dnnl_gOIdhw2o4i2o = dnnl_aBCdef2b4c2b,
1271 dnnl_gOIdhw4o8i2o = dnnl_aBCdef4b8c2b,
1272 dnnl_goIdhw4i = dnnl_abCdef4c,
1273 dnnl_goIdhw32i = dnnl_abCdef32c,
1274
1275 // weights, 3D
1276 dnnl_Owi32o = dnnl_Acb32a,
1277 dnnl_OwI32o2i = dnnl_AcB32a2b,
1278 dnnl_OwI32o4i = dnnl_AcB32a4b,
1279 dnnl_Owi48o = dnnl_Acb48a,
1280 dnnl_OwI48o2i = dnnl_AcB48a2b,
1281 dnnl_OwI48o4i = dnnl_AcB48a4b,
1282 dnnl_Owi64o = dnnl_Acb64a,
1283 dnnl_OwI64o2i = dnnl_AcB64a2b,
1284 dnnl_OwI64o4i = dnnl_AcB64a4b,
1285 dnnl_Iwo32i = dnnl_Bca32b,
1286 dnnl_IwO32i2o = dnnl_BcA32b2a,
1287 dnnl_IwO32i4o = dnnl_BcA32b4a,
1288 dnnl_Iwo48i = dnnl_Bca48b,
1289 dnnl_IwO48i2o = dnnl_BcA48b2a,
1290 dnnl_IwO48i4o = dnnl_BcA48b4a,
1291 dnnl_Iwo64i = dnnl_Bca64b,
1292 dnnl_IwO64i2o = dnnl_BcA64b2a,
1293 dnnl_IwO64i4o = dnnl_BcA64b4a,
1294 dnnl_wIo2i = dnnl_cBa2b,
1295 dnnl_wIo4i = dnnl_cBa4b,
1296 dnnl_gOwi32o = dnnl_aBdc32b,
1297 dnnl_gOwI32o2i = dnnl_aBdC32b2c,
1298 dnnl_gOwI32o4i = dnnl_aBdC32b4c,
1299 dnnl_gOwi48o = dnnl_aBdc48b,
1300 dnnl_gOwI48o2i = dnnl_aBdC48b2c,
1301 dnnl_gOwI48o4i = dnnl_aBdC48b4c,
1302 dnnl_gOwi64o = dnnl_aBdc64b,
1303 dnnl_gOwI64o2i = dnnl_aBdC64b2c,
1304 dnnl_gOwI64o4i = dnnl_aBdC64b4c,
1305 dnnl_gIwo32i = dnnl_aCdb32c,
1306 dnnl_gIwO32i2o = dnnl_aCdB32c2b,
1307 dnnl_gIwO32i4o = dnnl_aCdB32c4b,
1308 dnnl_gIwo48i = dnnl_aCdb48c,
1309 dnnl_gIwO48i2o = dnnl_aCdB48c2b,
1310 dnnl_gIwO48i4o = dnnl_aCdB48c4b,
1311 dnnl_gIwo64i = dnnl_aCdb64c,
1312 dnnl_gIwO64i2o = dnnl_aCdB64c2b,
1313 dnnl_gIwO64i4o = dnnl_aCdB64c4b,
1314 dnnl_gwio = dnnl_adcb,
1315 dnnl_gwIo2i = dnnl_adCb2c,
1316 dnnl_gwIo4i = dnnl_adCb4c,
1317 // weights, 4D
1318 dnnl_OhwI32o = dnnl_Acdb32a,
1319 dnnl_OhwI32o2i = dnnl_AcdB32a2b,
1320 dnnl_OhwI32o4i = dnnl_AcdB32a4b,
1321 dnnl_Ohwi48o = dnnl_Acdb48a,
1322 dnnl_OhwI48o2i = dnnl_AcdB48a2b,
1323 dnnl_OhwI48o4i = dnnl_AcdB48a4b,
1324 dnnl_Ohwi64o = dnnl_Acdb64a,
1325 dnnl_OhwI64o2i = dnnl_AcdB64a2b,
1326 dnnl_OhwI64o4i = dnnl_AcdB64a4b,
1327 dnnl_Ihwo32i = dnnl_Bcda32b,
1328 dnnl_IhwO32i2o = dnnl_BcdA32b2a,
1329 dnnl_IhwO32i4o = dnnl_BcdA32b4a,
1330 dnnl_Ihwo48i = dnnl_Bcda48b,
1331 dnnl_IhwO48i2o = dnnl_BcdA48b2a,
1332 dnnl_IhwO48i4o = dnnl_BcdA48b4a,
1333 dnnl_Ihwo64i = dnnl_Bcda64b,
1334 dnnl_IhwO64i2o = dnnl_BcdA64b2a,
1335 dnnl_IhwO64i4o = dnnl_BcdA64b4a,
1336 dnnl_hwIo2i = dnnl_cdBa2b,
1337 dnnl_hwIo4i = dnnl_cdBa4b,
1338 dnnl_gOhwI32o = dnnl_aBdec32b,
1339 dnnl_gOhwI32o2i = dnnl_aBdeC32b2c,
1340 dnnl_gOhwI32o4i = dnnl_aBdeC32b4c,
1341 dnnl_gOhwi48o = dnnl_aBdec48b,
1342 dnnl_gOhwI48o2i = dnnl_aBdeC48b2c,
1343 dnnl_gOhwI48o4i = dnnl_aBdeC48b4c,
1344 dnnl_gOhwi64o = dnnl_aBdec64b,
1345 dnnl_gOhwI64o2i = dnnl_aBdeC64b2c,
1346 dnnl_gOhwI64o4i = dnnl_aBdeC64b4c,
1347 dnnl_gIhwo32i = dnnl_aCdeb32c,
1348 dnnl_gIhwO32i2o = dnnl_aCdeB32c2b,
1349 dnnl_gIhwO32i4o = dnnl_aCdeB32c4b,
1350 dnnl_gIhwo48i = dnnl_aCdeb48c,
1351 dnnl_gIhwO48i2o = dnnl_aCdeB48c2b,
1352 dnnl_gIhwO48i4o = dnnl_aCdeB48c4b,
1353 dnnl_gIhwo64i = dnnl_aCdeb64c,
1354 dnnl_gIhwO64i2o = dnnl_aCdeB64c2b,
1355 dnnl_gIhwO64i4o = dnnl_aCdeB64c4b,
1356 dnnl_ghwio = dnnl_adecb,
1357 dnnl_ghwIo2i = dnnl_adeCb2c,
1358 dnnl_ghwIo4i = dnnl_adeCb4c,
1359 // weights, 5D
1360 dnnl_Odhwi32o = dnnl_Acdeb32a,
1361 dnnl_OdhwI32o2i = dnnl_AcdeB32a2b,
1362 dnnl_OdhwI32o4i = dnnl_AcdeB32a4b,
1363 dnnl_Odhwi48o = dnnl_Acdeb48a,
1364 dnnl_OdhwI48o2i = dnnl_AcdeB48a2b,
1365 dnnl_OdhwI48o4i = dnnl_AcdeB48a4b,
1366 dnnl_Odhwi64o = dnnl_Acdeb64a,
1367 dnnl_OdhwI64o2i = dnnl_AcdeB64a2b,
1368 dnnl_OdhwI64o4i = dnnl_AcdeB64a4b,
1369 dnnl_Idhwo32i = dnnl_Bcdea32b,
1370 dnnl_IdhwO32i2o = dnnl_BcdeA32b2a,
1371 dnnl_IdhwO32i4o = dnnl_BcdeA32b4a,
1372 dnnl_Idhwo48i = dnnl_Bcdea48b,
1373 dnnl_IdhwO48i2o = dnnl_BcdeA48b2a,
1374 dnnl_IdhwO48i4o = dnnl_BcdeA48b4a,
1375 dnnl_Idhwo64i = dnnl_Bcdea64b,
1376 dnnl_IdhwO64i2o = dnnl_BcdeA64b2a,
1377 dnnl_IdhwO64i4o = dnnl_BcdeA64b4a,
1378 dnnl_dhwIo2i = dnnl_cdeBa2b,
1379 dnnl_dhwIo4i = dnnl_cdeBa4b,
1380 dnnl_gOdhwi32o = dnnl_aBdefc32b,
1381 dnnl_gOdhwI32o2i = dnnl_aBdefC32b2c,
1382 dnnl_gOdhwI32o4i = dnnl_aBdefC32b4c,
1383 dnnl_gOdhwi48o = dnnl_aBdefc48b,
1384 dnnl_gOdhwI48o2i = dnnl_aBdefC48b2c,
1385 dnnl_gOdhwI48o4i = dnnl_aBdefC48b4c,
1386 dnnl_gOdhwi64o = dnnl_aBdefc64b,
1387 dnnl_gOdhwI64o2i = dnnl_aBdefC64b2c,
1388 dnnl_gOdhwI64o4i = dnnl_aBdefC64b4c,
1389 dnnl_gIdhwo32i = dnnl_aCdefb32c,
1390 dnnl_gIdhwO32i2o = dnnl_aCdefB32c2b,
1391 dnnl_gIdhwO32i4o = dnnl_aCdefB32c4b,
1392 dnnl_gIdhwo48i = dnnl_aCdefb48c,
1393 dnnl_gIdhwO48i2o = dnnl_aCdefB48c2b,
1394 dnnl_gIdhwO48i4o = dnnl_aCdefB48c4b,
1395 dnnl_gIdhwo64i = dnnl_aCdefb64c,
1396 dnnl_gIdhwO64i2o = dnnl_aCdefB64c2b,
1397 dnnl_gIdhwO64i4o = dnnl_aCdefB64c4b,
1398 dnnl_gdhwio = dnnl_adefcb,
1399 dnnl_gdhwIo2i = dnnl_adefCb2c,
1400 dnnl_gdhwIo4i = dnnl_adefCb4c,
1401 dnnl_OI16i32o4i = dnnl_AB16b32a4b,
1402 dnnl_OI16i48o4i = dnnl_AB16b48a4b,
1403 dnnl_OI16i64o4i = dnnl_AB16b64a4b,
1404 dnnl_OI16i16o2i = dnnl_AB16b16a2b,
1405 dnnl_OI16i32o2i = dnnl_AB16b32a2b,
1406 dnnl_OI16i48o2i = dnnl_AB16b48a2b,
1407 dnnl_OI16i64o2i = dnnl_AB16b64a2b,
1408 dnnl_OIw16i32o4i = dnnl_ABc16b32a4b,
1409 dnnl_OIw16i48o4i = dnnl_ABc16b48a4b,
1410 dnnl_OIw16i64o4i = dnnl_ABc16b64a4b,
1411 dnnl_OIw16i32o2i = dnnl_ABc16b32a2b,
1412 dnnl_OIw16i48o2i = dnnl_ABc16b48a2b,
1413 dnnl_OIw16i64o2i = dnnl_ABc16b64a2b,
1414 dnnl_OIhw16i32o4i = dnnl_ABcd16b32a4b,
1415 dnnl_OIhw16i48o4i = dnnl_ABcd16b48a4b,
1416 dnnl_OIhw16i64o4i = dnnl_ABcd16b64a4b,
1417 dnnl_OIhw16i32o2i = dnnl_ABcd16b32a2b,
1418 dnnl_OIhw16i48o2i = dnnl_ABcd16b48a2b,
1419 dnnl_OIhw16i64o2i = dnnl_ABcd16b64a2b,
1420 dnnl_OIdhw16i32o4i = dnnl_ABcde16b32a4b,
1421 dnnl_OIdhw16i48o4i = dnnl_ABcde16b48a4b,
1422 dnnl_OIdhw16i64o4i = dnnl_ABcde16b64a4b,
1423 dnnl_OIdhw16i32o2i = dnnl_ABcde16b32a2b,
1424 dnnl_OIdhw16i48o2i = dnnl_ABcde16b48a2b,
1425 dnnl_OIdhw16i64o2i = dnnl_ABcde16b64a2b,
1426 dnnl_OwI16i16o2i = dnnl_AcB16b16a2b,
1427 dnnl_OwI16i16o4i = dnnl_AcB16b16a4b,
1428 dnnl_OhwI16i16o2i = dnnl_AcdB16b16a2b,
1429 dnnl_OhwI16i16o4i = dnnl_AcdB16b16a4b,
1430 dnnl_OdhwI16i16o2i = dnnl_AcdeB16b16a2b,
1431 dnnl_OdhwI16i16o4i = dnnl_AcdeB16b16a4b,
1432 dnnl_IwO16o16i2o = dnnl_BcA16a16b2a,
1433 dnnl_IwO16o16i4o = dnnl_BcA16a16b4a,
1434 dnnl_IhwO16o16i2o = dnnl_BcdA16a16b2a,
1435 dnnl_IhwO16o16i4o = dnnl_BcdA16a16b4a,
1436 dnnl_IdhwO16o16i2o = dnnl_BcdeA16a16b2a,
1437 dnnl_IdhwO16o16i4o = dnnl_BcdeA16a16b4a,
1438 dnnl_gOwI16i16o2i = dnnl_aBdC16c16b2c,
1439 dnnl_gOwI16i16o4i = dnnl_aBdC16c16b4c,
1440 dnnl_gOhwI16i16o2i = dnnl_aBdeC16c16b2c,
1441 dnnl_gOhwI16i16o4i = dnnl_aBdeC16c16b4c,
1442 dnnl_gOdhwI16i16o2i = dnnl_aBdefC16c16b2c,
1443 dnnl_gOdhwI16i16o4i = dnnl_aBdefC16c16b4c,
1444 dnnl_gIwO16o16i2o = dnnl_aCdB16b16c2b,
1445 dnnl_gIwO16o16i4o = dnnl_aCdB16b16c4b,
1446 dnnl_gIhwO16o16i2o = dnnl_aCdeB16b16c2b,
1447 dnnl_gIhwO16o16i4o = dnnl_aCdeB16b16c4b,
1448 dnnl_gIdhwO16o16i2o = dnnl_aCdefB16b16c2b,
1449 dnnl_gIdhwO16o16i4o = dnnl_aCdefB16b16c4b,
1450 dnnl_OwI16i32o2i = dnnl_AcB16b32a2b,
1451 dnnl_OwI16i32o4i = dnnl_AcB16b32a4b,
1452 dnnl_OwI16i48o2i = dnnl_AcB16b48a2b,
1453 dnnl_OwI16i48o4i = dnnl_AcB16b48a4b,
1454 dnnl_OwI16i64o2i = dnnl_AcB16b64a2b,
1455 dnnl_OwI16i64o4i = dnnl_AcB16b64a4b,
1456 dnnl_IwO16o32i2o = dnnl_BcA16a32b2a,
1457 dnnl_IwO16o32i4o = dnnl_BcA16a32b4a,
1458 dnnl_IwO16o48i2o = dnnl_BcA16a48b2a,
1459 dnnl_IwO16o48i4o = dnnl_BcA16a48b4a,
1460 dnnl_IwO16o64i2o = dnnl_BcA16a64b2a,
1461 dnnl_IwO16o64i4o = dnnl_BcA16a64b4a,
1462 dnnl_gOwI16i32o2i = dnnl_aBdC16c32b2c,
1463 dnnl_gOwI16i32o4i = dnnl_aBdC16c32b4c,
1464 dnnl_gOwI16i48o2i = dnnl_aBdC16c48b2c,
1465 dnnl_gOwI16i48o4i = dnnl_aBdC16c48b4c,
1466 dnnl_gOwI16i64o2i = dnnl_aBdC16c64b2c,
1467 dnnl_gOwI16i64o4i = dnnl_aBdC16c64b4c,
1468 dnnl_gIwO16o32i2o = dnnl_aCdB16b32c2b,
1469 dnnl_gIwO16o32i4o = dnnl_aCdB16b32c4b,
1470 dnnl_gIwO16o48i2o = dnnl_aCdB16b48c2b,
1471 dnnl_gIwO16o48i4o = dnnl_aCdB16b48c4b,
1472 dnnl_gIwO16o64i2o = dnnl_aCdB16b64c2b,
1473 dnnl_gIwO16o64i4o = dnnl_aCdB16b64c4b,
1474 dnnl_OhwI16i32o2i = dnnl_AcdB16b32a2b,
1475 dnnl_OhwI16i32o4i = dnnl_AcdB16b32a4b,
1476 dnnl_OhwI16i48o2i = dnnl_AcdB16b48a2b,
1477 dnnl_OhwI16i48o4i = dnnl_AcdB16b48a4b,
1478 dnnl_OhwI16i64o2i = dnnl_AcdB16b64a2b,
1479 dnnl_OhwI16i64o4i = dnnl_AcdB16b64a4b,
1480 dnnl_IhwO16o32i2o = dnnl_BcdA16a32b2a,
1481 dnnl_IhwO16o32i4o = dnnl_BcdA16a32b4a,
1482 dnnl_IhwO16o48i2o = dnnl_BcdA16a48b2a,
1483 dnnl_IhwO16o48i4o = dnnl_BcdA16a48b4a,
1484 dnnl_IhwO16o64i2o = dnnl_BcdA16a64b2a,
1485 dnnl_IhwO16o64i4o = dnnl_BcdA16a64b4a,
1486 dnnl_gOhwI16i32o2i = dnnl_aBdeC16c32b2c,
1487 dnnl_gOhwI16i32o4i = dnnl_aBdeC16c32b4c,
1488 dnnl_gOhwI16i48o2i = dnnl_aBdeC16c48b2c,
1489 dnnl_gOhwI16i48o4i = dnnl_aBdeC16c48b4c,
1490 dnnl_gOhwI16i64o2i = dnnl_aBdeC16c64b2c,
1491 dnnl_gOhwI16i64o4i = dnnl_aBdeC16c64b4c,
1492 dnnl_gIhwO16o32i2o = dnnl_aCdeB16b32c2b,
1493 dnnl_gIhwO16o32i4o = dnnl_aCdeB16b32c4b,
1494 dnnl_gIhwO16o48i2o = dnnl_aCdeB16b48c2b,
1495 dnnl_gIhwO16o48i4o = dnnl_aCdeB16b48c4b,
1496 dnnl_gIhwO16o64i2o = dnnl_aCdeB16b64c2b,
1497 dnnl_gIhwO16o64i4o = dnnl_aCdeB16b64c4b,
1498 dnnl_OdhwI16i32o2i = dnnl_AcdeB16b32a2b,
1499 dnnl_OdhwI16i32o4i = dnnl_AcdeB16b32a4b,
1500 dnnl_OdhwI16i48o2i = dnnl_AcdeB16b48a2b,
1501 dnnl_OdhwI16i48o4i = dnnl_AcdeB16b48a4b,
1502 dnnl_OdhwI16i64o2i = dnnl_AcdeB16b64a2b,
1503 dnnl_OdhwI16i64o4i = dnnl_AcdeB16b64a4b,
1504 dnnl_IdhwO16o32i2o = dnnl_BcdeA16a32b2a,
1505 dnnl_IdhwO16o32i4o = dnnl_BcdeA16a32b4a,
1506 dnnl_IdhwO16o48i2o = dnnl_BcdeA16a48b2a,
1507 dnnl_IdhwO16o48i4o = dnnl_BcdeA16a48b4a,
1508 dnnl_IdhwO16o64i2o = dnnl_BcdeA16a64b2a,
1509 dnnl_IdhwO16o64i4o = dnnl_BcdeA16a64b4a,
1510 dnnl_gOdhwI16i32o2i = dnnl_aBdefC16c32b2c,
1511 dnnl_gOdhwI16i32o4i = dnnl_aBdefC16c32b4c,
1512 dnnl_gOdhwI16i48o2i = dnnl_aBdefC16c48b2c,
1513 dnnl_gOdhwI16i48o4i = dnnl_aBdefC16c48b4c,
1514 dnnl_gOdhwI16i64o2i = dnnl_aBdefC16c64b2c,
1515 dnnl_gOdhwI16i64o4i = dnnl_aBdefC16c64b4c,
1516 dnnl_gIdhwO16o32i2o = dnnl_aCdefB16b32c2b,
1517 dnnl_gIdhwO16o32i4o = dnnl_aCdefB16b32c4b,
1518 dnnl_gIdhwO16o48i2o = dnnl_aCdefB16b48c2b,
1519 dnnl_gIdhwO16o48i4o = dnnl_aCdefB16b48c4b,
1520 dnnl_gIdhwO16o64i2o = dnnl_aCdefB16b64c2b,
1521 dnnl_gIdhwO16o64i4o = dnnl_aCdefB16b64c4b,
1522 dnnl_hwioG16g = dnnl_decbA16a,
1523 dnnl_hwioG8g = dnnl_decbA8a,
1524 dnnl_NCdhw40n16c = dnnl_ABcde40a16b,
1525 dnnl_NCw40n16c = dnnl_ABc40a16b,
1526 dnnl_NChw40n16c = dnnl_ABcd40a16b,
1527 dnnl_NCw40n32c = dnnl_ABc40a32b,
1528 dnnl_NChw40n32c = dnnl_ABcd40a32b,
1529 dnnl_NCdhw40n32c = dnnl_ABcde40a32b,
1530 dnnl_OIdhw4o8i8o2i = dnnl_ABcde4a8b8a2b,
1531 dnnl_OIhw4o8i8o2i = dnnl_ABcd4a8b8a2b,
1532 dnnl_OIw4o8i8o2i = dnnl_ABc4a8b8a2b,
1533 dnnl_gOIdhw4o8i8o2i = dnnl_aBCdef4b8c8b2c,
1534 dnnl_gOIhw4o8i8o2i = dnnl_aBCde4b8c8b2c,
1535 dnnl_gOIw4o8i8o2i = dnnl_aBCd4b8c8b2c,
1536 dnnl_IOdhw4i8o8i2o = dnnl_BAcde4b8a8b2a,
1537 dnnl_IOhw4i8o8i2o = dnnl_BAcd4b8a8b2a,
1538 dnnl_IOw4i8o8i2o = dnnl_BAc4b8a8b2a,
1539 dnnl_gIOdhw4i8o8i2o = dnnl_aCBdef4c8b8c2b,
1540 dnnl_gIOhw4i8o8i2o = dnnl_aCBde4c8b8c2b,
1541 dnnl_gIOw4i8o8i2o = dnnl_aCBd4c8b8c2b,
1542 dnnl_NCw2c32n8c = dnnl_ABc2b32a8b,
1543 dnnl_NChw2c32n8c = dnnl_ABcd2b32a8b,
1544 dnnl_NCdhw2c32n8c = dnnl_ABcde2b32a8b,
1545 dnnl_OIw2i8o16i4o = dnnl_ABc2b8a16b4a,
1546 dnnl_OIhw2i8o16i4o = dnnl_ABcd2b8a16b4a,
1547 dnnl_OIdhw2i8o16i4o = dnnl_ABcde2b8a16b4a,
1548 dnnl_OIw2o8i16o4i = dnnl_ABc2a8b16a4b,
1549 dnnl_OIw2o8i16o2i = dnnl_ABc2a8b16a2b,
1550 dnnl_IOw2i8o16i4o = dnnl_BAc2b8a16b4a,
1551 dnnl_IOw2i8o16i2o = dnnl_BAc2b8a16b2a,
1552 dnnl_OIhw2o8i16o4i = dnnl_ABcd2a8b16a4b,
1553 dnnl_OIhw2o8i16o2i = dnnl_ABcd2a8b16a2b,
1554 dnnl_IOhw2i8o16i4o = dnnl_BAcd2b8a16b4a,
1555 dnnl_IOhw2i8o16i2o = dnnl_BAcd2b8a16b2a,
1556 dnnl_OIdhw2o8i16o4i = dnnl_ABcde2a8b16a4b,
1557 dnnl_OIdhw2o8i16o2i = dnnl_ABcde2a8b16a2b,
1558 dnnl_IOdhw2i8o16i4o = dnnl_BAcde2b8a16b4a,
1559 dnnl_IOdhw2i8o16i2o = dnnl_BAcde2b8a16b2a,
1560 dnnl_gOIw2o8i16o2i = dnnl_aBCd2b8c16b2c,
1561 dnnl_gIOw2i8o16i2o = dnnl_aCBd2c8b16c2b,
1562 dnnl_gIOhw2i8o16i2o = dnnl_aBCde2c8b16c2b,
1563 dnnl_gIOdhw2i8o16i2o = dnnl_aBCdef2c8b16c2b,
1564 dnnl_gOIhw2o8i16o2i = dnnl_aBCde2b8c16b2c,
1565 dnnl_gOIdhw2o8i16o2i = dnnl_aBCdef2b8c16b2c,
1566 dnnl_gOIw2o8i16o4i = dnnl_aBCd2b8c16b4c,
1567 dnnl_gOIhw2o8i16o4i = dnnl_aBCde2b8c16b4c,
1568} dnnl_format_tag_t;
1569
1570/// @} dnnl_api_memory
1571
1572/// @addtogroup dnnl_api_primitives
1573/// @{
1574/// @addtogroup dnnl_api_primitives_common
1575/// @{
1576
1577/// Kinds of propagation.
1578typedef enum {
1579 // TODO: suggest renames
1580 /// Undefined propagation type.
1581 dnnl_prop_kind_undef = 0,
1582 /// Forward data propagation (training mode). In this mode primitives
1583 /// perform computations necessary for subsequent backward propagation.
1584 dnnl_forward_training = 64,
1585 /// Forward data propagation (inference mode). In this mode primitives
1586 /// perform only computations that are necessary for inference and omit
1587 /// computations that are necessary only for backward propagation.
1588 dnnl_forward_inference = 96,
1589 /// Forward data propagation (alias for @c dnnl_forward_training).
1590 dnnl_forward = dnnl_forward_training,
1591 /// Backward propagation (with respect to all parameters).
1592 dnnl_backward = 128,
1593 /// Backward data propagation.
1594 dnnl_backward_data = 160,
1595 /// Backward weights propagation.
1596 dnnl_backward_weights = 192,
1597 /// Backward bias propagation.
1598 dnnl_backward_bias = 193,
1599} dnnl_prop_kind_t;
1600
1601/// Kinds of primitives. Used to implement a way to extend the library with new
1602/// primitives without changing the ABI.
1603typedef enum {
1604 /// Undefined primitive
1605 dnnl_undefined_primitive,
1606 /// A reorder primitive.
1607 dnnl_reorder,
1608 /// A shuffle primitive.
1609 dnnl_shuffle,
1610 /// A (out-of-place) concat primitive.
1611 dnnl_concat,
1612 /// A sum primitive.
1613 dnnl_sum,
1614 /// A convolution primitive.
1615 dnnl_convolution,
1616 /// A deconvolution primitive.
1617 dnnl_deconvolution,
1618 /// An element-wise primitive.
1619 dnnl_eltwise,
1620 /// An LRN primitive.
1621 dnnl_lrn,
1622 /// A batch normalization primitive.
1623 dnnl_batch_normalization,
1624 /// An inner product primitive.
1625 dnnl_inner_product,
1626 /// A rnn primitive.
1627 dnnl_rnn,
1628 /// A matrix multiplication primitive (internal).
1629 dnnl_gemm,
1630 /// A binary primitive.
1631 dnnl_binary,
1632 /// A matrix multiplication primitive.
1633 dnnl_matmul,
1634 /// A resampling primitive.
1635 dnnl_resampling,
1636 /// A pooling primitive.
1637 dnnl_pooling,
1638 /// A reduction primitive.
1639 dnnl_reduction,
1640 /// A PReLU primitive.
1641 dnnl_prelu,
1642 /// A softmax primitive.
1643 dnnl_softmax,
1644 /// A layer normalization primitive.
1645 dnnl_layer_normalization,
1646
1647 /// Parameter to allow internal only primitives without undefined behavior.
1648 /// This parameter is chosen to be valid for so long as sizeof(int) >= 2.
1649 dnnl_primitive_kind_max = 0x7fff,
1650} dnnl_primitive_kind_t;
1651
1652/// Kinds of algorithms.
1653typedef enum {
1654 dnnl_alg_kind_undef,
1655 /// Direct convolution
1656 dnnl_convolution_direct = 0x1,
1657 /// Winograd convolution
1658 dnnl_convolution_winograd = 0x2,
1659 /// Convolution algorithm(either direct or Winograd) is chosen just in time
1660 dnnl_convolution_auto = 0x3,
1661 /// Direct deconvolution
1662 dnnl_deconvolution_direct = 0xa,
1663 /// Winograd deconvolution
1664 dnnl_deconvolution_winograd = 0xb,
1665 /// Eltwise: ReLU
1666 dnnl_eltwise_relu = 0x20,
1667 /// Eltwise: hyperbolic tangent non-linearity (tanh)
1668 dnnl_eltwise_tanh,
1669 /// Eltwise: exponential linear unit (elu)
1670 dnnl_eltwise_elu,
1671 /// Eltwise: square
1672 dnnl_eltwise_square,
1673 /// Eltwise: abs
1674 dnnl_eltwise_abs,
1675 /// Eltwise: square root
1676 dnnl_eltwise_sqrt,
1677 /// Eltwise: linear
1678 dnnl_eltwise_linear,
1679 /// Eltwise: soft_relu
1680 dnnl_eltwise_soft_relu,
1681 /// Eltwise: hardsigmoid
1682 dnnl_eltwise_hardsigmoid,
1683 /// Eltwise: logistic
1684 dnnl_eltwise_logistic,
1685 /// Eltwise: exponent
1686 dnnl_eltwise_exp,
1687 /// Eltwise: gelu
1688 ///
1689 /// @note Tanh approximation formula is used to approximate
1690 /// the cumulative distribution function of a Gaussian here
1691 dnnl_eltwise_gelu_tanh,
1692 /// Eltwise: swish
1693 dnnl_eltwise_swish,
1694 /// Eltwise: natural logarithm
1695 dnnl_eltwise_log,
1696 /// Eltwise: clip
1697 dnnl_eltwise_clip,
1698 /// Eltwise: clip version 2
1699 dnnl_eltwise_clip_v2,
1700 /// Eltwise: pow
1701 dnnl_eltwise_pow,
1702 /// Eltwise: erf-based gelu
1703 dnnl_eltwise_gelu_erf,
1704 /// Eltwise: round
1705 dnnl_eltwise_round,
1706 /// Eltwise: mish
1707 dnnl_eltwise_mish,
1708 /// Eltwise: hardswish
1709 dnnl_eltwise_hardswish,
1710 /// Eltwise: ReLU (dst for backward)
1711 dnnl_eltwise_relu_use_dst_for_bwd = 0x100,
1712 /// Eltwise: hyperbolic tangent non-linearity (tanh) (dst for backward)
1713 dnnl_eltwise_tanh_use_dst_for_bwd,
1714 /// Eltwise: exponential linear unit (elu) (dst for backward)
1715 dnnl_eltwise_elu_use_dst_for_bwd,
1716 /// Eltwise: square root (dst for backward)
1717 dnnl_eltwise_sqrt_use_dst_for_bwd,
1718 /// Eltwise: logistic (dst for backward)
1719 dnnl_eltwise_logistic_use_dst_for_bwd,
1720 /// Eltwise: exp (dst for backward)
1721 dnnl_eltwise_exp_use_dst_for_bwd,
1722 /// Eltwise: clip version 2 (dst for backward)
1723 dnnl_eltwise_clip_v2_use_dst_for_bwd,
1724 /// Max pooling
1725 dnnl_pooling_max = 0x1ff,
1726 /// Average pooling include padding
1727 dnnl_pooling_avg_include_padding = 0x2ff,
1728 /// Average pooling exclude padding
1729 dnnl_pooling_avg_exclude_padding = 0x3ff,
1730 /// Local response normalization (LRN) across multiple channels
1731 dnnl_lrn_across_channels = 0xaff,
1732 /// LRN within a single channel
1733 dnnl_lrn_within_channel = 0xbff,
1734 /// RNN cell
1735 dnnl_vanilla_rnn = 0x1fff,
1736 /// LSTM cell
1737 dnnl_vanilla_lstm = 0x2fff,
1738 /// GRU cell
1739 dnnl_vanilla_gru = 0x3fff,
1740 /// GRU cell with linear before reset
1741 ///
1742 /// Modification of original GRU cell. Differs from #dnnl_vanilla_gru
1743 /// in how the new memory gate is calculated:
1744 /// \f[ c_t = tanh(W_c*x_t + b_{c_x} + r_t*(U_c*h_{t-1}+b_{c_h})) \f]
1745 /// Primitive expects 4 biases on input:
1746 /// \f$[b_{u}, b_{r}, b_{c_x}, b_{c_h}]\f$
1747 dnnl_lbr_gru = 0x4fff,
1748 /// AUGRU cell
1749 dnnl_vanilla_augru = 0x5fff,
1750 /// AUGRU cell with linear before reset
1751 dnnl_lbr_augru = 0x6fff,
1752 /// Binary add
1753 dnnl_binary_add = 0x1fff0,
1754 /// Binary mul
1755 dnnl_binary_mul = 0x1fff1,
1756 /// Binary max
1757 dnnl_binary_max = 0x1fff2,
1758 /// Binary min
1759 dnnl_binary_min = 0x1fff3,
1760 /// Binary div
1761 dnnl_binary_div = 0x1fff4,
1762 /// Binary sub
1763 dnnl_binary_sub = 0x1fff5,
1764 /// Binary greater or equal
1765 dnnl_binary_ge = 0x1fff6,
1766 /// Binary greater than
1767 dnnl_binary_gt = 0x1fff7,
1768 /// Binary less or equal
1769 dnnl_binary_le = 0x1fff8,
1770 /// Binary less than
1771 dnnl_binary_lt = 0x1fff9,
1772 /// Binary equal
1773 dnnl_binary_eq = 0x1fffa,
1774 /// Binary not equal
1775 dnnl_binary_ne = 0x1fffb,
1776 /// Nearest Neighbor Resampling Method
1777 dnnl_resampling_nearest = 0x2fff0,
1778 /// Linear Resampling Method
1779 dnnl_resampling_linear = 0x2fff1,
1780 /// Reduction using max
1781 dnnl_reduction_max,
1782 /// Reduction using min
1783 dnnl_reduction_min,
1784 /// Reduction using sum
1785 dnnl_reduction_sum,
1786 /// Reduction using mul
1787 dnnl_reduction_mul,
1788 /// Reduction using mean
1789 dnnl_reduction_mean,
1790 /// Reduction using lp norm
1791 dnnl_reduction_norm_lp_max,
1792 /// Reduction using lp norm
1793 dnnl_reduction_norm_lp_sum,
1794 /// Reduction using lp norm without final pth-root
1795 dnnl_reduction_norm_lp_power_p_max,
1796 /// Reduction using lp norm without final pth-root
1797 dnnl_reduction_norm_lp_power_p_sum,
1798 /// Softmax
1799 dnnl_softmax_accurate = 0x30000,
1800 /// Logsoftmax
1801 dnnl_softmax_log,
1802} dnnl_alg_kind_t;
1803
1804/// Flags for normalization primitives.
1805typedef enum {
1806 /// Use no normalization flags
1807 ///
1808 /// If specified
1809 /// - on forward training propagation mean and variance are computed and
1810 /// stored as output
1811 /// - on backward propagation compute full derivative wrt data
1812 /// - on backward propagation prop_kind == #dnnl_backward_data has the same
1813 /// behavior as prop_kind == #dnnl_backward
1814 dnnl_normalization_flags_none = 0x0U,
1815
1816 /// Use global statistics
1817 ///
1818 /// If specified
1819 /// - on forward propagation use mean and variance provided by user (input)
1820 /// - on backward propagation reduces the amount of computations, since
1821 /// mean and variance are considered as constants
1822 ///
1823 /// If not specified:
1824 /// - on forward propagation mean and variance are computed and stored as
1825 /// output
1826 /// - on backward propagation compute full derivative wrt data
1827 dnnl_use_global_stats = 0x1U,
1828
1829 /// Use scale parameter
1830 ///
1831 /// If specified:
1832 /// - on forward propagation use scale for the normalization results
1833 /// - on backward propagation (for prop_kind == #dnnl_backward) compute
1834 /// diff wrt scale (hence one extra output used)
1835 dnnl_use_scale = 0x2U,
1836
1837 /// Use shift parameter
1838 ///
1839 /// If specified:
1840 /// - on forward propagation use shift (aka bias) for the normalization
1841 /// results
1842 /// - on backward propagation (for prop_kind == #dnnl_backward) compute
1843 /// diff wrt shift (hence one extra output used)
1844 dnnl_use_shift = 0x4U,
1845
1846 /// Fuse with ReLU
1847 ///
1848 /// The flag implies negative slope being 0. On training this is the only
1849 /// configuration supported. For inference, to use non-zero negative slope
1850 /// consider using @ref dev_guide_attributes_post_ops.
1851 ///
1852 /// If specified:
1853 /// - on inference this option behaves the same as if the primitive were
1854 /// fused with ReLU using post ops API with zero negative slope.
1855 /// - on training primitive requires workspace (required to be able to
1856 /// perform backward pass)
1857 dnnl_fuse_norm_relu = 0x8U,
1858
1859 /// Fuse with Add and then fuse with ReLU
1860 ///
1861 /// If specified:
1862 ///
1863 /// - on forward propagation apply element-wise binary Add operation to
1864 /// to the normalization results with an additional input tensor and then
1865 /// apply ReLU with negative slope being 0.
1866 /// - on training primitive requires workspace (required to be able to
1867 /// perform backward pass).
1868 /// - on backward propagation save the result of backward ReLU operation
1869 /// with input tensor and workspace from forward pass to extra output
1870 /// tensor and then perform backward normalization.
1871 dnnl_fuse_norm_add_relu = 0x10U,
1872
1873} dnnl_normalization_flags_t;
1874
1875/// @} dnnl_api_primitives_common
1876/// @} dnnl_api_primitives
1877
1878/// @addtogroup dnnl_api_memory
1879/// @{
1880
1881/// A wildcard value for dimensions that are unknown at a primitive creation
1882/// time.
1883#define DNNL_RUNTIME_DIM_VAL INT64_MIN
1884
1885/// A `size_t` counterpart of the DNNL_RUNTIME_DIM_VAL.
1886/// For instance, this value is returned by dnnl_memory_desc_get_size() if
1887/// either of the dimensions or strides equal to #DNNL_RUNTIME_DIM_VAL.
1888#define DNNL_RUNTIME_SIZE_VAL ((size_t)DNNL_RUNTIME_DIM_VAL)
1889
1890/// @cond DO_NOT_DOCUMENT_THIS
1891/// Hex representation for a **special** quiet NAN (!= NAN from math.h)
1892static const union {
1893 unsigned u;
1894 float f;
1895} DNNL_RUNTIME_F32_VAL_REP = {0x7fc000d0};
1896/// @endcond
1897
1898/// A wildcard value for floating point values that are unknown at a primitive
1899/// creation time.
1900#define DNNL_RUNTIME_F32_VAL (DNNL_RUNTIME_F32_VAL_REP.f)
1901
1902/// @cond DO_NOT_DOCUMENT_THIS
1903static const int DNNL_RUNTIME_S32_VAL_REP = INT32_MIN;
1904/// @endcond
1905
1906/// A wildcard value for int32_t values that are unknown at a primitive creation
1907/// time.
1908#define DNNL_RUNTIME_S32_VAL DNNL_RUNTIME_S32_VAL_REP
1909
1910/// @struct dnnl_memory_desc
1911/// An opaque structure to describe a memory descriptor.
1912struct dnnl_memory_desc;
1913
1914/// A memory descriptor handle.
1915typedef struct dnnl_memory_desc *dnnl_memory_desc_t;
1916
1917/// A memory descriptor handle.
1918typedef const struct dnnl_memory_desc *const_dnnl_memory_desc_t;
1919
1920/// @struct dnnl_memory
1921/// An opaque structure to describe a memory.
1922struct dnnl_memory;
1923
1924/// A memory handle.
1925typedef struct dnnl_memory *dnnl_memory_t;
1926
1927/// A constant memory handle.
1928typedef const struct dnnl_memory *const_dnnl_memory_t;
1929
1930/// Special pointer value that indicates that a memory object should not have
1931/// an underlying buffer.
1932#define DNNL_MEMORY_NONE (NULL)
1933
1934/// Special pointer value that indicates that the library needs to allocate an
1935/// underlying buffer for a memory object.
1936#define DNNL_MEMORY_ALLOCATE ((void *)(size_t)-1)
1937
1938/// @} dnnl_api_memory
1939
1940/// @addtogroup dnnl_api_primitives
1941/// @{
1942
1943/// @addtogroup dnnl_api_rnn
1944/// @{
1945
1946/// Flags for RNN cell.
1947typedef enum {
1948 /// Undefined RNN flags
1949 dnnl_rnn_flags_undef = 0x0
1950} dnnl_rnn_flags_t;
1951
1952/// A direction of RNN primitive execution.
1953typedef enum {
1954 /// Undefined RNN direction.
1955 dnnl_rnn_direction_undef = 0,
1956 /// Unidirectional execution of RNN primitive from left to right.
1957 dnnl_unidirectional_left2right,
1958 /// Unidirectional execution of RNN primitive from right to left.
1959 dnnl_unidirectional_right2left,
1960 /// Bidirectional execution of RNN primitive with concatenation of the
1961 /// results.
1962 dnnl_bidirectional_concat,
1963 /// Bidirectional execution of RNN primitive with summation of the
1964 /// results.
1965 dnnl_bidirectional_sum,
1966} dnnl_rnn_direction_t;
1967
1968/// @} dnnl_api_rnn
1969
1970/// @} dnnl_api_primitives
1971
1972/// @addtogroup dnnl_api_primitives
1973/// @{
1974/// @addtogroup dnnl_api_primitives_common
1975/// @{
1976
1977/// @struct dnnl_primitive_desc
1978/// @brief An opaque structure to describe a primitive descriptor.
1979struct dnnl_primitive_desc;
1980
1981/// @brief A primitive descriptor handle.
1982typedef struct dnnl_primitive_desc *dnnl_primitive_desc_t;
1983
1984/// @brief A constant primitive descriptor handle.
1985typedef const struct dnnl_primitive_desc *const_dnnl_primitive_desc_t;
1986
1987/// @} dnnl_api_primitives_common
1988
1989/// @addtogroup dnnl_api_attributes
1990/// @{
1991
1992/// Scratchpad mode
1993typedef enum {
1994 /// The library manages the scratchpad allocation according to the policy
1995 /// specified by the `DNNL_ENABLE_CONCURRENT_EXEC`
1996 /// [build option](@ref dev_guide_build_options) (default).
1997 ///
1998 /// When `DNNL_ENABLE_CONCURRENT_EXEC=OFF` (default), the library
1999 /// scratchpad is common to all primitives to reduce the memory footprint.
2000 /// This configuration comes with limited thread-safety properties, namely
2001 /// primitives can be created and executed in parallel but cannot migrate
2002 /// between threads (in other words, each primitive should be executed in
2003 /// the same thread it was created in).
2004 ///
2005 /// When `DNNL_ENABLE_CONCURRENT_EXEC=ON`, the library scratchpad is
2006 /// private to each primitive. The memory footprint is larger than when
2007 /// using `DNNL_ENABLE_CONCURRENT_EXEC=OFF` but different primitives can be
2008 /// created and run concurrently (the same primitive cannot be run
2009 /// concurrently from two different threads though).
2010 dnnl_scratchpad_mode_library,
2011 /// The user manages the scratchpad allocation by querying and providing
2012 /// the scratchpad memory to primitives. This mode is thread-safe as long
2013 /// as the scratchpad buffers are not used concurrently by two primitive
2014 /// executions.
2015 dnnl_scratchpad_mode_user,
2016} dnnl_scratchpad_mode_t;
2017
2018/// @struct dnnl_primitive_attr
2019/// @brief An opaque structure for primitive descriptor attributes.
2020///
2021/// Attributes may contain:
2022/// - output scales (to scale the result prior to storing it to the memory)
2023struct dnnl_primitive_attr;
2024
2025/// @brief A primitive descriptor attributes handle that controls primitive
2026/// behavior.
2027typedef struct dnnl_primitive_attr *dnnl_primitive_attr_t;
2028
2029/// @brief A constant primitive descriptor attributes handle.
2030typedef const struct dnnl_primitive_attr *const_dnnl_primitive_attr_t;
2031
2032/// @struct dnnl_post_ops
2033/// @brief An opaque structure for a chain of post operations.
2034///
2035/// dnnl_post_ops can be used to perform some (trivial) operations like
2036/// accumulation or eltwise after certain primitives like convolution.
2037///
2038/// Post operations might be combined together, making a chain of post
2039/// operations. For instance one can configure convolution followed by
2040/// accumulation followed by eltwise. This might be especially beneficial
2041/// for residual learning blocks.
2042///
2043/// @warning
2044/// Of course not all combinations are supported, so the user should handle
2045/// errors accordingly.
2046///
2047/// Supported post operations:
2048/// - accumulation (base primitive: convolution)
2049/// - eltwise (base primitive: convolution)
2050struct dnnl_post_ops;
2051
2052/// @brief A post operation chain handle.
2053typedef struct dnnl_post_ops *dnnl_post_ops_t;
2054
2055/// @brief A constant post operation chain handle.
2056typedef const struct dnnl_post_ops *const_dnnl_post_ops_t;
2057
2058/// @} dnnl_api_attributes
2059
2060/// @addtogroup dnnl_api_primitives_common
2061/// @{
2062
2063/// @struct dnnl_primitive
2064/// An opaque structure to describe a primitive.
2065struct dnnl_primitive;
2066/// A primitive handle.
2067typedef struct dnnl_primitive *dnnl_primitive_t;
2068/// A constant primitive handle.
2069typedef const struct dnnl_primitive *const_dnnl_primitive_t;
2070
2071/// Source argument #0.
2072#define DNNL_ARG_SRC_0 1
2073/// A special mnemonic for source argument for primitives that have a
2074/// single source. An alias for #DNNL_ARG_SRC_0.
2075#define DNNL_ARG_SRC DNNL_ARG_SRC_0
2076/// A special mnemonic for RNN input vector. An alias for
2077/// #DNNL_ARG_SRC_0.
2078#define DNNL_ARG_SRC_LAYER DNNL_ARG_SRC_0
2079/// A special mnemonic for reorder source argument. An alias for
2080/// #DNNL_ARG_SRC_0.
2081#define DNNL_ARG_FROM DNNL_ARG_SRC_0
2082
2083/// Source argument #1.
2084#define DNNL_ARG_SRC_1 2
2085/// A special mnemonic for RNN input recurrent hidden state vector. An alias
2086/// for #DNNL_ARG_SRC_1.
2087#define DNNL_ARG_SRC_ITER DNNL_ARG_SRC_1
2088
2089/// Source argument #2.
2090#define DNNL_ARG_SRC_2 3
2091/// A special mnemonic for RNN input recurrent cell state vector. An alias for
2092/// #DNNL_ARG_SRC_2.
2093#define DNNL_ARG_SRC_ITER_C DNNL_ARG_SRC_2
2094
2095/// Source argument #3.
2096#define DNNL_ARG_SRC_3 4
2097/// A special mnemonic for RNN input recurrent cell attention vector. An alias for
2098/// #DNNL_ARG_SRC_3.
2099#define DNNL_ARG_AUGRU_ATTENTION DNNL_ARG_SRC_3
2100
2101/// Destination argument #0.
2102#define DNNL_ARG_DST_0 17
2103/// A special mnemonic for destination argument for primitives that have a
2104/// single destination. An alias for #DNNL_ARG_DST_0.
2105#define DNNL_ARG_DST DNNL_ARG_DST_0
2106/// A special mnemonic for reorder destination argument. An alias for
2107/// #DNNL_ARG_DST_0.
2108#define DNNL_ARG_TO DNNL_ARG_DST_0
2109/// A special mnemonic for RNN output vector. An alias for #DNNL_ARG_DST_0.
2110#define DNNL_ARG_DST_LAYER DNNL_ARG_DST_0
2111
2112/// Destination argument #1.
2113#define DNNL_ARG_DST_1 18
2114/// A special mnemonic for RNN input recurrent hidden state vector. An
2115/// alias for #DNNL_ARG_DST_1.
2116#define DNNL_ARG_DST_ITER DNNL_ARG_DST_1
2117
2118/// Destination argument #2.
2119#define DNNL_ARG_DST_2 19
2120/// A special mnemonic for LSTM output recurrent cell state vector. An
2121/// alias for #DNNL_ARG_DST_2.
2122#define DNNL_ARG_DST_ITER_C DNNL_ARG_DST_2
2123
2124/// Weights argument #0.
2125#define DNNL_ARG_WEIGHTS_0 33
2126/// A special mnemonic for primitives that have a single weights
2127/// argument. Alias for #DNNL_ARG_WEIGHTS_0.
2128#define DNNL_ARG_WEIGHTS DNNL_ARG_WEIGHTS_0
2129/// A special mnemonic for RNN weights applied to the layer input. An
2130/// alias for #DNNL_ARG_WEIGHTS_0.
2131#define DNNL_ARG_WEIGHTS_LAYER DNNL_ARG_WEIGHTS_0
2132
2133/// Weights argument #1.
2134#define DNNL_ARG_WEIGHTS_1 34
2135/// A special mnemonic for RNN weights applied to the recurrent input.
2136/// An alias for #DNNL_ARG_WEIGHTS_1.
2137#define DNNL_ARG_WEIGHTS_ITER DNNL_ARG_WEIGHTS_1
2138
2139/// Weights argument #2.
2140#define DNNL_ARG_WEIGHTS_2 35
2141/// A special mnemonic for RNN weights applied to the peephole weights.
2142/// An alias for #DNNL_ARG_WEIGHTS_2.
2143#define DNNL_ARG_WEIGHTS_PEEPHOLE DNNL_ARG_WEIGHTS_2
2144
2145/// Weights argument #3.
2146#define DNNL_ARG_WEIGHTS_3 36
2147/// A special mnemonic for RNN weights applied to the projection weights.
2148/// An alias for #DNNL_ARG_WEIGHTS_3.
2149#define DNNL_ARG_WEIGHTS_PROJECTION DNNL_ARG_WEIGHTS_3
2150
2151/// Bias tensor argument.
2152#define DNNL_ARG_BIAS 41
2153
2154/// Mean values tensor argument.
2155#define DNNL_ARG_MEAN 49
2156/// Variance values tensor argument.
2157#define DNNL_ARG_VARIANCE 50
2158
2159/// A special mnemonic for scale argument of normalization primitives.
2160#define DNNL_ARG_SCALE 51
2161/// A special mnemonic for shift argument of normalization primitives.
2162#define DNNL_ARG_SHIFT 52
2163
2164/// Workspace tensor argument. Workspace is used to pass information
2165/// from forward propagation to backward propagation computations.
2166#define DNNL_ARG_WORKSPACE 64
2167/// Scratchpad (temporary storage) tensor argument.
2168#define DNNL_ARG_SCRATCHPAD 80
2169
2170/// Gradient (diff) of the source argument #0.
2171#define DNNL_ARG_DIFF_SRC_0 129
2172/// A special mnemonic for primitives that have a single diff source argument.
2173/// An alias for #DNNL_ARG_DIFF_SRC_0.
2174#define DNNL_ARG_DIFF_SRC DNNL_ARG_DIFF_SRC_0
2175/// A special mnemonic for gradient (diff) of RNN input vector. An alias for
2176/// #DNNL_ARG_DIFF_SRC_0.
2177#define DNNL_ARG_DIFF_SRC_LAYER DNNL_ARG_DIFF_SRC_0
2178
2179/// Gradient (diff) of the source argument #1.
2180#define DNNL_ARG_DIFF_SRC_1 130
2181/// A special mnemonic for gradient (diff) of RNN input recurrent hidden state
2182/// vector. An alias for #DNNL_ARG_DIFF_SRC_1.
2183#define DNNL_ARG_DIFF_SRC_ITER DNNL_ARG_DIFF_SRC_1
2184
2185/// Gradient (diff) of the source argument #2.
2186#define DNNL_ARG_DIFF_SRC_2 131
2187/// A special mnemonic for gradient (diff) of RNN input recurrent cell state
2188/// vector. An alias for #DNNL_ARG_DIFF_SRC_1.
2189#define DNNL_ARG_DIFF_SRC_ITER_C DNNL_ARG_DIFF_SRC_2
2190
2191/// Gradient (diff) of the source argument #3.
2192#define DNNL_ARG_DIFF_SRC_3 132
2193/// A special mnemonic for gradient (diff) of RNN input recurrent cell attention
2194/// vector. An alias for #DNNL_ARG_DIFF_SRC_3.
2195#define DNNL_ARG_DIFF_AUGRU_ATTENTION DNNL_ARG_DIFF_SRC_3
2196
2197/// Gradient (diff) of the destination argument #0.
2198#define DNNL_ARG_DIFF_DST_0 145
2199/// A special mnemonic for primitives that have a single diff destination
2200/// argument. An alias for #DNNL_ARG_DIFF_DST_0.
2201#define DNNL_ARG_DIFF_DST DNNL_ARG_DIFF_DST_0
2202/// A special mnemonic for gradient (diff) of RNN output vector. An alias for
2203/// #DNNL_ARG_DIFF_DST_0.
2204#define DNNL_ARG_DIFF_DST_LAYER DNNL_ARG_DIFF_DST_0
2205
2206/// Gradient (diff) of the destination argument #1.
2207#define DNNL_ARG_DIFF_DST_1 146
2208/// A special mnemonic for gradient (diff) of RNN input recurrent hidden state
2209/// vector. An alias for #DNNL_ARG_DIFF_DST_1.
2210#define DNNL_ARG_DIFF_DST_ITER DNNL_ARG_DIFF_DST_1
2211
2212/// Gradient (diff) of the destination argument #2.
2213#define DNNL_ARG_DIFF_DST_2 147
2214/// A special mnemonic for gradient (diff) of RNN input recurrent cell state
2215/// vector. An alias for #DNNL_ARG_DIFF_DST_2.
2216#define DNNL_ARG_DIFF_DST_ITER_C DNNL_ARG_DIFF_DST_2
2217
2218/// Gradient (diff) of the weights argument #0.
2219#define DNNL_ARG_DIFF_WEIGHTS_0 161
2220/// A special mnemonic for primitives that have a single diff weights
2221/// argument. Alias for #DNNL_ARG_DIFF_WEIGHTS_0.
2222#define DNNL_ARG_DIFF_WEIGHTS DNNL_ARG_DIFF_WEIGHTS_0
2223/// A special mnemonic for diff of RNN weights applied to the layer input. An
2224/// alias for #DNNL_ARG_DIFF_WEIGHTS_0.
2225#define DNNL_ARG_DIFF_WEIGHTS_LAYER DNNL_ARG_DIFF_WEIGHTS_0
2226
2227/// Gradient (diff) of the weights argument #1.
2228#define DNNL_ARG_DIFF_WEIGHTS_1 162
2229/// A special mnemonic for diff of RNN weights applied to the recurrent input.
2230/// An alias for #DNNL_ARG_DIFF_WEIGHTS_1.
2231#define DNNL_ARG_DIFF_WEIGHTS_ITER DNNL_ARG_DIFF_WEIGHTS_1
2232
2233/// Gradient (diff) of the weights argument #2.
2234#define DNNL_ARG_DIFF_WEIGHTS_2 163
2235/// A special mnemonic for diff of RNN weights applied to the peephole weights.
2236/// An alias for #DNNL_ARG_DIFF_WEIGHTS_2.
2237#define DNNL_ARG_DIFF_WEIGHTS_PEEPHOLE DNNL_ARG_DIFF_WEIGHTS_2
2238
2239/// Gradient (diff) of the weights argument #3.
2240#define DNNL_ARG_DIFF_WEIGHTS_3 164
2241/// A special mnemonic for diff of RNN weights applied to the projection
2242/// weights. An alias for #DNNL_ARG_DIFF_WEIGHTS_3.
2243#define DNNL_ARG_DIFF_WEIGHTS_PROJECTION DNNL_ARG_DIFF_WEIGHTS_3
2244
2245/// Gradient (diff) of the bias tensor argument.
2246#define DNNL_ARG_DIFF_BIAS 169
2247
2248/// A special mnemonic for scale argument of normalization primitives.
2249#define DNNL_ARG_DIFF_SCALE 255
2250/// A special mnemonic for shift argument of normalization primitives.
2251#define DNNL_ARG_DIFF_SHIFT 256
2252
2253/// Output scaling factors provided at execution time.
2254#define DNNL_ARG_ATTR_OUTPUT_SCALES 513
2255
2256/// Starting index for source arguments for primitives that take a variable
2257/// number of source arguments.
2258#define DNNL_ARG_MULTIPLE_SRC 1024
2259/// Starting index for destination arguments for primitives that produce a
2260/// variable number of destination arguments.
2261#define DNNL_ARG_MULTIPLE_DST 2048
2262
2263/// Scaling factors provided at execution time.
2264#define DNNL_ARG_ATTR_SCALES 4096
2265
2266/// Zero points provided at execution time.
2267#define DNNL_ARG_ATTR_ZERO_POINTS 8192
2268
2269/// Arguments for fused depthwise convolution.
2270/// See @ref dev_guide_attributes_post_ops_depthwise_fusion
2271#define DNNL_ARG_ATTR_POST_OP_DW 16384
2272
2273/// Starting point for a binary post operation.
2274#define DNNL_ARG_ATTR_MULTIPLE_POST_OP_BASE 32768
2275
2276/// Arguments for a binary post operation. Up to 32 arguments are supported.
2277/// See @ref dev_guide_attributes_post_ops_binary_fusion
2278#define DNNL_ARG_ATTR_MULTIPLE_POST_OP(idx) \
2279 (DNNL_ARG_ATTR_MULTIPLE_POST_OP_BASE * ((idx) + 1))
2280
2281/// A structure that contains an index and a memory object, and is used to pass
2282/// arguments to dnnl_primitive_execute().
2283typedef struct {
2284 int arg; ///< An argument index, e.g. DNNL_ARG_SRC
2285 dnnl_memory_t memory; ///< Input/output memory
2286} dnnl_exec_arg_t;
2287
2288/// @} dnnl_api_primitives_common
2289
2290/// @addtogroup dnnl_api_primitives_common
2291/// @{
2292
2293/// Primitive descriptor query specification
2294///
2295/// For generic function dnnl_primitive_desc_query(), the type of result must
2296/// agree with the queried argument. The correspondence table:
2297///
2298/// Query kind | Type of query result
2299/// --------------------------------|-----------------------------
2300/// dnnl_query_*_engine | #dnnl_engine_t *
2301/// #dnnl_query_primitive_kind | #dnnl_primitive_kind_t *
2302/// dnnl_query_*_s32 | int *
2303/// dnnl_query_*_s64 | #dnnl_dim_t * (same as int64_t *)
2304/// dnnl_query_*_f32 | float *
2305/// dnnl_query_*_f64 | double *
2306/// dnnl_query_*_str | const char **
2307/// dnnl_query_*_md | #const_dnnl_memory_desc_t *
2308/// dnnl_query_*_pd | #const_dnnl_primitive_desc_t *
2309/// dnnl_query_cache_blob_id | const uint8_t **
2310/// dnnl_query_strides | const #dnnl_dims_t **
2311/// dnnl_query_dilations | const #dnnl_dims_t **
2312/// dnnl_query_padding_l | const #dnnl_dims_t **
2313/// dnnl_query_padding_r | const #dnnl_dims_t **
2314/// dnnl_query_flags | unsigned *
2315/// dnnl_query_alg_kind | #dnnl_alg_kind_t *
2316/// dnnl_query_factors | const float **
2317/// dnnl_query_cell_kind | #dnnl_alg_kind_t *
2318/// dnnl_query_direction | #dnnl_rnn_direction_t *
2319/// dnnl_query_activation_kind | #dnnl_alg_kind_t *
2320/// dnnl_query_kernel | const #dnnl_dims_t **
2321/// dnnl_query_dims | const #dnnl_dims_t **
2322/// dnnl_query_data_type | #dnnl_data_type_t *
2323/// dnnl_query_padded_dims | const #dnnl_dims_t **
2324/// dnnl_query_padded_offsets | const #dnnl_dims_t **
2325/// dnnl_query_format_kind | #dnnl_format_kind_t *
2326/// dnnl_query_inner_blks | const #dnnl_dims_t **
2327/// dnnl_query_inner_idxs | const #dnnl_dims_t **
2328///
2329/// @note
2330/// Rule of thumb: all opaque types and structures are returned by
2331/// reference. All numbers are returned by value.
2332///
2333/// @warning
2334/// All returned references point to constant objects and are valid only
2335/// during the lifetime of the queried primitive descriptor. Returned objects
2336/// must not be destroyed by the user. If you need to keep the object longer
2337/// than the lifetime of the queried primitive descriptor, use
2338/// dnnl_primitive_desc_clone() to make a copy.
2339typedef enum {
2340 dnnl_query_undef = 0, ///< no query
2341
2342 dnnl_query_engine, ///< execution engine
2343 dnnl_query_primitive_kind, ///< primitive kind
2344
2345 dnnl_query_num_of_inputs_s32, ///< number of inputs expected
2346 dnnl_query_num_of_outputs_s32, ///< number of outputs expected
2347
2348 dnnl_query_time_estimate_f64, ///< runtime estimation (seconds)
2349 dnnl_query_memory_consumption_s64, ///< memory consumption -- extra
2350 /// (scratch) memory, additional to
2351 /// all inputs and outputs memory
2352 /// (bytes)
2353
2354 dnnl_query_scratchpad_engine, ///< scratchpad engine -- engine to be used
2355 /// for creating scratchpad memory
2356
2357 dnnl_query_impl_info_str, ///< implementation name
2358
2359 dnnl_query_reorder_src_engine, ///< source engine
2360 dnnl_query_reorder_dst_engine, ///< destination engine
2361
2362 dnnl_query_prop_kind, ///< propagation kind
2363
2364 dnnl_query_cache_blob_id_size_s64, ///< size of cache blob ID in bytes
2365 dnnl_query_cache_blob_id, ///< cache blob ID (pointer to array)
2366
2367 dnnl_query_strides, ///< strides
2368 dnnl_query_dilations, ///< dilations
2369 dnnl_query_padding_l, ///< left padding
2370 dnnl_query_padding_r, ///< right padding
2371 dnnl_query_epsilon_f32, ///< epsilon
2372 dnnl_query_flags, ///< flags
2373 dnnl_query_alg_kind, ///< algorithm kind
2374 dnnl_query_alpha_f32, ///< alpha
2375 dnnl_query_beta_f32, ///< beta
2376 dnnl_query_axis_s32, ///< axis
2377 dnnl_query_local_size_s64, ///< LRN parameter local size
2378 dnnl_query_k_f32, ///< LRN parameter K
2379 dnnl_query_p_f32, ///< Reduction parameter P
2380 dnnl_query_factors, ///< Resampling parameter factors
2381 dnnl_query_cell_kind, ///< RNN parameter cell kind
2382 dnnl_query_direction, ///< RNN parameter direction
2383 dnnl_query_activation_kind, ///< RNN parameter activation kind
2384 dnnl_query_kernel, ///< Pooling parameter kernel
2385 dnnl_query_group_size_s64, ///< Shuffle parameter group size
2386
2387 // memory descriptor section
2388 dnnl_query_some_md = 128, ///< stub
2389 dnnl_query_src_md, ///< source memory desc
2390 dnnl_query_diff_src_md, ///< source gradient memory desc
2391 dnnl_query_weights_md, ///< weights memory descriptor desc
2392 dnnl_query_diff_weights_md, ///< weights grad. memory desc
2393 dnnl_query_dst_md, ///< destination memory desc
2394 dnnl_query_diff_dst_md, ///< destination grad. memory desc
2395 dnnl_query_workspace_md, ///< workspace memory desc
2396 dnnl_query_scratchpad_md, ///< scratchpad memory desc
2397 dnnl_query_exec_arg_md = 255, ///< memory desc of an execute argument
2398
2399 dnnl_query_ndims_s32, ///< number of dimensions
2400 dnnl_query_dims, ///< vector of dimensions
2401 dnnl_query_data_type, ///< data type
2402 dnnl_query_submemory_offset_s64, ///< submemory offset
2403 dnnl_query_padded_dims, ///< vector of padded dimensions
2404 dnnl_query_padded_offsets, ///< vector of padded offsets
2405 dnnl_query_format_kind, ///< format kind
2406 dnnl_query_inner_nblks_s32, ///< number of innermost blocks
2407 dnnl_query_inner_blks, ///< vector of sizes of the innermost blocks
2408 dnnl_query_inner_idxs, ///< vector of logical indices of the blocks
2409
2410 // Max value to prevent UB for internal use only dnnl_query_t
2411 dnnl_query_max = 0x7fff,
2412} dnnl_query_t;
2413
2414/// @} dnnl_api_primitives_common
2415
2416/// @} dnnl_api_primitives
2417
2418/// @addtogroup dnnl_api_service
2419/// @{
2420
2421/// Disable profiling completely
2422#define DNNL_JIT_PROFILE_NONE 0u
2423
2424/// Enable VTune Amplifier integration
2425#define DNNL_JIT_PROFILE_VTUNE 1u
2426
2427/// Enable Linux perf integration via perfmap files
2428#define DNNL_JIT_PROFILE_LINUX_PERFMAP 2u
2429
2430/// Enable Linux perf integration via jitdump files
2431#define DNNL_JIT_PROFILE_LINUX_JITDUMP 4u
2432
2433/// Instruct Linux perf integration via jitdump files to use TSC. @ref
2434/// DNNL_JIT_PROFILE_LINUX_JITDUMP must be set too for this to take effect.
2435#define DNNL_JIT_PROFILE_LINUX_JITDUMP_USE_TSC 8u
2436
2437/// Enable Linux perf integration (both jitdump and perfmap)
2438#define DNNL_JIT_PROFILE_LINUX_PERF \
2439 (DNNL_JIT_PROFILE_LINUX_JITDUMP | DNNL_JIT_PROFILE_LINUX_PERFMAP)
2440
2441/// CPU instruction set flags
2442typedef enum {
2443 /// Library choice of ISA (excepting those listed as initial support)
2444 dnnl_cpu_isa_default = 0x0,
2445
2446 /// Intel Streaming SIMD Extensions 4.1 (Intel SSE4.1)
2447 dnnl_cpu_isa_sse41 = 0x1,
2448
2449 /// Intel Advanced Vector Extensions (Intel AVX)
2450 dnnl_cpu_isa_avx = 0x3,
2451
2452 /// Intel Advanced Vector Extensions 2 (Intel AVX2)
2453 dnnl_cpu_isa_avx2 = 0x7,
2454
2455 /// Intel AVX2 and Intel Deep Learning Boost (Intel DL Boost) support
2456 dnnl_cpu_isa_avx2_vnni = 0xf,
2457
2458 /// Intel AVX2 and Intel Deep Learning Boost (Intel DL Boost)
2459 /// with 8-bit integer, float16 and bfloat16 support
2460 dnnl_cpu_isa_avx2_vnni_2 = 0x1f,
2461
2462 /// Intel AVX-512 subset for Intel Xeon Scalable processor family
2463 /// and Intel Core processor family.
2464 dnnl_cpu_isa_avx512_core = 0x27,
2465
2466 /// Intel AVX-512 and Intel Deep Learning Boost (Intel DL Boost) support
2467 /// for Intel Xeon Scalable processor family
2468 /// and Intel Core processor family.
2469 dnnl_cpu_isa_avx512_core_vnni = 0x67,
2470
2471 /// Intel AVX-512, Intel DL Boost and bfloat16 support
2472 /// for Intel Xeon Scalable processor family
2473 /// and Intel Core processor family.
2474 dnnl_cpu_isa_avx512_core_bf16 = 0xe7,
2475
2476 /// Intel AVX-512 with float16, Intel DL Boost and bfloat16 support
2477 /// for Intel Xeon Scalable processor family
2478 /// and Intel Core processor family.
2479 dnnl_cpu_isa_avx512_core_fp16 = 0x1ef,
2480
2481 /// Intel AVX-512 with float16, Intel DL Boost and bfloat16 support and
2482 /// Intel AMX with 8-bit integer and bfloat16 support
2483 dnnl_cpu_isa_avx512_core_amx = 0xfef,
2484
2485 /// Intel AVX-512 with float16, Intel DL Boost and bfloat16 support and
2486 /// Intel AMX with 8-bit integer, bfloat16 and float16 support
2487 dnnl_cpu_isa_avx512_core_amx_fp16 = 0x1fef,
2488} dnnl_cpu_isa_t;
2489
2490/// CPU ISA hints flags
2491typedef enum {
2492 /// No hints (use default features)
2493 dnnl_cpu_isa_no_hints = 0x0,
2494
2495 /// Prefer to exclusively use Ymm registers for computations
2496 dnnl_cpu_isa_prefer_ymm = 0x1,
2497} dnnl_cpu_isa_hints_t;
2498
2499/// @} dnnl_api_service
2500
2501/// @} dnnl_api
2502
2503#ifdef __cplusplus
2504}
2505#endif
2506
2507#endif /* ONEAPI_DNNL_TYPES_H */
2508