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 | |
19 | dnnl_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 | |
25 | dnnl_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 | |
31 | dnnl_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 | |
37 | std::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 | |
44 | const_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 | |
49 | const_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 | |
53 | dnnl_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 | |
60 | int64_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 | |
66 | int 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 | |
70 | int 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 | |
74 | const_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 | |
80 | const_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 | |
86 | const_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 | |
92 | const_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 | |
98 | dnnl_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 | |
104 | int 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 | |
111 | int 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 | |
118 | dnnl_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 | |
126 | dnnl_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 | |
133 | dnnl_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 | |
140 | static 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 | |
149 | const dnnl_dims_t &query_md_dims(const_dnnl_memory_desc_t md) { |
150 | return query_md_array_member(md, dnnl_query_dims); |
151 | } |
152 | |
153 | const 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 | |
157 | const 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 | |
161 | const dnnl_dims_t &query_md_strides(const_dnnl_memory_desc_t md) { |
162 | return query_md_array_member(md, dnnl_query_strides); |
163 | } |
164 | |
165 | const 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 | |
169 | const 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 | |