diff options
Diffstat (limited to 'parse_exps.py')
-rwxr-xr-x | parse_exps.py | 38 |
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 | |||
16 | from parse.point import ExpPoint | 16 | from parse.point import ExpPoint |
17 | from parse.tuple_table import ColMap,TupleTable | 17 | from parse.tuple_table import ColMap,TupleTable |
18 | 18 | ||
19 | # TODO: make 2-level graph optional | ||
20 | |||
19 | def parse_args(): | 21 | def 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 | ||
112 | PAGE_SIZE=4092 | ||
113 | PROCS=4 | ||
114 | def 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 | |||
110 | def main(): | 123 | def 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 | ||
180 | if __name__ == '__main__': | 214 | if __name__ == '__main__': |
181 | main() | 215 | main() |