aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2014-02-21 01:11:47 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2014-02-21 01:11:47 -0500
commit77474dbbf1b2589e3a93d9ef47c19d326eae52b5 (patch)
treeaa87f197a24149f02865006df68cf7d2ddf81720
parent2205f6ad1c943137a1ce0f1dd2807fb84870d98b (diff)
Try to compute tighter bounds with uniprocessorswip-ecrts14-pgm
-rw-r--r--schedcat/sched/edf/gel_pl.py30
1 files changed, 22 insertions, 8 deletions
diff --git a/schedcat/sched/edf/gel_pl.py b/schedcat/sched/edf/gel_pl.py
index 2349f7b..62a5229 100644
--- a/schedcat/sched/edf/gel_pl.py
+++ b/schedcat/sched/edf/gel_pl.py
@@ -54,18 +54,32 @@ def compute_gedf_response_details(no_cpus, tasks, rounds):
54 return compute_response_details(no_cpus, tasks, rounds) 54 return compute_response_details(no_cpus, tasks, rounds)
55 55
56def compute_response_details(no_cpus, tasks, rounds): 56def compute_response_details(no_cpus, tasks, rounds):
57 if (no_cpus == 1) and forall(tasks)(lambda t: t.prio_pt == t.period): 57# if (no_cpus == 1) and forall(tasks)(lambda t: t.prio_pt == t.period):
58 details = AnalysisDetails(tasks) 58# details = AnalysisDetails(tasks)
59 details.bounds = [task.period for task in tasks] 59# details.bounds = [task.period for task in tasks]
60 details.S_i = [0.0 for task in tasks] 60# details.S_i = [0.0 for task in tasks]
61 details.G_i = [0.0 for task in tasks] 61# details.G_i = [0.0 for task in tasks]
62 return details 62# return details
63 details = None
63 if schedcat.sched.using_native: 64 if schedcat.sched.using_native:
64 native_ts = schedcat.sched.get_native_taskset(tasks) 65 native_ts = schedcat.sched.get_native_taskset(tasks)
65 gel_obj = native.GELPl(no_cpus, native_ts, rounds) 66 gel_obj = native.GELPl(no_cpus, native_ts, rounds)
66 return AnalysisDetails(tasks, gel_obj) 67 details = AnalysisDetails(tasks, gel_obj)
67 else: 68 else:
68 return compute_response_bounds(no_cpus, tasks, rounds) 69 details = compute_response_bounds(no_cpus, tasks, rounds)
70 if (no_cpus == 1) and forall(tasks)(lambda t: t.prio_pt == t.period):
71 # compute bounds for optimal uniprocessor
72 details2 = AnalysisDetails(tasks)
73 details2.bounds = [task.period for task in tasks]
74 # use the optimal bounds if the computed bound is ever
75 # greater than optimal bound (period)
76 for computed_bound, optimal_bound in zip(details.bounds, details2.bounds):
77 if computed_bound > optimal_bound:
78 details2.S_i = [0.0] * len(tasks)
79 details2.G_i = [0.0] * len(tasks)
80 details = details2
81 break
82 return details
69 83
70def compute_response_bounds(no_cpus, tasks, rounds): 84def compute_response_bounds(no_cpus, tasks, rounds):
71 """This function computes response time bounds for the given set of tasks 85 """This function computes response time bounds for the given set of tasks