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

Function TEST

src/cambricon/test/magicmind_runtime_opr.cpp:336–433  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

334} // namespace
335
336TEST(TestMagicMindRuntimeOpr, Basic) {
337 REQUIRE_CAMBRICON_DEVICE(1);
338 auto cn = CompNode::load("cambricon0");
339 MMNetwork network(cn, magicmind::DataType::FLOAT32, false);
340 size_t dtype_size = magicmind::DataTypeSize(magicmind::DataType::FLOAT32);
341
342 // prepare parameter for addpad and conv
343 const int ni = 16, ci = 64, hi = 32, wi = 32;
344 const int no = 16, co = 64, ho = 32, wo = 32;
345
346 // count tensor nums
347 int conv_input_count = ni * hi * wi * ci;
348 int relu_output_count = no * ho * wo * co;
349
350 // prepare cpu origin data
351 std::vector<float> conv_input_cpu_data;
352 gen_rand_data(conv_input_cpu_data, conv_input_count, 256);
353 std::vector<float> add_input_cpu_data;
354 gen_rand_data(add_input_cpu_data, relu_output_count, 256);
355 std::vector<float> relu_output_cpu_data(relu_output_count);
356 std::vector<float> add_output_cpu_data(relu_output_count);
357
358 auto mlu_deleter = [](void* p) { MGB_CNRT_CHECK(cnrtFree(p)); };
359 void* conv_input_mlu_ptr;
360 void* add_input_mlu_ptr;
361 void* relu_output_mlu_ptr;
362 void* add_output_mlu_ptr;
363
364 // malloc mlu mem for fusion input and output
365 MGB_CNRT_CHECK(cnrtMalloc(&conv_input_mlu_ptr, conv_input_count * dtype_size));
366 MGB_CNRT_CHECK(cnrtMalloc(&add_input_mlu_ptr, relu_output_count * sizeof(float)));
367 MGB_CNRT_CHECK(cnrtMalloc(&relu_output_mlu_ptr, relu_output_count * sizeof(float)));
368 MGB_CNRT_CHECK(cnrtMalloc(&add_output_mlu_ptr, relu_output_count * sizeof(float)));
369
370 // memory copy cpu->mlu
371 MGB_CNRT_CHECK(cnrtMemcpy(
372 conv_input_mlu_ptr, conv_input_cpu_data.data(),
373 conv_input_count * dtype_size, CNRT_MEM_TRANS_DIR_HOST2DEV));
374 MGB_CNRT_CHECK(cnrtMemcpy(
375 add_input_mlu_ptr, add_input_cpu_data.data(),
376 relu_output_count * sizeof(float), CNRT_MEM_TRANS_DIR_HOST2DEV));
377 std::unique_ptr<void, decltype(mlu_deleter)> conv_input_holder{
378 conv_input_mlu_ptr, mlu_deleter};
379 std::unique_ptr<void, decltype(mlu_deleter)> add_input_holder{
380 add_input_mlu_ptr, mlu_deleter};
381 std::unique_ptr<void, decltype(mlu_deleter)> relu_output_holder{
382 relu_output_mlu_ptr, mlu_deleter};
383 std::unique_ptr<void, decltype(mlu_deleter)> add_output_holder{
384 add_output_mlu_ptr, mlu_deleter};
385
386 network.infer_model(
387 {conv_input_mlu_ptr, add_input_mlu_ptr},
388 {relu_output_mlu_ptr, add_output_mlu_ptr},
389 {Dims{{ni, hi, wi, ci}}, Dims{{no, ho, wo, co}}});
390
391 // result memory copy cnml->cpu
392 // memory copy cpu->mlu
393 MGB_CNRT_CHECK(cnrtMemcpy(

Callers

nothing calls this directly

Calls 15

gen_rand_dataFunction · 0.85
make_callback_copyFunction · 0.85
output_fileFunction · 0.85
infer_modelMethod · 0.80
to_json_fullMethod · 0.80
loadFunction · 0.50
makeFunction · 0.50
checkFunction · 0.50
genFunction · 0.50
dataMethod · 0.45
get_serialized_modelMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected