Getting power window size and unity from config.
This commit is contained in:
@@ -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"/>
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
13
README.md
13
README.md
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user