diff options
Diffstat (limited to 'Simulator/src/modeling/machine')
| -rw-r--r-- | Simulator/src/modeling/machine/CPU.cpp | 26 | ||||
| -rw-r--r-- | Simulator/src/modeling/machine/GPU.cpp | 26 | ||||
| -rw-r--r-- | Simulator/src/modeling/machine/Machine.cpp | 80 |
3 files changed, 132 insertions, 0 deletions
diff --git a/Simulator/src/modeling/machine/CPU.cpp b/Simulator/src/modeling/machine/CPU.cpp new file mode 100644 index 00000000..6167b133 --- /dev/null +++ b/Simulator/src/modeling/machine/CPU.cpp @@ -0,0 +1,26 @@ +#include "modeling/machine/CPU.h" + +namespace Modeling +{ + CPU::CPU(int speed, int cores, int energyConsumption, int failureModelId) : speed(speed), cores(cores), energyConsumption(energyConsumption), failureModelId(failureModelId) {} + + int CPU::getCores() + { + return this->cores; + } + + int CPU::getEnergyConsumption() + { + return this->energyConsumption; + } + + int CPU::getFailureModelId() + { + return this->failureModelId; + } + + int CPU::getSpeed() + { + return this->speed; + } +} diff --git a/Simulator/src/modeling/machine/GPU.cpp b/Simulator/src/modeling/machine/GPU.cpp new file mode 100644 index 00000000..8458925b --- /dev/null +++ b/Simulator/src/modeling/machine/GPU.cpp @@ -0,0 +1,26 @@ +#include "modeling/machine/GPU.h" + +namespace Modeling +{ + GPU::GPU(int speed, int cores, int energyConsumption, int failureModelId) : speed(speed), cores(cores), energyConsumption(energyConsumption), failureModelId(failureModelId) {} + + int GPU::getCores() + { + return this->cores; + } + + int GPU::getEnergyConsumption() + { + return this->energyConsumption; + } + + int GPU::getFailureModelId() + { + return this->failureModelId; + } + + int GPU::getSpeed() + { + return this->speed; + } +} diff --git a/Simulator/src/modeling/machine/Machine.cpp b/Simulator/src/modeling/machine/Machine.cpp new file mode 100644 index 00000000..d7d4fac7 --- /dev/null +++ b/Simulator/src/modeling/machine/Machine.cpp @@ -0,0 +1,80 @@ +#include "modeling/machine/Machine.h" + +namespace Modeling +{ + Machine::Machine(int id) : busy(false), currentWorkload(), id(id) + {} + + void Machine::addCPU(CPU c) + { + cpus.push_back(c); + } + + void Machine::addGPU(GPU g) + { + gpus.push_back(g); + } + + void Machine::giveTask(Simulation::Workload* workload) + { + busy = true; + currentWorkload = workload; + } + + bool Machine::isBusy() const + { + return this->busy; + } + + uint32_t Machine::getSpeed() + { + int speed = 0; + for(auto cpu : cpus) + { + speed += cpu.getSpeed() * cpu.getCores(); + } + return speed; + } + + void Machine::work() + { + if(!currentWorkload) + return; + + currentWorkload->doOperations(static_cast<int>(getSpeed() * load)); + + temperature += load * temperatureIncrease; + //load = temperature < 70.0f ? 1.0f : 1.0f / (temperature - 69.0f); + load = 1.0f; + temperature = temperature > maxTemperature ? maxTemperature + : temperature < minTemperature ? minTemperature + : temperature; + } + + int Machine::getWorkloadId() const + { + if(currentWorkload) + return currentWorkload->getId(); + return 0; + } + + int Machine::getId() const + { + return this->id; + } + + float Machine::getTemperature() const + { + return this->temperature; + } + + int Machine::getMemory() const + { + return this->memory; + } + + float Machine::getLoad() const + { + return this->load; + } +} |
