1/*******************************************************************************
2* Copyright 2022 Intel Corporation
3*
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8* http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*******************************************************************************/
16
17#include "utils/dnnl_query.hpp"
18
19dnnl_prop_kind_t query_prop_kind(const_dnnl_primitive_desc_t pd) {
20 dnnl_prop_kind_t prop_kind = dnnl_prop_kind_undef;
21 dnnl_primitive_desc_query(pd, dnnl_query_prop_kind, 0, &prop_kind);
22 return prop_kind;
23}
24
25dnnl_primitive_kind_t query_prim_kind(const_dnnl_primitive_desc_t pd) {
26 dnnl_primitive_kind_t prim_kind = dnnl_undefined_primitive;
27 dnnl_primitive_desc_query(pd, dnnl_query_primitive_kind, 0, &prim_kind);
28 return prim_kind;
29}
30
31dnnl_alg_kind_t query_alg_kind(const_dnnl_primitive_desc_t pd) {
32 dnnl_alg_kind_t alg_kind = dnnl_alg_kind_undef;
33 dnnl_primitive_desc_query(pd, dnnl_query_alg_kind, 0, &alg_kind);
34 return alg_kind;
35}
36
37std::string query_impl_info(const_dnnl_primitive_desc_t pd) {
38 const char *str = nullptr;
39 dnnl_primitive_desc_query(pd, dnnl_query_impl_info_str, 0, &str);
40 std::string s(str);
41 return s;
42}
43
44const_dnnl_memory_desc_t query_md(
45 const_dnnl_primitive_desc_t pd, dnnl_query_t what, int index) {
46 return dnnl_primitive_desc_query_md(pd, what, index);
47}
48
49const_dnnl_memory_desc_t query_md(const_dnnl_primitive_desc_t pd, int index) {
50 return query_md(pd, dnnl_query_exec_arg_md, index);
51}
52
53dnnl_engine_t query_engine(
54 const_dnnl_primitive_desc_t pd, dnnl_query_t engine_type) {
55 dnnl_engine_t engine;
56 dnnl_primitive_desc_query(pd, engine_type, 0, &engine);
57 return engine;
58}
59
60int64_t query_mem_consumption(const_dnnl_primitive_desc_t pd) {
61 int64_t size = 0;
62 dnnl_primitive_desc_query(pd, dnnl_query_memory_consumption_s64, 0, &size);
63 return size;
64}
65
66int query_n_inputs(const_dnnl_primitive_desc_t pd) {
67 return dnnl_primitive_desc_query_s32(pd, dnnl_query_num_of_inputs_s32, 0);
68}
69
70int query_n_outputs(const_dnnl_primitive_desc_t pd) {
71 return dnnl_primitive_desc_query_s32(pd, dnnl_query_num_of_outputs_s32, 0);
72}
73
74const_dnnl_post_ops_t query_post_ops(const_dnnl_primitive_attr_t attr) {
75 const_dnnl_post_ops_t post_ops {};
76 dnnl_primitive_attr_get_post_ops(attr, &post_ops);
77 return post_ops;
78}
79
80const_dnnl_post_ops_t query_post_ops(const_dnnl_primitive_desc_t pd) {
81 const_dnnl_post_ops_t post_ops {};
82 dnnl_primitive_attr_get_post_ops(query_attr(pd), &post_ops);
83 return post_ops;
84}
85
86const_dnnl_primitive_attr_t query_attr(const_dnnl_primitive_desc_t pd) {
87 const_dnnl_primitive_attr_t attr {};
88 dnnl_primitive_desc_get_attr(pd, &attr);
89 return attr;
90}
91
92const_dnnl_primitive_desc_t query_pd(dnnl_primitive_t prim) {
93 const_dnnl_primitive_desc_t pd {};
94 dnnl_primitive_get_primitive_desc(prim, &pd);
95 return pd;
96}
97
98dnnl_engine_kind_t query_engine_kind(const dnnl_engine_t &engine) {
99 dnnl_engine_kind_t engine_kind = dnnl_any_engine;
100 dnnl_engine_get_kind(engine, &engine_kind);
101 return engine_kind;
102}
103
104int query_md_ndims(const_dnnl_memory_desc_t md) {
105 int ndims = 0;
106 if (!md) return ndims;
107 dnnl_memory_desc_query(md, dnnl_query_ndims_s32, &ndims);
108 return ndims;
109}
110
111int query_md_inner_nblks(const_dnnl_memory_desc_t md) {
112 int inner_nblks = 0;
113 if (!md) return inner_nblks;
114 dnnl_memory_desc_query(md, dnnl_query_inner_nblks_s32, &inner_nblks);
115 return inner_nblks;
116}
117
118dnnl_dim_t query_md_submemory_offset(const_dnnl_memory_desc_t md) {
119 dnnl_dim_t submemory_offset = 0;
120 if (!md) return submemory_offset;
121 dnnl_memory_desc_query(
122 md, dnnl_query_submemory_offset_s64, &submemory_offset);
123 return submemory_offset;
124}
125
126dnnl_data_type_t query_md_data_type(const_dnnl_memory_desc_t md) {
127 dnnl_data_type_t dt = dnnl_data_type_undef;
128 if (!md) return dt;
129 dnnl_memory_desc_query(md, dnnl_query_data_type, &dt);
130 return dt;
131}
132
133dnnl_format_kind_t query_md_format_kind(const_dnnl_memory_desc_t md) {
134 dnnl_format_kind_t format_kind = dnnl_format_kind_undef;
135 if (!md) return format_kind;
136 dnnl_memory_desc_query(md, dnnl_query_format_kind, &format_kind);
137 return format_kind;
138}
139
140static const dnnl_dims_t &query_md_array_member(
141 const_dnnl_memory_desc_t md, dnnl_query_t what) {
142 static const dnnl_dims_t dummy {};
143 if (!md) return dummy;
144 const dnnl_dims_t *res;
145 dnnl_memory_desc_query(md, what, &res);
146 return *res;
147}
148
149const dnnl_dims_t &query_md_dims(const_dnnl_memory_desc_t md) {
150 return query_md_array_member(md, dnnl_query_dims);
151}
152
153const dnnl_dims_t &query_md_padded_dims(const_dnnl_memory_desc_t md) {
154 return query_md_array_member(md, dnnl_query_padded_dims);
155}
156
157const dnnl_dims_t &query_md_padded_offsets(const_dnnl_memory_desc_t md) {
158 return query_md_array_member(md, dnnl_query_padded_offsets);
159}
160
161const dnnl_dims_t &query_md_strides(const_dnnl_memory_desc_t md) {
162 return query_md_array_member(md, dnnl_query_strides);
163}
164
165const dnnl_dims_t &query_md_inner_blks(const_dnnl_memory_desc_t md) {
166 return query_md_array_member(md, dnnl_query_inner_blks);
167}
168
169const dnnl_dims_t &query_md_inner_idxs(const_dnnl_memory_desc_t md) {
170 return query_md_array_member(md, dnnl_query_inner_idxs);
171}
172