diff options
| author | Glenn Elliott <gelliott@cs.unc.edu> | 2014-01-02 10:50:27 -0500 |
|---|---|---|
| committer | Glenn Elliott <gelliott@cs.unc.edu> | 2014-01-02 10:50:27 -0500 |
| commit | 57d87fed3fafd55ae34ddd35cfbeea8fb9c0d26e (patch) | |
| tree | 00bdd6e0ca3f7d71029dbde36c69ad43de78925a /gen | |
| parent | de754b0a0a56b10eeb14305358f58a275eaa262c (diff) | |
Script updates.
Diffstat (limited to 'gen')
| -rw-r--r-- | gen/__init__.py | 1 | ||||
| -rw-r--r-- | gen/edf_generators.py | 40 |
2 files changed, 41 insertions, 0 deletions
diff --git a/gen/__init__.py b/gen/__init__.py index 8c60b46..654ac19 100644 --- a/gen/__init__.py +++ b/gen/__init__.py | |||
| @@ -4,3 +4,4 @@ import edf_generators as edf | |||
| 4 | gen.register_generator("G-EDF", edf.GedfGenerator) | 4 | gen.register_generator("G-EDF", edf.GedfGenerator) |
| 5 | gen.register_generator("P-EDF", edf.PedfGenerator) | 5 | gen.register_generator("P-EDF", edf.PedfGenerator) |
| 6 | gen.register_generator("C-EDF", edf.CedfGenerator) | 6 | gen.register_generator("C-EDF", edf.CedfGenerator) |
| 7 | gen.register_generator("C-FL-split", edf.CflSplitGenerator) | ||
diff --git a/gen/edf_generators.py b/gen/edf_generators.py index 8e4b8df..ce99d05 100644 --- a/gen/edf_generators.py +++ b/gen/edf_generators.py | |||
| @@ -6,6 +6,7 @@ TP_TBASE = """#for $t in $task_set | |||
| 6 | #end for""" | 6 | #end for""" |
| 7 | TP_GLOB_TASK = TP_TBASE.format("") | 7 | TP_GLOB_TASK = TP_TBASE.format("") |
| 8 | TP_PART_TASK = TP_TBASE.format("-p $t.cpu") | 8 | TP_PART_TASK = TP_TBASE.format("-p $t.cpu") |
| 9 | TP_CLST_TASK = TP_TBASE.format("-p $t.cluster -z $t.cluster_sz") | ||
| 9 | 10 | ||
| 10 | class EdfGenerator(gen.Generator): | 11 | class EdfGenerator(gen.Generator): |
| 11 | '''Creates sporadic task sets with the most common Litmus options.''' | 12 | '''Creates sporadic task sets with the most common Litmus options.''' |
| @@ -83,6 +84,45 @@ class CedfGenerator(PartitionedGenerator): | |||
| 83 | [CedfGenerator.CLUSTER_OPTION], | 84 | [CedfGenerator.CLUSTER_OPTION], |
| 84 | params) | 85 | params) |
| 85 | 86 | ||
| 87 | class CflSplitGenerator(EdfGenerator): | ||
| 88 | TP_CLUSTER = "plugins/C-FL-split/cluster{$level}" | ||
| 89 | CLUSTER_OPTION = gen.GenOption('level', ['L1', 'L2', 'L3', 'ALL'], 'L2', | ||
| 90 | 'Cache clustering level.',) | ||
| 91 | # CLUSTER_SZ_OPTION = gen.GenOption('cluster_size', ['1', '2', '6', '24'], '2', | ||
| 92 | # 'Cluster size.',) | ||
| 93 | |||
| 94 | def __init__(self, params={}): | ||
| 95 | super(CflSplitGenerator, self).__init__("C-FL-split", | ||
| 96 | [CflSplitGenerator.TP_CLUSTER, TP_CLST_TASK], | ||
| 97 | [CflSplitGenerator.CLUSTER_OPTION], | ||
| 98 | params) | ||
| 99 | |||
| 100 | def _customize(self, taskset, exp_params): | ||
| 101 | cpus = int(exp_params['cpus']) | ||
| 102 | # cluster_sz = int(exp_params['cluster_size']) | ||
| 103 | |||
| 104 | if exp_params['level'] == 'L1': | ||
| 105 | cluster_sz = 1 | ||
| 106 | elif exp_params['level'] == 'L2': | ||
| 107 | cluster_sz = 2 | ||
| 108 | elif exp_params['level'] == 'L3': | ||
| 109 | cluster_sz = 6 | ||
| 110 | elif exp_params['level'] == 'ALL': | ||
| 111 | cluster_sz = 24 | ||
| 112 | else: | ||
| 113 | assert False | ||
| 114 | |||
| 115 | num_clusters = cpus / cluster_sz | ||
| 116 | assert num_clusters * cluster_sz == cpus | ||
| 117 | |||
| 118 | utils = [0]*num_clusters | ||
| 119 | tasks = [0]*num_clusters | ||
| 120 | for t in taskset: | ||
| 121 | t.cluster = utils.index(min(utils)) | ||
| 122 | t.cluster_sz = cluster_sz | ||
| 123 | utils[t.cluster] += t.utilization() | ||
| 124 | tasks[t.cluster] += 1 | ||
| 125 | |||
| 86 | class GedfGenerator(EdfGenerator): | 126 | class GedfGenerator(EdfGenerator): |
| 87 | def __init__(self, params={}): | 127 | def __init__(self, params={}): |
| 88 | super(GedfGenerator, self).__init__("GSN-EDF", [TP_GLOB_TASK], | 128 | super(GedfGenerator, self).__init__("GSN-EDF", [TP_GLOB_TASK], |
