# HG changeset patch # User Nina Engelhardt # Date 1316105658 -7200 # Node ID 6b629059c7abdd47d10d40768798fc9c688835b9 # Parent 395f58384a5ccb67de20c6f20ae10b7879853cde add counter evaluation script (has to be backed up somewhere...) diff -r 395f58384a5c -r 6b629059c7ab Counters/run_graph.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Counters/run_graph.py Thu Sep 15 18:54:18 2011 +0200 @@ -0,0 +1,74 @@ +#!/usr/bin/python + +import sys +import pygraph + +if len(sys.argv)<3 : + print "Usage:",sys.argv[0],"dependencyfile.dot counterfile.csv" + sys.exit() + +try: + dependencyfile = open(sys.argv[1]) + dependencystring = dependencyfile.read() +except IOError as (errno, strerror): + print "Error {0}: {1}".format(errno, strerror) + sys.exit() + +try: + counterfile = open(sys.argv[2]) +except IOError as (errno, strerror): + print "Error {0}: {1}".format(errno, strerror) + sys.exit() + +from pygraph.readwrite.dot import read,write + +dependencygraph = read(dependencystring) + +import csv + +counterreader = csv.reader(counterfile) + + + +for row in counterreader: + dependencygraph.add_node_attribute('VP_{0}_{1}'.format(row[0],row[1]),('suspend_point',row[2])) + dependencygraph.add_node_attribute('VP_{0}_{1}'.format(row[0],row[1]),('schedule_check_cycles',int(row[4])-int(row[19]))) + dependencygraph.add_node_attribute('VP_{0}_{1}'.format(row[0],row[1]),('sync_cycles',int(row[25])-int(row[24]))) + dependencygraph.add_node_attribute('VP_{0}_{1}'.format(row[0],row[1]),('assign_cycles',int(row[10])-int(row[7]))) + dependencygraph.add_node_attribute('VP_{0}_{1}'.format(row[0],row[1]),('work_comm_cycles',int(row[16])-int(row[13]))) + dependencygraph.add_node_attribute('VP_{0}_{1}'.format(row[0],row[1]),('status_cycles',int(row[22])-int(row[16]))) + + +def path_length(path): + length = 0 + for node in path: + attrd = dict(dependencygraph.node_attributes(node)) + length += attrd['schedule_check_cycles'] + length += attrd['sync_cycles'] + length += attrd['assign_cycles'] + length += attrd['work_comm_cycles'] + length += attrd['status_cycles'] + return length + + +def find_critical_path(graph, start, end, path=[]): + path = path + [end] + if start == end: + return path + if not graph.has_node(end): + return None + longest = None + for node in graph.incidents(end): + if node not in path: + newpath = find_critical_path(graph, start, node, path) + if newpath: + if not longest or path_length(newpath) > path_length(longest): + longest = newpath + return longest + +cr= find_critical_path(dependencygraph, 'VP_2_0', 'VP_2_97') + +for node in cr: + dependencygraph.add_node_attribute(node,('color','red')) + +print write(dependencygraph)