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

Method modify_endpoint_vars

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

Source from the content-addressed store, hash-verified

29 : SeqModifierBase(owner), m_config(config_g) {}
30
31void SeqModifierForDTR::modify_endpoint_vars(VarNodeArray& endpoints) {
32 var_map().clear();
33 auto comp_seq = MemoryOptimizerHelper::CompSeq(owner_graph(), endpoints);
34 auto config =
35 MemoryOptimizerHelper::SubGraphConfig()
36 /*.add_bad_opr_flag(
37 OperatorNodeBase::NodeProp::Flag::IMPURE_FUNC)
38 .add_bad_opr_flag(
39 OperatorNodeBase::NodeProp::Flag::NO_AUTOMATIC_DUP)
40 .add_bad_opr_flag(OperatorNodeBase::NodeProp::Flag::
41 FORCE_UPDATE_INPUT_VAR)*/
42 // NOTE: it should not actually involve any opr with the above
43 // flags, but for better results, some ops(e.g. CudnnBatchNorm)
44 // should be involved and they are guaranteed to NEVER recompute.
45 .add_bad_var_flag(VarNode::Flag::VOLATILE_CONTENT)
46 .add_bad_var_flag(VarNode::Flag::NO_SYS_STATIC_MEM_ALLOC)
47 .add_bad_var_flag(VarNode::Flag::NO_SYS_MEM_ALLOC)
48 .add_bad_var_flag(VarNode::Flag::PERSISTENT_DEVICE_VALUE);
49 auto cn2oprseq = mem_opt().split_into_cn2oprseq(*comp_seq.m_seq, config);
50
51 if (cn2oprseq->empty()) {
52 return;
53 }
54 SeqModifyAction action;
55 ModifyActionPlanner* planner = new ModifyActionPlanner(this);
56 for (auto&& i : *cn2oprseq) {
57 auto&& cur = planner->perform_dtr(i.first, i.second, m_config);
58 action.insert(cur.begin(), cur.end());
59 }
60 apply_action(action, *comp_seq.m_seq);
61 for (auto&& i : endpoints) {
62 auto iter = var_map().find(i);
63 if (iter != var_map().end()) {
64 i = iter->second;
65 }
66 }
67}
68
69void SeqModifierForDTR::ModifyActionPlanner::prepare(const OprNodeArray& opr_seq) {
70 init_seq(opr_seq, false);

Callers 1

compile_prepareMethod · 0.45

Calls 10

CompSeqClass · 0.85
SubGraphConfigClass · 0.85
split_into_cn2oprseqMethod · 0.80
perform_dtrMethod · 0.80
clearMethod · 0.45
emptyMethod · 0.45
insertMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
findMethod · 0.45

Tested by

no test coverage detected