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

Method get_comp_seq

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

Source from the content-addressed store, hash-verified

362}
363
364const OprNodeArray* TopoSorter::get_comp_seq(
365 CompSeqExtraInfo& extra_info, const VarNodeArray& dest) {
366 // move to temporary var to be exception-safe
367 PriorityRemapper priority_remapper;
368 if (m_priority_remapper) {
369 m_priority_remapper.swap(priority_remapper);
370 }
371
372 m_cur_extra_info = &extra_info;
373 m_seq.clear();
374 auto state = std::make_unique<State>();
375 m_state = state.get();
376 mgb_assert(m_modified_dep_map_log.empty(), "restore_opr_prop() not called");
377
378 {
379 // run the dfs
380 DFSDepDiscover dfs{this};
381 for (auto i : dest)
382 dfs.add_opr(i->owner_opr());
383 }
384
385#if MGB_ENABLE_COND_EXEC
386 // add dependency due to ExecutionMask (conditional oprs must wait for
387 // ExecutionMask owner var to be computed first)
388 if (ExecutionMask::have_alive_instance()) {
389 for (auto&& i : state->opr_trait) {
390 if (auto mask = ExecutionMask::get_from_opr(i.first)) {
391 if (auto var = mask->owner()) {
392 state->opr_trait.at(var->owner_opr()).receivers.push_back(i.first);
393 ++i.second.unresolved_dep_cnt;
394 add_extra_comp_order_dep(i.first, var);
395 }
396 }
397 }
398 }
399#endif
400
401 // add force update control deps
402 for (auto&& i : state->var_force_update_dest) {
403 auto dest_opr = i.second->owner_opr();
404 auto&& dest_trait = state->opr_trait.at(dest_opr);
405 for (auto reader : m_owner_graph->var_receiver(i.first)) {
406 if (reader == dest_opr)
407 continue;
408 auto iter = state->opr_trait.find(reader);
409 if (iter == state->opr_trait.end())
410 continue;
411
412 // reader must finish before dest_opr
413 for (auto i : reader->output())
414 add_extra_comp_order_dep(dest_opr, i);
415 iter->second.receivers.push_back(dest_opr);
416 ++dest_trait.unresolved_dep_cnt;
417 }
418 }
419
420 // remap priority
421 if (priority_remapper) {

Callers 5

CompSeqMethod · 0.80
compile_prepareMethod · 0.80
applyMethod · 0.80

Calls 13

swapMethod · 0.45
clearMethod · 0.45
getMethod · 0.45
emptyMethod · 0.45
add_oprMethod · 0.45
owner_oprMethod · 0.45
ownerMethod · 0.45
push_backMethod · 0.45
atMethod · 0.45
findMethod · 0.45
endMethod · 0.45
outputMethod · 0.45

Tested by

no test coverage detected