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

Method reset_opr_seq

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

Source from the content-addressed store, hash-verified

885}
886
887void SeqModifierForSublinearMemory::reset_opr_seq(const OprNodeArray& oprseq) {
888 var_map().clear();
889 m_opr2replace_info.clear();
890 auto config =
891 MemoryOptimizerHelper::SubGraphConfig()
892 /*.add_bad_opr_flag(
893 OperatorNodeBase::NodeProp::Flag::IMPURE_FUNC)
894 .add_bad_opr_flag(
895 OperatorNodeBase::NodeProp::Flag::NO_AUTOMATIC_DUP)
896 .add_bad_opr_flag(OperatorNodeBase::NodeProp::Flag::
897 FORCE_UPDATE_INPUT_VAR)*/
898 // NOTE: it should not actually involve any opr with the above
899 // flags, but for better results, some ops(e.g. CudnnBatchNorm)
900 // should be involved and they are guaranteed to NEVER recompute.
901 .add_bad_var_flag(VarNode::Flag::VOLATILE_CONTENT)
902 .add_bad_var_flag(VarNode::Flag::NO_SYS_STATIC_MEM_ALLOC)
903 .add_bad_var_flag(VarNode::Flag::NO_SYS_MEM_ALLOC)
904 .add_bad_var_flag(VarNode::Flag::PERSISTENT_DEVICE_VALUE);
905
906 auto cn2oprseq = mem_opt().split_into_cn2oprseq(oprseq, config);
907
908 if (cn2oprseq->empty()) {
909 // empty graph
910 return;
911 }
912
913 SeqModifyAction action;
914
915 MGB_TRY { action = search_action(cn2oprseq); }
916 MGB_FINALLY(m_planner_thread_pool.stop(););
917 mgb_log_debug(
918 "apply sublinear memory action: %zu opr groups to be inserted",

Callers

nothing calls this directly

Calls 4

SubGraphConfigClass · 0.85
split_into_cn2oprseqMethod · 0.80
clearMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected