From 6f29e27c580ac055b538ae53b728cda4d572da22 Mon Sep 17 00:00:00 2001 From: sprado Date: Tue, 3 Apr 2018 16:26:23 +0200 Subject: [PATCH] Controller Thread --- DRAMSys/library/resources/scripts/createTraceDB.sql | 3 ++- DRAMSys/library/src/common/DebugManager.h | 1 - DRAMSys/library/src/common/TlmRecorder.cpp | 8 +++++--- DRAMSys/library/src/common/Utils.cpp | 3 ++- DRAMSys/library/src/common/Utils.h | 1 - DRAMSys/library/src/controller/Controller.h | 3 +++ DRAMSys/library/src/controller/scheduler/Fifo.cpp | 2 +- DRAMSys/library/src/controller/scheduler/FifoStrict.cpp | 2 +- DRAMSys/library/src/controller/scheduler/Fr_Fcfs.cpp | 2 +- DRAMSys/library/src/error/ECC/Word.cpp | 2 +- DRAMSys/library/src/simulation/Arbiter.h | 4 ++-- DRAMSys/library/src/simulation/Dram.h | 2 +- DRAMSys/library/src/simulation/SimpleArbiter.h | 2 +- DRAMSys/library/src/simulation/TracePlayer.cpp | 4 ++-- DRAMSys/traceAnalyzer/businessObjects/generalinfo.h | 5 +++-- DRAMSys/traceAnalyzer/businessObjects/transaction.cpp | 2 +- DRAMSys/traceAnalyzer/businessObjects/transaction.h | 5 +---- DRAMSys/traceAnalyzer/data/tracedb.cpp | 7 ++++--- .../traceAnalyzer/presentation/transactiontreewidget.cpp | 7 +++---- .../traceAnalyzer/presentation/transactiontreewidget.h | 5 +---- 20 files changed, 35 insertions(+), 35 deletions(-) diff --git a/DRAMSys/library/resources/scripts/createTraceDB.sql b/DRAMSys/library/resources/scripts/createTraceDB.sql index ff5e7ce5..1ba6c3aa 100644 --- a/DRAMSys/library/resources/scripts/createTraceDB.sql +++ b/DRAMSys/library/resources/scripts/createTraceDB.sql @@ -25,7 +25,8 @@ CREATE TABLE GeneralInfo( Traces TEXT, WindowSize INTEGER, FlexibleRefresh INTEGER, - MaxRefBurst INTEGER + MaxRefBurst INTEGER, + ControllerThread INTEGER ); CREATE TABLE Power( diff --git a/DRAMSys/library/src/common/DebugManager.h b/DRAMSys/library/src/common/DebugManager.h index 3be8492b..69740367 100644 --- a/DRAMSys/library/src/common/DebugManager.h +++ b/DRAMSys/library/src/common/DebugManager.h @@ -40,7 +40,6 @@ #include #include #include - #include "Utils.h" class DebugManager diff --git a/DRAMSys/library/src/common/TlmRecorder.cpp b/DRAMSys/library/src/common/TlmRecorder.cpp index 092d2f92..59e546aa 100644 --- a/DRAMSys/library/src/common/TlmRecorder.cpp +++ b/DRAMSys/library/src/common/TlmRecorder.cpp @@ -44,6 +44,7 @@ #include "dramExtension.h" #include "xmlAddressdecoder.h" #include "../controller/core/configuration/Configuration.h" +#include "../controller/Controller.h" using namespace std; @@ -154,7 +155,7 @@ void TlmRecorder::introduceTransactionSystem(tlm::tlm_generic_payload& trans) currentTransactionsInSystem[&trans].burstlength = trans.get_streaming_width(); currentTransactionsInSystem[&trans].dramExtension = DramExtension::getExtension(trans); - if(DramExtension::getExtension(trans).getThread().ID() == 0) + if(DramExtension::getExtension(trans).getThread().ID() == Controller::ControllerThreadId()) currentTransactionsInSystem[&trans].timeOfGeneration = SC_ZERO_TIME; else currentTransactionsInSystem[&trans].timeOfGeneration = GenerationExtension::getExtension(&trans).TimeOfGeneration(); @@ -285,8 +286,8 @@ void TlmRecorder::prepareSqlStatements() updatePhaseString = "UPDATE Phases SET PhaseEnd = :end WHERE Transact = :trans AND PhaseName = :name"; insertGeneralInfoString = - "INSERT INTO GeneralInfo (NumberOfTransactions,TraceEnd,NumberOfBanks,clk,UnitOfTime,MCconfig,Memspec,Traces, WindowSize, FlexibleRefresh, MaxRefBurst) VALUES" - "(:numberOfTransactions,:end,:numberOfBanks,:clk,:unitOfTime,:mcconfig,:memspec,:traces,:windowSize, :flexibleRefresh, :maxRefBurst)"; + "INSERT INTO GeneralInfo (NumberOfTransactions,TraceEnd,NumberOfBanks,clk,UnitOfTime,MCconfig,Memspec,Traces, WindowSize, FlexibleRefresh, MaxRefBurst, ControllerThread) VALUES" + "(:numberOfTransactions,:end,:numberOfBanks,:clk,:unitOfTime,:mcconfig,:memspec,:traces,:windowSize, :flexibleRefresh, :maxRefBurst, :controllerThread)"; insertDebugMessageString = "INSERT INTO DebugMessages (Time,Message) Values (:time,:message)"; insertPowerString = "INSERT INTO Power VALUES (:time,:averagePower)"; @@ -333,6 +334,7 @@ void TlmRecorder::insertGeneralInfo() sqlite3_bind_int(insertGeneralInfoStatement, 10, 0); sqlite3_bind_int(insertGeneralInfoStatement, 11, 0); } + sqlite3_bind_int(insertGeneralInfoStatement, 12, Controller::ControllerThreadId()); ; executeSqlStatement(insertGeneralInfoStatement); } diff --git a/DRAMSys/library/src/common/Utils.cpp b/DRAMSys/library/src/common/Utils.cpp index e5b09fee..18bd282a 100644 --- a/DRAMSys/library/src/common/Utils.cpp +++ b/DRAMSys/library/src/common/Utils.cpp @@ -40,6 +40,7 @@ #include #include #include "dramExtension.h" +#include "../controller/Controller.h" using namespace std; using namespace tinyxml2; @@ -232,7 +233,7 @@ void setUpDummy(tlm::tlm_generic_payload& payload, Bank& bank) payload.set_dmi_allowed(false); payload.set_byte_enable_length(0); payload.set_streaming_width(0); - payload.set_extension(new DramExtension(Thread(0), bank, BankGroup(0), Row(0), Column(0))); //payload takes ownership + payload.set_extension(new DramExtension(Thread(Controller::ControllerThreadId()), bank, BankGroup(0), Row(0), Column(0))); //payload takes ownership //TODO .. Dummies muessen noch banggruppe und rank sauber bekommen .. noch was ueberlegen!!! } diff --git a/DRAMSys/library/src/common/Utils.h b/DRAMSys/library/src/common/Utils.h index 78dc85ed..1e08cace 100644 --- a/DRAMSys/library/src/common/Utils.h +++ b/DRAMSys/library/src/common/Utils.h @@ -47,7 +47,6 @@ #include "dramExtension.h" #include "third_party/tinyxml2/tinyxml2.h" - #define DEF_SINGLETON( NAME ) \ public: \ static NAME& getInstance() \ diff --git a/DRAMSys/library/src/controller/Controller.h b/DRAMSys/library/src/controller/Controller.h index 4b58d50d..d280b9cf 100644 --- a/DRAMSys/library/src/controller/Controller.h +++ b/DRAMSys/library/src/controller/Controller.h @@ -111,6 +111,8 @@ public: unsigned int getTotalNumberOfPayloadsInSystem(); void scheduleNextFromScheduler(Bank bank) override; + static unsigned int ControllerThreadId() {return controllerThreadId;} + private: void buildScheduler(); void payloadEntersSystem(tlm_generic_payload& payload); @@ -161,6 +163,7 @@ private: // SystemC related: virtual void end_of_simulation() override; + static const unsigned int controllerThreadId = INT_MAX; }; #endif /* CONTROLLERWRAPPER_H_ */ diff --git a/DRAMSys/library/src/controller/scheduler/Fifo.cpp b/DRAMSys/library/src/controller/scheduler/Fifo.cpp index 7d7a90e1..60aecf5b 100644 --- a/DRAMSys/library/src/controller/scheduler/Fifo.cpp +++ b/DRAMSys/library/src/controller/scheduler/Fifo.cpp @@ -60,7 +60,7 @@ pair Fifo::getNextRequest(Bank bank) return pair(Command::NOP, NULL); } -gp* Fifo::getPendingRequest(Bank bank) +gp* Fifo::getPendingRequest(Bank /*bank*/) { return NULL; } diff --git a/DRAMSys/library/src/controller/scheduler/FifoStrict.cpp b/DRAMSys/library/src/controller/scheduler/FifoStrict.cpp index 6e8bd292..6b6b1caa 100644 --- a/DRAMSys/library/src/controller/scheduler/FifoStrict.cpp +++ b/DRAMSys/library/src/controller/scheduler/FifoStrict.cpp @@ -128,7 +128,7 @@ std::pair FifoStrict::getNextRequest(Bank b return pair(Command::NOP, NULL); } -gp* FifoStrict::getPendingRequest(Bank bank) +gp* FifoStrict::getPendingRequest(Bank /*bank*/) { return NULL; } diff --git a/DRAMSys/library/src/controller/scheduler/Fr_Fcfs.cpp b/DRAMSys/library/src/controller/scheduler/Fr_Fcfs.cpp index 5b022ca6..dec43cd2 100644 --- a/DRAMSys/library/src/controller/scheduler/Fr_Fcfs.cpp +++ b/DRAMSys/library/src/controller/scheduler/Fr_Fcfs.cpp @@ -122,7 +122,7 @@ deque::iterator FR_FCFS::FindRowHit(Bank bank) return queue.end(); } -gp* FR_FCFS::getPendingRequest(Bank bank) +gp* FR_FCFS::getPendingRequest(Bank /*bank*/) { return NULL; } diff --git a/DRAMSys/library/src/error/ECC/Word.cpp b/DRAMSys/library/src/error/ECC/Word.cpp index fbf82ef3..2edb4879 100644 --- a/DRAMSys/library/src/error/ECC/Word.cpp +++ b/DRAMSys/library/src/error/ECC/Word.cpp @@ -120,7 +120,7 @@ void CWord::Resize(unsigned nsize) m_nBitLength = nsize; } -bool CWord::PartShiftRight(unsigned nPos, unsigned nShift) +bool CWord::PartShiftRight(unsigned nPos, unsigned /*nShift*/) { if(nPos >= m_nBitLength) return false; diff --git a/DRAMSys/library/src/simulation/Arbiter.h b/DRAMSys/library/src/simulation/Arbiter.h index 114e3d03..d5dbc1dd 100644 --- a/DRAMSys/library/src/simulation/Arbiter.h +++ b/DRAMSys/library/src/simulation/Arbiter.h @@ -157,7 +157,7 @@ private: void peqCallback(tlm_generic_payload& payload, const tlm_phase& phase) { - unsigned int initiatorSocket = DramExtension::getExtension(payload).getThread().ID()-1; + unsigned int initiatorSocket = DramExtension::getExtension(payload).getThread().ID(); unsigned int channelId = DramExtension::getExtension(payload).getChannel().ID(); // Check the valid range of initiatorSocket ID and channel Id @@ -251,7 +251,7 @@ private: DecodedAddress decodedAddress = xmlAddressDecoder::getInstance().decodeAddress(payload.get_address()); // Check the valid range of decodedAddress if (addressIsValid(decodedAddress)) { - DramExtension* extension = new DramExtension(Thread(socketId+1), Channel(decodedAddress.channel), Bank(decodedAddress.bank), BankGroup(decodedAddress.bankgroup), Row(decodedAddress.row), Column(decodedAddress.column),burstlength); + DramExtension* extension = new DramExtension(Thread(socketId), Channel(decodedAddress.channel), Bank(decodedAddress.bank), BankGroup(decodedAddress.bankgroup), Row(decodedAddress.row), Column(decodedAddress.column),burstlength); payload.set_auto_extension(extension); } else { SC_REPORT_FATAL("Arbiter", "Decoded Address are not inside the valid range"); diff --git a/DRAMSys/library/src/simulation/Dram.h b/DRAMSys/library/src/simulation/Dram.h index 61d5f941..cafd7255 100644 --- a/DRAMSys/library/src/simulation/Dram.h +++ b/DRAMSys/library/src/simulation/Dram.h @@ -566,7 +566,7 @@ struct Dram : sc_module else { tlm::tlm_command cmd = trans.get_command(); - sc_dt::uint64 adr = trans.get_address(); // TODO: - offset; + //sc_dt::uint64 adr = trans.get_address(); // TODO: - offset; unsigned char* ptr = trans.get_data_ptr(); unsigned int len = trans.get_data_length(); //unsigned int bank = DramExtension::getExtension(trans).getBank().ID(); diff --git a/DRAMSys/library/src/simulation/SimpleArbiter.h b/DRAMSys/library/src/simulation/SimpleArbiter.h index cbd252f5..f29cda24 100644 --- a/DRAMSys/library/src/simulation/SimpleArbiter.h +++ b/DRAMSys/library/src/simulation/SimpleArbiter.h @@ -110,7 +110,7 @@ protected: { tlmRecorder->recordPhase(payload, phase, bwDelay + sc_time_stamp()); - tSocket[DramExtension::getThread(payload).ID()-1]->nb_transport_bw(payload, TPhase, bwDelay); + tSocket[DramExtension::getThread(payload).ID()]->nb_transport_bw(payload, TPhase, bwDelay); if(phase == BEGIN_RESP) { diff --git a/DRAMSys/library/src/simulation/TracePlayer.cpp b/DRAMSys/library/src/simulation/TracePlayer.cpp index d9dfc008..7b59309b 100644 --- a/DRAMSys/library/src/simulation/TracePlayer.cpp +++ b/DRAMSys/library/src/simulation/TracePlayer.cpp @@ -41,9 +41,9 @@ TracePlayer::TracePlayer(TracePlayerListener* listener) : payloadEventQueue(this, &TracePlayer::peqCallback), transactionsSent(0), - transactionsReceived(0), - listener(listener), + transactionsReceived(0), numberOfTransactions(0), + listener(listener), finished(false) { iSocket.register_nb_transport_bw(this, &TracePlayer::nb_transport_bw); diff --git a/DRAMSys/traceAnalyzer/businessObjects/generalinfo.h b/DRAMSys/traceAnalyzer/businessObjects/generalinfo.h index 723d2828..d7100469 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/generalinfo.h +++ b/DRAMSys/traceAnalyzer/businessObjects/generalinfo.h @@ -50,10 +50,11 @@ struct GeneralInfo QString unitOfTime; unsigned int clkPeriod; unsigned int windowSize; + unsigned int controllerThread; public: - GeneralInfo(unsigned int numberOfTransactions,unsigned int numberOfPhases,Timespan span,unsigned int numberOfBanks,const QString& description, QString unitOfTime,unsigned int clkPeriod, unsigned int windowSize) : - numberOfTransactions(numberOfTransactions) , numberOfPhases(numberOfPhases),span(span), numberOfBanks(numberOfBanks), description(description), unitOfTime(unitOfTime), clkPeriod(clkPeriod), windowSize(windowSize) + GeneralInfo(unsigned int numberOfTransactions,unsigned int numberOfPhases,Timespan span,unsigned int numberOfBanks,const QString& description, QString unitOfTime,unsigned int clkPeriod, unsigned int windowSize, unsigned int controllerThread) : + numberOfTransactions(numberOfTransactions) , numberOfPhases(numberOfPhases),span(span), numberOfBanks(numberOfBanks), description(description), unitOfTime(unitOfTime), clkPeriod(clkPeriod), windowSize(windowSize), controllerThread(controllerThread) { } diff --git a/DRAMSys/traceAnalyzer/businessObjects/transaction.cpp b/DRAMSys/traceAnalyzer/businessObjects/transaction.cpp index fa163a82..0578cbb2 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/transaction.cpp +++ b/DRAMSys/traceAnalyzer/businessObjects/transaction.cpp @@ -39,7 +39,7 @@ using namespace std; Transaction::Transaction(ID id,unsigned int address,unsigned int burstlength,int thread, unsigned int channel, unsigned int bank,unsigned int bankgroup, unsigned int row, unsigned int column, Timespan span, Timespan spanOnDataStrobe) - :address(address),burstlength(burstlength),channel(channel), bank(bank),bankgroup(bankgroup), row(row), column(column),thread(thread),span(span),spanOnDataStrobe(spanOnDataStrobe),id(id){} + :address(address), burstlength(burstlength), thread(thread), channel(channel), bank(bank),bankgroup(bankgroup), row(row), column(column),span(span),spanOnDataStrobe(spanOnDataStrobe),id(id){} void Transaction::addPhase(shared_ptr phase) { diff --git a/DRAMSys/traceAnalyzer/businessObjects/transaction.h b/DRAMSys/traceAnalyzer/businessObjects/transaction.h index b2ea8a45..7faa11fc 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/transaction.h +++ b/DRAMSys/traceAnalyzer/businessObjects/transaction.h @@ -48,8 +48,7 @@ typedef unsigned int ID; class Transaction { private: - unsigned int address,burstlength,channel,bank,bankgroup,row,column; - int thread; + unsigned int address,burstlength,thread,channel,bank,bankgroup,row,column; Timespan span; Timespan spanOnDataStrobe; ID id; @@ -62,7 +61,6 @@ public: void addPhase(std::shared_ptr phase); bool isSelected(traceTime time,double yVal, const TraceDrawingProperties& drawingproperties) const; - bool isControllerInternal(){return thread==0;} unsigned int Address() const{return address;} unsigned int Burstlength() const{return burstlength;} @@ -76,7 +74,6 @@ public: const Timespan& Span() const{return span;} const Timespan& SpanOnDataStrobe() {return spanOnDataStrobe;} const std::vector>& Phases() const{return phases;} - }; #endif // TRANSACTION_H diff --git a/DRAMSys/traceAnalyzer/data/tracedb.cpp b/DRAMSys/traceAnalyzer/data/tracedb.cpp index b0e88b4d..00706d5f 100644 --- a/DRAMSys/traceAnalyzer/data/tracedb.cpp +++ b/DRAMSys/traceAnalyzer/data/tracedb.cpp @@ -199,7 +199,7 @@ ID TraceDB::getTransactionIDFromPhaseID(ID phaseID) GeneralInfo TraceDB::getGeneralInfoFromDB() { QSqlQuery query(database); - query.prepare("SELECT NumberOfTransactions,TraceEnd,NumberOfBanks,Clk,UnitOfTime,Traces,Memspec,MCconfig, WindowSize FROM GeneralInfo"); + query.prepare("SELECT NumberOfTransactions,TraceEnd,NumberOfBanks,Clk,UnitOfTime,Traces,Memspec,MCconfig, WindowSize, ControllerThread FROM GeneralInfo"); executeQuery(query); if(query.next()) @@ -215,6 +215,7 @@ GeneralInfo TraceDB::getGeneralInfoFromDB() QString memspec = "Memspec: " + query.value(6).toString(); QString mcconfig = "MCconfig: " + query.value(7).toString(); unsigned int windowSize = query.value(8).toInt(); + unsigned int controllerThread = query.value(9).toUInt(); QString description = (traces + "\n"); description += mcconfig + "\n"; @@ -224,7 +225,7 @@ GeneralInfo TraceDB::getGeneralInfoFromDB() description += "Length of trace: " + prettyFormatTime(traceEnd) + "\n"; description += "Window size:" + QString::number(windowSize) + "\n"; - return GeneralInfo(numberOfTransactions, numberOfPhases, Timespan(0,traceEnd),numberOfBanks,description,unitOfTime,clkPeriod, windowSize); + return GeneralInfo(numberOfTransactions, numberOfPhases, Timespan(0,traceEnd),numberOfBanks,description,unitOfTime,clkPeriod, windowSize, controllerThread); } else { @@ -306,7 +307,7 @@ vector> TraceDB::parseTransactionsFromQuery(QSqlQuery &q Timespan spanOnStrobe(query.value(3).toLongLong(),query.value(4).toLongLong()); unsigned int address = query.value(5).toInt(); unsigned int burstlength = query.value(6).toInt(); - int thread= query.value(7).toInt(); + unsigned int thread= query.value(7).toInt(); unsigned int channel = query.value(8).toInt(); unsigned int bank = query.value(9).toInt(); unsigned int bankgroup = query.value(10).toInt(); diff --git a/DRAMSys/traceAnalyzer/presentation/transactiontreewidget.cpp b/DRAMSys/traceAnalyzer/presentation/transactiontreewidget.cpp index 45bdd2e6..7f552e8f 100644 --- a/DRAMSys/traceAnalyzer/presentation/transactiontreewidget.cpp +++ b/DRAMSys/traceAnalyzer/presentation/transactiontreewidget.cpp @@ -62,11 +62,10 @@ void TransactionTreeWidget::init(TraceNavigator *navigator) void TransactionTreeWidget::AppendTransaction(const shared_ptr &transaction) { - QTreeWidgetItem *node = new TransactionTreeItem(this,transaction); + QTreeWidgetItem *node = new TransactionTreeItem(this,transaction, navigator->GeneralTraceInfo().controllerThread); addTopLevelItem(node); } - void TransactionTreeWidget::ContextMenuRequested(QPoint point) { if(selectedItems().count() > 0 && selectedItems().at(0)->type() == TransactionTreeWidget::TransactionTreeItem::transactionTreeItemType) @@ -83,7 +82,7 @@ void TransactionTreeWidget::ContextMenuRequested(QPoint point) } } -TransactionTreeWidget::TransactionTreeItem::TransactionTreeItem(QTreeWidget *parent, const shared_ptr &transaction) : QTreeWidgetItem(parent,transactionTreeItemType) +TransactionTreeWidget::TransactionTreeItem::TransactionTreeItem(QTreeWidget *parent, const shared_ptr &transaction, unsigned int controllerThread) : QTreeWidgetItem(parent,transactionTreeItemType) { this->setText(0, QString::number(transaction->Id())); this->id = transaction->Id(); @@ -100,7 +99,7 @@ TransactionTreeWidget::TransactionTreeItem::TransactionTreeItem(QTreeWidget *par this->addChild(new QTreeWidgetItem( {"Column", QString::number(transaction->Column())} )); this->addChild(new QTreeWidgetItem( {"Address", QString("0x") + QString::number(transaction->Address(),16)} )); - if(!transaction->isControllerInternal()) + if(!transaction->Thread() != controllerThread) { this->addChild(new QTreeWidgetItem( {"Burstlength", QString::number(transaction->Burstlength())})); this->addChild(new QTreeWidgetItem( {"Thread", QString::number(transaction->Thread())})); diff --git a/DRAMSys/traceAnalyzer/presentation/transactiontreewidget.h b/DRAMSys/traceAnalyzer/presentation/transactiontreewidget.h index b31bd27d..e2c7ed06 100644 --- a/DRAMSys/traceAnalyzer/presentation/transactiontreewidget.h +++ b/DRAMSys/traceAnalyzer/presentation/transactiontreewidget.h @@ -70,16 +70,13 @@ private: { public: static constexpr int transactionTreeItemType = 1001; - TransactionTreeItem(QTreeWidget *parent, const std::shared_ptr &trans); + TransactionTreeItem(QTreeWidget *parent, const std::shared_ptr &trans, unsigned int controllerThread); ID Id(){return id;} private: ID id; void AppendTimespan(QTreeWidgetItem *parent, const Timespan ×pan); void AppendPhase(QTreeWidgetItem *parent, const Phase &phase); }; - - - }; #endif // TRANSACTIONTREEWIDGET_H