OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [remove_cycle/] [remove_cycle_edges_by_dfs.py] - Blame information for rev 48

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 48 alirezamon
import networkx as nx
2
import argparse
3
import numpy as np
4
from measures import F1
5
 
6
import sys
7
sys.setrecursionlimit(5500000)
8
 
9
def dfs_visit_recursively(g,node,nodes_color,edges_to_be_removed):
10
 
11
        nodes_color[node] = 1
12
        nodes_order = list(g.successors_iter(node))
13
        nodes_order = np.random.permutation(nodes_order)
14
        for child in nodes_order:
15
                if nodes_color[child] == 0:
16
                                dfs_visit_recursively(g,child,nodes_color,edges_to_be_removed)
17
                elif nodes_color[child] == 1:
18
                        edges_to_be_removed.append((node,child))
19
 
20
        nodes_color[node] = 2
21
 
22
def dfs_remove_back_edges(graph_file,nodetype = int):
23
        '''
24
        0: white, not visited
25
        1: grey, being visited
26
        2: black, already visited
27
        '''
28
 
29
        g = nx.read_edgelist(graph_file,create_using = nx.DiGraph(),nodetype = nodetype)
30
        nodes_color = {}
31
        edges_to_be_removed = []
32
        for node in list(g.nodes()):
33
                nodes_color[node] = 0
34
 
35
        nodes_order = list(g.nodes())
36
        nodes_order = np.random.permutation(nodes_order)
37
        num_dfs = 0
38
        for node in nodes_order:
39
 
40
                if nodes_color[node] == 0:
41
                        num_dfs += 1
42
                        dfs_visit_recursively(g,node,nodes_color,edges_to_be_removed)
43
 
44
        #print("number of nodes to start dfs: %d" % num_dfs)
45
        #print("number of back edges: %d" % len(edges_to_be_removed))
46
        edges_to_be_removed_file = graph_file[:len(graph_file)-6] + "_removed_by_dfs.edges"
47
        print("edges to be removed, saved in file: %s" % edges_to_be_removed_file)
48
        from file_io import write_pairs_to_file
49
        write_pairs_to_file(edges_to_be_removed,edges_to_be_removed_file)
50
        return edges_to_be_removed
51
 
52
def dfs_performance(graph_file,gt_edges_file):
53
        edges_to_be_removed = dfs_remove_back_edges(graph_file)
54
        from measures import report_performance
55
        report_performance(gt_edges_file,edges_to_be_removed,"DFS")
56
 
57
 
58
if __name__ == "__main__":
59
 
60
        '''
61
        DFS Remove Back Edges
62
        '''
63
 
64
        parser = argparse.ArgumentParser()
65
        parser.add_argument("-g","--graph_file",default= " ", help = "input graph file name (edges list)")
66
        parser.add_argument("-t","--gt_edges_file",default = None, help = "ground truth edges file")
67
        args = parser.parse_args()
68
        graph_file = args.graph_file
69
 
70
        print("graph_file %s " % graph_file)
71
        dfs_performance(graph_file,args.gt_edges_file)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.