simulation manager extended to 4 player, refactoring, porno progress bar

This commit is contained in:
Janik Schlemminger
2014-04-13 01:30:38 +02:00
parent 40d6a0e6f0
commit 8d07af4431
14 changed files with 190 additions and 98 deletions

View File

@@ -25,19 +25,47 @@ SimulationManager::~SimulationManager()
void SimulationManager::loadSimulationFromXML(string uri)
{
simulationName = getFileName(uri);
cout << "\n\nLoad Simulation-Batch:"<<endl;
cout << headline<< endl;
cout << "\t-> load simulation from .."<<endl;
XMLDocument doc;
loadXML(uri, doc);
XMLElement* simulation = doc.FirstChildElement("simulation");
cout << "\t-> parsing simulation object .."<<endl;
simulationName = getFileName(uri);
parseXML(doc);
cout << "\t-> checking paths .."<<endl;
checkPaths();
cout << "\t-> simulation loaded successfully!\n"<<endl;
printSimulationBatch();
}
void SimulationManager::runSimulations()
{
system(string("mkdir -p " + simulationName).c_str());
for (auto& dramSetup : dramSetups)
{
string memconfig = getFileName(dramSetup.memconfig);
for (auto& traceSetup : traceSetups)
{
runSimulation(simulationName + "/" + memconfig + "-" + traceSetup.first + ".tdb", dramSetup, traceSetup.second);
}
}
}
void SimulationManager::parseXML(XMLDocument& doc)
{
XMLElement* simulation = doc.FirstChildElement("simulation");
string memspecUri = simulation->FirstChildElement("memspec")->GetText();
string addressmappingUri = simulation->FirstChildElement("addressmapping")->GetText();
for (XMLElement* element = simulation->FirstChildElement("memconfigs")->FirstChildElement("memconfig"); element != NULL;
element = element->NextSiblingElement("memconfig"))
{
dramSetups.push_back(DramSetup(element->GetText(), memspecUri));
dramSetups.push_back(DramSetup(element->GetText(), memspecUri, addressmappingUri));
}
for (XMLElement* element = simulation->FirstChildElement("trace-setups")->FirstChildElement("trace-setup"); element != NULL;
@@ -45,23 +73,6 @@ void SimulationManager::loadSimulationFromXML(string uri)
{
addTraceSetup(element);
}
checkPaths();
}
void SimulationManager::runSimulations()
{
system(string("mkdir " + simulationName).c_str());
printSimulationBatch();
int i = 0;
for (auto dramSetup : dramSetups)
{
for (auto traceSetup : traceSetups)
{
i++;
runSimulation(simulationName+"/tpr" + to_string(i) + ".tdb", dramSetup, traceSetup);
}
}
}
void SimulationManager::checkPaths()
@@ -75,7 +86,7 @@ void SimulationManager::runSimulation(string traceName, DramSetup dramSetup, vec
int status = 0;
if (pid == 0)
{
Simulation* simulation = new Simulation("sim", resources, traceName, dramSetup, traceSetup);
Simulation* simulation = new Simulation("sim", resources, traceName, dramSetup, traceSetup, silent);
simulation->start();
delete simulation;
_Exit(0);
@@ -84,27 +95,10 @@ void SimulationManager::runSimulation(string traceName, DramSetup dramSetup, vec
waitpid(pid, &status, 0);
}
void SimulationManager::printSimulationBatch()
{
cout << "Simulation Batch:\n##################" << endl;
for (DramSetup& s : dramSetups)
{
cout << s.memspec << " - " << s.memconfig << endl;
}
cout << endl;
for (vector<Device>& s : traceSetups)
{
cout << "Simulation:\n";
for (Device d : s)
cout << "\t(" << d.burstLength << ") " << d.trace << ";" << endl;
cout << endl;
}
}
void SimulationManager::startTraceAnalyzer()
{
string p = getenv("trace");
string run_tpr = p + " -f " + simulationName;
string run_tpr = p + " -f " + simulationName + "&";
system(run_tpr.c_str());
}
@@ -115,7 +109,34 @@ void SimulationManager::addTraceSetup(tinyxml2::XMLElement* element)
{
devices.push_back(Device(device->GetText(), device->IntAttribute("bl")));
}
traceSetups.push_back(devices);
while(devices.size()<Simulation::NumberOfTracePlayers)
{
devices.push_back(Device());
}
traceSetups.emplace(element->Attribute("id"), devices);
}
void SimulationManager::report(string message)
{
//DebugManager::getInstance().printDebugMessage("Simulation Manager", message);
//if (DebugManager::getInstance().writeToConsole == false)
cout << message << endl;
}
void SimulationManager::printSimulationBatch()
{
for (DramSetup& s : dramSetups)
{
cout << s.memspec << " - " << s.memconfig << endl;
}
cout << endl;
for (auto& s : traceSetups)
{
cout << "trace-setup " + s.first + ":\n";
for (Device d : s.second)
cout << "\t(" << d.burstLength << ") " << d.trace << ";" << endl;
cout << endl;
}
}
}