MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / perform

Method perform

src/opr/impl/nn_int.cpp:167–198  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

165}
166
167void ElemwiseMultiType::perform(
168 Mode mode, DType out_dt, DeviceTensorND& dest,
169 const SmallVector<DeviceTensorND>& inputs,
170 intl::UniqPtrWithCN<megdnn::ElemwiseMultiType>& opr) {
171 megdnn::TensorNDArray dnn_inputs(inputs.size());
172 TensorShapeArray inp_shapes(inputs.size());
173 CompNode out_cn;
174 for (size_t i = 0; i < inputs.size(); ++i) {
175 auto&& t = inputs[i];
176 if (!i) {
177 out_cn = t.comp_node();
178 } else {
179 mgb_assert(t.comp_node() == out_cn);
180 }
181 if (t.shape().is_empty()) {
182 mgb_assert(dest.empty());
183 return;
184 }
185 inp_shapes[i] = t.shape();
186 }
187 if (!opr) {
188 opr = intl::create_megdnn_opr<megdnn::ElemwiseMultiType>(out_cn);
189 } else {
190 mgb_assert(out_cn == opr.comp_node());
191 }
192 out_cn.activate();
193 for (size_t i = 0; i < inputs.size(); ++i)
194 dnn_inputs[i] = inputs[i].as_megdnn();
195 dest.comp_node(out_cn).dtype(out_dt).resize(get_output_var_shape(mode, inp_shapes));
196 opr->param() = {mode};
197 call_megdnn_opr_exec(out_cn, dnn_inputs, dest.as_megdnn(), opr.get(), nullptr);
198}
199
200// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}}

Callers

nothing calls this directly

Calls 12

as_megdnnMethod · 0.80
resizeMethod · 0.80
get_output_var_shapeFunction · 0.50
sizeMethod · 0.45
comp_nodeMethod · 0.45
is_emptyMethod · 0.45
shapeMethod · 0.45
emptyMethod · 0.45
activateMethod · 0.45
dtypeMethod · 0.45
paramMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected