Add support for MWR and MWRA to TraceAnalyzer

This commit is contained in:
2023-08-16 09:37:47 +02:00
parent 570fb985df
commit 09275bb789
4 changed files with 157 additions and 74 deletions

View File

@@ -41,8 +41,10 @@ struct CommandLengths
double NOP = 1;
double RD = 1;
double WR = 1;
double MWR = 1;
double RDA = 1;
double WRA = 1;
double MWRA = 1;
double ACT = 1;
double PREPB = 1;
double REFPB = 1;
@@ -62,22 +64,58 @@ struct CommandLengths
double SREFEN = 1;
double SREFEX = 1;
CommandLengths(double NOP, double RD, double WR,
double RDA, double WRA, double ACT,
double PREPB, double REFPB, double RFMPB,
double REFP2B, double RFMP2B,
double PRESB, double REFSB, double RFMSB,
double PREAB, double REFAB, double RFMAB,
double PDEA, double PDXA, double PDEP, double PDXP,
double SREFEN, double SREFEX) :
NOP(NOP), RD(RD), WR(WR),
RDA(RDA), WRA(WRA), ACT(ACT),
PREPB(PREPB), REFPB(REFPB), RFMPB(RFMPB),
REFP2B(REFP2B), RFMP2B(RFMP2B),
PRESB(PRESB), REFSB(REFSB), RFMSB(RFMSB),
PREAB(PREAB), REFAB(REFAB), RFMAB(RFMAB),
PDEA(PDEA), PDXA(PDXA), PDEP(PDEP), PDXP(PDXP),
SREFEN(SREFEN), SREFEX(SREFEX) {}
CommandLengths(double NOP,
double RD,
double WR,
double MWR,
double RDA,
double WRA,
double MWRA,
double ACT,
double PREPB,
double REFPB,
double RFMPB,
double REFP2B,
double RFMP2B,
double PRESB,
double REFSB,
double RFMSB,
double PREAB,
double REFAB,
double RFMAB,
double PDEA,
double PDXA,
double PDEP,
double PDXP,
double SREFEN,
double SREFEX) :
NOP(NOP),
RD(RD),
WR(WR),
MWR(MWR),
RDA(RDA),
WRA(WRA),
MWRA(MWRA),
ACT(ACT),
PREPB(PREPB),
REFPB(REFPB),
RFMPB(RFMPB),
REFP2B(REFP2B),
RFMP2B(RFMP2B),
PRESB(PRESB),
REFSB(REFSB),
RFMSB(RFMSB),
PREAB(PREAB),
REFAB(REFAB),
RFMAB(RFMAB),
PDEA(PDEA),
PDXA(PDXA),
PDEP(PDEP),
PDXP(PDXP),
SREFEN(SREFEN),
SREFEX(SREFEX)
{
}
CommandLengths() = default;
};

View File

@@ -222,22 +222,7 @@ protected:
std::vector<int> getYVals(const TraceDrawingProperties &drawingProperties) const override;
};
/*
class PREB final : public Phase
{
public:
using Phase::Phase;
protected:
virtual QColor getPhaseColor() const override
{
return ColorGenerator::getColor(1);
}
virtual QString Name() const override
{
return "PREB";
}
};
*/
class PREPB final : public Phase
{
public:
@@ -326,22 +311,7 @@ protected:
return RelevantAttributes::Rank;
}
};
/*
class ACTB final : public Phase
{
public:
using Phase::Phase;
protected:
virtual QColor getPhaseColor() const override
{
return ColorGenerator::getColor(3);
}
virtual QString Name() const override
{
return "ACTB";
}
};
*/
class ACT final : public Phase
{
public:
@@ -430,6 +400,28 @@ protected:
}
};
class MWR final : public Phase
{
public:
using Phase::Phase;
protected:
QColor getPhaseColor() const override
{
return ColorGenerator::getColor(6);
}
QString Name() const override
{
return "MWR";
}
RelevantAttributes getRelevantAttributes() const override
{
return RelevantAttributes::Rank | RelevantAttributes::BankGroup | RelevantAttributes::Bank |
RelevantAttributes::Column | RelevantAttributes::BurstLength;
}
};
class WRA final : public Phase
{
public:
@@ -452,6 +444,28 @@ protected:
}
};
class MWRA final : public Phase
{
public:
using Phase::Phase;
protected:
QColor getPhaseColor() const override
{
return ColorGenerator::getColor(7);
}
QString Name() const override
{
return "MWRA";
}
RelevantAttributes getRelevantAttributes() const override
{
return RelevantAttributes::Rank | RelevantAttributes::BankGroup | RelevantAttributes::Bank |
RelevantAttributes::Column | RelevantAttributes::BurstLength;
}
};
class AUTO_REFRESH : public Phase
{
public:

View File

@@ -55,69 +55,97 @@ std::shared_ptr<Phase> PhaseFactory::createPhase(ID id, const QString &dbPhaseNa
if (dbPhaseName == "REQ")
return std::shared_ptr<Phase>(new REQ(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "RESP")
if (dbPhaseName == "RESP")
return std::shared_ptr<Phase>(new RESP(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "PREPB")
if (dbPhaseName == "PREPB")
return std::shared_ptr<Phase>(new PREPB(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PREPB)}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "ACT")
if (dbPhaseName == "ACT")
return std::shared_ptr<Phase>(new ACT(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.ACT)}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "PREAB")
if (dbPhaseName == "PREAB")
return std::shared_ptr<Phase>(new PREAB(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PREAB)}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "REFAB")
if (dbPhaseName == "REFAB")
return std::shared_ptr<Phase>(new REFAB(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.REFAB)}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "RFMAB")
if (dbPhaseName == "RFMAB")
return std::shared_ptr<Phase>(new RFMAB(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RFMAB)}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "REFPB")
if (dbPhaseName == "REFPB")
return std::shared_ptr<Phase>(new REFPB(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.REFPB)}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "RFMPB")
if (dbPhaseName == "RFMPB")
return std::shared_ptr<Phase>(new RFMPB(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RFMPB)}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "REFP2B")
if (dbPhaseName == "REFP2B")
return std::shared_ptr<Phase>(new REFP2B(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.REFP2B)}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "RFMP2B")
return std::shared_ptr<Phase>(new RFMP2B(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
if (dbPhaseName == "RFMP2B")
return std::shared_ptr<Phase>(new RFMP2B(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RFMP2B)}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "PRESB")
if (dbPhaseName == "PRESB")
return std::shared_ptr<Phase>(new PRESB(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PRESB)}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "REFSB")
if (dbPhaseName == "REFSB")
return std::shared_ptr<Phase>(new REFSB(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.REFSB)}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "RFMSB")
if (dbPhaseName == "RFMSB")
return std::shared_ptr<Phase>(new RFMSB(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RFMSB)}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "RD")
if (dbPhaseName == "RD")
return std::shared_ptr<Phase>(new RD(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RD)}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "RDA")
if (dbPhaseName == "RDA")
return std::shared_ptr<Phase>(new RDA(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RDA)}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "WR")
if (dbPhaseName == "WR")
return std::shared_ptr<Phase>(new WR(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WR)}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "WRA")
if (dbPhaseName == "MWR")
return std::shared_ptr<Phase>(new MWR(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WR)}, groupsPerRank, banksPerGroup));
if (dbPhaseName == "WRA")
return std::shared_ptr<Phase>(new WRA(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WRA)}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "PDNA")
if (dbPhaseName == "MWRA")
return std::shared_ptr<Phase>(new MWRA(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WR)}, groupsPerRank, banksPerGroup));
if (dbPhaseName == "PDNA")
return std::shared_ptr<Phase>(new PDNA(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PDEA),
Timespan(span.End() - clk * cl.PDXA, span.End())}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "PDNP")
if (dbPhaseName == "PDNP")
return std::shared_ptr<Phase>(new PDNP(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PDEP),
Timespan(span.End() - clk * cl.PDXP, span.End())}, groupsPerRank, banksPerGroup));
else if (dbPhaseName == "SREF")
if (dbPhaseName == "SREF")
return std::shared_ptr<Phase>(new SREF(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column,
burstLength, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.SREFEN),
Timespan(span.End() - clk * cl.SREFEX, span.End())}, groupsPerRank, banksPerGroup));
else
throw std::runtime_error("DB phasename " + dbPhaseName.toStdString() + " unkown to phasefactory");
throw std::runtime_error("DB phasename " + dbPhaseName.toStdString() + " unkown to phasefactory");
}

View File

@@ -372,9 +372,11 @@ CommandLengths TraceDB::getCommandLengthsFromDB()
double NOP = getCommandLength("NOP");
double RD = getCommandLength("RD");
double WR = getCommandLength("RD");
double WR = getCommandLength("WR");
double MWR = getCommandLength("MWR");
double RDA = getCommandLength("RDA");
double WRA = getCommandLength("WRA");
double MWRA = getCommandLength("MWRA");
double ACT = getCommandLength("ACT");
double PREPB = getCommandLength("PREPB");
@@ -398,8 +400,9 @@ CommandLengths TraceDB::getCommandLengthsFromDB()
double SREFEN = getCommandLength("SREFEN");
double SREFEX = getCommandLength("SREFEX");
return {NOP, RD, WR, RDA, WRA, ACT, PREPB, REFPB, RFMPB, REFP2B, RFMP2B, PRESB, REFSB, RFMSB,
PREAB, REFAB, RFMAB, PDEA, PDXA, PDEP, PDXP, SREFEN, SREFEX};
return {NOP, RD, WR, MWR, RDA, WRA, MWRA, ACT, PREPB,
REFPB, RFMPB, REFP2B, RFMP2B, PRESB, REFSB, RFMSB, PREAB, REFAB,
RFMAB, PDEA, PDXA, PDEP, PDXP, SREFEN, SREFEX};
}
QVariant TraceDB::getParameterFromTable(const std::string& parameter, const std::string& table)