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

Function test_base_impl

src/opr/test/basic_arith/reduction.cpp:192–294  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

190}
191
192void test_base_impl(bool dyn_inp, bool dyn_tshp) {
193 HostTensorGenerator<> gen;
194 auto host_x = gen({10});
195 auto host_tshp =
196 std::make_shared<HostTensorND>(host_x->comp_node(), dtype::Int32());
197
198 host_tshp->resize({1}).ptr<int>()[0] = 1;
199 HostTensorND host_y, expected{host_x->comp_node(), dtype::Float32()};
200 DeviceTensorND static_calc_x{CompNode::default_cpu()},
201 static_calc_workspace{CompNode::default_cpu()},
202 static_calc_y{CompNode::default_cpu()};
203 auto static_calc_opr =
204 opr::intl::create_megdnn_opr<megdnn::Reduce>(CompNode::default_cpu());
205 auto graph = ComputingGraph::make();
206 auto x = opr::Host2DeviceCopy::make(*graph, host_x, {"x"}),
207 tshp = opr::Host2DeviceCopy::make(*graph, host_tshp, {"tshp"});
208 if (dyn_inp)
209 x = opr::MarkDynamicVar::make(x);
210 if (dyn_tshp)
211 tshp = opr::MarkDynamicVar::make(tshp);
212 auto y = opr::reduce_sum(x, tshp);
213 auto func = graph->compile({make_callback_copy(y, host_y)});
214
215 if (!dyn_tshp) {
216 ASSERT_TRUE(cg::is_static_var_shape(y.node()));
217 }
218 if (!dyn_inp && !dyn_tshp) {
219 ASSERT_TRUE(cg::is_static_var_value(y.node()));
220 }
221
222 bool check_succ = false;
223 auto do_check = [&](const TensorShape& ishp,
224 const std::vector<size_t>& reduce_axes) {
225 check_succ = false;
226 host_x->copy_from(*gen(ishp));
227 auto oshp = ishp;
228 if (reduce_axes.size() == 1 && reduce_axes[0] == (size_t)-1) {
229 oshp.shape[0] = 1;
230 oshp.ndim = 1;
231 } else {
232 for (auto i : reduce_axes)
233 oshp.shape[i] = 1;
234 }
235 {
236 DeviceTensorND tmp;
237 cg::copy_shape_to_tensor_value(tmp, oshp);
238 host_tshp->copy_from(tmp);
239 }
240 func->execute();
241
242 if (reduce_axes.empty() && !(!dyn_inp && dyn_tshp)) {
243 ASSERT_EQ(x.node()->prev_dev_ptr(), y.node()->prev_dev_ptr());
244 }
245
246 expected.resize(oshp);
247 reduce_raw<Mode::SUM, float>(expected, *host_x);
248
249 MGB_ASSERT_TENSOR_NEAR(expected, host_y, 1e-5);

Callers 1

TESTFunction · 0.85

Calls 15

make_callback_copyFunction · 0.85
is_static_var_shapeFunction · 0.85
is_static_var_valueFunction · 0.85
resizeMethod · 0.80
prev_dev_ptrMethod · 0.80
genFunction · 0.50
makeFunction · 0.50
reduce_sumFunction · 0.50
checkFunction · 0.50
comp_nodeMethod · 0.45
compileMethod · 0.45
nodeMethod · 0.45

Tested by

no test coverage detected