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

Method apply_action

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

Source from the content-addressed store, hash-verified

399}
400
401void SeqModifierForDTR::apply_action(
402 SeqModifyAction& action, const OprNodeArray& oprseq) {
403 auto cur_priority = std::numeric_limits<
404 decltype(OperatorNodeBase::NodeProp::Attribute::priority)>::min();
405
406 ThinHashSet<OperatorNodeBase*> modified_opr;
407 ThinHashMap<OperatorNodeBase*, size_t> recomp_id;
408 auto set_priority = [&](OperatorNodeBase* opr) {
409 mgb_assert(modified_opr.insert(opr).second);
410 mem_opt().set_priority(opr, cur_priority++);
411 };
412
413 auto on_opr_visited = [&](OperatorNodeBase* opr) {
414 if (replace_vars(opr->input())) {
415 recomp_id[opr]++;
416 opr = copy_opr_from_new_inputs(opr, true, recomp_id[opr] - 1);
417 }
418 set_priority(opr);
419 };
420
421 DepOprIter dep_iter{on_opr_visited};
422
423 for (auto opr : oprseq) {
424 auto iter = action.find(opr);
425 if (iter != action.end()) {
426 for (auto i : iter->second) {
427 replace_vars(i->input());
428 recomp_id[i]++;
429 auto opr_new = copy_opr_from_new_inputs(i, false, recomp_id[i] - 1);
430 set_priority(opr_new);
431 }
432 action.erase(iter);
433 }
434 dep_iter.add(opr);
435 }
436 mgb_assert(action.empty());
437}
438
439#endif // !MGB_ENABLE_DTR
440

Callers

nothing calls this directly

Calls 11

replace_varsFunction · 0.85
set_priorityFunction · 0.85
set_priorityMethod · 0.80
minFunction · 0.50
insertMethod · 0.45
inputMethod · 0.45
findMethod · 0.45
endMethod · 0.45
eraseMethod · 0.45
addMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected