Power Recording implemented
This commit is contained in:
@@ -4,6 +4,7 @@ DROP TABLE IF EXISTS Comments;
|
||||
DROP TABLE IF EXISTS ranges;
|
||||
DROP TABLE IF EXISTS Transactions;
|
||||
DROP TABLE IF EXISTS DebugMessages;
|
||||
DROP TABLE IF EXISTS Power;
|
||||
|
||||
CREATE TABLE Phases(
|
||||
ID INTEGER PRIMARY KEY,
|
||||
@@ -24,6 +25,11 @@ CREATE TABLE GeneralInfo(
|
||||
Traces TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE Power(
|
||||
time INTEGER,
|
||||
AveragePower DOUBLE
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE Comments(
|
||||
Time INTEGER,
|
||||
@@ -60,4 +66,4 @@ CREATE TABLE Transactions(
|
||||
|
||||
CREATE INDEX ranges_index ON Transactions(Range);
|
||||
CREATE INDEX "phasesTransactions" ON "Phases" ("Transact" ASC);
|
||||
CREATE INDEX "messageTimes" ON "DebugMessages" ("Time" ASC);
|
||||
CREATE INDEX "messageTimes" ON "DebugMessages" ("Time" ASC);
|
||||
|
||||
@@ -231,3 +231,5 @@ OTHER_FILES += resources/configs/amconfig/am_wideioFourBanks.xml
|
||||
OTHER_FILES += resources/configs/memconfigs/fifo.xml
|
||||
OTHER_FILES += resources/configs/memconfigs/fifoStrict.xml
|
||||
OTHER_FILES += resources/configs/memconfigs/fr_fcfs.xml
|
||||
|
||||
OTHER_FILES += resources/scripts/createTraceDB.sql
|
||||
|
||||
@@ -74,6 +74,13 @@ TlmRecorder::~TlmRecorder()
|
||||
closeConnection();
|
||||
}
|
||||
|
||||
void TlmRecorder::recordPower(sc_time time, double averagePower)
|
||||
{
|
||||
sqlite3_bind_int64(insertPowerStatement, 1, time.value());
|
||||
sqlite3_bind_double(insertPowerStatement, 2, averagePower);
|
||||
executeSqlStatement(insertPowerStatement);
|
||||
}
|
||||
|
||||
void TlmRecorder::recordPhase(tlm::tlm_generic_payload& trans, tlm::tlm_phase phase, sc_time time)
|
||||
{
|
||||
if(TlmRecorder::recordingEnabled)
|
||||
@@ -264,6 +271,7 @@ void TlmRecorder::prepareSqlStatements()
|
||||
"INSERT INTO GeneralInfo (NumberOfTransactions,TraceEnd,NumberOfBanks,clk,UnitOfTime,Memconfig,Memspec,Traces) Values "
|
||||
"(:numberOfTransactions,:end,:numberOfBanks,:clk,:unitOfTime,:memconfig,:memspec,:traces)";
|
||||
insertDebugMessageString = "INSERT INTO DebugMessages (Time,Message) Values (:time,:message)";
|
||||
insertPowerString = "INSERT INTO Power VALUES (:time,:averagePower)";
|
||||
|
||||
sqlite3_prepare_v2(db, insertTransactionString.c_str(), -1, &insertTransactionStatement, 0);
|
||||
sqlite3_prepare_v2(db, insertRangeString.c_str(), -1, &insertRangeStatement, 0);
|
||||
@@ -273,6 +281,7 @@ void TlmRecorder::prepareSqlStatements()
|
||||
sqlite3_prepare_v2(db, updateDataStrobeString.c_str(), -1, &updateDataStrobeStatement, 0);
|
||||
sqlite3_prepare_v2(db, insertGeneralInfoString.c_str(), -1, &insertGeneralInfoStatement, 0);
|
||||
sqlite3_prepare_v2(db, insertDebugMessageString.c_str(), -1, &insertDebugMessageStatement, 0);
|
||||
sqlite3_prepare_v2(db, insertPowerString.c_str(), -1, &insertPowerStatement, 0);
|
||||
}
|
||||
|
||||
void TlmRecorder::insertDebugMessageInDB(string message, const sc_time& time)
|
||||
|
||||
@@ -69,6 +69,7 @@ public:
|
||||
void recordTracenames(string traces){this->traces = traces;}
|
||||
|
||||
void recordPhase(tlm::tlm_generic_payload &trans, tlm::tlm_phase phase, sc_time time);
|
||||
void recordPower(sc_time time, double averagePower);
|
||||
void recordDebugMessage(std::string message, sc_time time);
|
||||
void updateDataStrobe(const sc_time& begin, const sc_time& end, tlm::tlm_generic_payload& trans);
|
||||
void closeConnection();
|
||||
@@ -131,9 +132,9 @@ private:
|
||||
std::vector<tlm::tlm_phase> transactionTerminatingPhases;
|
||||
sqlite3 *db = NULL;
|
||||
sqlite3_stmt *insertTransactionStatement, *insertRangeStatement, *updateRangeStatement,
|
||||
*insertPhaseStatement, *updatePhaseStatement, *insertGeneralInfoStatement, *insertDebugMessageStatement, *updateDataStrobeStatement;
|
||||
*insertPhaseStatement, *updatePhaseStatement, *insertGeneralInfoStatement, *insertDebugMessageStatement, *updateDataStrobeStatement, *insertPowerStatement;
|
||||
std::string insertTransactionString, insertRangeString, updateRangeString, insertPhaseString, updatePhaseString, insertGeneralInfoString,
|
||||
insertDebugMessageString, updateDataStrobeString;
|
||||
insertDebugMessageString, updateDataStrobeString, insertPowerString;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -200,7 +200,11 @@ struct Dram : sc_module
|
||||
// Calculate the residual power and energy which was not covered by previous windows...
|
||||
printDebugMessage(string("\tCurrent Energy: \t") + to_string(DRAMPower->getEnergy().total_energy - totalEnergy));
|
||||
printDebugMessage(string("\tAverage Power: \t") + to_string((DRAMPower->getEnergy().total_energy - totalEnergy)/windowSize.value()));
|
||||
sumOfEnergyWindows += DRAMPower->getEnergy().total_energy - totalEnergy;
|
||||
|
||||
double currentTotalEnergy = DRAMPower->getEnergy().total_energy - totalEnergy;
|
||||
double currentAveragePower = currentTotalEnergy/windowSize.value();
|
||||
sumOfEnergyWindows += currentTotalEnergy;
|
||||
tlmRecorder->recordPower(sc_time_stamp(),currentAveragePower);
|
||||
totalEnergy = DRAMPower->getEnergy().total_energy;
|
||||
|
||||
// Make sure that the summed energy of the windows is the same as the final value provided by DRAMPower:
|
||||
@@ -231,6 +235,7 @@ struct Dram : sc_module
|
||||
currentTotalEnergy = DRAMPower->getEnergy().total_energy - totalEnergy;
|
||||
currentAveragePower = currentTotalEnergy/windowSize.value();
|
||||
// TODO: Store $currentAveragePower in the trace database.
|
||||
tlmRecorder->recordPower(sc_time_stamp(),currentAveragePower);
|
||||
totalEnergy = DRAMPower->getEnergy().total_energy;
|
||||
sumOfEnergyWindows += currentTotalEnergy;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user