Make dataLength parameter required for initiators

This commit is contained in:
2025-05-07 09:13:00 +02:00
parent caba023964
commit 565e725cf6
27 changed files with 88 additions and 63 deletions

View File

@@ -79,12 +79,13 @@ struct TracePlayer
uint64_t clkMhz{};
std::string name;
unsigned dataLength;
std::optional<unsigned int> maxPendingReadRequests;
std::optional<unsigned int> maxPendingWriteRequests;
};
NLOHMANN_JSONIFY_ALL_THINGS(
TracePlayer, clkMhz, name, maxPendingReadRequests, maxPendingWriteRequests)
TracePlayer, clkMhz, name, dataLength, maxPendingReadRequests, maxPendingWriteRequests)
struct TrafficGeneratorActiveState
{
@@ -136,7 +137,7 @@ struct TrafficGenerator
std::optional<uint64_t> seed;
std::optional<uint64_t> maxTransactions;
std::optional<unsigned> dataLength;
unsigned dataLength;
std::optional<unsigned> dataAlignment;
uint64_t numRequests{};
@@ -174,7 +175,7 @@ struct TrafficGeneratorStateMachine
std::optional<uint64_t> seed;
std::optional<uint64_t> maxTransactions;
std::optional<unsigned> dataLength;
unsigned dataLength;
std::optional<unsigned> dataAlignment;
std::vector<std::variant<TrafficGeneratorActiveState, TrafficGeneratorIdleState>> states;
std::vector<TrafficGeneratorStateTransition> transitions;
@@ -200,7 +201,8 @@ struct RowHammer
std::string name;
std::optional<unsigned int> maxPendingReadRequests;
std::optional<unsigned int> maxPendingWriteRequests;
unsigned dataLength;
uint64_t numRequests{};
uint64_t rowIncrement{};
};
@@ -210,6 +212,7 @@ NLOHMANN_JSONIFY_ALL_THINGS(RowHammer,
name,
maxPendingReadRequests,
maxPendingWriteRequests,
dataLength,
numRequests,
rowIncrement)

View File

@@ -85,7 +85,6 @@ Simulator::instantiateInitiator(const DRAMSys::Config::Initiator& initiator)
{
uint64_t memorySize = dramSys->getMemSpec().getSimMemSizeInBytes();
sc_core::sc_time interfaceClk = dramSys->getMemSpec().tCK;
unsigned int defaultDataLength = dramSys->getMemSpec().defaultBytesPerBurst;
return std::visit(
[=](auto&& config) -> std::unique_ptr<RequestIssuer>
@@ -94,8 +93,7 @@ Simulator::instantiateInitiator(const DRAMSys::Config::Initiator& initiator)
if constexpr (std::is_same_v<T, DRAMSys::Config::TrafficGenerator> ||
std::is_same_v<T, DRAMSys::Config::TrafficGeneratorStateMachine>)
{
auto generator =
std::make_unique<TrafficGenerator>(config, memorySize, defaultDataLength);
auto generator = std::make_unique<TrafficGenerator>(config, memorySize);
return std::make_unique<RequestIssuer>(config.name.c_str(),
std::move(generator),
@@ -124,11 +122,8 @@ Simulator::instantiateInitiator(const DRAMSys::Config::Initiator& initiator)
SC_REPORT_FATAL("Simulator", report.c_str());
}
auto player = std::make_unique<StlPlayer>(tracePath.c_str(),
config.clkMhz,
defaultDataLength,
*traceType,
storageEnabled);
auto player = std::make_unique<StlPlayer>(
config, tracePath.c_str(), *traceType, storageEnabled);
return std::make_unique<RequestIssuer>(config.name.c_str(),
std::move(player),
@@ -141,7 +136,7 @@ Simulator::instantiateInitiator(const DRAMSys::Config::Initiator& initiator)
}
else if constexpr (std::is_same_v<T, DRAMSys::Config::RowHammer>)
{
auto hammer = std::make_unique<RowHammer>(config, defaultDataLength);
auto hammer = std::make_unique<RowHammer>(config);
return std::make_unique<RequestIssuer>(config.name.c_str(),
std::move(hammer),

View File

@@ -39,12 +39,11 @@
#include "SequentialState.h"
TrafficGenerator::TrafficGenerator(DRAMSys::Config::TrafficGeneratorStateMachine const& config,
uint64_t memorySize,
unsigned int defaultDataLength) :
uint64_t memorySize) :
stateTransistions(config.transitions),
generatorPeriod(sc_core::sc_time(1.0 / static_cast<double>(config.clkMhz), sc_core::SC_US))
{
unsigned int dataLength = config.dataLength.value_or(defaultDataLength);
unsigned int dataLength = config.dataLength;
unsigned int dataAlignment = config.dataAlignment.value_or(dataLength);
for (auto const& state : config.states)
@@ -62,13 +61,13 @@ TrafficGenerator::TrafficGenerator(DRAMSys::Config::TrafficGeneratorStateMachine
DRAMSys::Config::AddressDistribution::Random)
{
auto producer = std::make_unique<RandomState>(activeState.numRequests,
config.seed.value_or(0),
activeState.rwRatio,
activeState.minAddress,
activeState.maxAddress,
memorySize,
dataLength,
dataAlignment);
config.seed.value_or(0),
activeState.rwRatio,
activeState.minAddress,
activeState.maxAddress,
memorySize,
dataLength,
dataAlignment);
producers.emplace(activeState.id, std::move(producer));
}
@@ -76,13 +75,13 @@ TrafficGenerator::TrafficGenerator(DRAMSys::Config::TrafficGeneratorStateMachine
{
auto producer =
std::make_unique<SequentialState>(activeState.numRequests,
config.seed.value_or(0),
activeState.rwRatio,
activeState.addressIncrement,
activeState.minAddress,
activeState.maxAddress,
memorySize,
dataLength);
config.seed.value_or(0),
activeState.rwRatio,
activeState.addressIncrement,
activeState.minAddress,
activeState.maxAddress,
memorySize,
dataLength);
producers.emplace(activeState.id, std::move(producer));
}
@@ -98,35 +97,34 @@ TrafficGenerator::TrafficGenerator(DRAMSys::Config::TrafficGeneratorStateMachine
}
TrafficGenerator::TrafficGenerator(DRAMSys::Config::TrafficGenerator const& config,
uint64_t memorySize,
unsigned int defaultDataLength) :
uint64_t memorySize) :
generatorPeriod(sc_core::sc_time(1.0 / static_cast<double>(config.clkMhz), sc_core::SC_US))
{
unsigned int dataLength = config.dataLength.value_or(defaultDataLength);
unsigned int dataLength = config.dataLength;
unsigned int dataAlignment = config.dataAlignment.value_or(dataLength);
if (config.addressDistribution == DRAMSys::Config::AddressDistribution::Random)
{
auto producer = std::make_unique<RandomState>(config.numRequests,
config.seed.value_or(0),
config.rwRatio,
config.minAddress,
config.maxAddress,
memorySize,
dataLength,
dataAlignment);
config.seed.value_or(0),
config.rwRatio,
config.minAddress,
config.maxAddress,
memorySize,
dataLength,
dataAlignment);
producers.emplace(0, std::move(producer));
}
else
{
auto producer = std::make_unique<SequentialState>(config.numRequests,
config.seed.value_or(0),
config.rwRatio,
config.addressIncrement,
config.minAddress,
config.maxAddress,
memorySize,
dataLength);
config.seed.value_or(0),
config.rwRatio,
config.addressIncrement,
config.minAddress,
config.maxAddress,
memorySize,
dataLength);
producers.emplace(0, std::move(producer));
}
}

View File

@@ -47,13 +47,10 @@ class RequestProducer;
class TrafficGenerator : public RequestProducer
{
public:
TrafficGenerator(DRAMSys::Config::TrafficGenerator const& config,
uint64_t memorySize,
unsigned int defaultDataLength);
TrafficGenerator(DRAMSys::Config::TrafficGenerator const& config, uint64_t memorySize);
TrafficGenerator(DRAMSys::Config::TrafficGeneratorStateMachine const& config,
uint64_t memorySize,
unsigned int defaultDataLength);
uint64_t memorySize);
uint64_t totalRequests() override;
Request nextRequest() override;

View File

@@ -35,11 +35,11 @@
#include "RowHammer.h"
RowHammer::RowHammer(DRAMSys::Config::RowHammer const& config, unsigned int dataLength) :
RowHammer::RowHammer(DRAMSys::Config::RowHammer const& config) :
generatorPeriod(sc_core::sc_time(1.0 / static_cast<double>(config.clkMhz), sc_core::SC_US)),
numberOfRequests(config.numRequests),
rowIncrement(config.rowIncrement),
dataLength(dataLength)
dataLength(config.dataLength)
{
}

View File

@@ -44,7 +44,7 @@
class RowHammer : public RequestProducer
{
public:
RowHammer(DRAMSys::Config::RowHammer const& config, unsigned int dataLength);
RowHammer(DRAMSys::Config::RowHammer const& config);
Request nextRequest() override;
sc_core::sc_time nextTrigger() override { return generatorPeriod; }

View File

@@ -44,15 +44,14 @@
static constexpr std::size_t LINE_BUFFER_SIZE = 10000;
StlPlayer::StlPlayer(std::filesystem::path const& trace,
unsigned int clkMhz,
unsigned int defaultDataLength,
StlPlayer::StlPlayer(DRAMSys::Config::TracePlayer const& config,
std::filesystem::path const& trace,
TraceType traceType,
bool storageEnabled) :
traceType(traceType),
storageEnabled(storageEnabled),
playerPeriod(sc_core::sc_time(1.0 / static_cast<double>(clkMhz), sc_core::SC_US)),
defaultDataLength(defaultDataLength),
playerPeriod(sc_core::sc_time(1.0 / static_cast<double>(config.clkMhz), sc_core::SC_US)),
defaultDataLength(config.dataLength),
traceFile(trace)
{
if (!traceFile.is_open())

View File

@@ -42,6 +42,8 @@
#include "simulator/request/RequestProducer.h"
#include <DRAMSys/config/TraceSetup.h>
#include <systemc>
#include <tlm>
@@ -61,9 +63,8 @@ public:
Relative,
};
StlPlayer(std::filesystem::path const& trace,
unsigned int clkMhz,
unsigned int defaultDataLength,
StlPlayer(DRAMSys::Config::TracePlayer const& config,
std::filesystem::path const& trace,
TraceType traceType,
bool storageEnabled);