test and adjusted some of Felipes changes
This commit is contained in:
@@ -67,10 +67,10 @@ struct Dram : sc_module
|
||||
|
||||
// Power Model related
|
||||
bool powerAnalysis = Configuration::getInstance().PowerAnalysis;
|
||||
sc_time windowSize = sc_time(1000,SC_NS);
|
||||
sc_time windowSize = sc_time(1000,SC_NS); // TODO: this window size should be configurable by the config file
|
||||
libDRAMPower * DRAMPower;
|
||||
double totalEnergy = 0;
|
||||
|
||||
double sumOfEnergyWindows = 0;
|
||||
|
||||
// Error Model related:
|
||||
ErrorStorageMode ErrorStoreMode = Configuration::getInstance().ErrorStoreMode;
|
||||
@@ -167,7 +167,10 @@ struct Dram : sc_module
|
||||
memSpec.memArchSpec = memArchSpec;
|
||||
|
||||
DRAMPower = new libDRAMPower( memSpec, 0 );
|
||||
SC_THREAD(powerWindow);
|
||||
|
||||
// Create a thread that is triggered every $windowSize
|
||||
// to generate a Power over Time plot in the Trace analyzer:
|
||||
SC_THREAD(powerWindow);
|
||||
}
|
||||
|
||||
printDebugMessage(string("ErrorStorageMode: ") + EnumToString(ErrorStoreMode));
|
||||
@@ -193,8 +196,19 @@ struct Dram : sc_module
|
||||
{
|
||||
DRAMPower->updateCounters(true);
|
||||
DRAMPower->calcEnergy();
|
||||
|
||||
// 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()));
|
||||
printDebugMessage(string("\tAverage Power: \t") + to_string((DRAMPower->getEnergy().total_energy - totalEnergy)/windowSize.value()));
|
||||
sumOfEnergyWindows += DRAMPower->getEnergy().total_energy - totalEnergy;
|
||||
totalEnergy = DRAMPower->getEnergy().total_energy;
|
||||
|
||||
// Make sure that the summed energy of the windows is the same as the final value provided by DRAMPower:
|
||||
assert(sumOfEnergyWindows == totalEnergy);
|
||||
|
||||
// Print Final Total Power Values:
|
||||
cout << name() << string("\tTotal Energy: \t") + to_string(totalEnergy) << endl;
|
||||
cout << name() << string("\tAverage Power: \t") + to_string(DRAMPower->getPower().average_power) << endl;
|
||||
}
|
||||
// Clean up:
|
||||
for (auto e : ememory) {
|
||||
@@ -203,6 +217,8 @@ struct Dram : sc_module
|
||||
//std::cout << "Simulated Memory Size: " << memory.size() << endl; // TODO Aufrauemen
|
||||
}
|
||||
|
||||
// This Thread is only triggered when Power Simulation is enabled.
|
||||
// It estimated the current average power which will be stored in the trace database for visualization purposes.
|
||||
void powerWindow()
|
||||
{
|
||||
double currentAveragePower = 0;
|
||||
@@ -214,7 +230,9 @@ struct Dram : sc_module
|
||||
DRAMPower->calcEnergy();
|
||||
currentTotalEnergy = DRAMPower->getEnergy().total_energy - totalEnergy;
|
||||
currentAveragePower = currentTotalEnergy/windowSize.value();
|
||||
// TODO: Store $currentAveragePower in the trace database.
|
||||
totalEnergy = DRAMPower->getEnergy().total_energy;
|
||||
sumOfEnergyWindows += currentTotalEnergy;
|
||||
|
||||
printDebugMessage(string("\tCurrent Energy: \t") + to_string(currentTotalEnergy));
|
||||
printDebugMessage(string("\tAverage Power: \t") + to_string(currentAveragePower));
|
||||
|
||||
Reference in New Issue
Block a user