Getting power window size and unity from config.

This commit is contained in:
Éder F. Zulian
2016-03-15 22:04:22 -03:00
parent 5a55453b3d
commit d62c0e5cc6
5 changed files with 31 additions and 9 deletions

View File

@@ -4,6 +4,8 @@
<Debug value="1" />
<DatabaseRecording value="1" />
<PowerAnalysis value="1" />
<PowerWindowSize value="1000" />
<PowerWindowUnit value="ns" />
<NumberOfTracePlayers value="1"/>
<NumberOfMemChannels value="4"/>
<ControllerCoreDisableRefresh value="0"/>

View File

@@ -136,6 +136,10 @@ void Configuration::setParameter(std::string name, std::string value)
DatabaseRecording = string2bool(value);
else if(name == "PowerAnalysis")
PowerAnalysis = string2bool(value);
else if (name == "PowerWindowSize")
PowerWindowSize = std::stod(value.c_str());
else if (name == "PowerWindowUnit")
PowerWindowUnit = string2TimeUnit(value);
else if(name == "Debug")
Debug = string2bool(value);
else if (name == "NumberOfTracePlayers")

View File

@@ -75,6 +75,8 @@ struct Configuration
//SimConfig
bool DatabaseRecording = true;
bool PowerAnalysis = false;
double PowerWindowSize;
enum sc_time_unit PowerWindowUnit;
bool Debug = false;
unsigned int NumberOfTracePlayers = 1;
unsigned int NumberOfMemChannels = 1;

View File

@@ -67,8 +67,10 @@ struct Dram : sc_module
// Power Model related
bool powerAnalysis = Configuration::getInstance().PowerAnalysis;
sc_time windowSize = sc_time(1000,SC_NS); // TODO: this window size should be configurable by the config file
libDRAMPower * DRAMPower;
double pWindowSize = Configuration::getInstance().PowerWindowSize;
enum sc_time_unit pWindowUnit = Configuration::getInstance().PowerWindowUnit;
sc_time powerWindowSize = sc_time(pWindowSize, pWindowUnit);
libDRAMPower *DRAMPower;
double totalEnergy = 0;
double sumOfEnergyWindows = 0;
@@ -168,7 +170,7 @@ struct Dram : sc_module
DRAMPower = new libDRAMPower( memSpec, 0 );
// Create a thread that is triggered every $windowSize
// Create a thread that is triggered every $powerWindowSize
// to generate a Power over Time plot in the Trace analyzer:
SC_THREAD(powerWindow);
}
@@ -199,10 +201,10 @@ 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()));
printDebugMessage(string("\tAverage Power: \t") + to_string((DRAMPower->getEnergy().total_energy - totalEnergy)/powerWindowSize.value()));
double currentTotalEnergy = DRAMPower->getEnergy().total_energy - totalEnergy;
double currentAveragePower = currentTotalEnergy/windowSize.value();
double currentAveragePower = currentTotalEnergy/powerWindowSize.value();
sumOfEnergyWindows += currentTotalEnergy;
tlmRecorder->recordPower(sc_time_stamp(),currentAveragePower);
totalEnergy = DRAMPower->getEnergy().total_energy;
@@ -222,7 +224,7 @@ struct Dram : sc_module
}
// 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.
// It estimates the current average power which will be stored in the trace database for visualization purposes.
void powerWindow()
{
double currentAveragePower = 0;
@@ -233,15 +235,14 @@ struct Dram : sc_module
DRAMPower->updateCounters(false);
DRAMPower->calcEnergy();
currentTotalEnergy = DRAMPower->getEnergy().total_energy - totalEnergy;
currentAveragePower = currentTotalEnergy/windowSize.value();
// TODO: Store $currentAveragePower in the trace database.
currentAveragePower = currentTotalEnergy/powerWindowSize.value();
tlmRecorder->recordPower(sc_time_stamp(),currentAveragePower);
totalEnergy = DRAMPower->getEnergy().total_energy;
sumOfEnergyWindows += currentTotalEnergy;
printDebugMessage(string("\tCurrent Energy: \t") + to_string(currentTotalEnergy));
printDebugMessage(string("\tAverage Power: \t") + to_string(currentAveragePower));
wait(windowSize);
wait(powerWindowSize);
}
while(true);

View File

@@ -308,6 +308,8 @@ The DRAMSys' main configuration file is presented below.
<Debug value="1" />
<DatabaseRecording value="1" />
<PowerAnalysis value="1" />
<PowerWindowSize value="1000" />
<PowerWindowUnit value="ns" />
<NumberOfTracePlayers value="1"/>
<NumberOfMemChannels value="4"/>
<ControllerCoreDisableRefresh value="0"/>
@@ -406,6 +408,8 @@ The XML code below shows a typic configuration:
<Debug value="1"/>
<DatabaseRecording value="1"/>
<PowerAnalysis value="1"/>
<PowerWindowSize value="1000" />
<PowerWindowUnit value="ns" />
<NumberOfTracePlayers value="5"/>
<NumberOfMemChannels value="1"/>
<ControllerCoreDisableRefresh value="0"/>
@@ -517,6 +521,15 @@ Below are listed the configuration sections and configuration fields.
- *PowerAnalysis* (boolean)
- "1": enables live power analysis with the DRAMPower tool
- "0": disables power analysis
- *PowerWindowSize* (double)
- Size of the time window used to evaluate averate power consumption
- *PowerWindowUnit* (string)
- "s": seconds
- "ms": millisecond
- "us": microseconds
- "ns": nanoseconds
- "ps": picoseconds
- "fs": femtoseconds
- *NumberOfTracePlayers* (unsigned int)
- Number of trace players
- *NumberOfMemChannels* (unsigned int)