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

Method init_seq

src/core/impl/graph/seq_modifier_base.cpp:8–91  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6using namespace cg;
7
8void SeqModifierBase::ModifyActionPlannerBase::init_seq(
9 const OprNodeArray& opr_seq, bool remove_unused_output) {
10 m_orig_opr_seq = &opr_seq;
11
12 m_var_storage.clear();
13 m_seq.clear();
14 m_var_mempool.reorder_free();
15 m_opr_mempool.reorder_free();
16 m_nr_endpoint_oprs = 0;
17
18 ThinHashMap<VarNode*, Var*> varmap;
19 ThinHashMap<VarNode*, Opr*> var_used;
20 for (auto orig_opr : *m_orig_opr_seq) {
21 auto time = m_seq.size();
22 m_seq.emplace_back(m_opr_mempool.alloc_unique(orig_opr, time));
23 auto opr = m_seq.back().get();
24 m_nr_endpoint_oprs += opr->is_endpoint;
25 for (auto&& dep : orig_opr->node_prop().dep_map()) {
26 if (!OperatorNodeBase::NodeProp::is_device_value_dep(dep.second))
27 continue;
28
29 auto iter = varmap.find(dep.first);
30 if (iter == varmap.end()) {
31 // input var needs not to be considered
32 size_t size =
33 dep.first->dtype().size(dep.first->shape().total_nr_elems());
34 if (!var_used[dep.first]) {
35 opr->inputs_size.push_back(size);
36 }
37 var_used[dep.first] = opr;
38 continue;
39 }
40
41 auto ivar = iter->second;
42 bool exist = false;
43 for (auto i : opr->input) {
44 if (i == ivar) {
45 exist = true;
46 break;
47 }
48 }
49 if (exist) {
50 // same var for different inputs
51 continue;
52 }
53
54 opr->input.push_back(ivar);
55 auto&& prev_rec = ivar->access_rec.back();
56 prev_rec.stride = time - prev_rec.opr->time;
57 ivar->access_rec.emplace_back(opr);
58 }
59
60 for (auto i : orig_opr->output()) {
61 auto var2memsize = m_par_modifier->m_mem_opt.var2memsize();
62 auto iter = var2memsize->find(i);
63 if (iter == var2memsize->end()) {
64 // some vars are ignored; see split_into_cn2oprseq()
65 continue;

Callers 3

search_refineMethod · 0.45

Calls 15

swapFunction · 0.85
emplace_backMethod · 0.80
alloc_uniqueMethod · 0.80
backMethod · 0.80
var2memsizeMethod · 0.80
clearMethod · 0.45
reorder_freeMethod · 0.45
sizeMethod · 0.45
getMethod · 0.45
findMethod · 0.45
endMethod · 0.45
dtypeMethod · 0.45

Tested by

no test coverage detected