From 4c7c58596882be2844905e0c1dfa2b3cbe553264 Mon Sep 17 00:00:00 2001 From: robert Date: Tue, 1 Jul 2014 13:35:14 +0200 Subject: [PATCH] fixed error in numberOfQueuedPayloads in fr_fcfs --- dram/src/controller/scheduler/Fr_Fcfs.cpp | 18 ++++++++++++------ dram/src/controller/scheduler/Fr_Fcfs.h | 5 ++--- dram/src/controller/scheduler/PARBS.cpp | 13 +++++++------ dram/src/simulation/Simulation.cpp | 4 ++-- 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/dram/src/controller/scheduler/Fr_Fcfs.cpp b/dram/src/controller/scheduler/Fr_Fcfs.cpp index 2f887c6b..b4cf1db8 100644 --- a/dram/src/controller/scheduler/Fr_Fcfs.cpp +++ b/dram/src/controller/scheduler/Fr_Fcfs.cpp @@ -10,7 +10,7 @@ namespace scheduler { FR_FCFS::FR_FCFS(core::ControllerCore& controllerCore, bool useExternalStates, bool adaptiveOpenPage) : controllerCore(controllerCore), useExternalStates(useExternalStates), adaptiveOpenPage( - adaptiveOpenPage), numberOfQueuedPayloads(0) + adaptiveOpenPage) { } @@ -20,14 +20,13 @@ FR_FCFS::~FR_FCFS() bool FR_FCFS::hasPayloads() { - return numberOfQueuedPayloads > 0; + return getNumberOfQueuedPayloads() > 0; } void FR_FCFS::schedule(gp* payload) { buffer[DramExtension::getExtension(payload).getBank()].emplace_back(payload); - numberOfQueuedPayloads++; } @@ -85,10 +84,19 @@ gp* FR_FCFS::popOldest(Bank bank) return NULL; gp* result = buffer[bank].front(); buffer[bank].pop_front(); - numberOfQueuedPayloads--; return result; } +int FR_FCFS::getNumberOfQueuedPayloads() +{ + int numberOfQueuedPaylods = 0; + for(auto& bufferElement : buffer) + { + numberOfQueuedPaylods += bufferElement.second.size(); + } + return numberOfQueuedPaylods; +} + std::vector FR_FCFS::findRowHits(Bank bank, Row row) { vector found; @@ -109,8 +117,6 @@ void FR_FCFS::removePayload(gp* payload) { internalBankstates.openRowInRowBuffer(bank, DramExtension::getExtension(payload).getRow()); } - - numberOfQueuedPayloads--; } } diff --git a/dram/src/controller/scheduler/Fr_Fcfs.h b/dram/src/controller/scheduler/Fr_Fcfs.h index 3f4c5105..cfd51f5d 100644 --- a/dram/src/controller/scheduler/Fr_Fcfs.h +++ b/dram/src/controller/scheduler/Fr_Fcfs.h @@ -21,9 +21,9 @@ public: virtual void removePayload(gp* payload) override; //used by PAR_BS - void schedule (std::vector payloads); + void schedule(std::vector payloads); gp* popOldest(Bank bank); - bool isEmpty(); + int getNumberOfQueuedPayloads(); private: std::vector findRowHits(Bank bank, Row row); @@ -32,7 +32,6 @@ private: core::RowBufferState internalBankstates; bool useExternalStates; bool adaptiveOpenPage; - unsigned int numberOfQueuedPayloads; }; } /* namespace scheduler */ diff --git a/dram/src/controller/scheduler/PARBS.cpp b/dram/src/controller/scheduler/PARBS.cpp index b570ff93..f871b68c 100644 --- a/dram/src/controller/scheduler/PARBS.cpp +++ b/dram/src/controller/scheduler/PARBS.cpp @@ -50,20 +50,21 @@ void PAR_BS::schedule(gp* payload) gp* PAR_BS::getNextPayload() { - printDebugMessage("hello!"); - if (!batch->hasPayloads()) { + stringstream s; + s << "In batch: " << batch->getNumberOfQueuedPayloads() << "\t" << "in buffer: " << buffer->getNumberOfQueuedPayloads() << endl; formBatch(); - printDebugMessage("Formed new batch"); + s<< "Formed new batch" << endl; + s << "In batch: " << batch->getNumberOfQueuedPayloads() << "\t" << "in buffer: " << buffer->getNumberOfQueuedPayloads() << endl; + printDebugMessage(s.str()); sc_assert(batch->hasPayloads()); } gp* result = batch->getNextPayload(); if(result == NULL) - { - return buffer->getNextPayload(); - } + result = buffer->getNextPayload(); + return result; } void PAR_BS::removePayload(gp* payload) diff --git a/dram/src/simulation/Simulation.cpp b/dram/src/simulation/Simulation.cpp index ee0937ed..afbc039d 100644 --- a/dram/src/simulation/Simulation.cpp +++ b/dram/src/simulation/Simulation.cpp @@ -168,8 +168,8 @@ void Simulation::report(string message) unsigned int Simulation::getNumberOfLines(string uri) { std::ifstream file(uri); - file.unsetf(std::ios_base::skipws); // new lines will be skipped unless we stop it from happening: - // count the newlines with an algorithm specialized for counting: + // count the newlines + file.unsetf(std::ios_base::skipws); unsigned lineCount = std::count(std::istream_iterator(file), std::istream_iterator(), '\n'); return lineCount; }