From 09275bb7895ac2002939924203cf322f91992aa9 Mon Sep 17 00:00:00 2001 From: Derek Christ Date: Wed, 16 Aug 2023 09:37:47 +0200 Subject: [PATCH] Add support for MWR and MWRA to TraceAnalyzer --- .../businessObjects/commandlengths.h | 70 +++++++++++++---- .../businessObjects/phases/phase.h | 78 +++++++++++-------- .../businessObjects/phases/phasefactory.cpp | 74 ++++++++++++------ .../apps/traceAnalyzer/data/tracedb.cpp | 9 ++- 4 files changed, 157 insertions(+), 74 deletions(-) diff --git a/extensions/apps/traceAnalyzer/businessObjects/commandlengths.h b/extensions/apps/traceAnalyzer/businessObjects/commandlengths.h index 4fa91fe1..2930743a 100644 --- a/extensions/apps/traceAnalyzer/businessObjects/commandlengths.h +++ b/extensions/apps/traceAnalyzer/businessObjects/commandlengths.h @@ -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; }; diff --git a/extensions/apps/traceAnalyzer/businessObjects/phases/phase.h b/extensions/apps/traceAnalyzer/businessObjects/phases/phase.h index fc3083c0..089ef799 100644 --- a/extensions/apps/traceAnalyzer/businessObjects/phases/phase.h +++ b/extensions/apps/traceAnalyzer/businessObjects/phases/phase.h @@ -222,22 +222,7 @@ protected: std::vector 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: diff --git a/extensions/apps/traceAnalyzer/businessObjects/phases/phasefactory.cpp b/extensions/apps/traceAnalyzer/businessObjects/phases/phasefactory.cpp index 8a6f846d..15597832 100644 --- a/extensions/apps/traceAnalyzer/businessObjects/phases/phasefactory.cpp +++ b/extensions/apps/traceAnalyzer/businessObjects/phases/phasefactory.cpp @@ -55,69 +55,97 @@ std::shared_ptr PhaseFactory::createPhase(ID id, const QString &dbPhaseNa if (dbPhaseName == "REQ") return std::shared_ptr(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(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(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(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(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(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(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(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(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(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(new RFMP2B(id, span, spanOnDataStrobe, rank, bankGroup, bank, row, column, + + if (dbPhaseName == "RFMP2B") + return std::shared_ptr(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(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(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(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(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(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(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(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(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(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(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(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(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"); } diff --git a/extensions/apps/traceAnalyzer/data/tracedb.cpp b/extensions/apps/traceAnalyzer/data/tracedb.cpp index ec30ba0b..712a51d9 100644 --- a/extensions/apps/traceAnalyzer/data/tracedb.cpp +++ b/extensions/apps/traceAnalyzer/data/tracedb.cpp @@ -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)