-
Notifications
You must be signed in to change notification settings - Fork 2
/
ecd.py
95 lines (86 loc) · 3.43 KB
/
ecd.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import debug
rules = [ \
("programs", dict, True), \
("benchmarks", dict, False), \
("argument_variables", dict, False), \
("file_argument_variables", dict, False), \
("core_arguments", str, False), \
("benchmark_argument", str, False), \
("iterations", int, False), \
("filters", dict, False), \
("filter_order", list, False), \
("benchmark_aggregates", dict, False), \
("experiment_aggregates", list, False), \
]
def explain_ecd(suite):
print("marky - Experiments Explanation")
print("-------------------------------")
print()
print("Marky will run the following programs:")
for (program_alias, location) in suite.programs.items():
print(" " + program_alias + " - found at " + location)
print()
print("... with the following benchmarks:")
for (bm_group_name, bm_group) in suite.benchmarks.items():
print(" (benchmark group: " + bm_group_name + ")")
for (bm_name, bm_loc, executescript, timeout) in bm_group:
extra = ""
if executescript:
extra = " with execute script '" + executescript + "'"
if timeout:
extra += " - with timeout: " + str(timeout)
print(" " + bm_name + " - found in " + bm_loc + extra)
print()
print("... changing the following variables:")
for (name, values) in suite.argument_variables.items():
print(" '" + name + "' with values: " + str(values))
for (name, (t,output_file,p,values)) in suite.file_argument_variables.items():
print(" '" + name + "' with values: " + str(values) + " (in config file " + output_file + ")")
print()
print("... running each benchmark " + str(suite.iterations) + " times.")
print()
print("... with the core arguments '" + str(suite.core_arguments) + "'")
print()
print("... running the following filters:")
for (filter_name, f) in suite.filters.items():
print(" " + filter_name)
print()
print("... using the following benchmark aggregates:")
for (aggregate_name, a) in suite.benchmark_aggregates.items():
extra = ""
if (aggregate_name in suite.experiment_aggregates):
extra = " (*** experiment aggregate ***)"
print(" " + aggregate_name + extra)
def check_ecd(suite):
debug.debug_msg(3, "Sanity checking the provided ECD...")
visible_vars = suite.__dict__.keys()
for (var_name, t, cannot_be_empty) in rules:
if var_name not in visible_vars:
debug.warning_msg("'" + var_name + "' variable must be present!")
else:
var = suite.__dict__[var_name]
if type(var) is not t:
debug.warning_msg("'" + var_name + "' must be of type: " + str(t))
if cannot_be_empty and len(var) == 0:
debug.warning_msg("'" + var_name + "' cannot be empty!")
if debug.seen_warnings():
debug.error_msg("Execution Configuration Description was invalid!")
debug.reset_warnings()
def convert_ecd_to_description(suite):
description = {}
description["programs"] = suite.programs
description["benchmarks"] = suite.benchmarks
description["argument variables"] = suite.argument_variables
description["file argument variables"] = suite.file_argument_variables
description["iterations"] = suite.iterations
description["core arguments"] = suite.core_arguments
description["filters"] = []
for (filter_name, f) in suite.filters.items():
description["filters"].append((filter_name, f.pattern))
description["aggregates"] = []
for (aggregate_name, a) in suite.benchmark_aggregates.items():
extra = ""
if (aggregate_name in suite.experiment_aggregates):
extra = " (*** experiment aggregate ***)"
description["aggregates"].append(aggregate_name + extra)
return description