Merge branch 'cpp_speedups' into develop
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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<Command, tlm_generic_payload *, sc_time> BankMachine::getNextCommand()
|
||||
CommandTuple::Type BankMachine::getNextCommand()
|
||||
{
|
||||
return std::tuple<Command, tlm_generic_payload *, sc_time>(nextCommand, currentPayload, timeToSchedule);
|
||||
return CommandTuple::Type(nextCommand, currentPayload, timeToSchedule);
|
||||
}
|
||||
|
||||
void BankMachine::updateState(Command command)
|
||||
|
||||
@@ -39,14 +39,10 @@
|
||||
#include <tlm.h>
|
||||
#include <utility>
|
||||
#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<Command, tlm::tlm_generic_payload *, sc_time> getNextCommand();
|
||||
CommandTuple::Type getNextCommand();
|
||||
void updateState(Command);
|
||||
void block();
|
||||
|
||||
|
||||
@@ -38,7 +38,10 @@
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <systemc.h>
|
||||
#include <tlm.h>
|
||||
#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<CommandTuple::Type>;
|
||||
|
||||
#endif // COMMAND_H
|
||||
|
||||
@@ -71,6 +71,9 @@ Controller::Controller(sc_module_name name) :
|
||||
memSpec = config.memSpec;
|
||||
ranksNumberOfPayloads = std::vector<unsigned>(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<Command, tlm_generic_payload *, sc_time> commandTuple;
|
||||
std::list<std::tuple<Command, tlm_generic_payload *, sc_time>> 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>(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>(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>(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>(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::Payload>(commandTuple));
|
||||
BankGroup bankgroup = DramExtension::getBankGroup(std::get<CommandTuple::Payload>(commandTuple));
|
||||
Bank bank = DramExtension::getBank(std::get<CommandTuple::Payload>(commandTuple));
|
||||
|
||||
if (isRankCommand(std::get<0>(commandTuple)))
|
||||
if (isRankCommand(std::get<CommandTuple::Command>(commandTuple)))
|
||||
{
|
||||
for (auto it : bankMachinesOnRank[rank.ID()])
|
||||
it->updateState(std::get<0>(commandTuple));
|
||||
it->updateState(std::get<CommandTuple::Command>(commandTuple));
|
||||
}
|
||||
else
|
||||
bankMachines[bank.ID()]->updateState(std::get<0>(commandTuple));
|
||||
bankMachines[bank.ID()]->updateState(std::get<CommandTuple::Command>(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::Command>(commandTuple));
|
||||
powerDownManagers[rank.ID()]->updateState(std::get<CommandTuple::Command>(commandTuple));
|
||||
checker->insert(std::get<CommandTuple::Command>(commandTuple), rank, bankgroup, bank);
|
||||
|
||||
if (isCasCommand(std::get<0>(commandTuple)))
|
||||
if (isCasCommand(std::get<CommandTuple::Command>(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::Payload>(commandTuple));
|
||||
respQueue->insertPayload(std::get<CommandTuple::Payload>(commandTuple), memSpec->getIntervalOnDataStrobe(std::get<CommandTuple::Command>(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::Command>(commandTuple), std::get<CommandTuple::Payload>(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();
|
||||
|
||||
@@ -75,6 +75,7 @@ protected:
|
||||
private:
|
||||
unsigned totalNumberOfPayloads = 0;
|
||||
std::vector<unsigned> ranksNumberOfPayloads;
|
||||
ReadyCommands readyCommands;
|
||||
|
||||
MemSpec *memSpec;
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -45,8 +45,7 @@ class CmdMuxIF
|
||||
{
|
||||
public:
|
||||
virtual ~CmdMuxIF() {}
|
||||
virtual std::tuple<Command, tlm::tlm_generic_payload *, sc_time>
|
||||
selectCommand(std::list<std::tuple<Command, tlm::tlm_generic_payload *, sc_time>> &) = 0;
|
||||
virtual CommandTuple::Type selectCommand(ReadyCommands &) = 0;
|
||||
};
|
||||
|
||||
#endif // CMDMUXIF_H
|
||||
|
||||
@@ -38,21 +38,24 @@
|
||||
|
||||
using namespace tlm;
|
||||
|
||||
std::tuple<Command, tlm_generic_payload *, sc_time>
|
||||
CmdMuxOldest::selectCommand(std::list<std::tuple<Command, tlm_generic_payload *, sc_time>> &readyCommands)
|
||||
CommandTuple::Type CmdMuxOldest::selectCommand(ReadyCommands &readyCommands)
|
||||
{
|
||||
readyCommands.remove_if([](std::tuple<Command, tlm_generic_payload *, sc_time> element){return std::get<2>(element) != sc_time_stamp();});
|
||||
readyCommands.erase(std::remove_if(readyCommands.begin(), readyCommands.end(),
|
||||
[](CommandTuple::Type element) {
|
||||
return std::get<CommandTuple::Timestamp>(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<CommandTuple::Payload>(*it));
|
||||
it++;
|
||||
|
||||
while (it != readyCommands.end())
|
||||
{
|
||||
uint64_t newPayloadID = DramExtension::getPayloadID(std::get<1>(*it));
|
||||
uint64_t newPayloadID = DramExtension::getPayloadID(std::get<CommandTuple::Payload>(*it));
|
||||
if (newPayloadID < lastPayloadID)
|
||||
{
|
||||
lastPayloadID = newPayloadID;
|
||||
@@ -63,5 +66,5 @@ CmdMuxOldest::selectCommand(std::list<std::tuple<Command, tlm_generic_payload *,
|
||||
return *result;
|
||||
}
|
||||
else
|
||||
return std::tuple<Command, tlm_generic_payload *, sc_time>(Command::NOP, nullptr, sc_max_time());
|
||||
return CommandTuple::Type(Command::NOP, nullptr, sc_max_time());
|
||||
}
|
||||
|
||||
@@ -40,8 +40,7 @@
|
||||
class CmdMuxOldest : public CmdMuxIF
|
||||
{
|
||||
public:
|
||||
std::tuple<Command, tlm::tlm_generic_payload *, sc_time>
|
||||
selectCommand(std::list<std::tuple<Command, tlm::tlm_generic_payload *, sc_time>> &);
|
||||
CommandTuple::Type selectCommand(ReadyCommands &);
|
||||
};
|
||||
|
||||
#endif // CMDMUXOLDEST_H
|
||||
|
||||
@@ -38,18 +38,22 @@
|
||||
|
||||
using namespace tlm;
|
||||
|
||||
std::tuple<Command, tlm_generic_payload *, sc_time>
|
||||
CmdMuxStrict::selectCommand(std::list<std::tuple<Command, tlm_generic_payload *, sc_time>> &readyCommands)
|
||||
CommandTuple::Type
|
||||
CmdMuxStrict::selectCommand(ReadyCommands &readyCommands)
|
||||
{
|
||||
readyCommands.remove_if([](std::tuple<Command, tlm_generic_payload *, sc_time> element){return std::get<2>(element) != sc_time_stamp();});
|
||||
readyCommands.erase(std::remove_if(readyCommands.begin(), readyCommands.end(),
|
||||
[](CommandTuple::Type element) {
|
||||
return std::get<CommandTuple::Timestamp>(element) != sc_time_stamp();
|
||||
}),
|
||||
readyCommands.end());
|
||||
|
||||
if (!readyCommands.empty())
|
||||
{
|
||||
for (auto it : readyCommands)
|
||||
{
|
||||
if (isCasCommand(std::get<0>(it)))
|
||||
if (isCasCommand(std::get<CommandTuple::Command>(it)))
|
||||
{
|
||||
if (DramExtension::getPayloadID(std::get<1>(it)) == nextPayloadID)
|
||||
if (DramExtension::getPayloadID(std::get<CommandTuple::Payload>(it)) == nextPayloadID)
|
||||
{
|
||||
nextPayloadID++;
|
||||
return it;
|
||||
@@ -58,9 +62,9 @@ CmdMuxStrict::selectCommand(std::list<std::tuple<Command, tlm_generic_payload *,
|
||||
}
|
||||
for (auto it : readyCommands)
|
||||
{
|
||||
if (isRasCommand(std::get<0>(it)))
|
||||
if (isRasCommand(std::get<CommandTuple::Command>(it)))
|
||||
return it;
|
||||
}
|
||||
}
|
||||
return std::tuple<Command, tlm_generic_payload *, sc_time>(Command::NOP, nullptr, sc_max_time());
|
||||
return CommandTuple::Type(Command::NOP, nullptr, sc_max_time());
|
||||
}
|
||||
|
||||
@@ -40,8 +40,7 @@
|
||||
class CmdMuxStrict : public CmdMuxIF
|
||||
{
|
||||
public:
|
||||
std::tuple<Command, tlm::tlm_generic_payload *, sc_time>
|
||||
selectCommand(std::list<std::tuple<Command, tlm::tlm_generic_payload *, sc_time>> &);
|
||||
CommandTuple::Type selectCommand(ReadyCommands &);
|
||||
|
||||
private:
|
||||
uint64_t nextPayloadID = 0;
|
||||
|
||||
@@ -36,9 +36,9 @@
|
||||
|
||||
using namespace tlm;
|
||||
|
||||
std::tuple<Command, tlm_generic_payload *, sc_time> PowerDownManagerDummy::getNextCommand()
|
||||
CommandTuple::Type PowerDownManagerDummy::getNextCommand()
|
||||
{
|
||||
return std::tuple<Command, tlm_generic_payload *, sc_time>(Command::NOP, nullptr, sc_max_time());
|
||||
return CommandTuple::Type(Command::NOP, nullptr, sc_max_time());
|
||||
}
|
||||
|
||||
sc_time PowerDownManagerDummy::start()
|
||||
|
||||
@@ -46,7 +46,7 @@ public:
|
||||
virtual void triggerExit() override {}
|
||||
virtual void triggerInterruption() override {}
|
||||
|
||||
virtual std::tuple<Command, tlm::tlm_generic_payload *, sc_time> getNextCommand() override;
|
||||
virtual CommandTuple::Type getNextCommand() override;
|
||||
virtual void updateState(Command) override {}
|
||||
virtual sc_time start() override;
|
||||
};
|
||||
|
||||
@@ -49,7 +49,7 @@ public:
|
||||
virtual void triggerExit() = 0;
|
||||
virtual void triggerInterruption() = 0;
|
||||
|
||||
virtual std::tuple<Command, tlm::tlm_generic_payload *, sc_time> getNextCommand() = 0;
|
||||
virtual CommandTuple::Type getNextCommand() = 0;
|
||||
virtual void updateState(Command) = 0;
|
||||
virtual sc_time start() = 0;
|
||||
};
|
||||
|
||||
@@ -69,9 +69,9 @@ void PowerDownManagerStaggered::triggerInterruption()
|
||||
exitTriggered = true;
|
||||
}
|
||||
|
||||
std::tuple<Command, tlm_generic_payload *, sc_time> PowerDownManagerStaggered::getNextCommand()
|
||||
CommandTuple::Type PowerDownManagerStaggered::getNextCommand()
|
||||
{
|
||||
return std::tuple<Command, tlm_generic_payload *, sc_time>(nextCommand, &powerDownPayload, timeToSchedule);
|
||||
return CommandTuple::Type(nextCommand, &powerDownPayload, timeToSchedule);
|
||||
}
|
||||
|
||||
sc_time PowerDownManagerStaggered::start()
|
||||
|
||||
@@ -48,7 +48,7 @@ public:
|
||||
virtual void triggerExit() override;
|
||||
virtual void triggerInterruption() override;
|
||||
|
||||
virtual std::tuple<Command, tlm::tlm_generic_payload *, sc_time> getNextCommand() override;
|
||||
virtual CommandTuple::Type getNextCommand() override;
|
||||
virtual void updateState(Command) override;
|
||||
virtual sc_time start() override;
|
||||
|
||||
|
||||
@@ -60,9 +60,9 @@ RefreshManagerBankwise::RefreshManagerBankwise(std::vector<BankMachine *> &bankM
|
||||
maxPulledin = -(config.refreshMaxPulledin * memSpec->banksPerRank);
|
||||
}
|
||||
|
||||
std::tuple<Command, tlm_generic_payload *, sc_time> RefreshManagerBankwise::getNextCommand()
|
||||
CommandTuple::Type RefreshManagerBankwise::getNextCommand()
|
||||
{
|
||||
return std::tuple<Command, tlm_generic_payload *, sc_time>
|
||||
return CommandTuple::Type
|
||||
(nextCommand, &refreshPayloads[currentBankMachine->getBank().ID() % memSpec->banksPerRank], timeToSchedule);
|
||||
}
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ class RefreshManagerBankwise final : public RefreshManagerIF
|
||||
public:
|
||||
RefreshManagerBankwise(std::vector<BankMachine *> &, PowerDownManagerIF *, Rank, CheckerIF *);
|
||||
|
||||
virtual std::tuple<Command, tlm::tlm_generic_payload *, sc_time> getNextCommand() override;
|
||||
virtual CommandTuple::Type getNextCommand() override;
|
||||
virtual sc_time start() override;
|
||||
virtual void updateState(Command) override;
|
||||
|
||||
|
||||
@@ -36,9 +36,9 @@
|
||||
|
||||
using namespace tlm;
|
||||
|
||||
std::tuple<Command, tlm_generic_payload *, sc_time> RefreshManagerDummy::getNextCommand()
|
||||
CommandTuple::Type RefreshManagerDummy::getNextCommand()
|
||||
{
|
||||
return std::tuple<Command, tlm_generic_payload *, sc_time>(Command::NOP, nullptr, sc_max_time());
|
||||
return CommandTuple::Type(Command::NOP, nullptr, sc_max_time());
|
||||
}
|
||||
|
||||
sc_time RefreshManagerDummy::start()
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
class RefreshManagerDummy final : public RefreshManagerIF
|
||||
{
|
||||
public:
|
||||
virtual std::tuple<Command, tlm::tlm_generic_payload *, sc_time> getNextCommand() override;
|
||||
virtual CommandTuple::Type getNextCommand() override;
|
||||
virtual sc_time start() override;
|
||||
virtual void updateState(Command) override {}
|
||||
};
|
||||
|
||||
@@ -45,7 +45,7 @@ class RefreshManagerIF
|
||||
public:
|
||||
virtual ~RefreshManagerIF() {}
|
||||
|
||||
virtual std::tuple<Command, tlm::tlm_generic_payload *, sc_time> getNextCommand() = 0;
|
||||
virtual CommandTuple::Type getNextCommand() = 0;
|
||||
virtual sc_time start() = 0;
|
||||
virtual void updateState(Command) = 0;
|
||||
};
|
||||
|
||||
@@ -52,9 +52,9 @@ RefreshManagerRankwise::RefreshManagerRankwise(std::vector<BankMachine *> &bankM
|
||||
maxPulledin = -config.refreshMaxPulledin;
|
||||
}
|
||||
|
||||
std::tuple<Command, tlm_generic_payload *, sc_time> RefreshManagerRankwise::getNextCommand()
|
||||
CommandTuple::Type RefreshManagerRankwise::getNextCommand()
|
||||
{
|
||||
return std::tuple<Command, tlm_generic_payload *, sc_time>(nextCommand, &refreshPayload, timeToSchedule);
|
||||
return CommandTuple::Type(nextCommand, &refreshPayload, timeToSchedule);
|
||||
}
|
||||
|
||||
sc_time RefreshManagerRankwise::start()
|
||||
|
||||
@@ -46,7 +46,7 @@ class RefreshManagerRankwise final : public RefreshManagerIF
|
||||
public:
|
||||
RefreshManagerRankwise(std::vector<BankMachine *> &, PowerDownManagerIF *, Rank, CheckerIF *);
|
||||
|
||||
virtual std::tuple<Command, tlm::tlm_generic_payload *, sc_time> getNextCommand() override;
|
||||
virtual CommandTuple::Type getNextCommand() override;
|
||||
virtual sc_time start() override;
|
||||
virtual void updateState(Command) override;
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
*/
|
||||
|
||||
#include "SchedulerFifo.h"
|
||||
#include "../../configuration/Configuration.h"
|
||||
|
||||
using namespace tlm;
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
|
||||
#include "SchedulerFrFcfs.h"
|
||||
|
||||
#include "../../configuration/Configuration.h"
|
||||
#include <systemc.h>
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
*/
|
||||
|
||||
#include "SchedulerFrFcfsGrp.h"
|
||||
#include "../../configuration/Configuration.h"
|
||||
|
||||
using namespace tlm;
|
||||
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
#include <tlm.h>
|
||||
#include "../../common/dramExtensions.h"
|
||||
#include "../../common/DebugManager.h"
|
||||
#include "../BankMachine.h"
|
||||
|
||||
enum class BmState;
|
||||
class BankMachine;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -88,12 +88,12 @@ void DramRecordable<BaseDram>::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(
|
||||
|
||||
@@ -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<LineContent> lineContents;
|
||||
std::vector<LineContent>::const_iterator lineIterator;
|
||||
|
||||
std::string time;
|
||||
std::string command;
|
||||
std::string address;
|
||||
std::string dataStr;
|
||||
|
||||
std::string line;
|
||||
std::istringstream iss;
|
||||
};
|
||||
|
||||
#endif // STLPLAYER_H
|
||||
|
||||
Reference in New Issue
Block a user