aboutsummaryrefslogtreecommitdiffstats
path: root/gen
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2013-04-08 16:42:43 -0400
committerJonathan Herman <hermanjl@cs.unc.edu>2013-04-08 16:42:43 -0400
commit40df618c33f56fcdcbc9afc1f4b963e7dfe23a10 (patch)
tree2a58d482d3fdf8d8dcdd1aaa3ecd9def7a803a09 /gen
parent2ddd4b06389b7dde8c8fbb43b19b23fde5c40b22 (diff)
Create generator map in gen/__init__.py.
Diffstat (limited to 'gen')
-rw-r--r--gen/__init__.py6
-rw-r--r--gen/edf_generators.py8
-rw-r--r--gen/generator.py25
3 files changed, 27 insertions, 12 deletions
diff --git a/gen/__init__.py b/gen/__init__.py
index e69de29..8c60b46 100644
--- a/gen/__init__.py
+++ b/gen/__init__.py
@@ -0,0 +1,6 @@
1import generator as gen
2import edf_generators as edf
3
4gen.register_generator("G-EDF", edf.GedfGenerator)
5gen.register_generator("P-EDF", edf.PedfGenerator)
6gen.register_generator("C-EDF", edf.CedfGenerator)
diff --git a/gen/edf_generators.py b/gen/edf_generators.py
index 78b0ba1..3f05b76 100644
--- a/gen/edf_generators.py
+++ b/gen/edf_generators.py
@@ -9,8 +9,8 @@ TP_PART_TASK = TP_TBASE.format("-p $t.cpu")
9 9
10class EdfGenerator(gen.Generator): 10class EdfGenerator(gen.Generator):
11 '''Creates sporadic task sets with the most common Litmus options.''' 11 '''Creates sporadic task sets with the most common Litmus options.'''
12 def __init__(self, name, templates, options, params): 12 def __init__(self, scheduler, templates, options, params):
13 super(EdfGenerator, self).__init__(name, templates, 13 super(EdfGenerator, self).__init__(scheduler, templates,
14 self.__make_options() + options, 14 self.__make_options() + options,
15 params) 15 params)
16 16
@@ -45,8 +45,8 @@ class EdfGenerator(gen.Generator):
45 45
46 46
47class PartitionedGenerator(EdfGenerator): 47class PartitionedGenerator(EdfGenerator):
48 def __init__(self, name, templates, options, params): 48 def __init__(self, scheduler, templates, options, params):
49 super(PartitionedGenerator, self).__init__(name, 49 super(PartitionedGenerator, self).__init__(scheduler,
50 templates + [TP_PART_TASK], options, params) 50 templates + [TP_PART_TASK], options, params)
51 51
52 def _customize(self, taskset, exp_params): 52 def _customize(self, taskset, exp_params):
diff --git a/gen/generator.py b/gen/generator.py
index 56563b1..f35a22b 100644
--- a/gen/generator.py
+++ b/gen/generator.py
@@ -51,14 +51,14 @@ class Generator(object):
51 This class also performs checks of parameter values and prints out help. 51 This class also performs checks of parameter values and prints out help.
52 All subclasses must implement _create_exp. 52 All subclasses must implement _create_exp.
53 ''' 53 '''
54 def __init__(self, name, templates, options, params): 54 def __init__(self, scheduler, templates, options, params):
55 self.options = self.__make_options(params) + options 55 self.options = self.__make_options(params) + options
56 56
57 self.__setup_params(params) 57 self.__setup_params(params)
58 58
59 self.params = params 59 self.params = params
60 self.template = "\n".join([TP_RM] + templates) 60 self.template = "\n".join([TP_RM] + templates)
61 self.name = name 61 self.scheduler = scheduler
62 62
63 def __make_options(self, params): 63 def __make_options(self, params):
64 '''Return generic Litmus options.''' 64 '''Return generic Litmus options.'''
@@ -137,7 +137,7 @@ class Generator(object):
137 137
138 exp_params_file = self.out_dir + "/" + DEFAULTS['params_file'] 138 exp_params_file = self.out_dir + "/" + DEFAULTS['params_file']
139 with open(exp_params_file, 'wa') as f: 139 with open(exp_params_file, 'wa') as f:
140 params['scheduler'] = self.name 140 params['scheduler'] = self.scheduler
141 pprint.pprint(params, f) 141 pprint.pprint(params, f)
142 142
143 if tasks: 143 if tasks:
@@ -210,7 +210,7 @@ class Generator(object):
210 for dp in DesignPointGenerator(self.params): 210 for dp in DesignPointGenerator(self.params):
211 for trial in xrange(trials): 211 for trial in xrange(trials):
212 # Create directory name from relevant parameters 212 # Create directory name from relevant parameters
213 dir_leaf = "sched=%s_%s" % (self.name, col_map.encode(dp)) 213 dir_leaf = "sched=%s_%s" % (self.scheduler, col_map.encode(dp))
214 dir_leaf = dir_leaf.strip('_') # If there are none 214 dir_leaf = dir_leaf.strip('_') # If there are none
215 dir_leaf += ("_trial=%s" % trial) if trials > 1 else "" 215 dir_leaf += ("_trial=%s" % trial) if trials > 1 else ""
216 216
@@ -239,12 +239,12 @@ class Generator(object):
239 239
240 def print_help(self): 240 def print_help(self):
241 display_options = [o for o in self.options if not o.hidden] 241 display_options = [o for o in self.options if not o.hidden]
242 s = str(Template("""Generator $name: 242 s = str(Template("""scheduler $scheduler:
243 #for $o in $options 243 #for $o in $options
244 $o.name -- $o.help 244 $o.name -- $o.help
245 \tDefault: $o.default 245 \tDefault: $o.default
246 \tAllowed: $o.types 246 \tAllowed: $o.types
247 #end for""", searchList={'name':self.name, 'options':display_options})) 247 #end for""", searchList={'scheduler':self.scheduler, 'options':display_options}))
248 248
249 # Has to be an easier way to print this out... 249 # Has to be an easier way to print this out...
250 for line in s.split("\n"): 250 for line in s.split("\n"):
@@ -258,3 +258,12 @@ class Generator(object):
258 res = [" "*Generator.HELP_INDENT +res[-1]] 258 res = [" "*Generator.HELP_INDENT +res[-1]]
259 i = Generator.HELP_INDENT + len(word) 259 i = Generator.HELP_INDENT + len(word)
260 print(", ".join(res)) 260 print(", ".join(res))
261
262
263generators = {}
264
265def register_generator(name, clazz):
266 generators[name] = clazz
267
268def get_generators():
269 return generators