aboutsummaryrefslogtreecommitdiffstats
path: root/parse_exps.py
diff options
context:
space:
mode:
Diffstat (limited to 'parse_exps.py')
-rwxr-xr-xparse_exps.py38
1 files changed, 36 insertions, 2 deletions
diff --git a/parse_exps.py b/parse_exps.py
index 87d0783..6a07ebc 100755
--- a/parse_exps.py
+++ b/parse_exps.py
@@ -16,6 +16,8 @@ from optparse import OptionParser
16from parse.point import ExpPoint 16from parse.point import ExpPoint
17from parse.tuple_table import ColMap,TupleTable 17from parse.tuple_table import ColMap,TupleTable
18 18
19# TODO: make 2-level graph optional
20
19def parse_args(): 21def parse_args():
20 # TODO: convert data-dir to proper option, clean 'dest' options 22 # TODO: convert data-dir to proper option, clean 'dest' options
21 parser = OptionParser("usage: %prog [options] [data_dir]...") 23 parser = OptionParser("usage: %prog [options] [data_dir]...")
@@ -107,6 +109,17 @@ def gen_exp_data(exp_dirs, base_conf, col_map, force):
107 sys.stderr.write('\n') 109 sys.stderr.write('\n')
108 return (plain_exps, scaling_bases) 110 return (plain_exps, scaling_bases)
109 111
112PAGE_SIZE=4092
113PROCS=4
114def compute_loops(util, dist, cost, wss):
115 scale = PROCS * dist / util
116 cost *= scale
117 pages = wss / PAGE_SIZE
118 per_loop = .023 * pages
119 loops = int(cost / per_loop) + 1
120 loops = loops + (5 - loops % 5)
121 return loops
122
110def main(): 123def main():
111 opts, args = parse_args() 124 opts, args = parse_args()
112 125
@@ -129,8 +142,14 @@ def main():
129 for param in opts.ignore.split(","): 142 for param in opts.ignore.split(","):
130 col_map.try_remove(param) 143 col_map.try_remove(param)
131 144
145 # Begin coupling
146 loop_map = copy.deepcopy(col_map)
147 loop_map.try_remove('num_tasks')
148 loop_map.force_add('loops')
149
132 base_table = TupleTable(base_map) # For tracking 'base' experiments 150 base_table = TupleTable(base_map) # For tracking 'base' experiments
133 result_table = TupleTable(col_map) # For generating output 151 result_table = TupleTable(col_map) # For generating output
152 loop_table = TupleTable(loop_map) # For by-reuse scaling factor
134 153
135 # Used to find matching scaling_base for each experiment 154 # Used to find matching scaling_base for each experiment
136 for base in scaling_bases: 155 for base in scaling_bases:
@@ -153,8 +172,17 @@ def main():
153 base = base_table.get_exps(base_params)[0] 172 base = base_table.get_exps(base_params)[0]
154 173
155 # Write deadline misses / tardiness into result 174 # Write deadline misses / tardiness into result
156 st.extract_sched_data(exp.data_files.st, result, 175 sret = st.extract_sched_data(exp.data_files.st, result,
157 base.data_files.st if base else None) 176 base.data_files.st if base else None)
177 # Terrible
178 if sret:
179 for wcet, points in sret.wcet_scales.iteritems():
180 loop_params = copy.deepcopy(exp.params)
181 # loops = compute_loops(sret.util, float(exp.params['hrt_dist']),
182 # wcet, float(exp.params['wss']))
183 # loop_params['loops'] = loops# * int(exp.params['wss'])
184 for point in points:
185 loop_table.add_exp(loop_params, point)
158 186
159 result_table.add_exp(exp.params, result) 187 result_table.add_exp(exp.params, result)
160 188
@@ -168,14 +196,20 @@ def main():
168 sh.rmtree(opts.out) 196 sh.rmtree(opts.out)
169 197
170 result_table.reduce() 198 result_table.reduce()
199 loop_table.reduce()
171 200
172 sys.stderr.write("Writing result...\n") 201 sys.stderr.write("Writing result...\n")
173 if opts.write_map: 202 if opts.write_map:
174 # Write summarized results into map 203 # Write summarized results into map
175 result_table.write_map(opts.out) 204 result_table.write_map(opts.out)
205 if base_conf:
206 loop_table.write_map(opts.out)
176 else: 207 else:
177 # Write out csv directories for all variable params 208 # Write out csv directories for all variable params
178 result_table.write_csvs(opts.out) 209 result_table.write_csvs(opts.out)
210 if base_conf:
211 loop_table.write_csvs(opts.out)
212
179 213
180if __name__ == '__main__': 214if __name__ == '__main__':
181 main() 215 main()