diff options
Diffstat (limited to 'Simulator/src/simulation')
| -rw-r--r-- | Simulator/src/simulation/workloads/Workload.cpp | 47 | ||||
| -rw-r--r-- | Simulator/src/simulation/workloads/WorkloadPool.cpp | 69 |
2 files changed, 116 insertions, 0 deletions
diff --git a/Simulator/src/simulation/workloads/Workload.cpp b/Simulator/src/simulation/workloads/Workload.cpp new file mode 100644 index 00000000..b6a3b2d0 --- /dev/null +++ b/Simulator/src/simulation/workloads/Workload.cpp @@ -0,0 +1,47 @@ +#include "simulation/workloads/Workload.h" + +#include <iostream> + +namespace Simulation +{ + Workload::Workload(int size, int startTick, int dbId, int traceId, int dependency) : dependencyId(dependency), remainingFlops(size), TOTAL_FLOPS(size), START_TICK(startTick), ID(dbId), TRACE_ID(traceId) {} + + void Workload::doOperations(uint32_t opCount) + { + if (opCount < 0 || finished) return; + + if (remainingFlops <= opCount) + { + remainingFlops = 0; + finished = true; + } + else + { + remainingFlops -= opCount; + } + } + + uint32_t Workload::getRemainingOperations() const + { + return remainingFlops; + } + + uint32_t Workload::getTotalOperations() const + { + return TOTAL_FLOPS; + } + + bool Workload::isFinished() const + { + return this->finished; + } + uint32_t Workload::getId() const + { + return ID; + } + + int Workload::getDependencyId() const + { + return this->dependencyId; + } +} diff --git a/Simulator/src/simulation/workloads/WorkloadPool.cpp b/Simulator/src/simulation/workloads/WorkloadPool.cpp new file mode 100644 index 00000000..c4910c7f --- /dev/null +++ b/Simulator/src/simulation/workloads/WorkloadPool.cpp @@ -0,0 +1,69 @@ +#include "simulation/workloads/WorkloadPool.h" + +#include <iostream> +#include <algorithm> + +namespace Simulation +{ + void WorkloadPool::addWorkload(Workload w) + { + workloads.push_back(w); + } + + std::vector<Workload*> WorkloadPool::getWorkloads(uint32_t currentTick) + { + std::vector<Workload*> filteredOnStarted; + for(Workload& w : workloads) + { + if(w.getStartTick() < currentTick) + filteredOnStarted.push_back(&w); + } + + return filteredOnStarted; + } + + Workload& WorkloadPool::getWorkload(int id) + { + auto it = std::find_if(workloads.begin(), workloads.end(), [id](Workload& w) { + return (id == w.getId()); + }); + + return *it; + } + + void WorkloadPool::clearFinishedWorkloads() + { + auto it = workloads.begin(); + while(it != workloads.end()) + { + if(it->isFinished()) + { + std::cout << "Finished workload " << it->getId() << std::endl; + int id = it->getId(); + setDependenciesFinished(id); + it = workloads.erase(it); + } + else + { + ++it; + } + } + } + + void WorkloadPool::setDependenciesFinished(int id) + { + for(auto& workload : workloads) + { + if(workload.getDependencyId() == id) + { + workload.dependencyFinished = true; + std::cout << "Finished dependency of " << workload.getId() << std::endl; + } + } + } + + bool WorkloadPool::isEmpty() + { + return this->workloads.size() == 0; + } +} |
