Deep Neural Network Library (DNNL)  1.91.0
Performance library for Deep Learning
dnnl.hpp
Go to the documentation of this file.
1 /*******************************************************************************
2 * Copyright 2016-2019 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 
19 
20 #ifndef DNNL_HPP
21 #define DNNL_HPP
22 
23 #include "dnnl_config.h"
24 
26 #include <algorithm>
27 #include <cstdlib>
28 #include <iterator>
29 #include <memory>
30 #include <string>
31 #include <vector>
32 #include <unordered_map>
33 
34 #include "dnnl.h"
35 
36 #if DNNL_GPU_RUNTIME == DNNL_RUNTIME_OCL
37 #include <CL/cl.h>
38 #endif
39 
40 #if DNNL_WITH_SYCL
41 #include <CL/sycl.hpp>
42 #endif
43 
45 
46 // __cpp_exceptions is referred from
47 // https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_exceptions.html
48 // gcc < 5 does not define __cpp_exceptions but __EXCEPTIONS,
49 // Microsoft C++ Compiler does not provide an option to disable exceptions
50 #ifndef DNNL_ENABLE_EXCEPTIONS
51 #if __cpp_exceptions || __EXCEPTIONS \
52  || (defined(_MSC_VER) && !defined(__clang__))
53 #define DNNL_ENABLE_EXCEPTIONS 1
54 #else
55 #define DNNL_ENABLE_EXCEPTIONS 0
56 #endif
57 #endif
58 
59 #if defined(__GNUC__) || defined(__clang__)
60 #define DNNL_TRAP() __builtin_trap()
61 #elif defined(__INTEL_COMPILER) || defined(_MSC_VER)
62 #define DNNL_TRAP() __debugbreak()
63 #else
64 #error "unknown compiler"
65 #endif
66 
67 #if DNNL_ENABLE_EXCEPTIONS
68 #define DNNL_THROW_ERROR(status, msg) throw error(status, msg)
69 #else
70 #include <cstdio>
71 #define DNNL_THROW_ERROR(status, msg) \
72  do { \
73  fputs(msg, stderr); \
74  DNNL_TRAP(); \
75  } while (0)
76 #endif
77 
80 
82 namespace dnnl {
83 
87 
92 struct error : public std::exception {
93  dnnl_status_t status;
94  const char *message;
95 
100  error(dnnl_status_t status, const char *message)
101  : status(status), message(message) {}
102 
104  const char *what() const noexcept override { return message; }
105 
111  static void wrap_c_api(dnnl_status_t status, const char *message) {
112  if (status != dnnl_success) DNNL_THROW_ERROR(status, message);
113  }
114 };
115 
117 template <typename T>
118 struct handle_traits {};
119 
133 template <typename T, typename traits = handle_traits<T>>
134 struct handle {
135 private:
136  static dnnl_status_t dummy_destructor(T) { return dnnl_success; }
137  std::shared_ptr<typename std::remove_pointer<T>::type> data_ {0};
138 
139 protected:
140  bool operator==(const T other) const { return other == data_.get(); }
141  bool operator!=(const T other) const { return !(*this == other); }
142 
143 public:
151  handle() = default;
152 
154  handle(const handle<T, traits> &) = default;
156  handle<T, traits> &operator=(const handle<T, traits> &) = default;
158  handle(handle<T, traits> &&) = default;
161 
167  explicit handle(T t, bool weak = false) { reset(t, weak); }
168 
174  void reset(T t, bool weak = false) {
175  data_.reset(t, weak ? &dummy_destructor : traits::destructor);
176  }
177 
183  T get(bool allow_empty = false) const {
184  T result = data_.get();
185  if (allow_empty == false && result == nullptr)
186  DNNL_THROW_ERROR(
187  dnnl_invalid_arguments, "object is not initialized");
188  return result;
189  }
190 
195  explicit operator T() const { return get(true); }
196 
200  explicit operator bool() const { return get(true) != nullptr; }
201 
208  bool operator==(const handle<T, traits> &other) const {
209  return other.data_.get() == data_.get();
210  }
211 
218  bool operator!=(const handle &other) const { return !(*this == other); }
219 };
220 
222 template <>
224  static constexpr auto destructor = &dnnl_memory_destroy;
225 };
226 
227 template <>
228 struct handle_traits<dnnl_primitive_desc_t> {
229  static constexpr auto destructor = &dnnl_primitive_desc_destroy;
230 };
231 
232 template <>
233 struct handle_traits<dnnl_primitive_t> {
234  static constexpr auto destructor = &dnnl_primitive_destroy;
235 };
236 
237 template <>
238 struct handle_traits<dnnl_primitive_desc_iterator_t> {
239  static constexpr auto destructor = &dnnl_primitive_desc_iterator_destroy;
240 };
242 
244 
245 struct stream;
246 struct error;
247 struct memory;
248 struct primitive_desc;
249 
254 
258 
260 struct primitive : public handle<dnnl_primitive_t> {
261  friend struct error;
262  friend struct stream;
263 
264 public:
267  enum class kind {
277  sum = dnnl_sum,
289  lrn = dnnl_lrn,
297  rnn = dnnl_rnn,
306  };
307 
308  using handle::handle;
309 
311  primitive() = default;
312 
317 
321  primitive(const primitive_desc &pd);
322 
328 
332  inline kind get_kind() const;
333 
346  void execute(
347  stream &stream, const std::unordered_map<int, memory> &args) const;
348 
349 #ifdef DNNL_SYCL_DPCPP
350  cl::sycl::event DNNL_API execute_sycl(stream &astream,
365  const std::unordered_map<int, memory> &args,
366  const std::vector<cl::sycl::event> &deps = {}) const;
367 #endif
368 };
369 
375  return static_cast<dnnl_primitive_kind_t>(kind);
376 }
377 
381  "could not get a primitive descriptor from a primitive");
382  return pd;
383 }
384 
387  // TODO (Roma): the code below is only needed because get_primitive_desc
388  // returns a C type.
391  pd, dnnl_query_primitive_kind, 0, (void *)&kind),
392  "could not get a primitive kind from a primitive descriptor");
393  return static_cast<dnnl::primitive::kind>(kind);
394 }
395 
397 
409 
411 enum class scratchpad_mode {
433 };
434 
440  return static_cast<dnnl_scratchpad_mode_t>(mode);
441 }
442 
444 enum class prop_kind {
468 };
469 
475  return static_cast<dnnl_prop_kind_t>(kind);
476 }
477 
479 enum class algorithm {
480  undef = dnnl_alg_kind_undef,
557 };
558 
563  return static_cast<dnnl_alg_kind_t>(algorithm);
564 }
565 
567 
570 
572 enum class normalization_flags : unsigned {
586 
602 
611 };
612 
617  return static_cast<dnnl_normalization_flags_t>(flags);
618 }
619 
621 
624 
626 enum class rnn_flags : unsigned {
629 };
630 
635  return static_cast<dnnl_rnn_flags_t>(flags);
636 }
637 
638 #define DNNL_DEFINE_BITMASK_OPS(enum_name) \
639  inline enum_name operator|(enum_name lhs, enum_name rhs) { \
640  return static_cast<enum_name>( \
641  static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs)); \
642  } \
643 \
644  inline enum_name operator&(enum_name lhs, enum_name rhs) { \
645  return static_cast<enum_name>( \
646  static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs)); \
647  } \
648 \
649  inline enum_name operator^(enum_name lhs, enum_name rhs) { \
650  return static_cast<enum_name>( \
651  static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs)); \
652  } \
653 \
654  inline enum_name &operator|=(enum_name &lhs, enum_name rhs) { \
655  lhs = static_cast<enum_name>( \
656  static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs)); \
657  return lhs; \
658  } \
659 \
660  inline enum_name &operator&=(enum_name &lhs, enum_name rhs) { \
661  lhs = static_cast<enum_name>( \
662  static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs)); \
663  return lhs; \
664  } \
665 \
666  inline enum_name &operator^=(enum_name &lhs, enum_name rhs) { \
667  lhs = static_cast<enum_name>( \
668  static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs)); \
669  return lhs; \
670  } \
671 \
672  inline enum_name operator~(enum_name rhs) { \
673  return static_cast<enum_name>(~static_cast<unsigned>(rhs)); \
674  }
675 
676 DNNL_DEFINE_BITMASK_OPS(normalization_flags)
677 DNNL_DEFINE_BITMASK_OPS(rnn_flags)
678 
679 enum class rnn_direction {
693 };
694 
699  return static_cast<dnnl_rnn_direction_t>(dir);
700 }
701 
703 
706 
713 enum class query {
716 
721 
726 
735 
740 
745 
748 
751 
784 
803 };
804 
809  return static_cast<dnnl_query_t>(query);
810 }
811 
813 
819 
821 template <>
822 struct handle_traits<dnnl_post_ops_t> {
823  static constexpr auto destructor = &dnnl_post_ops_destroy;
824 };
826 
834 struct post_ops : public handle<dnnl_post_ops_t> {
836 
838  post_ops() {
839  dnnl_post_ops_t result;
841  dnnl_post_ops_create(&result), "could not create post-ops");
842  reset(result);
843  }
844 
846  int len() const { return dnnl_post_ops_len(get()); }
847 
851  primitive::kind kind(int index) const {
853  "post-ops index is out of range");
854  return static_cast<primitive::kind>(
855  dnnl_post_ops_get_kind(get(), index));
856  }
857 
880  void append_sum(float scale = 1.) {
882  "could not append a sum post-op");
883  }
884 
889  void get_params_sum(int index, float &scale) const {
891  "could not get parameters of a sum post-op");
892  }
893 
909  void append_eltwise(
910  float scale, algorithm algorithm, float alpha, float beta) {
912  convert_to_c(algorithm), alpha, beta),
913  "could not append an elementwise post-op");
914  }
915 
923  void get_params_eltwise(int index, float &scale, algorithm &algorithm,
924  float &alpha, float &beta) const {
925  dnnl_alg_kind_t c_alg;
927  get(), index, &scale, &c_alg, &alpha, &beta),
928  "could not get parameters of an elementwise post-op");
929  algorithm = static_cast<dnnl::algorithm>(c_alg);
930  }
931 };
932 
934 template <>
935 struct handle_traits<dnnl_primitive_attr_t> {
936  static constexpr auto destructor = &dnnl_primitive_attr_destroy;
937 };
939 
943 struct primitive_attr : public handle<dnnl_primitive_attr_t> {
945 
947  primitive_attr() {
948  dnnl_primitive_attr_t result;
950  "could not create primitive attribute");
951  reset(result);
952  }
953 
960  : handle<dnnl_primitive_attr_t>(attr) {}
961 
964  dnnl_scratchpad_mode_t result;
967  "could not get primitive scratchpad mode attribute");
968  return scratchpad_mode(result);
969  }
970 
976  get(), dnnl::convert_to_c(mode)),
977  "could not set primitive scratchpad mode attribute");
978  }
979 
989  void get_output_scales(int &mask, std::vector<float> &scales) const {
990  dnnl_dim_t count;
991  int c_mask;
992  const float *c_scales;
994  get(), &count, &c_mask, &c_scales),
995  "could not get primitive output scales attribute");
996  scales.resize(count);
997 
998  mask = c_mask;
999  for (dnnl_dim_t c = 0; c < count; ++c)
1000  scales[c] = c_scales[c];
1001  }
1002 
1045  void set_output_scales(int mask, const std::vector<float> &scales) {
1047  (dnnl_dim_t)scales.size(), mask, &scales[0]),
1048  "could not set primitive output scales attribute");
1049  }
1050 
1062  void get_scales(int arg, int &mask, std::vector<float> &scales) const {
1063  dnnl_dim_t count;
1064  int c_mask;
1065  const float *c_scales;
1067  get(), arg, &count, &c_mask, &c_scales),
1068  "could not get scales");
1069  scales.resize(count);
1070 
1071  mask = c_mask;
1072  for (dnnl_dim_t c = 0; c < count; ++c)
1073  scales[c] = c_scales[c];
1074  }
1075 
1092  void set_scales(int arg, int mask, const std::vector<float> &scales) {
1094  (dnnl_dim_t)scales.size(), mask, &scales[0]),
1095  "could not set scales");
1096  }
1097 
1108  void get_zero_points(
1109  int arg, int &mask, std::vector<int32_t> &zero_points) const {
1110  dnnl_dim_t count;
1111  int c_mask;
1112  const int32_t *c_zero_points;
1114  get(), arg, &count, &c_mask, &c_zero_points),
1115  "could not get primitive zero points attribute");
1116  zero_points.resize(count);
1117 
1118  mask = c_mask;
1119  for (dnnl_dim_t c = 0; c < count; ++c)
1120  zero_points[c] = c_zero_points[c];
1121  }
1122 
1144  void set_zero_points(
1145  int arg, int mask, const std::vector<int32_t> &zero_points) {
1148  (dnnl_dim_t)zero_points.size(), mask, &zero_points[0]),
1149  "could not set primitive zero points attribute");
1150  }
1151 
1155  const post_ops get_post_ops() const {
1156  post_ops result;
1157  const_dnnl_post_ops_t c_result;
1159  "could not get primitive post-ops attribute");
1160  result.reset(const_cast<dnnl_post_ops_t>(c_result), true);
1161  return result;
1162  }
1163 
1172  void set_post_ops(const post_ops ops) {
1174  "could not set primitive post-ops attribute");
1175  }
1176 
1210  void set_rnn_data_qparams(float scale, float shift) {
1213  "could not get primitive RNN data quantization parameters "
1214  "attributes");
1215  }
1216 
1243  void set_rnn_weights_qparams(int mask, const std::vector<float> &scales) {
1245  get(), (int)scales.size(), mask, &scales[0]),
1246  "could not get primitive RNN weights quantization parameters "
1247  "attributes");
1248  }
1249 };
1250 
1252 
1254 
1265 
1267 template <>
1268 struct handle_traits<dnnl_engine_t> {
1269  static constexpr auto destructor = &dnnl_engine_destroy;
1270 };
1272 
1274 struct engine : public handle<dnnl_engine_t> {
1275  friend struct primitive;
1276  friend struct reorder;
1277 
1279  enum class kind {
1281  any = dnnl_any_engine,
1283  cpu = dnnl_cpu,
1285  gpu = dnnl_gpu,
1286  };
1287 
1288  using handle::handle;
1289 
1292  engine() = default;
1293 
1298  static size_t get_count(kind kind) {
1299  return dnnl_engine_get_count(convert_to_c(kind));
1300  }
1301 
1307  engine(kind kind, size_t index) {
1310  dnnl_engine_create(&engine, convert_to_c(kind), index),
1311  "could not create an engine");
1312  reset(engine);
1313  }
1314 
1315 #if DNNL_GPU_RUNTIME == DNNL_RUNTIME_OCL
1316  engine(kind kind, cl_device_id device, cl_context context) {
1325  &engine, convert_to_c(kind), device, context),
1326  "could not create an engine");
1327  reset(engine);
1328  }
1329 #endif
1330 
1331 #if DNNL_WITH_SYCL
1332  DNNL_API engine(kind akind, const cl::sycl::device &dev,
1338  const cl::sycl::context &ctx);
1339 #endif
1340 
1345  engine(const handle<dnnl_primitive_desc_t> &pd) {
1346  dnnl_engine_t c_engine;
1348  dnnl_primitive_desc_query(pd.get(),
1349  dnnl::convert_to_c(dnnl::query::engine), 0, &c_engine),
1350  "could not get an engine from a primitive_desc");
1351  reset(c_engine, true);
1352  }
1353 
1356  kind get_kind() const {
1359  "could not get kind of an engine");
1360  return static_cast<engine::kind>(kind);
1361  }
1362 
1363 #if DNNL_GPU_RUNTIME == DNNL_RUNTIME_OCL
1364  cl_context get_ocl_context() const {
1367  cl_context context = nullptr;
1369  "could not get an OpenCL context fron an engine");
1370  return context;
1371  }
1372 
1375  cl_device_id get_ocl_device() const {
1376  cl_device_id device = nullptr;
1378  "could not get an OpenCL device fron an engine");
1379  return device;
1380  }
1381 #endif
1382 
1383 #if DNNL_WITH_SYCL
1384  cl::sycl::context DNNL_API get_sycl_context() const;
1386 
1388  cl::sycl::device DNNL_API get_sycl_device() const;
1389 #endif
1390 
1396  template <class primitive_desc>
1397  static engine query(const primitive_desc &pd) {
1398  return query(pd, dnnl::query::engine);
1399  }
1400 
1401 private:
1402  static dnnl_engine_kind_t convert_to_c(kind kind) {
1403  return static_cast<dnnl_engine_kind_t>(kind);
1404  }
1405 
1406  template <class primitive_desc>
1407  static engine query(const primitive_desc &pd, dnnl::query what) {
1408  dnnl_engine_t c_engine;
1410  dnnl::convert_to_c(what), 0, &c_engine),
1411  "could not get an engine from a primitive_desc");
1412  return engine(c_engine, true);
1413  }
1414 };
1415 
1417 
1425 
1427 template <>
1428 struct handle_traits<dnnl_stream_t> {
1429  static constexpr auto destructor = &dnnl_stream_destroy;
1430 };
1432 
1434 struct stream : public handle<dnnl_stream_t> {
1435  using handle::handle;
1436 
1438  enum class flags : unsigned {
1448  };
1449 
1452  stream() = default;
1453 
1462  static_cast<dnnl_stream_flags_t>(flags)),
1463  "could not create a stream");
1464  reset(stream);
1465  }
1466 
1467 #if DNNL_GPU_RUNTIME == DNNL_RUNTIME_OCL
1468  stream(const engine &engine, cl_command_queue queue) {
1475  "could not create a stream");
1476  reset(stream);
1477  }
1478 
1481  cl_command_queue get_ocl_command_queue() const {
1482  cl_command_queue queue = nullptr;
1484  "could not get an OpenCL command queue from a stream");
1485  return queue;
1486  }
1487 #endif
1488 
1489 #if DNNL_WITH_SYCL
1490  DNNL_API stream(const engine &eng, cl::sycl::queue &aqueue);
1495 
1497  cl::sycl::queue DNNL_API get_sycl_queue() const;
1498 #endif
1499 
1502  stream &wait() {
1504  dnnl_stream_wait(get()), "could not wait on a stream");
1505  return *this;
1506  }
1507 };
1508 
1509 DNNL_DEFINE_BITMASK_OPS(stream::flags)
1510 
1511 
1600 
1607 struct memory : public handle<dnnl_memory_t> {
1609  typedef dnnl_dim_t dim;
1612  typedef std::vector<dim> dims;
1613 
1619  template <typename T>
1620  static void validate_dims(const std::vector<T> &v) {
1621  if (v.size() > DNNL_MAX_NDIMS)
1622  DNNL_THROW_ERROR(dnnl_invalid_arguments, "dimensions are invalid");
1623  }
1624 
1626  enum class data_type {
1630  f16 = dnnl_f16,
1632  bf16 = dnnl_bf16,
1634  f32 = dnnl_f32,
1636  s32 = dnnl_s32,
1638  s8 = dnnl_s8,
1640  u8 = dnnl_u8,
1641  };
1642 
1644  enum class format_kind {
1658  };
1659 
1700  enum class format_tag {
1706 
1708  a = dnnl_a,
1709 
1711  ab = dnnl_ab,
1713  ba = dnnl_ba,
1714 
1716  abc = dnnl_abc,
1718  acb = dnnl_acb,
1720  bac = dnnl_bac,
1722  bca = dnnl_bca,
1724  cba = dnnl_cba,
1725 
1727  abcd = dnnl_abcd,
1729  acdb = dnnl_acdb,
1731  bacd = dnnl_bacd,
1733  bcda = dnnl_bcda,
1735  cdba = dnnl_cdba,
1736 
1738  abcde = dnnl_abcde,
1740  abdec = dnnl_abdec,
1742  acbde = dnnl_acbde,
1744  acdeb = dnnl_acdeb,
1746  bcdea = dnnl_bcdea,
1748  cdeba = dnnl_cdeba,
1750  decab = dnnl_decab,
1752  abcdef = dnnl_abcdef,
1754  acbdef = dnnl_acbdef,
1756  defcab = dnnl_defcab,
1757 
1759  x = a,
1761  nc = ab,
1763  cn = ba,
1765  tn = ab,
1767  nt = ba,
1769  ncw = abc,
1771  nwc = acb,
1773  nchw = abcd,
1775  nhwc = acdb,
1777  chwn = bcda,
1779  ncdhw = abcde,
1781  ndhwc = acdeb,
1782 
1784  oi = ab,
1786  io = ba,
1788  oiw = abc,
1790  owi = acb,
1792  wio = cba,
1794  iwo = bca,
1796  oihw = abcd,
1798  hwio = cdba,
1800  ohwi = acdb,
1802  ihwo = bcda,
1804  iohw = bacd,
1806  oidhw = abcde,
1808  dhwio = cdeba,
1810  odhwi = acdeb,
1812  idhwo = bcdea,
1813 
1815  goiw = abcd,
1817  goihw = abcde,
1819  hwigo = decab,
1821  giohw = acbde,
1823  goidhw = abcdef,
1825  giodhw = acbdef,
1827  dhwigo = defcab,
1828 
1830  tnc = abc,
1832  ntc = bac,
1835  ldnc = abcd,
1842  ldigo = abcde,
1849  ldgoi = abdec,
1856  ldgo = abcd,
1857 
1858  // Opaque blocked formats
1859 
1860  Abc16a = dnnl_Abc16a,
1861  ABc16a16b = dnnl_ABc16a16b,
1862  ABc4a4b = dnnl_ABc4a4b,
1863  aBc16b = dnnl_aBc16b,
1864  ABc16b16a = dnnl_ABc16b16a,
1865  Abc4a = dnnl_Abc4a,
1866  aBc4b = dnnl_aBc4b,
1867  ABc4b16a4b = dnnl_ABc4b16a4b,
1868  ABc2b8a4b = dnnl_ABc2b8a4b,
1869  ABc4b4a = dnnl_ABc4b4a,
1870  ABc8a16b2a = dnnl_ABc8a16b2a,
1871  ABc8a8b = dnnl_ABc8a8b,
1872  aBc8b = dnnl_aBc8b,
1873  ABc8b16a2b = dnnl_ABc8b16a2b,
1874  ABc8b8a = dnnl_ABc8b8a,
1875  Abcd16a = dnnl_Abcd16a,
1876  ABcd16a16b = dnnl_ABcd16a16b,
1877  aBcd16b = dnnl_aBcd16b,
1878  ABcd16b16a = dnnl_ABcd16b16a,
1879  aBCd16b16c = dnnl_aBCd16b16c,
1880  aBCd16c16b = dnnl_aBCd16c16b,
1881  Abcd4a = dnnl_Abcd4a,
1882  aBcd4b = dnnl_aBcd4b,
1883  ABcd4b16a4b = dnnl_ABcd4b16a4b,
1884  ABcd2b8a4b = dnnl_ABcd2b8a4b,
1885  ABcd4b4a = dnnl_ABcd4b4a,
1886  ABcd4a4b = dnnl_ABcd4a4b,
1887  aBCd4c16b4c = dnnl_aBCd4c16b4c,
1888  aBCd2c8b4c = dnnl_aBCd2c8b4c,
1889  aBCd4c4b = dnnl_aBCd4c4b,
1890  aBCd4b4c = dnnl_aBCd4b4c,
1891  ABcd8a16b2a = dnnl_ABcd8a16b2a,
1892  ABcd8a8b = dnnl_ABcd8a8b,
1894  aBcd8b = dnnl_aBcd8b,
1895  ABcd8b16a2b = dnnl_ABcd8b16a2b,
1896  aBCd8b16c2b = dnnl_aBCd8b16c2b,
1899  aBCd8b8c = dnnl_aBCd8b8c,
1900  aBCd8c16b2c = dnnl_aBCd8c16b2c,
1901  aBCd8c8b = dnnl_aBCd8c8b,
1902  Abcde16a = dnnl_Abcde16a,
1903  ABcde16a16b = dnnl_ABcde16a16b,
1904  aBcde16b = dnnl_aBcde16b,
1905  ABcde16b16a = dnnl_ABcde16b16a,
1906  aBCde16b16c = dnnl_aBCde16b16c,
1907  aBCde16c16b = dnnl_aBCde16c16b,
1908  aBCde2c8b4c = dnnl_aBCde2c8b4c,
1909  Abcde4a = dnnl_Abcde4a,
1910  aBcde4b = dnnl_aBcde4b,
1911  ABcde4b4a = dnnl_ABcde4b4a,
1912  ABcde4a4b = dnnl_ABcde4a4b,
1913  aBCde4b4c = dnnl_aBCde4b4c,
1914  aBCde4c16b4c = dnnl_aBCde4c16b4c,
1915  aBCde4c4b = dnnl_aBCde4c4b,
1916  Abcde8a = dnnl_Abcde8a,
1917  ABcde8a8b = dnnl_ABcde8a8b,
1918  aBcde8b = dnnl_aBcde8b,
1919  ABcde8b16a2b = dnnl_ABcde8b16a2b,
1920  ABcde4b16a4b = dnnl_ABcde4b16a4b,
1921  ABcde2b8a4b = dnnl_ABcde2b8a4b,
1922  aBCde8b16c2b = dnnl_aBCde8b16c2b,
1923  ABcde8b8a = dnnl_ABcde8b8a,
1924  aBCde8b8c = dnnl_aBCde8b8c,
1925  ABcd4a8b8a4b = dnnl_ABcd4a8b8a4b,
1926  ABcd2a8b8a2b = dnnl_ABcd2a8b8a2b,
1927  aBCde4b8c8b4c = dnnl_aBCde4b8c8b4c,
1928  aBCde2b8c8b2c = dnnl_aBCde2b8c8b2c,
1929  aBCde8c16b2c = dnnl_aBCde8c16b2c,
1930  aBCde8c8b = dnnl_aBCde8c8b,
1931  aBcdef16b = dnnl_aBcdef16b,
1932  aBCdef16b16c = dnnl_aBCdef16b16c,
1933  aBCdef16c16b = dnnl_aBCdef16c16b,
1934  aBcdef4b = dnnl_aBcdef4b,
1935  aBCdef4c4b = dnnl_aBCdef4c4b,
1936  aBCdef4b4c = dnnl_aBCdef4b4c,
1937  aBCdef8b8c = dnnl_aBCdef8b8c,
1938  aBCdef8c16b2c = dnnl_aBCdef8c16b2c,
1939  aBCdef4c16b4c = dnnl_aBCdef4c16b4c,
1940  aBCdef8c8b = dnnl_aBCdef8c8b,
1941  aBdc16b = dnnl_aBdc16b,
1942  aBdc4b = dnnl_aBdc4b,
1943  aBdc8b = dnnl_aBdc8b,
1944  aBdec16b = dnnl_aBdec16b,
1945  aBdec4b = dnnl_aBdec4b,
1946  aBdec8b = dnnl_aBdec8b,
1947  aBdefc16b = dnnl_aBdefc16b,
1948  aCBdef16c16b = dnnl_aCBdef16c16b,
1949  aBdefc4b = dnnl_aBdefc4b,
1950  aBdefc8b = dnnl_aBdefc8b,
1951  Acb16a = dnnl_Acb16a,
1952  Acb4a = dnnl_Acb4a,
1953  Acb8a = dnnl_Acb8a,
1954  aCBd16b16c = dnnl_aCBd16b16c,
1955  aCBd16c16b = dnnl_aCBd16c16b,
1956  aCBde16b16c = dnnl_aCBde16b16c,
1957  aCBde16c16b = dnnl_aCBde16c16b,
1958  Acdb16a = dnnl_Acdb16a,
1959  Acdb4a = dnnl_Acdb4a,
1960  Acdb8a = dnnl_Acdb8a,
1961  Acdeb16a = dnnl_Acdeb16a,
1962  Acdeb4a = dnnl_Acdeb4a,
1963  Acdeb8a = dnnl_Acdeb8a,
1964  BAc16a16b = dnnl_BAc16a16b,
1965  BAc16b16a = dnnl_BAc16b16a,
1966  BAcd16a16b = dnnl_BAcd16a16b,
1967  BAcd16b16a = dnnl_BAcd16b16a,
1968  ABcd32a32b = dnnl_ABcd32a32b,
1969  BAcde16b16 = dnnl_BAcde16b16a,
1970  aBdec32b = dnnl_aBdec32b,
1971  Abcdef16a = dnnl_Abcdef16a,
1972  Acdb32a = dnnl_Acdb32a,
1973  format_tag_last = dnnl_format_tag_last,
1974 
1975  nCdhw16c = dnnl_nCdhw16c,
1976  nCdhw4c = dnnl_nCdhw4c,
1977  nCdhw8c = dnnl_nCdhw8c,
1978  nChw16c = dnnl_nChw16c,
1979  nChw4c = dnnl_nChw4c,
1980  nChw8c = dnnl_nChw8c,
1981  nCw16c = dnnl_nCw16c,
1982  nCw4c = dnnl_nCw4c,
1983  nCw8c = dnnl_nCw8c,
1984  NCw16n16c = dnnl_NCw16n16c,
1985  NChw16n16c = dnnl_NChw16n16c,
1986  NCdhw16n16c = dnnl_NCdhw16n16c,
1987  NChw32n32c = dnnl_NChw32n32c,
1988  IOhw16i16o = dnnl_IOhw16i16o,
1989  Ohwi32o = dnnl_Ohwi32o,
1990  IOdhw16i16o = dnnl_IOdhw16i16o,
1991  gIOhw16i16o = dnnl_gIOhw16i16o,
1992  gOhwi32o = dnnl_gOhwi32o,
1993  Goidhw16g = dnnl_Goidhw16g,
1994  IOw16o16i = dnnl_IOw16o16i,
1995  OIw16i16o = dnnl_OIw16i16o,
1996  IOw16i16o = dnnl_IOw16i16o,
1997  gIOw16i16o = dnnl_gIOw16i16o,
1998  OIw16o16i = dnnl_OIw16o16i,
1999  Oiw16o = dnnl_Oiw16o,
2000  OIw4i16o4i = dnnl_OIw4i16o4i,
2001  OIw2i8o4i = dnnl_OIw2i8o4i,
2002  OIw4i4o = dnnl_OIw4i4o,
2003  OIw4o4i = dnnl_OIw4o4i,
2004  Oiw4o = dnnl_Oiw4o,
2005  OIw8i16o2i = dnnl_OIw8i16o2i,
2006  OIw8i8o = dnnl_OIw8i8o,
2007  OIw8o16i2o = dnnl_OIw8o16i2o,
2008  OIw8o8i = dnnl_OIw8o8i,
2009  Owi16o = dnnl_Owi16o,
2010  OwI16o2i = dnnl_OwI16o2i,
2011  Owi4o = dnnl_Owi4o,
2012  Owi8o = dnnl_Owi8o,
2013  IOhw16o16i = dnnl_IOhw16o16i,
2014  Ohwi16o = dnnl_Ohwi16o,
2015  OhwI16o2i = dnnl_OhwI16o2i,
2016  Ohwi4o = dnnl_Ohwi4o,
2017  Ohwi8o = dnnl_Ohwi8o,
2018  OIhw16i16o = dnnl_OIhw16i16o,
2019  OIhw16o16i = dnnl_OIhw16o16i,
2020  Oihw16o = dnnl_Oihw16o,
2021  OIhw4i16o4i = dnnl_OIhw4i16o4i,
2022  OIhw4i4o = dnnl_OIhw4i4o,
2023  OIhw4o4i = dnnl_OIhw4o4i,
2024  Oihw4o = dnnl_Oihw4o,
2025  OIhw8i16o2i = dnnl_OIhw8i16o2i,
2026  OIhw8i8o = dnnl_OIhw8i8o,
2027  OIhw8o16i2o = dnnl_OIhw8o16i2o,
2028  OIhw8o8i = dnnl_OIhw8o8i,
2029  OIhw2i8o4i = dnnl_OIhw2i8o4i,
2030  Odhwi16o = dnnl_Odhwi16o,
2031  OdhwI16o2i = dnnl_OdhwI16o2i,
2032  Odhwi4o = dnnl_Odhwi4o,
2033  Odhwi8o = dnnl_Odhwi8o,
2034  OIdhw16i16o = dnnl_OIdhw16i16o,
2035  OIdhw16o16i = dnnl_OIdhw16o16i,
2036  Oidhw16o = dnnl_Oidhw16o,
2037  OIdhw4i4o = dnnl_OIdhw4i4o,
2038  OIdhw4o4i = dnnl_OIdhw4o4i,
2039  Oidhw4o = dnnl_Oidhw4o,
2040  OIdhw8i16o2i = dnnl_OIdhw8i16o2i,
2041  OIdhw4i16o4i = dnnl_OIdhw4i16o4i,
2042  OIdhw2i8o4i = dnnl_OIdhw2i8o4i,
2043  OIdhw8i8o = dnnl_OIdhw8i8o,
2044  OIdhw8o8i = dnnl_OIdhw8o8i,
2045  gIOw16o16i = dnnl_gIOw16o16i,
2046  gOIw16i16o = dnnl_gOIw16i16o,
2047  gOIw16o16i = dnnl_gOIw16o16i,
2048  gOiw16o = dnnl_gOiw16o,
2049  gOIw4i16o4i = dnnl_gOIw4i16o4i,
2050  gOIw2i8o4i = dnnl_gOIw2i8o4i,
2051  gOIw4i4o = dnnl_gOIw4i4o,
2052  gOIw4o4i = dnnl_gOIw4o4i,
2053  gOiw4o = dnnl_gOiw4o,
2054  gOIw8i16o2i = dnnl_gOIw8i16o2i,
2055  gOIw8i8o = dnnl_gOIw8i8o,
2056  gOIw8o16i2o = dnnl_gOIw8o16i2o,
2057  gOIw8o8i = dnnl_gOIw8o8i,
2058  gOwi16o = dnnl_gOwi16o,
2059  gOwI16o2i = dnnl_gOwI16o2i,
2060  gOwi4o = dnnl_gOwi4o,
2061  gOwi8o = dnnl_gOwi8o,
2062  Goiw8g = dnnl_Goiw8g,
2063  Goiw16g = dnnl_Goiw16g,
2064  gIOhw16o16i = dnnl_gIOhw16o16i,
2065  gOhwi16o = dnnl_gOhwi16o,
2066  gOhwI16o2i = dnnl_gOhwI16o2i,
2067  gOhwi4o = dnnl_gOhwi4o,
2068  gOhwi8o = dnnl_gOhwi8o,
2069  Goihw16g = dnnl_Goihw16g,
2070  gOIhw16i16o = dnnl_gOIhw16i16o,
2071  gOIhw16o16i = dnnl_gOIhw16o16i,
2072  gOihw16o = dnnl_gOihw16o,
2073  gOIhw4i16o4i = dnnl_gOIhw4i16o4i,
2074  gOIhw2i8o4i = dnnl_gOIhw2i8o4i,
2075  gOIhw4i4o = dnnl_gOIhw4i4o,
2076  gOIhw4o4i = dnnl_gOIhw4o4i,
2077  gOihw4o = dnnl_gOihw4o,
2078  Goihw8g = dnnl_Goihw8g,
2079  gOIhw8i16o2i = dnnl_gOIhw8i16o2i,
2080  gOIhw8i8o = dnnl_gOIhw8i8o,
2081  gOIhw8o16i2o = dnnl_gOIhw8o16i2o,
2082  OIhw4o8i8o4i = dnnl_OIhw4o8i8o4i,
2083  OIhw2o8i8o2i = dnnl_OIhw2o8i8o2i,
2084  gOIhw4o8i8o4i = dnnl_gOIhw4o8i8o4i,
2085  gOIhw2o8i8o2i = dnnl_gOIhw2o8i8o2i,
2086  gOIhw8o8i = dnnl_gOIhw8o8i,
2087  gIOdhw16i16o = dnnl_gIOdhw16i16o,
2088  gOdhwi16o = dnnl_gOdhwi16o,
2089  gOdhwI16o2i = dnnl_gOdhwI16o2i,
2090  gOdhwi4o = dnnl_gOdhwi4o,
2091  gOdhwi8o = dnnl_gOdhwi8o,
2092  gOIdhw16i16o = dnnl_gOIdhw16i16o,
2093  gOIdhw16o16i = dnnl_gOIdhw16o16i,
2094  gOidhw16o = dnnl_gOidhw16o,
2095  gOIdhw4i4o = dnnl_gOIdhw4i4o,
2096  gOIdhw4o4i = dnnl_gOIdhw4o4i,
2097  gOidhw4o = dnnl_gOidhw4o,
2098  gOIdhw8i16o2i = dnnl_gOIdhw8i16o2i,
2099  gOIdhw4i16o4i = dnnl_gOIdhw4i16o4i,
2100  gOIdhw2i8o4i = dnnl_gOIdhw2i8o4i,
2101  gOIdhw8i8o = dnnl_gOIdhw8i8o,
2102  gOIdhw8o8i = dnnl_gOIdhw8o8i,
2103  };
2104 
2106  struct desc {
2107  friend struct memory;
2110 
2113  desc() : data() {}
2114 
2130  dnnl_memory_desc_init_by_tag(&data, (int)dims.size(),
2131  dims.size() == 0 ? nullptr : &dims[0],
2133  "could not construct a memory descriptor using a format "
2134  "tag");
2135  }
2136 
2149  const memory::dims &strides) {
2153  dims.size() == 0 ? nullptr : &dims[0],
2155  strides.size() == 0 ? nullptr : &strides[0]),
2156  "could not construct a memory descriptor using strides");
2157  }
2158 
2162  desc(const dnnl_memory_desc_t &data) : data(data) {}
2163 
2166  //
2172  const memory::dims &dims, const memory::dims &offsets) const {
2173  dnnl_memory_desc_t sub_md;
2175  &sub_md, &data, &dims[0], &offsets[0]),
2176  "could not construct a sub-memory");
2177  return desc(sub_md);
2178  }
2179 
2181  //
2185  desc reshape(const memory::dims &dims) const {
2186  dnnl_memory_desc_t out_md;
2188  (int)dims.size(), &dims[0]),
2189  "could not reshape a memory descriptor");
2190  return desc(out_md);
2191  }
2192 
2197  memory::dims dims() const {
2198  return memory::dims(data.dims, data.dims + data.ndims);
2199  }
2200 
2203  memory::data_type data_type() const {
2204  return static_cast<memory::data_type>(data.data_type);
2205  }
2206 
2211  size_t get_size() const { return dnnl_memory_desc_get_size(&data); }
2212 
2216  bool is_zero() const { return data.ndims == 0; }
2217 
2222  bool operator==(const desc &other) const {
2223  return dnnl_memory_desc_equal(&data, &other.data) != 0;
2224  }
2225 
2230  bool operator!=(const desc &other) const { return !operator==(other); }
2231  };
2232 
2233  // Default constructor.
2234  //
2235  // Constructs an empty memory object, which can be used to indicate absence
2236  // of a parameter.
2237  memory() = default;
2238 
2239 #if DNNL_WITH_SYCL
2240  memory(const desc &md, const engine &engine, void *ahandle)
2246 #ifdef DNNL_USE_DPCPP_USM
2247  : memory(with_sycl_tag {}, md, engine, ahandle, true) {
2248  }
2249 #else
2250  : memory(with_sycl_tag {}, md, engine, ahandle, false) {
2251  }
2252 #endif
2253 #else
2254  memory(const desc &md, const engine &engine, void *handle) {
2261  dnnl_memory_t result;
2263  dnnl_memory_create(&result, &md.data, engine.get(), handle),
2264  "could not create a memory object");
2265  reset(result);
2266  }
2267 #endif
2268 
2269 #if DNNL_WITH_SYCL && defined(DNNL_USE_SYCL_BUFFERS)
2270  template <typename T, int ndims = 1>
2276  memory(const desc &md, const engine &engine,
2277  cl::sycl::buffer<T, ndims> &buf)
2278  : memory(md, engine, DNNL_MEMORY_NONE) {
2279  set_sycl_buffer(buf);
2280  }
2281 #endif
2282 
2289  memory(const desc &md, const engine &engine)
2290  : memory(md, engine, DNNL_MEMORY_ALLOCATE) {}
2291 
2293  desc get_desc() const {
2294  const dnnl_memory_desc_t *cdesc;
2296  "could not get a memory descriptor from a memory object");
2297  return desc(*cdesc);
2298  }
2299 
2301  engine get_engine() const {
2302  dnnl_engine_t c_engine;
2304  "could not get an engine from a memory object");
2305  return engine(c_engine, true);
2306  }
2307 
2311  void *get_data_handle() const {
2312  void *handle;
2314  "could not get a native handle from a memory object");
2315  return handle;
2316  }
2317 
2322  void set_data_handle(void *handle) const {
2324  "could not set native handle of a memory object");
2325  }
2326 
2346  template <typename T = void>
2347  T *map_data() const {
2348  void *mapped_ptr;
2349  error::wrap_c_api(dnnl_memory_map_data(get(), &mapped_ptr),
2350  "could not map memory object data");
2351  return static_cast<T *>(mapped_ptr);
2352  }
2353 
2365  void unmap_data(void *mapped_ptr) const {
2367  "could not unmap memory object data");
2368  }
2369 
2370 #if DNNL_GPU_RUNTIME == DNNL_RUNTIME_OCL
2371  cl_mem get_ocl_mem_object() const {
2373  cl_mem mem_object;
2375  "could not get OpenCL buffer object from a memory object");
2376  return mem_object;
2377  }
2378 
2384  void set_ocl_mem_object(cl_mem mem_object) {
2386  "could not set OpenCL buffer object from a memory object");
2387  }
2388 #endif
2389 
2390 #if DNNL_WITH_SYCL && defined(DNNL_USE_SYCL_BUFFERS)
2391  template <typename T, int ndims = 1>
2396  cl::sycl::buffer<T, ndims> get_sycl_buffer(size_t *offset = nullptr) const {
2397  static_assert(ndims == 1, "only 1D buffers supported");
2398 
2399  void *handle_ptr;
2401  "could not get SYCL buffer object");
2402 
2403  // XXX: workaround for ComputeCpp
2404  // ComputeCpp fails to construct zero-range buffer
2405  if (!handle_ptr)
2406  return cl::sycl::buffer<T, ndims>(cl::sycl::range<1>(1));
2407 
2408  auto &buf_u8 = *static_cast<cl::sycl::buffer<uint8_t, 1> *>(handle_ptr);
2409  if (offset) *offset = 0;
2410  auto range = cl::sycl::range<1>(buf_u8.get_size() / sizeof(T));
2411  return buf_u8.reinterpret<T, 1>(range);
2412  }
2413 
2419  template <typename T, int ndims>
2420  void set_sycl_buffer(cl::sycl::buffer<T, ndims> &buf) {
2421  auto range = cl::sycl::range<1>(buf.get_size());
2422  auto buf_u8 = buf.template reinterpret<uint8_t, 1>(range);
2424  get(), static_cast<void *>(&buf_u8)),
2425  "could not set SYCL buffer object");
2426  }
2427 #endif
2428 
2430  return static_cast<dnnl_data_type_t>(data_type);
2431  }
2432  static dnnl_format_tag_t convert_to_c(format_tag format) {
2433  return static_cast<dnnl_format_tag_t>(format);
2434  }
2435 
2436 private:
2437 #if DNNL_WITH_SYCL
2438  struct with_sycl_tag {};
2439 
2440  DNNL_API memory(with_sycl_tag, const desc &md, const engine &engine,
2441  void *ahandle, bool is_usm);
2442 #endif
2443 };
2444 
2445 inline bool operator==(dnnl_data_type_t a, memory::data_type b) {
2446  return a == memory::convert_to_c(b);
2447 }
2448 inline bool operator!=(dnnl_data_type_t a, memory::data_type b) {
2449  return !(a == b);
2450 }
2451 inline bool operator==(memory::data_type a, dnnl_data_type_t b) {
2452  return b == a;
2453 }
2454 inline bool operator!=(memory::data_type a, dnnl_data_type_t b) {
2455  return !(a == b);
2456 }
2457 
2458 inline bool operator==(dnnl_format_tag_t a, memory::format_tag b) {
2459  return a == memory::convert_to_c(b);
2460 }
2461 inline bool operator!=(dnnl_format_tag_t a, memory::format_tag b) {
2462  return !(a == b);
2463 }
2464 inline bool operator==(memory::format_tag a, dnnl_format_tag_t b) {
2465  return b == a;
2466 }
2467 inline bool operator!=(memory::format_tag a, dnnl_format_tag_t b) {
2468  return !(a == b);
2469 }
2470 
2472 
2475 
2478 
2480 struct primitive_desc_base : public handle<dnnl_primitive_desc_t> {
2482 
2484  primitive_desc_base() = default;
2485 
2487  engine get_engine() const { return engine::query(*this); }
2488 
2490  const char *impl_info_str() const {
2491  const char *res;
2493  get(), dnnl_query_impl_info_str, 0, &res),
2494  "could not retrieve implementation info string from a "
2495  "primitive descriptor");
2496  return res;
2497  }
2498 
2500  memory::dim query_s64(query what) const {
2501  memory::dim res;
2503  get(), dnnl::convert_to_c(what), 0, &res);
2504  return status == dnnl_success ? res : 0;
2505  }
2506 
2521  memory::desc query_md(query what, int idx = 0) const {
2522  std::vector<query> valid_q {query::src_md, query::diff_src_md,
2526  if (!std::any_of(valid_q.cbegin(), valid_q.cend(),
2527  [=](query q) { return what == q; }))
2528  DNNL_THROW_ERROR(dnnl_invalid_arguments,
2529  "memory descriptor query is invalid");
2530 
2532  get(), dnnl::convert_to_c(what), idx);
2533  return cdesc ? memory::desc(*cdesc) : memory::desc();
2534  }
2535 
2541  memory::desc src_desc(int idx) const {
2542  return query_md(query::src_md, idx);
2543  }
2544 
2550  memory::desc dst_desc(int idx) const {
2551  return query_md(query::dst_md, idx);
2552  }
2553 
2559  memory::desc weights_desc(int idx) const {
2560  return query_md(query::weights_md, idx);
2561  }
2562 
2568  memory::desc diff_src_desc(int idx) const {
2569  return query_md(query::diff_src_md, idx);
2570  }
2571 
2577  memory::desc diff_dst_desc(int idx) const {
2578  return query_md(query::diff_dst_md, idx);
2579  }
2580 
2586  memory::desc diff_weights_desc(int idx) const {
2587  return query_md(query::diff_weights_md, idx);
2588  }
2589 
2590  // Separate versions without the index argument for documentation
2591  // purposes.
2592 
2597  memory::desc src_desc() const { return src_desc(0); }
2598 
2603  memory::desc dst_desc() const { return dst_desc(0); }
2604 
2609  memory::desc weights_desc() const { return weights_desc(0); }
2610 
2615  memory::desc diff_src_desc() const { return diff_src_desc(0); }
2616 
2621  memory::desc diff_dst_desc() const { return diff_dst_desc(0); }
2622 
2627  memory::desc diff_weights_desc() const { return diff_weights_desc(0); }
2628 
2633  memory::desc workspace_desc() const {
2634  return query_md(query::workspace_md, 0);
2635  }
2636 
2642  memory::desc scratchpad_desc() const {
2643  return query_md(query::scratchpad_md, 0);
2644  }
2645 
2648  engine scratchpad_engine() const {
2649  dnnl_engine_t c_engine;
2652  0, &c_engine),
2653  "could not retrieve scratchpad engine from a primitive "
2654  "descriptor");
2655  return engine(c_engine, true);
2656  }
2657 
2660  primitive_attr get_primitive_attr() const {
2661  const_dnnl_primitive_attr_t const_c_attr;
2663  "could not get attributes from a primitive descriptor");
2664  dnnl_primitive_attr_t c_attr;
2665  error::wrap_c_api(dnnl_primitive_attr_clone(&c_attr, const_c_attr),
2666  "could not clone primitive attributes");
2667  return primitive_attr(c_attr);
2668  }
2669 
2673  dnnl_primitive_kind_t kind;
2675  dnnl_query_primitive_kind, 0, (void *)&kind),
2676  "could not get primitive kind from a primitive descriptor");
2677  return static_cast<dnnl::primitive::kind>(kind);
2678  }
2679 
2680 protected:
2685  dnnl_primitive_desc_t new_pd;
2687  "could not clone a primitive descriptor");
2688  reset(new_pd);
2689  }
2690 
2706  : primitive_desc_base(pd, prim_kind, dnnl::prop_kind::undef) {}
2707 
2721  : primitive_desc_base(pd, prim_kind, prop_kind, prop_kind) {}
2722 
2737  dnnl::primitive::kind prim_kind, dnnl::prop_kind prop_kind1,
2738  dnnl::prop_kind prop_kind2) {
2739  // It is OK to pass an empty primitive descriptor
2740  if (pd == nullptr) return;
2741 
2742  dnnl_status_t rc;
2743 
2744  dnnl_primitive_kind_t c_prim_kind = convert_to_c(prim_kind);
2745  dnnl_prop_kind_t c_prop_kind1 = convert_to_c(prop_kind1);
2746  dnnl_prop_kind_t c_prop_kind2 = convert_to_c(prop_kind2);
2747 
2748  // Check that primitive kind matches
2749  dnnl_primitive_kind_t pd_kind;
2751  pd, dnnl_query_primitive_kind, 0, (void *)&pd_kind);
2753  rc, "could not get primitive kind from a primitive descriptor");
2754  if (pd_kind != c_prim_kind)
2755  DNNL_THROW_ERROR(dnnl_invalid_arguments,
2756  "primitive descriptor operation kind mismatch");
2757 
2758  // Check that propagation kind matches
2759  dnnl_prop_kind_t pd_prop_kind;
2761  pd, dnnl_query_prop_kind, 0, (void *)&pd_prop_kind);
2762 
2763  // Something went wrong
2764  if (rc != dnnl_success && rc != dnnl_unimplemented)
2765  DNNL_THROW_ERROR(dnnl_invalid_arguments,
2766  "could not get propagation kind from the primitive "
2767  "descriptor");
2768 
2769  // Everything is fine
2770  if ((rc == dnnl_unimplemented && c_prop_kind1 == dnnl_prop_kind_undef)
2771  || (rc == dnnl_success
2772  && (pd_prop_kind == c_prop_kind1
2773  || pd_prop_kind == c_prop_kind2))) {
2774  reset_with_clone(pd);
2775  return;
2776  }
2777 
2778  // We could get the propagation kind but there is a mismatch
2779  DNNL_THROW_ERROR(dnnl_invalid_arguments,
2780  "primitive descriptor propagation kind mismatch");
2781  }
2782 
2783 protected:
2784  using base = primitive_desc_base;
2785 };
2786 
2788 
2797 
2799 struct reorder : public primitive {
2801  struct primitive_desc : public primitive_desc_base {
2803 
2805  primitive_desc() = default;
2806 
2822  primitive_desc(const engine &src_engine, const memory::desc &src_md,
2823  const engine &dst_engine, const memory::desc &dst_md,
2824  const primitive_attr &attr = primitive_attr()) {
2825  dnnl_primitive_desc_t result;
2828  src_engine.get(), &dst_md.data, dst_engine.get(),
2829  attr.get()),
2830  "could not create a primitive descriptor for a reorder "
2831  "primitive");
2832  reset(result);
2833  }
2834 
2842  primitive_desc(const memory &src, const memory &dst,
2843  const primitive_attr &attr = primitive_attr()) {
2844  dnnl_primitive_desc_t result;
2845  auto src_md = src.get_desc();
2846  auto dst_md = dst.get_desc();
2849  src.get_engine().get(), &dst_md.data,
2850  dst.get_engine().get(), attr.get()),
2851  "could not create a primitive descriptor for a reorder "
2852  "primitive");
2853  reset(result);
2854  }
2855 
2862 
2865  engine get_src_engine() const {
2867  }
2868 
2871  engine get_dst_engine() const {
2873  }
2874 
2876  memory::desc src_desc() const { return base::src_desc(0); }
2877 
2879  memory::desc dst_desc() const { return base::dst_desc(0); }
2880  };
2881 
2883  reorder() = default;
2884 
2887  reorder(const primitive_desc &pd) : primitive(pd.get()) {}
2888 
2896  reorder(const memory &src, const memory &dst,
2897  const primitive_attr &attr = primitive_attr())
2898  : primitive(primitive_desc(src, dst, attr).get()) {}
2899 
2900  using primitive::execute;
2901 
2908  void execute(stream stream, memory &src, memory &dst) const {
2909  primitive::execute(stream, {{DNNL_ARG_FROM, src}, {DNNL_ARG_TO, dst}});
2910  }
2911 
2912 #ifdef DNNL_SYCL_DPCPP
2913  using primitive::execute_sycl;
2914 
2915  cl::sycl::event execute_sycl(stream &astream, memory &src, memory &dst,
2916  const std::vector<cl::sycl::event> &deps = {}) const {
2917  return primitive::execute_sycl(astream,
2918  {{DNNL_ARG_FROM, src},
2919  { DNNL_ARG_TO,
2920  dst }},
2921  deps);
2922  }
2923 #endif
2924 };
2925 
2927 
2935 
2937 inline std::vector<dnnl_memory_desc_t> convert_to_c(
2938  const std::vector<memory::desc> &mems) {
2939  std::vector<dnnl_memory_desc_t> c_mems;
2940  c_mems.reserve(mems.size());
2941  for (const auto &s : mems)
2942  c_mems.push_back(s.data);
2943  return c_mems;
2944 }
2946 
2948 struct concat : public primitive {
2950  struct primitive_desc : public primitive_desc_base {
2952 
2954  primitive_desc() = default;
2955 
2975  primitive_desc(const memory::desc &dst, int concat_dimension,
2976  const std::vector<memory::desc> &srcs, const engine &engine,
2977  const primitive_attr &attr = primitive_attr()) {
2978  auto c_srcs = convert_to_c(srcs);
2979 
2980  dnnl_primitive_desc_t result;
2982  dnnl_concat_primitive_desc_create(&result, &dst.data,
2983  (int)c_srcs.size(), concat_dimension, &c_srcs[0],
2984  attr.get(), engine.get()),
2985  "could not create a primitive descriptor for a concat "
2986  "primitive");
2987  reset(result);
2988  }
2989 
3002  primitive_desc(int concat_dimension,
3003  const std::vector<memory::desc> &srcs, const engine &engine,
3004  const primitive_attr &attr = primitive_attr()) {
3005  auto c_api_srcs = convert_to_c(srcs);
3006 
3007  dnnl_primitive_desc_t result;
3009  dnnl_concat_primitive_desc_create(&result, nullptr,
3010  (int)c_api_srcs.size(), concat_dimension,
3011  &c_api_srcs[0], attr.get(), engine.get()),
3012  "could not create a primitive descriptor for a concat "
3013  "primitive");
3014  reset(result);
3015  }
3016 
3023 
3025  memory::desc src_desc(int idx = 0) const { return base::src_desc(idx); }
3026 
3028  memory::desc dst_desc() const { return base::dst_desc(0); }
3029  };
3030 
3032  concat() = default;
3033 
3036  concat(const primitive_desc &pd) : primitive(pd.get()) {}
3037 };
3038 
3040 
3048 
3050 struct sum : public primitive {
3052  struct primitive_desc : public primitive_desc_base {
3054 
3056  primitive_desc() = default;
3057 
3075  primitive_desc(const memory::desc &dst,
3076  const std::vector<float> &scales,
3077  const std::vector<memory::desc> &srcs, const engine &engine,
3078  const primitive_attr &attr = primitive_attr()) {
3079  error::wrap_c_api(scales.size() == srcs.size()
3080  ? dnnl_success
3082  "counts of scales and sources are not equal");
3083 
3084  auto c_api_srcs = convert_to_c(srcs);
3085 
3086  dnnl_primitive_desc_t result;
3088  (int)c_api_srcs.size(), &scales[0],
3089  &c_api_srcs[0], attr.get(), engine.get()),
3090  "could not create a primitive descriptor for a sum "
3091  "primitive");
3092  reset(result);
3093  }
3094 
3105  primitive_desc(const std::vector<float> &scales,
3106  const std::vector<memory::desc> &srcs, const engine &engine,
3107  const primitive_attr &attr = primitive_attr()) {
3108  error::wrap_c_api(scales.size() == srcs.size()
3109  ? dnnl_success
3111  "counts of scales and sources are not equal");
3112 
3113  auto c_api_srcs = convert_to_c(srcs);
3114  dnnl_primitive_desc_t result;
3116  (int)c_api_srcs.size(), &scales[0],
3117  &c_api_srcs[0], attr.get(), engine.get()),
3118  "could not create a primitive descriptor for a sum "
3119  "primitive");
3120  reset(result);
3121  }
3122 
3129 
3131  memory::desc src_desc(int idx = 0) const { return base::src_desc(idx); }
3132 
3134  memory::desc dst_desc() const { return base::dst_desc(0); }
3135  };
3136 
3138  sum() = default;
3139 
3142  sum(const primitive_desc &pd) : primitive(pd.get()) {}
3143 };
3144 
3146 
3149 
3152 struct primitive_desc : public primitive_desc_base {
3154 
3155  primitive_desc() = default;
3156 
3179  primitive_desc(const_dnnl_op_desc_t desc, const primitive_attr *attr,
3180  const engine &engine, const_dnnl_primitive_desc_t hint_fwd_pd,
3181  bool allow_empty = false)
3182  : allow_empty_(allow_empty) {
3183  dnnl_primitive_desc_iterator_t iterator = nullptr;
3185  desc, attr ? attr->get() : nullptr, engine.get(), hint_fwd_pd);
3186  if (!allow_empty)
3188  status, "could not create a primitive descriptor iterator");
3189  pd_iterator.reset(iterator);
3190  fetch_impl();
3191  }
3192 
3197  bool next_impl() {
3199  = dnnl_primitive_desc_iterator_next(pd_iterator.get());
3200  if (status == dnnl_iterator_ends) return false;
3202  status, "could not advance a primitive descriptor iterator");
3203  fetch_impl();
3204  return true;
3205  }
3206 
3207 private:
3208  bool allow_empty_ = false;
3209  handle<dnnl_primitive_desc_iterator_t> pd_iterator;
3210  void fetch_impl() {
3212  pd_iterator.get(allow_empty_));
3213  error::wrap_c_api(pd != nullptr || allow_empty_ ? dnnl_success
3215  "could not fetch a primitive descriptor from a primitive "
3216  "descriptor iterator");
3217  reset(pd);
3218  }
3219 };
3220 
3222 
3232 
3234 struct convolution_forward : public primitive {
3236  struct desc {
3238 
3272  const memory::desc &src_desc, const memory::desc &weights_desc,
3273  const memory::desc &bias_desc, const memory::desc &dst_desc,
3274  const memory::dims &strides, const memory::dims &padding_l,
3275  const memory::dims &padding_r) {
3276  memory::validate_dims(strides);
3277  memory::validate_dims(padding_l);
3278  memory::validate_dims(padding_r);
3282  convert_to_c(algorithm), &src_desc.data,
3283  &weights_desc.data, &bias_desc.data, &dst_desc.data,
3284  &strides[0], &padding_l[0], &padding_r[0]),
3285  "could not create a descriptor for a convolution forward "
3286  "propagation primitive");
3287  }
3288 
3319  const memory::desc &src_desc, const memory::desc &weights_desc,
3320  const memory::desc &dst_desc, const memory::dims &strides,
3321  const memory::dims &padding_l, const memory::dims &padding_r) {
3322  memory::validate_dims(strides);
3323  memory::validate_dims(padding_l);
3324  memory::validate_dims(padding_r);
3328  convert_to_c(algorithm), &src_desc.data,
3329  &weights_desc.data, nullptr, &dst_desc.data,
3330  &strides[0], &padding_l[0], &padding_r[0]),
3331  "could not create a descriptor for a convolution forward "
3332  "propagation primitive");
3333  }
3334 
3370  const memory::desc &src_desc, const memory::desc &weights_desc,
3371  const memory::desc &bias_desc, const memory::desc &dst_desc,
3372  const memory::dims &strides, const memory::dims &dilates,
3373  const memory::dims &padding_l, const memory::dims &padding_r) {
3374  memory::validate_dims(strides);
3375  memory::validate_dims(dilates);
3376  memory::validate_dims(padding_l);
3377  memory::validate_dims(padding_r);
3380  convert_to_c(algorithm), &src_desc.data,
3381  &weights_desc.data, &bias_desc.data,
3382  &dst_desc.data, &strides[0], &dilates[0],
3383  &padding_l[0], &padding_r[0]),
3384  "could not create a descriptor for a dilated convolution "
3385  "forward propagation primitive");
3386  }
3387 
3420  const memory::desc &src_desc, const memory::desc &weights_desc,
3421  const memory::desc &dst_desc, const memory::dims &strides,
3422  const memory::dims &dilates, const memory::dims &padding_l,
3423  const memory::dims &padding_r) {
3424  memory::validate_dims(strides);
3425  memory::validate_dims(dilates);
3426  memory::validate_dims(padding_l);
3427  memory::validate_dims(padding_r);
3430  convert_to_c(algorithm), &src_desc.data,
3431  &weights_desc.data, nullptr,
3432  &dst_desc.data, &strides[0], &dilates[0],
3433  &padding_l[0], &padding_r[0]),
3434  "could not create a descriptor for a dilated convolution "
3435  "forward propagation primitive");
3436  }
3437  };
3438 
3440  struct primitive_desc : public dnnl::primitive_desc {
3442  primitive_desc() = default;
3443 
3454  primitive_desc(const desc &desc, const engine &engine,
3455  bool allow_empty = false)
3456  : dnnl::primitive_desc(
3457  &desc.data, nullptr, engine, nullptr, allow_empty) {}
3458 
3470  primitive_desc(const desc &desc, const primitive_attr &attr,
3471  const engine &engine, bool allow_empty = false)
3472  : dnnl::primitive_desc(
3473  &desc.data, &attr, engine, nullptr, allow_empty) {}
3474 
3482  : dnnl::primitive_desc(pd, dnnl::primitive::kind::convolution,
3485 
3487  memory::desc src_desc() const { return base::src_desc(0); }
3488 
3490  memory::desc weights_desc() const { return base::weights_desc(0); }
3491 
3493  memory::desc dst_desc() const { return base::dst_desc(0); }
3494 
3499  memory::desc bias_desc() const { return base::weights_desc(1); }
3500  };
3501 
3503  convolution_forward() = default;
3504 
3508  convolution_forward(const primitive_desc &pd) : primitive(pd) {}
3509 };
3510 
3512 struct convolution_backward_data : public primitive {
3513 
3515  struct desc {
3517 
3544  desc(algorithm algorithm, const memory::desc &diff_src_desc,
3545  const memory::desc &weights_desc,
3546  const memory::desc &diff_dst_desc, const memory::dims &strides,
3547  const memory::dims &padding_l, const memory::dims &padding_r) {
3548  memory::validate_dims(strides);
3549  memory::validate_dims(padding_l);
3550  memory::validate_dims(padding_r);
3553  convert_to_c(algorithm), &diff_src_desc.data,
3554  &weights_desc.data, &diff_dst_desc.data,
3555  &strides[0], &padding_l[0], &padding_r[0]),
3556  "could not create a descriptor for a convolution backward "
3557  "propagation primitive");
3558  }
3559 
3588  desc(algorithm algorithm, const memory::desc &diff_src_desc,
3589  const memory::desc &weights_desc,
3590  const memory::desc &diff_dst_desc, const memory::dims &strides,
3591  const memory::dims &dilates, const memory::dims &padding_l,
3592  const memory::dims &padding_r) {
3593  memory::validate_dims(strides);
3594  memory::validate_dims(dilates);
3595  memory::validate_dims(padding_l);
3596  memory::validate_dims(padding_r);
3599  convert_to_c(algorithm), &diff_src_desc.data,
3600  &weights_desc.data, &diff_dst_desc.data,
3601  &strides[0], &dilates[0], &padding_l[0],
3602  &padding_r[0]),
3603  "could not create a descriptor for a dilated convolution "
3604  "backward propagation primitive");
3605  }
3606  };
3607 
3609  struct primitive_desc : public dnnl::primitive_desc {
3611  primitive_desc() = default;
3612 
3626  primitive_desc(const desc &desc, const engine &engine,
3627  const convolution_forward::primitive_desc &hint_fwd_pd,
3628  bool allow_empty = false)
3629  : dnnl::primitive_desc(&desc.data, nullptr, engine,
3630  hint_fwd_pd.get(), allow_empty) {}
3631 
3646  primitive_desc(const desc &desc, const primitive_attr &attr,
3647  const engine &engine,
3648  const convolution_forward::primitive_desc &hint_fwd_pd,
3649  bool allow_empty = false)
3650  : dnnl::primitive_desc(&desc.data, &attr, engine, hint_fwd_pd.get(),
3651  allow_empty) {}
3652 
3660  : dnnl::primitive_desc(pd, dnnl::primitive::kind::convolution,
3662 
3664  memory::desc diff_src_desc() const { return base::diff_src_desc(0); }
3665 
3667  memory::desc weights_desc() const { return base::weights_desc(0); }
3668 
3670  memory::desc diff_dst_desc() const { return base::diff_dst_desc(0); }
3671  };
3672 
3674  convolution_backward_data() = default;
3675 
3679  convolution_backward_data(const primitive_desc &pd) : primitive(pd) {}
3680 };
3681 
3683 struct convolution_backward_weights : public primitive {
3685  struct desc {
3687 
3717  desc(algorithm algorithm, const memory::desc &src_desc,
3718  const memory::desc &diff_weights_desc,
3719  const memory::desc &diff_bias_desc,
3720  const memory::desc &diff_dst_desc, const memory::dims &strides,
3721  const memory::dims &padding_l, const memory::dims &padding_r) {
3722  memory::validate_dims(strides);
3723  memory::validate_dims(padding_l);
3724  memory::validate_dims(padding_r);
3727  convert_to_c(algorithm), &src_desc.data,
3728  &diff_weights_desc.data, &diff_bias_desc.data,
3729  &diff_dst_desc.data, &strides[0], &padding_l[0],
3730  &padding_r[0]),
3731  "could not create a descriptor for a convolution weights "
3732  "update primitive");
3733  }
3734 
3761  desc(algorithm algorithm, const memory::desc &src_desc,
3762  const memory::desc &diff_weights_desc,
3763  const memory::desc &diff_dst_desc, const memory::dims &strides,
3764  const memory::dims &padding_l, const memory::dims &padding_r) {
3765  memory::validate_dims(strides);
3766  memory::validate_dims(padding_l);
3767  memory::validate_dims(padding_r);
3769  convert_to_c(algorithm), &src_desc.data,
3770  &diff_weights_desc.data, nullptr,
3771  &diff_dst_desc.data, &strides[0],
3772  &padding_l[0], &padding_r[0]),
3773  "could not create a descriptor for a convolution weights "
3774  "update primitive");
3775  }
3776 
3808  desc(algorithm algorithm, const memory::desc &src_desc,
3809  const memory::desc &diff_weights_desc,
3810  const memory::desc &diff_bias_desc,
3811  const memory::desc &diff_dst_desc, const memory::dims &strides,
3812  const memory::dims &dilates, const memory::dims &padding_l,
3813  const memory::dims &padding_r) {
3814  memory::validate_dims(strides);
3815  memory::validate_dims(dilates);
3816  memory::validate_dims(padding_l);
3817  memory::validate_dims(padding_r);
3820  convert_to_c(algorithm), &src_desc.data,
3821  &diff_weights_desc.data, &diff_bias_desc.data,
3822  &diff_dst_desc.data, &strides[0], &dilates[0],
3823  &padding_l[0], &padding_r[0]),
3824  "could not create a descriptor for a dilated convolution "
3825  "weights gradient primitive");
3826  }
3827 
3856  desc(algorithm algorithm, const memory::desc &src_desc,
3857  const memory::desc &diff_weights_desc,
3858  const memory::desc &diff_dst_desc, const memory::dims &strides,
3859  const memory::dims &dilates, const memory::dims &padding_l,
3860  const memory::dims &padding_r) {
3861  memory::validate_dims(strides);
3862  memory::validate_dims(dilates);
3863  memory::validate_dims(padding_l);
3864  memory::validate_dims(padding_r);
3867  convert_to_c(algorithm), &src_desc.data,
3868  &diff_weights_desc.data, nullptr,
3869  &diff_dst_desc.data, &strides[0], &dilates[0],
3870  &padding_l[0], &padding_r[0]),
3871  "could not create a descriptor for a dilated convolution "
3872  "weights gradient primitive");
3873  }
3874  };
3875 
3877  struct primitive_desc : public dnnl::primitive_desc {
3879  primitive_desc() = default;
3880 
3893  primitive_desc(const desc &desc, const engine &engine,
3894  const convolution_forward::primitive_desc &hint_fwd_pd,
3895  bool allow_empty = false)
3896  : dnnl::primitive_desc(&desc.data, nullptr, engine,
3897  hint_fwd_pd.get(), allow_empty) {}
3898 
3912  primitive_desc(const desc &desc, const primitive_attr &attr,
3913  const engine &engine,
3914  const convolution_forward::primitive_desc &hint_fwd_pd,
3915  bool allow_empty = false)
3916  : dnnl::primitive_desc(&desc.data, &attr, engine, hint_fwd_pd.get(),
3917  allow_empty) {}
3918 
3926  : dnnl::primitive_desc(pd, dnnl::primitive::kind::convolution,
3928 
3930  memory::desc src_desc() const { return base::src_desc(0); }
3931 
3933  memory::desc diff_weights_desc() const {
3934  return base::diff_weights_desc(0);
3935  }
3936 
3938  memory::desc diff_dst_desc() const { return base::diff_dst_desc(0); }
3939 
3944  memory::desc diff_bias_desc() const {
3945  return base::diff_weights_desc(1);
3946  }
3947  };
3948 
3950  convolution_backward_weights() = default;
3951 
3955  convolution_backward_weights(const primitive_desc &pd) : primitive(pd) {}
3956 };
3957 
3959 //
3967 
3969 struct deconvolution_forward : public primitive {
3971  struct desc {
3973 
4005  const memory::desc &src_desc, const memory::desc &weights_desc,
4006  const memory::desc &bias_desc, const memory::desc &dst_desc,
4007  const memory::dims &strides, const memory::dims &padding_l,
4008  const memory::dims &padding_r) {
4009  memory::validate_dims(strides);
4010  memory::validate_dims(padding_l);
4011  memory::validate_dims(padding_r);
4015  convert_to_c(algorithm), &src_desc.data,
4016  &weights_desc.data, &bias_desc.data, &dst_desc.data,
4017  &strides[0], &padding_l[0], &padding_r[0]),
4018  "could not create a descriptor for a deconvolution forward "
4019  "propagation primitive");
4020  }
4021 
4050  const memory::desc &src_desc, const memory::desc &weights_desc,
4051  const memory::desc &dst_desc, const memory::dims &strides,
4052  const memory::dims &padding_l, const memory::dims &padding_r) {
4053  memory::validate_dims(strides);
4054  memory::validate_dims(padding_l);
4055  memory::validate_dims(padding_r);
4059  convert_to_c(algorithm), &src_desc.data,
4060  &weights_desc.data, nullptr, &dst_desc.data,
4061  &strides[0], &padding_l[0], &padding_r[0]),
4062  "could not create a descriptor for a deconvolution forward "
4063  "propagation primitive");
4064  }
4065 
4099  const memory::desc &src_desc, const memory::desc &weights_desc,
4100  const memory::desc &bias_desc, const memory::desc &dst_desc,
4101  const memory::dims &strides, const memory::dims &dilates,
4102  const memory::dims &padding_l, const memory::dims &padding_r) {
4103  memory::validate_dims(strides);
4104  memory::validate_dims(dilates);
4105  memory::validate_dims(padding_l);
4106  memory::validate_dims(padding_r);
4108  &data, dnnl::convert_to_c(prop_kind),
4109  convert_to_c(algorithm), &src_desc.data,
4110  &weights_desc.data, &bias_desc.data,
4111  &dst_desc.data, &strides[0], &dilates[0],
4112  &padding_l[0], &padding_r[0]),
4113  "could not create a descriptor for a dilated deconvolution "
4114  "forward propagation primitive");
4115  }
4116 
4147  const memory::desc &src_desc, const memory::desc &weights_desc,
4148  const memory::desc &dst_desc, const memory::dims &strides,
4149  const memory::dims &dilates, const memory::dims &padding_l,
4150  const memory::dims &padding_r) {
4151  memory::validate_dims(strides);
4152  memory::validate_dims(dilates);
4153  memory::validate_dims(padding_l);
4154  memory::validate_dims(padding_r);
4156  &data, dnnl::convert_to_c(prop_kind),
4157  convert_to_c(algorithm), &src_desc.data,
4158  &weights_desc.data, nullptr,
4159  &dst_desc.data, &strides[0], &dilates[0],
4160  &padding_l[0], &padding_r[0]),
4161  "could not create a descriptor for a dilated deconvolution "
4162  "forward propagation primitive");
4163  }
4164  };
4165 
4167  struct primitive_desc : public dnnl::primitive_desc {
4169  primitive_desc() = default;
4170 
4181  primitive_desc(const desc &desc, const engine &engine,
4182  bool allow_empty = false)
4183  : dnnl::primitive_desc(
4184  &desc.data, nullptr, engine, nullptr, allow_empty) {}
4185 
4197  primitive_desc(const desc &desc, const primitive_attr &attr,
4198  const engine &engine, bool allow_empty = false)
4199  : dnnl::primitive_desc(
4200  &desc.data, &attr, engine, nullptr, allow_empty) {}
4201 
4209  : dnnl::primitive_desc(pd, dnnl::primitive::kind::deconvolution,
4212 
4214  memory::desc src_desc() const { return base::src_desc(0); }
4215 
4217  memory::desc weights_desc() const { return base::weights_desc(0); }
4218 
4220  memory::desc dst_desc() const { return base::dst_desc(0); }
4221 
4223  memory::desc bias_desc() const { return base::weights_desc(1); }
4224  };
4225 
4227  deconvolution_forward() = default;
4228 
4232  deconvolution_forward(const primitive_desc &pd) : primitive(pd) {}
4233 };
4234 
4236 struct deconvolution_backward_data : public primitive {
4238  struct desc {
4240 
4266  desc(algorithm algorithm, const memory::desc &diff_src_desc,
4267  const memory::desc &weights_desc,
4268  const memory::desc &diff_dst_desc, const memory::dims &strides,
4269  const memory::dims &padding_l, const memory::dims &padding_r) {
4270  memory::validate_dims(strides);
4271  memory::validate_dims(padding_l);
4272  memory::validate_dims(padding_r);
4275  convert_to_c(algorithm), &diff_src_desc.data,
4276  &weights_desc.data, &diff_dst_desc.data,
4277  &strides[0], &padding_l[0], &padding_r[0]),
4278  "could not create a descriptor for a deconvolution "
4279  "backward propagation primitive");
4280  }
4281 
4309  desc(algorithm algorithm, const memory::desc &diff_src_desc,
4310  const memory::desc &weights_desc,
4311  const memory::desc &diff_dst_desc, const memory::dims &strides,
4312  const memory::dims &dilates, const memory::dims &padding_l,
4313  const memory::dims &padding_r) {
4314  memory::validate_dims(strides);
4315  memory::validate_dims(dilates);
4316  memory::validate_dims(padding_l);
4317  memory::validate_dims(padding_r);
4320  convert_to_c(algorithm), &diff_src_desc.data,
4321  &weights_desc.data, &diff_dst_desc.data,
4322  &strides[0], &dilates[0], &padding_l[0],
4323  &padding_r[0]),
4324  "could not create a descriptor for a dilated deconvolution "
4325  "backward propagation primitive");
4326  }
4327  };
4328 
4330  struct primitive_desc : public dnnl::primitive_desc {
4332  primitive_desc() = default;
4333 
4347  primitive_desc(const desc &desc, const engine &engine,
4348  const deconvolution_forward::primitive_desc &hint_fwd_pd,
4349  bool allow_empty = false)
4350  : dnnl::primitive_desc(&desc.data, nullptr, engine,
4351  hint_fwd_pd.get(), allow_empty) {}
4352 
4367  primitive_desc(const desc &desc, const primitive_attr &attr,
4368  const engine &engine,
4369  const deconvolution_forward::primitive_desc &hint_fwd_pd,
4370  bool allow_empty = false)
4371  : dnnl::primitive_desc(&desc.data, &attr, engine, hint_fwd_pd.get(),
4372  allow_empty) {}
4373 
4381  : dnnl::primitive_desc(pd, dnnl::primitive::kind::deconvolution,
4383 
4385  memory::desc diff_src_desc() const { return base::diff_src_desc(0); }
4386 
4388  memory::desc weights_desc() const { return base::weights_desc(0); }
4389 
4391  memory::desc diff_dst_desc() const { return base::diff_dst_desc(0); }
4392  };
4393 
4395  deconvolution_backward_data() = default;
4396 
4400  deconvolution_backward_data(const primitive_desc &pd) : primitive(pd) {}
4401 };
4402 
4404 struct deconvolution_backward_weights : public primitive {
4406  struct desc {
4408 
4437  desc(algorithm algorithm, const memory::desc &src_desc,
4438  const memory::desc &diff_weights_desc,
4439  const memory::desc &diff_bias_desc,
4440  const memory::desc &diff_dst_desc, const memory::dims &strides,
4441  const memory::dims &padding_l, const memory::dims &padding_r) {
4442  memory::validate_dims(strides);
4443  memory::validate_dims(padding_l);
4444  memory::validate_dims(padding_r);
4447  convert_to_c(algorithm), &src_desc.data,
4448  &diff_weights_desc.data, &diff_bias_desc.data,
4449  &diff_dst_desc.data, &strides[0], &padding_l[0],
4450  &padding_r[0]),
4451  "could not create a descriptor for a deconvolution weights "
4452  "update primitive");
4453  }
4454 
4480  desc(algorithm algorithm, const memory::desc &src_desc,
4481  const memory::desc &diff_weights_desc,
4482  const memory::desc &diff_dst_desc, const memory::dims &strides,
4483  const memory::dims &padding_l, const memory::dims &padding_r) {
4484  memory::validate_dims(strides);
4485  memory::validate_dims(padding_l);
4486  memory::validate_dims(padding_r);
4488  &data, convert_to_c(algorithm),
4489  &src_desc.data, &diff_weights_desc.data,
4490  nullptr, &diff_dst_desc.data, &strides[0],
4491  &padding_l[0], &padding_r[0]),
4492  "could not create a descriptor for a deconvolution weights "
4493  "update primitive");
4494  }
4495 
4526  desc(algorithm algorithm, const memory::desc &src_desc,
4527  const memory::desc &diff_weights_desc,
4528  const memory::desc &diff_bias_desc,
4529  const memory::desc &diff_dst_desc, const memory::dims &strides,
4530  const memory::dims &dilates, const memory::dims &padding_l,
4531  const memory::dims &padding_r) {
4532  memory::validate_dims(strides);
4533  memory::validate_dims(dilates);
4534  memory::validate_dims(padding_l);
4535  memory::validate_dims(padding_r);
4538  convert_to_c(algorithm), &src_desc.data,
4539  &diff_weights_desc.data, &diff_bias_desc.data,
4540  &diff_dst_desc.data, &strides[0], &dilates[0],
4541  &padding_l[0], &padding_r[0]),
4542  "could not create a descriptor for a dilated deconvolution "
4543  "weights gradient primitive");
4544  }
4545 
4573  desc(algorithm algorithm, const memory::desc &src_desc,
4574  const memory::desc &diff_weights_desc,
4575  const memory::desc &diff_dst_desc, const memory::dims &strides,
4576  const memory::dims &dilates, const memory::dims &padding_l,
4577  const memory::dims &padding_r) {
4578  memory::validate_dims(strides);
4579  memory::validate_dims(dilates);
4580  memory::validate_dims(padding_l);
4581  memory::validate_dims(padding_r);
4584  convert_to_c(algorithm), &src_desc.data,
4585  &diff_weights_desc.data, nullptr,
4586  &diff_dst_desc.data, &strides[0], &dilates[0],
4587  &padding_l[0], &padding_r[0]),
4588  "could not create a descriptor for a dilated deconvolution "
4589  "weights gradient primitive");
4590  }
4591  };
4592 
4594  struct primitive_desc : public dnnl::primitive_desc {
4596  primitive_desc() = default;
4597 
4610  primitive_desc(const desc &desc, const engine &engine,
4611  const deconvolution_forward::primitive_desc &hint_fwd_pd,
4612  bool allow_empty = false)
4613  : dnnl::primitive_desc(&desc.data, nullptr, engine,
4614  hint_fwd_pd.get(), allow_empty) {}
4615 
4629  primitive_desc(const desc &desc, const primitive_attr &attr,
4630  const engine &engine,
4631  const deconvolution_forward::primitive_desc &hint_fwd_pd,
4632  bool allow_empty = false)
4633  : dnnl::primitive_desc(&desc.data, &attr, engine, hint_fwd_pd.get(),
4634  allow_empty) {}
4635 
4643  : dnnl::primitive_desc(pd, dnnl::primitive::kind::deconvolution,
4645 
4647  memory::desc src_desc() const { return base::src_desc(0); }
4648 
4650  memory::desc diff_weights_desc() const {
4651  return base::diff_weights_desc(0);
4652  }
4653 
4655  memory::desc diff_dst_desc() const { return base::diff_dst_desc(0); }
4656 
4658  memory::desc diff_bias_desc() const {
4659  return base::diff_weights_desc(1);
4660  }
4661  };
4662 
4664  deconvolution_backward_weights() = default;
4665 
4669  deconvolution_backward_weights(const primitive_desc &pd) : primitive(pd) {}
4670 };
4671 
4673 
4682 
4684 struct lrn_forward : public primitive {
4686  struct desc {
4687  dnnl_lrn_desc_t data;
4688 
4714  const memory::desc &data_desc, memory::dim local_size,
4715  float alpha, float beta, float k = 1.f) {
4718  convert_to_c(algorithm), &data_desc.data,
4719  local_size, alpha, beta, k),
4720  "could not create a descriptor for a lrn forward "
4721  "propagation primitive");
4722  }
4723  };
4724 
4726  struct primitive_desc : public dnnl::primitive_desc {
4728  primitive_desc() = default;
4729 
4739  primitive_desc(const desc &desc, const engine &engine,
4740  bool allow_empty = false)
4741  : dnnl::primitive_desc(
4742  &desc.data, nullptr, engine, nullptr, allow_empty) {}
4743 
4754  primitive_desc(const desc &desc, const primitive_attr &attr,
4755  const engine &engine, bool allow_empty = false)
4756  : dnnl::primitive_desc(
4757  &desc.data, &attr, engine, nullptr, allow_empty) {}
4758 
4766  : dnnl::primitive_desc(pd, dnnl::primitive::kind::lrn,
4769 
4771  memory::desc src_desc() const { return base::src_desc(0); }
4772 
4774  memory::desc dst_desc() const { return base::dst_desc(0); }
4775 
4777  memory::desc workspace_desc() const { return base::workspace_desc(); }
4778  };
4779 
4781  lrn_forward() = default;
4782 
4786  lrn_forward(const primitive_desc &pd) : primitive(pd) {}
4787 };
4788 
4790 struct lrn_backward : public primitive {
4792  struct desc {
4793  dnnl_lrn_desc_t data;
4794 
4817  desc(algorithm algorithm, const memory::desc &data_desc,
4818  const memory::desc &diff_data_desc, memory::dim local_size,
4819  float alpha, float beta, float k = 1.f) {
4822  &diff_data_desc.data, &data_desc.data, local_size,
4823  alpha, beta, k),
4824  "could not create a descriptor for a lrn backward "
4825  "propagation primitive");
4826  }
4827  };
4828 
4830  struct primitive_desc : public dnnl::primitive_desc {
4832  primitive_desc() = default;
4833 
4846  primitive_desc(const desc &desc, const engine &engine,
4847  const lrn_forward::primitive_desc &hint_fwd_pd,
4848  bool allow_empty = false)
4849  : dnnl::primitive_desc(&desc.data, nullptr, engine,
4850  hint_fwd_pd.get(), allow_empty) {}
4851 
4865  primitive_desc(const desc &desc, const primitive_attr &attr,
4866  const engine &engine,
4867  const lrn_forward::primitive_desc &hint_fwd_pd,
4868  bool allow_empty = false)
4869  : dnnl::primitive_desc(&desc.data, &attr, engine, hint_fwd_pd.get(),
4870  allow_empty) {}
4871 
4879  : dnnl::primitive_desc(pd, dnnl::primitive::kind::lrn,
4881 
4883  memory::desc diff_src_desc() const { return base::diff_src_desc(0); }
4884 
4886  memory::desc diff_dst_desc() const { return base::diff_dst_desc(0); }
4887 
4889  memory::desc workspace_desc() const { return base::workspace_desc(); }
4890  };
4891 
4893  lrn_backward() = default;
4894 
4898  lrn_backward(const primitive_desc &pd) : primitive(pd) {}
4899 };
4900 
4902 
4910 
4912 struct pooling_forward : public primitive {
4914  struct desc {
4915  dnnl_pooling_desc_t data;
4916 
4947  const memory::desc &src_desc, const memory::desc &dst_desc,
4948  const memory::dims &strides, const memory::dims &kernel,
4949  const memory::dims &padding_l, const memory::dims &padding_r) {
4950  memory::validate_dims(strides);
4951  memory::validate_dims(kernel);
4952  memory::validate_dims(padding_l);
4953  memory::validate_dims(padding_r);
4956  convert_to_c(algorithm), &src_desc.data,
4957  &dst_desc.data, &strides[0], &kernel[0],
4958  &padding_l[0], &padding_r[0]),
4959  "could not create a descriptor for a pooling forward "
4960  "propagation primitive");
4961  }
4962  };
4963 
4965  struct primitive_desc : public dnnl::primitive_desc {
4967  primitive_desc() = default;
4968 
4978  primitive_desc(const desc &desc, const engine &engine,
4979  bool allow_empty = false)
4980  : dnnl::primitive_desc(
4981  &desc.data, nullptr, engine, nullptr, allow_empty) {}
4982 
4993  primitive_desc(const desc &desc, const primitive_attr &attr,
4994  const engine &engine, bool allow_empty = false)
4995  : dnnl::primitive_desc(
4996  &desc.data, &attr, engine, nullptr, allow_empty) {}
4997 
5005  : dnnl::primitive_desc(pd, dnnl::primitive::kind::pooling,
5008 
5010  memory::desc src_desc() const { return base::src_desc(0); }
5011 
5013  memory::desc dst_desc() const { return base::dst_desc(0); }
5014 
5016  memory::desc workspace_desc() const { return base::workspace_desc(); }
5017  };
5018 
5020  pooling_forward() = default;
5021 
5025  pooling_forward(const primitive_desc &pd) : primitive(pd) {}
5026 };
5027 
5029 struct pooling_backward : public primitive {
5031  struct desc {
5032  dnnl_pooling_desc_t data;
5033 
5059  desc(algorithm algorithm, const memory::desc &diff_src_desc,
5060  const memory::desc &diff_dst_desc, const memory::dims &strides,
5061  const memory::dims &kernel, const memory::dims &padding_l,
5062  const memory::dims &padding_r) {
5063  memory::validate_dims(strides);
5064  memory::validate_dims(kernel);
5065  memory::validate_dims(padding_l);
5066  memory::validate_dims(padding_r);
5069  convert_to_c(algorithm), &diff_src_desc.data,
5070  &diff_dst_desc.data, &strides[0], &kernel[0],
5071  &padding_l[0], &padding_r[0]),
5072  "could not create a descriptor for a pooling backward "
5073  "propagation primitive");
5074  }
5075  };
5076 
5078  struct primitive_desc : public dnnl::primitive_desc {
5080  primitive_desc() = default;
5081 
5094  primitive_desc(const desc &desc, const engine &engine,
5095  const pooling_forward::primitive_desc &hint_fwd_pd,
5096  bool allow_empty = false)
5097  : dnnl::primitive_desc(&desc.data, nullptr, engine,
5098  hint_fwd_pd.get(), allow_empty) {}
5099 
5113  primitive_desc(const desc &desc, const primitive_attr &attr,
5114  const engine &engine,
5115  const pooling_forward::primitive_desc &hint_fwd_pd,
5116  bool allow_empty = false)
5117  : dnnl::primitive_desc(&desc.data, &attr, engine, hint_fwd_pd.get(),
5118  allow_empty) {}
5119 
5127  : dnnl::primitive_desc(pd, dnnl::primitive::kind::pooling,
5129 
5131  memory::desc diff_src_desc() const { return base::diff_src_desc(0); }
5132 
5134  memory::desc diff_dst_desc() const { return base::diff_dst_desc(0); }
5135 
5137  memory::desc workspace_desc() const { return base::workspace_desc(); }
5138  };
5139 
5141  pooling_backward() = default;
5142 
5146  pooling_backward(const primitive_desc &pd) : primitive(pd) {}
5147 };
5148 
5150 
5172 
5174 struct eltwise_forward : public primitive {
5176  struct desc {
5177  dnnl_eltwise_desc_t data;
5178 
5198  const memory::desc &data_desc, float alpha = 0,
5199  float beta = 0) {
5203  &data_desc.data, alpha, beta),
5204  "could not create a descriptor for an eltwise forward "
5205  "propagation primitive");
5206  }
5207  };
5208 
5210  struct primitive_desc : public dnnl::primitive_desc {
5212  primitive_desc() = default;
5213 
5224  primitive_desc(const desc &desc, const engine &engine,
5225  bool allow_empty = false)
5226  : dnnl::primitive_desc(
5227  &desc.data, nullptr, engine, nullptr, allow_empty) {}
5228 
5240  primitive_desc(const desc &desc, const primitive_attr &attr,
5241  const engine &engine, bool allow_empty = false)
5242  : dnnl::primitive_desc(
5243  &desc.data, &attr, engine, nullptr, allow_empty) {}
5244 
5252  : dnnl::primitive_desc(pd, dnnl::primitive::kind::eltwise,
5255 
5257  memory::desc src_desc() const { return base::src_desc(0); }
5258 
5260  memory::desc dst_desc() const { return base::dst_desc(0); }
5261  };
5262 
5264  eltwise_forward() = default;
5265 
5269  eltwise_forward(const primitive_desc &pd) : primitive(pd) {}
5270 };
5271 
5273 struct eltwise_backward : public primitive {
5275  struct desc {
5276  dnnl_eltwise_desc_t data;
5277 
5296  desc(algorithm algorithm, const memory::desc &diff_data_desc,
5297  const memory::desc &data_desc, float alpha = 0,
5298  float beta = 0) {
5301  dnnl::convert_to_c(algorithm), &diff_data_desc.data,
5302  &data_desc.data, alpha, beta),
5303  "could not create a descriptor for an eltwise backward "
5304  "propagation primitive");
5305  }
5306  };
5307 
5309  struct primitive_desc : public dnnl::primitive_desc {
5311  primitive_desc() = default;
5312 
5326  primitive_desc(const desc &desc, const engine &engine,
5327  const eltwise_forward::primitive_desc &hint_fwd_pd,
5328  bool allow_empty = false)
5329  : dnnl::primitive_desc(&desc.data, nullptr, engine,
5330  hint_fwd_pd.get(), allow_empty) {}
5331 
5346  primitive_desc(const desc &desc, const primitive_attr &attr,
5347  const engine &engine,
5348  const eltwise_forward::primitive_desc &hint_fwd_pd,
5349  bool allow_empty = false)
5350  : dnnl::primitive_desc(&desc.data, &attr, engine, hint_fwd_pd.get(),
5351  allow_empty) {}
5352 
5360  : dnnl::primitive_desc(pd, dnnl::primitive::kind::eltwise,
5362 
5364  memory::desc src_desc() const { return base::src_desc(0); }
5365 
5367  memory::desc diff_src_desc() const { return base::diff_src_desc(0); }
5368 
5370  memory::desc diff_dst_desc() const { return base::diff_dst_desc(0); }
5371  };
5372 
5374  eltwise_backward() = default;
5375 
5379  eltwise_backward(const primitive_desc &pd) : primitive(pd) {}
5380 };
5381 
5383 
5391 
5393 struct softmax_forward : public primitive {
5395  struct desc {
5396  dnnl_softmax_desc_t data;
5397 
5399  desc() = default;
5400 
5415  desc(prop_kind prop_kind, const memory::desc &data_desc,
5416  int softmax_axis) {
5419  &data_desc.data, softmax_axis),
5420  "could not create a descriptor for a softmax forward "
5421  "propagation primitive");
5422  }
5423  };
5424 
5426  struct primitive_desc : public dnnl::primitive_desc {
5428  primitive_desc() = default;
5429 
5440  primitive_desc(const desc &desc, const engine &engine,
5441  bool allow_empty = false)
5442  : dnnl::primitive_desc(
5443  &desc.data, nullptr, engine, nullptr, allow_empty) {}
5444 
5456  primitive_desc(const desc &desc, const primitive_attr &attr,
5457  const engine &engine, bool allow_empty = false)
5458  : dnnl::primitive_desc(
5459  &desc.data, &attr, engine, nullptr, allow_empty) {}
5460 
5468  : dnnl::primitive_desc(pd, dnnl::primitive::kind::softmax,
5471 
5473  memory::desc src_desc() const { return base::src_desc(0); }
5474 
5476  memory::desc dst_desc() const { return base::dst_desc(0); }
5477  };
5478 
5480  softmax_forward() = default;
5481 
5485  softmax_forward(const primitive_desc &pd) : primitive(pd) {}
5486 };
5487 
5489 struct softmax_backward : public primitive {
5491  struct desc {
5492  dnnl_softmax_desc_t data;
5493 
5495  desc() = default;
5496 
5510  desc(const memory::desc &diff_data_desc, const memory::desc &data_desc,
5511  int softmax_axis) {
5513  dnnl_softmax_backward_desc_init(&data, &diff_data_desc.data,
5514  &data_desc.data, softmax_axis),
5515  "could not create a descriptor for a softmax backward "
5516  "propagation primitive");
5517  }
5518  };
5519 
5521  struct primitive_desc : public dnnl::primitive_desc {
5523  primitive_desc() = default;
5524 
5538  primitive_desc(const desc &desc, const engine &engine,
5539  const softmax_forward::primitive_desc &hint_fwd_pd,
5540  bool allow_empty = false)
5541  : dnnl::primitive_desc(&desc.data, nullptr, engine,
5542  hint_fwd_pd.get(), allow_empty) {}
5543 
5558  primitive_desc(const desc &desc, const primitive_attr &attr,
5559  const engine &engine,
5560  const softmax_forward::primitive_desc &hint_fwd_pd,
5561  bool allow_empty = false)
5562  : dnnl::primitive_desc(&desc.data, &attr, engine, hint_fwd_pd.get(),
5563  allow_empty) {}
5564 
5572  : dnnl::primitive_desc(pd, dnnl::primitive::kind::softmax,
5574 
5576  memory::desc dst_desc() const { return base::dst_desc(0); }
5577 
5579  memory::desc diff_src_desc() const { return base::diff_src_desc(0); }
5580 
5582  memory::desc diff_dst_desc() const { return base::diff_dst_desc(0); }
5583  };
5584 
5586  softmax_backward() = default;
5587 
5591  softmax_backward(const primitive_desc &pd) : primitive(pd) {}
5592 };
5593 
5595 
5603 
5605 struct logsoftmax_forward : public primitive {
5607  struct desc {
5609 
5611  desc() = default;
5612 
5627  desc(prop_kind prop_kind, const memory::desc &data_desc,
5628  int logsoftmax_axis) {
5631  &data_desc.data, logsoftmax_axis),
5632  "could not create a descriptor for a logsoftmax forward "
5633  "propagation primitive");
5634  }
5635  };
5636 
5638  struct primitive_desc : public dnnl::primitive_desc {
5640  primitive_desc() = default;
5641 
5652  primitive_desc(const desc &desc, const engine &engine,
5653  bool allow_empty = false)
5654  : dnnl::primitive_desc(
5655  &desc.data, nullptr, engine, nullptr, allow_empty) {}
5656 
5668  primitive_desc(const desc &desc, const primitive_attr &attr,
5669  const engine &engine, bool allow_empty = false)
5670  : dnnl::primitive_desc(
5671  &desc.data, &attr, engine, nullptr, allow_empty) {}
5672 
5680  : dnnl::primitive_desc(pd,
5681  // Logsoftmax and softmax share the implementation and
5682  // currently report the same primitive kind. Hence this
5683  // must be softmax and not logsoftmax.
5684  dnnl::primitive::kind::softmax,
5687 
5689  memory::desc src_desc() const { return base::src_desc(0); }
5690 
5692  memory::desc dst_desc() const { return base::dst_desc(0); }
5693  };
5694 
5696  logsoftmax_forward() = default;
5697 
5701  logsoftmax_forward(const primitive_desc &pd) : primitive(pd) {}
5702 };
5703 
5705 struct logsoftmax_backward : public primitive {
5707  struct desc {
5709 
5711  desc() = default;
5712 
5727  desc(const memory::desc &diff_data_desc, const memory::desc &data_desc,
5728  int logsoftmax_axis) {
5730  &diff_data_desc.data, &data_desc.data,
5731  logsoftmax_axis),
5732  "could not create a descriptor for a logsoftmax backward "
5733  "propagation primitive");
5734  }
5735  };
5736 
5738  struct primitive_desc : public dnnl::primitive_desc {
5740  primitive_desc() = default;
5741 
5755  primitive_desc(const desc &desc, const engine &engine,
5756  const logsoftmax_forward::primitive_desc &hint_fwd_pd,
5757  bool allow_empty = false)
5758  : dnnl::primitive_desc(&desc.data, nullptr, engine,
5759  hint_fwd_pd.get(), allow_empty) {}
5760 
5775  primitive_desc(const desc &desc, const primitive_attr &attr,
5776  const engine &engine,
5777  const logsoftmax_forward::primitive_desc &hint_fwd_pd,
5778  bool allow_empty = false)
5779  : dnnl::primitive_desc(&desc.data, &attr, engine, hint_fwd_pd.get(),
5780  allow_empty) {}
5781 
5789  : dnnl::primitive_desc(pd,
5790  // Logsoftmax and softmax share the implementation and
5791  // currently report the same primitive kind. Hence this
5792  // must be softmax and not logsoftmax.
5793  dnnl::primitive::kind::softmax,
5795 
5797  memory::desc dst_desc() const { return base::dst_desc(0); }
5798 
5800  memory::desc diff_src_desc() const { return base::diff_src_desc(0); }
5801 
5803  memory::desc diff_dst_desc() const { return base::diff_dst_desc(0); }
5804  };
5805 
5807  logsoftmax_backward() = default;
5808 
5812  logsoftmax_backward(const primitive_desc &pd) : primitive(pd) {}
5813 };
5814 
5816 
5836 
5838 struct batch_normalization_forward : public primitive {
5840  struct desc {
5842 
5879  desc(prop_kind prop_kind, const memory::desc &data_desc, float epsilon,
5880  normalization_flags flags) {
5883  dnnl::convert_to_c(prop_kind), &data_desc.data,
5884  epsilon, convert_to_c(flags)),
5885  "could not create a descriptor for a batch normalization "
5886  "forward propagation primitive");
5887  }
5888  };
5889 
5892  struct primitive_desc : public dnnl::primitive_desc {
5894  primitive_desc() = default;
5895 
5906  primitive_desc(const desc &desc, const engine &engine,
5907  bool allow_empty = false)
5908  : dnnl::primitive_desc(
5909  &desc.data, nullptr, engine, nullptr, allow_empty) {}
5910 
5922  primitive_desc(const desc &desc, const primitive_attr &attr,
5923  const engine &engine, bool allow_empty = false)
5924  : dnnl::primitive_desc(
5925  &desc.data, &attr, engine, nullptr, allow_empty) {}
5926 
5934  : dnnl::primitive_desc(pd,
5935  dnnl::primitive::kind::batch_normalization,
5938 
5940  memory::desc src_desc() const { return base::src_desc(0); }
5941 
5943  memory::desc dst_desc() const { return base::dst_desc(0); }
5944 
5946  memory::desc weights_desc() const { return base::weights_desc(0); }
5947 
5949  memory::desc workspace_desc() const { return base::workspace_desc(); }
5950 
5953  memory::desc mean_desc() const { return stat_desc(mean); }
5954 
5957  memory::desc variance_desc() const { return stat_desc(var); }
5958 
5959  private:
5960  enum {
5961  mean = 1,
5962  var = 2,
5963  };
5964  memory::desc stat_desc(int kind) const {
5969  &p),
5970  "could not retrieve a descriptor from a primitive "
5971  "descriptor for batch normalization forward propagation "
5972  "primitive");
5973  return query_md(p->flags & dnnl_use_global_stats ? query::src_md
5974  : query::dst_md,
5975  kind);
5976  }
5977  };
5978 
5980  batch_normalization_forward() = default;
5981 
5985  batch_normalization_forward(const primitive_desc &pd) : primitive(pd) {}
5986 };
5987 
5989 struct batch_normalization_backward : public primitive {
5991  struct desc {
5993 
6023  desc(prop_kind prop_kind, const memory::desc &diff_data_desc,
6024  const memory::desc &data_desc, float epsilon,
6025  normalization_flags flags) {
6028  dnnl::convert_to_c(prop_kind), &diff_data_desc.data,
6029  &data_desc.data, epsilon, convert_to_c(flags)),
6030  "could not create a descriptor for a batch normalization "
6031  "backward propagation primitive");
6032  }
6033  };
6034 
6037  struct primitive_desc : public dnnl::primitive_desc {
6039  primitive_desc() = default;
6040 
6054  primitive_desc(const desc &desc, const engine &engine,
6055  const batch_normalization_forward::primitive_desc &hint_fwd_pd,
6056  bool allow_empty = false)
6057  : dnnl::primitive_desc(&desc.data, nullptr, engine,
6058  hint_fwd_pd.get(), allow_empty) {}
6059 
6074  primitive_desc(const desc &desc, const primitive_attr &attr,
6075  const engine &engine,
6076  const batch_normalization_forward::primitive_desc &hint_fwd_pd,
6077  bool allow_empty = false)
6078  : dnnl::primitive_desc(&desc.data, &attr, engine, hint_fwd_pd.get(),
6079  allow_empty) {}
6080 
6088  : dnnl::primitive_desc(pd,
6089  dnnl::primitive::kind::batch_normalization,
6091  }
6092 
6094  memory::desc src_desc() const { return base::src_desc(0); }
6095 
6097  memory::desc weights_desc() const { return base::weights_desc(0); }
6098 
6100  memory::desc dst_desc() const { return base::dst_desc(0); }
6101 
6103  memory::desc diff_src_desc() const { return base::diff_src_desc(0); }
6104 
6106  memory::desc diff_dst_desc() const { return base::diff_dst_desc(0); }
6107 
6109  memory::desc diff_weights_desc() const {
6110  return base::diff_weights_desc(0);
6111  }
6112 
6114  memory::desc mean_desc() const { return query_md(query::src_md, 1); }
6115 
6117  memory::desc variance_desc() const {
6118  return query_md(query::src_md, 2);
6119  }
6120 
6122  memory::desc workspace_desc() const { return base::workspace_desc(); }
6123  };
6124 
6126  batch_normalization_backward() = default;
6127 
6131  batch_normalization_backward(const primitive_desc &pd) : primitive(pd) {}
6132 };
6133 
6135 
6157 
6159 struct layer_normalization_forward : public primitive {
6161  struct desc {
6163 
6193  desc(prop_kind prop_kind, const memory::desc &data_desc,
6194  const memory::desc &stat_desc, float epsilon,
6195  normalization_flags flags) {
6198  dnnl::convert_to_c(prop_kind), &data_desc.data,
6199  &stat_desc.data, epsilon, convert_to_c(flags)),
6200  "could not create a descriptor for a layer normalization "
6201  "forward propagation primitive");
6202  }
6203 
6232  desc(prop_kind prop_kind, const memory::desc &data_desc, float epsilon,
6233  normalization_flags flags) {
6236  dnnl::convert_to_c(prop_kind), &data_desc.data,
6237  nullptr, epsilon, convert_to_c(flags)),
6238  "could not create a descriptor for a layer normalization "
6239  "forward propagation primitive");
6240  }
6241  };
6242 
6245  struct primitive_desc : public dnnl::primitive_desc {
6247  primitive_desc() = default;
6248 
6259  primitive_desc(const desc &desc, const engine &engine,
6260  bool allow_empty = false)
6261  : dnnl::primitive_desc(
6262  &desc.data, nullptr, engine, nullptr, allow_empty) {}
6263 
6275  primitive_desc(const desc &desc, const primitive_attr &attr,
6276  const engine &engine, bool allow_empty = false)
6277  : dnnl::primitive_desc(
6278  &desc.data, &attr, engine, nullptr, allow_empty) {}
6279 
6287  : dnnl::primitive_desc(pd,
6288  dnnl::primitive::kind::layer_normalization,
6291 
6293  memory::desc src_desc() const { return base::src_desc(0); }
6294 
6296  memory::desc dst_desc() const { return base::dst_desc(0); }
6297 
6299  memory::desc weights_desc() const { return base::weights_desc(0); }
6300 
6302  memory::desc workspace_desc() const { return base::workspace_desc(); }
6303 
6305  memory::desc mean_desc() const { return stat_desc(mean); }
6306 
6308  memory::desc variance_desc() const { return stat_desc(var); }
6309 
6310  private:
6311  enum {
6312  mean = 1,
6313  var = 2,
6314  };
6315  memory::desc stat_desc(int kind) const {
6320  &p),
6321  "could not retrieve a descriptor from a primitive "
6322  "descriptor for layer normalization forward propagation "
6323  "primitive");
6324  return query_md(p->flags & dnnl_use_global_stats ? query::src_md
6325  : query::dst_md,
6326  kind);
6327  }
6328  };
6329 
6331  layer_normalization_forward() = default;
6332 
6336  layer_normalization_forward(const primitive_desc &pd) : primitive(pd) {}
6337 };
6338 
6340 struct layer_normalization_backward : public primitive {
6342  struct desc {
6344 
6373  desc(prop_kind prop_kind, const memory::desc &diff_data_desc,
6374  const memory::desc &data_desc, const memory::desc &stat_desc,
6375  float epsilon, normalization_flags flags) {
6378  dnnl::convert_to_c(prop_kind), &diff_data_desc.data,
6379  &data_desc.data, &stat_desc.data, epsilon,
6380  convert_to_c(flags)),
6381  "could not create a descriptor for a batch normalization "
6382  "backward propagation primitive");
6383  }
6384 
6412  desc(prop_kind prop_kind, const memory::desc &diff_data_desc,
6413  const memory::desc &data_desc, float epsilon,
6414  normalization_flags flags) {
6417  &diff_data_desc.data, &data_desc.data,
6418  nullptr, epsilon, convert_to_c(flags)),
6419  "could not create a descriptor for a batch normalization "
6420  "backward propagation primitive");
6421  }
6422  };
6423 
6426  struct primitive_desc : public dnnl::primitive_desc {
6428  primitive_desc() = default;
6429 
6443  primitive_desc(const desc &desc, const engine &engine,
6444  const layer_normalization_forward::primitive_desc &hint_fwd_pd,
6445  bool allow_empty = false)
6446  : dnnl::primitive_desc(&desc.data, nullptr, engine,
6447  hint_fwd_pd.get(), allow_empty) {}
6448 
6463  primitive_desc(const desc &desc, const primitive_attr &attr,
6464  const engine &engine,
6465  const layer_normalization_forward::primitive_desc &hint_fwd_pd,
6466  bool allow_empty = false)
6467  : dnnl::primitive_desc(&desc.data, &attr, engine, hint_fwd_pd.get(),
6468  allow_empty) {}
6469 
6477  : dnnl::primitive_desc(pd,
6478  dnnl::primitive::kind::layer_normalization,
6480  }
6481 
6483  memory::desc src_desc() const { return base::src_desc(0); }
6484 
6486  memory::desc weights_desc() const { return base::weights_desc(0); }
6487 
6489  memory::desc dst_desc() const { return base::dst_desc(0); }
6490 
6492  memory::desc diff_src_desc() const { return base::diff_src_desc(0); }
6493 
6495  memory::desc diff_dst_desc() const { return base::diff_dst_desc(0); }
6496 
6498  memory::desc diff_weights_desc() const {
6499  return base::diff_weights_desc(0);
6500  }
6501 
6503  memory::desc mean_desc() const { return query_md(query::src_md, 1); }
6504 
6506  memory::desc variance_desc() const {
6507  return query_md(query::src_md, 2);
6508  }
6509 
6511  memory::desc workspace_desc() const { return base::workspace_desc(); }
6512  };
6513 
6515  layer_normalization_backward() = default;
6516 
6520  layer_normalization_backward(const primitive_desc &pd) : primitive(pd) {}
6521 };
6522 
6524 
6532 
6534 struct inner_product_forward : public primitive {
6536  struct desc {
6538 
6561  desc(prop_kind prop_kind, const memory::desc &src_desc,
6562  const memory::desc &weights_desc, const memory::desc &bias_desc,
6563  const memory::desc &dst_desc) {
6566  &src_desc.data, &weights_desc.data,
6567  &bias_desc.data, &dst_desc.data),
6568  "could not create a descriptor for an inner product "
6569  "forward propagation primitive");
6570  }
6571 
6592  desc(prop_kind prop_kind, const memory::desc &src_desc,
6593  const memory::desc &weights_desc,
6594  const memory::desc &dst_desc) {
6597  dnnl::convert_to_c(prop_kind), &src_desc.data,
6598  &weights_desc.data, nullptr, &dst_desc.data),
6599  "could not create a descriptor for an inner product "
6600  "forward propagation primitive");
6601  }
6602  };
6603 
6605  struct primitive_desc : public dnnl::primitive_desc {
6607  primitive_desc() = default;
6608 
6619  primitive_desc(const desc &desc, const engine &engine,
6620  bool allow_empty = false)
6621  : dnnl::primitive_desc(
6622  &desc.data, nullptr, engine, nullptr, allow_empty) {}
6623 
6635  primitive_desc(const desc &desc, const primitive_attr &attr,
6636  const engine &engine, bool allow_empty = false)
6637  : dnnl::primitive_desc(
6638  &desc.data, &attr, engine, nullptr, allow_empty) {}
6639 
6647  : dnnl::primitive_desc(pd, dnnl::primitive::kind::inner_product,
6650 
6652  memory::desc src_desc() const { return base::src_desc(0); }
6653 
6655  memory::desc weights_desc() const { return base::weights_desc(0); }
6656 
6658  memory::desc dst_desc() const { return base::dst_desc(0); }
6659 
6661  memory::desc bias_desc() const { return base::weights_desc(1); }
6662  };
6663 
6665  inner_product_forward() = default;
6666 
6670  inner_product_forward(const primitive_desc &pd) : primitive(pd) {}
6671 };
6672 
6674 struct inner_product_backward_data : public primitive {
6676  struct desc {
6678 
6696  desc(const memory::desc &diff_src_desc,
6697  const memory::desc &weights_desc,
6698  const memory::desc &diff_dst_desc) {
6700  &diff_src_desc.data, &weights_desc.data,
6701  &diff_dst_desc.data),
6702  "could not create a descriptor for an inner product "
6703  "backward propagation primitive");
6704  }
6705  };
6706 
6709  struct primitive_desc : public dnnl::primitive_desc {
6711  primitive_desc() = default;
6712 
6726  primitive_desc(const desc &desc, const engine &engine,
6727  const inner_product_forward::primitive_desc &hint_fwd_pd,
6728  bool allow_empty = false)
6729  : dnnl::primitive_desc(&desc.data, nullptr, engine,
6730  hint_fwd_pd.get(), allow_empty) {}
6731 
6746  primitive_desc(const desc &desc, const primitive_attr &attr,
6747  const engine &engine,
6748  const inner_product_forward::primitive_desc &hint_fwd_pd,
6749  bool allow_empty = false)
6750  : dnnl::primitive_desc(&desc.data, &attr, engine, hint_fwd_pd.get(),
6751  allow_empty) {}
6752 
6760  : dnnl::primitive_desc(pd, dnnl::primitive::kind::inner_product,
6762 
6764  memory::desc diff_src_desc() const { return base::diff_src_desc(0); }
6765 
6767  memory::desc weights_desc() const { return base::weights_desc(0); }
6768 
6770  memory::desc diff_dst_desc() const { return base::diff_dst_desc(0); }
6771  };
6772 
6774  inner_product_backward_data() = default;
6775 
6779  inner_product_backward_data(const primitive_desc &pd) : primitive(pd) {}
6780 };
6781 
6783 struct inner_product_backward_weights : public primitive {
6785  struct desc {
6787 
6807  desc(const memory::desc &src_desc,
6808  const memory::desc &diff_weights_desc,
6809  const memory::desc &diff_bias_desc,
6810  const memory::desc &diff_dst_desc) {
6813  &src_desc.data, &diff_weights_desc.data,
6814  &diff_bias_desc.data, &diff_dst_desc.data),
6815  "could not create a descriptor for an inner product "
6816  "weights gradient primitive");
6817  }
6818 
6836  desc(const memory::desc &src_desc,
6837  const memory::desc &diff_weights_desc,
6838  const memory::desc &diff_dst_desc) {
6841  &src_desc.data, &diff_weights_desc.data, nullptr,
6842  &diff_dst_desc.data),
6843  "could not create a descriptor for an inner product "
6844  "weights gradient primitive");
6845  }
6846  };
6847 
6849  struct primitive_desc : public dnnl::primitive_desc {
6851  primitive_desc() = default;
6852 
6866  primitive_desc(const desc &desc, const engine &engine,
6867  const inner_product_forward::primitive_desc &hint_fwd_pd,
6868  bool allow_empty = false)
6869  : dnnl::primitive_desc(&desc.data, nullptr, engine,
6870  hint_fwd_pd.get(), allow_empty) {}
6871 
6886  primitive_desc(const desc &desc, const primitive_attr &attr,
6887  const engine &engine,
6888  const inner_product_forward::primitive_desc &hint_fwd_pd,
6889  bool allow_empty = false)
6890  : dnnl::primitive_desc(&desc.data, &attr, engine, hint_fwd_pd.get(),
6891  allow_empty) {}
6892 
6900  : dnnl::primitive_desc(pd, dnnl::primitive::kind::inner_product,
6902 
6904  memory::desc src_desc() const { return base::src_desc(0); }
6905 
6907  memory::desc diff_weights_desc() const {
6908  return base::diff_weights_desc(0);
6909  }
6910 
6912  memory::desc diff_dst_desc() const { return base::diff_dst_desc(0); }
6913 
6915  memory::desc diff_bias_desc() const {
6916  return base::diff_weights_desc(1);
6917  }
6918  };
6919 
6921  inner_product_backward_weights() = default;
6922 
6926  inner_product_backward_weights(const primitive_desc &pd) : primitive(pd) {}
6927 };
6928 
6930 
6938 
6940 struct rnn_primitive_desc_base : public primitive_desc {
6941  using primitive_desc::primitive_desc;
6942 
6944  rnn_primitive_desc_base() = default;
6945 
6954  dnnl::algorithm cell_kind)
6955  : rnn_primitive_desc_base(pd, prop_kind, prop_kind, cell_kind) {}
6956 
6959  memory::desc src_layer_desc() const { return base::src_desc(0); }
6960 
6965  memory::desc src_iter_desc() const { return base::src_desc(1); }
6966 
6969  memory::desc src_iter_c_desc() const { return base::src_desc(2); }
6970 
6973  memory::desc weights_layer_desc() const { return base::weights_desc(0); }
6974 
6977  memory::desc weights_iter_desc() const { return base::weights_desc(1); }
6978 
6983  memory::desc bias_desc() const { return base::weights_desc(2); }
6984 
6987  memory::desc dst_layer_desc() const { return base::dst_desc(0); }
6988 
6993  memory::desc dst_iter_desc() const { return base::dst_desc(1); }
6994 
6997  memory::desc dst_iter_c_desc() const { return base::dst_desc(2); }
6998 
7001  memory::desc diff_src_layer_desc() const { return base::diff_src_desc(0); }
7002 
7007  memory::desc diff_src_iter_desc() const { return base::diff_src_desc(1); }
7008 
7011  memory::desc diff_src_iter_c_desc() const { return base::diff_src_desc(2); }
7012 
7015  memory::desc diff_weights_layer_desc() const {
7016  return base::diff_weights_desc(0);
7017  }
7018 
7021  memory::desc diff_weights_iter_desc() const {
7022  return base::diff_weights_desc(1);
7023  }
7024 
7029  memory::desc diff_bias_desc() const { return base::diff_weights_desc(2); }
7030 
7033  memory::desc diff_dst_layer_desc() const { return base::diff_dst_desc(0); }
7034 
7039  memory::desc diff_dst_iter_desc() const { return base::diff_dst_desc(1); }
7040 
7043  memory::desc diff_dst_iter_c_desc() const { return base::diff_dst_desc(2); }
7044 
7045 protected:
7046  using rnn_base = rnn_primitive_desc_base;
7047 
7048  // (Deliberately not using doxygen comments)
7049  //
7050  // Constructs an RNN primitive descriptor base from a C API primitive
7051  // descriptor while checking that it actually describes the expected
7052  // primitive by comparing propagation and primitive kinds. Caller can
7053  // pass two options propagation kinds. This is typically used to check
7054  // that propagation kind is inference or training forward propagation.
7055  //
7056  // @param pd C API primitive descriptor.
7057  // @param prop_kind1 Expected propagation kind.
7058  // @param prop_kind2 Expected propagation kind.
7059  // @param cell_kind Expected cell kind.
7061  dnnl::prop_kind prop_kind1, dnnl::prop_kind prop_kind2,
7062  dnnl::algorithm cell_kind) {
7064  dnnl_status_t rc;
7066  error::wrap_c_api(rc,
7067  "could not retrieve a descriptor from a primitive descriptor "
7068  "for an RNN primitive");
7069 
7070  dnnl_prop_kind_t c_prop_kind1 = convert_to_c(prop_kind1);
7071  dnnl_prop_kind_t c_prop_kind2 = convert_to_c(prop_kind2);
7072  dnnl_alg_kind_t c_cell_kind = convert_to_c(cell_kind);
7073 
7074  bool ok = rnn_d->primitive_kind == dnnl_rnn
7075  && (rnn_d->prop_kind == c_prop_kind1
7076  || rnn_d->prop_kind == c_prop_kind2)
7077  && rnn_d->cell_kind == c_cell_kind;
7078 
7079  if (!ok)
7080  DNNL_THROW_ERROR(dnnl_invalid_arguments,
7081  "mismatch between expected and provided descriptors for an "
7082  "RNN primitive");
7083 
7084  reset_with_clone(pd);
7085  }
7086 };
7087 
7089 struct vanilla_rnn_forward : public primitive {
7091  struct desc {
7092  dnnl_rnn_desc_t data;
7093 
7146  desc(prop_kind prop_kind, algorithm activation, rnn_direction direction,
7147  const memory::desc &src_layer_desc,
7148  const memory::desc &src_iter_desc,
7149  const memory::desc &weights_layer_desc,
7150  const memory::desc &weights_iter_desc,
7151  const memory::desc &bias_desc,
7152  const memory::desc &dst_layer_desc,
7153  const memory::desc &dst_iter_desc,
7154  rnn_flags flags = rnn_flags::undef, float alpha = 0.0f,
7155  float beta = 0.0f) {
7159  dnnl::convert_to_c(activation),
7160  dnnl::convert_to_c(direction), &src_layer_desc.data,
7161  &src_iter_desc.data, &weights_layer_desc.data,
7162  &weights_iter_desc.data, &bias_desc.data,
7163  &dst_layer_desc.data, &dst_iter_desc.data,
7164  dnnl::convert_to_c(flags), alpha, beta),
7165  "could not create a descriptor for a vanilla RNN forward "
7166  "propagation primitive");
7167  }
7168  };
7169 
7171  struct primitive_desc : public rnn_primitive_desc_base {
7173  primitive_desc() = default;
7174 
7185  primitive_desc(const desc &desc, const engine &engine,
7186  bool allow_empty = false)
7188  &desc.data, nullptr, engine, nullptr, allow_empty) {}
7189 
7201  primitive_desc(const desc &desc, const primitive_attr &attr,
7202  const engine &engine, bool allow_empty = false)
7204  &desc.data, &attr, engine, nullptr, allow_empty) {}
7205 
7215  dnnl::algorithm::vanilla_rnn) {}
7216 
7218  memory::desc src_layer_desc() const {
7219  return rnn_base::src_layer_desc();
7220  }
7221 
7223  memory::desc src_iter_desc() const { return rnn_base::src_iter_desc(); }
7224 
7226  memory::desc weights_layer_desc() const {
7228  }
7229 
7231  memory::desc weights_iter_desc() const {
7232  return rnn_base::weights_iter_desc();
7233  }
7234 
7236  memory::desc bias_desc() const { return rnn_base::bias_desc(); }
7237 
7239  memory::desc dst_layer_desc() const {
7240  return rnn_base::dst_layer_desc();
7241  }
7242 
7244  memory::desc dst_iter_desc() const { return rnn_base::dst_iter_desc(); }
7245 
7247  memory::desc workspace_desc() const {
7248  return rnn_base::workspace_desc();
7249  }
7250  };
7251 
7253  vanilla_rnn_forward() = default;
7254 
7258  vanilla_rnn_forward(const primitive_desc &pd) : primitive(pd) {}
7259 };
7260 
7262 struct vanilla_rnn_backward : public primitive {
7264  struct desc {
7265  dnnl_rnn_desc_t data;
7266 
7342  desc(prop_kind prop_kind, algorithm activation, rnn_direction direction,
7343  const memory::desc &src_layer_desc,
7344  const memory::desc &src_iter_desc,
7345  const memory::desc &weights_layer_desc,
7346  const memory::desc &weights_iter_desc,
7347  const memory::desc &bias_desc,
7348  const memory::desc &dst_layer_desc,
7349  const memory::desc &dst_iter_desc,
7350  const memory::desc &diff_src_layer_desc,
7351  const memory::desc &diff_src_iter_desc,
7352  const memory::desc &diff_weights_layer_desc,
7353  const memory::desc &diff_weights_iter_desc,
7354  const memory::desc &diff_bias_desc,
7355  const memory::desc &diff_dst_layer_desc,
7356  const memory::desc &diff_dst_iter_desc,
7357  rnn_flags flags = rnn_flags::undef, float alpha = 0.0f,
7358  float beta = 0.0f) {
7362  dnnl::convert_to_c(activation),
7363  dnnl::convert_to_c(direction), &src_layer_desc.data,
7364  &src_iter_desc.data, &weights_layer_desc.data,
7365  &weights_iter_desc.data, &bias_desc.data,
7366  &dst_layer_desc.data, &dst_iter_desc.data,
7367  &diff_src_layer_desc.data, &diff_src_iter_desc.data,
7368  &diff_weights_layer_desc.data,
7369  &diff_weights_iter_desc.data, &diff_bias_desc.data,
7370  &diff_dst_layer_desc.data, &diff_dst_iter_desc.data,
7371  dnnl::convert_to_c(flags), alpha, beta),
7372  "could not create a descriptor for a vanilla RNN backward "
7373  "propagation primitive");
7374  }
7375  };
7376 
7378  struct primitive_desc : public rnn_primitive_desc_base {
7380  primitive_desc() = default;
7381 
7395  primitive_desc(const desc &desc, const engine &engine,
7396  const vanilla_rnn_forward::primitive_desc &hint_fwd_pd,
7397  bool allow_empty = false)
7398  : rnn_primitive_desc_base(&desc.data, nullptr, engine,
7399  hint_fwd_pd.get(), allow_empty) {}
7400 
7415  primitive_desc(const desc &desc, const primitive_attr &attr,
7416  const engine &engine,
7417  const vanilla_rnn_forward::primitive_desc &hint_fwd_pd,
7418  bool allow_empty = false)
7419  : rnn_primitive_desc_base(&desc.data, &attr, engine,
7420  hint_fwd_pd.get(), allow_empty) {}
7421 
7430  dnnl::algorithm::vanilla_rnn) {}
7431 
7433  memory::desc src_layer_desc() const {
7434  return rnn_base::src_layer_desc();
7435  }
7436 
7438  memory::desc src_iter_desc() const { return rnn_base::src_iter_desc(); }
7439 
7441  memory::desc weights_layer_desc() const {
7443  }
7444 
7446  memory::desc weights_iter_desc() const {
7447  return rnn_base::weights_iter_desc();
7448  }
7449 
7451  memory::desc bias_desc() const { return rnn_base::bias_desc(); }
7452 
7454  memory::desc dst_layer_desc() const {
7455  return rnn_base::dst_layer_desc();
7456  }
7457 
7459  memory::desc dst_iter_desc() const { return rnn_base::dst_iter_desc(); }
7460 
7462  memory::desc workspace_desc() const {
7463  return rnn_base::workspace_desc();
7464  }
7465 
7467  memory::desc diff_src_layer_desc() const {
7469  }
7470 
7472  memory::desc diff_src_iter_desc() const {
7474  }
7475 
7477  memory::desc diff_weights_layer_desc() const {
7479  }
7480 
7482  memory::desc diff_weights_iter_desc() const {
7484  }
7485 
7487  memory::desc diff_bias_desc() const {
7488  return rnn_base::diff_bias_desc();
7489  }
7490 
7492  memory::desc diff_dst_layer_desc() const {
7494  }
7495 
7497  memory::desc diff_dst_iter_desc() const {
7499  }
7500  };
7501 
7503  vanilla_rnn_backward() = default;
7504 
7508  vanilla_rnn_backward(const primitive_desc &pd) : primitive(pd) {}
7509 };
7510 
7512 struct lstm_forward : public primitive {
7514  struct desc {
7515  dnnl_rnn_desc_t data;
7516 
7569  const memory::desc &src_layer_desc,
7570  const memory::desc &src_iter_desc,
7571  const memory::desc &src_iter_c_desc,
7572  const memory::desc &weights_layer_desc,
7573  const memory::desc &weights_iter_desc,
7574  const memory::desc &bias_desc,
7575  const memory::desc &dst_layer_desc,
7576  const memory::desc &dst_iter_desc,
7577  const memory::desc &dst_iter_c_desc,
7578  rnn_flags flags = rnn_flags::undef) {
7582  dnnl::convert_to_c(direction), &src_layer_desc.data,
7583  &src_iter_desc.data, &src_iter_c_desc.data,
7584  &weights_layer_desc.data, &weights_iter_desc.data,
7585  &bias_desc.data, &dst_layer_desc.data,
7586  &dst_iter_desc.data, &dst_iter_c_desc.data,
7587  dnnl::convert_to_c(flags)),
7588  "could not create a descriptor for an LSTM forward "
7589  "propagation primitive");
7590  }
7591  };
7592 
7594  struct primitive_desc : public rnn_primitive_desc_base {
7596  primitive_desc() = default;
7597 
7607  primitive_desc(const desc &desc, const engine &engine,
7608  bool allow_empty = false)
7610  &desc.data, nullptr, engine, nullptr, allow_empty) {}
7611 
7622  primitive_desc(const desc &desc, const primitive_attr &attr,
7623  const engine &engine, bool allow_empty = false)
7625  &desc.data, &attr, engine, nullptr, allow_empty) {}
7626 
7637 
7639  memory::desc src_layer_desc() const {
7640  return rnn_base::src_layer_desc();
7641  }
7642 
7644  memory::desc src_iter_desc() const { return rnn_base::src_iter_desc(); }
7645 
7647  memory::desc src_iter_c_desc() const {
7648  return rnn_base::src_iter_c_desc();
7649  }
7650 
7652  memory::desc weights_layer_desc() const {
7654  }
7655 
7657  memory::desc weights_iter_desc() const {
7658  return rnn_base::weights_iter_desc();
7659  }
7660 
7662  memory::desc bias_desc() const { return rnn_base::bias_desc(); }
7663 
7665  memory::desc dst_layer_desc() const {
7666  return rnn_base::dst_layer_desc();
7667  }
7668 
7670  memory::desc dst_iter_desc() const { return rnn_base::dst_iter_desc(); }
7671 
7673  memory::desc dst_iter_c_desc() const {
7674  return rnn_base::dst_iter_c_desc();
7675  }
7676 
7678  memory::desc workspace_desc() const {
7679  return rnn_base::workspace_desc();
7680  }
7681  };
7682 
7684  lstm_forward() = default;
7685 
7689  lstm_forward(const primitive_desc &pd) : primitive(pd) {}
7690 };
7691 
7693 struct lstm_backward : public primitive {
7695  struct desc {
7696  dnnl_rnn_desc_t data;
7697 
7781  const memory::desc &src_layer_desc,
7782  const memory::desc &src_iter_desc,
7783  const memory::desc &src_iter_c_desc,
7784  const memory::desc &weights_layer_desc,
7785  const memory::desc &weights_iter_desc,
7786  const memory::desc &bias_desc,
7787  const memory::desc &dst_layer_desc,
7788  const memory::desc &dst_iter_desc,
7789  const memory::desc &dst_iter_c_desc,
7790  const memory::desc &diff_src_layer_desc,
7791  const memory::desc &diff_src_iter_desc,
7792  const memory::desc &diff_src_iter_c_desc,
7793  const memory::desc &diff_weights_layer_desc,
7794  const memory::desc &diff_weights_iter_desc,
7795  const memory::desc &diff_bias_desc,
7796  const memory::desc &diff_dst_layer_desc,
7797  const memory::desc &diff_dst_iter_desc,
7798  const memory::desc &diff_dst_iter_c_desc,
7799  rnn_flags flags = rnn_flags::undef) {
7803  dnnl::convert_to_c(direction), &src_layer_desc.data,
7804  &src_iter_desc.data, &src_iter_c_desc.data,
7805  &weights_layer_desc.data, &weights_iter_desc.data,
7806  &bias_desc.data, &dst_layer_desc.data,
7807  &dst_iter_desc.data, &dst_iter_c_desc.data,
7808  &diff_src_layer_desc.data, &diff_src_iter_desc.data,
7809  &diff_src_iter_c_desc.data,
7810  &diff_weights_layer_desc.data,
7811  &diff_weights_iter_desc.data, &diff_bias_desc.data,
7812  &diff_dst_layer_desc.data, &diff_dst_iter_desc.data,
7813  &diff_dst_iter_c_desc.data,
7814  dnnl::convert_to_c(flags)),
7815  "could not create a descriptor for an LSTM backward "
7816  "propagation primitive");
7817  }
7818  };
7819 
7821  struct primitive_desc : public rnn_primitive_desc_base {
7823  primitive_desc() = default;
7824 
7837  primitive_desc(const desc &desc, const engine &engine,
7838  const lstm_forward::primitive_desc &hint_fwd_pd,
7839  bool allow_empty = false)
7840  : rnn_primitive_desc_base(&desc.data, nullptr, engine,
7841  hint_fwd_pd.get(), allow_empty) {}
7842 
7856  primitive_desc(const desc &desc, const primitive_attr &attr,
7857  const engine &engine,
7858  const lstm_forward::primitive_desc &hint_fwd_pd,
7859  bool allow_empty = false)
7860  : rnn_primitive_desc_base(&desc.data, &attr, engine,
7861  hint_fwd_pd.get(), allow_empty) {}
7862 
7872 
7874  memory::desc src_layer_desc() const {
7875  return rnn_base::src_layer_desc();
7876  }
7877 
7879  memory::desc src_iter_desc() const { return rnn_base::src_iter_desc(); }
7880 
7882  memory::desc src_iter_c_desc() const {
7883  return rnn_base::src_iter_c_desc();
7884  }
7885 
7887  memory::desc weights_layer_desc() const {
7889  }
7890 
7892  memory::desc weights_iter_desc() const {
7893  return rnn_base::weights_iter_desc();
7894  }
7895 
7897  memory::desc bias_desc() const { return rnn_base::bias_desc(); }
7898 
7900  memory::desc dst_layer_desc() const {
7901  return rnn_base::dst_layer_desc();
7902  }
7903 
7905  memory::desc dst_iter_desc() const { return rnn_base::dst_iter_desc(); }
7906 
7908  memory::desc dst_iter_c_desc() const {
7909  return rnn_base::dst_iter_c_desc();
7910  }
7911 
7913  memory::desc workspace_desc() const {
7914  return rnn_base::workspace_desc();
7915  }
7916 
7918  memory::desc diff_src_layer_desc() const {
7920  }
7921 
7923  memory::desc diff_src_iter_desc() const {
7925  }
7926 
7928  memory::desc diff_src_iter_c_desc() const {
7930  }
7931 
7933  memory::desc diff_weights_layer_desc() const {
7935  }
7936 
7938  memory::desc diff_weights_iter_desc() const {
7940  }
7941 
7943  memory::desc diff_bias_desc() const {
7944  return rnn_base::diff_bias_desc();
7945  }
7946 
7948  memory::desc diff_dst_layer_desc() const {
7950  }
7951 
7953  memory::desc diff_dst_iter_desc() const {
7955  }
7956 
7958  memory::desc diff_dst_iter_c_desc() const {
7960  }
7961  };
7962 
7964  lstm_backward() = default;
7965 
7969  lstm_backward(const primitive_desc &pd) : primitive(pd) {}
7970 };
7971 
7973 struct gru_forward : public primitive {
7975  struct desc {
7976  dnnl_rnn_desc_t data;
7977 
8023  const memory::desc &src_layer_desc,
8024  const memory::desc &src_iter_desc,
8025  const memory::desc &weights_layer_desc,
8026  const memory::desc &weights_iter_desc,
8027  const memory::desc &bias_desc,
8028  const memory::desc &dst_layer_desc,
8029  const memory::desc &dst_iter_desc,
8030  rnn_flags flags = rnn_flags::undef) {
8034  dnnl::convert_to_c(direction), &src_layer_desc.data,
8035  &src_iter_desc.data, &weights_layer_desc.data,
8036  &weights_iter_desc.data, &bias_desc.data,
8037  &dst_layer_desc.data, &dst_iter_desc.data,
8038  dnnl::convert_to_c(flags)),
8039  "could not create a descriptor for a GRU forward "
8040  "propagation primitive");
8041  }
8042  };
8043 
8045  struct primitive_desc : public rnn_primitive_desc_base {
8047  primitive_desc() = default;
8048 
8058  primitive_desc(const desc &desc, const engine &engine,
8059  bool allow_empty = false)
8061  &desc.data, nullptr, engine, nullptr, allow_empty) {}
8062 
8073  primitive_desc(const desc &desc, const primitive_attr &attr,
8074  const engine &engine, bool allow_empty = false)
8076  &desc.data, &attr, engine, nullptr, allow_empty) {}
8077 
8087  dnnl::algorithm::vanilla_gru) {}
8088 
8090  memory::desc src_layer_desc() const {
8091  return rnn_base::src_layer_desc();
8092  }
8093 
8095  memory::desc src_iter_desc() const { return rnn_base::src_iter_desc(); }
8096 
8098  memory::desc weights_layer_desc() const {
8100  }
8101 
8103  memory::desc weights_iter_desc() const {
8104  return rnn_base::weights_iter_desc();
8105  }
8106 
8108  memory::desc bias_desc() const { return rnn_base::bias_desc(); }
8109 
8111  memory::desc dst_layer_desc() const {
8112  return rnn_base::dst_layer_desc();
8113  }
8114 
8116  memory::desc dst_iter_desc() const { return rnn_base::dst_iter_desc(); }
8117 
8119  memory::desc workspace_desc() const {
8120  return rnn_base::workspace_desc();
8121  }
8122  };
8123 
8125  gru_forward() = default;
8126 
8130  gru_forward(const primitive_desc &pd) : primitive(pd) {}
8131 };
8132 
8134 struct gru_backward : public primitive {
8136  struct desc {
8137  dnnl_rnn_desc_t data;
8138 
8206  const memory::desc &src_layer_desc,
8207  const memory::desc &src_iter_desc,
8208  const memory::desc &weights_layer_desc,
8209  const memory::desc &weights_iter_desc,
8210  const memory::desc &bias_desc,
8211  const memory::desc &dst_layer_desc,
8212  const memory::desc &dst_iter_desc,
8213  const memory::desc &diff_src_layer_desc,
8214  const memory::desc &diff_src_iter_desc,
8215  const memory::desc &diff_weights_layer_desc,
8216  const memory::desc &diff_weights_iter_desc,
8217  const memory::desc &diff_bias_desc,
8218  const memory::desc &diff_dst_layer_desc,
8219  const memory::desc &diff_dst_iter_desc,
8220  rnn_flags flags = rnn_flags::undef) {
8224  dnnl::convert_to_c(direction), &src_layer_desc.data,
8225  &src_iter_desc.data, &weights_layer_desc.data,
8226  &weights_iter_desc.data, &bias_desc.data,
8227  &dst_layer_desc.data, &dst_iter_desc.data,
8228  &diff_src_layer_desc.data, &diff_src_iter_desc.data,
8229  &diff_weights_layer_desc.data,
8230  &diff_weights_iter_desc.data, &diff_bias_desc.data,
8231  &diff_dst_layer_desc.data, &diff_dst_iter_desc.data,
8232  dnnl::convert_to_c(flags)),
8233  "could not create a descriptor for a GRU backward "
8234  "propagation primitive");
8235  }
8236  };
8237 
8239  struct primitive_desc : public rnn_primitive_desc_base {
8241  primitive_desc() = default;
8242 
8255  primitive_desc(const desc &desc, const engine &engine,
8256  const gru_forward::primitive_desc &hint_fwd_pd,
8257  bool allow_empty = false)
8258  : rnn_primitive_desc_base(&desc.data, nullptr, engine,
8259  hint_fwd_pd.get(), allow_empty) {}
8260 
8274  primitive_desc(const desc &desc, const primitive_attr &attr,
8275  const engine &engine,
8276  const gru_forward::primitive_desc &hint_fwd_pd,
8277  bool allow_empty = false)
8278  : rnn_primitive_desc_base(&desc.data, &attr, engine,
8279  hint_fwd_pd.get(), allow_empty) {}
8280 
8289  dnnl::algorithm::vanilla_gru) {}
8290 
8292  memory::desc src_layer_desc() const {
8293  return rnn_base::src_layer_desc();
8294  }
8295 
8297  memory::desc src_iter_desc() const { return rnn_base::src_iter_desc(); }
8298 
8300  memory::desc weights_layer_desc() const {
8302  }
8303 
8305  memory::desc weights_iter_desc() const {
8306  return rnn_base::weights_iter_desc();
8307  }
8308 
8310  memory::desc bias_desc() const { return rnn_base::bias_desc(); }
8311 
8313  memory::desc dst_layer_desc() const {
8314  return rnn_base::dst_layer_desc();
8315  }
8316 
8318  memory::desc dst_iter_desc() const { return rnn_base::dst_iter_desc(); }
8319 
8321  memory::desc workspace_desc() const {
8322  return rnn_base::workspace_desc();
8323  }
8324 
8326  memory::desc diff_src_layer_desc() const {
8328  }
8329 
8331  memory::desc diff_src_iter_desc() const {
8333  }
8334 
8336  memory::desc diff_weights_layer_desc() const {
8338  }
8339 
8341  memory::desc diff_weights_iter_desc() const {
8343  }
8344 
8346  memory::desc diff_bias_desc() const {
8347  return rnn_base::diff_bias_desc();
8348  }
8349 
8351  memory::desc diff_dst_layer_desc() const {
8353  }
8354 
8356  memory::desc diff_dst_iter_desc() const {
8358  }
8359  };
8360 
8362  gru_backward() = default;
8363 
8367  gru_backward(const primitive_desc &pd) : primitive(pd) {}
8368 };
8369 
8371 struct lbr_gru_forward : public primitive {
8373  struct desc {
8374  dnnl_rnn_desc_t data;
8375 
8421  const memory::desc &src_layer_desc,
8422  const memory::desc &src_iter_desc,
8423  const memory::desc &weights_layer_desc,
8424  const memory::desc &weights_iter_desc,
8425  const memory::desc &bias_desc,
8426  const memory::desc &dst_layer_desc,
8427  const memory::desc &dst_iter_desc,
8428  rnn_flags flags = rnn_flags::undef) {
8432  dnnl::convert_to_c(direction), &src_layer_desc.data,
8433  &src_iter_desc.data, &weights_layer_desc.data,
8434  &weights_iter_desc.data, &bias_desc.data,
8435  &dst_layer_desc.data, &dst_iter_desc.data,
8436  dnnl::convert_to_c(flags)),
8437  "could not create a descriptor for an LBR GRU forward "
8438  "propagation primitive");
8439  }
8440  };
8441 
8443  struct primitive_desc : public rnn_primitive_desc_base {
8445  primitive_desc() = default;
8446 
8457  primitive_desc(const desc &desc, const engine &engine,
8458  bool allow_empty = false)
8460  &desc.data, nullptr, engine, nullptr, allow_empty) {}
8461 
8473  primitive_desc(const desc &desc, const primitive_attr &attr,
8474  const engine &engine, bool allow_empty = false)
8476  &desc.data, &attr, engine, nullptr, allow_empty) {}
8477 
8487  dnnl::algorithm::lbr_gru) {}
8488 
8490  memory::desc src_layer_desc() const {
8491  return rnn_base::src_layer_desc();
8492  }
8493 
8495  memory::desc src_iter_desc() const { return rnn_base::src_iter_desc(); }
8496 
8498  memory::desc weights_layer_desc() const {
8500  }
8501 
8503  memory::desc weights_iter_desc() const {
8504  return rnn_base::weights_iter_desc();
8505  }
8506 
8508  memory::desc bias_desc() const { return rnn_base::bias_desc(); }
8509 
8511  memory::desc dst_layer_desc() const {
8512  return rnn_base::dst_layer_desc();
8513  }
8514 
8516  memory::desc dst_iter_desc() const { return rnn_base::dst_iter_desc(); }
8517 
8519  memory::desc workspace_desc() const {
8520  return rnn_base::workspace_desc();
8521  }
8522  };
8523 
8525  lbr_gru_forward() = default;
8526 
8530  lbr_gru_forward(const primitive_desc &pd) : primitive(pd) {}
8531 };
8532 
8534 struct lbr_gru_backward : public primitive {
8536  struct desc {
8537  dnnl_rnn_desc_t data;
8538 
8607  const memory::desc &src_layer_desc,
8608  const memory::desc &src_iter_desc,
8609  const memory::desc &weights_layer_desc,
8610  const memory::desc &weights_iter_desc,
8611  const memory::desc &bias_desc,
8612  const memory::desc &dst_layer_desc,
8613  const memory::desc &dst_iter_desc,
8614  const memory::desc &diff_src_layer_desc,
8615  const memory::desc &diff_src_iter_desc,
8616  const memory::desc &diff_weights_layer_desc,
8617  const memory::desc &diff_weights_iter_desc,
8618  const memory::desc &diff_bias_desc,
8619  const memory::desc &diff_dst_layer_desc,
8620  const memory::desc &diff_dst_iter_desc,
8621  rnn_flags flags = rnn_flags::undef) {
8625  dnnl::convert_to_c(direction), &src_layer_desc.data,
8626  &src_iter_desc.data, &weights_layer_desc.data,
8627  &weights_iter_desc.data, &bias_desc.data,
8628  &dst_layer_desc.data, &dst_iter_desc.data,
8629  &diff_src_layer_desc.data, &diff_src_iter_desc.data,
8630  &diff_weights_layer_desc.data,
8631  &diff_weights_iter_desc.data, &diff_bias_desc.data,
8632  &diff_dst_layer_desc.data, &diff_dst_iter_desc.data,
8633  dnnl::convert_to_c(flags)),
8634  "could not create a descriptor for an LBR GRU backward "
8635  "propagation primitive");
8636  }
8637  };
8638 
8640  struct primitive_desc : public rnn_primitive_desc_base {
8642  primitive_desc() = default;
8643 
8657  primitive_desc(const desc &desc, const engine &engine,
8658  const lbr_gru_forward::primitive_desc &hint_fwd_pd,
8659  bool allow_empty = false)
8660  : rnn_primitive_desc_base(&desc.data, nullptr, engine,
8661  hint_fwd_pd.get(), allow_empty) {}
8662 
8677  primitive_desc(const desc &desc, const primitive_attr &attr,
8678  const engine &engine,
8679  const lbr_gru_forward::primitive_desc &hint_fwd_pd,
8680  bool allow_empty = false)
8681  : rnn_primitive_desc_base(&desc.data, &attr, engine,
8682  hint_fwd_pd.get(), allow_empty) {}
8683 
8693 
8695  memory::desc src_layer_desc() const {
8696  return rnn_base::src_layer_desc();
8697  }
8698 
8700  memory::desc src_iter_desc() const { return rnn_base::src_iter_desc(); }
8701 
8703  memory::desc weights_layer_desc() const {
8705  }
8706 
8708  memory::desc weights_iter_desc() const {
8709  return rnn_base::weights_iter_desc();
8710  }
8711 
8713  memory::desc bias_desc() const { return rnn_base::bias_desc(); }
8714 
8716  memory::desc dst_layer_desc() const {
8717  return rnn_base::dst_layer_desc();
8718  }
8719 
8721  memory::desc dst_iter_desc() const { return rnn_base::dst_iter_desc(); }
8722 
8724  memory::desc workspace_desc() const {
8725  return rnn_base::workspace_desc();
8726  }
8727 
8729  memory::desc diff_src_layer_desc() const {
8731  }
8732 
8734  memory::desc diff_src_iter_desc() const {
8736  }
8737 
8739  memory::desc diff_weights_layer_desc() const {
8741  }
8742 
8744  memory::desc diff_weights_iter_desc() const {
8746  }
8747 
8749  memory::desc diff_bias_desc() const {
8750  return rnn_base::diff_bias_desc();
8751  }
8752 
8754  memory::desc diff_dst_layer_desc() const {
8756  }
8757 
8759  memory::desc diff_dst_iter_desc() const {
8761  }
8762  };
8763 
8765  lbr_gru_backward() = default;
8766 
8770  lbr_gru_backward(const primitive_desc &pd) : primitive(pd) {}
8771 };
8772 
8774 
8782 
8784 struct shuffle_forward : public primitive {
8786  struct desc {
8787  dnnl_shuffle_desc_t data;
8788 
8804  desc(prop_kind prop_kind, const memory::desc &data_desc, int axis,
8805  int group_size) {
8808  &data_desc.data, axis, group_size),
8809  "could not create a descriptor for a shuffle forward "
8810  "propagation primitive");
8811  }
8812  };
8813 
8815  struct primitive_desc : public dnnl::primitive_desc {
8817  primitive_desc() = default;
8818 
8830  primitive_desc(const desc &desc, const engine &engine,
8831  const primitive_attr &attr = primitive_attr(),
8832  bool allow_empty = false)
8833  : dnnl::primitive_desc(
8834  &desc.data, &attr, engine, nullptr, allow_empty) {}
8835 
8843  : dnnl::primitive_desc(pd, dnnl::primitive::kind::shuffle,
8846 
8848  memory::desc src_desc() const { return base::src_desc(0); }
8849 
8851  memory::desc dst_desc() const { return base::dst_desc(0); }
8852  };
8853 
8855  shuffle_forward() = default;
8856 
8860  shuffle_forward(const primitive_desc &pd) : primitive(pd) {}
8861 };
8862 
8864 struct shuffle_backward : public primitive {
8867  struct desc {
8868  dnnl_shuffle_desc_t data;
8869 
8883  desc(const memory::desc &diff_data_desc, int axis, int group_size) {
8885  &diff_data_desc.data, axis, group_size),
8886  "could not create a descriptor for a shuffle backward "
8887  "propagation primitive");
8888  }
8889  };
8890 
8892  struct primitive_desc : public dnnl::primitive_desc {
8894  primitive_desc() = default;
8895 
8910  primitive_desc(const desc &desc, const engine &engine,
8911  const shuffle_forward::primitive_desc &hint_fwd_pd,
8912  const primitive_attr &attr = primitive_attr(),
8913  bool allow_empty = false)
8914  : dnnl::primitive_desc(&desc.data, &attr, engine, hint_fwd_pd.get(),
8915  allow_empty) {}
8916 
8924  : dnnl::primitive_desc(pd, dnnl::primitive::kind::shuffle,
8926 
8928  memory::desc diff_src_desc() const { return base::diff_src_desc(0); }
8929 
8931  memory::desc diff_dst_desc() const { return base::diff_dst_desc(0); }
8932  };
8933 
8935  shuffle_backward() = default;
8936 
8940  shuffle_backward(const primitive_desc &pd) : primitive(pd) {}
8941 };
8942 
8944 
8952 
8954 struct binary : public primitive {
8956  struct desc {
8959 
8974  desc(algorithm algorithm, const memory::desc &src0,
8975  const memory::desc &src1, const memory::desc &dst) {
8978  &src0.data, &src1.data, &dst.data),
8979  "could not create a descriptor for a binary operation "
8980  "primitive");
8981  }
8982  };
8983 
8985  struct primitive_desc : public dnnl::primitive_desc {
8987  primitive_desc() = default;
8988 
8998  primitive_desc(const desc &desc, const engine &engine,
8999  bool allow_empty = false)
9000  : dnnl::primitive_desc(
9001  &desc.data, nullptr, engine, nullptr, allow_empty) {}
9002 
9013  primitive_desc(const desc &desc, const primitive_attr &attr,
9014  const engine &engine, bool allow_empty = false)
9015  : dnnl::primitive_desc(
9016  &desc.data, &attr, engine, nullptr, allow_empty) {}
9017 
9024 
9026  memory::desc src_desc(int idx = 0) const { return base::src_desc(idx); }
9027 
9029  memory::desc src0_desc() const { return base::src_desc(0); }
9030 
9032  memory::desc src1_desc() const { return base::src_desc(1); }
9033 
9035  memory::desc dst_desc() const { return base::dst_desc(0); }
9036  };
9037 
9039  binary() = default;
9040 
9044  binary(const primitive_desc &pd) : primitive(pd) {}
9045 };
9046 
9048 
9058 
9060 struct matmul : public primitive {
9062  struct desc {
9063  dnnl_matmul_desc_t data;
9064 
9077  desc(const memory::desc &src_desc, const memory::desc &weights_desc,
9078  const memory::desc &dst_desc) {
9080  dnnl_matmul_desc_init(&data, &src_desc.data,
9081  &weights_desc.data, nullptr, &dst_desc.data),
9082  "could not create a descriptor for a matmul primitive");
9083  }
9084 
9099  desc(const memory::desc &src_desc, const memory::desc &weights_desc,
9100  const memory::desc &bias_desc, const memory::desc &dst_desc) {
9101  error::wrap_c_api(dnnl_matmul_desc_init(&data, &src_desc.data,
9102  &weights_desc.data, &bias_desc.data,
9103  &dst_desc.data),
9104  "could not create a descriptor for a matmul primitive");
9105  }
9106  };
9107 
9109  struct primitive_desc : public dnnl::primitive_desc {
9111  primitive_desc() = default;
9112 
9121  primitive_desc(const desc &desc, const engine &engine,
9122  bool allow_empty = false)
9123  : dnnl::primitive_desc(
9124  &desc.data, nullptr, engine, nullptr, allow_empty) {}
9125 
9135  primitive_desc(const desc &desc, const primitive_attr &attr,
9136  const engine &engine, bool allow_empty = false)
9137  : dnnl::primitive_desc(
9138  &desc.data, &attr, engine, nullptr, allow_empty) {}
9139 
9146 
9148  memory::desc src_desc() const { return query_md(query::src_md, 0); }
9149 
9151  memory::desc weights_desc() const {
9152  return query_md(query::weights_md, 0);
9153  }
9154 
9156  memory::desc bias_desc() const {
9157  return query_md(query::weights_md, 1);
9158  }
9159 
9161  memory::desc dst_desc() const { return query_md(query::dst_md, 0); }
9162  };
9163 
9165  matmul() = default;
9166 
9169  matmul(const primitive_desc &pd) : primitive(pd) {}
9170 };
9171 
9173 
9183 
9185 struct resampling_forward : public primitive {
9187  struct desc {
9189 
9196  //
9212  const memory::desc &src_desc, const memory::desc &dst_desc) {
9215  convert_to_c(algorithm), nullptr,
9216  &src_desc.data, &dst_desc.data),
9217  "could not create a resampling forward descriptor");
9218  }
9219 
9235  const std::vector<float> &factors,
9236  const memory::desc &src_desc) {
9239  convert_to_c(algorithm), &factors[0],
9240  &src_desc.data, nullptr),
9241  "could not create a resampling forward descriptor");
9242  }
9243 
9250  //
9267  const std::vector<float> &factors, const memory::desc &src_desc,
9268  const memory::desc &dst_desc) {
9271  convert_to_c(algorithm), &factors[0],
9272  &src_desc.data, &dst_desc.data),
9273  "could not create a resampling forward descriptor");
9274  }
9275  };
9276 
9278  struct primitive_desc : public dnnl::primitive_desc {
9280  primitive_desc() = default;
9281 
9292  primitive_desc(const desc &desc, const engine &engine,
9293  bool allow_empty = false)
9294  : dnnl::primitive_desc(
9295  &desc.data, nullptr, engine, nullptr, allow_empty) {}
9296 
9307  primitive_desc(const desc &desc, const primitive_attr &attr,
9308  const engine &engine, bool allow_empty = false)
9309  : dnnl::primitive_desc(
9310  &desc.data, &attr, engine, nullptr, allow_empty) {}
9311 
9319  : dnnl::primitive_desc(pd, dnnl::primitive::kind::resampling,
9322 
9324  memory::desc src_desc() const { return base::src_desc(0); }
9325 
9327  memory::desc dst_desc() const { return base::dst_desc(0); }
9328  };
9329 
9331  resampling_forward() = default;
9332 
9336  resampling_forward(const primitive_desc &pd) : primitive(pd) {}
9337 };
9338 
9340 struct resampling_backward : public primitive {
9342  struct desc {
9344 
9359  desc(algorithm algorithm, const memory::desc &diff_src_desc,
9360  const memory::desc &diff_dst_desc) {
9362  convert_to_c(algorithm), nullptr,
9363  &diff_src_desc.data, &diff_dst_desc.data),
9364  "could not create a resampling backward data descriptor");
9365  }
9366 
9382  desc(algorithm algorithm, std::vector<float> factors,
9383  const memory::desc &diff_src_desc,
9384  const memory::desc &diff_dst_desc) {
9386  convert_to_c(algorithm), &factors[0],
9387  &diff_src_desc.data, &diff_dst_desc.data),
9388  "could not create a resampling backward data descriptor");
9389  }
9390  };
9391 
9393  struct primitive_desc : public dnnl::primitive_desc {
9395  primitive_desc() = default;
9396 
9409  primitive_desc(const desc &desc, const engine &engine,
9410  const resampling_forward::primitive_desc &hint_fwd_pd,
9411  bool allow_empty = false)
9412  : dnnl::primitive_desc(&desc.data, nullptr, engine,
9413  hint_fwd_pd.get(), allow_empty) {}
9414 
9428  primitive_desc(const desc &desc, const primitive_attr &attr,
9429  const engine &engine,
9430  const resampling_forward::primitive_desc &hint_fwd_pd,
9431  bool allow_empty = false)
9432  : dnnl::primitive_desc(&desc.data, &attr, engine, hint_fwd_pd.get(),
9433  allow_empty) {}
9434 
9442  : dnnl::primitive_desc(pd, dnnl::primitive::kind::resampling,
9444 
9446  memory::desc diff_src_desc() const { return base::diff_src_desc(0); }
9447 
9449  memory::desc diff_dst_desc() const { return base::diff_dst_desc(0); }
9450  };
9451 
9453  resampling_backward() = default;
9454 
9458  resampling_backward(const primitive_desc &pd) : primitive(pd) {}
9459 };
9460 
9462 
9464 
9470 
9472 using version_t = dnnl_version_t;
9473 
9475 enum class status {
9490 };
9491 
9493 inline status set_verbose(int level) {
9494  return static_cast<status>(dnnl_set_verbose(level));
9495 }
9496 
9498 inline const version_t *version() {
9499  return dnnl_version();
9500 }
9501 
9503 inline status set_jit_dump(int enable) {
9504  return static_cast<status>(dnnl_set_jit_dump(enable));
9505 }
9506 
9508 inline status set_jit_profiling_flags(unsigned flags) {
9509  return static_cast<status>(dnnl_set_jit_profiling_flags(flags));
9510 }
9511 
9513 inline status set_jit_profiling_jitdumpdir(const std::string &dir) {
9514  return static_cast<status>(dnnl_set_jit_profiling_jitdumpdir(dir.c_str()));
9515 }
9516 
9518 enum class cpu_isa {
9537 };
9538 
9540 inline status set_max_cpu_isa(cpu_isa isa) {
9541  return static_cast<status>(
9542  dnnl_set_max_cpu_isa(static_cast<dnnl_cpu_isa_t>(isa)));
9543 }
9544 
9546 
9553 
9555 inline status sgemm(char transa, char transb, dnnl_dim_t M, dnnl_dim_t N,
9556  dnnl_dim_t K, float alpha, const float *A, dnnl_dim_t lda,
9557  const float *B, dnnl_dim_t ldb, float beta, float *C, dnnl_dim_t ldc) {
9558  return static_cast<status>(dnnl_sgemm(
9559  transa, transb, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc));
9560 }
9561 
9563 inline status gemm_u8s8s32(char transa, char transb, char offsetc, dnnl_dim_t M,
9564  dnnl_dim_t N, dnnl_dim_t K, float alpha, const uint8_t *A,
9565  dnnl_dim_t lda, uint8_t ao, const int8_t *B, dnnl_dim_t ldb, int8_t bo,
9566  float beta, int32_t *C, dnnl_dim_t ldc, const int32_t *co) {
9567  return static_cast<status>(dnnl_gemm_u8s8s32(transa, transb, offsetc, M, N,
9568  K, alpha, A, lda, ao, B, ldb, bo, beta, C, ldc, co));
9569 }
9570 
9572 inline status gemm_s8s8s32(char transa, char transb, char offsetc, dnnl_dim_t M,
9573  dnnl_dim_t N, dnnl_dim_t K, float alpha, const int8_t *A,
9574  dnnl_dim_t lda, int8_t ao, const int8_t *B, dnnl_dim_t ldb, int8_t bo,
9575  float beta, int32_t *C, dnnl_dim_t ldc, const int32_t *co) {
9576  return static_cast<status>(dnnl_gemm_s8s8s32(transa, transb, offsetc, M, N,
9577  K, alpha, A, lda, ao, B, ldb, bo, beta, C, ldc, co));
9578 }
9579 
9581 
9582 // implementation section
9583 
9586  dnnl_primitive_t result;
9588  "could not create a primitive");
9589  reset(result);
9590 }
9591 
9592 inline primitive::primitive(const primitive_desc &pd) : primitive(pd.get()) {}
9593 
9594 inline void primitive::execute(
9595  stream &stream, const std::unordered_map<int, memory> &args) const {
9596  std::vector<dnnl_exec_arg_t> c_args;
9597  c_args.reserve(args.size());
9598  for (const auto &a : args)
9599  c_args.push_back({a.first, a.second.get(true)});
9600 
9602  (int)c_args.size(), c_args.data()),
9603  "could not execute a primitive");
9604 }
9606 
9607 #undef DNNL_DEFINE_BITMASK_OPS
9608 
9609 } // namespace dnnl
9610 
9612 
9613 #endif
dnnl_query_time_estimate_f64
runtime estimation (seconds)
Definition: dnnl_types.h:1890
dnnl_query_reorder_dst_engine
destination engine
Definition: dnnl_types.h:1902
dnnl::memory::set_data_handle
void set_data_handle(void *handle) const
Sets memory buffer.
Definition: dnnl.hpp:2321
dnnl_memory_set_ocl_mem_object
dnnl_status_t DNNL_API dnnl_memory_set_ocl_mem_object(dnnl_memory_t memory, cl_mem mem_object)
Sets OpenCL memory object associated with a memory object.
dnnl::gru_forward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::vanilla_rnn_backward::primitive_desc::diff_src_layer_desc
memory::desc diff_src_layer_desc() const
Returns diff source layer memory descriptor.
Definition: dnnl.hpp:7466
dnnl::gemm_s8s8s32
status gemm_s8s8s32(char transa, char transb, char offsetc, dnnl_dim_t M, dnnl_dim_t N, dnnl_dim_t K, float alpha, const int8_t *A, dnnl_dim_t lda, int8_t ao, const int8_t *B, dnnl_dim_t ldb, int8_t bo, float beta, int32_t *C, dnnl_dim_t ldc, const int32_t *co)
Performs integer matrix-matrix multiply on 8-bit signed matrix A, 8-bit signed matrix B,...
Definition: dnnl.hpp:9571
dnnl::query::eltwise_d
eltwise descriptor
dnnl_primitive_desc_iterator_next
dnnl_status_t DNNL_API dnnl_primitive_desc_iterator_next(dnnl_primitive_desc_iterator_t iterator)
Advances the primitive descriptor iterator to point to the next available implementation.
dnnl::memory::format_tag::ntc
3D RNN data tensor in the format (batch, seq_length, input channels).
dnnl::cpu_isa::sse41
Intel(R) SSE4.1.
dnnl::reorder::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl_aBcdef4b
6D tensor blocked by 2nd dimension with block size 4
Definition: dnnl_types.h:303
dnnl_scratchpad_mode_library
The library manages scratchpad (default) The allocation policy is controlled by the DNNL_ENABLE_CONCU...
Definition: dnnl_types.h:1625
dnnl::query::diff_dst_md
destination grad. memory desc
dnnl::convolution_forward::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:3492
dnnl::primitive_attr::set_rnn_data_qparams
void set_rnn_data_qparams(float scale, float shift)
Sets quantization scale and shift parameters for RNN data tensors.
Definition: dnnl.hpp:1209
dnnl::logsoftmax_backward::logsoftmax_backward
logsoftmax_backward()=default
Default constructor. Produces an empty object.
dnnl::primitive::kind::softmax
A softmax primitive.
dnnl::engine::engine
engine()=default
Constructs an empty engine.
dnnl_set_jit_profiling_flags
dnnl_status_t DNNL_API dnnl_set_jit_profiling_flags(unsigned flags)
Sets library profiling flags.
dnnl::rnn_primitive_desc_base::diff_dst_iter_c_desc
memory::desc diff_dst_iter_c_desc() const
Returns diff destination recurrent cell state memory descriptor.
Definition: dnnl.hpp:7042
dnnl_inner_product_forward_desc_init
dnnl_status_t DNNL_API dnnl_inner_product_forward_desc_init(dnnl_inner_product_desc_t *ip_desc, dnnl_prop_kind_t prop_kind, const dnnl_memory_desc_t *src_desc, const dnnl_memory_desc_t *weights_desc, const dnnl_memory_desc_t *bias_desc, const dnnl_memory_desc_t *dst_desc)
Initializes descriptor for inner product forward propagation.
dnnl::rnn_primitive_desc_base::weights_layer_desc
memory::desc weights_layer_desc() const
Returns weights layer memory descriptor.
Definition: dnnl.hpp:6972
dnnl_convolution_forward_desc_init
dnnl_status_t DNNL_API dnnl_convolution_forward_desc_init(dnnl_convolution_desc_t *conv_desc, dnnl_prop_kind_t prop_kind, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *src_desc, const dnnl_memory_desc_t *weights_desc, const dnnl_memory_desc_t *bias_desc, const dnnl_memory_desc_t *dst_desc, const dnnl_dims_t strides, const dnnl_dims_t padding_l, const dnnl_dims_t padding_r)
Initializes a descriptor for a convolution forward propagation primitive.
dnnl::convolution_backward_weights::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::softmax_backward::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:5575
dnnl::vanilla_rnn_backward::vanilla_rnn_backward
vanilla_rnn_backward()=default
Default constructor. Produces an empty object.
dnnl::gru_forward::primitive_desc::bias_desc
memory::desc bias_desc() const
Returns bias memory descriptor.
Definition: dnnl.hpp:8107
dnnl_s32
32-bit signed integer.
Definition: dnnl_types.h:71
dnnl::algorithm::binary_add
Binary add.
dnnl::lstm_forward::desc::desc
desc(prop_kind prop_kind, rnn_direction direction, const memory::desc &src_layer_desc, const memory::desc &src_iter_desc, const memory::desc &src_iter_c_desc, const memory::desc &weights_layer_desc, const memory::desc &weights_iter_desc, const memory::desc &bias_desc, const memory::desc &dst_layer_desc, const memory::desc &dst_iter_desc, const memory::desc &dst_iter_c_desc, rnn_flags flags=rnn_flags::undef)
Constructs a descriptor for an LSTM forward propagation primitive.
Definition: dnnl.hpp:7567
dnnl::status::success
The operation was successful.
dnnl::reorder::execute
void execute(stream stream, memory &src, memory &dst) const
Executes the reorder primitive.
Definition: dnnl.hpp:2907
dnnl::memory::data_type::u8
8-bit unsigned integer.
dnnl::lrn_forward::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:4773
dnnl::rnn_direction
rnn_direction
A direction of RNN primitive execution.
Definition: dnnl.hpp:679
dnnl::logsoftmax_backward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::convolution_backward_data::convolution_backward_data
convolution_backward_data()=default
Default constructor. Produces an empty object.
dnnl::memory::desc::reshape
desc reshape(const memory::dims &dims) const
Constructs a memory descriptor by reshaping existing one.
Definition: dnnl.hpp:2184
dnnl::lrn_forward::desc::desc
desc(prop_kind prop_kind, algorithm algorithm, const memory::desc &data_desc, memory::dim local_size, float alpha, float beta, float k=1.f)
Constructs a descriptor for a LRN forward propagation primitive.
Definition: dnnl.hpp:4712
dnnl::cpu_isa::all
Any ISA (no restrictions)
dnnl::memory::desc::get_size
size_t get_size() const
Returns size of the memory descriptor in bytes.
Definition: dnnl.hpp:2210
dnnl_query_pooling_d
pooling descriptor
Definition: dnnl_types.h:1914
dnnl::query::num_of_inputs_s32
number of inputs expected
dnnl::query::resampling_d
resampling descriptor
dnnl::vanilla_rnn_backward::primitive_desc::bias_desc
memory::desc bias_desc() const
Returns bias memory descriptor.
Definition: dnnl.hpp:7450
dnnl::prop_kind::backward
Backward propagation (with respect to all parameters).
dnnl_ABcde2b8a4b
5D tensor blocked by 1st dimension with block size 8
Definition: dnnl_types.h:264
dnnl::memory::get_sycl_buffer
cl::sycl::buffer< T, ndims > get_sycl_buffer(size_t *offset=nullptr) const
Returns the underlying SYCL buffer object.
Definition: dnnl.hpp:2395
dnnl::lstm_backward::primitive_desc::diff_dst_iter_c_desc
memory::desc diff_dst_iter_c_desc() const
Returns diff destination recurrent cell state memory descriptor.
Definition: dnnl.hpp:7957
dnnl::shuffle_forward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::layer_normalization_backward::primitive_desc::variance_desc
memory::desc variance_desc() const
Returns memory descriptor for variance.
Definition: dnnl.hpp:6505
dnnl::vanilla_rnn_backward::primitive_desc::dst_iter_desc
memory::desc dst_iter_desc() const
Returns destination iteration memory descriptor.
Definition: dnnl.hpp:7458
dnnl::gru_backward::primitive_desc::diff_dst_iter_desc
memory::desc diff_dst_iter_desc() const
Returns diff destination iteration memory descriptor.
Definition: dnnl.hpp:8355
dnnl::error::what
const char * what() const noexcept override
Returns the explanatory string.
Definition: dnnl.hpp:103
dnnl::gru_backward::primitive_desc::diff_weights_iter_desc
memory::desc diff_weights_iter_desc() const
Returns diff weights iteration memory descriptor.
Definition: dnnl.hpp:8340
dnnl_pooling_backward_desc_init
dnnl_status_t DNNL_API dnnl_pooling_backward_desc_init(dnnl_pooling_desc_t *pool_desc, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *diff_src_desc, const dnnl_memory_desc_t *diff_dst_desc, const dnnl_dims_t strides, const dnnl_dims_t kernel, const dnnl_dims_t padding_l, const dnnl_dims_t padding_r)
Initializes a descriptor for pooling backward propagation primitive.
dnnl::engine::kind::any
An unspecified engine.
dnnl::query::pooling_d
pooling descriptor
dnnl::primitive::get_primitive_desc
const_dnnl_primitive_desc_t get_primitive_desc() const
Returns the C API primitive descriptor of the underlying C API primitive.
Definition: dnnl.hpp:377
dnnl::rnn_direction::bidirectional_concat
Bidirectional execution of RNN primitive with concatenation of the results.
dnnl::query::diff_src_md
source gradient memory desc
dnnl_query_memory_consumption_s64
memory consumption – extra
Definition: dnnl_types.h:1891
dnnl_s8
8-bit signed integer.
Definition: dnnl_types.h:73
dnnl::prop_kind
prop_kind
Propagation kind.
Definition: dnnl.hpp:443
dnnl::pooling_forward::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:5012
dnnl::post_ops::len
int len() const
Returns the number of post-ops entries.
Definition: dnnl.hpp:845
dnnl_dilated_deconvolution_forward_desc_init
dnnl_status_t DNNL_API dnnl_dilated_deconvolution_forward_desc_init(dnnl_deconvolution_desc_t *deconv_desc, dnnl_prop_kind_t prop_kind, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *src_desc, const dnnl_memory_desc_t *weights_desc, const dnnl_memory_desc_t *bias_desc, const dnnl_memory_desc_t *dst_desc, const dnnl_dims_t strides, const dnnl_dims_t dilates, const dnnl_dims_t padding_l, const dnnl_dims_t padding_r)
Initializes a descriptor for a dilated deconvolution forward propagation primitive.
dnnl_format_tag_t
dnnl_format_tag_t
Memory format tag specification.
Definition: dnnl_types.h:163
dnnl_f16
16-bit/half-precision floating point.
Definition: dnnl_types.h:65
dnnl::memory::format_tag::cdeba
permuted 5D tensor
dnnl_inner_product
An inner product primitive.
Definition: dnnl_types.h:690
dnnl::lbr_gru_forward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl_unimplemented
The operation failed because requested functionality is not implemented.
Definition: dnnl_types.h:46
dnnl_memory
dnnl::query::exec_arg_md
memory desc of an execute argument
dnnl::gru_backward::desc::desc
desc(prop_kind prop_kind, rnn_direction direction, const memory::desc &src_layer_desc, const memory::desc &src_iter_desc, const memory::desc &weights_layer_desc, const memory::desc &weights_iter_desc, const memory::desc &bias_desc, const memory::desc &dst_layer_desc, const memory::desc &dst_iter_desc, const memory::desc &diff_src_layer_desc, const memory::desc &diff_src_iter_desc, const memory::desc &diff_weights_layer_desc, const memory::desc &diff_weights_iter_desc, const memory::desc &diff_bias_desc, const memory::desc &diff_dst_layer_desc, const memory::desc &diff_dst_iter_desc, rnn_flags flags=rnn_flags::undef)
Constructs a descriptor for a GRU backward propagation primitive.
Definition: dnnl.hpp:8204
dnnl_decab
permuted 5D tensor
Definition: dnnl_types.h:200
dnnl::lstm_forward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl_primitive_desc_iterator
An opaque structure to describe a primitive descriptor iterator.
dnnl::memory::format_tag::tnc
3D RNN data tensor in the format (seq_length, batch, input channels).
dnnl_batch_normalization
A batch normalization primitive.
Definition: dnnl_types.h:686
dnnl_query_logsoftmax_d
logsoftmax descriptor
Definition: dnnl_types.h:1922
dnnl::lrn_backward::desc::desc
desc(algorithm algorithm, const memory::desc &data_desc, const memory::desc &diff_data_desc, memory::dim local_size, float alpha, float beta, float k=1.f)
Constructs a descriptor for an LRN backward propagation primitive.
Definition: dnnl.hpp:4816
dnnl::gemm_u8s8s32
status gemm_u8s8s32(char transa, char transb, char offsetc, dnnl_dim_t M, dnnl_dim_t N, dnnl_dim_t K, float alpha, const uint8_t *A, dnnl_dim_t lda, uint8_t ao, const int8_t *B, dnnl_dim_t ldb, int8_t bo, float beta, int32_t *C, dnnl_dim_t ldc, const int32_t *co)
Performs integer matrix-matrix multiply on 8-bit unsigned matrix A, 8-bit signed matrix B,...
Definition: dnnl.hpp:9562
dnnl::lrn_backward::primitive_desc::diff_src_desc
memory::desc diff_src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:4882
dnnl::inner_product_backward_data::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::matmul::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:9147
dnnl::algorithm::eltwise_soft_relu
Elementwise: soft_relu.
dnnl_lstm_forward_desc_init
dnnl_status_t DNNL_API dnnl_lstm_forward_desc_init(dnnl_rnn_desc_t *rnn_desc, dnnl_prop_kind_t prop_kind, dnnl_rnn_direction_t direction, const dnnl_memory_desc_t *src_layer_desc, const dnnl_memory_desc_t *src_iter_desc, const dnnl_memory_desc_t *src_iter_c_desc, const dnnl_memory_desc_t *weights_layer_desc, const dnnl_memory_desc_t *weights_iter_desc, const dnnl_memory_desc_t *bias_desc, const dnnl_memory_desc_t *dst_layer_desc, const dnnl_memory_desc_t *dst_iter_desc, const dnnl_memory_desc_t *dst_iter_c_desc, unsigned flags)
Initializes a descriptor for LSTM forward propagation primitive.
dnnl_status_t
dnnl_status_t
Status values returned by the library functions.
Definition: dnnl_types.h:38
dnnl::rnn_primitive_desc_base::diff_src_iter_desc
memory::desc diff_src_iter_desc() const
Returns diff source iteration memory descriptor.
Definition: dnnl.hpp:7006
dnnl_query_reorder_src_engine
source engine
Definition: dnnl_types.h:1901
dnnl::reorder::primitive_desc::get_src_engine
engine get_src_engine() const
Returns the engine on which the source memory is allocated.
Definition: dnnl.hpp:2864
dnnl::memory::format_tag::oidhw
5D CNN weights tensor; an alias for dnnl::memory::format_tag::abcde
dnnl::gru_forward::primitive_desc::weights_layer_desc
memory::desc weights_layer_desc() const
Returns weights layer memory descriptor.
Definition: dnnl.hpp:8097
dnnl::engine
An execution engine.
Definition: dnnl.hpp:1273
dnnl::cpu_isa::avx
Intel(R) Advanced Vector Extensions.
dnnl::pooling_backward::primitive_desc::diff_dst_desc
memory::desc diff_dst_desc() const
Returns a diff destination memory descriptor.
Definition: dnnl.hpp:5133
dnnl::vanilla_rnn_backward::desc::desc
desc(prop_kind prop_kind, algorithm activation, rnn_direction direction, const memory::desc &src_layer_desc, const memory::desc &src_iter_desc, const memory::desc &weights_layer_desc, const memory::desc &weights_iter_desc, const memory::desc &bias_desc, const memory::desc &dst_layer_desc, const memory::desc &dst_iter_desc, const memory::desc &diff_src_layer_desc, const memory::desc &diff_src_iter_desc, const memory::desc &diff_weights_layer_desc, const memory::desc &diff_weights_iter_desc, const memory::desc &diff_bias_desc, const memory::desc &diff_dst_layer_desc, const memory::desc &diff_dst_iter_desc, rnn_flags flags=rnn_flags::undef, float alpha=0.0f, float beta=0.0f)
Constructs a descriptor for a vanilla RNN backward propagation primitive.
Definition: dnnl.hpp:7341
dnnl::logsoftmax_backward::desc::desc
desc()=default
Default constructor. Produces an empty object.
dnnl_memory_get_ocl_mem_object
dnnl_status_t DNNL_API dnnl_memory_get_ocl_mem_object(const_dnnl_memory_t memory, cl_mem *mem_object)
Returns an OpenCL memory object associated with a memory object.
dnnl::primitive_attr::get_zero_points
void get_zero_points(int arg, int &mask, std::vector< int32_t > &zero_points) const
Returns zero points correspondence mask and values.
Definition: dnnl.hpp:1107
dnnl_softmax
A softmax primitive.
Definition: dnnl_types.h:680
dnnl::inner_product_backward_weights::primitive_desc::diff_weights_desc
memory::desc diff_weights_desc() const
Returns a diff weights memory descriptor.
Definition: dnnl.hpp:6906
dnnl::memory::validate_dims
static void validate_dims(const std::vector< T > &v)
Helper function that validates that an std::vector of dimensions can be safely converted to the C API...
Definition: dnnl.hpp:1619
dnnl_query_rnn_d
rnn descriptor
Definition: dnnl_types.h:1919
DNNL_ARG_TO
#define DNNL_ARG_TO
A special mnemonic for reorder destination argument.
Definition: dnnl_types.h:1716
dnnl::status::runtime_error
Primitive or engine failed on execution.
DNNL_MAX_NDIMS
#define DNNL_MAX_NDIMS
Maximum number of dimensions a tensor can have.
Definition: dnnl_types.h:838
dnnl_scratchpad_mode_user
A user shall query and provide the scratchpad memory to primitives This mode is thread-safe as long a...
Definition: dnnl_types.h:1629
dnnl::lstm_backward::primitive_desc::diff_weights_layer_desc
memory::desc diff_weights_layer_desc() const
Returns diff weights layer memory descriptor.
Definition: dnnl.hpp:7932
dnnl::query::reorder_dst_engine
reorder destination engine
dnnl::primitive::kind
kind
Kinds of primitives.
Definition: dnnl.hpp:266
dnnl::gru_forward::primitive_desc::src_layer_desc
memory::desc src_layer_desc() const
Returns source layer memory descriptor.
Definition: dnnl.hpp:8089
dnnl::post_ops::post_ops
post_ops()
Constructs an empty sequence of post-ops.
Definition: dnnl.hpp:837
dnnl::set_jit_profiling_jitdumpdir
status set_jit_profiling_jitdumpdir(const std::string &dir)
Sets JIT dump output path.
Definition: dnnl.hpp:9512
dnnl::gru_backward::primitive_desc::weights_layer_desc
memory::desc weights_layer_desc() const
Returns weights layer memory descriptor.
Definition: dnnl.hpp:8299
dnnl_defcab
permuted 6D tensor
Definition: dnnl_types.h:201
dnnl_aBcde16b
5D tensor blocked by 2nd dimension with block size 16
Definition: dnnl_types.h:266
dnnl::memory::desc::data
dnnl_memory_desc_t data
The underlying C API data structure.
Definition: dnnl.hpp:2108
dnnl::lstm_forward::primitive_desc::dst_iter_desc
memory::desc dst_iter_desc() const
Returns destination iteration memory descriptor.
Definition: dnnl.hpp:7669
dnnl_engine
An opaque structure to describe an engine.
dnnl::layer_normalization_backward::primitive_desc::diff_src_desc
memory::desc diff_src_desc() const
Returns a diff source memory descriptor.
Definition: dnnl.hpp:6491
dnnl::logsoftmax_forward::logsoftmax_forward
logsoftmax_forward()=default
Default constructor. Produces an empty object.
dnnl::vanilla_rnn_forward::primitive_desc::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:7246
dnnl_version
const dnnl_version_t DNNL_API * dnnl_version()
Returns library version information.
dnnl::eltwise_backward::primitive_desc::diff_dst_desc
memory::desc diff_dst_desc() const
Returns a diff destination memory descriptor.
Definition: dnnl.hpp:5369
dnnl::stream::wait
stream & wait()
Waits for all primitives executing in the stream to finish.
Definition: dnnl.hpp:1501
dnnl_eltwise_relu
Eltwise: ReLU.
Definition: dnnl_types.h:719
dnnl_acb
permuted 3D tensor
Definition: dnnl_types.h:186
dnnl_matmul_desc_t
A descriptor of a matrix multiplication operation.
Definition: dnnl_types.h:1501
dnnl::algorithm::eltwise_elu
Elementwise: parametric exponential linear unit (elu)
dnnl::primitive::kind::shuffle
A shuffle primitive.
dnnl::algorithm::pooling_avg
Average pooling exclude padding, alias for dnnl::algorithm::pooling_avg_include_padding.
dnnl::gru_forward::primitive_desc::weights_iter_desc
memory::desc weights_iter_desc() const
Returns weights iteration memory descriptor.
Definition: dnnl.hpp:8102
dnnl::concat::concat
concat()=default
Default constructor. Produces an empty object.
dnnl_memory_desc_get_size
size_t DNNL_API dnnl_memory_desc_get_size(const dnnl_memory_desc_t *memory_desc)
Returns the size of a memory descriptor.
dnnl_eltwise_abs
Eltwise: abs.
Definition: dnnl_types.h:727
dnnl::engine::get_sycl_device
cl::sycl::device DNNL_API get_sycl_device() const
Returns the underlying SYCL device object.
dnnl::deconvolution_forward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::convolution_backward_data::primitive_desc::diff_src_desc
memory::desc diff_src_desc() const
Returns a diff source memory descriptor.
Definition: dnnl.hpp:3663
dnnl::memory::format_tag::giodhw
6D CNN weights tensor with groups; an alias for dnnl::memory::format_tag::abcdef
dnnl::query::rnn_d
rnn descriptor
dnnl_normalization_flags_t
dnnl_normalization_flags_t
Flags for batch normalization primitive.
Definition: dnnl_types.h:788
dnnl::lstm_backward::primitive_desc::diff_dst_iter_desc
memory::desc diff_dst_iter_desc() const
Returns diff destination iteration memory descriptor.
Definition: dnnl.hpp:7952
dnnl::softmax_backward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::lbr_gru_backward::primitive_desc::dst_layer_desc
memory::desc dst_layer_desc() const
Returns destination layer memory descriptor.
Definition: dnnl.hpp:8715
dnnl::status::unimplemented
The operation failed because requested functionality is not implemented.
dnnl_shuffle
A shuffle primitive.
Definition: dnnl_types.h:668
dnnl::memory::format_tag::acbde
permuted 5D tensor
dnnl_query_shuffle_d
shuffle descriptor
Definition: dnnl_types.h:1911
dnnl::resampling_backward::primitive_desc::diff_src_desc
memory::desc diff_src_desc() const
Returns a diff source memory descriptor.
Definition: dnnl.hpp:9445
dnnl::lstm_backward::primitive_desc::weights_iter_desc
memory::desc weights_iter_desc() const
Returns weights iteration memory descriptor.
Definition: dnnl.hpp:7891
dnnl_convolution_desc_t
A descriptor of a convolution operation.
Definition: dnnl_types.h:1060
dnnl::convolution_backward_data::primitive_desc::weights_desc
memory::desc weights_desc() const
Returns a weights memory descriptor.
Definition: dnnl.hpp:3666
dnnl::convolution_forward::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:3486
dnnl::rnn_primitive_desc_base::diff_weights_layer_desc
memory::desc diff_weights_layer_desc() const
Returns diff weights layer memory descriptor.
Definition: dnnl.hpp:7014
dnnl::batch_normalization_backward::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:6093
dnnl_primitive_kind_t
dnnl_primitive_kind_t
Kinds of primitives.
Definition: dnnl_types.h:662
dnnl::pooling_backward::primitive_desc::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:5136
dnnl::deconvolution_backward_weights::primitive_desc::diff_weights_desc
memory::desc diff_weights_desc() const
Returns a diff weights memory descriptor.
Definition: dnnl.hpp:4649
dnnl_rnn_flags_t
dnnl_rnn_flags_t
Flags for RNN cell.
Definition: dnnl_types.h:1382
dnnl_pooling_max
Max pooling.
Definition: dnnl_types.h:752
dnnl::primitive::kind::lrn
An LRN primitive.
dnnl_engine_get_kind
dnnl_status_t DNNL_API dnnl_engine_get_kind(dnnl_engine_t engine, dnnl_engine_kind_t *kind)
Returns the kind of an engine.
dnnl_memory_desc_reshape
dnnl_status_t DNNL_API dnnl_memory_desc_reshape(dnnl_memory_desc_t *out_memory_desc, const dnnl_memory_desc_t *in_memory_desc, int ndims, const dnnl_dims_t dims)
Initializes a memory descriptor by reshaping an existing one.
dnnl::memory::data_type::f32
32-bit/single-precision floating point.
dnnl_query_t
dnnl_query_t
Primitive descriptor query specification.
Definition: dnnl_types.h:1881
dnnl::layer_normalization_forward::desc::desc
desc(prop_kind prop_kind, const memory::desc &data_desc, const memory::desc &stat_desc, float epsilon, normalization_flags flags)
Constructs a descriptor for layer normalization forward propagation primitive.
Definition: dnnl.hpp:6192
dnnl::algorithm::eltwise_bounded_relu
Elementwise: bounded_relu.
dnnl::memory::format_tag::x
1D tensor; an alias for dnnl::memory::format_tag::a
dnnl_logsoftmax_forward_desc_init
dnnl_status_t DNNL_API dnnl_logsoftmax_forward_desc_init(dnnl_logsoftmax_desc_t *logsoftmax_desc, dnnl_prop_kind_t prop_kind, const dnnl_memory_desc_t *data_desc, int logsoftmax_axis)
Initializes a descriptor for logsoftmax forward propagation primitive.
dnnl_bf16
non-standard 16-bit (bfloat16 w/ 7 bit mantissa) floating point.
Definition: dnnl_types.h:67
dnnl::rnn_flags
rnn_flags
RNN cell flags.
Definition: dnnl.hpp:625
dnnl_rnn_desc_t
A descriptor for an RNN operation.
Definition: dnnl_types.h:1404
dnnl_bcdea
permuted 5D tensor
Definition: dnnl_types.h:196
dnnl_rnn_direction_t
dnnl_rnn_direction_t
A direction of RNN primitive execution.
Definition: dnnl_types.h:1388
dnnl::softmax_forward::desc::desc
desc()=default
Default constructor. Produces an empty object.
dnnl::lstm_forward::primitive_desc::src_iter_desc
memory::desc src_iter_desc() const
Returns source iteration memory descriptor.
Definition: dnnl.hpp:7643
dnnl::cpu_isa
cpu_isa
CPU instruction set flags.
Definition: dnnl.hpp:9517
dnnl_sum
A sum primitive.
Definition: dnnl_types.h:672
dnnl::prop_kind::forward_training
Forward data propagation (training mode).
dnnl::memory::format_kind::packed
Packed weights format used in RNN.
dnnl::gru_forward::primitive_desc::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:8118
dnnl_backward_weights
Backward weights propagation.
Definition: dnnl_types.h:655
dnnl::query::layer_normalization_d
layer normalization descriptor
dnnl::convolution_backward_data::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl_a
plain 1D tensor
Definition: dnnl_types.h:176
dnnl::primitive_desc::next_impl
bool next_impl()
Advances the primitive iterator to the next implementation.
Definition: dnnl.hpp:3196
dnnl::lstm_backward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::lbr_gru_backward::primitive_desc::diff_dst_iter_desc
memory::desc diff_dst_iter_desc() const
Returns diff destination iteration memory descriptor.
Definition: dnnl.hpp:8758
dnnl::layer_normalization_forward::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:6295
dnnl::lbr_gru_backward::desc::desc
desc(prop_kind prop_kind, rnn_direction direction, const memory::desc &src_layer_desc, const memory::desc &src_iter_desc, const memory::desc &weights_layer_desc, const memory::desc &weights_iter_desc, const memory::desc &bias_desc, const memory::desc &dst_layer_desc, const memory::desc &dst_iter_desc, const memory::desc &diff_src_layer_desc, const memory::desc &diff_src_iter_desc, const memory::desc &diff_weights_layer_desc, const memory::desc &diff_weights_iter_desc, const memory::desc &diff_bias_desc, const memory::desc &diff_dst_layer_desc, const memory::desc &diff_dst_iter_desc, rnn_flags flags=rnn_flags::undef)
Constructs a descriptor for LBR GRU backward propagation primitive.
Definition: dnnl.hpp:8605
dnnl_inner_product_desc_t
A descriptor of an inner product operation.
Definition: dnnl_types.h:1348
dnnl::memory::set_ocl_mem_object
void set_ocl_mem_object(cl_mem mem_object)
Sets the OpenCL memory object mem_object associated with the memory.
Definition: dnnl.hpp:2383
dnnl::lstm_forward::primitive_desc::dst_layer_desc
memory::desc dst_layer_desc() const
Returns destination layer memory descriptor.
Definition: dnnl.hpp:7664
dnnl_gpu
GPU engine.
Definition: dnnl_types.h:1559
dnnl::primitive::primitive
primitive()=default
Default constructor. Constructs an empty object.
dnnl_memory_unmap_data
dnnl_status_t DNNL_API dnnl_memory_unmap_data(const_dnnl_memory_t memory, void *mapped_ptr)
Unmaps a memory objects and writes any changes to the previously mapped buffer back.
dnnl::pooling_forward::primitive_desc::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:5015
dnnl_layer_normalization_backward_desc_init
dnnl_status_t DNNL_API dnnl_layer_normalization_backward_desc_init(dnnl_layer_normalization_desc_t *lnrm_desc, dnnl_prop_kind_t prop_kind, const dnnl_memory_desc_t *diff_data_desc, const dnnl_memory_desc_t *data_desc, const dnnl_memory_desc_t *stat_desc, float epsilon, unsigned flags)
Initializes a descriptor for a layer normalization backward propagation primitive.
dnnl::gru_backward::primitive_desc::diff_src_layer_desc
memory::desc diff_src_layer_desc() const
Returns diff source layer memory descriptor.
Definition: dnnl.hpp:8325
dnnl::algorithm::eltwise_abs
Elementwise: abs.
dnnl::sum::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:3133
dnnl::algorithm::lrn_across_channels
Local response normalization (LRN) across multiple channels.
dnnl::rnn_primitive_desc_base::diff_bias_desc
memory::desc diff_bias_desc() const
Returns diff bias memory descriptor.
Definition: dnnl.hpp:7028
dnnl::memory::format_tag::nhwc
4D CNN activations tensor; an alias for dnnl::memory::format_tag::acdb
dnnl::memory::desc::dims
memory::dims dims() const
Returns dimensions of the memory descriptor.
Definition: dnnl.hpp:2196
dnnl::deconvolution_backward_weights::deconvolution_backward_weights
deconvolution_backward_weights()=default
Default constructor. Produces an empty object.
dnnl::eltwise_forward::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:5259
dnnl_query_diff_weights_md
weights grad. memory desc
Definition: dnnl_types.h:1931
dnnl::memory::format_tag::acbdef
plain 6D tensor
dnnl::convert_to_c
dnnl_query_t convert_to_c(query query)
Converts query enum value from C++ API to C API type.
Definition: dnnl.hpp:807
dnnl_query_prop_kind
propagation kind
Definition: dnnl_types.h:1904
dnnl::memory::format_tag::io
2D CNN weights tensor; an alias for dnnl::memory::format_tag::ba
dnnl_eltwise_logistic
Eltwise: logistic.
Definition: dnnl_types.h:737
dnnl::lbr_gru_forward::primitive_desc::weights_iter_desc
memory::desc weights_iter_desc() const
Returns weights iteration memory descriptor.
Definition: dnnl.hpp:8502
dnnl::layer_normalization_backward::desc::desc
desc(prop_kind prop_kind, const memory::desc &diff_data_desc, const memory::desc &data_desc, const memory::desc &stat_desc, float epsilon, normalization_flags flags)
Constructs a descriptor for layer normalization backward propagation primitive.
Definition: dnnl.hpp:6372
dnnl::lstm_backward::primitive_desc::weights_layer_desc
memory::desc weights_layer_desc() const
Returns weights layer memory descriptor.
Definition: dnnl.hpp:7886
dnnl::query::inner_product_d
inner product descriptor
dnnl_eltwise
An element-wise primitive.
Definition: dnnl_types.h:678
dnnl::algorithm::deconvolution_direct
Direct deconvolution.
dnnl::engine::kind
kind
Kinds of engines.
Definition: dnnl.hpp:1278
dnnl_aBc16b
3D tensor blocked by 2nd dimension with block size 16
Definition: dnnl_types.h:209
dnnl::lbr_gru_backward::primitive_desc::diff_bias_desc
memory::desc diff_bias_desc() const
Returns diff bias memory descriptor.
Definition: dnnl.hpp:8748
dnnl::batch_normalization_backward::primitive_desc::diff_dst_desc
memory::desc diff_dst_desc() const
Returns a diff destination memory descriptor.
Definition: dnnl.hpp:6105
dnnl::vanilla_rnn_forward::primitive_desc::weights_layer_desc
memory::desc weights_layer_desc() const
Returns weights layer memory descriptor.
Definition: dnnl.hpp:7225
dnnl::lstm_backward::primitive_desc::src_layer_desc
memory::desc src_layer_desc() const
Returns source layer memory descriptor.
Definition: dnnl.hpp:7873
dnnl::batch_normalization_forward::primitive_desc::variance_desc
memory::desc variance_desc() const
Returns memory descriptor for variance.
Definition: dnnl.hpp:5956
dnnl::memory::format_tag::ohwi
4D CNN weights tensor; an alias for dnnl::memory::format_tag::acdb
dnnl_convolution_auto
Convolution algorithm(either direct or Winograd) is chosen just in time.
Definition: dnnl_types.h:713
dnnl_cdba
permuted 4D tensor
Definition: dnnl_types.h:198
dnnl_eltwise_sqrt
Eltwise: square root.
Definition: dnnl_types.h:729
dnnl::memory::format_tag::undef
Undefined memory format tag.
dnnl_cpu_isa_avx512_core
Intel(R) Advanced Vector Extensions 512 for Intel(R) Xeon(R) Processor Scalable Family and Intel(R) C...
Definition: dnnl_types.h:2048
dnnl::lbr_gru_forward::primitive_desc::src_layer_desc
memory::desc src_layer_desc() const
Returns source layer memory descriptor.
Definition: dnnl.hpp:8489
dnnl::lstm_backward::lstm_backward
lstm_backward()=default
Default constructor. Produces an empty object.
dnnl::stream::stream
stream()=default
Constructs an empty stream.
dnnl_eltwise_bounded_relu
Eltwise: bounded_relu.
Definition: dnnl_types.h:733
dnnl::set_max_cpu_isa
status set_max_cpu_isa(cpu_isa isa)
Sets the maximal ISA DNNL can dispatch to on the CPU.
Definition: dnnl.hpp:9539
dnnl::logsoftmax_backward::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:5796
dnnl::softmax_backward::desc::desc
desc()=default
Default constructor. Produces an empty object.
dnnl::primitive::kind::pooling
A pooling primitive.
dnnl::inner_product_backward_data::primitive_desc::diff_dst_desc
memory::desc diff_dst_desc() const
Returns a diff destination memory descriptor.
Definition: dnnl.hpp:6769
dnnl_lstm_backward_desc_init
dnnl_status_t DNNL_API dnnl_lstm_backward_desc_init(dnnl_rnn_desc_t *rnn_desc, dnnl_prop_kind_t prop_kind, dnnl_rnn_direction_t direction, const dnnl_memory_desc_t *src_layer_desc, const dnnl_memory_desc_t *src_iter_desc, const dnnl_memory_desc_t *src_iter_c_desc, const dnnl_memory_desc_t *weights_layer_desc, const dnnl_memory_desc_t *weights_iter_desc, const dnnl_memory_desc_t *bias_desc, const dnnl_memory_desc_t *dst_layer_desc, const dnnl_memory_desc_t *dst_iter_desc, const dnnl_memory_desc_t *dst_iter_c_desc, const dnnl_memory_desc_t *diff_src_layer_desc, const dnnl_memory_desc_t *diff_src_iter_desc, const dnnl_memory_desc_t *diff_src_iter_c_desc, const dnnl_memory_desc_t *diff_weights_layer_desc, const dnnl_memory_desc_t *diff_weights_iter_desc, const dnnl_memory_desc_t *diff_bias_desc, const dnnl_memory_desc_t *diff_dst_layer_desc, const dnnl_memory_desc_t *diff_dst_iter_desc, const dnnl_memory_desc_t *diff_dst_iter_c_desc, unsigned flags)
Initializes a descriptor for LSTM backward propagation primitive.
dnnl::memory::format_tag::ab
plain 2D tensor
dnnl::lrn_backward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::primitive_desc_base::get_primitive_attr
primitive_attr get_primitive_attr() const
Returns the primitive attributes.
Definition: dnnl.hpp:2659
dnnl::gru_backward::primitive_desc::bias_desc
memory::desc bias_desc() const
Returns bias memory descriptor.
Definition: dnnl.hpp:8309
dnnl::query::reorder_src_engine
reorder source engine
dnnl::logsoftmax_forward::desc::desc
desc()=default
Default constructor. Produces an empty object.
dnnl::memory::format_tag::cn
2D CNN activations tensor; an alias for dnnl::memory::format_tag::ba
dnnl_forward_inference
Forward data propagation (inference mode).
Definition: dnnl_types.h:645
dnnl_query_impl_info_str
for creating scratchpad memory
Definition: dnnl_types.h:1899
dnnl_query_dst_md
destination memory desc
Definition: dnnl_types.h:1932
dnnl_query_resampling_d
resampling descriptor
Definition: dnnl_types.h:1924
dnnl::rnn_primitive_desc_base::diff_src_layer_desc
memory::desc diff_src_layer_desc() const
Returns diff source layer memory descriptor.
Definition: dnnl.hpp:7000
dnnl::primitive_attr::set_scratchpad_mode
void set_scratchpad_mode(scratchpad_mode mode)
Sets scratchpad mode.
Definition: dnnl.hpp:973
dnnl::scratchpad_mode
scratchpad_mode
Scratchpad mode.
Definition: dnnl.hpp:410
dnnl::memory::format_tag::acb
permuted 3D tensor
dnnl::pooling_backward::primitive_desc::diff_src_desc
memory::desc diff_src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:5130
dnnl_query_inner_product_d
inner product descriptor
Definition: dnnl_types.h:1918
dnnl::vanilla_rnn_forward::primitive_desc::src_iter_desc
memory::desc src_iter_desc() const
Returns source iteration memory descriptor.
Definition: dnnl.hpp:7222
dnnl::algorithm::pooling_avg_exclude_padding
Average pooling exclude padding.
dnnl_rnn_flags_undef
Undefined RNN flags.
Definition: dnnl_types.h:1384
dnnl_nCdhw16c
5D CNN activations tensor blocked by channels with block size 16, an alias to dnnl_aBcde16b
Definition: dnnl_types.h:460
dnnl::convert_to_c
dnnl_primitive_kind_t convert_to_c(primitive::kind kind)
Converts primitive kind enum value from C++ API to C API type.
Definition: dnnl.hpp:373
dnnl_query_convolution_d
convolution descriptor
Definition: dnnl_types.h:1909
dnnl::gru_backward::primitive_desc::diff_dst_layer_desc
memory::desc diff_dst_layer_desc() const
Returns diff destination layer memory descriptor.
Definition: dnnl.hpp:8350
dnnl::batch_normalization_forward::primitive_desc::mean_desc
memory::desc mean_desc() const
Returns memory descriptor for mean.
Definition: dnnl.hpp:5952
dnnl::lrn_forward::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:4770
dnnl::algorithm::eltwise_sqrt
Elementwise: square root.
dnnl::pooling_backward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::primitive_desc_base::scratchpad_engine
engine scratchpad_engine() const
Returns the engine on which the scratchpad memory is located.
Definition: dnnl.hpp:2647
dnnl::sum::sum
sum()=default
Default constructor. Produces an empty object.
dnnl::vanilla_rnn_backward::primitive_desc::diff_src_iter_desc
memory::desc diff_src_iter_desc() const
Returns diff source iteration memory descriptor.
Definition: dnnl.hpp:7471
dnnl::vanilla_rnn_backward::primitive_desc::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:7461
dnnl::algorithm::eltwise_log
Elementwise: natural logarithm.
dnnl::vanilla_rnn_backward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl_bcda
permuted 4D tensor
Definition: dnnl_types.h:195
dnnl::memory::format_tag::oihw
4D CNN weights tensor; an alias for dnnl::memory::format_tag::abcd
dnnl::vanilla_rnn_forward::primitive_desc::bias_desc
memory::desc bias_desc() const
Returns bias memory descriptor.
Definition: dnnl.hpp:7235
dnnl::deconvolution_forward::deconvolution_forward
deconvolution_forward()=default
Default constructor. Produces an empty object.
dnnl_engine_create_ocl
dnnl_status_t DNNL_API dnnl_engine_create_ocl(dnnl_engine_t *engine, dnnl_engine_kind_t kind, cl_device_id device, cl_context context)
Creates an engine associated with an OpenCL device and an OpenCL context.
dnnl_bidirectional_concat
Bidirectional execution of RNN primitive with concatenation of the results.
Definition: dnnl_types.h:1395
dnnl::primitive_desc_base::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:2602
dnnl_pooling_desc_t
A descriptor of a pooling operation.
Definition: dnnl_types.h:1209
dnnl::convolution_backward_weights::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:3929
dnnl::algorithm::lbr_gru
GRU cell with linear before reset.
dnnl::deconvolution_backward_weights::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:4646
dnnl::primitive_desc_base::primitive_desc_base
primitive_desc_base()=default
Default constructor. Produces an empty object.
dnnl::memory::format_tag::ncw
3D CNN activations tensor; an alias for dnnl::memory::format_tag::abc
dnnl::primitive_attr::set_zero_points
void set_zero_points(int arg, int mask, const std::vector< int32_t > &zero_points)
Sets zero points for primitive operations for a given memory argument.
Definition: dnnl.hpp:1143
dnnl::primitive::kind::rnn
A rnn primitive.
dnnl::algorithm::convolution_winograd
Winograd convolution.
dnnl::engine::get_kind
kind get_kind() const
Returns the kind of the engine.
Definition: dnnl.hpp:1355
dnnl::vanilla_rnn_backward::primitive_desc::dst_layer_desc
memory::desc dst_layer_desc() const
Returns destination layer memory descriptor.
Definition: dnnl.hpp:7453
dnnl_data_type_t
dnnl_data_type_t
Data type specification.
Definition: dnnl_types.h:61
dnnl_ba
permuted 2D tensor
Definition: dnnl_types.h:191
dnnl::inner_product_backward_weights::desc::desc
desc(const memory::desc &src_desc, const memory::desc &diff_weights_desc, const memory::desc &diff_bias_desc, const memory::desc &diff_dst_desc)
Constructs a descriptor for an inner product descriptor weights update primitive with bias.
Definition: dnnl.hpp:6806
dnnl_lrn_within_channel
LRN within a single channel.
Definition: dnnl_types.h:762
dnnl_memory_destroy
dnnl_status_t DNNL_API dnnl_memory_destroy(dnnl_memory_t memory)
Destroys a memory object.
dnnl::primitive_desc_base::diff_weights_desc
memory::desc diff_weights_desc() const
Returns a diff weights memory descriptor.
Definition: dnnl.hpp:2626
dnnl::primitive_attr::set_post_ops
void set_post_ops(const post_ops ops)
Sets post-ops.
Definition: dnnl.hpp:1171
dnnl_primitive_attr_create
dnnl_status_t DNNL_API dnnl_primitive_attr_create(dnnl_primitive_attr_t *attr)
Creates an empty (default) primitive attributes with all the parameters set to their default values.
dnnl::eltwise_backward::eltwise_backward
eltwise_backward()=default
Default constructor. Produces an empty object.
dnnl_binary_mul
Binary mul.
Definition: dnnl_types.h:780
dnnl::primitive_desc_base::get_kind
dnnl::primitive::kind get_kind() const
Returns the kind of the primitive descriptor.
Definition: dnnl.hpp:2671
dnnl::rnn_direction::unidirectional_left2right
Unidirectional execution of RNN primitive from left to right.
dnnl_primitive_attr_get_zero_points
dnnl_status_t DNNL_API dnnl_primitive_attr_get_zero_points(const_dnnl_primitive_attr_t attr, int arg, dnnl_dim_t *count, int *mask, const int32_t **zero_points)
Returns count, correspondence zero point mask, and a pointer to a constant int32_t array of zero_poin...
dnnl_format_tag_undef
Undefined memory format tag.
Definition: dnnl_types.h:165
dnnl::primitive::kind::resampling
A resampling primitive.
dnnl_primitive_attr_set_output_scales
dnnl_status_t DNNL_API dnnl_primitive_attr_set_output_scales(dnnl_primitive_attr_t attr, dnnl_dim_t count, int mask, const float *scales)
Sets output scaling factors correspondence mask and values.
dnnl_primitive_desc_iterator_create
dnnl_status_t DNNL_API dnnl_primitive_desc_iterator_create(dnnl_primitive_desc_iterator_t *iterator, const_dnnl_op_desc_t op_desc, const_dnnl_primitive_attr_t attr, dnnl_engine_t engine, const_dnnl_primitive_desc_t hint_forward_primitive_desc)
Creates a primitive descriptor iterator.
dnnl::shuffle_forward::shuffle_forward
shuffle_forward()=default
Default constructor. Produces an empty object.
dnnl_softmax_forward_desc_init
dnnl_status_t DNNL_API dnnl_softmax_forward_desc_init(dnnl_softmax_desc_t *softmax_desc, dnnl_prop_kind_t prop_kind, const dnnl_memory_desc_t *data_desc, int softmax_axis)
Initializes a descriptor for softmax forward propagation primitive.
dnnl_primitive_desc_clone
dnnl_status_t DNNL_API dnnl_primitive_desc_clone(dnnl_primitive_desc_t *primitive_desc, const_dnnl_primitive_desc_t existing_primitive_desc)
Clones a primitive descriptor.
dnnl_format_kind_rnn_packed
Packed weights format used in RNN.
Definition: dnnl_types.h:92
dnnl_use_scaleshift
Use scale and shift parameters.
Definition: dnnl_types.h:813
dnnl_eltwise_log
Eltwise: natural logarithm.
Definition: dnnl_types.h:748
dnnl::algorithm::binary_mul
Binary mul.
dnnl_query_layer_normalization_d
layer normalization descriptor
Definition: dnnl_types.h:1917
dnnl::lrn_backward::primitive_desc::diff_dst_desc
memory::desc diff_dst_desc() const
Returns a diff destination memory descriptor.
Definition: dnnl.hpp:4885
dnnl_memory_set_data_handle
dnnl_status_t DNNL_API dnnl_memory_set_data_handle(dnnl_memory_t memory, void *handle)
Sets memory object's data handle.
dnnl::reorder::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:2878
dnnl::batch_normalization_backward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::reorder::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:2875
dnnl_ABcd8b8a
4D tensor blocked by 1st and 2nd dimension with block size 8
Definition: dnnl_types.h:252
dnnl::engine::get_ocl_device
cl_device_id get_ocl_device() const
Returns the OpenCL device associated with the engine.
Definition: dnnl.hpp:1374
dnnl_resampling_linear
Linear Resampling Method.
Definition: dnnl_types.h:784
dnnl::inner_product_backward_data::primitive_desc::diff_src_desc
memory::desc diff_src_desc() const
Returns a diff source memory descriptor.
Definition: dnnl.hpp:6763
dnnl::primitive_desc_base::weights_desc
memory::desc weights_desc() const
Returns a weights memory descriptor.
Definition: dnnl.hpp:2608
dnnl::gru_backward::primitive_desc::diff_bias_desc
memory::desc diff_bias_desc() const
Returns diff bias memory descriptor.
Definition: dnnl.hpp:8345
dnnl::memory::format_tag::nwc
3D CNN activations tensor; an alias for dnnl::memory::format_tag::acb
dnnl::lstm_forward::lstm_forward
lstm_forward()=default
Default constructor. Produces an empty object.
dnnl::primitive_desc_base::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:2632
dnnl::batch_normalization_forward::desc::desc
desc(prop_kind prop_kind, const memory::desc &data_desc, float epsilon, normalization_flags flags)
Constructs a batch normalization descriptor for forward propagation.
Definition: dnnl.hpp:5878
dnnl::memory::data_type::f16
16-bit/half-precision floating point.
dnnl_forward_training
Forward data propagation (training mode).
Definition: dnnl_types.h:641
dnnl::query
query
Primitive descriptor query specification.
Definition: dnnl.hpp:712
dnnl::gru_forward::primitive_desc::dst_iter_desc
memory::desc dst_iter_desc() const
Returns destination iteration memory descriptor.
Definition: dnnl.hpp:8115
dnnl_primitive_desc_query
dnnl_status_t DNNL_API dnnl_primitive_desc_query(const_dnnl_primitive_desc_t primitive_desc, dnnl_query_t what, int index, void *result)
Queries a primitive descriptor for various pieces of information.
dnnl::memory::set_sycl_buffer
void set_sycl_buffer(cl::sycl::buffer< T, ndims > &buf)
Sets the underlying buffer to the given SYCL buffer.
Definition: dnnl.hpp:2419
dnnl_bac
permuted 3D tensor
Definition: dnnl_types.h:192
dnnl_eltwise_square
Eltwise: square.
Definition: dnnl_types.h:725
dnnl::memory::format_kind::undef
Undefined memory format kind, used for empty memory descriptors.
dnnl_fuse_norm_relu
Fuse with ReLU.
Definition: dnnl_types.h:826
dnnl::memory::format_tag::ihwo
4D CNN weights tensor; an alias for dnnl::memory::format_tag::bcda
dnnl::algorithm::eltwise_clip
Eltwise: clip.
dnnl_primitive_execute
dnnl_status_t DNNL_API dnnl_primitive_execute(const_dnnl_primitive_t primitive, dnnl_stream_t stream, int nargs, const dnnl_exec_arg_t *args)
Executes a primitive.
dnnl_cpu_isa_avx512_mic_4ops
Intel(R) Advanced Vector Extensions 512 subset for Intel(R) Xeon Phi(TM) Processors 7235,...
Definition: dnnl_types.h:2044
dnnl::lbr_gru_forward::primitive_desc::weights_layer_desc
memory::desc weights_layer_desc() const
Returns weights layer memory descriptor.
Definition: dnnl.hpp:8497
dnnl::memory::data_type::bf16
non-standard 16-bit floating point with 7-bit mantissa.
dnnl::memory::format_tag::hwio
4D CNN weights tensor; an alias for dnnl::memory::format_tag::cdba
dnnl::lbr_gru_forward::primitive_desc::dst_iter_desc
memory::desc dst_iter_desc() const
Returns destination iteration memory descriptor.
Definition: dnnl.hpp:8515
dnnl::inner_product_forward::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:6651
dnnl::query::convolution_d
convolution descriptor
dnnl_stream_destroy
dnnl_status_t DNNL_API dnnl_stream_destroy(dnnl_stream_t stream)
Destroys an execution stream.
dnnl_primitive_attr_destroy
dnnl_status_t DNNL_API dnnl_primitive_attr_destroy(dnnl_primitive_attr_t attr)
Destroys primitive attributes.
dnnl::normalization_flags::fuse_norm_relu
Fuse with ReLU.
dnnl::memory::format_kind::wino
Weights format used in 8bit Winograd convolution.
dnnl_post_ops_append_sum
dnnl_status_t DNNL_API dnnl_post_ops_append_sum(dnnl_post_ops_t post_ops, float scale)
Appends an accumulation (sum) to post-ops.
dnnl::query::num_of_outputs_s32
number of outputs expected
dnnl::rnn_primitive_desc_base::src_iter_desc
memory::desc src_iter_desc() const
Returns source iteration memory descriptor.
Definition: dnnl.hpp:6964
dnnl_gru_forward_desc_init
dnnl_status_t DNNL_API dnnl_gru_forward_desc_init(dnnl_rnn_desc_t *rnn_desc, dnnl_prop_kind_t prop_kind, dnnl_rnn_direction_t direction, const dnnl_memory_desc_t *src_layer_desc, const dnnl_memory_desc_t *src_iter_desc, const dnnl_memory_desc_t *weights_layer_desc, const dnnl_memory_desc_t *weights_iter_desc, const dnnl_memory_desc_t *bias_desc, const dnnl_memory_desc_t *dst_layer_desc, const dnnl_memory_desc_t *dst_iter_desc, unsigned flags)
Initializes a descriptor for GRU forward propagation primitive.
dnnl_gemm_s8s8s32
dnnl_status_t DNNL_API dnnl_gemm_s8s8s32(char transa, char transb, char offsetc, dnnl_dim_t M, dnnl_dim_t N, dnnl_dim_t K, float alpha, const int8_t *A, dnnl_dim_t lda, int8_t ao, const int8_t *B, dnnl_dim_t ldb, int8_t bo, float beta, int32_t *C, dnnl_dim_t ldc, const int32_t *co)
Performs integer matrix-matrix multiply on 8-bit signed matrix A, 8-bit signed matrix B,...
dnnl_format_kind_wino
Weights format used in 8bit Winograd convolution.
Definition: dnnl_types.h:90
dnnl_convolution_winograd
Winograd convolution.
Definition: dnnl_types.h:711
dnnl::deconvolution_forward::desc::desc
desc(prop_kind prop_kind, algorithm algorithm, const memory::desc &src_desc, const memory::desc &weights_desc, const memory::desc &bias_desc, const memory::desc &dst_desc, const memory::dims &strides, const memory::dims &padding_l, const memory::dims &padding_r)
Constructs a descriptor for a deconvolution forward propagation primitive with bias.
Definition: dnnl.hpp:4003
dnnl::logsoftmax_backward::primitive_desc::diff_src_desc
memory::desc diff_src_desc() const
Returns a diff source memory descriptor.
Definition: dnnl.hpp:5799
dnnl_ABcde4b16a4b
5D tensor blocked by 1st dimension with block size 16
Definition: dnnl_types.h:262
dnnl_nChw8c
4D CNN activations tensor blocked by channels with block size 8, an alias to dnnl_aBcd8b
Definition: dnnl_types.h:475
dnnl_memory_desc_init_submemory
dnnl_status_t DNNL_API dnnl_memory_desc_init_submemory(dnnl_memory_desc_t *memory_desc, const dnnl_memory_desc_t *parent_memory_desc, const dnnl_dims_t dims, const dnnl_dims_t offsets)
Initializes a memory descriptor for a region inside an area described by an existing memory descripto...
dnnl_engine_kind_t
dnnl_engine_kind_t
Kinds of engines.
Definition: dnnl_types.h:1553
dnnl_binary
A binary primitive.
Definition: dnnl_types.h:696
dnnl_cdeba
permuted 5D tensor
Definition: dnnl_types.h:199
dnnl::prop_kind::forward_inference
Forward data propagation (inference mode).
dnnl::vanilla_rnn_backward::primitive_desc::diff_weights_iter_desc
memory::desc diff_weights_iter_desc() const
Returns diff weights iteration memory descriptor.
Definition: dnnl.hpp:7481
dnnl::layer_normalization_backward::primitive_desc::mean_desc
memory::desc mean_desc() const
Returns memory descriptor for mean.
Definition: dnnl.hpp:6502
dnnl_eltwise_tanh
Eltwise: hyperbolic tangent non-linearity (tanh)
Definition: dnnl_types.h:721
dnnl::error::error
error(dnnl_status_t status, const char *message)
Constructs an instance of an exception class.
Definition: dnnl.hpp:99
dnnl::gru_backward::primitive_desc::dst_layer_desc
memory::desc dst_layer_desc() const
Returns destination layer memory descriptor.
Definition: dnnl.hpp:8312
dnnl_aBc4b
3D tensor blocked by 2nd dimension with block size 4
Definition: dnnl_types.h:213
dnnl::version_t
dnnl_version_t version_t
Structure containing version information as per Semantic Versioning
Definition: dnnl.hpp:9471
dnnl::pooling_forward::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:5009
dnnl::shuffle_backward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl_abcde
plain 5D tensor
Definition: dnnl_types.h:180
dnnl::pooling_forward::desc::desc
desc(prop_kind prop_kind, algorithm algorithm, const memory::desc &src_desc, const memory::desc &dst_desc, const memory::dims &strides, const memory::dims &kernel, const memory::dims &padding_l, const memory::dims &padding_r)
Constructs a descriptor for pooling forward propagation primitive.
Definition: dnnl.hpp:4945
dnnl_nCw8c
3D CNN activations tensor blocked by channels with block size 8, an alias to dnnl_aBc8b
Definition: dnnl_types.h:484
dnnl_post_ops_append_eltwise
dnnl_status_t DNNL_API dnnl_post_ops_append_eltwise(dnnl_post_ops_t post_ops, float scale, dnnl_alg_kind_t alg_kind, float alpha, float beta)
Appends an elementwise post-op.
dnnl::memory::format_tag::abcde
plain 5D tensor
dnnl_memory_desc_t::dims
dnnl_dims_t dims
Dimensions in the following order:
Definition: dnnl_types.h:993
dnnl_stream_default_order
Default order execution.
Definition: dnnl_types.h:1950
dnnl::cpu_isa::avx512_core_vnni
Intel(R) Advanced Vector Extensions 512 with Intel(R) DL Boost Support for Intel(R) Xeon(R) Processor...
dnnl_primitive_attr_get_scratchpad_mode
dnnl_status_t DNNL_API dnnl_primitive_attr_get_scratchpad_mode(const_dnnl_primitive_attr_t attr, dnnl_scratchpad_mode_t *mode)
Returns the primitive attributes scratchpad mode.
dnnl_concat_primitive_desc_create
dnnl_status_t DNNL_API dnnl_concat_primitive_desc_create(dnnl_primitive_desc_t *concat_primitive_desc, const dnnl_memory_desc_t *dst_desc, int n, int concat_dimension, const dnnl_memory_desc_t *src_descs, const_dnnl_primitive_attr_t attr, dnnl_engine_t engine)
Creates a primitive descriptor for an out-of-place concatenation primitive.
dnnl_post_ops_destroy
dnnl_status_t DNNL_API dnnl_post_ops_destroy(dnnl_post_ops_t post_ops)
Destroys post-ops.
dnnl_eltwise_backward_desc_init
dnnl_status_t DNNL_API dnnl_eltwise_backward_desc_init(dnnl_eltwise_desc_t *eltwise_desc, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *diff_data_desc, const dnnl_memory_desc_t *data_desc, float alpha, float beta)
Initializes a descriptor for eltwise backward propagation primitive.
dnnl::resampling_forward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::algorithm::resampling_nearest
Nearest Neighbor resampling method.
dnnl_pooling
A pooling primitive.
Definition: dnnl_types.h:682
dnnl_acdb
permuted 4D tensor
Definition: dnnl_types.h:189
dnnl::memory::format_tag::abdec
permuted 5D tensor
dnnl_query_lrn_d
lrn descriptor
Definition: dnnl_types.h:1915
dnnl_convolution_backward_data_desc_init
dnnl_status_t DNNL_API dnnl_convolution_backward_data_desc_init(dnnl_convolution_desc_t *conv_desc, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *diff_src_desc, const dnnl_memory_desc_t *weights_desc, const dnnl_memory_desc_t *diff_dst_desc, const dnnl_dims_t strides, const dnnl_dims_t padding_l, const dnnl_dims_t padding_r)
Initializes a descriptor for a convolution backward propagation primitive.
dnnl_backward
Backward propagation (with respect to all parameters).
Definition: dnnl_types.h:651
dnnl::batch_normalization_forward::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:5939
dnnl::inner_product_backward_data::primitive_desc::weights_desc
memory::desc weights_desc() const
Returns a weights memory descriptor.
Definition: dnnl.hpp:6766
dnnl_softmax_desc_t
A descriptor of a Softmax operation.
Definition: dnnl_types.h:1179
dnnl_cpu_isa_avx512_core_bf16
Intel(R) Advanced Vector Extensions 512 with Intel(R) DL Boost and Bfloat16 Support for Intel(R) Xeon...
Definition: dnnl_types.h:2058
dnnl_memory_get_data_handle
dnnl_status_t DNNL_API dnnl_memory_get_data_handle(const_dnnl_memory_t memory, void **handle)
Returns memory object's data handle.
dnnl_iterator_ends
Primitive iterator passed over last primitive descriptor.
Definition: dnnl_types.h:48
dnnl::stream::flags::default_order
Default order execution.
dnnl::query::scratchpad_md
scratchpad memory desc
dnnl::memory::data_type
data_type
Data type specification.
Definition: dnnl.hpp:1625
dnnl_primitive_attr_set_scales
dnnl_status_t DNNL_API dnnl_primitive_attr_set_scales(dnnl_primitive_attr_t attr, int arg, dnnl_dim_t count, int mask, const float *scales)
Sets primitive attributes scaling factors for primitive operations for a given memory argument.
dnnl::engine::get_ocl_context
cl_context get_ocl_context() const
Returns the OpenCL context associated with the engine.
Definition: dnnl.hpp:1365
dnnl::memory::format_tag::defcab
plain 6D tensor
dnnl_stream_create
dnnl_status_t DNNL_API dnnl_stream_create(dnnl_stream_t *stream, dnnl_engine_t engine, unsigned flags)
Creates an execution stream for engine and with flags.
dnnl_sgemm
dnnl_status_t DNNL_API dnnl_sgemm(char transa, char transb, dnnl_dim_t M, dnnl_dim_t N, dnnl_dim_t K, float alpha, const float *A, dnnl_dim_t lda, const float *B, dnnl_dim_t ldb, float beta, float *C, dnnl_dim_t ldc)
Performs single-precision matrix-matrix multiply.
dnnl::batch_normalization_backward::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:6099
dnnl_stream_wait
dnnl_status_t DNNL_API dnnl_stream_wait(dnnl_stream_t stream)
Waits for all primitives in the execution stream to finish computations.
dnnl::rnn_primitive_desc_base::diff_weights_iter_desc
memory::desc diff_weights_iter_desc() const
Returns diff weights iteration memory descriptor.
Definition: dnnl.hpp:7020
dnnl_primitive_desc
An opaque structure to describe a primitive descriptor.
dnnl::memory::format_tag::chwn
4D CNN activations tensor; an alias for dnnl::memory::format_tag::bcda
dnnl_sum_primitive_desc_create
dnnl_status_t DNNL_API dnnl_sum_primitive_desc_create(dnnl_primitive_desc_t *sum_primitive_desc, const dnnl_memory_desc_t *dst_desc, int n, const float *scales, const dnnl_memory_desc_t *src_descs, const_dnnl_primitive_attr_t attr, dnnl_engine_t engine)
Creates a primitive descriptor for an (out-of-place) sum primitive.
dnnl::engine::query
static engine query(const primitive_desc &pd)
Returns the engine of a primitive descriptor.
Definition: dnnl.hpp:1396
dnnl_nCdhw8c
5D CNN activations tensor blocked by channels with block size 8, an alias to dnnl_aBcde8b
Definition: dnnl_types.h:466
dnnl_pooling_avg
Average pooling (alias for dnnl_pooling_avg_exclude_padding)
Definition: dnnl_types.h:758
dnnl_vanilla_rnn
RNN cell.
Definition: dnnl_types.h:764
dnnl::query::weights_md
weights memory descriptor desc
dnnl::cpu_isa::avx2
Intel(R) Advanced Vector Extensions 2.
dnnl_primitive_desc_get_attr
dnnl_status_t DNNL_API dnnl_primitive_desc_get_attr(const_dnnl_primitive_desc_t primitive_desc, const_dnnl_primitive_attr_t *attr)
Returns a constant reference to the attributes of a primitive descriptor.
dnnl_unidirectional
Alias for dnnl_unidirectional_left2right.
Definition: dnnl_types.h:1400
dnnl::primitive::kind::inner_product
An inner product primitive.
dnnl_gru_backward_desc_init
dnnl_status_t DNNL_API dnnl_gru_backward_desc_init(dnnl_rnn_desc_t *rnn_desc, dnnl_prop_kind_t prop_kind, dnnl_rnn_direction_t direction, const dnnl_memory_desc_t *src_layer_desc, const dnnl_memory_desc_t *src_iter_desc, const dnnl_memory_desc_t *weights_layer_desc, const dnnl_memory_desc_t *weights_iter_desc, const dnnl_memory_desc_t *bias_desc, const dnnl_memory_desc_t *dst_layer_desc, const dnnl_memory_desc_t *dst_iter_desc, const dnnl_memory_desc_t *diff_src_layer_desc, const dnnl_memory_desc_t *diff_src_iter_desc, const dnnl_memory_desc_t *diff_weights_layer_desc, const dnnl_memory_desc_t *diff_weights_iter_desc, const dnnl_memory_desc_t *diff_bias_desc, const dnnl_memory_desc_t *diff_dst_layer_desc, const dnnl_memory_desc_t *diff_dst_iter_desc, unsigned flags)
Initializes a descriptor for GRU backward propagation primitive.
dnnl::query::prop_kind
propagation kind
dnnl::lstm_forward::primitive_desc::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:7677
dnnl::lstm_forward::primitive_desc::dst_iter_c_desc
memory::desc dst_iter_c_desc() const
Returns source iteration memory descriptor.
Definition: dnnl.hpp:7672
dnnl::lstm_backward::primitive_desc::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:7912
dnnl::layer_normalization_backward::primitive_desc::diff_dst_desc
memory::desc diff_dst_desc() const
Returns a diff destination memory descriptor.
Definition: dnnl.hpp:6494
dnnl::memory::data_type::s32
32-bit signed integer.
dnnl::primitive::kind::undef
Undefined primitive.
dnnl::memory::get_desc
desc get_desc() const
Returns the associated memory descriptor.
Definition: dnnl.hpp:2292
dnnl::shuffle_forward::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:8850
dnnl::rnn_primitive_desc_base::diff_dst_layer_desc
memory::desc diff_dst_layer_desc() const
Returns diff destination layer memory descriptor.
Definition: dnnl.hpp:7032
dnnl_aBcd4b
4D tensor blocked by 2nd dimension with block size 4
Definition: dnnl_types.h:235
dnnl::primitive::execute
void execute(stream &stream, const std::unordered_map< int, memory > &args) const
Executes computations specified by the primitive in a specified stream.
dnnl::layer_normalization_forward::primitive_desc::mean_desc
memory::desc mean_desc() const
Returns memory descriptor for mean.
Definition: dnnl.hpp:6304
dnnl::primitive::kind::layer_normalization
A layer normalization primitive.
dnnl::deconvolution_backward_weights::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::rnn_primitive_desc_base::src_iter_c_desc
memory::desc src_iter_c_desc() const
Returns source recurrent cell state memory descriptor.
Definition: dnnl.hpp:6968
dnnl::memory::format_tag
format_tag
Memory format tag specification.
Definition: dnnl.hpp:1699
dnnl_query_matmul_d
matrix multiplication (matmul) descriptor
Definition: dnnl_types.h:1923
dnnl::primitive::kind::reorder
A reorder primitive.
dnnl::memory::unmap_data
void unmap_data(void *mapped_ptr) const
Unmaps the previously mapped data for the memory.
Definition: dnnl.hpp:2364
dnnl::gru_forward::primitive_desc::src_iter_desc
memory::desc src_iter_desc() const
Returns source iteration memory descriptor.
Definition: dnnl.hpp:8094
dnnl_query_binary_d
binary descriptor
Definition: dnnl_types.h:1921
dnnl_lbr_gru
GRU cell with linear before reset.
Definition: dnnl_types.h:776
dnnl::status::not_required
Queried element is not required for given primitive.
dnnl_lbr_gru_backward_desc_init
dnnl_status_t DNNL_API dnnl_lbr_gru_backward_desc_init(dnnl_rnn_desc_t *rnn_desc, dnnl_prop_kind_t prop_kind, dnnl_rnn_direction_t direction, const dnnl_memory_desc_t *src_layer_desc, const dnnl_memory_desc_t *src_iter_desc, const dnnl_memory_desc_t *weights_layer_desc, const dnnl_memory_desc_t *weights_iter_desc, const dnnl_memory_desc_t *bias_desc, const dnnl_memory_desc_t *dst_layer_desc, const dnnl_memory_desc_t *dst_iter_desc, const dnnl_memory_desc_t *diff_src_layer_desc, const dnnl_memory_desc_t *diff_src_iter_desc, const dnnl_memory_desc_t *diff_weights_layer_desc, const dnnl_memory_desc_t *diff_weights_iter_desc, const dnnl_memory_desc_t *diff_bias_desc, const dnnl_memory_desc_t *diff_dst_layer_desc, const dnnl_memory_desc_t *diff_dst_iter_desc, unsigned flags)
Initializes a descriptor for LBR GRU backward propagation primitive.
dnnl::logsoftmax_forward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::prop_kind::backward_weights
Backward weights propagation.
dnnl::query::dst_md
destination memory desc
dnnl_forward
Forward data propagation (alias for dnnl_forward_training).
Definition: dnnl_types.h:649
dnnl::resampling_forward::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:9326
dnnl_f32
32-bit/single-precision floating point.
Definition: dnnl_types.h:69
dnnl::query::batch_normalization_d
batch normalization descriptor
dnnl_acbdef
permuted 6D tensor
Definition: dnnl_types.h:188
dnnl::normalization_flags
normalization_flags
Flags for normalization primitives.
Definition: dnnl.hpp:571
dnnl_use_global_stats
Use global statistics.
Definition: dnnl_types.h:800
dnnl::query::binary_d
binary descriptor
dnnl::query::undef
no query
dnnl_lrn_across_channels
Local response normalization (LRN) across multiple channels.
Definition: dnnl_types.h:760
dnnl::batch_normalization_backward::primitive_desc::mean_desc
memory::desc mean_desc() const
Returns memory descriptor for mean.
Definition: dnnl.hpp:6113
dnnl_concat
A (out-of-place) concat primitive.
Definition: dnnl_types.h:670
dnnl::deconvolution_backward_data::primitive_desc::weights_desc
memory::desc weights_desc() const
Returns a weights memory descriptor.
Definition: dnnl.hpp:4387
dnnl_query_diff_dst_md
destination grad. memory desc
Definition: dnnl_types.h:1933
dnnl_format_kind_undef
Undefined memory format kind, used for empty memory descriptors.
Definition: dnnl_types.h:81
dnnl_aBcdef16b
6D tensor blocked by 2nd dimension with block size 16
Definition: dnnl_types.h:296
dnnl_layer_normalization
A layer normalization primitive.
Definition: dnnl_types.h:688
dnnl::query::workspace_md
workspace memory desc
dnnl::deconvolution_forward::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:4213
dnnl_set_max_cpu_isa
dnnl_status_t DNNL_API dnnl_set_max_cpu_isa(dnnl_cpu_isa_t isa)
Sets the maximal ISA DNNL can dispatch to on the CPU.
dnnl::lbr_gru_backward::primitive_desc::diff_dst_layer_desc
memory::desc diff_dst_layer_desc() const
Returns diff destination layer memory descriptor.
Definition: dnnl.hpp:8753
dnnl_memory_desc_t::data_type
dnnl_data_type_t data_type
Data type of the tensor elements.
Definition: dnnl_types.h:996
dnnl_convolution_backward_weights_desc_init
dnnl_status_t DNNL_API dnnl_convolution_backward_weights_desc_init(dnnl_convolution_desc_t *conv_desc, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *src_desc, const dnnl_memory_desc_t *diff_weights_desc, const dnnl_memory_desc_t *diff_bias_desc, const dnnl_memory_desc_t *diff_dst_desc, const dnnl_dims_t strides, const dnnl_dims_t padding_l, const dnnl_dims_t padding_r)
Initializes a descriptor for a convolution weights gradient primitive.
dnnl::status::iterator_ends
Primitive iterator passed over last primitive descriptor.
dnnl::vanilla_rnn_backward::primitive_desc::diff_weights_layer_desc
memory::desc diff_weights_layer_desc() const
Returns diff weights layer memory descriptor.
Definition: dnnl.hpp:7476
dnnl_primitive
dnnl::query::src_md
source memory desc
dnnl::algorithm::convolution_direct
Direct convolution.
dnnl::deconvolution_backward_data::primitive_desc::diff_dst_desc
memory::desc diff_dst_desc() const
Returns a diff destination memory descriptor.
Definition: dnnl.hpp:4390
dnnl::convolution_forward::convolution_forward
convolution_forward()=default
Default constructor. Produces an empty object.
dnnl::lrn_forward::primitive_desc::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:4776
dnnl::algorithm::eltwise_logistic
Elementwise: logistic.
dnnl_cpu_isa_all
Any ISA (no restrictions)
Definition: dnnl_types.h:2027
dnnl_reorder_primitive_desc_create
dnnl_status_t DNNL_API dnnl_reorder_primitive_desc_create(dnnl_primitive_desc_t *reorder_primitive_desc, const dnnl_memory_desc_t *src_desc, dnnl_engine_t src_engine, const dnnl_memory_desc_t *dst_desc, dnnl_engine_t dst_engine, const_dnnl_primitive_attr_t attr)
Creates a primitive descriptor for a reorder primitive.
dnnl::deconvolution_backward_data::deconvolution_backward_data
deconvolution_backward_data()=default
Default constructor. Produces an empty object.
dnnl_query_op_d
op descriptor
Definition: dnnl_types.h:1908
dnnl::stream::get_sycl_queue
cl::sycl::queue DNNL_API get_sycl_queue() const
Returns the underlying SYCL queue object.
dnnl::vanilla_rnn_backward::primitive_desc::src_layer_desc
memory::desc src_layer_desc() const
Returns source layer memory descriptor.
Definition: dnnl.hpp:7432
dnnl_softmax_backward_desc_init
dnnl_status_t DNNL_API dnnl_softmax_backward_desc_init(dnnl_softmax_desc_t *softmax_desc, const dnnl_memory_desc_t *diff_data_desc, const dnnl_memory_desc_t *data_desc, int softmax_axis)
Initializes a descriptor for softmax backward propagation primitive.
dnnl::matmul::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::primitive_attr::set_scales
void set_scales(int arg, int mask, const std::vector< float > &scales)
Sets scaling factors for primitive operations for a given memory argument.
Definition: dnnl.hpp:1091
dnnl::memory::format_tag::iohw
4D CNN weights tensor; an alias for dnnl::memory::format_tag::bacd
dnnl_out_of_memory
The operation failed due to an out-of-memory condition.
Definition: dnnl_types.h:42
dnnl::rnn_primitive_desc_base::weights_iter_desc
memory::desc weights_iter_desc() const
Returns weights iteration memory descriptor.
Definition: dnnl.hpp:6976
dnnl::memory::format_tag::acdb
permuted 4D tensor
dnnl_dim_t
int64_t dnnl_dim_t
A type to describe tensor dimension.
Definition: dnnl_types.h:870
dnnl_memory_get_memory_desc
dnnl_status_t DNNL_API dnnl_memory_get_memory_desc(const_dnnl_memory_t memory, const dnnl_memory_desc_t **memory_desc)
Returns the memory descriptor for a memory object.
dnnl::memory::format_tag::ldigo
5D RNN weights tensor in the format (num_layers, num_directions, input_channels, num_gates,...
dnnl_vanilla_rnn_backward_desc_init
dnnl_status_t DNNL_API dnnl_vanilla_rnn_backward_desc_init(dnnl_rnn_desc_t *rnn_desc, dnnl_prop_kind_t prop_kind, const dnnl_alg_kind_t activation, const dnnl_rnn_direction_t direction, const dnnl_memory_desc_t *src_layer_desc, const dnnl_memory_desc_t *src_iter_desc, const dnnl_memory_desc_t *weights_layer_desc, const dnnl_memory_desc_t *weights_iter_desc, const dnnl_memory_desc_t *bias_desc, const dnnl_memory_desc_t *dst_layer_desc, const dnnl_memory_desc_t *dst_iter_desc, const dnnl_memory_desc_t *diff_src_layer_desc, const dnnl_memory_desc_t *diff_src_iter_desc, const dnnl_memory_desc_t *diff_weights_layer_desc, const dnnl_memory_desc_t *diff_weights_iter_desc, const dnnl_memory_desc_t *diff_bias_desc, const dnnl_memory_desc_t *diff_dst_layer_desc, const dnnl_memory_desc_t *diff_dst_iter_desc, unsigned flags, float alpha, float beta)
Initializes a descriptor for vanilla RNN backward propagation primitive.
dnnl::lbr_gru_backward::lbr_gru_backward
lbr_gru_backward()=default
Default constructor. Produces an empty object.
dnnl::memory::format_tag::aBcd8b
4D tensor blocked by 2nd dimension with block size 8
dnnl_deconvolution_backward_weights_desc_init
dnnl_status_t DNNL_API dnnl_deconvolution_backward_weights_desc_init(dnnl_deconvolution_desc_t *deconv_desc, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *src_desc, const dnnl_memory_desc_t *diff_weights_desc, const dnnl_memory_desc_t *diff_bias_desc, const dnnl_memory_desc_t *diff_dst_desc, const dnnl_dims_t strides, const dnnl_dims_t padding_l, const dnnl_dims_t padding_r)
Initializes a descriptor for a deconvolution weights gradient primitive.
dnnl::gru_backward::primitive_desc::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:8320
dnnl::vanilla_rnn_forward::vanilla_rnn_forward
vanilla_rnn_forward()=default
Default constructor. Produces an empty object.
dnnl::eltwise_forward::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:5256
dnnl::algorithm::eltwise_tanh
Elementwise: hyperbolic tangent non-linearity (tanh)
dnnl::memory::format_tag::cba
permuted 3D tensor
dnnl_resampling_backward_desc_init
dnnl_status_t DNNL_API dnnl_resampling_backward_desc_init(dnnl_resampling_desc_t *resampling_desc, dnnl_alg_kind_t alg_kind, const float *factors, const dnnl_memory_desc_t *diff_src_desc, const dnnl_memory_desc_t *diff_dst_desc)
Initializes a descriptor for resampling backward propagation primitive.
dnnl_abcd
plain 4D tensor
Definition: dnnl_types.h:179
dnnl::primitive::kind::sum
A summation primitive.
dnnl_primitive_get_primitive_desc
dnnl_status_t DNNL_API dnnl_primitive_get_primitive_desc(const_dnnl_primitive_t primitive, const_dnnl_primitive_desc_t *primitive_desc)
Retrieves a constant reference to the primitive descriptor of a given primitive.
dnnl::vanilla_rnn_backward::primitive_desc::src_iter_desc
memory::desc src_iter_desc() const
Returns source iteration memory descriptor.
Definition: dnnl.hpp:7437
dnnl::gru_backward::primitive_desc::weights_iter_desc
memory::desc weights_iter_desc() const
Returns weights iteration memory descriptor.
Definition: dnnl.hpp:8304
dnnl_u8
8-bit unsigned integer.
Definition: dnnl_types.h:75
dnnl_query_workspace_md
workspace memory desc
Definition: dnnl_types.h:1934
dnnl::lstm_forward::primitive_desc::src_layer_desc
memory::desc src_layer_desc() const
Returns source layer memory descriptor.
Definition: dnnl.hpp:7638
dnnl::memory::format_tag::hwigo
5D CNN weights tensor with groups; an alias for dnnl::memory::format_tag::decab
dnnl::matmul::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:9160
dnnl::eltwise_backward::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:5363
dnnl_format_tag_last
Just a sentinel, not real memory format tag.
Definition: dnnl_types.h:350
dnnl::handle::handle
handle()=default
Constructs an empty handle object.
dnnl::gru_backward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::inner_product_forward::desc::desc
desc(prop_kind prop_kind, const memory::desc &src_desc, const memory::desc &weights_desc, const memory::desc &bias_desc, const memory::desc &dst_desc)
Constructs a descriptor for an inner product forward propagation primitive with bias.
Definition: dnnl.hpp:6560
dnnl_query_deconvolution_d
deconvolution descriptor
Definition: dnnl_types.h:1910
dnnl_logsoftmax
A logsoftmax primitive.
Definition: dnnl_types.h:698
dnnl_format_tag_any
Undefined memory format tag.
Definition: dnnl_types.h:168
dnnl::engine::kind::gpu
GPU engine.
dnnl_deconvolution_direct
Direct deconvolution.
Definition: dnnl_types.h:715
dnnl::gru_forward::desc::desc
desc(prop_kind prop_kind, rnn_direction direction, const memory::desc &src_layer_desc, const memory::desc &src_iter_desc, const memory::desc &weights_layer_desc, const memory::desc &weights_iter_desc, const memory::desc &bias_desc, const memory::desc &dst_layer_desc, const memory::desc &dst_iter_desc, rnn_flags flags=rnn_flags::undef)
Constructs a descriptor for a GRU forward propagation primitive.
Definition: dnnl.hpp:8021
dnnl::rnn_primitive_desc_base::dst_iter_c_desc
memory::desc dst_iter_c_desc() const
Returns destination recurrent cell state memory descriptor.
Definition: dnnl.hpp:6996
dnnl::lbr_gru_forward::desc::desc
desc(prop_kind prop_kind, rnn_direction direction, const memory::desc &src_layer_desc, const memory::desc &src_iter_desc, const memory::desc &weights_layer_desc, const memory::desc &weights_iter_desc, const memory::desc &bias_desc, const memory::desc &dst_layer_desc, const memory::desc &dst_iter_desc, rnn_flags flags=rnn_flags::undef)
Constructs a descriptor for LBR GRU forward propagation primitive.
Definition: dnnl.hpp:8419
dnnl_memory_desc_equal
int DNNL_API dnnl_memory_desc_equal(const dnnl_memory_desc_t *lhs, const dnnl_memory_desc_t *rhs)
Compares two memory descriptors.
dnnl_reorder
A reorder primitive.
Definition: dnnl_types.h:666
dnnl::matmul::primitive_desc::bias_desc
memory::desc bias_desc() const
Returns the bias memory descriptor.
Definition: dnnl.hpp:9155
dnnl_deconvolution_backward_data_desc_init
dnnl_status_t DNNL_API dnnl_deconvolution_backward_data_desc_init(dnnl_deconvolution_desc_t *deconv_desc, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *diff_src_desc, const dnnl_memory_desc_t *weights_desc, const dnnl_memory_desc_t *diff_dst_desc, const dnnl_dims_t strides, const dnnl_dims_t padding_l, const dnnl_dims_t padding_r)
Initializes a descriptor for a deconvolution backward propagation primitive.
dnnl::memory::format_tag::ldgoi
5D RNN weights tensor in the format (num_layers, num_directions, num_gates, output_channels,...
dnnl_lrn_desc_t
A descriptor of a Local Response Normalization (LRN) operation.
Definition: dnnl_types.h:1247
dnnl::eltwise_backward::desc::desc
desc(algorithm algorithm, const memory::desc &diff_data_desc, const memory::desc &data_desc, float alpha=0, float beta=0)
Constructs a descriptor for an elementwise backward propagation primitive.
Definition: dnnl.hpp:5295
dnnl::eltwise_forward::desc::desc
desc(prop_kind prop_kind, algorithm algorithm, const memory::desc &data_desc, float alpha=0, float beta=0)
Constructs a descriptor for an elementwise forward propagation primitive.
Definition: dnnl.hpp:5196
dnnl_stream_default_flags
Default stream configuration.
Definition: dnnl_types.h:1956
dnnl::cpu_isa::avx512_mic
Intel(R) Advanced Vector Extensions 512 subset for Intel(R) Xeon Phi(TM) Processors x200 Series.
dnnl_shuffle_desc_t
A descriptor of a shuffle operation.
Definition: dnnl_types.h:1113
dnnl::convolution_forward::desc::desc
desc(prop_kind prop_kind, algorithm algorithm, const memory::desc &src_desc, const memory::desc &weights_desc, const memory::desc &bias_desc, const memory::desc &dst_desc, const memory::dims &strides, const memory::dims &padding_l, const memory::dims &padding_r)
Constructs a descriptor for a convolution forward propagation primitive with bias.
Definition: dnnl.hpp:3270
dnnl::lstm_backward::primitive_desc::src_iter_c_desc
memory::desc src_iter_c_desc() const
Returns source iteration memory descriptor.
Definition: dnnl.hpp:7881
dnnl::memory::format_tag::idhwo
5D CNN weights tensor; an alias for dnnl::memory::format_tag::bcdea
dnnl::memory::format_tag::bca
permuted 3D tensor
dnnl::logsoftmax_forward::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:5691
dnnl::gru_backward::gru_backward
gru_backward()=default
Default constructor. Produces an empty object.
dnnl_backward_data
Backward data propagation.
Definition: dnnl_types.h:653
dnnl::normalization_flags::use_scale_shift
Use scale and shift parameters.
dnnl::softmax_backward::softmax_backward
softmax_backward()=default
Default constructor. Produces an empty object.
dnnl_acdeb
permuted 5D tensor
Definition: dnnl_types.h:190
dnnl_version_t
Structure containing version information as per Semantic Versioning
Definition: dnnl_types.h:1995
dnnl::vanilla_rnn_forward::desc::desc
desc(prop_kind prop_kind, algorithm activation, rnn_direction direction, const memory::desc &src_layer_desc, const memory::desc &src_iter_desc, const memory::desc &weights_layer_desc, const memory::desc &weights_iter_desc, const memory::desc &bias_desc, const memory::desc &dst_layer_desc, const memory::desc &dst_iter_desc, rnn_flags flags=rnn_flags::undef, float alpha=0.0f, float beta=0.0f)
Constructs a descriptor for a vanilla RNN forward propagation primitive.
Definition: dnnl.hpp:7145
dnnl_batch_normalization_desc_t
A descriptor of a Batch Normalization operation.
Definition: dnnl_types.h:1278
dnnl::query::memory_consumption_s64
memory consumption (bytes)
dnnl::primitive_desc_base::diff_dst_desc
memory::desc diff_dst_desc() const
Returns a diff destination memory descriptor.
Definition: dnnl.hpp:2620
dnnl::primitive_desc_base::diff_src_desc
memory::desc diff_src_desc() const
Returns a diff source memory descriptor.
Definition: dnnl.hpp:2614
dnnl::batch_normalization_backward::desc::desc
desc(prop_kind prop_kind, const memory::desc &diff_data_desc, const memory::desc &data_desc, float epsilon, normalization_flags flags)
Constructs a batch normalization descriptor for backward propagation.
Definition: dnnl.hpp:6022
dnnl::scratchpad_mode::library
The library manages the scratchpad allocation according to the policy specified by the DNNL_ENABLE_CO...
dnnl::resampling_forward::resampling_forward
resampling_forward()=default
Default constructor. Produces an empty object.
dnnl::prop_kind::backward_bias
Backward bias propagation.
dnnl_set_verbose
dnnl_status_t DNNL_API dnnl_set_verbose(int level)
Configures verbose output to stdout.
dnnl::cpu_isa::avx512_core
Intel(R) Advanced Vector Extensions 512 for Intel(R) Xeon(R) Processor Scalable Family and Intel(R) C...
dnnl::vanilla_rnn_backward::primitive_desc::diff_dst_iter_desc
memory::desc diff_dst_iter_desc() const
Returns diff destination iteration memory descriptor.
Definition: dnnl.hpp:7496
dnnl::algorithm::eltwise_swish
Elementwise: x*sigmoid(a*x)
dnnl::softmax_forward::softmax_forward
softmax_forward()=default
Default constructor. Produces an empty object.
dnnl_eltwise_desc_t
A descriptor of a element-wise operation.
Definition: dnnl_types.h:1135
dnnl::convolution_backward_data::desc::desc
desc(algorithm algorithm, const memory::desc &diff_src_desc, const memory::desc &weights_desc, const memory::desc &diff_dst_desc, const memory::dims &strides, const memory::dims &padding_l, const memory::dims &padding_r)
Constructs a descriptor for a convolution backward propagation primitive.
Definition: dnnl.hpp:3543
dnnl_eltwise_forward_desc_init
dnnl_status_t DNNL_API dnnl_eltwise_forward_desc_init(dnnl_eltwise_desc_t *eltwise_desc, dnnl_prop_kind_t prop_kind, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *data_desc, float alpha, float beta)
Initializes a descriptor for eltwise forward propagation primitive.
dnnl_aBcd16b
4D tensor blocked by 2nd dimension with block size 16
Definition: dnnl_types.h:229
dnnl::algorithm::lrn_within_channel
LRN within a single channel.
dnnl_resampling_nearest
Nearest Neighbor Resampling Method.
Definition: dnnl_types.h:782
dnnl::layer_normalization_backward::layer_normalization_backward
layer_normalization_backward()=default
Default constructor. Produces an empty object.
dnnl::rnn_primitive_desc_base::dst_iter_desc
memory::desc dst_iter_desc() const
Returns destination iteration memory descriptor.
Definition: dnnl.hpp:6992
dnnl::scratchpad_mode::user
A user shall query and provide the scratchpad memory to primitives This mode is thread-safe as long a...
dnnl::layer_normalization_forward::primitive_desc::weights_desc
memory::desc weights_desc() const
Returns a weights memory descriptor.
Definition: dnnl.hpp:6298
dnnl_rnn
A rnn primitive.
Definition: dnnl_types.h:692
dnnl::vanilla_rnn_forward::primitive_desc::dst_iter_desc
memory::desc dst_iter_desc() const
Returns destination iteration memory descriptor.
Definition: dnnl.hpp:7243
dnnl::convolution_backward_weights::primitive_desc::diff_weights_desc
memory::desc diff_weights_desc() const
Returns a diff weights memory descriptor.
Definition: dnnl.hpp:3932
dnnl::memory::data_type::undef
Undefined data type (used for empty memory descriptors).
dnnl::convolution_backward_weights::primitive_desc::diff_dst_desc
memory::desc diff_dst_desc() const
Returns a diff destination memory descriptor.
Definition: dnnl.hpp:3937
dnnl::set_jit_profiling_flags
status set_jit_profiling_flags(unsigned flags)
Sets library profiling flags.
Definition: dnnl.hpp:9507
dnnl_query_num_of_outputs_s32
number of outputs expected
Definition: dnnl_types.h:1888
dnnl::binary::primitive_desc::src1_desc
memory::desc src1_desc() const
Returns the memory descriptor for source #1.
Definition: dnnl.hpp:9031
dnnl_cpu_isa_sse41
Intel(R) SSE4.1.
Definition: dnnl_types.h:2030
dnnl_engine_get_ocl_device
dnnl_status_t DNNL_API dnnl_engine_get_ocl_device(dnnl_engine_t engine, cl_device_id *device)
Returns the OpenCL device associated with an engine.
dnnl::sgemm
status sgemm(char transa, char transb, dnnl_dim_t M, dnnl_dim_t N, dnnl_dim_t K, float alpha, const float *A, dnnl_dim_t lda, const float *B, dnnl_dim_t ldb, float beta, float *C, dnnl_dim_t ldc)
Performs single-precision matrix-matrix multiply.
Definition: dnnl.hpp:9554
dnnl::primitive_desc_base::query_s64
memory::dim query_s64(query what) const
Returns a memory::dim value (same as int64_t).
Definition: dnnl.hpp:2499
dnnl::status
status
Status values returned by the library functions.
Definition: dnnl.hpp:9474
dnnl_memory_get_engine
dnnl_status_t DNNL_API dnnl_memory_get_engine(const_dnnl_memory_t memory, dnnl_engine_t *engine)
Returns the engine of a memory object.
dnnl::layer_normalization_backward::primitive_desc::weights_desc
memory::desc weights_desc() const
Returns a weights memory descriptor.
Definition: dnnl.hpp:6485
dnnl_abdec
permuted 5D tensor
Definition: dnnl_types.h:185
dnnl_cpu_isa_avx2
Intel(R) Advanced Vector Extensions 2.
Definition: dnnl_types.h:2036
dnnl_cpu_isa_avx512_core_vnni
Intel(R) Advanced Vector Extensions 512 with Intel(R) DL Boost Support for Intel(R) Xeon(R) Processor...
Definition: dnnl_types.h:2053
dnnl_memory_desc_t::ndims
int ndims
Number of dimensions.
Definition: dnnl_types.h:978
dnnl_aBc8b
3D tensor blocked by 2nd dimension with block size 8
Definition: dnnl_types.h:220
dnnl::rnn_primitive_desc_base::dst_layer_desc
memory::desc dst_layer_desc() const
Returns destination layer memory descriptor.
Definition: dnnl.hpp:6986
dnnl::handle::get
T get(bool allow_empty=false) const
Returns the underlying C API handle.
Definition: dnnl.hpp:182
dnnl::primitive_desc_base::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:2596
dnnl::eltwise_backward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl_layer_normalization_desc_t
A descriptor of a Layer Normalization operation.
Definition: dnnl_types.h:1311
dnnl::inner_product_backward_weights::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::shuffle_backward::primitive_desc::diff_src_desc
memory::desc diff_src_desc() const
Returns a diff source memory descriptor.
Definition: dnnl.hpp:8927
dnnl::memory::format_tag::tn
2D RNN statistics tensor; an alias for dnnl::memory::format_tag::ab
dnnl::deconvolution_forward::primitive_desc::bias_desc
memory::desc bias_desc() const
Returns the bias memory descriptor.
Definition: dnnl.hpp:4222
dnnl_stream_create_ocl
dnnl_status_t DNNL_API dnnl_stream_create_ocl(dnnl_stream_t *stream, dnnl_engine_t engine, cl_command_queue queue)
Creates an execution stream for a given engine associated with an OpenCL command queue.
dnnl::binary::desc::desc
desc(algorithm algorithm, const memory::desc &src0, const memory::desc &src1, const memory::desc &dst)
Constructs a descriptor for an elementwise binary operator primitive.
Definition: dnnl.hpp:8973
dnnl_not_required
Queried element is not required for given primitive.
Definition: dnnl_types.h:52
dnnl_eltwise_clip
Eltwise: clip.
Definition: dnnl_types.h:750
dnnl::layer_normalization_forward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::lrn_forward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl_engine_get_count
size_t DNNL_API dnnl_engine_get_count(dnnl_engine_kind_t kind)
Returns the number of engines of a particular kind.
dnnl::inner_product_forward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::lbr_gru_backward::primitive_desc::dst_iter_desc
memory::desc dst_iter_desc() const
Returns destination iteration memory descriptor.
Definition: dnnl.hpp:8720
dnnl_engine_create
dnnl_status_t DNNL_API dnnl_engine_create(dnnl_engine_t *engine, dnnl_engine_kind_t kind, size_t index)
Creates an engine.
dnnl::layer_normalization_forward::primitive_desc::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:6301
dnnl::memory::format_tag::ncdhw
5D CNN activations tensor; an alias for dnnl::memory::format_tag::abcde
dnnl::sum::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::layer_normalization_backward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl_pooling_avg_include_padding
Average pooling include padding.
Definition: dnnl_types.h:754
dnnl::cpu_isa::avx512_core_bf16
Intel(R) Advanced Vector Extensions 512 with Intel(R) DL Boost and Bfloat16 Support for Intel(R) Xeon...
dnnl::memory::format_tag::abc
plain 3D tensor
dnnl::layer_normalization_forward::primitive_desc::variance_desc
memory::desc variance_desc() const
Returns memory descriptor for variance.
Definition: dnnl.hpp:6307
dnnl::gru_backward::primitive_desc::diff_weights_layer_desc
memory::desc diff_weights_layer_desc() const
Returns diff weights layer memory descriptor.
Definition: dnnl.hpp:8335
dnnl::memory::desc::data_type
memory::data_type data_type() const
Returns the data type of the memory descriptor.
Definition: dnnl.hpp:2202
dnnl_set_jit_profiling_jitdumpdir
dnnl_status_t DNNL_API dnnl_set_jit_profiling_jitdumpdir(const char *dir)
Sets JIT dump output path.
dnnl::post_ops::append_eltwise
void append_eltwise(float scale, algorithm algorithm, float alpha, float beta)
Appends an elementwise post-op.
Definition: dnnl.hpp:908
dnnl::memory::dim
dnnl_dim_t dim
Integer type for representing dimension sizes and indices.
Definition: dnnl.hpp:1608
dnnl::inner_product_backward_weights::primitive_desc::diff_dst_desc
memory::desc diff_dst_desc() const
Returns a diff destination memory descriptor.
Definition: dnnl.hpp:6911
dnnl::lstm_backward::primitive_desc::dst_iter_desc
memory::desc dst_iter_desc() const
Returns destination iteration memory descriptor.
Definition: dnnl.hpp:7904
dnnl_primitive_desc_iterator_destroy
dnnl_status_t DNNL_API dnnl_primitive_desc_iterator_destroy(dnnl_primitive_desc_iterator_t iterator)
Destroys a primitive descriptor iterator.
dnnl_deconvolution
A deconvolution primitive.
Definition: dnnl_types.h:676
dnnl_inner_product_backward_data_desc_init
dnnl_status_t DNNL_API dnnl_inner_product_backward_data_desc_init(dnnl_inner_product_desc_t *ip_desc, const dnnl_memory_desc_t *diff_src_desc, const dnnl_memory_desc_t *weights_desc, const dnnl_memory_desc_t *diff_dst_desc)
Initializes descriptor for inner product backward propagation.
dnnl::primitive_attr::get_output_scales
void get_output_scales(int &mask, std::vector< float > &scales) const
Returns output scaling factors correspondence mask and values.
Definition: dnnl.hpp:988
dnnl_aBcde4b
5D tensor blocked by 2nd dimension with block size 4
Definition: dnnl_types.h:273
dnnl_memory_map_data
dnnl_status_t DNNL_API dnnl_memory_map_data(const_dnnl_memory_t memory, void **mapped_ptr)
Maps a memory object and returns a pointer to host-side buffer with a copy of its contents.
dnnl::prop_kind::forward
Forward data propagation, alias for dnnl::prop_kind::forward_training.
dnnl::shuffle_forward::desc::desc
desc(prop_kind prop_kind, const memory::desc &data_desc, int axis, int group_size)
Constructs a descriptor for a shuffle forward propagation primitive.
Definition: dnnl.hpp:8803
dnnl::algorithm::eltwise_relu
Elementwise: ReLU.
dnnl::layer_normalization_backward::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:6482
dnnl_dilated_deconvolution_backward_weights_desc_init
dnnl_status_t DNNL_API dnnl_dilated_deconvolution_backward_weights_desc_init(dnnl_deconvolution_desc_t *deconv_desc, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *src_desc, const dnnl_memory_desc_t *diff_weights_desc, const dnnl_memory_desc_t *diff_bias_desc, const dnnl_memory_desc_t *diff_dst_desc, const dnnl_dims_t strides, const dnnl_dims_t dilates, const dnnl_dims_t padding_l, const dnnl_dims_t padding_r)
Initializes a descriptor for a dilated deconvolution weights gradient primitive.
dnnl::lstm_backward::primitive_desc::diff_bias_desc
memory::desc diff_bias_desc() const
Returns diff bias memory descriptor.
Definition: dnnl.hpp:7942
dnnl::deconvolution_backward_data::primitive_desc::diff_src_desc
memory::desc diff_src_desc() const
Returns a diff source memory descriptor.
Definition: dnnl.hpp:4384
dnnl_stream_out_of_order
Out-of-order execution.
Definition: dnnl_types.h:1954
dnnl::inner_product_forward::primitive_desc::weights_desc
memory::desc weights_desc() const
Returns a weights memory descriptor.
Definition: dnnl.hpp:6654
dnnl::algorithm::resampling_linear
Linear (Bilinear, Trilinear) resampling method.
dnnl::primitive::kind::matmul
A matmul (matrix multiplication) primitive.
dnnl::primitive_desc
A base class for descriptors of all primitives that have an operation descriptor and that support ite...
Definition: dnnl.hpp:3151
dnnl::normalization_flags::use_global_stats
Use global statistics.
dnnl_batch_normalization_backward_desc_init
dnnl_status_t DNNL_API dnnl_batch_normalization_backward_desc_init(dnnl_batch_normalization_desc_t *bnrm_desc, dnnl_prop_kind_t prop_kind, const dnnl_memory_desc_t *diff_data_desc, const dnnl_memory_desc_t *data_desc, float epsilon, unsigned flags)
Initializes a descriptor for a batch normalization backward propagation primitive.
dnnl_lbr_gru_forward_desc_init
dnnl_status_t DNNL_API dnnl_lbr_gru_forward_desc_init(dnnl_rnn_desc_t *rnn_desc, dnnl_prop_kind_t prop_kind, dnnl_rnn_direction_t direction, const dnnl_memory_desc_t *src_layer_desc, const dnnl_memory_desc_t *src_iter_desc, const dnnl_memory_desc_t *weights_layer_desc, const dnnl_memory_desc_t *weights_iter_desc, const dnnl_memory_desc_t *bias_desc, const dnnl_memory_desc_t *dst_layer_desc, const dnnl_memory_desc_t *dst_iter_desc, unsigned flags)
Initializes a descriptor for LBR GRU forward propagation primitive.
dnnl::binary::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:9034
dnnl::handle::reset
void reset(T t, bool weak=false)
Resets the handle wrapper objects to wrap a new C API handle.
Definition: dnnl.hpp:173
dnnl::softmax_forward::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:5475
dnnl::lbr_gru_backward::primitive_desc::diff_weights_iter_desc
memory::desc diff_weights_iter_desc() const
Returns diff weights iteration memory descriptor.
Definition: dnnl.hpp:8743
dnnl_convolution
A convolution primitive.
Definition: dnnl_types.h:674
dnnl::vanilla_rnn_backward::primitive_desc::diff_dst_layer_desc
memory::desc diff_dst_layer_desc() const
Returns diff destination layer memory descriptor.
Definition: dnnl.hpp:7491
dnnl::stream::flags
flags
Stream flags. Can be combined using the bitwise OR operator.
Definition: dnnl.hpp:1437
dnnl::lstm_backward::desc::desc
desc(prop_kind prop_kind, rnn_direction direction, const memory::desc &src_layer_desc, const memory::desc &src_iter_desc, const memory::desc &src_iter_c_desc, const memory::desc &weights_layer_desc, const memory::desc &weights_iter_desc, const memory::desc &bias_desc, const memory::desc &dst_layer_desc, const memory::desc &dst_iter_desc, const memory::desc &dst_iter_c_desc, const memory::desc &diff_src_layer_desc, const memory::desc &diff_src_iter_desc, const memory::desc &diff_src_iter_c_desc, const memory::desc &diff_weights_layer_desc, const memory::desc &diff_weights_iter_desc, const memory::desc &diff_bias_desc, const memory::desc &diff_dst_layer_desc, const memory::desc &diff_dst_iter_desc, const memory::desc &diff_dst_iter_c_desc, rnn_flags flags=rnn_flags::undef)
Constructs an LSTM descriptor for backward propagation using prop_kind, direction,...
Definition: dnnl.hpp:7779
dnnl::engine::get_count
static size_t get_count(kind kind)
Returns the number of engines of a certain kind.
Definition: dnnl.hpp:1297
dnnl::rnn_primitive_desc_base::diff_src_iter_c_desc
memory::desc diff_src_iter_c_desc() const
Returns diff source recurrent cell state memory descriptor.
Definition: dnnl.hpp:7010
dnnl::eltwise_forward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::batch_normalization_backward::primitive_desc::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:6121
dnnl_stream_get_ocl_command_queue
dnnl_status_t DNNL_API dnnl_stream_get_ocl_command_queue(dnnl_stream_t stream, cl_command_queue *queue)
Returns the OpenCL command queue associated with an execution stream.
dnnl::post_ops::append_sum
void append_sum(float scale=1.)
Appends an accumulation (sum) post-op.
Definition: dnnl.hpp:879
dnnl::shuffle_backward::desc::desc
desc(const memory::desc &diff_data_desc, int axis, int group_size)
Constructs a descriptor for a shuffle backward propagation primitive.
Definition: dnnl.hpp:8882
dnnl_inner_product_backward_weights_desc_init
dnnl_status_t DNNL_API dnnl_inner_product_backward_weights_desc_init(dnnl_inner_product_desc_t *ip_desc, const dnnl_memory_desc_t *src_desc, const dnnl_memory_desc_t *diff_weights_desc, const dnnl_memory_desc_t *diff_bias_desc, const dnnl_memory_desc_t *diff_dst_desc)
Initializes descriptor for inner product weights gradient primitive.
dnnl::lrn_backward::primitive_desc::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:4888
dnnl::resampling_backward::resampling_backward
resampling_backward()=default
Default constructor. Produces an empty object.
dnnl::eltwise_backward::primitive_desc::diff_src_desc
memory::desc diff_src_desc() const
Returns a diff source memory descriptor.
Definition: dnnl.hpp:5366
dnnl::layer_normalization_backward::primitive_desc::diff_weights_desc
memory::desc diff_weights_desc() const
Returns a diff weights memory descriptor.
Definition: dnnl.hpp:6497
dnnl::rnn_direction::bidirectional_sum
Bidirectional execution of RNN primitive with summation of the results.
dnnl_primitive_attr
An opaque structure for primitive descriptor attributes.
dnnl::inner_product_backward_weights::primitive_desc::diff_bias_desc
memory::desc diff_bias_desc() const
Returns the diff bias memory descriptor.
Definition: dnnl.hpp:6914
dnnl::algorithm::deconvolution_winograd
Winograd deconvolution.
dnnl::rnn_direction::unidirectional_right2left
Unidirectional execution of RNN primitive from right to left.
dnnl::memory::format_tag::dhwio
5D CNN weights tensor; an alias for dnnl::memory::format_tag::cdeba
dnnl_lrn
An LRN primitive.
Definition: dnnl_types.h:684
dnnl::vanilla_rnn_backward::primitive_desc::diff_bias_desc
memory::desc diff_bias_desc() const
Returns diff bias memory descriptor.
Definition: dnnl.hpp:7486
dnnl_primitive_attr_get_scales
dnnl_status_t DNNL_API dnnl_primitive_attr_get_scales(dnnl_primitive_attr_t attr, int arg, dnnl_dim_t *count, int *mask, const float **scales)
Returns primitive attributes scaling factors correspondence mask and values for a given memory argume...
dnnl::algorithm::eltwise_exp
Elementwise: exponent.
dnnl_query_src_md
source memory desc
Definition: dnnl_types.h:1928
dnnl_primitive_attr_set_rnn_data_qparams
dnnl_status_t DNNL_API dnnl_primitive_attr_set_rnn_data_qparams(dnnl_primitive_attr_t attr, const float scale, const float shift)
Set quantization scale and shift parameters for RNN data tensors.
dnnl::rnn_primitive_desc_base::rnn_primitive_desc_base
rnn_primitive_desc_base()=default
Default constructor. Produces an empty object.
dnnl::primitive::kind::convolution
A convolution primitive.
dnnl_primitive_attr_get_post_ops
dnnl_status_t DNNL_API dnnl_primitive_attr_get_post_ops(const_dnnl_primitive_attr_t attr, const_dnnl_post_ops_t *post_ops)
Returns primitive attributes post-ops.
dnnl::lbr_gru_backward::primitive_desc::diff_weights_layer_desc
memory::desc diff_weights_layer_desc() const
Returns diff weights layer memory descriptor.
Definition: dnnl.hpp:8738
dnnl::gru_backward::primitive_desc::diff_src_iter_desc
memory::desc diff_src_iter_desc() const
Returns diff source iteration memory descriptor.
Definition: dnnl.hpp:8330
dnnl::logsoftmax_backward::primitive_desc::diff_dst_desc
memory::desc diff_dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:5802
dnnl::shuffle_forward::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:8847
dnnl::deconvolution_backward_data::desc::desc
desc(algorithm algorithm, const memory::desc &diff_src_desc, const memory::desc &weights_desc, const memory::desc &diff_dst_desc, const memory::dims &strides, const memory::dims &padding_l, const memory::dims &padding_r)
Constructs a descriptor for a deconvolution backward propagation primitive.
Definition: dnnl.hpp:4265
dnnl::concat::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:3027
dnnl_scratchpad_mode_t
dnnl_scratchpad_mode_t
Scratchpad mode.
Definition: dnnl_types.h:1607
dnnl::lbr_gru_backward::primitive_desc::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:8723
dnnl::softmax_forward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::memory::format_tag::giohw
5D CNN weights tensor with groups; an alias for dnnl::memory::format_tag::acbde
dnnl::inner_product_forward::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:6657
dnnl::lbr_gru_backward::primitive_desc::src_iter_desc
memory::desc src_iter_desc() const
Returns source iteration memory descriptor.
Definition: dnnl.hpp:8699
dnnl_data_type_undef
Undefined data type, used for empty memory descriptors.
Definition: dnnl_types.h:63
dnnl_query_engine
execution engine
Definition: dnnl_types.h:1884
dnnl_dilated_deconvolution_backward_data_desc_init
dnnl_status_t DNNL_API dnnl_dilated_deconvolution_backward_data_desc_init(dnnl_deconvolution_desc_t *deconv_desc, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *diff_src_desc, const dnnl_memory_desc_t *weights_desc, const dnnl_memory_desc_t *diff_dst_desc, const dnnl_dims_t strides, const dnnl_dims_t dilates, const dnnl_dims_t padding_l, const dnnl_dims_t padding_r)
Initializes a descriptor for a dilated deconvolution backward propagation primitive.
dnnl_query_softmax_d
softmax descriptor
Definition: dnnl_types.h:1913
dnnl_resampling_desc_t
A descriptor of resampling operation.
Definition: dnnl_types.h:1523
dnnl_invalid_arguments
The operation failed because of incorrect function arguments.
Definition: dnnl_types.h:44
dnnl::lbr_gru_forward::primitive_desc::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:8518
dnnl::memory::format_tag::bacd
permuted 4D tensor
dnnl::convolution_forward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::softmax_forward::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:5472
dnnl::memory::format_tag::wio
3D CNN weights tensor; an alias for dnnl::memory::format_tag::cba
dnnl::query::softmax_d
softmax descriptor
dnnl_cpu
CPU engine.
Definition: dnnl_types.h:1557
dnnl_engine_get_ocl_context
dnnl_status_t DNNL_API dnnl_engine_get_ocl_context(dnnl_engine_t engine, cl_context *context)
Returns the OpenCL context associated with an engine.
dnnl_post_ops
An opaque structure for a chain of post operations.
dnnl::memory::format_tag::cdba
permuted 4D tensor
dnnl::rnn_primitive_desc_base::diff_dst_iter_desc
memory::desc diff_dst_iter_desc() const
Returns diff destination iteration memory descriptor.
Definition: dnnl.hpp:7038
dnnl::primitive_attr::get_scales
void get_scales(int arg, int &mask, std::vector< float > &scales) const
Returns scaling factors correspondence mask and values for a given memory argument.
Definition: dnnl.hpp:1061
dnnl_query_undef
no query
Definition: dnnl_types.h:1882
dnnl::memory::format_tag::bcdea
permuted 5D tensor
dnnl::rnn_flags::undef
Undefined RNN flags.
dnnl::eltwise_forward::eltwise_forward
eltwise_forward()=default
Default constructor. Produces an empty object.
dnnl_eltwise_swish
Eltwise: swish.
Definition: dnnl_types.h:746
dnnl::error::wrap_c_api
static void wrap_c_api(dnnl_status_t status, const char *message)
A convenience function for wrapping calls to C API functions.
Definition: dnnl.hpp:110
dnnl::memory::format_tag::abcd
plain 4D tensor
dnnl::lstm_backward::primitive_desc::dst_layer_desc
memory::desc dst_layer_desc() const
Returns destination layer memory descriptor.
Definition: dnnl.hpp:7899
dnnl::prop_kind::undef
Undefined propagation kind.
dnnl::inner_product_forward::inner_product_forward
inner_product_forward()=default
Default constructor. Produces an empty object.
dnnl::batch_normalization_backward::primitive_desc::variance_desc
memory::desc variance_desc() const
Returns memory descriptor for variance.
Definition: dnnl.hpp:6116
dnnl_dilated_convolution_backward_weights_desc_init
dnnl_status_t DNNL_API dnnl_dilated_convolution_backward_weights_desc_init(dnnl_convolution_desc_t *conv_desc, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *src_desc, const dnnl_memory_desc_t *diff_weights_desc, const dnnl_memory_desc_t *diff_bias_desc, const dnnl_memory_desc_t *diff_dst_desc, const dnnl_dims_t strides, const dnnl_dims_t dilates, const dnnl_dims_t padding_l, const dnnl_dims_t padding_r)
Initializes a descriptor for a dilated convolution weights gradient primitive.
dnnl::algorithm::eltwise_linear
Elementwise: linear.
dnnl::memory::format_tag::acdeb
permuted 5D tensor
dnnl::set_verbose
status set_verbose(int level)
Configures verbose output to stdout.
Definition: dnnl.hpp:9492
dnnl::batch_normalization_forward::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:5942
dnnl::handle
DNNL C API handle wrapper class.
Definition: dnnl.hpp:133
dnnl::pooling_backward::pooling_backward
pooling_backward()=default
Default constructor. Produces an empty object.
dnnl::algorithm::convolution_auto
Convolution algorithm (either direct or Winograd) is chosen just in time.
dnnl_primitive_destroy
dnnl_status_t DNNL_API dnnl_primitive_destroy(dnnl_primitive_t primitive)
Destroys a primitive.
dnnl::memory::format_tag::goiw
4D CNN weights tensor with groups; an alias for dnnl::memory::format_tag::abcd
dnnl::lstm_forward::primitive_desc::weights_layer_desc
memory::desc weights_layer_desc() const
Returns weights layer memory descriptor.
Definition: dnnl.hpp:7651
dnnl::engine::get_sycl_context
cl::sycl::context DNNL_API get_sycl_context() const
Returns the underlying SYCL context object.
dnnl_memory_create
dnnl_status_t DNNL_API dnnl_memory_create(dnnl_memory_t *memory, const dnnl_memory_desc_t *memory_desc, dnnl_engine_t engine, void *handle)
Creates a memory object.
dnnl_pooling_forward_desc_init
dnnl_status_t DNNL_API dnnl_pooling_forward_desc_init(dnnl_pooling_desc_t *pool_desc, dnnl_prop_kind_t prop_kind, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *src_desc, const dnnl_memory_desc_t *dst_desc, const dnnl_dims_t strides, const dnnl_dims_t kernel, const dnnl_dims_t padding_l, const dnnl_dims_t padding_r)
Initializes a descriptor for pooling forward propagation primitive.
dnnl_logsoftmax_backward_desc_init
dnnl_status_t DNNL_API dnnl_logsoftmax_backward_desc_init(dnnl_logsoftmax_desc_t *logsoftmax_desc, const dnnl_memory_desc_t *diff_data_desc, const dnnl_memory_desc_t *data_desc, int logsoftmax_axis)
Initializes a descriptor for logsoftmax backward propagation primitive.
dnnl::vanilla_rnn_backward::primitive_desc::weights_layer_desc
memory::desc weights_layer_desc() const
Returns weights layer memory descriptor.
Definition: dnnl.hpp:7440
dnnl::inner_product_backward_data::inner_product_backward_data
inner_product_backward_data()=default
Default constructor. Produces an empty object.
dnnl::lbr_gru_backward::primitive_desc::weights_layer_desc
memory::desc weights_layer_desc() const
Returns weights layer memory descriptor.
Definition: dnnl.hpp:8702
dnnl::rnn_primitive_desc_base::src_layer_desc
memory::desc src_layer_desc() const
Returns source layer memory descriptor.
Definition: dnnl.hpp:6958
dnnl::batch_normalization_backward::primitive_desc::diff_src_desc
memory::desc diff_src_desc() const
Returns a diff source memory descriptor.
Definition: dnnl.hpp:6102
dnnl_shuffle_forward_desc_init
dnnl_status_t DNNL_API dnnl_shuffle_forward_desc_init(dnnl_shuffle_desc_t *shuffle_desc, dnnl_prop_kind_t prop_kind, const dnnl_memory_desc_t *data_desc, int axis, dnnl_dim_t group_size)
Initializes a descriptor for shuffle forward propagation primitive.
dnnl::resampling_backward::primitive_desc::diff_dst_desc
memory::desc diff_dst_desc() const
Returns a diff destination memory descriptor.
Definition: dnnl.hpp:9448
dnnl::memory::format_tag::bac
permuted 3D tensor
dnnl::convolution_backward_weights::desc::desc
desc(algorithm algorithm, const memory::desc &src_desc, const memory::desc &diff_weights_desc, const memory::desc &diff_bias_desc, const memory::desc &diff_dst_desc, const memory::dims &strides, const memory::dims &padding_l, const memory::dims &padding_r)
Constructs a descriptor for a convolution weights gradient primitive with bias.
Definition: dnnl.hpp:3716
dnnl_memory_desc_t
Memory descriptor.
Definition: dnnl_types.h:976
dnnl_backward_bias
Backward bias propagation.
Definition: dnnl_types.h:657
dnnl::vanilla_rnn_forward::primitive_desc::weights_iter_desc
memory::desc weights_iter_desc() const
Returns weights iteration memory descriptor.
Definition: dnnl.hpp:7230
dnnl::lstm_forward::primitive_desc::src_iter_c_desc
memory::desc src_iter_c_desc() const
Returns source iteration memory descriptor.
Definition: dnnl.hpp:7646
dnnl_matmul
A matrix multiplication primitive.
Definition: dnnl_types.h:700
dnnl::primitive_attr::set_output_scales
void set_output_scales(int mask, const std::vector< float > &scales)
Sets output scaling factors correspondence mask and values.
Definition: dnnl.hpp:1044
dnnl::convolution_forward::primitive_desc::bias_desc
memory::desc bias_desc() const
Returns the bias memory descriptor.
Definition: dnnl.hpp:3498
dnnl::inner_product_forward::primitive_desc::bias_desc
memory::desc bias_desc() const
Returns the bias memory descriptor.
Definition: dnnl.hpp:6660
dnnl::memory::desc::operator!=
bool operator!=(const desc &other) const
An inequality operator.
Definition: dnnl.hpp:2229
dnnl::batch_normalization_forward::batch_normalization_forward
batch_normalization_forward()=default
Default constructor. Produces an empty object.
dnnl::deconvolution_forward::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:4219
dnnl_lrn_forward_desc_init
dnnl_status_t DNNL_API dnnl_lrn_forward_desc_init(dnnl_lrn_desc_t *lrn_desc, dnnl_prop_kind_t prop_kind, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *data_desc, dnnl_dim_t local_size, float alpha, float beta, float k)
Initializes a descriptor for LRN forward propagation primitive.
dnnl::binary::desc::data
dnnl_binary_desc_t data
Underlying C operation descriptor.
Definition: dnnl.hpp:8957
dnnl_nChw4c
4D CNN activations tensor blocked by channels with block size 4, an alias to dnnl_aBcd4b
Definition: dnnl_types.h:472
dnnl::query::scratchpad_engine
scratchpad engine
dnnl::lstm_backward::primitive_desc::diff_src_layer_desc
memory::desc diff_src_layer_desc() const
Returns diff source layer memory descriptor.
Definition: dnnl.hpp:7917
dnnl::lbr_gru_backward::primitive_desc::bias_desc
memory::desc bias_desc() const
Returns bias memory descriptor.
Definition: dnnl.hpp:8712
dnnl::inner_product_backward_weights::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:6903
dnnl::post_ops::get_params_eltwise
void get_params_eltwise(int index, float &scale, algorithm &algorithm, float &alpha, float &beta) const
Returns parameters of an elementwise post-up.
Definition: dnnl.hpp:922
dnnl_engine_destroy
dnnl_status_t DNNL_API dnnl_engine_destroy(dnnl_engine_t engine)
Destroys an engine.
dnnl.h
dnnl::primitive_desc_base::reset_with_clone
void reset_with_clone(const_dnnl_primitive_desc_t pd)
Resets the value of the handle to a clone of a C API primitive descriptor.
Definition: dnnl.hpp:2683
dnnl_bacd
permuted 4D tensor
Definition: dnnl_types.h:193
dnnl_format_kind_any
Unspecified format kind.
Definition: dnnl_types.h:84
dnnl_post_ops_len
int DNNL_API dnnl_post_ops_len(const_dnnl_post_ops_t post_ops)
Returns the length of post-ops.
dnnl::primitive_desc_base::scratchpad_desc
memory::desc scratchpad_desc() const
Returns the scratchpad memory descriptor.
Definition: dnnl.hpp:2641
dnnl_batch_normalization_forward_desc_init
dnnl_status_t DNNL_API dnnl_batch_normalization_forward_desc_init(dnnl_batch_normalization_desc_t *bnrm_desc, dnnl_prop_kind_t prop_kind, const dnnl_memory_desc_t *data_desc, float epsilon, unsigned flags)
Initializes a descriptor for a batch normalization forward propagation primitive.
dnnl_nChw16c
4D CNN activations tensor blocked by channels with block size 16, an alias to dnnl_aBcd16b
Definition: dnnl_types.h:469
dnnl_shuffle_backward_desc_init
dnnl_status_t DNNL_API dnnl_shuffle_backward_desc_init(dnnl_shuffle_desc_t *shuffle_desc, const dnnl_memory_desc_t *diff_data_desc, int axis, dnnl_dim_t group_size)
Initializes a descriptor for shuffle backward propagation primitive.
dnnl::post_ops::get_params_sum
void get_params_sum(int index, float &scale) const
Returns the parameters of an accumulation (sum) post-op.
Definition: dnnl.hpp:888
dnnl::memory::format_tag::abcdef
plain 6D tensor
dnnl_query_eltwise_d
eltwise descriptor
Definition: dnnl_types.h:1912
dnnl::memory::format_tag::dhwigo
6D CNN weights tensor with groups; an alias for dnnl::memory::format_tag::defcab
dnnl::algorithm::vanilla_lstm
LSTM cell.
dnnl::handle::operator=
handle< T, traits > & operator=(const handle< T, traits > &)=default
Assignment operator.
dnnl::convolution_backward_weights::primitive_desc::diff_bias_desc
memory::desc diff_bias_desc() const
Returns the diff bias memory descriptor.
Definition: dnnl.hpp:3943
dnnl::memory::format_tag::ba
permuted 2D tensor
dnnl::algorithm::pooling_max
Max pooling.
dnnl::primitive::kind::binary
A binary primitive.
dnnl_cba
permuted 3D tensor
Definition: dnnl_types.h:197
dnnl::rnn_primitive_desc_base::bias_desc
memory::desc bias_desc() const
Returns bias memory descriptor.
Definition: dnnl.hpp:6982
dnnl_lrn_backward_desc_init
dnnl_status_t DNNL_API dnnl_lrn_backward_desc_init(dnnl_lrn_desc_t *lrn_desc, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *diff_data_desc, const dnnl_memory_desc_t *data_desc, dnnl_dim_t local_size, float alpha, float beta, float k)
Initializes a descriptor for LRN backward propagation primitive.
dnnl::handle_traits
A class that provides the destructor for a DNNL C API handle.
Definition: dnnl.hpp:117
dnnl::lbr_gru_backward::primitive_desc::diff_src_layer_desc
memory::desc diff_src_layer_desc() const
Returns diff source layer memory descriptor.
Definition: dnnl.hpp:8728
dnnl_query_num_of_inputs_s32
number of inputs expected
Definition: dnnl_types.h:1887
dnnl::status::invalid_arguments
The operation failed because of incorrect function arguments.
dnnl::memory::dims
std::vector< dim > dims
Vector of dimensions.
Definition: dnnl.hpp:1611
dnnl::memory::format_tag::ndhwc
5D CNN activations tensor; an alias for dnnl::memory::format_tag::acdeb
dnnl::memory::format_tag::any
Placeholder memory format tag.
dnnl::batch_normalization_forward::primitive_desc::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:5948
dnnl_acbde
permuted 5D tensor
Definition: dnnl_types.h:187
dnnl::lstm_backward::primitive_desc::diff_dst_layer_desc
memory::desc diff_dst_layer_desc() const
Returns diff destination layer memory descriptor.
Definition: dnnl.hpp:7947
dnnl_post_ops_get_params_sum
dnnl_status_t DNNL_API dnnl_post_ops_get_params_sum(const_dnnl_post_ops_t post_ops, int index, float *scale)
Returns the parameters of an accumulation (sum) post-op.
dnnl_primitive_attr_set_scratchpad_mode
dnnl_status_t DNNL_API dnnl_primitive_attr_set_scratchpad_mode(dnnl_primitive_attr_t attr, dnnl_scratchpad_mode_t mode)
Sets primitive attributes scratchpad mode.
dnnl::primitive_attr::get_post_ops
const post_ops get_post_ops() const
Returns post-ops previously set via set_post_ops().
Definition: dnnl.hpp:1154
dnnl::vanilla_rnn_forward::primitive_desc::src_layer_desc
memory::desc src_layer_desc() const
Returns source layer memory descriptor.
Definition: dnnl.hpp:7217
dnnl::gru_forward::primitive_desc::dst_layer_desc
memory::desc dst_layer_desc() const
Returns destination layer memory descriptor.
Definition: dnnl.hpp:8110
dnnl::convolution_forward::primitive_desc::weights_desc
memory::desc weights_desc() const
Returns a weights memory descriptor.
Definition: dnnl.hpp:3489
dnnl::memory::format_tag::oiw
3D CNN weights tensor; an alias for dnnl::memory::format_tag::abc
dnnl_alg_kind_t
dnnl_alg_kind_t
Kinds of algorithms.
Definition: dnnl_types.h:706
dnnl_deconvolution_winograd
Winograd deconvolution.
Definition: dnnl_types.h:717
dnnl_cpu_isa_avx512_mic
Intel(R) Advanced Vector Extensions 512 subset for Intel(R) Xeon Phi(TM) Processors x200 Series.
Definition: dnnl_types.h:2040
dnnl::memory::format_tag::iwo
3D CNN weights tensor; an alias for dnnl::memory::format_tag::bca
dnnl::query::lrn_d
lrn descriptor
dnnl::layer_normalization_backward::primitive_desc::dst_desc
memory::desc dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:6488
dnnl::batch_normalization_backward::batch_normalization_backward
batch_normalization_backward()=default
Default constructor. Produces an empty object.
dnnl_memory_desc_init_by_strides
dnnl_status_t DNNL_API dnnl_memory_desc_init_by_strides(dnnl_memory_desc_t *memory_desc, int ndims, const dnnl_dims_t dims, dnnl_data_type_t data_type, const dnnl_dims_t strides)
Initializes a memory descriptor using dimensions and strides.
dnnl_success
The operation was successful.
Definition: dnnl_types.h:40
dnnl::memory::get_engine
engine get_engine() const
Returns the associated engine.
Definition: dnnl.hpp:2300
dnnl::memory::format_kind
format_kind
Memory format kind.
Definition: dnnl.hpp:1643
dnnl_eltwise_exp
Eltwise: exponent.
Definition: dnnl_types.h:739
dnnl_abcdef
plain 6D tensor
Definition: dnnl_types.h:181
dnnl::memory::desc::operator==
bool operator==(const desc &other) const
An equality operator.
Definition: dnnl.hpp:2221
dnnl::query::logsoftmax_d
logsoftmax descriptor
dnnl_primitive_attr_set_zero_points
dnnl_status_t DNNL_API dnnl_primitive_attr_set_zero_points(dnnl_primitive_attr_t attr, int arg, dnnl_dim_t count, int mask, const int32_t *zero_points)
Sets primitive attributes zero points for primitive operations for a given memory argument.
dnnl::matmul::matmul
matmul()=default
Default constructor. Produces an empty object.
dnnl::lbr_gru_forward::lbr_gru_forward
lbr_gru_forward()=default
Default constructor. Produces an empty object.
dnnl::algorithm::vanilla_gru
GRU cell.
dnnl_primitive_create
dnnl_status_t DNNL_API dnnl_primitive_create(dnnl_primitive_t *primitive, const_dnnl_primitive_desc_t primitive_desc)
Creates a primitive.
dnnl::deconvolution_backward_data::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::matmul::desc::desc
desc(const memory::desc &src_desc, const memory::desc &weights_desc, const memory::desc &dst_desc)
Constructs a descriptor for a matmul primitive.
Definition: dnnl.hpp:9076
dnnl::memory::desc::is_zero
bool is_zero() const
Checks whether the memory descriptor is zero (empty).
Definition: dnnl.hpp:2215
dnnl::memory::format_tag::odhwi
5D CNN weights tensor; an alias for dnnl::memory::format_tag::acdeb
dnnl_bidirectional_sum
Bidirectional execution of RNN primitive with summation of the results.
Definition: dnnl_types.h:1398
dnnl::memory::format_tag::bcda
permuted 4D tensor
dnnl::lstm_backward::primitive_desc::diff_weights_iter_desc
memory::desc diff_weights_iter_desc() const
Returns diff weights iteration memory descriptor.
Definition: dnnl.hpp:7937
dnnl::lstm_forward::primitive_desc::bias_desc
memory::desc bias_desc() const
Returns bias memory descriptor.
Definition: dnnl.hpp:7661
dnnl_eltwise_linear
Eltwise: linear.
Definition: dnnl_types.h:731
dnnl_nCw16c
3D CNN activations tensor blocked by channels with block size 16, an alias to dnnl_aBc16b
Definition: dnnl_types.h:478
dnnl
DNNL namespace.
Definition: dnnl.hpp:81
dnnl_vanilla_gru
GRU cell.
Definition: dnnl_types.h:768
dnnl::primitive::kind::logsoftmax
A logsoftmax primitive.
dnnl::lbr_gru_forward::primitive_desc::bias_desc
memory::desc bias_desc() const
Returns bias memory descriptor.
Definition: dnnl.hpp:8507
dnnl::query::shuffle_d
shuffle descriptor
dnnl_abc
plain 3D tensor
Definition: dnnl_types.h:178
dnnl::memory::format_tag::nchw
4D CNN activations tensor; an alias for dnnl::memory::format_tag::abcd
dnnl_stream
dnnl::matmul::primitive_desc::weights_desc
memory::desc weights_desc() const
Returns a weights memory descriptor.
Definition: dnnl.hpp:9150
dnnl::memory::format_kind::blocked
A tensor in a generic format described by the stride and blocking values in each dimension.
dnnl::query::impl_info_str
implementation name
dnnl::lbr_gru_forward::primitive_desc::dst_layer_desc
memory::desc dst_layer_desc() const
Returns destination layer memory descriptor.
Definition: dnnl.hpp:8510
dnnl_binary_desc_t
A descriptor of a binary operation.
Definition: dnnl_types.h:1476
dnnl::memory::desc::submemory_desc
desc submemory_desc(const memory::dims &dims, const memory::dims &offsets) const
Constructs a memory descriptor for a region inside an area described by this memory descriptor.
Definition: dnnl.hpp:2170
dnnl::pooling_forward::pooling_forward
pooling_forward()=default
Default constructor. Produces an empty object.
dnnl::lbr_gru_backward::primitive_desc::weights_iter_desc
memory::desc weights_iter_desc() const
Returns weights iteration memory descriptor.
Definition: dnnl.hpp:8707
dnnl::reorder::primitive_desc::get_dst_engine
engine get_dst_engine() const
Returns the engine on which the destination memory is allocated.
Definition: dnnl.hpp:2870
dnnl::primitive::kind::batch_normalization
A batch normalization primitive.
dnnl_primitive_attr_clone
dnnl_status_t DNNL_API dnnl_primitive_attr_clone(dnnl_primitive_attr_t *attr, const_dnnl_primitive_attr_t existing_attr)
Clones primitive attributes.
dnnl::batch_normalization_forward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::memory::get_data_handle
void * get_data_handle() const
Returns the underlying memory buffer.
Definition: dnnl.hpp:2310
dnnl_convolution_direct
Direct convolution.
Definition: dnnl_types.h:709
dnnl::memory::format_tag::ldgo
4D RNN bias tensor in the format (num_layers, num_directions, num_gates, output_channels).
dnnl_post_ops_get_kind
dnnl_primitive_kind_t DNNL_API dnnl_post_ops_get_kind(const_dnnl_post_ops_t post_ops, int index)
Returns the kind of a post-op entry.
dnnl::memory::format_tag::goidhw
6D CNN weights tensor with groups; an alias for dnnl::memory::format_tag::abcdef
dnnl_query_diff_src_md
source gradient memory desc
Definition: dnnl_types.h:1929
dnnl::algorithm::eltwise_gelu
Elementwise: gelu.
dnnl::lbr_gru_backward::primitive_desc::src_layer_desc
memory::desc src_layer_desc() const
Returns source layer memory descriptor.
Definition: dnnl.hpp:8694
dnnl::algorithm::eltwise_square
Elementwise: square.
dnnl::memory::format_tag::owi
3D CNN weights tensor; an alias for dnnl::memory::format_tag::acb
dnnl::memory::format_tag::a
plain 1D tensor
dnnl::stream::get_ocl_command_queue
cl_command_queue get_ocl_command_queue() const
Returns the underlying OpenCL queue object.
Definition: dnnl.hpp:1480
dnnl::shuffle_backward::primitive_desc::diff_dst_desc
memory::desc diff_dst_desc() const
Returns a diff destination memory descriptor.
Definition: dnnl.hpp:8930
dnnl::algorithm::vanilla_rnn
RNN cell.
dnnl::version
const version_t * version()
Returns library version information.
Definition: dnnl.hpp:9497
dnnl_forward_scoring
Forward data propagation (alias for dnnl_forward_inference).
Definition: dnnl_types.h:647
dnnl::binary::binary
binary()=default
Default constructor. Produces an empty object.
dnnl::memory::format_tag::decab
permuted 5D tensor
dnnl_aBcde8b
5D tensor blocked by 2nd dimension with block size 8
Definition: dnnl_types.h:283
dnnl::memory::get_ocl_mem_object
cl_mem get_ocl_mem_object() const
Returns the OpenCL memory object associated with the memory.
Definition: dnnl.hpp:2371
dnnl::inner_product_backward_data::desc::desc
desc(const memory::desc &diff_src_desc, const memory::desc &weights_desc, const memory::desc &diff_dst_desc)
Constructs a descriptor for an inner product backward propagation primitive.
Definition: dnnl.hpp:6695
dnnl_deconvolution_forward_desc_init
dnnl_status_t DNNL_API dnnl_deconvolution_forward_desc_init(dnnl_deconvolution_desc_t *deconv_desc, dnnl_prop_kind_t prop_kind, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *src_desc, const dnnl_memory_desc_t *weights_desc, const dnnl_memory_desc_t *bias_desc, const dnnl_memory_desc_t *dst_desc, const dnnl_dims_t strides, const dnnl_dims_t padding_l, const dnnl_dims_t padding_r)
Initializes a descriptor for a deconvolution forward propagation primitive.
dnnl::post_ops::kind
primitive::kind kind(int index) const
Returns the primitive kind of post-op at entry with a certain index.
Definition: dnnl.hpp:850
dnnl::lbr_gru_forward::primitive_desc::src_iter_desc
memory::desc src_iter_desc() const
Returns source iteration memory descriptor.
Definition: dnnl.hpp:8494
dnnl::algorithm
algorithm
Kinds of algorithms.
Definition: dnnl.hpp:478
dnnl::lstm_backward::primitive_desc::dst_iter_c_desc
memory::desc dst_iter_c_desc() const
Returns source iteration memory descriptor.
Definition: dnnl.hpp:7907
dnnl_prop_kind_undef
Undefined propagation type.
Definition: dnnl_types.h:638
dnnl_resampling_forward_desc_init
dnnl_status_t DNNL_API dnnl_resampling_forward_desc_init(dnnl_resampling_desc_t *resampling_desc, dnnl_prop_kind_t prop_kind, dnnl_alg_kind_t alg_kind, const float *factors, const dnnl_memory_desc_t *src_desc, const dnnl_memory_desc_t *dst_desc)
Initializes a descriptor for a resampling forward propagation primitive.
dnnl::batch_normalization_backward::primitive_desc::weights_desc
memory::desc weights_desc() const
Returns a weights memory descriptor.
Definition: dnnl.hpp:6096
dnnl::resampling_backward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::primitive::get_kind
kind get_kind() const
Returns the kind of the primitive.
Definition: dnnl.hpp:384
dnnl_matmul_desc_init
dnnl_status_t DNNL_API dnnl_matmul_desc_init(dnnl_matmul_desc_t *matmul_desc, const dnnl_memory_desc_t *src_desc, const dnnl_memory_desc_t *weights_desc, const dnnl_memory_desc_t *bias_desc, const dnnl_memory_desc_t *dst_desc)
Initializes a matrix multiplication descriptor.
dnnl::deconvolution_backward_weights::primitive_desc::diff_bias_desc
memory::desc diff_bias_desc() const
Returns the diff bias memory descriptor.
Definition: dnnl.hpp:4657
dnnl_blocked
A tensor in a generic format described by the stride and blocking values in each dimension.
Definition: dnnl_types.h:88
dnnl::lbr_gru_backward::primitive_desc::diff_src_iter_desc
memory::desc diff_src_iter_desc() const
Returns diff source iteration memory descriptor.
Definition: dnnl.hpp:8733
dnnl::memory::data_type::s8
8-bit signed integer.
dnnl_memory_desc_init_by_tag
dnnl_status_t DNNL_API dnnl_memory_desc_init_by_tag(dnnl_memory_desc_t *memory_desc, int ndims, const dnnl_dims_t dims, dnnl_data_type_t data_type, dnnl_format_tag_t tag)
Initializes a memory descriptor using dimensions and memory format tag.
dnnl_query_primitive_kind
primitive kind
Definition: dnnl_types.h:1885
dnnl_unidirectional_left2right
Unidirectional execution of RNN primitive from left to right.
Definition: dnnl_types.h:1390
dnnl::query::time_estimate_f64
runtime estimation (seconds), unimplemented
dnnl::primitive::kind::concat
A (out-of-place) tensor concatenation primitive.
dnnl_primitive_desc_iterator_fetch
dnnl_primitive_desc_t DNNL_API dnnl_primitive_desc_iterator_fetch(const_dnnl_primitive_desc_iterator_t iterator)
Fetches the current primitive descriptor from a primitive descriptor iterator.
dnnl::resampling_forward::desc::desc
desc(prop_kind prop_kind, algorithm algorithm, const memory::desc &src_desc, const memory::desc &dst_desc)
Constructs a descriptor for a resampling forward propagation primitive using source and destination m...
Definition: dnnl.hpp:9210
dnnl_eltwise_elu
Eltwise: parametric exponential linear unit (elu)
Definition: dnnl_types.h:723
dnnl::binary::primitive_desc::src0_desc
memory::desc src0_desc() const
Returns the memory descriptor for source #0.
Definition: dnnl.hpp:9028
dnnl::stream::flags::in_order
In-order execution.
dnnl::memory::map_data
T * map_data() const
Maps the data of the memory.
Definition: dnnl.hpp:2346
dnnl::cpu_isa::avx512_mic_4ops
Intel(R) Advanced Vector Extensions 512 subset for Intel(R) Xeon Phi(TM) Processors 7235,...
dnnl::convolution_backward_data::primitive_desc::diff_dst_desc
memory::desc diff_dst_desc() const
Returns a diff destination memory descriptor.
Definition: dnnl.hpp:3669
dnnl::status::out_of_memory
The operation failed due to an out-of-memory condition.
dnnl::binary::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::lstm_backward::primitive_desc::diff_src_iter_desc
memory::desc diff_src_iter_desc() const
Returns diff source iteration memory descriptor.
Definition: dnnl.hpp:7922
dnnl::concat::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl_dilated_convolution_backward_data_desc_init
dnnl_status_t DNNL_API dnnl_dilated_convolution_backward_data_desc_init(dnnl_convolution_desc_t *conv_desc, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *diff_src_desc, const dnnl_memory_desc_t *weights_desc, const dnnl_memory_desc_t *diff_dst_desc, const dnnl_dims_t strides, const dnnl_dims_t dilates, const dnnl_dims_t padding_l, const dnnl_dims_t padding_r)
Initializes a descriptor for a dilated convolution backward propagation primitive.
dnnl_layer_normalization_forward_desc_init
dnnl_status_t DNNL_API dnnl_layer_normalization_forward_desc_init(dnnl_layer_normalization_desc_t *lnrm_desc, dnnl_prop_kind_t prop_kind, const dnnl_memory_desc_t *data_desc, const dnnl_memory_desc_t *stat_desc, float epsilon, unsigned flags)
Initializes a descriptor for layer normalization forward propagation primitive.
dnnl_nCw4c
3D CNN activations tensor blocked by channels with block size 4, an alias to dnnl_aBc4b
Definition: dnnl_types.h:481
dnnl::primitive_attr::get_scratchpad_mode
scratchpad_mode get_scratchpad_mode() const
Returns the scratchpad mode.
Definition: dnnl.hpp:962
dnnl_primitive_attr_set_rnn_weights_qparams
dnnl_status_t DNNL_API dnnl_primitive_attr_set_rnn_weights_qparams(dnnl_primitive_attr_t attr, dnnl_dim_t count, int mask, const float *scales)
Sets quantization scaling factors for RNN weights tensors.
dnnl::memory::format_tag::nt
2D RNN statistics tensor; an alias for dnnl::memory::format_tag::ba
dnnl::deconvolution_backward_weights::desc::desc
desc(algorithm algorithm, const memory::desc &src_desc, const memory::desc &diff_weights_desc, const memory::desc &diff_bias_desc, const memory::desc &diff_dst_desc, const memory::dims &strides, const memory::dims &padding_l, const memory::dims &padding_r)
Constructs a descriptor for a deconvolution weights gradient primitive with bias.
Definition: dnnl.hpp:4436
dnnl_primitive_attr_set_post_ops
dnnl_status_t DNNL_API dnnl_primitive_attr_set_post_ops(dnnl_primitive_attr_t attr, const_dnnl_post_ops_t post_ops)
Sets primitive attributes post-ops.
dnnl::memory::desc::desc
desc()
Constructs a zero (empty) memory descriptor.
Definition: dnnl.hpp:2112
dnnl::stream::flags::out_of_order
Out-of-order execution.
dnnl::convolution_backward_weights::convolution_backward_weights
convolution_backward_weights()=default
Default constructor. Produces an empty object.
dnnl_primitive_desc_destroy
dnnl_status_t DNNL_API dnnl_primitive_desc_destroy(dnnl_primitive_desc_t primitive_desc)
Destroys a primitive descriptor.
dnnl_vanilla_lstm
LSTM cell.
Definition: dnnl_types.h:766
dnnl_any_engine
An unspecified engine.
Definition: dnnl_types.h:1555
dnnl::lrn_backward::lrn_backward
lrn_backward()=default
Default constructor. Produces an empty object.
dnnl::primitive_attr::primitive_attr
primitive_attr()
Constructs default (empty) primitive attributes.
Definition: dnnl.hpp:946
dnnl::pooling_backward::desc::desc
desc(algorithm algorithm, const memory::desc &diff_src_desc, const memory::desc &diff_dst_desc, const memory::dims &strides, const memory::dims &kernel, const memory::dims &padding_l, const memory::dims &padding_r)
Constructs a descriptor for pooling backward propagation primitive.
Definition: dnnl.hpp:5058
dnnl_nCdhw4c
5D CNN activations tensor blocked by channels with block size 4, an alias to dnnl_aBcde4b
Definition: dnnl_types.h:463
dnnl_resampling
A resampling primitive.
Definition: dnnl_types.h:702
dnnl::query::matmul_d
matmul descriptor
dnnl_cpu_isa_avx
Intel(R) Advanced Vector Extensions.
Definition: dnnl_types.h:2033
dnnl_bca
permuted 3D tensor
Definition: dnnl_types.h:194
dnnl::primitive_desc_base::get_engine
engine get_engine() const
Returns the engine of the primitive descriptor.
Definition: dnnl.hpp:2486
dnnl::memory::format_tag::oi
2D CNN weights tensor; an alias for dnnl::memory::format_tag::ab
dnnl::query::diff_weights_md
weights grad. memory desc
dnnl::query::op_d
op descriptor
dnnl_prop_kind_t
dnnl_prop_kind_t
Kinds of propagation.
Definition: dnnl_types.h:635
dnnl::memory::format_tag::ldnc
4D RNN states tensor in the format (num_layers, num_directions, batch, state channels).
dnnl::gru_backward::primitive_desc::src_layer_desc
memory::desc src_layer_desc() const
Returns source layer memory descriptor.
Definition: dnnl.hpp:8291
dnnl::primitive_desc_base::impl_info_str
const char * impl_info_str() const
Returns implementation name.
Definition: dnnl.hpp:2489
dnnl_query_scratchpad_md
scratchpad memory desc
Definition: dnnl_types.h:1935
dnnl::prop_kind::forward_scoring
Forward data propagation, alias for dnnl::prop_kind::forward_inference.
dnnl::lstm_forward::primitive_desc::weights_iter_desc
memory::desc weights_iter_desc() const
Returns weights iteration memory descriptor.
Definition: dnnl.hpp:7656
dnnl::batch_normalization_forward::primitive_desc::weights_desc
memory::desc weights_desc() const
Returns a weights memory descriptor.
Definition: dnnl.hpp:5945
dnnl::primitive_desc_base::query_md
memory::desc query_md(query what, int idx=0) const
Returns a memory descriptor.
Definition: dnnl.hpp:2520
dnnl::batch_normalization_backward::primitive_desc::diff_weights_desc
memory::desc diff_weights_desc() const
Returns a diff weights memory descriptor.
Definition: dnnl.hpp:6108
dnnl_dilated_convolution_forward_desc_init
dnnl_status_t DNNL_API dnnl_dilated_convolution_forward_desc_init(dnnl_convolution_desc_t *conv_desc, dnnl_prop_kind_t prop_kind, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *src_desc, const dnnl_memory_desc_t *weights_desc, const dnnl_memory_desc_t *bias_desc, const dnnl_memory_desc_t *dst_desc, const dnnl_dims_t strides, const dnnl_dims_t dilates, const dnnl_dims_t padding_l, const dnnl_dims_t padding_r)
Initializes a descriptor for a dilated convolution forward propagation primitive.
dnnl::resampling_backward::desc::desc
desc(algorithm algorithm, const memory::desc &diff_src_desc, const memory::desc &diff_dst_desc)
Constructs a descriptor for a resampling backward propagation primitive using source and destination ...
Definition: dnnl.hpp:9358
dnnl_eltwise_gelu
Eltwise: gelu.
Definition: dnnl_types.h:744
dnnl::deconvolution_forward::primitive_desc::weights_desc
memory::desc weights_desc() const
Returns a weights memory descriptor.
Definition: dnnl.hpp:4216
dnnl_primitive_attr_get_output_scales
dnnl_status_t DNNL_API dnnl_primitive_attr_get_output_scales(const_dnnl_primitive_attr_t attr, dnnl_dim_t *count, int *mask, const float **scales)
Returns primitive attributes output scaling factors correspondence mask and values.
dnnl_query_weights_md
weights memory descriptor desc
Definition: dnnl_types.h:1930
dnnl::layer_normalization_backward::primitive_desc::workspace_desc
memory::desc workspace_desc() const
Returns the workspace memory descriptor.
Definition: dnnl.hpp:6510
dnnl::prop_kind::backward_data
Backward data propagation.
dnnl::query::engine
execution engine
dnnl::memory::format_tag::nc
2D CNN activations tensor; an alias for dnnl::memory::format_tag::ab
dnnl::stream::flags::default_flags
Default stream configuration.
dnnl::reorder::reorder
reorder()=default
Default constructor. Produces an empty object.
dnnl::lbr_gru_backward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::vanilla_rnn_forward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl_primitive_desc_query_md
const dnnl_memory_desc_t DNNL_API * dnnl_primitive_desc_query_md(const_dnnl_primitive_desc_t primitive_desc, dnnl_query_t what, int index)
Queries primitive descriptor for a memory descriptor.
dnnl_gemm_u8s8s32
dnnl_status_t DNNL_API dnnl_gemm_u8s8s32(char transa, char transb, char offsetc, dnnl_dim_t M, dnnl_dim_t N, dnnl_dim_t K, float alpha, const uint8_t *A, dnnl_dim_t lda, uint8_t ao, const int8_t *B, dnnl_dim_t ldb, int8_t bo, float beta, int32_t *C, dnnl_dim_t ldc, const int32_t *co)
Performs integer matrix-matrix multiply on 8-bit unsigned matrix A, 8-bit signed matrix B,...
dnnl_query_batch_normalization_d
batch normalization descriptor
Definition: dnnl_types.h:1916
dnnl_post_ops_create
dnnl_status_t DNNL_API dnnl_post_ops_create(dnnl_post_ops_t *post_ops)
Creates empty post-ops sequence.
dnnl::resampling_forward::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:9323
dnnl::inner_product_backward_weights::inner_product_backward_weights
inner_product_backward_weights()=default
Default constructor. Produces an empty object.
dnnl::set_jit_dump
status set_jit_dump(int enable)
Configures dumping of JIT-generated code.
Definition: dnnl.hpp:9502
dnnl::gru_backward::primitive_desc::dst_iter_desc
memory::desc dst_iter_desc() const
Returns destination iteration memory descriptor.
Definition: dnnl.hpp:8317
dnnl::softmax_backward::primitive_desc::diff_dst_desc
memory::desc diff_dst_desc() const
Returns a destination memory descriptor.
Definition: dnnl.hpp:5581
dnnl::vanilla_rnn_forward::primitive_desc::dst_layer_desc
memory::desc dst_layer_desc() const
Returns destination layer memory descriptor.
Definition: dnnl.hpp:7238
dnnl::primitive::kind::eltwise
An element-wise primitive.
dnnl::logsoftmax_forward::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:5688
dnnl::pooling_forward::primitive_desc::primitive_desc
primitive_desc()=default
Default constructor. Produces an empty object.
dnnl::gru_forward::gru_forward
gru_forward()=default
Default constructor. Produces an empty object.
dnnl::softmax_backward::primitive_desc::diff_src_desc
memory::desc diff_src_desc() const
Returns a diff source memory descriptor.
Definition: dnnl.hpp:5578
const_dnnl_op_desc_t
const typedef void * const_dnnl_op_desc_t
A pointer to any of the operation descriptors (constant variant).
Definition: dnnl_types.h:1048
dnnl::shuffle_backward::shuffle_backward
shuffle_backward()=default
Default constructor. Produces an empty object.
dnnl_undefined_primitive
Undefined primitive.
Definition: dnnl_types.h:664
dnnl::lstm_backward::primitive_desc::diff_src_iter_c_desc
memory::desc diff_src_iter_c_desc() const
Returns diff source recurrent cell state memory descriptor.
Definition: dnnl.hpp:7927
dnnl::engine::kind::cpu
CPU engine.
dnnl_vanilla_rnn_forward_desc_init
dnnl_status_t DNNL_API dnnl_vanilla_rnn_forward_desc_init(dnnl_rnn_desc_t *rnn_desc, dnnl_prop_kind_t prop_kind, const dnnl_alg_kind_t activation, const dnnl_rnn_direction_t direction, const dnnl_memory_desc_t *src_layer_desc, const dnnl_memory_desc_t *src_iter_desc, const dnnl_memory_desc_t *weights_layer_desc, const dnnl_memory_desc_t *weights_iter_desc, const dnnl_memory_desc_t *bias_desc, const dnnl_memory_desc_t *dst_layer_desc, const dnnl_memory_desc_t *dst_iter_desc, unsigned flags, float alpha, float beta)
Initializes a descriptor for vanilla RNN forward propagation primitive.
dnnl::primitive::kind::deconvolution
A deconvolution primitive.
dnnl::rnn_direction::unidirectional
Alias for dnnl::rnn_direction::unidirectional_left2right.
dnnl::layer_normalization_forward::layer_normalization_forward
layer_normalization_forward()=default
Default constructor. Produces an empty object.
dnnl_eltwise_soft_relu
Eltwise: soft_relu.
Definition: dnnl_types.h:735
dnnl::gru_backward::primitive_desc::src_iter_desc
memory::desc src_iter_desc() const
Returns source iteration memory descriptor.
Definition: dnnl.hpp:8296
dnnl::lrn_forward::lrn_forward
lrn_forward()=default
Default constructor. Produces an empty object.
DNNL_ARG_FROM
#define DNNL_ARG_FROM
A special mnemonic for reorder source argument.
Definition: dnnl_types.h:1695
dnnl_unidirectional_right2left
Unidirectional execution of RNN primitive from right to left.
Definition: dnnl_types.h:1392
dnnl::memory::format_kind::any
Unspecified format kind.
dnnl_aBcd8b
4D tensor blocked by 2nd dimension with block size 8
Definition: dnnl_types.h:247
dnnl::algorithm::pooling_avg_include_padding
Average pooling include padding.
dnnl::deconvolution_backward_weights::primitive_desc::diff_dst_desc
memory::desc diff_dst_desc() const
Returns a diff destination memory descriptor.
Definition: dnnl.hpp:4654
dnnl::layer_normalization_forward::primitive_desc::src_desc
memory::desc src_desc() const
Returns a source memory descriptor.
Definition: dnnl.hpp:6292
dnnl_ab
plain 2D tensor
Definition: dnnl_types.h:177
dnnl_query_scratchpad_engine
(scratch) memory, additional to all inputs and outputs memory (bytes)
Definition: dnnl_types.h:1896
dnnl::primitive_attr::set_rnn_weights_qparams
void set_rnn_weights_qparams(int mask, const std::vector< float > &scales)
Sets quantization scaling factors for RNN weights tensors.
Definition: dnnl.hpp:1242
dnnl_runtime_error
Primitive or engine failed on execution.
Definition: dnnl_types.h:50
dnnl::query::deconvolution_d
deconvolution descriptor
dnnl_post_ops_get_params_eltwise
dnnl_status_t DNNL_API dnnl_post_ops_get_params_eltwise(const_dnnl_post_ops_t post_ops, int index, float *scale, dnnl_alg_kind_t *alg_kind, float *alpha, float *beta)
Returns the parameters of an elementwise post-up.
dnnl_query_exec_arg_md
memory desc of an execute argument
Definition: dnnl_types.h:1936
dnnl::lstm_backward::primitive_desc::bias_desc
memory::desc bias_desc() const
Returns bias memory descriptor.
Definition: dnnl.hpp:7896
dnnl::memory::format_tag::ABcd8b8a
4D tensor blocked by 1st and 2nd dimension with block size 8
dnnl::memory::format_tag::goihw
5D CNN weights tensor with groups; an alias for dnnl::memory::format_tag::abcde
dnnl::lstm_backward::primitive_desc::src_iter_desc
memory::desc src_iter_desc() const
Returns source iteration memory descriptor.
Definition: dnnl.hpp:7878
dnnl::query::primitive_kind
primitive kind
dnnl_pooling_avg_exclude_padding
Average pooling exclude padding.
Definition: dnnl_types.h:756
dnnl_binary_add
Binary add.
Definition: dnnl_types.h:778
dnnl_set_jit_dump
dnnl_status_t DNNL_API dnnl_set_jit_dump(int enable)
Configures dumping of JIT-generated code.
dnnl::vanilla_rnn_backward::primitive_desc::weights_iter_desc
memory::desc weights_iter_desc() const
Returns weights iteration memory descriptor.
Definition: dnnl.hpp:7445
dnnl_binary_desc_init
dnnl_status_t DNNL_API dnnl_binary_desc_init(dnnl_binary_desc_t *binary_desc, dnnl_alg_kind_t alg_kind, const dnnl_memory_desc_t *src0_desc, const dnnl_memory_desc_t *src1_desc, const dnnl_memory_desc_t *dst_desc)
Initializes a descriptor for a binary primitive.