Add new commands and DB fields on TA side.

This commit is contained in:
Lukas Steiner
2021-12-06 17:06:14 +01:00
parent af3510e5d4
commit b8dff6208c
12 changed files with 475 additions and 302 deletions

View File

@@ -38,40 +38,48 @@
struct CommandLengths
{
unsigned NOP;
unsigned RD;
unsigned WR;
unsigned RDA;
unsigned WRA;
unsigned ACT;
unsigned PRE;
unsigned REFB;
unsigned PRESB;
unsigned REFSB;
unsigned RFMSB;
unsigned PREA;
unsigned REFA;
unsigned RFMAB;
unsigned PDEA;
unsigned PDXA;
unsigned PDEP;
unsigned PDXP;
unsigned SREFEN;
unsigned SREFEX;
unsigned NOP = 1;
unsigned RD = 1;
unsigned WR = 1;
unsigned RDA = 1;
unsigned WRA = 1;
unsigned ACT = 1;
unsigned PREPB = 1;
unsigned REFPB = 1;
unsigned RFMPB = 1;
unsigned REFP2B = 1;
unsigned RFMP2B = 1;
unsigned PRESB = 1;
unsigned REFSB = 1;
unsigned RFMSB = 1;
unsigned PREAB = 1;
unsigned REFAB = 1;
unsigned RFMAB = 1;
unsigned PDEA = 1;
unsigned PDXA = 1;
unsigned PDEP = 1;
unsigned PDXP = 1;
unsigned SREFEN = 1;
unsigned SREFEX = 1;
CommandLengths(unsigned NOP, unsigned RD, unsigned WR,
unsigned RDA, unsigned WRA, unsigned ACT,
unsigned PRE, unsigned REFB, unsigned PRESB,
unsigned REFSB, unsigned RFMSB, unsigned PREA,
unsigned REFA, unsigned RFMAB, unsigned PDEA,
unsigned PDXA, unsigned PDEP, unsigned PDXP,
unsigned PREPB, unsigned REFPB, unsigned RFMPB,
unsigned REFP2B, unsigned RFMP2B,
unsigned PRESB, unsigned REFSB, unsigned RFMSB,
unsigned PREAB, unsigned REFAB, unsigned RFMAB,
unsigned PDEA, unsigned PDXA, unsigned PDEP, unsigned PDXP,
unsigned SREFEN, unsigned SREFEX) :
NOP(NOP), RD(RD), WR(WR), RDA(RDA), WRA(WRA), ACT(ACT), PRE(PRE),
REFB(REFB), PRESB(PRESB), REFSB(REFSB), RFMSB(RFMSB), PREA(PREA),
REFA(REFA), RFMAB(RFMAB), PDEA(PDEA), PDXA(PDXA), PDEP(PDEP),
PDXP(PDXP), SREFEN(SREFEN), SREFEX(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() {}
CommandLengths() = default;
};
#endif // COMMANDLENGTHS_H

View File

@@ -38,36 +38,44 @@
#ifndef GENERALINFO_H
#define GENERALINFO_H
#include "timespan.h"
#include <QString>
struct GeneralInfo
{
public:
unsigned int numberOfTransactions;
unsigned int numberOfPhases;
Timespan span;
unsigned int numberOfRanks;
unsigned int numberOfBankgroups;
unsigned int numberOfBanks;
unsigned int banksPerRank;
unsigned int groupsPerRank;
unsigned int banksPerGroup;
QString unitOfTime;
unsigned int clkPeriod;
unsigned int windowSize;
unsigned int controllerThread;
uint64_t numberOfTransactions = 0;
uint64_t numberOfPhases = 0;
Timespan span = 0;
unsigned int numberOfRanks = 1;
unsigned int numberOfBankGroups = 1;
unsigned int numberOfBanks = 1;
unsigned int banksPerRank = 1;
unsigned int groupsPerRank = 1;
unsigned int banksPerGroup = 1;
QString description = "empty";
QString unitOfTime = "PS";
uint64_t clkPeriod = 1000;
uint64_t windowSize = 0;
unsigned int refreshMaxPostponed = 0;
unsigned int refreshMaxPulledin = 0;
uint64_t controllerThread = UINT64_MAX;
unsigned int maxBufferDepth = 8;
unsigned int per2BankOffset = 1;
GeneralInfo(unsigned int numberOfTransactions, unsigned int numberOfPhases, Timespan span,
GeneralInfo() = default;
GeneralInfo(uint64_t numberOfTransactions, uint64_t numberOfPhases, Timespan span,
unsigned int numberOfRanks, unsigned int numberOfBankgroups, unsigned int numberOfBanks,
QString unitOfTime, unsigned int clkPeriod, unsigned int windowSize, unsigned int controllerThread)
: numberOfTransactions(numberOfTransactions), numberOfPhases(numberOfPhases), span(span),
numberOfRanks(numberOfRanks), numberOfBankgroups(numberOfBankgroups), numberOfBanks(numberOfBanks),
banksPerRank(numberOfBanks / numberOfRanks), groupsPerRank(numberOfBankgroups / numberOfRanks),
banksPerGroup(numberOfBanks / numberOfBankgroups), unitOfTime(unitOfTime), clkPeriod(clkPeriod),
windowSize(windowSize), controllerThread(controllerThread)
{
}
QString description, QString unitOfTime, uint64_t clkPeriod, uint64_t windowSize,
unsigned int refreshMaxPostponed, unsigned int refreshMaxPulledin,
uint64_t controllerThread, unsigned int maxBufferDepth, unsigned int per2BankOffset) :
numberOfTransactions(numberOfTransactions) , numberOfPhases(numberOfPhases), span(span),
numberOfRanks(numberOfRanks), numberOfBankGroups(numberOfBankgroups), numberOfBanks(numberOfBanks),
banksPerRank(numberOfBanks / numberOfRanks), groupsPerRank(numberOfBankgroups / numberOfRanks),
banksPerGroup(numberOfBanks / numberOfBankgroups), description(std::move(description)),
unitOfTime(std::move(unitOfTime)), clkPeriod(clkPeriod), windowSize(windowSize),
refreshMaxPostponed(refreshMaxPostponed), refreshMaxPulledin(refreshMaxPulledin),
controllerThread(controllerThread), maxBufferDepth(maxBufferDepth), per2BankOffset(per2BankOffset) {}
};
#endif // GENERALINFO_H

View File

@@ -43,8 +43,6 @@
#include "businessObjects/transaction.h"
#include <cmath>
using namespace std;
void Phase::draw(QPainter *painter, const QwtScaleMap &xMap,
const QwtScaleMap &yMap, const QRectF &canvasRect, bool highlight,
const TraceDrawingProperties &drawingProperties) const
@@ -179,20 +177,16 @@ void Phase::drawPhaseDependencies(traceTime begin, traceTime end, double y,
QColor Phase::getColor(const TraceDrawingProperties &drawingProperties) const
{
switch (drawingProperties.colorGrouping) {
case ColorGrouping::PhaseType:
return getPhaseColor();
break;
case ColorGrouping::Thread:
return ColorGenerator::getColor(static_cast<unsigned int>(transaction.lock()->thread));
break;
case ColorGrouping::AlphaTransaction:
return ColorGenerator::getAlphaColored(transaction.lock()->id);
break;
case ColorGrouping::Transaction:
default:
return ColorGenerator::getColor(transaction.lock()->id);
switch (drawingProperties.colorGrouping)
{
case ColorGrouping::PhaseType:
return getPhaseColor();
case ColorGrouping::Thread:
return ColorGenerator::getColor(static_cast<unsigned int>(transaction.lock()->thread));
case ColorGrouping::AlphaTransaction:
return ColorGenerator::getAlphaColored(transaction.lock()->id);
case ColorGrouping::Transaction: default:
return ColorGenerator::getColor(transaction.lock()->id);
}
}
@@ -252,13 +246,22 @@ std::vector<std::shared_ptr<TracePlotLine>> Phase::getTracePlotLines(const Trace
return drawingProperties.getBankLinesGroupwise(transaction.lock()->rank,
transaction.lock()->bank % drawingProperties.banksPerGroup);
}
else if (getGranularity() == Granularity::TwoBankwise)
{
unsigned int firstGroup = transaction.lock()->bank / drawingProperties.banksPerGroup;
unsigned int firstBank = transaction.lock()->bank % drawingProperties.banksPerGroup;
unsigned int secondGroup = (transaction.lock()->bank + drawingProperties.per2BankOffset)
/ drawingProperties.banksPerGroup;
unsigned int secondBank = (transaction.lock()->bank + drawingProperties.per2BankOffset)
% drawingProperties.banksPerGroup;
return drawingProperties.getBankLinesTwoBankwise(transaction.lock()->rank, firstGroup, firstBank, secondGroup,
secondBank);
}
else // if (getGranularity() == Granularity::Bankwise)
{
return drawingProperties.getBankLines(transaction.lock()->rank,
transaction.lock()->bankgroup % drawingProperties.groupsPerRank,
transaction.lock()->bank
% drawingProperties.banksPerRank
% drawingProperties.banksPerGroup);
transaction.lock()->bank % drawingProperties.banksPerGroup);
}
}

View File

@@ -106,7 +106,7 @@ protected:
virtual std::vector<std::shared_ptr<TracePlotLine>> getTracePlotLines(const TraceDrawingProperties &drawingProperties) const;
enum class Granularity {Bankwise, Groupwise, Rankwise};
enum class Granularity {Bankwise, TwoBankwise, Groupwise, Rankwise};
virtual Granularity getGranularity() const
{
@@ -121,15 +121,15 @@ class REQ : public Phase
public:
using Phase::Phase;
protected:
virtual QColor getPhaseColor() const override
QColor getPhaseColor() const override
{
return ColorGenerator::getColor(1);
}
virtual QString Name() const final
QString Name() const final
{
return "REQ";
}
virtual std::vector<std::shared_ptr<TracePlotLine>> getTracePlotLines(const TraceDrawingProperties &drawingProperties) const
std::vector<std::shared_ptr<TracePlotLine>> getTracePlotLines(const TraceDrawingProperties &drawingProperties) const
override
{
return drawingProperties.getRequestLines();
@@ -142,22 +142,22 @@ class RESP : public Phase
public:
using Phase::Phase;
protected:
virtual QColor getPhaseColor() const override
QColor getPhaseColor() const override
{
return ColorGenerator::getColor(1);
}
virtual QString Name() const override
QString Name() const override
{
return "RESP";
}
virtual std::vector<std::shared_ptr<TracePlotLine>> getTracePlotLines(const TraceDrawingProperties &drawingProperties) const
std::vector<std::shared_ptr<TracePlotLine>> getTracePlotLines(const TraceDrawingProperties &drawingProperties) const
override
{
return drawingProperties.getResponseLines();
}
};
/*
class PREB: public Phase
{
public:
@@ -172,19 +172,19 @@ protected:
return "PREB";
}
};
class PRE : public Phase
*/
class PREPB : public Phase
{
public:
using Phase::Phase;
protected:
virtual QColor getPhaseColor() const override
QColor getPhaseColor() const override
{
return ColorGenerator::getColor(1);
}
virtual QString Name() const override
QString Name() const override
{
return "PRE";
return "PREPB";
}
};
@@ -193,7 +193,7 @@ class PRESB : public Phase
public:
using Phase::Phase;
protected:
virtual QString Name() const override
QString Name() const override
{
return "PRESB";
}
@@ -201,49 +201,49 @@ protected:
{
return {span.Begin()};
}
virtual QColor getColor(const TraceDrawingProperties &drawingProperties) const
QColor getColor(const TraceDrawingProperties &drawingProperties) const
override
{
Q_UNUSED(drawingProperties) return getPhaseColor();
}
virtual QColor getPhaseColor() const override
QColor getPhaseColor() const override
{
return ColorGenerator::getColor(1);
}
virtual Granularity getGranularity() const override
Granularity getGranularity() const override
{
return Granularity::Groupwise;
}
};
class PREA : public Phase
class PREAB : public Phase
{
public:
using Phase::Phase;
protected:
virtual QString Name() const override
QString Name() const override
{
return "PREA";
return "PREAB";
}
virtual std::vector<traceTime> getTimesOnCommandBus() const
{
return {span.Begin()};
}
virtual QColor getColor(const TraceDrawingProperties &drawingProperties) const
QColor getColor(const TraceDrawingProperties &drawingProperties) const
override
{
Q_UNUSED(drawingProperties) return getPhaseColor();
}
virtual QColor getPhaseColor() const override
QColor getPhaseColor() const override
{
return ColorGenerator::getColor(10);
}
virtual Granularity getGranularity() const override
Granularity getGranularity() const override
{
return Granularity::Rankwise;
}
};
/*
class ACTB : public Phase
{
public:
@@ -258,17 +258,17 @@ protected:
return "ACTB";
}
};
*/
class ACT : public Phase
{
public:
using Phase::Phase;
protected:
virtual QColor getPhaseColor() const override
QColor getPhaseColor() const override
{
return ColorGenerator::getColor(3);
}
virtual QString Name() const override
QString Name() const override
{
return "ACT";
}
@@ -279,11 +279,11 @@ class RD : public Phase
public:
using Phase::Phase;
protected:
virtual QColor getPhaseColor() const override
QColor getPhaseColor() const override
{
return ColorGenerator::getColor(4);
}
virtual QString Name() const override
QString Name() const override
{
return "RD";
}
@@ -294,11 +294,11 @@ class RDA : public Phase
public:
using Phase::Phase;
protected:
virtual QColor getPhaseColor() const override
QColor getPhaseColor() const override
{
return ColorGenerator::getColor(5);
}
virtual QString Name() const override
QString Name() const override
{
return "RDA";
}
@@ -309,11 +309,11 @@ class WR : public Phase
public:
using Phase::Phase;
protected:
virtual QColor getPhaseColor() const override
QColor getPhaseColor() const override
{
return ColorGenerator::getColor(6);
}
virtual QString Name() const override
QString Name() const override
{
return "WR";
}
@@ -324,11 +324,11 @@ class WRA : public Phase
public:
using Phase::Phase;
protected:
virtual QColor getPhaseColor() const override
QColor getPhaseColor() const override
{
return ColorGenerator::getColor(7);
}
virtual QString Name() const override
QString Name() const override
{
return "WRA";
}
@@ -339,7 +339,7 @@ class AUTO_REFRESH : public Phase
public:
using Phase::Phase;
protected:
virtual QString Name() const override
QString Name() const override
{
return "REF";
}
@@ -347,12 +347,12 @@ protected:
{
return {span.Begin()};
}
virtual QColor getColor(const TraceDrawingProperties &drawingProperties) const
QColor getColor(const TraceDrawingProperties &drawingProperties) const
override
{
Q_UNUSED(drawingProperties) return getPhaseColor();
}
virtual QColor getPhaseColor() const override
QColor getPhaseColor() const override
{
QColor phaseColor = QColor(Qt::darkCyan);
phaseColor.setAlpha(130);
@@ -360,16 +360,16 @@ protected:
}
};
class REFA : public AUTO_REFRESH
class REFAB : public AUTO_REFRESH
{
public:
using AUTO_REFRESH::AUTO_REFRESH;
protected:
virtual QString Name() const override
QString Name() const override
{
return "REFA";
return "REFAB";
}
virtual Granularity getGranularity() const override
Granularity getGranularity() const override
{
return Granularity::Rankwise;
}
@@ -380,15 +380,15 @@ class RFMAB : public AUTO_REFRESH
public:
using AUTO_REFRESH::AUTO_REFRESH;
protected:
virtual QString Name() const override
QString Name() const override
{
return "RFMAB";
}
virtual Granularity getGranularity() const override
Granularity getGranularity() const override
{
return Granularity::Rankwise;
}
virtual QColor getPhaseColor() const override
QColor getPhaseColor() const override
{
QColor phaseColor = QColor(Qt::darkRed);
phaseColor.setAlpha(130);
@@ -397,14 +397,50 @@ protected:
};
class REFB : public AUTO_REFRESH
class REFPB : public AUTO_REFRESH
{
public:
using AUTO_REFRESH::AUTO_REFRESH;
protected:
virtual QString Name() const override
QString Name() const override
{
return "REFB";
return "REFPB";
}
};
class REFP2B : public AUTO_REFRESH
{
public:
using AUTO_REFRESH::AUTO_REFRESH;
protected:
QString Name() const override
{
return "REFP2B";
}
Granularity getGranularity() const override
{
return Granularity::TwoBankwise;
}
};
class RFMP2B : public AUTO_REFRESH
{
public:
using AUTO_REFRESH::AUTO_REFRESH;
protected:
QString Name() const override
{
return "RFMP2B";
}
Granularity getGranularity() const override
{
return Granularity::TwoBankwise;
}
QColor getPhaseColor() const override
{
QColor phaseColor = QColor(Qt::darkRed);
phaseColor.setAlpha(130);
return phaseColor;
}
};
@@ -413,11 +449,11 @@ class REFSB : public AUTO_REFRESH
public:
using AUTO_REFRESH::AUTO_REFRESH;
protected:
virtual QString Name() const override
QString Name() const override
{
return "REFSB";
}
virtual Granularity getGranularity() const override
Granularity getGranularity() const override
{
return Granularity::Groupwise;
}
@@ -428,15 +464,15 @@ class RFMSB : public AUTO_REFRESH
public:
using AUTO_REFRESH::AUTO_REFRESH;
protected:
virtual QString Name() const override
QString Name() const override
{
return "RFMSB";
}
virtual Granularity getGranularity() const override
Granularity getGranularity() const override
{
return Granularity::Groupwise;
}
virtual QColor getPhaseColor() const override
QColor getPhaseColor() const override
{
QColor phaseColor = QColor(Qt::darkRed);
phaseColor.setAlpha(130);
@@ -449,24 +485,24 @@ class PDNAB : public Phase
public:
using Phase::Phase;
protected:
virtual QString Name() const override
QString Name() const override
{
return "PDNAB";
}
virtual Qt::BrushStyle getBrushStyle() const override
Qt::BrushStyle getBrushStyle() const override
{
return Qt::Dense6Pattern;
}
virtual QColor getColor(const TraceDrawingProperties &drawingProperties) const
QColor getColor(const TraceDrawingProperties &drawingProperties) const
override
{
Q_UNUSED(drawingProperties) return getPhaseColor();
}
virtual QColor getPhaseColor() const override
QColor getPhaseColor() const override
{
return QColor(Qt::black);
return {Qt::black};
}
virtual Phase::PhaseSymbol getPhaseSymbol() const override
Phase::PhaseSymbol getPhaseSymbol() const override
{
return PhaseSymbol::Rect;
}
@@ -477,11 +513,11 @@ class PDNA : public PDNAB
public:
using PDNAB::PDNAB;
protected:
virtual QString Name() const override
QString Name() const override
{
return "PDNA";
}
virtual Granularity getGranularity() const override
Granularity getGranularity() const override
{
return Granularity::Rankwise;
}
@@ -492,24 +528,24 @@ class PDNPB : public Phase
public:
using Phase::Phase;
protected:
virtual QString Name() const override
QString Name() const override
{
return "PDNPB";
}
virtual Qt::BrushStyle getBrushStyle() const override
Qt::BrushStyle getBrushStyle() const override
{
return Qt::Dense4Pattern;
}
virtual QColor getColor(const TraceDrawingProperties &drawingProperties) const
QColor getColor(const TraceDrawingProperties &drawingProperties) const
override
{
Q_UNUSED(drawingProperties) return getPhaseColor();
}
virtual QColor getPhaseColor() const override
QColor getPhaseColor() const override
{
return QColor(Qt::black);
return {Qt::black};
}
virtual Phase::PhaseSymbol getPhaseSymbol() const override
Phase::PhaseSymbol getPhaseSymbol() const override
{
return PhaseSymbol::Rect;
}
@@ -520,11 +556,11 @@ class PDNP : public PDNPB
public:
using PDNPB::PDNPB;
protected:
virtual QString Name() const override
QString Name() const override
{
return "PDNP";
}
virtual Granularity getGranularity() const override
Granularity getGranularity() const override
{
return Granularity::Rankwise;
}
@@ -535,24 +571,24 @@ class SREFB : public Phase
public:
using Phase::Phase;
protected:
virtual QString Name() const override
QString Name() const override
{
return "SREFB";
}
virtual Qt::BrushStyle getBrushStyle() const override
Qt::BrushStyle getBrushStyle() const override
{
return Qt::Dense1Pattern;
}
virtual QColor getColor(const TraceDrawingProperties &drawingProperties) const
QColor getColor(const TraceDrawingProperties &drawingProperties) const
override
{
Q_UNUSED(drawingProperties) return getPhaseColor();
}
virtual QColor getPhaseColor() const override
QColor getPhaseColor() const override
{
return QColor(Qt::black);
return {Qt::black};
}
virtual Phase::PhaseSymbol getPhaseSymbol() const override
Phase::PhaseSymbol getPhaseSymbol() const override
{
return PhaseSymbol::Rect;
}
@@ -563,11 +599,11 @@ class SREF : public SREFB
public:
using SREFB::SREFB;
protected:
virtual QString Name() const override
QString Name() const override
{
return "SREF";
}
virtual Granularity getGranularity() const override
Granularity getGranularity() const override
{
return Granularity::Rankwise;
}

View File

@@ -42,81 +42,88 @@
#include "data/tracedb.h"
#include "businessObjects/timespan.h"
using namespace std;
shared_ptr<Phase> PhaseFactory::CreatePhase(ID id, const QString &dbPhaseName,
const Timespan &span, const shared_ptr<Transaction> &trans, TraceDB &database)
std::shared_ptr<Phase> PhaseFactory::CreatePhase(ID id, const QString &dbPhaseName,
const Timespan &span, const std::shared_ptr<Transaction> &trans,
TraceDB &database)
{
traceTime clk = database.getGeneralInfo().clkPeriod;
const CommandLengths &cl = database.getCommandLengths();
if (dbPhaseName == "REQ")
return shared_ptr<Phase>(new REQ(id, span, clk, trans, {}, std::shared_ptr<Timespan>()));
return std::shared_ptr<Phase>(new REQ(id, span, clk, trans, {}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "RESP")
return shared_ptr<Phase>(new RESP(id, span, clk, trans, {}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "PREB")
return std::shared_ptr<Phase>(new RESP(id, span, clk, trans, {}, std::shared_ptr<Timespan>()));
/*else if (dbPhaseName == "PREB")
return shared_ptr<Phase>(new PREB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "PRE")
return shared_ptr<Phase>(new PRE(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.PRE)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "ACTB")
return shared_ptr<Phase>(new ACTB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk)}, std::shared_ptr<Timespan>()));
{Timespan(span.Begin(), span.Begin() + clk)}, std::shared_ptr<Timespan>()));*/
else if (dbPhaseName == "PREPB" || dbPhaseName == "PRE") // for backwards compatibility
return std::shared_ptr<Phase>(new PREPB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.PREPB)}, std::shared_ptr<Timespan>()));
/*else if (dbPhaseName == "ACTB")
return std::shared_ptr<Phase>(new ACTB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk)}, std::shared_ptr<Timespan>()));*/
else if (dbPhaseName == "ACT")
return shared_ptr<Phase>(new ACT(id, span, clk, trans,
return std::shared_ptr<Phase>(new ACT(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.ACT)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "PREA")
return shared_ptr<Phase>(new PREA(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.PREA)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "REFA")
return shared_ptr<Phase>(new REFA(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.REFA)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "PREAB" || dbPhaseName == "PREA") // for backwards compatibility
return std::shared_ptr<Phase>(new PREAB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.PREAB)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "REFAB" || dbPhaseName == "REFA") // for backwards compatibility
return std::shared_ptr<Phase>(new REFAB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.REFAB)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "RFMAB")
return shared_ptr<Phase>(new RFMAB(id, span, clk, trans,
return std::shared_ptr<Phase>(new RFMAB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.RFMAB)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "REFB")
return shared_ptr<Phase>(new REFB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.REFB)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "REFPB" || dbPhaseName == "REFB") // for backwards compatibility
return std::shared_ptr<Phase>(new REFPB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.REFPB)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "RFMPB")
return std::shared_ptr<Phase>(new REFPB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.RFMPB)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "REFP2B")
return std::shared_ptr<Phase>(new REFP2B(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.REFP2B)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "RFMP2B")
return std::shared_ptr<Phase>(new REFP2B(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.RFMP2B)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "PRESB")
return shared_ptr<Phase>(new PRESB(id, span, clk, trans,
return std::shared_ptr<Phase>(new PRESB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.PRESB)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "REFSB")
return shared_ptr<Phase>(new REFSB(id, span, clk, trans,
return std::shared_ptr<Phase>(new REFSB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.REFSB)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "RFMSB")
return shared_ptr<Phase>(new RFMSB(id, span, clk, trans,
return std::shared_ptr<Phase>(new RFMSB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.RFMSB)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "RD")
return shared_ptr<Phase>(new RD(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RD)},
return std::shared_ptr<Phase>(new RD(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RD)},
std::shared_ptr<Timespan>(new Timespan(trans->spanOnDataStrobe))));
else if (dbPhaseName == "RDA")
return shared_ptr<Phase>(new RDA(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RDA)},
return std::shared_ptr<Phase>(new RDA(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RDA)},
std::shared_ptr<Timespan>(new Timespan(trans->spanOnDataStrobe))));
else if (dbPhaseName == "WR")
return shared_ptr<Phase>(new WR(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WR)},
return std::shared_ptr<Phase>(new WR(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WR)},
std::shared_ptr<Timespan>(new Timespan(trans->spanOnDataStrobe))));
else if (dbPhaseName == "WRA")
return shared_ptr<Phase>(new WRA(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WRA)},
return std::shared_ptr<Phase>(new WRA(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WRA)},
std::shared_ptr<Timespan>(new Timespan(trans->spanOnDataStrobe))));
else if (dbPhaseName == "PDNA")
return shared_ptr<Phase>(new PDNA(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PDEA),
return std::shared_ptr<Phase>(new PDNA(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PDEA),
Timespan(span.End() - clk * cl.PDXA, span.End())}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "PDNAB")
return shared_ptr<Phase>(new PDNAB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk),
return std::shared_ptr<Phase>(new PDNAB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk),
Timespan(span.End() - clk, span.End())}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "PDNP")
return shared_ptr<Phase>(new PDNP(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PDEP),
return std::shared_ptr<Phase>(new PDNP(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PDEP),
Timespan(span.End() - clk * cl.PDXP, span.End())}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "PDNPB")
return shared_ptr<Phase>(new PDNPB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk),
return std::shared_ptr<Phase>(new PDNPB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk),
Timespan(span.End() - clk, span.End())}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "SREF")
return shared_ptr<Phase>(new SREF(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.SREFEN),
return std::shared_ptr<Phase>(new SREF(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.SREFEN),
Timespan(span.End() - clk * cl.SREFEX, span.End())}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "SREFB")
return shared_ptr<Phase>(new SREFB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk),
return std::shared_ptr<Phase>(new SREFB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk),
Timespan(span.End() - clk, span.End())}, std::shared_ptr<Timespan>()));
else
throw std::runtime_error("DB phasename " + dbPhaseName.toStdString() + " unkown to phasefactory");

View File

@@ -37,6 +37,7 @@
#ifndef PHASEFACTORY_H
#define PHASEFACTORY_H
#include "phase.h"
#include <QStringList>
#include <memory>
@@ -46,9 +47,8 @@ class TraceDB;
class PhaseFactory
{
private:
PhaseFactory();
public:
PhaseFactory() = delete;
static std::shared_ptr<Phase> CreatePhase(ID id, const QString &dbPhaseName,
const Timespan &span, const std::shared_ptr<Transaction> &trans,
TraceDB &database);

View File

@@ -52,14 +52,13 @@
//define symbol printqueries if all queries should be printed to the console
//#define printqueries
using namespace std;
TraceDB::TraceDB(QString path, bool openExisting)
{
this->pathToDB = path;
database = QSqlDatabase::database(path);
if (database.isValid() && database.isOpen()) {
if (database.isValid() && database.isOpen())
{
// Close the database connection if it exists and was not closed yet.
database.removeDatabase(path);
database.close();
@@ -132,7 +131,7 @@ void TraceDB::refreshData()
//QueryText must select the fields
//TransactionID, Ranges.begin, Ranges.end, Address, TThread, TChannel, TBank, TRow, TColumn, Phases.ID AS PhaseID, PhaseName, PhaseBegin, PhaseEnd
vector<shared_ptr<Transaction>> TraceDB::getTransactionsWithCustomQuery(
std::vector<std::shared_ptr<Transaction>> TraceDB::getTransactionsWithCustomQuery(
QString queryText)
{
QSqlQuery query(database);
@@ -141,7 +140,7 @@ vector<shared_ptr<Transaction>> TraceDB::getTransactionsWithCustomQuery(
return parseTransactionsFromQuery(query);
}
vector<shared_ptr<Transaction>> TraceDB::getTransactionsInTimespan(const Timespan &span, bool updateVisiblePhases)
std::vector<std::shared_ptr<Transaction>> TraceDB::getTransactionsInTimespan(const Timespan &span, bool updateVisiblePhases)
{
selectTransactionsByTimespan.bindValue(":begin", span.Begin());
selectTransactionsByTimespan.bindValue(":end", span.End());
@@ -170,7 +169,7 @@ void TraceDB::updateDependenciesInTimespan(const Timespan &span)
}
//TODO Remove exception
shared_ptr<Transaction> TraceDB::getTransactionByID(ID id)
std::shared_ptr<Transaction> TraceDB::getTransactionByID(ID id)
{
selectTransactionById.bindValue(":id", id);
executeQuery(selectTransactionById);
@@ -183,12 +182,11 @@ shared_ptr<Transaction> TraceDB::getTransactionByID(ID id)
}
shared_ptr<Transaction> TraceDB::getNextActivate(traceTime time)
std::shared_ptr<Transaction> TraceDB::getNextActivate(traceTime time)
{
QSqlQuery query(database);
QString queryText = queryTexts.queryHead +
"WHERE PhaseBegin > :traceTime AND PhaseName "
"IN ('ACT','ACTB') ORDER BY PhaseBegin ASC LIMIT 1";
"WHERE PhaseBegin > :traceTime AND PhaseName = 'ACT' ORDER BY PhaseBegin ASC LIMIT 1";
query.prepare(queryText);
query.bindValue(":traceTime", time);
@@ -196,12 +194,12 @@ shared_ptr<Transaction> TraceDB::getNextActivate(traceTime time)
return parseTransactionFromQuery(query);
}
shared_ptr<Transaction> TraceDB::getNextPrecharge(traceTime time)
std::shared_ptr<Transaction> TraceDB::getNextPrecharge(traceTime time)
{
QSqlQuery query(database);
QString queryText = queryTexts.queryHead +
"WHERE PhaseBegin > :traceTime AND PhaseName "
"IN ('PRE','PREA','PREB','PRESB') ORDER BY PhaseBegin ASC LIMIT 1";
"IN ('PRE','PREPB','PREA','PREAB','PRESB') ORDER BY PhaseBegin ASC LIMIT 1";
query.prepare(queryText);
query.bindValue(":traceTime", time);
@@ -233,12 +231,12 @@ shared_ptr<Transaction> TraceDB::getNextPrecharge(traceTime time)
// return parseTransactionFromQuery(query);
// }
shared_ptr<Transaction> TraceDB::getNextRefresh(traceTime time)
std::shared_ptr<Transaction> TraceDB::getNextRefresh(traceTime time)
{
QSqlQuery query(database);
QString queryText = queryTexts.queryHead +
"WHERE PhaseBegin > :traceTime AND PhaseName "
"IN ('REFA','REFB','REFSB','SREF','SREFB') ORDER BY PhaseBegin ASC LIMIT 1";
"IN ('REFAB','REFA','REFB','REFPB','REFP2B','REFSB','SREF','SREFB') ORDER BY PhaseBegin ASC LIMIT 1";
query.prepare(queryText);
query.bindValue(":traceTime", time);
executeQuery(query);
@@ -278,92 +276,187 @@ ID TraceDB::getTransactionIDFromPhaseID(ID phaseID)
if (query.next()) {
return query.value(0).toInt();
} else {
throw sqlException("Phase with ID " + to_string(phaseID) + " not in db",
throw sqlException("Phase with ID " + std::to_string(phaseID) + " not in db",
this->pathToDB.toStdString());
}
}
GeneralInfo *TraceDB::getGeneralInfoFromDB()
GeneralInfo TraceDB::getGeneralInfoFromDB()
{
QSqlQuery query(database);
query.prepare("SELECT NumberOfTransactions, TraceEnd, NumberOfRanks, NumberOfBankgroups, NumberOfBanks, Clk, "
"UnitOfTime, Traces, Memspec, MCconfig, WindowSize, ControllerThread FROM GeneralInfo");
executeQuery(query);
QVariant parameter;
parameter = getParameterFromTable("NumberOfTransactions", "GeneralInfo");
uint64_t numberOfTransactions = parameter.isValid() ? parameter.toULongLong() : 0;
parameter = getParameterFromTable("TraceEnd", "GeneralInfo");
traceTime traceEnd = parameter.isValid() ? parameter.toULongLong() : 0;
parameter = getParameterFromTable("NumberOfRanks", "GeneralInfo");
unsigned numberOfRanks = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("NumberOfBankgroups", "GeneralInfo");
unsigned numberOfBankGroups = parameter.isValid() ? parameter.toUInt() : numberOfRanks;
parameter = getParameterFromTable("NumberOfBanks", "GeneralInfo");
unsigned numberOfBanks = parameter.isValid() ? parameter.toUInt() : numberOfBankGroups;
parameter = getParameterFromTable("Clk", "GeneralInfo");
uint64_t clkPeriod = parameter.isValid() ? parameter.toULongLong() : 1000;
parameter = getParameterFromTable("UnitOfTime", "GeneralInfo");
QString unitOfTime = parameter.isValid() ? parameter.toString() : "PS";
parameter = getParameterFromTable("Traces", "GeneralInfo");
QString traces = parameter.isValid() ? "Traces: " + parameter.toString() : "Traces: empty";
parameter = getParameterFromTable("Memspec", "GeneralInfo");
QString memspec = parameter.isValid() ? "Memspec: " + parameter.toString() : "Memspec: empty";
parameter = getParameterFromTable("MCconfig", "GeneralInfo");
QString mcconfig = parameter.isValid() ? "MCconfig: " + parameter.toString() : "MCconfig: empty";
parameter = getParameterFromTable("WindowSize", "GeneralInfo");
uint64_t windowSize = parameter.isValid() ? parameter.toULongLong() : 0;
parameter = getParameterFromTable("RefreshMaxPostponed", "GeneralInfo");
unsigned refreshMaxPostponed = parameter.isValid() ? parameter.toUInt() : 0;
parameter = getParameterFromTable("RefreshMaxPulledin", "GeneralInfo");
unsigned refreshMaxPulledin = parameter.isValid() ? parameter.toUInt() : 0;
parameter = getParameterFromTable("ControllerThread", "GeneralInfo");
uint64_t controllerThread = parameter.isValid() ? parameter.toULongLong() : UINT64_MAX;
parameter = getParameterFromTable("MaxBufferDepth", "GeneralInfo");
unsigned maxBufferDepth = parameter.isValid() ? parameter.toUInt() : 8;
parameter = getParameterFromTable("Per2BankOffset", "GeneralInfo");
unsigned per2BankOffset = parameter.isValid() ? parameter.toUInt() : 1;
if (query.next()) {
unsigned int numberOfTransactions = query.value(0).toInt();
traceTime traceEnd = query.value(1).toLongLong();
unsigned int numberOfRanks = query.value(2).toInt();
unsigned int numberOfBankgroups = query.value(3).toInt();
unsigned int numberOfBanks = query.value(4).toInt();
unsigned int clkPeriod = query.value(5).toInt();
QString unitOfTime = query.value(6).toString();
unsigned int numberOfPhases = getNumberOfPhases();
uint64_t numberOfPhases = getNumberOfPhases();
QString traces = "Traces: " + query.value(7).toString();
QString memspec = "Memspec: " + query.value(8).toString();
QString mcconfig = "MCconfig: " + query.value(9).toString();
unsigned int windowSize = query.value(10).toInt();
unsigned int controllerThread = query.value(11).toUInt();
QString description = (traces + "\n");
description += mcconfig + "\n";
description += memspec + "\n";
description += "Number of Transactions: " + QString::number(numberOfTransactions) + "\n";
description += "Clock period: " + QString::number(clkPeriod) + " " + unitOfTime + "\n";
description += "Length of trace: " + prettyFormatTime(traceEnd) + "\n";
description += "Window size:" + QString::number(windowSize) + "\n";
return new GeneralInfo(numberOfTransactions, numberOfPhases, Timespan(0, traceEnd), numberOfRanks,
numberOfBankgroups, numberOfBanks, unitOfTime, clkPeriod, windowSize, controllerThread);
} else {
throw sqlException("Tracefile corrupted. No general info table",
this->pathToDB.toStdString());
}
return {numberOfTransactions, numberOfPhases, Timespan(0, traceEnd), numberOfRanks,
numberOfBankGroups, numberOfBanks, description, unitOfTime, clkPeriod, windowSize,
refreshMaxPostponed, refreshMaxPulledin, controllerThread, maxBufferDepth, per2BankOffset};
}
CommandLengths TraceDB::getCommandLengthsFromDB()
{
unsigned NOP = getLengthOfCommandFromDB("NOP");
unsigned RD = getLengthOfCommandFromDB("RD");
unsigned WR = getLengthOfCommandFromDB("WR");
unsigned RDA = getLengthOfCommandFromDB("RDA");
unsigned WRA = getLengthOfCommandFromDB("WRA");
unsigned ACT = getLengthOfCommandFromDB("ACT");
unsigned PRE = getLengthOfCommandFromDB("PRE");
unsigned REFB = getLengthOfCommandFromDB("REFB");
unsigned PRESB = getLengthOfCommandFromDB("PRESB");
unsigned REFSB = getLengthOfCommandFromDB("REFSB");
unsigned RFMSB = getLengthOfCommandFromDB("RFMSB");
unsigned PREA = getLengthOfCommandFromDB("PREA");
unsigned REFA = getLengthOfCommandFromDB("REFA");
unsigned RFMAB = getLengthOfCommandFromDB("RFMAB");
unsigned PDEA = getLengthOfCommandFromDB("PDEA");
unsigned PDXA = getLengthOfCommandFromDB("PDXA");
unsigned PDEP = getLengthOfCommandFromDB("PDEP");
unsigned PDXP = getLengthOfCommandFromDB("PDXP");
unsigned SREFEN = getLengthOfCommandFromDB("SREFEN");
unsigned SREFEX = getLengthOfCommandFromDB("SREFEX");
return {NOP, RD, WR, RDA, WRA, ACT, PRE, REFB, PRESB, REFSB, RFMSB,
PREA, REFA, RFMAB, PDEA, PDXA, PDEP, PDXP, SREFEN, SREFEX};
}
unsigned int TraceDB::getLengthOfCommandFromDB(const std::string& command)
{
QSqlQuery query(("SELECT " + command + " FROM CommandLengths").c_str(), database);
if (query.first())
return query.value(0).toUInt();
QVariant parameter;
parameter = getParameterFromTable("NOP", "CommandLengths");
unsigned NOP = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("RD", "CommandLengths");
unsigned RD = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("WR", "CommandLengths");
unsigned WR = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("RDA", "CommandLengths");
unsigned RDA = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("WRA", "CommandLengths");
unsigned WRA = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("ACT", "CommandLengths");
unsigned ACT = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("PREPB", "CommandLengths");
unsigned PREPB;
if (parameter.isValid())
{
PREPB = parameter.toUInt();
}
else
{
qDebug() << "Warning: Length of command " << command.c_str() << " not present in DB, setting 1 as default.";
return 1;
parameter = getParameterFromTable("PRE", "CommandLengths");
if (parameter.isValid())
PREPB = parameter.toUInt();
else
PREPB = 1;
}
parameter = getParameterFromTable("REFPB", "CommandLengths");
unsigned REFPB;
if (parameter.isValid())
{
REFPB = parameter.toUInt();
}
else
{
parameter = getParameterFromTable("REFB", "CommandLengths");
if (parameter.isValid())
REFPB = parameter.toUInt();
else
REFPB = 1;
}
parameter = getParameterFromTable("RFMPB", "CommandLengths");
unsigned RFMPB = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("REFP2B", "CommandLengths");
unsigned REFP2B = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("RFMP2B", "CommandLengths");
unsigned RFMP2B = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("PRESB", "CommandLengths");
unsigned PRESB = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("REFSB", "CommandLengths");
unsigned REFSB = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("RFMSB", "CommandLengths");
unsigned RFMSB = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("PREAB", "CommandLengths");
unsigned PREAB;
if (parameter.isValid())
{
PREAB = parameter.toUInt();
}
else
{
parameter = getParameterFromTable("PREA", "CommandLengths");
if (parameter.isValid())
PREAB = parameter.toUInt();
else
PREAB = 1;
}
parameter = getParameterFromTable("REFAB", "CommandLengths");
unsigned REFAB;
if (parameter.isValid())
{
REFAB = parameter.toUInt();
}
else
{
parameter = getParameterFromTable("REFA", "CommandLengths");
if (parameter.isValid())
REFAB = parameter.toUInt();
else
REFAB = 1;
}
parameter = getParameterFromTable("RFMAB", "CommandLengths");
unsigned RFMAB = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("PDEA", "CommandLengths");
unsigned PDEA = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("PDXA", "CommandLengths");
unsigned PDXA = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("PDEP", "CommandLengths");
unsigned PDEP = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("PDXP", "CommandLengths");
unsigned PDXP = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("SREFEN", "CommandLengths");
unsigned SREFEN = parameter.isValid() ? parameter.toUInt() : 1;
parameter = getParameterFromTable("SREFEX", "CommandLengths");
unsigned SREFEX = parameter.isValid() ? parameter.toUInt() : 1;
return {NOP, RD, WR, RDA, WRA, 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)
{
QSqlQuery query(("SELECT " + parameter + " FROM " + table).c_str(), database);
if (query.first())
return query.value(0);
else
{
qDebug() << "Parameter " << parameter.c_str() << " not present in table " << table.c_str();
return {};
}
}
unsigned int TraceDB::getNumberOfPhases()
uint64_t TraceDB::getNumberOfPhases()
{
QSqlQuery query(database);
query.prepare("SELECT COUNT(ID) FROM Phases");
executeQuery(query);
query.next();
return query.value(0).toInt();
return query.value(0).toULongLong();
}
vector<CommentModel::Comment> TraceDB::getComments()
std::vector<CommentModel::Comment> TraceDB::getComments()
{
QSqlQuery query(database);
query.prepare("SELECT Time,Text From Comments");
@@ -372,7 +465,7 @@ vector<CommentModel::Comment> TraceDB::getComments()
}
vector<CommentModel::Comment> TraceDB::getDebugMessagesInTimespan(const Timespan &span)
std::vector<CommentModel::Comment> TraceDB::getDebugMessagesInTimespan(const Timespan &span)
{
selectDebugMessagesByTimespan.bindValue(":begin", span.Begin());
selectDebugMessagesByTimespan.bindValue(":end", span.End());
@@ -381,7 +474,7 @@ vector<CommentModel::Comment> TraceDB::getDebugMessagesInTimespan(const Timespan
return parseCommentsFromQuery(selectDebugMessagesByTimespan);
}
vector<CommentModel::Comment> TraceDB::getDebugMessagesInTimespan(const Timespan &span,
std::vector<CommentModel::Comment> TraceDB::getDebugMessagesInTimespan(const Timespan &span,
unsigned int limit = 50)
{
selectDebugMessagesByTimespanWithLimit.bindValue(":begin", span.Begin());
@@ -434,23 +527,23 @@ QSqlDatabase TraceDB::getDatabase() const
*/
shared_ptr<Transaction> TraceDB::parseTransactionFromQuery(QSqlQuery &query)
std::shared_ptr<Transaction> TraceDB::parseTransactionFromQuery(QSqlQuery &query)
{
auto result = parseTransactionsFromQuery(query);
if (!result.empty())
return result[0];
else
return shared_ptr<Transaction>();
return {};
}
vector<shared_ptr<Transaction>> TraceDB::parseTransactionsFromQuery(QSqlQuery &query, bool updateVisiblePhases)
std::vector<std::shared_ptr<Transaction>> TraceDB::parseTransactionsFromQuery(QSqlQuery &query, bool updateVisiblePhases)
{
if (updateVisiblePhases)
{
_visiblePhases.clear();
}
vector<shared_ptr<Transaction>> result;
std::vector<std::shared_ptr<Transaction>> result;
bool firstIteration = true;
ID currentID = 0;
@@ -475,9 +568,9 @@ vector<shared_ptr<Transaction>> TraceDB::parseTransactionsFromQuery(QSqlQuery &q
unsigned int bank = query.value(11).toInt();
unsigned int row = query.value(12).toInt();
unsigned int column = query.value(13).toInt();
result.push_back(shared_ptr<Transaction>(new Transaction(id, address, burstlength,
result.push_back(std::make_shared<Transaction>(id, address, burstlength,
thread, channel, rank, bankgroup, bank, row, column,
span, spanOnStrobe, generalInfo->clkPeriod)));
span, spanOnStrobe, generalInfo.clkPeriod));
}
unsigned int phaseID = query.value(14).toInt();
@@ -524,14 +617,14 @@ void TraceDB::mUpdateDependenciesFromQuery(QSqlQuery &query)
if (_visiblePhases.count(dependencyID) > 0)
{
_visiblePhases[delayedID]->addDependency(std::shared_ptr<PhaseDependency>(
new PhaseDependency(type, timeDependencyStr, _visiblePhases[dependencyID])));
_visiblePhases[delayedID]->addDependency(std::make_shared<PhaseDependency>(
PhaseDependency(type, timeDependencyStr, _visiblePhases[dependencyID])));
}
else
{
_visiblePhases[delayedID]->addDependency(
std::shared_ptr<PhaseDependency>(new PhaseDependency(type, timeDependencyStr)));
std::make_shared<PhaseDependency>(PhaseDependency(type, timeDependencyStr)));
}
}
else
@@ -541,10 +634,11 @@ void TraceDB::mUpdateDependenciesFromQuery(QSqlQuery &query)
}
}
vector<CommentModel::Comment> TraceDB::parseCommentsFromQuery(QSqlQuery &query)
std::vector<CommentModel::Comment> TraceDB::parseCommentsFromQuery(QSqlQuery &query)
{
vector<CommentModel::Comment> result;
while (query.next()) {
std::vector<CommentModel::Comment> result;
while (query.next())
{
result.push_back(CommentModel::Comment{query.value(0).toLongLong(),
query.value(1).toString()});
}

View File

@@ -77,7 +77,7 @@ public:
const GeneralInfo &getGeneralInfo() const
{
return *generalInfo;
return generalInfo;
}
const CommandLengths &getCommandLengths() const
@@ -114,8 +114,8 @@ public:
private:
QString pathToDB;
QSqlDatabase database;
GeneralInfo *generalInfo;
CommandLengths commandLengths;
GeneralInfo generalInfo;
CommandLengths commandLengths{};
QSqlQuery insertPhaseQuery;
QSqlQuery insertTransactionQuery;
@@ -133,22 +133,22 @@ private:
TransactionQueryTexts queryTexts;
void prepareQueries();
void executeQuery(QSqlQuery query);
QString queryToString(QSqlQuery query);
static QString queryToString(QSqlQuery query);
std::shared_ptr<Transaction> parseTransactionFromQuery(QSqlQuery &query);
std::vector<std::shared_ptr<Transaction>> parseTransactionsFromQuery(QSqlQuery &query,
bool updateVisiblePhases = false);
std::vector<CommentModel::Comment> parseCommentsFromQuery(QSqlQuery &query);
static std::vector<CommentModel::Comment> parseCommentsFromQuery(QSqlQuery &query);
void mUpdateDependenciesFromQuery(QSqlQuery &query);
DependencyInfos parseDependencyInfos(QSqlQuery &query, const DependencyInfos::Type infoType);
static DependencyInfos parseDependencyInfos(QSqlQuery &query, const DependencyInfos::Type infoType);
void executeScriptFile(QString fileName);
void dropAndCreateTables();
unsigned int getNumberOfPhases();
GeneralInfo *getGeneralInfoFromDB();
uint64_t getNumberOfPhases();
GeneralInfo getGeneralInfoFromDB();
CommandLengths getCommandLengthsFromDB();
unsigned int getLengthOfCommandFromDB(const std::string& command);
QVariant getParameterFromTable(const std::string& parameter, const std::string& table);
std::map<unsigned int, std::shared_ptr<Phase>> _visiblePhases; // Updated at parseTransactionsFromQuery
};
@@ -165,7 +165,7 @@ public:
this->message = std::string("Error in file ") + filename + std::string(" ") +
message;
}
const char *what() const noexcept
const char *what() const noexcept override
{
return message.c_str();
}

View File

@@ -192,7 +192,7 @@ void TraceDrawingProperties::collapseOrExpandAllRanks(ToggleCollapsedAction::Col
}
}
const std::shared_ptr<QHash<int, QString>> TraceDrawingProperties::getLabels() const
std::shared_ptr<QHash<int, QString>> TraceDrawingProperties::getLabels() const
{
return labels;
}
@@ -289,3 +289,14 @@ TracePlotLineVector TraceDrawingProperties::getBankLinesFromRank(unsigned int ra
{
return tracePlotLineCache->getBankLinesFromRank(rank);
}
TracePlotLineVector TraceDrawingProperties::getBankLinesTwoBankwise(unsigned int rank, unsigned int firstGroup,
unsigned int firstBank, unsigned int secondGroup,
unsigned int secondBank) const
{
TracePlotLineVector firstBankLines = tracePlotLineCache->getBankLines(rank, firstGroup, firstBank);
TracePlotLineVector secondBankLines = tracePlotLineCache->getBankLines(rank, secondGroup, secondBank);
firstBankLines.insert(firstBankLines.end(), secondBankLines.begin(), secondBankLines.end());
return firstBankLines;
}

View File

@@ -93,12 +93,13 @@ public:
DependencyOptions drawDependenciesOption;
ColorGrouping colorGrouping;
unsigned int numberOfRanks;
unsigned int numberOfBankgroups;
unsigned int numberOfBanks;
unsigned int banksPerRank;
unsigned int groupsPerRank;
unsigned int banksPerGroup;
unsigned int numberOfRanks = 1;
unsigned int numberOfBankGroups = 1;
unsigned int numberOfBanks = 1;
unsigned int banksPerRank = 1;
unsigned int groupsPerRank = 1;
unsigned int banksPerGroup = 1;
unsigned int per2BankOffset = 0;
TraceDrawingProperties(bool drawText = true, bool drawBorder = true,
DependencyOptions drawDependenciesOption = {DependencyOption::Disabled,
@@ -123,9 +124,12 @@ public:
TracePlotLineVector getBankLines(unsigned int rank, unsigned int group, unsigned int bank) const;
TracePlotLineVector getBankLinesFromGroup(unsigned int rank, unsigned int group) const;
TracePlotLineVector getBankLinesGroupwise(unsigned int rank, unsigned int bank) const;
TracePlotLineVector getBankLinesTwoBankwise(unsigned int rank, unsigned int firstGroup,
unsigned int firstBank, unsigned int secondGroup,
unsigned int secondBank) const;
TracePlotLineVector getBankLinesFromRank(unsigned int rank) const;
const std::shared_ptr<QHash<int, QString>> getLabels() const;
std::shared_ptr<QHash<int, QString>> getLabels() const;
void updateTracePlotLines(QTreeWidget *treeWidget);
void collapseOrExpandAllRanks(ToggleCollapsedAction::CollapseAction collapseAction);
@@ -142,7 +146,7 @@ private:
std::shared_ptr<TracePlotLineVector> tracePlotLines;
std::shared_ptr<TracePlotLineCache> tracePlotLineCache;
TracePlot *tracePlot;
TracePlot *tracePlot = nullptr;
};
#endif // TRACECOLLECTIONDRAWINGPROPERTIES_H

View File

@@ -303,11 +303,12 @@ void TracePlot::setUpDrawingProperties()
drawingProperties.init(navigator->getTracePlotLines(), navigator->getTracePlotLineCache(), this);
drawingProperties.numberOfRanks = navigator->GeneralTraceInfo().numberOfRanks;
drawingProperties.numberOfBankgroups = navigator->GeneralTraceInfo().numberOfBankgroups;
drawingProperties.numberOfBankGroups = navigator->GeneralTraceInfo().numberOfBankGroups;
drawingProperties.numberOfBanks = navigator->GeneralTraceInfo().numberOfBanks;
drawingProperties.banksPerRank = drawingProperties.numberOfBanks / drawingProperties.numberOfRanks;
drawingProperties.groupsPerRank = drawingProperties.numberOfBankgroups / drawingProperties.numberOfRanks;
drawingProperties.banksPerGroup = drawingProperties.numberOfBanks / drawingProperties.numberOfBankgroups;
drawingProperties.groupsPerRank = drawingProperties.numberOfBankGroups / drawingProperties.numberOfRanks;
drawingProperties.banksPerGroup = drawingProperties.numberOfBanks / drawingProperties.numberOfBankGroups;
drawingProperties.per2BankOffset = navigator->GeneralTraceInfo().per2BankOffset;
}
void TracePlot::setUpQueryEditor()

View File

@@ -107,11 +107,12 @@ void TraceScroller::setUpDrawingProperties()
drawingProperties.init(navigator->getTracePlotLines(), navigator->getTracePlotLineCache());
drawingProperties.numberOfRanks = navigator->GeneralTraceInfo().numberOfRanks;
drawingProperties.numberOfBankgroups = navigator->GeneralTraceInfo().numberOfBankgroups;
drawingProperties.numberOfBankGroups = navigator->GeneralTraceInfo().numberOfBankGroups;
drawingProperties.numberOfBanks = navigator->GeneralTraceInfo().numberOfBanks;
drawingProperties.banksPerRank = drawingProperties.numberOfBanks / drawingProperties.numberOfRanks;
drawingProperties.groupsPerRank = drawingProperties.numberOfBankgroups / drawingProperties.numberOfRanks;
drawingProperties.banksPerGroup = drawingProperties.numberOfBanks / drawingProperties.numberOfBankgroups;
drawingProperties.groupsPerRank = drawingProperties.numberOfBankGroups / drawingProperties.numberOfRanks;
drawingProperties.banksPerGroup = drawingProperties.numberOfBanks / drawingProperties.numberOfBankGroups;
drawingProperties.per2BankOffset = navigator->GeneralTraceInfo().per2BankOffset;
}