MCPcopy Create free account
hub / github.com/OAID/Tengine / SanitizeGraph

Method SanitizeGraph

core/lib/graph.cpp:608–664  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

606}
607
608void Graph::SanitizeGraph(void)
609{
610 int node_number = seq_nodes.size();
611
612 std::vector<Node*> new_seq;
613 std::vector<int> access_flag(node_number, 0);
614
615 /* make sure the node index is correct first */
616 for(int i = 0; i < node_number; i++)
617 seq_nodes[i]->SetNodeIndex(i);
618
619 BFSVisit(this, output_nodes, graph_visit_t([&](Graph* graph, Node* node) {
620 new_seq.insert(new_seq.begin(), node);
621 access_flag[node->GetNodeIndex()] = 1;
622 }));
623
624 for(unsigned int i = 0; i < input_nodes.size(); i++)
625 {
626 int input_index = input_nodes[i]->GetNodeIndex();
627
628 if(!access_flag[input_index])
629 {
630 access_flag[input_index] = 1;
631 new_seq.insert(new_seq.begin(), input_nodes[i]);
632 }
633 }
634
635 auto ir = seq_nodes.begin();
636
637 // removing node that can not be visited
638 for(int i = 0; i < node_number; i++)
639 {
640 if(access_flag[i])
641 {
642 ir++;
643 continue;
644 }
645
646 Node* node = (*ir);
647
648 ir = seq_nodes.erase(ir);
649
650 if(!RemoveNode(node))
651 break;
652 }
653
654 seq_nodes = new_seq;
655
656 for(unsigned int i = 0; i < seq_nodes.size(); i++)
657 {
658 Node* node = seq_nodes[i];
659
660 node->SetNodeIndex(i);
661 }
662
663 RemoveNoChildTensor();
664}
665

Callers 5

PrerunMethod · 0.80
mainFunction · 0.80
mainFunction · 0.80
MergeSubgraphMethod · 0.80
PartitionGraphMethod · 0.80

Calls 4

SetNodeIndexMethod · 0.80
beginMethod · 0.80
GetNodeIndexMethod · 0.80
sizeMethod · 0.45

Tested by 2

mainFunction · 0.64
mainFunction · 0.64