The Gaudi Framework  master (ff829712)
Loading...
Searching...
No Matches
graphanalysis Namespace Reference

Functions

 read_graph_from_json (filename)
 
 analyze_and_fix_cycles (gr)
 
 analyze_connected_componets (gr)
 
 analyze_critical_path (gr)
 
 print_graph_to_json (gr, filename)
 

Variables

str filename = "Athena.json"
 
 gr = read_graph_from_json(filename)
 
 had_to_fix_cycles = analyze_and_fix_cycles(gr)
 

Function Documentation

◆ analyze_and_fix_cycles()

graphanalysis.analyze_and_fix_cycles ( gr)

Definition at line 45 of file graphanalysis.py.

45def analyze_and_fix_cycles(gr):
46 has_loop = True
47 n_cycles = 0
48 while has_loop:
49 cycle = find_cycle(gr)
50 if len(cycle) == 0:
51 has_loop = False
52 continue
53 n_cycles += 1
54 print(cycle)
55 print("Removed loop by deleting edge (%s,%s)" % (cycle[-1], cycle[0]))
56 gr.del_edge((cycle[-1], cycle[0]))
57 print("\nIN TOTAL %i CYCLES\n" % (n_cycles))
58 return n_cycles > 0 # whether it needed to fix cycles
59
60

◆ analyze_connected_componets()

graphanalysis.analyze_connected_componets ( gr)

Definition at line 61 of file graphanalysis.py.

61def analyze_connected_componets(gr):
62 cc = connected_components(gr)
63 cc_size = {}
64 for i in cc.values():
65 cc_size[i] = 0
66 for k, v in cc.iteritems():
67 cc_size[v] = cc_size[v] + 1
68 print("Connected components have the following size:")
69 # for k,v in cc_size.iteritems():
70 # print "%i : %i" %(k,v)
71 print("NUMBER OF CONNECTED COMPONENTS: %i" % (len(cc_size.keys())))
72
73

◆ analyze_critical_path()

graphanalysis.analyze_critical_path ( gr)

Definition at line 74 of file graphanalysis.py.

74def analyze_critical_path(gr):
75 total_time = 0
76 critical_time = 0
77 cp = critical_path(gr)
78 # calculate total time
79 for edge in gr.edges():
80 total_time += gr.edge_weight(edge)
81
82 # calculate time of critical path
83 edges = [tuple(cp[i : i + 2]) for i in range(0, len(cp))]
84 for edge in edges:
85 critical_time += gr.edge_weight(edge)
86
87 print("Total time : %s" % total_time)
88 print("Critical path: %s" % critical_time)
89 print("POSSIBLE SPEEDUP: %s" % (total_time / critical_time))
90
91

◆ print_graph_to_json()

graphanalysis.print_graph_to_json ( gr,
filename )

Definition at line 92 of file graphanalysis.py.

92def print_graph_to_json(gr, filename):
93 algorithms = {} # still make it known to workflow
94 known_names = set()
95 for edge in gr.edges():
96 if edge[0].endswith("_algo"):
97 algoname = edge[0].rstrip("_algo")
98 product = edge[1]
99 reading = False
100 else:
101 algoname = edge[1].rstrip("_algo")
102 product = edge[0]
103 reading = True
104
105 if algoname not in known_names:
106 algorithms[algoname] = {
107 "name": algoname,
108 "inputs": [],
109 "outputs": [],
110 "runtimes": [1000], # TODO dummy
111 "runtimes_wall": [1000], # TODO dummy
112 }
113 known_names.add(algoname)
114 if reading:
115 algorithms[algoname]["inputs"].append(product)
116 else:
117 algorithms[algoname]["outputs"].append(product)
118 algorithms[algoname]["runtimes_wall"] = [
119 gr.edge_weight(edge) / 100,
120 ]
121 out = open(filename, "w")
122 algorithm_list = [item for item in algorithms.values()]
123 workflow = {"algorithms": algorithm_list}
124 out.write(workflow.__repr__())
125 out.close()
126
127

◆ read_graph_from_json()

graphanalysis.read_graph_from_json ( filename)

Definition at line 18 of file graphanalysis.py.

18def read_graph_from_json(filename):
19 data = open(filename).read()
20 workflow = eval(data)
21 gr = digraph()
22 # create all nodes
23 for algo in workflow["algorithms"]:
24 # to differentiate algos from equally named products
25 name = algo["name"] + "_algo"
26 gr.add_nodes([name])
27 for input in algo["inputs"]:
28 if input == "":
29 input = "dummy"
30 if not gr.has_node(input):
31 gr.add_nodes([input])
32 if not gr.has_edge((input, name)):
33 gr.add_edge((input, name), wt=0)
34 for output in algo["outputs"]:
35 if output == "":
36 output = "dummy"
37 if not gr.has_node(output):
38 gr.add_nodes([output])
39 if not gr.has_edge((name, output)):
40 # the output edge gets the weigth corresponding to the runtime
41 gr.add_edge((name, output), wt=algo["runtimes_wall"][0] * 100)
42 return gr
43
44

Variable Documentation

◆ filename

str graphanalysis.filename = "Athena.json"

Definition at line 130 of file graphanalysis.py.

◆ gr

graphanalysis.gr = read_graph_from_json(filename)

Definition at line 131 of file graphanalysis.py.

◆ had_to_fix_cycles

graphanalysis.had_to_fix_cycles = analyze_and_fix_cycles(gr)

Definition at line 134 of file graphanalysis.py.