summaryrefslogtreecommitdiff
path: root/Simulator/include/simulation/schedulers/FirstInFirstOutScheduler.h
diff options
context:
space:
mode:
authorMatthijs Bijman <matthijs@bijman.org>2017-02-27 15:19:15 +0100
committerMatthijs Bijman <matthijs@bijman.org>2017-02-27 15:19:15 +0100
commit34aaaad34e72c921ea72d7b023e5a5270e76dd40 (patch)
tree64c65d557c5323a23f4ce6f31b20da744d44badb /Simulator/include/simulation/schedulers/FirstInFirstOutScheduler.h
parentcc5c5a7eac0ebcf97c283e1e0dd1674c855a261a (diff)
Add tasks that run on 1 machine
Diffstat (limited to 'Simulator/include/simulation/schedulers/FirstInFirstOutScheduler.h')
-rw-r--r--Simulator/include/simulation/schedulers/FirstInFirstOutScheduler.h19
1 files changed, 17 insertions, 2 deletions
diff --git a/Simulator/include/simulation/schedulers/FirstInFirstOutScheduler.h b/Simulator/include/simulation/schedulers/FirstInFirstOutScheduler.h
index 797eb489..5d277c8d 100644
--- a/Simulator/include/simulation/schedulers/FirstInFirstOutScheduler.h
+++ b/Simulator/include/simulation/schedulers/FirstInFirstOutScheduler.h
@@ -22,8 +22,10 @@ namespace Simulation
// Find the first workload with dependencies finished
int index = 0;
- while(!workloads.at(index)->dependencyFinished)
- index = (++index) % workloads.size();
+
+ std::remove_if(workloads.begin(), workloads.end(), [](Workload* workload) {
+ return !workload->dependencyFinished;
+ });
// Reset the number of cores used for each workload
for (auto workload : workloads)
@@ -38,6 +40,19 @@ namespace Simulation
workloads.at(index)->setCoresUsed(
workloads.at(index)->getCoresUsed() + machine.get().getNumberOfCores()
);
+
+ if (!workloads.at(index)->isParallelizable())
+ {
+ workloads.erase(workloads.begin() + index);
+ if (workloads.size() == 0)
+ break;
+
+ index %= workloads.size();
+ }
+ else
+ {
+ index = (++index) % workloads.size();
+ }
}
}
};