aboutsummaryrefslogtreecommitdiffstats
path: root/gen/edf_generators.py
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2013-03-30 11:28:51 -0400
committerJonathan Herman <hermanjl@cs.unc.edu>2013-04-02 10:38:21 -0400
commit4b75d2b98036195b78d339210ab8d7512d9f2164 (patch)
treef7de0e91372f760ab8972c5e280023d57abb6b91 /gen/edf_generators.py
parentcb0dda981282df08c544e235f0fefb077268272c (diff)
Added option to ignore environment issues and rewrote part of the generation scripts for easier generator creation.
Diffstat (limited to 'gen/edf_generators.py')
-rw-r--r--gen/edf_generators.py30
1 files changed, 12 insertions, 18 deletions
diff --git a/gen/edf_generators.py b/gen/edf_generators.py
index c7267f7..9bf6b8f 100644
--- a/gen/edf_generators.py
+++ b/gen/edf_generators.py
@@ -1,15 +1,20 @@
1import generator as gen 1import generator as gen
2import random 2import random
3import schedcat.generator.tasks as tasks 3
4TP_TBASE = """#for $t in $task_set
5{} $t.cost $t.period
6#end for"""
7TP_GLOB_TASK = TP_TBASE.format("")
8TP_PART_TASK = TP_TBASE.format("-p $t.cpu")
4 9
5class EdfGenerator(gen.Generator): 10class EdfGenerator(gen.Generator):
6 '''Creates sporadic task sets with the most common Litmus options.''' 11 '''Creates sporadic task sets with the most common Litmus options.'''
7 def __init__(self, name, templates, options, params): 12 def __init__(self, name, templates, options, params):
8 super(EdfGenerator, self).__init__(name, templates, 13 super(EdfGenerator, self).__init__(name, templates,
9 self.__make_options(params) + options, 14 self.__make_options() + options,
10 params) 15 params)
11 16
12 def __make_options(self, params): 17 def __make_options(self):
13 '''Return generic EDF options.''' 18 '''Return generic EDF options.'''
14 return [gen.Generator._dist_option('utils', ['uni-medium'], 19 return [gen.Generator._dist_option('utils', ['uni-medium'],
15 gen.NAMED_UTILIZATIONS, 20 gen.NAMED_UTILIZATIONS,
@@ -26,23 +31,12 @@ class EdfGenerator(gen.Generator):
26 udist = self._create_dist('utilization', 31 udist = self._create_dist('utilization',
27 exp_params['utils'], 32 exp_params['utils'],
28 gen.NAMED_UTILIZATIONS) 33 gen.NAMED_UTILIZATIONS)
29 tg = tasks.TaskGenerator(period=pdist, util=udist)
30 34
31 ts = [] 35 ts = self._create_taskset(exp_params, pdist, udist)
32 tries = 0
33 while len(ts) != exp_params['num_tasks'] and tries < 5:
34 ts = tg.make_task_set(max_tasks = exp_params['num_tasks'])
35 tries += 1
36 if len(ts) != exp_params['num_tasks']:
37 print("Failed to create task set with parameters: %s" % exp_params)
38 36
39 self._customize(ts, exp_params) 37 self._customize(ts, exp_params)
40 38
41 exp_params['task_set'] = ts 39 self._write_schedule(dict(exp_params.items() + ('task_set', ts)))
42 self._write_schedule(exp_params)
43
44 del exp_params['task_set']
45 del exp_params['num_tasks']
46 self._write_params(exp_params) 40 self._write_params(exp_params)
47 41
48 def _customize(self, taskset, exp_params): 42 def _customize(self, taskset, exp_params):
@@ -53,7 +47,7 @@ class EdfGenerator(gen.Generator):
53class PartitionedGenerator(EdfGenerator): 47class PartitionedGenerator(EdfGenerator):
54 def __init__(self, name, templates, options, params): 48 def __init__(self, name, templates, options, params):
55 super(PartitionedGenerator, self).__init__(name, 49 super(PartitionedGenerator, self).__init__(name,
56 templates + [gen.TP_PART_TASK], options, params) 50 templates + [TP_PART_TASK], options, params)
57 51
58 def _customize(self, taskset, exp_params): 52 def _customize(self, taskset, exp_params):
59 start = 1 if exp_params['release_master'] else 0 53 start = 1 if exp_params['release_master'] else 0
@@ -78,5 +72,5 @@ class CedfGenerator(PartitionedGenerator):
78 72
79class GedfGenerator(EdfGenerator): 73class GedfGenerator(EdfGenerator):
80 def __init__(self, params={}): 74 def __init__(self, params={}):
81 super(GedfGenerator, self).__init__("GSN-EDF", [gen.TP_GLOB_TASK], 75 super(GedfGenerator, self).__init__("GSN-EDF", [TP_GLOB_TASK],
82 [], params) 76 [], params)