From 120d216964289be78b23a78d08ebfaa0e6f5d565 Mon Sep 17 00:00:00 2001 From: Frederik Lauer Date: Wed, 11 May 2016 23:29:58 +0200 Subject: [PATCH 1/6] IDLE Time in Controller.h --- DRAMSys/simulator/src/controller/Controller.h | 46 ++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/DRAMSys/simulator/src/controller/Controller.h b/DRAMSys/simulator/src/controller/Controller.h index 38a8142e..ae0fccb0 100644 --- a/DRAMSys/simulator/src/controller/Controller.h +++ b/DRAMSys/simulator/src/controller/Controller.h @@ -88,11 +88,14 @@ public: ~Controller() { - delete controllerCore; + delete controllerCore; delete scheduler; } void terminateSimulation(); + + sc_time getIdleTime(); + // ------- CONTROLLER CORE --------- virtual void send(const ScheduledCommand& command, tlm_generic_payload& payload) override; virtual void send(Trigger trigger, sc_time time, tlm_generic_payload& payload) override; @@ -138,6 +141,14 @@ private: DebugManager& debugManager; TlmRecorder *tlmRecorder; + + // Bandwith realted: + sc_time idleStart; + bool idleState = false; + sc_time idleTime; + void startBandwithIdleCollector(); + void endBandwithIdleCollector(); + }; // --- IMPLEMENTATION ----- @@ -353,6 +364,11 @@ tlm_sync_enum Controller::nb_transport_fw(tlm_generic_payload &payload tlmRecorder->recordPhase(payload, phase, recTime); frontendPEQ.notify(payload, phase, notDelay); + + //Bandwith IDLE + if ((getTotalNumberOfPayloadsInSystem()== 0)&& idleState){ + endBandwithIdleCollector(); + } } else if (phase == END_RESP) { @@ -361,6 +377,11 @@ tlm_sync_enum Controller::nb_transport_fw(tlm_generic_payload &payload printDebugMessage("[fw] Recording " + phaseNameToString(phase) + " at " + recTime.to_string() + " notification in " + notDelay.to_string()); + // Badnwith IDLE + if (getTotalNumberOfPayloadsInSystem()==1){ + startBandwithIdleCollector(); + } + tlmRecorder->recordPhase(payload, phase, recTime); frontendPEQ.notify(payload, phase, notDelay); } @@ -378,6 +399,7 @@ void Controller::frontendPEQCallback(tlm_generic_payload &payload, con { if (phase == BEGIN_REQ) { + printDebugMessage(string("Payload in system: ") + to_string(getTotalNumberOfPayloadsInSystem())); payload.acquire(); payloadEntersSystem(payload); if (getTotalNumberOfPayloadsInSystem() > controllerCore->config.MaxNrOfTransactions) @@ -454,7 +476,7 @@ void Controller::scheduleNextFromScheduler(Bank bank) { return; } - + pair nextRequest = scheduler->getNextRequest(bank); if(nextRequest.second != NULL) { @@ -598,5 +620,25 @@ void Controller::terminateSimulation() } } +template +void Controller::startBandwithIdleCollector(){ + printDebugMessage("IDLE Start"); + printDebugMessage("IDLE Time: "+idleTime.to_string()); + idleStart = sc_time_stamp(); + idleState = true; +} + +template +void Controller::endBandwithIdleCollector(){ + printDebugMessage("IDLE End"); + idleTime += sc_time_stamp()-idleStart; + idleState = false; +} +template +sc_time Controller::getIdleTime(){ + printDebugMessage("IDLE Time: "+idleTime.to_string()); + return idleTime; +} + #endif /* CONTROLLERWRAPPER_H_ */ From 05d7c3e737e0eb9e0790a8290be9b708776782c4 Mon Sep 17 00:00:00 2001 From: Frederik Lauer Date: Sun, 15 May 2016 21:29:24 +0200 Subject: [PATCH 2/6] Bandwidth over time calculation --- DRAMSys/simulator/src/controller/Controller.h | 26 +++++++++++++++++-- DRAMSys/simulator/src/simulation/Dram.h | 24 +++++++++++++---- .../simulator/src/simulation/Simulation.cpp | 2 ++ 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/DRAMSys/simulator/src/controller/Controller.h b/DRAMSys/simulator/src/controller/Controller.h index ae0fccb0..77e8c660 100644 --- a/DRAMSys/simulator/src/controller/Controller.h +++ b/DRAMSys/simulator/src/controller/Controller.h @@ -95,6 +95,8 @@ public: void terminateSimulation(); sc_time getIdleTime(); + sc_time getEndTime(); + sc_time getStartTime(); // ------- CONTROLLER CORE --------- virtual void send(const ScheduledCommand& command, tlm_generic_payload& payload) override; @@ -146,6 +148,9 @@ private: sc_time idleStart; bool idleState = false; sc_time idleTime; + sc_time endTime; + sc_time startTime; + int startTimeSet = false; void startBandwithIdleCollector(); void endBandwithIdleCollector(); @@ -444,6 +449,12 @@ void Controller::payloadEntersSystem(tlm_generic_payload &payload) "Payload enters system on bank " + to_string(bank.ID()) + ". Total number of payloads in Controller: " + to_string(getTotalNumberOfPayloadsInSystem())); numberOfPayloadsInSystem[bank]++; + // Set Start Time for Simulation + if (startTimeSet == false){ + printDebugMessage("Simulation Timer Start"); + startTime = sc_time_stamp()-Configuration::getInstance().memSpec.clk; + startTimeSet = true; + } } template @@ -623,15 +634,15 @@ void Controller::terminateSimulation() template void Controller::startBandwithIdleCollector(){ printDebugMessage("IDLE Start"); - printDebugMessage("IDLE Time: "+idleTime.to_string()); idleStart = sc_time_stamp(); + endTime = sc_time_stamp(); idleState = true; } template void Controller::endBandwithIdleCollector(){ printDebugMessage("IDLE End"); - idleTime += sc_time_stamp()-idleStart; + idleTime += sc_time_stamp()-idleStart+ Configuration::getInstance().memSpec.clk; idleState = false; } template @@ -639,6 +650,17 @@ sc_time Controller::getIdleTime(){ printDebugMessage("IDLE Time: "+idleTime.to_string()); return idleTime; } +template +sc_time Controller::getEndTime(){ + printDebugMessage("End Time: "+endTime.to_string()); + return endTime; +} +template +sc_time Controller::getStartTime(){ + printDebugMessage("Start Time: "+startTime.to_string()); + return startTime; +} + #endif /* CONTROLLERWRAPPER_H_ */ diff --git a/DRAMSys/simulator/src/simulation/Dram.h b/DRAMSys/simulator/src/simulation/Dram.h index 6125e25f..dfee1067 100644 --- a/DRAMSys/simulator/src/simulation/Dram.h +++ b/DRAMSys/simulator/src/simulation/Dram.h @@ -48,6 +48,7 @@ #include #include "../common/DebugManager.h" #include "../common/dramExtension.h" +#include "../controller/Controller.h" #include "../controller/core/TimingCalculation.h" #include "../controller/core/configuration/Configuration.h" #include "../common/protocol.h" @@ -87,6 +88,7 @@ struct Dram : sc_module map< unsigned long int, std::array > memory; TlmRecorder *tlmRecorder; + Controller<>* dramController; SC_CTOR(Dram) : tSocket("socket") { @@ -219,12 +221,20 @@ struct Dram : sc_module } // Bandwidth: + sc_time activeTime = numberOfTransactionsServed * Configuration::getInstance().memSpec.BurstLength / Configuration::getInstance().memSpec.DataRate * Configuration::getInstance().memSpec.clk; - double bandwidth = (activeTime/(lastAccess-firstAccess)*100); - - cout << name() << string("\tTotal Bandwidth: \t") + to_string(bandwidth) << " %" << endl; - cout << name() << string("\tTotal Bandwidth/IDLE: \tTODO %") << endl; - + sc_time idleTime = dramController->getIdleTime(); + sc_time endTime = dramController->getEndTime(); + sc_time startTime = dramController->getStartTime(); + double bandwidth = (activeTime/(endTime-startTime)*100); + double bandwidth_IDLE = ((activeTime)/(endTime-startTime-idleTime)*100); + double maxBandwidth = ((Configuration::getInstance().memSpec.BusWidth * 1000 * Configuration::getInstance().memSpec.DataRate)/(Configuration::getInstance().memSpec.clk.to_double()))/1.024; // in GiB/s + cout << name() << string("\tTotal Time: \t") <<(endTime-startTime).to_string() << endl; + cout << name() << string("\tTotal IDLE: \t") < *contr) + { + dramController = contr; + } }; #endif /* DRAM_H_ */ diff --git a/DRAMSys/simulator/src/simulation/Simulation.cpp b/DRAMSys/simulator/src/simulation/Simulation.cpp index d889e233..0260f472 100644 --- a/DRAMSys/simulator/src/simulation/Simulation.cpp +++ b/DRAMSys/simulator/src/simulation/Simulation.cpp @@ -49,6 +49,7 @@ #include "../common/Utils.h" #include "../simulation/StlDataPlayer.h" #include "../simulation/TemperatureController.h" +#include "../Controller/Controller.h" using namespace std; @@ -144,6 +145,7 @@ void Simulation::instantiateModules(const string &traceName, const string &pathT str = "dram" + std::to_string(i); Dram<> *dram = new Dram<>(str.c_str()); dram->setTlmRecorder(tlmRecorders[i]); + dram->setDramController(controllers[i]); drams.push_back(dram); } } From 30ea79f761f8dfb19f720f08da222af06ab05512 Mon Sep 17 00:00:00 2001 From: Frederik Lauer Date: Mon, 30 May 2016 18:18:42 +0200 Subject: [PATCH 3/6] - new Formular for maxBandwidth - Indention corrected --- DRAMSys/simulator/src/controller/Controller.h | 2 +- DRAMSys/simulator/src/simulation/Dram.h | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/DRAMSys/simulator/src/controller/Controller.h b/DRAMSys/simulator/src/controller/Controller.h index 77e8c660..c79060a8 100644 --- a/DRAMSys/simulator/src/controller/Controller.h +++ b/DRAMSys/simulator/src/controller/Controller.h @@ -382,7 +382,7 @@ tlm_sync_enum Controller::nb_transport_fw(tlm_generic_payload &payload printDebugMessage("[fw] Recording " + phaseNameToString(phase) + " at " + recTime.to_string() + " notification in " + notDelay.to_string()); - // Badnwith IDLE + // Badnwith IDLE if (getTotalNumberOfPayloadsInSystem()==1){ startBandwithIdleCollector(); } diff --git a/DRAMSys/simulator/src/simulation/Dram.h b/DRAMSys/simulator/src/simulation/Dram.h index dfee1067..2d201ebe 100644 --- a/DRAMSys/simulator/src/simulation/Dram.h +++ b/DRAMSys/simulator/src/simulation/Dram.h @@ -228,7 +228,8 @@ struct Dram : sc_module sc_time startTime = dramController->getStartTime(); double bandwidth = (activeTime/(endTime-startTime)*100); double bandwidth_IDLE = ((activeTime)/(endTime-startTime-idleTime)*100); - double maxBandwidth = ((Configuration::getInstance().memSpec.BusWidth * 1000 * Configuration::getInstance().memSpec.DataRate)/(Configuration::getInstance().memSpec.clk.to_double()))/1.024; // in GiB/s + // | clk in Mhz e.g. 800 [MHz] | * | DataRate e.g. 2 | * | BusWidth e.g. 8 | / | 1024 | + double maxBandwidth = ( (1000000/Configuration::getInstance().memSpec.clk.to_double()) * Configuration::getInstance().memSpec.DataRate * Configuration::getInstance().memSpec.BusWidth ) / ( 1024 ); cout << name() << string("\tTotal Time: \t") <<(endTime-startTime).to_string() << endl; cout << name() << string("\tTotal IDLE: \t") < Date: Tue, 31 May 2016 00:23:10 +0200 Subject: [PATCH 4/6] Minor changes: printing values with precision 2 printing Units without [ ] --- DRAMSys/simulator/src/simulation/Dram.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DRAMSys/simulator/src/simulation/Dram.h b/DRAMSys/simulator/src/simulation/Dram.h index 2d201ebe..0f860701 100644 --- a/DRAMSys/simulator/src/simulation/Dram.h +++ b/DRAMSys/simulator/src/simulation/Dram.h @@ -216,8 +216,8 @@ struct Dram : sc_module double averagePower = (totalEnergy / sc_time_stamp().to_seconds()) / 1e9; // Print the final total energy and the average power for the simulation - cout << name() << string("\tTotal Energy: \t") + to_string(totalEnergy) + string("\t[pJ]") << endl; - cout << name() << string("\tAverage Power: \t") + to_string(averagePower) + string("\t[mW]") << endl; + cout << name() << string("\tTotal Energy: \t") << fixed < Date: Tue, 31 May 2016 11:02:26 +0200 Subject: [PATCH 5/6] comment "idle time" and "active time" out --- DRAMSys/simulator/src/simulation/Dram.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DRAMSys/simulator/src/simulation/Dram.h b/DRAMSys/simulator/src/simulation/Dram.h index 0f860701..6bc72860 100644 --- a/DRAMSys/simulator/src/simulation/Dram.h +++ b/DRAMSys/simulator/src/simulation/Dram.h @@ -231,8 +231,8 @@ struct Dram : sc_module // | clk in Mhz e.g. 800 [MHz] | * | DataRate e.g. 2 | * | BusWidth e.g. 8 | / | 1024 | double maxBandwidth = ( (1000000/Configuration::getInstance().memSpec.clk.to_double()) * Configuration::getInstance().memSpec.DataRate * Configuration::getInstance().memSpec.BusWidth ) / ( 1024 ); cout << name() << string("\tTotal Time: \t") <<(endTime-startTime).to_string() << endl; - cout << name() << string("\tTotal IDLE: \t") < Date: Tue, 31 May 2016 11:54:52 +0200 Subject: [PATCH 6/6] typos Fixes --- DRAMSys/simulator/src/controller/Controller.h | 16 ++++++++-------- DRAMSys/simulator/src/simulation/Dram.h | 2 +- DRAMSys/simulator/src/simulation/Simulation.cpp | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/DRAMSys/simulator/src/controller/Controller.h b/DRAMSys/simulator/src/controller/Controller.h index c79060a8..39f05d49 100644 --- a/DRAMSys/simulator/src/controller/Controller.h +++ b/DRAMSys/simulator/src/controller/Controller.h @@ -144,15 +144,15 @@ private: DebugManager& debugManager; TlmRecorder *tlmRecorder; - // Bandwith realted: + // Bandwidth realted: sc_time idleStart; bool idleState = false; sc_time idleTime; sc_time endTime; sc_time startTime; int startTimeSet = false; - void startBandwithIdleCollector(); - void endBandwithIdleCollector(); + void startBandwidthIdleCollector(); + void endBandwidthIdleCollector(); }; @@ -370,9 +370,9 @@ tlm_sync_enum Controller::nb_transport_fw(tlm_generic_payload &payload tlmRecorder->recordPhase(payload, phase, recTime); frontendPEQ.notify(payload, phase, notDelay); - //Bandwith IDLE + //Bandwidth IDLE if ((getTotalNumberOfPayloadsInSystem()== 0)&& idleState){ - endBandwithIdleCollector(); + endBandwidthIdleCollector(); } } else if (phase == END_RESP) @@ -384,7 +384,7 @@ tlm_sync_enum Controller::nb_transport_fw(tlm_generic_payload &payload // Badnwith IDLE if (getTotalNumberOfPayloadsInSystem()==1){ - startBandwithIdleCollector(); + startBandwidthIdleCollector(); } tlmRecorder->recordPhase(payload, phase, recTime); @@ -632,7 +632,7 @@ void Controller::terminateSimulation() } template -void Controller::startBandwithIdleCollector(){ +void Controller::startBandwidthIdleCollector(){ printDebugMessage("IDLE Start"); idleStart = sc_time_stamp(); endTime = sc_time_stamp(); @@ -640,7 +640,7 @@ void Controller::startBandwithIdleCollector(){ } template -void Controller::endBandwithIdleCollector(){ +void Controller::endBandwidthIdleCollector(){ printDebugMessage("IDLE End"); idleTime += sc_time_stamp()-idleStart+ Configuration::getInstance().memSpec.clk; idleState = false; diff --git a/DRAMSys/simulator/src/simulation/Dram.h b/DRAMSys/simulator/src/simulation/Dram.h index 6bc72860..94b54be7 100644 --- a/DRAMSys/simulator/src/simulation/Dram.h +++ b/DRAMSys/simulator/src/simulation/Dram.h @@ -75,7 +75,7 @@ struct Dram : sc_module libDRAMPower *DRAMPower; double sumOfEnergyWindows = 0.0; - // Bandwith realted: + // Bandwidth realted: unsigned long long int numberOfTransactionsServed; sc_time firstAccess; sc_time lastAccess; diff --git a/DRAMSys/simulator/src/simulation/Simulation.cpp b/DRAMSys/simulator/src/simulation/Simulation.cpp index 0260f472..964c6fc4 100644 --- a/DRAMSys/simulator/src/simulation/Simulation.cpp +++ b/DRAMSys/simulator/src/simulation/Simulation.cpp @@ -49,7 +49,7 @@ #include "../common/Utils.h" #include "../simulation/StlDataPlayer.h" #include "../simulation/TemperatureController.h" -#include "../Controller/Controller.h" +#include "../controller/Controller.h" using namespace std;