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

Method as_recorded_seq

src/core/impl/graph/cg_impl_seq.cpp:706–765  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

704/* ======================= RecordedComputingSequence ======================= */
705
706std::unique_ptr<ComputingGraphImpl::RecordedComputingSequence> ComputingGraphImpl::
707 ComputingSequence::as_recorded_seq() {
708 on_first_exec();
709 mgb_assert(
710 m_enable_comp_node_seq_recorder,
711 "can not enable comp_node_seq_record_level=2; more details are "
712 "included in previous log messages");
713
714 mgb_assert(m_used_comp_node.size() == 1);
715 auto comp_node = *m_used_comp_node.begin();
716 MegDNNDtorCheck megdnn_dtor_check{comp_node};
717
718 // execute to get recorded comp seq
719 mgb_assert(!m_owner_graph->options().fake_next_exec);
720 m_owner_graph->options().fake_next_exec = true;
721 do_execute(&megdnn_dtor_check);
722 // to avoid wait at graph dtor which causes segfault because the events
723 // would have been moved away from this seq
724 m_wait_finished = true;
725
726 auto ret = std::make_unique<RecordedComputingSequence>(m_owner_graph);
727 m_owner_graph->m_recorded_seq_level2_dtor_chk.reset(
728 new MegDNNDtorCheck{comp_node, ret.get()});
729
730 // record opr dependencies
731 ThinHashSet<OperatorNodeBase*> used_oprs;
732 for (auto&& i : *m_opr_seq) {
733 i->record_execute_deps(ret->m_exec_deps);
734 used_oprs.insert(i);
735 }
736 for (auto&& i : ret->m_exec_deps) {
737 if (i->has_runtime_check()) {
738 ret->m_runtime_checks.push_back(i.get());
739 }
740 }
741
742 // also record unused oprs so the MegDNNDtorCheck would not fail
743 auto&& unused_deps =
744 m_owner_graph->m_recorded_seq_level2_dtor_chk->safe_dtor_objs();
745 for (auto&& i : m_owner_graph->m_opr_refkeeper) {
746 if (!used_oprs.count(i.get())) {
747 i->record_execute_deps(unused_deps);
748 }
749 }
750
751 // graph user data main contain ref holders for tmp variables
752 ret->m_graph_user_data.swap(m_owner_graph->options().user_data);
753
754 // move other dependencies
755 unpack_vector(
756 m_owner_graph->var_node_mem_manager().static_device_memory_refholder(),
757 ret->m_static_mem);
758 mgb_assert(m_event_start.size() == 1 && m_event_end.size() == 1);
759 ret->m_event_start = std::move(m_event_start.begin()->second);
760 ret->m_event_end = std::move(m_event_end.begin()->second);
761 ret->user_data().swap(user_data());
762 ret->m_recorder = std::move(m_comp_node_seq_recorder);
763

Callers 1

cg_impl.cppFile · 0.80

Calls 13

unpack_vectorFunction · 0.85
do_executeFunction · 0.70
sizeMethod · 0.45
beginMethod · 0.45
resetMethod · 0.45
getMethod · 0.45
record_execute_depsMethod · 0.45
insertMethod · 0.45
has_runtime_checkMethod · 0.45
push_backMethod · 0.45
countMethod · 0.45
swapMethod · 0.45

Tested by

no test coverage detected