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

Method perform_dtr

src/core/impl/graph/seq_dtr.cpp:85–399  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

83}
84
85SeqModifierForDTR::SeqModifyAction SeqModifierForDTR::ModifyActionPlanner::perform_dtr(
86 CompNode comp_node, const OprNodeArray& opr_seq, Config* config) {
87 prepare(opr_seq);
88 SeqModifyAction action;
89
90 if (comp_node.locator().stream < 0) {
91 // do not modify system stream oprs
92 return action;
93 }
94
95 ThinHashSet<Var*> alive_vars;
96 size_t cur_usage = 0;
97 size_t cur_op_cnt = 0;
98
99 //! map from original var to latest var
100 ThinHashMap<VarNode*, Var*> latest_var;
101 ThinHashMap<VarNode*, size_t> pin;
102
103 auto need_regen = [&](Var* var) {
104 return alive_vars.find(var) == alive_vars.end();
105 };
106
107 auto add_alive = [&](Var* var) {
108 auto&& ins = alive_vars.insert(var);
109 mgb_assert(ins.second);
110 cur_usage += var->size;
111 };
112
113 auto remove_alive = [&](Var* var) {
114 if (alive_vars.erase(var)) {
115 auto size = var->size;
116 mgb_assert(size <= cur_usage);
117 cur_usage -= size;
118 return true;
119 }
120 return false;
121 };
122
123 auto get_latest = [&](Var* var) {
124 auto iter = latest_var.find(var->orig_var);
125 if (iter == latest_var.end()) {
126 return var;
127 } else {
128 return iter->second;
129 }
130 };
131
132 ThinHashMap<Var*, double> dfs_back;
133 ThinHashMap<Var*, double> dfs_ops;
134 ThinHashMap<Var*, double> dfs_front;
135 ThinHashMap<Var*, double> dfs_mem;
136 auto regen_time = [&](Var* var) {
137 thin_function<double(Var*)> dfs_b;
138 thin_function<double(Var*)> dfs_f;
139 dfs_b = [&](Var* var) {
140 if (dfs_back.find(var) != dfs_back.end()) {
141 return dfs_back[var];
142 }

Callers 1

modify_endpoint_varsMethod · 0.80

Calls 15

maxFunction · 0.85
alloc_uniqueMethod · 0.80
emplace_backMethod · 0.80
last_access_oprMethod · 0.80
is_bad_oprFunction · 0.70
powFunction · 0.50
locatorMethod · 0.45
findMethod · 0.45
endMethod · 0.45
insertMethod · 0.45
eraseMethod · 0.45
owner_oprMethod · 0.45

Tested by

no test coverage detected