diff --git a/DRAMSys/library/CMakeLists.txt b/DRAMSys/library/CMakeLists.txt index d1636c6e..fba3d293 100644 --- a/DRAMSys/library/CMakeLists.txt +++ b/DRAMSys/library/CMakeLists.txt @@ -45,6 +45,7 @@ set(DCMAKE_SH="CMAKE_SH-NOTFOUND") add_subdirectory(src/common/third_party/DRAMPower) # Add nlohmann: +set(JSON_BuildTests OFF) add_subdirectory(src/common/third_party/nlohmann) # Add SystemC: diff --git a/DRAMSys/library/src/common/DebugManager.h b/DRAMSys/library/src/common/DebugManager.h index df80035d..a0a6a4e6 100644 --- a/DRAMSys/library/src/common/DebugManager.h +++ b/DRAMSys/library/src/common/DebugManager.h @@ -37,6 +37,14 @@ #ifndef DEBUGMANAGER_H #define DEBUGMANAGER_H +#if __has_cpp_attribute(maybe_unused) + #define NDEBUG_UNUSED(var_decl) [[maybe_unused]] var_decl +#elif (__GNUC__ || __clang__) + #define NDEBUG_UNUSED(var_decl) var_decl __attribute__((unused)) +#else + #define NDEBUG_UNUSED(var_decl) var_decl +#endif + #ifdef NDEBUG #define PRINTDEBUGMESSAGE(sender, message) {} #else diff --git a/DRAMSys/library/src/configuration/TemperatureSimConfig.h b/DRAMSys/library/src/configuration/TemperatureSimConfig.h index baa4bb67..b7c8431a 100644 --- a/DRAMSys/library/src/configuration/TemperatureSimConfig.h +++ b/DRAMSys/library/src/configuration/TemperatureSimConfig.h @@ -112,14 +112,14 @@ struct TemperatureSimConfig void showTemperatureSimConfig() { - int i __attribute__((unused)) = 0; - for (auto e __attribute__((unused)) : powerInitialValues) + NDEBUG_UNUSED(int i) = 0; + for (NDEBUG_UNUSED(auto e) : powerInitialValues) { PRINTDEBUGMESSAGE("TemperatureSimConfig", "powerInitialValues[" + std::to_string(i++) + "]: " + std::to_string(e)); } i = 0; - for (auto e __attribute__((unused)) : powerThresholds) + for (NDEBUG_UNUSED(auto e) : powerThresholds) { PRINTDEBUGMESSAGE("TemperatureSimConfig", "powerThreshold[" + std::to_string(i++) + "]: " + std::to_string(e)); diff --git a/DRAMSys/library/src/controller/BankMachine.cpp b/DRAMSys/library/src/controller/BankMachine.cpp index 82259337..e9fc8394 100644 --- a/DRAMSys/library/src/controller/BankMachine.cpp +++ b/DRAMSys/library/src/controller/BankMachine.cpp @@ -33,6 +33,7 @@ */ #include "BankMachine.h" +#include "../configuration/Configuration.h" using namespace tlm; @@ -44,9 +45,9 @@ BankMachine::BankMachine(SchedulerIF *scheduler, CheckerIF *checker, Bank bank) bankgroup = BankGroup(bank.ID() / memSpec->banksPerGroup); } -std::tuple BankMachine::getNextCommand() +CommandTuple::Type BankMachine::getNextCommand() { - return std::tuple(nextCommand, currentPayload, timeToSchedule); + return CommandTuple::Type(nextCommand, currentPayload, timeToSchedule); } void BankMachine::updateState(Command command) diff --git a/DRAMSys/library/src/controller/BankMachine.h b/DRAMSys/library/src/controller/BankMachine.h index 651f8da7..9fec70a2 100644 --- a/DRAMSys/library/src/controller/BankMachine.h +++ b/DRAMSys/library/src/controller/BankMachine.h @@ -39,14 +39,10 @@ #include #include #include "../common/dramExtensions.h" -#include "Controller.h" #include "Command.h" #include "scheduler/SchedulerIF.h" #include "checker/CheckerIF.h" -class SchedulerIF; -class CheckerIF; - enum class BmState { Precharged, @@ -58,7 +54,7 @@ class BankMachine public: virtual ~BankMachine() {} virtual sc_time start() = 0; - std::tuple getNextCommand(); + CommandTuple::Type getNextCommand(); void updateState(Command); void block(); diff --git a/DRAMSys/library/src/controller/Command.h b/DRAMSys/library/src/controller/Command.h index 3a511f38..d058ab63 100644 --- a/DRAMSys/library/src/controller/Command.h +++ b/DRAMSys/library/src/controller/Command.h @@ -38,7 +38,10 @@ #include #include +#include +#include #include +#include #include #include "../common/third_party/DRAMPower/src/MemCommand.h" @@ -101,4 +104,17 @@ bool isRankCommand(Command); bool isCasCommand(Command); bool isRasCommand(Command); +struct CommandTuple +{ + using Type = std::tuple<::Command, tlm::tlm_generic_payload *, sc_time>; + enum Accessor + { + Command = 0, + Payload = 1, + Timestamp = 2 + }; +}; + +using ReadyCommands = std::vector; + #endif // COMMAND_H diff --git a/DRAMSys/library/src/controller/Controller.cpp b/DRAMSys/library/src/controller/Controller.cpp index 169e90ae..735ba8ec 100644 --- a/DRAMSys/library/src/controller/Controller.cpp +++ b/DRAMSys/library/src/controller/Controller.cpp @@ -71,6 +71,9 @@ Controller::Controller(sc_module_name name) : memSpec = config.memSpec; ranksNumberOfPayloads = std::vector(memSpec->numberOfRanks); + // reserve buffer for a least 100 command tuples + readyCommands.reserve(100); + // instantiate timing checker if (memSpec->memoryType == "DDR3") checker = new CheckerDDR3(); @@ -216,6 +219,9 @@ Controller::~Controller() void Controller::controllerMethod() { + // clear command buffer + readyCommands.clear(); + // (1) Release payload if arbiter has accepted the result (finish END_RESP) if (payloadToRelease != nullptr && timeToRelease <= sc_time_stamp()) finishEndResp(); @@ -239,27 +245,27 @@ void Controller::controllerMethod() it->start(); // (5) Choose one request and send it to DRAM - std::tuple commandTuple; - std::list> readyCommands; + CommandTuple::Type commandTuple; + for (unsigned rankID = 0; rankID < memSpec->numberOfRanks; rankID++) { // (5.1) Check for power-down commands (PDEA/PDEP/SREFEN or PDXA/PDXP/SREFEX) commandTuple = powerDownManagers[rankID]->getNextCommand(); - if (std::get<0>(commandTuple) != Command::NOP) - readyCommands.push_back(commandTuple); + if (std::get(commandTuple) != Command::NOP) + readyCommands.emplace_back(commandTuple); else { // (5.2) Check for refresh commands (PREA/PRE or REFA/REFB) commandTuple = refreshManagers[rankID]->getNextCommand(); - if (std::get<0>(commandTuple) != Command::NOP) - readyCommands.push_back(commandTuple); + if (std::get(commandTuple) != Command::NOP) + readyCommands.emplace_back(commandTuple); // (5.3) Check for bank commands (PRE, ACT, RD/RDA or WR/WRA) for (auto it : bankMachinesOnRank[rankID]) { commandTuple = it->getNextCommand(); - if (std::get<0>(commandTuple) != Command::NOP) - readyCommands.push_back(commandTuple); + if (std::get(commandTuple) != Command::NOP) + readyCommands.emplace_back(commandTuple); } } } @@ -268,28 +274,28 @@ void Controller::controllerMethod() if (!readyCommands.empty()) { commandTuple = cmdMux->selectCommand(readyCommands); - if (std::get<0>(commandTuple) != Command::NOP) // can happen with FIFO strict + if (std::get(commandTuple) != Command::NOP) // can happen with FIFO strict { - Rank rank = DramExtension::getRank(std::get<1>(commandTuple)); - BankGroup bankgroup = DramExtension::getBankGroup(std::get<1>(commandTuple)); - Bank bank = DramExtension::getBank(std::get<1>(commandTuple)); + Rank rank = DramExtension::getRank(std::get(commandTuple)); + BankGroup bankgroup = DramExtension::getBankGroup(std::get(commandTuple)); + Bank bank = DramExtension::getBank(std::get(commandTuple)); - if (isRankCommand(std::get<0>(commandTuple))) + if (isRankCommand(std::get(commandTuple))) { for (auto it : bankMachinesOnRank[rank.ID()]) - it->updateState(std::get<0>(commandTuple)); + it->updateState(std::get(commandTuple)); } else - bankMachines[bank.ID()]->updateState(std::get<0>(commandTuple)); + bankMachines[bank.ID()]->updateState(std::get(commandTuple)); - refreshManagers[rank.ID()]->updateState(std::get<0>(commandTuple)); - powerDownManagers[rank.ID()]->updateState(std::get<0>(commandTuple)); - checker->insert(std::get<0>(commandTuple), rank, bankgroup, bank); + refreshManagers[rank.ID()]->updateState(std::get(commandTuple)); + powerDownManagers[rank.ID()]->updateState(std::get(commandTuple)); + checker->insert(std::get(commandTuple), rank, bankgroup, bank); - if (isCasCommand(std::get<0>(commandTuple))) + if (isCasCommand(std::get(commandTuple))) { - scheduler->removeRequest(std::get<1>(commandTuple)); - respQueue->insertPayload(std::get<1>(commandTuple), memSpec->getIntervalOnDataStrobe(std::get<0>(commandTuple)).end); + scheduler->removeRequest(std::get(commandTuple)); + respQueue->insertPayload(std::get(commandTuple), memSpec->getIntervalOnDataStrobe(std::get(commandTuple)).end); sc_time triggerTime = respQueue->getTriggerTime(); if (triggerTime != sc_max_time()) @@ -300,7 +306,7 @@ void Controller::controllerMethod() if (ranksNumberOfPayloads[rank.ID()] == 0) powerDownManagers[rank.ID()]->triggerEntry(); - sendToDram(std::get<0>(commandTuple), std::get<1>(commandTuple)); + sendToDram(std::get(commandTuple), std::get(commandTuple)); } else readyCmdBlocked = true; @@ -367,7 +373,7 @@ unsigned int Controller::transport_dbg(tlm_generic_payload &trans) void Controller::finishBeginReq() { - uint64_t id __attribute__((unused)) = DramExtension::getPayloadID(payloadToAcquire); + NDEBUG_UNUSED(uint64_t id) = DramExtension::getPayloadID(payloadToAcquire); PRINTDEBUGMESSAGE(name(), "Payload " + std::to_string(id) + " entered system."); if (totalNumberOfPayloads == 0) @@ -413,7 +419,7 @@ void Controller::startBeginResp() void Controller::finishEndResp() { - uint64_t id __attribute__((unused)) = DramExtension::getPayloadID(payloadToRelease); + NDEBUG_UNUSED(uint64_t id) = DramExtension::getPayloadID(payloadToRelease); PRINTDEBUGMESSAGE(name(), "Payload " + std::to_string(id) + " left system."); payloadToRelease->release(); diff --git a/DRAMSys/library/src/controller/Controller.h b/DRAMSys/library/src/controller/Controller.h index bf22c2f2..9002c007 100644 --- a/DRAMSys/library/src/controller/Controller.h +++ b/DRAMSys/library/src/controller/Controller.h @@ -75,6 +75,7 @@ protected: private: unsigned totalNumberOfPayloads = 0; std::vector ranksNumberOfPayloads; + ReadyCommands readyCommands; MemSpec *memSpec; diff --git a/DRAMSys/library/src/controller/ControllerRecordable.cpp b/DRAMSys/library/src/controller/ControllerRecordable.cpp index 5cf82735..8ca3f8c2 100644 --- a/DRAMSys/library/src/controller/ControllerRecordable.cpp +++ b/DRAMSys/library/src/controller/ControllerRecordable.cpp @@ -72,13 +72,13 @@ void ControllerRecordable::recordPhase(tlm_generic_payload &trans, tlm_phase pha { sc_time recTime = delay + sc_time_stamp(); - unsigned int thr __attribute__((unused)) = DramExtension::getExtension(trans).getThread().ID(); - unsigned int ch __attribute__((unused)) = DramExtension::getExtension(trans).getChannel().ID(); - unsigned int bg __attribute__((unused)) = DramExtension::getExtension(trans).getBankGroup().ID(); - unsigned int bank __attribute__((unused)) = DramExtension::getExtension(trans).getBank().ID(); - unsigned int row __attribute__((unused)) = DramExtension::getExtension(trans).getRow().ID(); - unsigned int col __attribute__((unused)) = DramExtension::getExtension(trans).getColumn().ID(); - uint64_t id __attribute__((unused)) = DramExtension::getExtension(trans).getPayloadID(); + NDEBUG_UNUSED(unsigned thr) = DramExtension::getExtension(trans).getThread().ID(); + NDEBUG_UNUSED(unsigned ch) = DramExtension::getExtension(trans).getChannel().ID(); + NDEBUG_UNUSED(unsigned bg) = DramExtension::getExtension(trans).getBankGroup().ID(); + NDEBUG_UNUSED(unsigned bank) = DramExtension::getExtension(trans).getBank().ID(); + NDEBUG_UNUSED(unsigned row) = DramExtension::getExtension(trans).getRow().ID(); + NDEBUG_UNUSED(unsigned col) = DramExtension::getExtension(trans).getColumn().ID(); + NDEBUG_UNUSED(uint64_t id) = DramExtension::getExtension(trans).getPayloadID(); PRINTDEBUGMESSAGE(name(), "Recording " + getPhaseName(phase) + " thread " + std::to_string(thr) + " channel " + std::to_string(ch) + " bank group " + std::to_string( diff --git a/DRAMSys/library/src/controller/cmdmux/CmdMuxIF.h b/DRAMSys/library/src/controller/cmdmux/CmdMuxIF.h index 8f671327..49e0318c 100644 --- a/DRAMSys/library/src/controller/cmdmux/CmdMuxIF.h +++ b/DRAMSys/library/src/controller/cmdmux/CmdMuxIF.h @@ -45,8 +45,7 @@ class CmdMuxIF { public: virtual ~CmdMuxIF() {} - virtual std::tuple - selectCommand(std::list> &) = 0; + virtual CommandTuple::Type selectCommand(ReadyCommands &) = 0; }; #endif // CMDMUXIF_H diff --git a/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.cpp b/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.cpp index 9d002b90..8091756b 100644 --- a/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.cpp +++ b/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.cpp @@ -38,21 +38,24 @@ using namespace tlm; -std::tuple -CmdMuxOldest::selectCommand(std::list> &readyCommands) +CommandTuple::Type CmdMuxOldest::selectCommand(ReadyCommands &readyCommands) { - readyCommands.remove_if([](std::tuple element){return std::get<2>(element) != sc_time_stamp();}); + readyCommands.erase(std::remove_if(readyCommands.begin(), readyCommands.end(), + [](CommandTuple::Type element) { + return std::get(element) != sc_time_stamp(); + }), + readyCommands.end()); if (!readyCommands.empty()) { auto it = readyCommands.begin(); auto result = it; - uint64_t lastPayloadID = DramExtension::getPayloadID(std::get<1>(*it)); + uint64_t lastPayloadID = DramExtension::getPayloadID(std::get(*it)); it++; while (it != readyCommands.end()) { - uint64_t newPayloadID = DramExtension::getPayloadID(std::get<1>(*it)); + uint64_t newPayloadID = DramExtension::getPayloadID(std::get(*it)); if (newPayloadID < lastPayloadID) { lastPayloadID = newPayloadID; @@ -63,5 +66,5 @@ CmdMuxOldest::selectCommand(std::list(Command::NOP, nullptr, sc_max_time()); + return CommandTuple::Type(Command::NOP, nullptr, sc_max_time()); } diff --git a/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.h b/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.h index 40c69ff9..6b93a44e 100644 --- a/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.h +++ b/DRAMSys/library/src/controller/cmdmux/CmdMuxOldest.h @@ -40,8 +40,7 @@ class CmdMuxOldest : public CmdMuxIF { public: - std::tuple - selectCommand(std::list> &); + CommandTuple::Type selectCommand(ReadyCommands &); }; #endif // CMDMUXOLDEST_H diff --git a/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.cpp b/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.cpp index 87c34f05..a2334a1b 100644 --- a/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.cpp +++ b/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.cpp @@ -38,18 +38,22 @@ using namespace tlm; -std::tuple -CmdMuxStrict::selectCommand(std::list> &readyCommands) +CommandTuple::Type +CmdMuxStrict::selectCommand(ReadyCommands &readyCommands) { - readyCommands.remove_if([](std::tuple element){return std::get<2>(element) != sc_time_stamp();}); + readyCommands.erase(std::remove_if(readyCommands.begin(), readyCommands.end(), + [](CommandTuple::Type element) { + return std::get(element) != sc_time_stamp(); + }), + readyCommands.end()); if (!readyCommands.empty()) { for (auto it : readyCommands) { - if (isCasCommand(std::get<0>(it))) + if (isCasCommand(std::get(it))) { - if (DramExtension::getPayloadID(std::get<1>(it)) == nextPayloadID) + if (DramExtension::getPayloadID(std::get(it)) == nextPayloadID) { nextPayloadID++; return it; @@ -58,9 +62,9 @@ CmdMuxStrict::selectCommand(std::list(it))) + if (isRasCommand(std::get(it))) return it; } } - return std::tuple(Command::NOP, nullptr, sc_max_time()); + return CommandTuple::Type(Command::NOP, nullptr, sc_max_time()); } diff --git a/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.h b/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.h index a0389771..f105dcc1 100644 --- a/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.h +++ b/DRAMSys/library/src/controller/cmdmux/CmdMuxStrict.h @@ -40,8 +40,7 @@ class CmdMuxStrict : public CmdMuxIF { public: - std::tuple - selectCommand(std::list> &); + CommandTuple::Type selectCommand(ReadyCommands &); private: uint64_t nextPayloadID = 0; diff --git a/DRAMSys/library/src/controller/powerdown/PowerDownManagerDummy.cpp b/DRAMSys/library/src/controller/powerdown/PowerDownManagerDummy.cpp index 8439982f..b496e973 100644 --- a/DRAMSys/library/src/controller/powerdown/PowerDownManagerDummy.cpp +++ b/DRAMSys/library/src/controller/powerdown/PowerDownManagerDummy.cpp @@ -36,9 +36,9 @@ using namespace tlm; -std::tuple PowerDownManagerDummy::getNextCommand() +CommandTuple::Type PowerDownManagerDummy::getNextCommand() { - return std::tuple(Command::NOP, nullptr, sc_max_time()); + return CommandTuple::Type(Command::NOP, nullptr, sc_max_time()); } sc_time PowerDownManagerDummy::start() diff --git a/DRAMSys/library/src/controller/powerdown/PowerDownManagerDummy.h b/DRAMSys/library/src/controller/powerdown/PowerDownManagerDummy.h index 82b5e60e..854ecc1a 100644 --- a/DRAMSys/library/src/controller/powerdown/PowerDownManagerDummy.h +++ b/DRAMSys/library/src/controller/powerdown/PowerDownManagerDummy.h @@ -46,7 +46,7 @@ public: virtual void triggerExit() override {} virtual void triggerInterruption() override {} - virtual std::tuple getNextCommand() override; + virtual CommandTuple::Type getNextCommand() override; virtual void updateState(Command) override {} virtual sc_time start() override; }; diff --git a/DRAMSys/library/src/controller/powerdown/PowerDownManagerIF.h b/DRAMSys/library/src/controller/powerdown/PowerDownManagerIF.h index b501c10e..39dd314e 100644 --- a/DRAMSys/library/src/controller/powerdown/PowerDownManagerIF.h +++ b/DRAMSys/library/src/controller/powerdown/PowerDownManagerIF.h @@ -49,7 +49,7 @@ public: virtual void triggerExit() = 0; virtual void triggerInterruption() = 0; - virtual std::tuple getNextCommand() = 0; + virtual CommandTuple::Type getNextCommand() = 0; virtual void updateState(Command) = 0; virtual sc_time start() = 0; }; diff --git a/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.cpp b/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.cpp index 08a57e16..62d247c4 100644 --- a/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.cpp +++ b/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.cpp @@ -69,9 +69,9 @@ void PowerDownManagerStaggered::triggerInterruption() exitTriggered = true; } -std::tuple PowerDownManagerStaggered::getNextCommand() +CommandTuple::Type PowerDownManagerStaggered::getNextCommand() { - return std::tuple(nextCommand, &powerDownPayload, timeToSchedule); + return CommandTuple::Type(nextCommand, &powerDownPayload, timeToSchedule); } sc_time PowerDownManagerStaggered::start() diff --git a/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.h b/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.h index 5f4120e1..fb5795da 100644 --- a/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.h +++ b/DRAMSys/library/src/controller/powerdown/PowerDownManagerStaggered.h @@ -48,7 +48,7 @@ public: virtual void triggerExit() override; virtual void triggerInterruption() override; - virtual std::tuple getNextCommand() override; + virtual CommandTuple::Type getNextCommand() override; virtual void updateState(Command) override; virtual sc_time start() override; diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerBankwise.cpp b/DRAMSys/library/src/controller/refresh/RefreshManagerBankwise.cpp index 6acb4e6c..2142e0e1 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerBankwise.cpp +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerBankwise.cpp @@ -60,9 +60,9 @@ RefreshManagerBankwise::RefreshManagerBankwise(std::vector &bankM maxPulledin = -(config.refreshMaxPulledin * memSpec->banksPerRank); } -std::tuple RefreshManagerBankwise::getNextCommand() +CommandTuple::Type RefreshManagerBankwise::getNextCommand() { - return std::tuple + return CommandTuple::Type (nextCommand, &refreshPayloads[currentBankMachine->getBank().ID() % memSpec->banksPerRank], timeToSchedule); } diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerBankwise.h b/DRAMSys/library/src/controller/refresh/RefreshManagerBankwise.h index f3b39906..ba976fc3 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerBankwise.h +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerBankwise.h @@ -48,7 +48,7 @@ class RefreshManagerBankwise final : public RefreshManagerIF public: RefreshManagerBankwise(std::vector &, PowerDownManagerIF *, Rank, CheckerIF *); - virtual std::tuple getNextCommand() override; + virtual CommandTuple::Type getNextCommand() override; virtual sc_time start() override; virtual void updateState(Command) override; diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerDummy.cpp b/DRAMSys/library/src/controller/refresh/RefreshManagerDummy.cpp index 33206fc6..3fc0507a 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerDummy.cpp +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerDummy.cpp @@ -36,9 +36,9 @@ using namespace tlm; -std::tuple RefreshManagerDummy::getNextCommand() +CommandTuple::Type RefreshManagerDummy::getNextCommand() { - return std::tuple(Command::NOP, nullptr, sc_max_time()); + return CommandTuple::Type(Command::NOP, nullptr, sc_max_time()); } sc_time RefreshManagerDummy::start() diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerDummy.h b/DRAMSys/library/src/controller/refresh/RefreshManagerDummy.h index a7a26f79..d0df2806 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerDummy.h +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerDummy.h @@ -44,7 +44,7 @@ class RefreshManagerDummy final : public RefreshManagerIF { public: - virtual std::tuple getNextCommand() override; + virtual CommandTuple::Type getNextCommand() override; virtual sc_time start() override; virtual void updateState(Command) override {} }; diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerIF.h b/DRAMSys/library/src/controller/refresh/RefreshManagerIF.h index ff8bc949..e404037e 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerIF.h +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerIF.h @@ -45,7 +45,7 @@ class RefreshManagerIF public: virtual ~RefreshManagerIF() {} - virtual std::tuple getNextCommand() = 0; + virtual CommandTuple::Type getNextCommand() = 0; virtual sc_time start() = 0; virtual void updateState(Command) = 0; }; diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerRankwise.cpp b/DRAMSys/library/src/controller/refresh/RefreshManagerRankwise.cpp index 40df47e3..6626a0b9 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerRankwise.cpp +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerRankwise.cpp @@ -52,9 +52,9 @@ RefreshManagerRankwise::RefreshManagerRankwise(std::vector &bankM maxPulledin = -config.refreshMaxPulledin; } -std::tuple RefreshManagerRankwise::getNextCommand() +CommandTuple::Type RefreshManagerRankwise::getNextCommand() { - return std::tuple(nextCommand, &refreshPayload, timeToSchedule); + return CommandTuple::Type(nextCommand, &refreshPayload, timeToSchedule); } sc_time RefreshManagerRankwise::start() diff --git a/DRAMSys/library/src/controller/refresh/RefreshManagerRankwise.h b/DRAMSys/library/src/controller/refresh/RefreshManagerRankwise.h index 778e0045..d1dec3fc 100644 --- a/DRAMSys/library/src/controller/refresh/RefreshManagerRankwise.h +++ b/DRAMSys/library/src/controller/refresh/RefreshManagerRankwise.h @@ -46,7 +46,7 @@ class RefreshManagerRankwise final : public RefreshManagerIF public: RefreshManagerRankwise(std::vector &, PowerDownManagerIF *, Rank, CheckerIF *); - virtual std::tuple getNextCommand() override; + virtual CommandTuple::Type getNextCommand() override; virtual sc_time start() override; virtual void updateState(Command) override; diff --git a/DRAMSys/library/src/controller/scheduler/SchedulerFifo.cpp b/DRAMSys/library/src/controller/scheduler/SchedulerFifo.cpp index 53d27310..f90c1c95 100644 --- a/DRAMSys/library/src/controller/scheduler/SchedulerFifo.cpp +++ b/DRAMSys/library/src/controller/scheduler/SchedulerFifo.cpp @@ -33,6 +33,7 @@ */ #include "SchedulerFifo.h" +#include "../../configuration/Configuration.h" using namespace tlm; diff --git a/DRAMSys/library/src/controller/scheduler/SchedulerFrFcfs.cpp b/DRAMSys/library/src/controller/scheduler/SchedulerFrFcfs.cpp index 94a5a9bd..de91e8b4 100644 --- a/DRAMSys/library/src/controller/scheduler/SchedulerFrFcfs.cpp +++ b/DRAMSys/library/src/controller/scheduler/SchedulerFrFcfs.cpp @@ -34,6 +34,7 @@ #include "SchedulerFrFcfs.h" +#include "../../configuration/Configuration.h" #include using namespace tlm; @@ -111,8 +112,5 @@ bool SchedulerFrFcfs::hasFurtherRowHit(Bank bank, Row row) bool SchedulerFrFcfs::hasFurtherRequest(Bank bank) { - if (buffer[bank.ID()].size() >= 2) - return true; - else - return false; + return (buffer[bank.ID()].size() >= 2); } diff --git a/DRAMSys/library/src/controller/scheduler/SchedulerFrFcfsGrp.cpp b/DRAMSys/library/src/controller/scheduler/SchedulerFrFcfsGrp.cpp index cec52c7f..8af96e96 100644 --- a/DRAMSys/library/src/controller/scheduler/SchedulerFrFcfsGrp.cpp +++ b/DRAMSys/library/src/controller/scheduler/SchedulerFrFcfsGrp.cpp @@ -33,6 +33,7 @@ */ #include "SchedulerFrFcfsGrp.h" +#include "../../configuration/Configuration.h" using namespace tlm; diff --git a/DRAMSys/library/src/controller/scheduler/SchedulerIF.h b/DRAMSys/library/src/controller/scheduler/SchedulerIF.h index 81e285a0..c069a5cb 100644 --- a/DRAMSys/library/src/controller/scheduler/SchedulerIF.h +++ b/DRAMSys/library/src/controller/scheduler/SchedulerIF.h @@ -38,7 +38,6 @@ #include #include "../../common/dramExtensions.h" #include "../../common/DebugManager.h" -#include "../BankMachine.h" enum class BmState; class BankMachine; diff --git a/DRAMSys/library/src/simulation/DRAMSys.cpp b/DRAMSys/library/src/simulation/DRAMSys.cpp index fca962a1..f890734f 100644 --- a/DRAMSys/library/src/simulation/DRAMSys.cpp +++ b/DRAMSys/library/src/simulation/DRAMSys.cpp @@ -166,7 +166,7 @@ void DRAMSys::logo() #undef BOLDTXT } -void DRAMSys::setupDebugManager(const std::string &traceName __attribute__((unused))) +void DRAMSys::setupDebugManager(NDEBUG_UNUSED(const std::string &traceName)) { #ifndef NDEBUG auto &dbg = DebugManager::getInstance(); diff --git a/DRAMSys/library/src/simulation/TemperatureController.cpp b/DRAMSys/library/src/simulation/TemperatureController.cpp index f6d9b384..a350af2c 100644 --- a/DRAMSys/library/src/simulation/TemperatureController.cpp +++ b/DRAMSys/library/src/simulation/TemperatureController.cpp @@ -164,8 +164,8 @@ void TemperatureController::temperatureThread() updateTemperatures(); double p = adjustThermalSimPeriod(); - int i __attribute__((unused)) = 0; - for (auto t __attribute__((unused)) : temperatureValues) { + NDEBUG_UNUSED(int i) = 0; + for (NDEBUG_UNUSED(auto t) : temperatureValues) { PRINTDEBUGMESSAGE(name(), "Temperature[" + std::to_string(i++) + "] is " + std::to_string(t)); } diff --git a/DRAMSys/library/src/simulation/dram/DramRecordable.cpp b/DRAMSys/library/src/simulation/dram/DramRecordable.cpp index 3b9215ef..46bd709f 100644 --- a/DRAMSys/library/src/simulation/dram/DramRecordable.cpp +++ b/DRAMSys/library/src/simulation/dram/DramRecordable.cpp @@ -88,12 +88,12 @@ void DramRecordable::recordPhase(tlm_generic_payload &trans, tlm_phase if (phase == END_PDNA || phase == END_PDNP || phase == END_SREF) recTime += this->memSpec->getCommandLength(phaseToCommand(phase)); - unsigned int thr __attribute__((unused)) = DramExtension::getExtension(trans).getThread().ID(); - unsigned int ch __attribute__((unused)) = DramExtension::getExtension(trans).getChannel().ID(); - unsigned int bg __attribute__((unused)) = DramExtension::getExtension(trans).getBankGroup().ID(); - unsigned int bank __attribute__((unused)) = DramExtension::getExtension(trans).getBank().ID(); - unsigned int row __attribute__((unused)) = DramExtension::getExtension(trans).getRow().ID(); - unsigned int col __attribute__((unused)) = DramExtension::getExtension(trans).getColumn().ID(); + NDEBUG_UNUSED(unsigned thr) = DramExtension::getExtension(trans).getThread().ID(); + NDEBUG_UNUSED(unsigned ch) = DramExtension::getExtension(trans).getChannel().ID(); + NDEBUG_UNUSED(unsigned bg) = DramExtension::getExtension(trans).getBankGroup().ID(); + NDEBUG_UNUSED(unsigned bank) = DramExtension::getExtension(trans).getBank().ID(); + NDEBUG_UNUSED(unsigned row) = DramExtension::getExtension(trans).getRow().ID(); + NDEBUG_UNUSED(unsigned col) = DramExtension::getExtension(trans).getColumn().ID(); PRINTDEBUGMESSAGE(this->name(), "Recording " + getPhaseName(phase) + " thread " + std::to_string(thr) + " channel " + std::to_string(ch) + " bank group " + std::to_string( diff --git a/DRAMSys/simulator/StlPlayer.h b/DRAMSys/simulator/StlPlayer.h index e1f261a3..4eb89af1 100644 --- a/DRAMSys/simulator/StlPlayer.h +++ b/DRAMSys/simulator/StlPlayer.h @@ -75,7 +75,6 @@ public: void parseTraceFile() { - std::string line; unsigned parsedLines = 0; lineContents.clear(); while (file && !file.eof() && parsedLines < 10000) @@ -94,12 +93,13 @@ public: // Trace files MUST provide timestamp, command and address for every // transaction. The data information depends on the storage mode // configuration. - std::string time; - std::string command; - std::string address; - std::string dataStr; + time.clear(); + command.clear(); + address.clear(); + dataStr.clear(); - std::istringstream iss(line); + iss.clear(); + iss.str(line); // Get the timestamp for the transaction. iss >> time; @@ -213,6 +213,14 @@ private: std::vector lineContents; std::vector::const_iterator lineIterator; + + std::string time; + std::string command; + std::string address; + std::string dataStr; + + std::string line; + std::istringstream iss; }; #endif // STLPLAYER_H