diff options
| author | Jonathan Herman <hermanjl@cs.unc.edu> | 2012-09-27 19:03:22 -0400 |
|---|---|---|
| committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2012-09-27 19:03:22 -0400 |
| commit | 7c09ec981c6e06af2e62d67a609eb53728267954 (patch) | |
| tree | 76a93db7cadc452ac70eabbd52fdd87ed5fd54c4 /parse/dir_map.py | |
| parent | 5554e053e9f3d5f7987d3f1d889802b211af8eab (diff) | |
Added script to parse directory data, create CSVs for every chagned value.
This change also makes SchedTrace and OverheadTrace events configurable.
Diffstat (limited to 'parse/dir_map.py')
| -rw-r--r-- | parse/dir_map.py | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/parse/dir_map.py b/parse/dir_map.py new file mode 100644 index 0000000..6e959f2 --- /dev/null +++ b/parse/dir_map.py | |||
| @@ -0,0 +1,104 @@ | |||
| 1 | import os | ||
| 2 | |||
| 3 | from collections import defaultdict | ||
| 4 | from point import Type | ||
| 5 | |||
| 6 | class TreeNode(object): | ||
| 7 | def __init__(self, parent = None): | ||
| 8 | self.parent = parent | ||
| 9 | self.children = defaultdict(lambda : TreeNode(self)) | ||
| 10 | self.values = [] | ||
| 11 | |||
| 12 | class DirMap(object): | ||
| 13 | def to_csv(self, vals): | ||
| 14 | val_strs = [] | ||
| 15 | for key in sorted(vals.keys()): | ||
| 16 | val_strs += ["%s=%s" % (key, vals[key])] | ||
| 17 | return "%s.csv" % ("_".join(val_strs)) | ||
| 18 | |||
| 19 | def __init__(self, out_dir): | ||
| 20 | self.root = TreeNode(None) | ||
| 21 | self.out_dir = out_dir | ||
| 22 | self.values = [] | ||
| 23 | |||
| 24 | def debug_update_node(self, path, keys, value): | ||
| 25 | self.__update_node(path, keys, value) | ||
| 26 | |||
| 27 | def __update_node(self, path, keys, value): | ||
| 28 | node = self.root | ||
| 29 | |||
| 30 | path += [ self.to_csv(keys) ] | ||
| 31 | for p in path: | ||
| 32 | node = node.children[p] | ||
| 33 | |||
| 34 | node.values += [value] | ||
| 35 | |||
| 36 | def add_point(self, vary, vary_value, keys, point): | ||
| 37 | for stat in point.get_stats(): | ||
| 38 | summary = point[stat] | ||
| 39 | |||
| 40 | for summary_type in Type: | ||
| 41 | measurement = summary[summary_type] | ||
| 42 | |||
| 43 | for base_type in Type: | ||
| 44 | if not base_type in measurement: | ||
| 45 | continue | ||
| 46 | # Ex: wcet/avg/max/vary-type/other-stuff.csv | ||
| 47 | path = [ stat, summary_type, base_type, "vary-%s" % vary ] | ||
| 48 | result = measurement[base_type] | ||
| 49 | |||
| 50 | self.__update_node(path, keys, (vary_value, result)) | ||
| 51 | |||
| 52 | |||
| 53 | |||
| 54 | def reduce(self): | ||
| 55 | def reduce2(node): | ||
| 56 | for key in node.children.keys(): | ||
| 57 | child = node.children[key] | ||
| 58 | reduce2(child) | ||
| 59 | if not (child.children or child.values): | ||
| 60 | node.children.pop(key) | ||
| 61 | |||
| 62 | if len(node.values) == 1: | ||
| 63 | node.values = [] | ||
| 64 | |||
| 65 | reduce2(self.root) | ||
| 66 | |||
| 67 | def write(self): | ||
| 68 | def write2(path, node): | ||
| 69 | out_path = "/".join(path) | ||
| 70 | if node.values: | ||
| 71 | # Leaf | ||
| 72 | with open("/".join(path), "w") as f: | ||
| 73 | arr = [",".join([str(b) for b in n]) for n in node.values] | ||
| 74 | f.write("\n".join(arr) + "\n") | ||
| 75 | elif not os.path.isdir(out_path): | ||
| 76 | os.mkdir(out_path) | ||
| 77 | |||
| 78 | for (key, child) in node.children.iteritems(): | ||
| 79 | path.append(key) | ||
| 80 | write2(path, child) | ||
| 81 | path.pop() | ||
| 82 | |||
| 83 | |||
| 84 | write2([self.out_dir], self.root) | ||
| 85 | |||
| 86 | |||
| 87 | def __str__(self): | ||
| 88 | def str2(node, level): | ||
| 89 | header = " " * level | ||
| 90 | ret = "" | ||
| 91 | if not node.children: | ||
| 92 | return "%s%s\n" % (header, str(node.values) if node.values else "") | ||
| 93 | for key,child in node.children.iteritems(): | ||
| 94 | ret += "%s/%s\n" % (header, key) | ||
| 95 | ret += str2(child, level + 1) | ||
| 96 | return ret | ||
| 97 | |||
| 98 | return "%s\n%s" % (self.out_dir, str2(self.root, 1)) | ||
| 99 | |||
| 100 | |||
| 101 | |||
| 102 | |||
| 103 | |||
| 104 | |||
