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

Function TEST

runtime/test/instruction/broadcast.cpp:8–82  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6using namespace test;
7
8TEST(INSTRUCTION, BroadCast) {
9 std::shared_ptr<Tensor> output;
10 std::vector<int> data0(5 * 340);
11 std::vector<int> data1(5 * 340);
12 std::vector<int> data2(5 * 340);
13 for (size_t i = 0; i < 5 * 340; i++) {
14 data0[i] = i;
15 data1[i] = i + 1;
16 data2[i] = i + 2;
17 }
18
19 auto create_broadcast = [&](std::vector<Tensor*>& inputs) {
20 auto broad_cast = std::make_shared<BroadCast>();
21
22 output = std::make_shared<Tensor>();
23 output->is_dynamic = true;
24
25 broad_cast->inputs[0] = inputs[0];
26 broad_cast->inputs[1] = inputs[1];
27 broad_cast->output = output.get();
28 return broad_cast;
29 };
30 VM* vm = create_vm();
31 auto test_broadcast = [&](std::vector<Tensor*> inputs, const Tensor& expect) {
32 auto broadcast = create_broadcast(inputs);
33 Instruction inst;
34 inst.tag = TinyNN_INST_BROADCAST;
35 inst.workload.broadcast = *broadcast;
36 vm_instruction_call(vm, &inst);
37 check_tensor(*broadcast->output, expect);
38 vm->model->host_dev.free(broadcast->output->ptr);
39 };
40
41 auto test_case = [&](std::vector<uint32_t> shape0, std::vector<uint32_t> shape1) {
42 auto src0 = create_tensor(shape0, TinyNNDType::TinyNN_INT, data0.data());
43 int index = 0;
44 for (auto i : shape1) {
45 data1[index++] = i;
46 }
47 auto src1 = create_tensor(
48 {static_cast<uint32_t>(shape1.size())}, TinyNNDType::TinyNN_INT,
49 data1.data());
50 auto trueth = create_tensor(shape1, TinyNNDType::TinyNN_INT, data2.data());
51 Tensor src_copy = *src0;
52 //! broadcast input
53 for (int i = 0; i < shape1.size(); i++) {
54 if (src_copy.layout.dims[i] == 1 && shape1[i] != 1) {
55 src_copy.layout.dims[i] = shape1[i];
56 src_copy.layout.stride[i] = 0;
57 }
58 }
59 size_t nr_elem = 1;
60 for (int j = 0; j < src_copy.layout.nr_dim; ++j) {
61 nr_elem *= src_copy.layout.dims[j];
62 }
63 auto dst_layout = trueth->layout;
64 auto src_layout = src_copy.layout;
65

Callers

nothing calls this directly

Calls 5

vm_instruction_callFunction · 0.85
init_iterFunction · 0.85
inc_iterFunction · 0.85
getMethod · 0.45
freeMethod · 0.45

Tested by

no test coverage detected