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

Function TEST

src/core/test/graph/partial_execution.cpp:87–141  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

85} // anonymous namespace
86
87TEST(TestPartialExecution, Simple) {
88 auto graph = ComputingGraph::make();
89 HostTensorGenerator<> gen;
90 auto host_x = gen({2, 3}), host_delta = gen({1});
91 int call0 = 0, call1 = 0;
92 auto make_expect = [&host_x](float delta) {
93 HostTensorND hv;
94 auto ptr = hv.copy_from(*host_x).ptr<float>();
95 for (int i = 0; i < 6; ++i)
96 ptr[i] += delta;
97 return hv;
98 };
99 auto cb0 = [&call0, &make_expect](DeviceTensorND& dv) {
100 HostTensorND hv;
101 hv.copy_from(dv).sync();
102 MGB_ASSERT_TENSOR_EQ(make_expect(0), hv);
103 ++call0;
104 };
105 auto cb1 = [&call1, &make_expect](DeviceTensorND& dv) {
106 HostTensorND hv;
107 hv.copy_from(dv).sync();
108 MGB_ASSERT_TENSOR_EQ(make_expect(1), hv);
109 ++call1;
110 };
111 host_delta->ptr<float>()[0] = -1;
112 auto x = opr::Host2DeviceCopy::make(*graph, host_x),
113 delta = opr::Host2DeviceCopy::make(*graph, host_delta),
114 y0 = opr::CallbackInjector::make(x, cb0),
115 y1 = opr::CallbackInjector::make(x + delta, cb1) + delta;
116
117 // it should execute in part2 albeit with high priority
118 set_priority(delta, -100);
119 HostTensorND host_y1;
120 auto funcs =
121 graph->compile_multi_part({{{y0, {}}}, {make_callback_copy(y1, host_y1)}});
122 ASSERT_EQ(2u, funcs.size());
123
124 for (int i = 0; i < 4; ++i) {
125 *host_x = *gen({2, 3});
126 ASSERT_EQ(0, call0);
127 funcs[0]->execute();
128 ASSERT_TRUE(host_y1.empty());
129 ASSERT_EQ(1, call0);
130 ASSERT_EQ(0, call1);
131
132 host_delta->ptr<float>()[0] = 1;
133 funcs[1]->execute();
134 ASSERT_EQ(1, call0);
135 ASSERT_EQ(1, call1);
136 MGB_ASSERT_TENSOR_EQ(make_expect(2), host_y1);
137
138 call0 = call1 = 0;
139 host_y1.resize({});
140 }
141}
142
143TEST(TestPartialExecution, AddUpdate) {
144 auto graph = ComputingGraph::make();

Callers

nothing calls this directly

Calls 15

set_priorityFunction · 0.85
make_callback_copyFunction · 0.85
get_opr_typesFunction · 0.85
make_no_fwdFunction · 0.85
resizeMethod · 0.80
renameMethod · 0.80
symshapeMethod · 0.80
emplace_backMethod · 0.80
makeFunction · 0.70
genFunction · 0.50
copy_fromMethod · 0.45
syncMethod · 0.45

Tested by

no test coverage detected