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

Method get_split_point_set

src/core/impl/graph/seq_sublinear_memory.cpp:125–170  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

123}
124
125SeqModifierForSublinearMemory::SplitPointSet SeqModifierForSublinearMemory::
126 ModifyActionPlanner::get_split_point_set(size_t block_size_thresh) {
127 auto split_point_set = make_split_point_set();
128 size_t cur_block_usage = 0;
129
130 ThinHashSet<Var*> cur_block_alive_vars;
131
132 auto add_alive = [&](Var* var) {
133 auto&& ins = cur_block_alive_vars.insert(var);
134 mgb_assert(ins.second);
135 cur_block_usage += var->size;
136 };
137
138 auto remove_alive = [&](Var* var) {
139 if (cur_block_alive_vars.erase(var)) {
140 auto size = var->size;
141 mgb_assert(size <= cur_block_usage);
142 cur_block_usage -= size;
143 }
144 };
145
146 auto flush_block_member = [&](size_t p) {
147 split_point_set->push_back(p);
148 cur_block_usage = 0;
149 cur_block_alive_vars.clear();
150 };
151
152 for (size_t i = 0; i < seq().size(); ++i) {
153 auto opr = seq()[i].get();
154
155 for (auto i : opr->output)
156 add_alive(i);
157
158 for (auto i : opr->input) {
159 if (opr == i->last_access_opr())
160 remove_alive(i);
161 }
162
163 if (i + 1 < seq().size() && (cur_block_usage < block_size_thresh ||
164 (nr_endpoint_oprs() && !opr->is_endpoint)))
165 continue;
166
167 flush_block_member(i);
168 }
169 return split_point_set;
170}
171
172size_t SeqModifierForSublinearMemory::ModifyActionPlanner::
173 calc_bottleneck_from_discard_plan() {

Callers 1

Calls 7

last_access_oprMethod · 0.80
insertMethod · 0.45
eraseMethod · 0.45
push_backMethod · 0.45
clearMethod · 0.45
sizeMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected