From ae6e1e1040f0185a8df770018321b30dc9ea5df1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89der=20F=2E=20Zulian?= Date: Tue, 29 Sep 2015 12:56:30 +0200 Subject: [PATCH] Get parameters related to temperature simulation from configuration --- .../resources/simulations/sim-batch.xml | 18 +++++++----- .../core/configuration/Configuration.cpp | 27 ++++++++++++++++++ .../core/configuration/Configuration.h | 5 ++++ .../configuration/ConfigurationLoader.cpp | 24 ++++++++++++++++ .../core/configuration/ConfigurationLoader.h | 6 +++- DRAMSys/simulator/src/error/errormodel.cpp | 8 +++++- .../simulator/src/simulation/Simulation.cpp | 1 + DRAMSys/simulator/src/simulation/Simulation.h | 7 +++-- .../src/simulation/SimulationManager.cpp | 4 ++- README.md | 28 ++++++++++++++++--- 10 files changed, 111 insertions(+), 17 deletions(-) diff --git a/DRAMSys/simulator/resources/simulations/sim-batch.xml b/DRAMSys/simulator/resources/simulations/sim-batch.xml index 437a73a1..d915fe1c 100644 --- a/DRAMSys/simulator/resources/simulations/sim-batch.xml +++ b/DRAMSys/simulator/resources/simulations/sim-batch.xml @@ -1,4 +1,5 @@ + @@ -9,6 +10,16 @@ + + + + + + + + @@ -27,12 +38,5 @@ - - diff --git a/DRAMSys/simulator/src/controller/core/configuration/Configuration.cpp b/DRAMSys/simulator/src/controller/core/configuration/Configuration.cpp index 8395c250..e941e65e 100644 --- a/DRAMSys/simulator/src/controller/core/configuration/Configuration.cpp +++ b/DRAMSys/simulator/src/controller/core/configuration/Configuration.cpp @@ -87,6 +87,26 @@ EPowerDownMode string2PDNMode(string s) } } +enum sc_time_unit string2TimeUnit(string s) +{ + if (s == "s") + return SC_SEC; + else if (s == "ms") + return SC_MS; + else if (s == "us") + return SC_US; + else if (s == "ns") + return SC_NS; + else if (s == "ps") + return SC_PS; + else if (s == "fs") + return SC_FS; + else { + SC_REPORT_FATAL("Configuration", ("Could not convert to enum sc_time_unit: " + s).c_str()); + throw; + } +} + void Configuration::setParameter(std::string name, std::string value) { if(name == "BankwiseLogic") @@ -132,6 +152,13 @@ void Configuration::setParameter(std::string name, std::string value) ErrorCSVFile = value; else if(name == "ErrorStoreMode") ErrorStoreMode = StringToEnum(value); + // Temperature Simulation related + else if (name == "StaticTemperatureDefaultValue") + StaticTemperatureDefaultValue = string2int(value); + else if (name == "DynTemperatureSimPeriod") + DynTemperatureSimPeriod = string2int(value); + else if (name == "DynTemperatureSimUnit") + DynTemperatureSimUnit = string2TimeUnit(value); else { SC_REPORT_FATAL("Configuration", ("Parameter " + name + " not defined in Configuration").c_str()); diff --git a/DRAMSys/simulator/src/controller/core/configuration/Configuration.h b/DRAMSys/simulator/src/controller/core/configuration/Configuration.h index 905bfb75..562b05e7 100644 --- a/DRAMSys/simulator/src/controller/core/configuration/Configuration.h +++ b/DRAMSys/simulator/src/controller/core/configuration/Configuration.h @@ -91,6 +91,11 @@ struct Configuration std::string ErrorCSVFile ="not defined."; ErrorStorageMode ErrorStoreMode; + // Temperature Simulation related + int StaticTemperatureDefaultValue; + unsigned int DynTemperatureSimPeriod; + enum sc_time_unit DynTemperatureSimUnit; + private: Configuration(); unsigned int powerDownTimeoutInClk = 3; diff --git a/DRAMSys/simulator/src/controller/core/configuration/ConfigurationLoader.cpp b/DRAMSys/simulator/src/controller/core/configuration/ConfigurationLoader.cpp index bf4166d4..b1a3a494 100644 --- a/DRAMSys/simulator/src/controller/core/configuration/ConfigurationLoader.cpp +++ b/DRAMSys/simulator/src/controller/core/configuration/ConfigurationLoader.cpp @@ -62,6 +62,22 @@ void ConfigurationLoader::loadSimConfig(Configuration& config, XMLElement* simco loadConfig(config, simconfig); } +void ConfigurationLoader::loadTemperatureSimConfig(Configuration &config, std::string temperature_simconfigUri) +{ + loadConfigFromUri(config, temperature_simconfigUri, "temperature_simconfig"); +} + +void ConfigurationLoader::loadTemperatureSimConfig(Configuration &config, XMLElement *temperature_simconfig) +{ + if (temperature_simconfig->Attribute("src")) { + // Configuration is inside another a file + std::string uri(temperature_simconfig->Attribute("src")); + loadConfigFromUri(config, uri, "temperature_simconfig"); + } else { + loadConfig(config, temperature_simconfig); + } +} + void ConfigurationLoader::loadConfig(Configuration& config, XMLElement* configNode) { XMLElement* element; @@ -73,6 +89,14 @@ void ConfigurationLoader::loadConfig(Configuration& config, XMLElement* configNo } } +void ConfigurationLoader::loadConfigFromUri(Configuration &config, std::string uri, std::string first_element) +{ + tinyxml2::XMLDocument doc; + loadXML(uri, doc); + XMLElement *e = doc.FirstChildElement(first_element.c_str()); + loadConfig(config, e); +} + void ConfigurationLoader::loadMemSpec(Configuration& config, string memspecUri) { tinyxml2::XMLDocument doc; diff --git a/DRAMSys/simulator/src/controller/core/configuration/ConfigurationLoader.h b/DRAMSys/simulator/src/controller/core/configuration/ConfigurationLoader.h index 12b30667..46bab656 100644 --- a/DRAMSys/simulator/src/controller/core/configuration/ConfigurationLoader.h +++ b/DRAMSys/simulator/src/controller/core/configuration/ConfigurationLoader.h @@ -46,16 +46,20 @@ class ConfigurationLoader { public: static void loadMemConfig(Configuration& config, std::string memconfigUri); - static void loadSimConfig(Configuration& config, std::string simconfigUri); static void loadMemConfig(Configuration& config, tinyxml2::XMLElement* memconfig); + + static void loadSimConfig(Configuration& config, std::string simconfigUri); static void loadSimConfig(Configuration& config,tinyxml2::XMLElement* simconfig); static void loadMemSpec(Configuration& config, std::string memspecUri); static void loadMemSpec(Configuration& config, tinyxml2::XMLElement* memspec); + static void loadTemperatureSimConfig(Configuration &config, std::string simconfigUri); + static void loadTemperatureSimConfig(Configuration& config, tinyxml2::XMLElement *simconfig); private: ConfigurationLoader(){} static void loadConfig(Configuration& config, tinyxml2::XMLElement* configNode); + static void loadConfigFromUri(Configuration &config, std::string uri, std::string first_element); //specific loader static void loadDDR3(Configuration& config, tinyxml2::XMLElement* memspec); diff --git a/DRAMSys/simulator/src/error/errormodel.cpp b/DRAMSys/simulator/src/error/errormodel.cpp index 831387e1..30891f00 100644 --- a/DRAMSys/simulator/src/error/errormodel.cpp +++ b/DRAMSys/simulator/src/error/errormodel.cpp @@ -103,9 +103,15 @@ errorModel::errorModel() //weakCells[0].row = 0; //weakCells[0].dependent = true; + std::stringstream msg; if (dynamicTemepratureSimulation == false) { - setTemperature(89); + int temperature = Configuration::getInstance().StaticTemperatureDefaultValue; + setTemperature(temperature); + msg << "Static temperature simulation. Temperature set to " << temperature << std::endl; + } else { + msg << "Dynamic temperature simulation." << std::endl; } + DebugManager::getInstance().printDebugMessage(name, msg.str()); markBitFlips(); } diff --git a/DRAMSys/simulator/src/simulation/Simulation.cpp b/DRAMSys/simulator/src/simulation/Simulation.cpp index d036e4d9..932a3912 100644 --- a/DRAMSys/simulator/src/simulation/Simulation.cpp +++ b/DRAMSys/simulator/src/simulation/Simulation.cpp @@ -62,6 +62,7 @@ Simulation::Simulation(sc_module_name __attribute__((unused)) name, string pathT ConfigurationLoader::loadMemConfig(Configuration::getInstance(), setup.memconfig);//pathToResources + string("configs/memconfigs/") + setup.memconfig); ConfigurationLoader::loadMemSpec(Configuration::getInstance(), setup.memspec);//pathToResources + string("configs/memspecs/") + setup.memspec); ConfigurationLoader::loadSimConfig(Configuration::getInstance(), setup.simconfig); + ConfigurationLoader::loadTemperatureSimConfig(Configuration::getInstance(), setup.temperature_simconfig); instantiateModules(traceName, pathToResources, devices); bindSockets(); diff --git a/DRAMSys/simulator/src/simulation/Simulation.h b/DRAMSys/simulator/src/simulation/Simulation.h index 560dd289..c0bceb40 100644 --- a/DRAMSys/simulator/src/simulation/Simulation.h +++ b/DRAMSys/simulator/src/simulation/Simulation.h @@ -53,13 +53,14 @@ struct DramSetup { - DramSetup():memspec(NULL),memconfig(NULL),simconfig(NULL),addressmapping(NULL){} - DramSetup(tinyxml2::XMLElement* memspec, tinyxml2::XMLElement* memconfig, tinyxml2::XMLElement* simconfig, tinyxml2::XMLElement* addressmapping) - : memspec(memspec), memconfig(memconfig), simconfig(simconfig), addressmapping(addressmapping) {} + DramSetup():memspec(NULL),memconfig(NULL),simconfig(NULL),addressmapping(NULL), temperature_simconfig(NULL) {} + DramSetup(tinyxml2::XMLElement* memspec, tinyxml2::XMLElement* memconfig, tinyxml2::XMLElement* simconfig, tinyxml2::XMLElement* addressmapping, tinyxml2::XMLElement *tsc) + : memspec(memspec), memconfig(memconfig), simconfig(simconfig), addressmapping(addressmapping), temperature_simconfig(tsc) {} tinyxml2::XMLElement* memspec; tinyxml2::XMLElement* memconfig; tinyxml2::XMLElement* simconfig; tinyxml2::XMLElement* addressmapping; + tinyxml2::XMLElement* temperature_simconfig; }; struct Device diff --git a/DRAMSys/simulator/src/simulation/SimulationManager.cpp b/DRAMSys/simulator/src/simulation/SimulationManager.cpp index 67285dbe..b706743e 100644 --- a/DRAMSys/simulator/src/simulation/SimulationManager.cpp +++ b/DRAMSys/simulator/src/simulation/SimulationManager.cpp @@ -100,6 +100,8 @@ void SimulationManager::parseSimulationBatch(XMLElement* simulation) XMLElement* simconfig = simulation->FirstChildElement("simconfig"); + XMLElement *temperature_simconfig = simulation->FirstChildElement("temperature_simconfig"); + XMLElement* memspecs = simulation->FirstChildElement("memspecs"); if(memspecs == NULL) memspecs = simulation; @@ -120,7 +122,7 @@ void SimulationManager::parseSimulationBatch(XMLElement* simulation) for (XMLElement* memconfig = memconfigs->FirstChildElement("memconfig"); memconfig != NULL; memconfig = memconfig->NextSiblingElement("memconfig")) { - batch.dramSetups.push_back(DramSetup(memspec, memconfig, simconfig, addressmapping)); + batch.dramSetups.push_back(DramSetup(memspec, memconfig, simconfig, addressmapping, temperature_simconfig)); } } } diff --git a/README.md b/README.md index 566dd265..2ba6dbb1 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ The XML code below shows a typic configuration: ``` xml - + @@ -135,6 +135,13 @@ The XML code below shows a typic configuration: + + + + + + + @@ -215,7 +222,7 @@ simulation. Below are listed the configuration sections and configuration fields. -- **Simulator configuration** +- **Simulator Configuration** - *Debug* (boolean) - "1": enables debug output on console - "0": disables debug output @@ -236,7 +243,20 @@ Below are listed the configuration sections and configuration fields. - "1": enables the dynamic temperature simulation feature - "0": static temperature during simulation -- **Memory specification** +- **Temperature Simulator Configuration** + - *StaticTemperatureDefaultValue* (int) + - Temperature value for simulations with static temperature + - *DynTemperatureSimPeriod* (unsigned int) + - Period of the dynamic temperature simulation + - *DynTemperatureSimUnit* (string) + - "s": seconds + - "ms": millisecond + - "us": microseconds + - "ns": nanoseconds + - "ps": picoseconds + - "fs": femtoseconds + +- **Memory Specification** A file with memory specifications. This information comes from datasheet and usually does not change. @@ -329,7 +349,7 @@ Below are listed the configuration sections and configuration fields. - "Store": store data without error model - "ErrorModel": store data with error model [6] -- **Trace setups** +- **Trace Setups** - *id* (string) - Trace setup id. Two kinds of output files are generated by DRAMSys: SQLite databases containing transactions related to each memory channel