6 inComLine.
AddOption(
'c',
"config",2,
"configfile");
10 inComLine.
AddOption(
'g',
"gnuplot",2,
"batfile");
12 inComLine.
AddOption(
'o',
"outfile",2,
"outfile");
13 inComLine.
AddOption(
'p',
"plot",2,
"batfile");
14 inComLine.
AddOption(
's',
"scalability",2,
"outfile");
19 inComLine.
AddHelp(
'c',
"Set configuration file name to <configfile>.");
20 inComLine.
AddHelp(
'd',
"Use GNUPlot to display plots to screen.");
21 inComLine.
AddHelp(
'e',
"Set efficiency mode for plotting parallel efficiency.");
22 inComLine.
AddHelp(
'f',
"Use GNUPlot to create plot image files.");
23 inComLine.
AddHelp(
'g',
"Set output gnuplot bat file root name to <batfile>.");
24 inComLine.
AddHelp(
'h',
"This long, detailed help message.");
25 inComLine.
AddHelp(
'l',
"Sets linear scale on scalability plots.");
26 inComLine.
AddHelp(
'm',
"Sets \"grid mode\"; performance based on number of points in grid.");
27 inComLine.
AddHelp(
'o',
"Set output data file name to <outfile>.");
28 inComLine.
AddHelp(
'p',
"Set output gnuplot scalability bat file root name to <batfile>.");
29 inComLine.
AddHelp(
's',
"Set output scalability data file name to <outfile>.");
30 inComLine.
AddHelp(
'w',
"Sets weak mode for scalability plots.");
31 inComLine.
AddArgHelp(
"timing_output_list",
"Space-delimited list of PlasComCM timer outputs.");
32 inComLine.
SetDescription(
"Utility for creating performance data and plots for parallel applications.");
35 int main(
int argc,
char *argv[])
42 std::cout << timingCommandLine.
ShortUsage() << std::endl;
44 }
else if(!timingCommandLine.
GetOption(
"help").empty()){
45 std::cout << timingCommandLine.
LongUsage() << std::endl;
47 }
else if (comLineError){
48 std::cout << timingCommandLine.
ErrorReport() << std::endl
49 << timingCommandLine.
ShortUsage() << std::endl;
53 bool displayPlots = !timingCommandLine.
GetOption(
"display").empty();
54 bool createPlotFiles = !timingCommandLine.
GetOption(
"files").empty();
55 bool linearScale = !timingCommandLine.
GetOption(
"linear").empty();
56 bool weakMode = !timingCommandLine.
GetOption(
"weak").empty();
57 bool gridMode = !timingCommandLine.
GetOption(
"gridmode").empty();
58 bool effMode = !timingCommandLine.
GetOption(
"efficiency").empty();
60 std::string configFileName(timingCommandLine.
GetOption(
"config"));
63 if(!configFileName.empty()){
64 std::ifstream configFile;
65 if(
OpenFile(configFile,configFileName)){
66 std::cerr <<
"Could not open configuration file, " 67 << configFileName <<
"." << std::endl;
70 configFile >> timingConfig;
73 std::string platformName(timingConfig.GetValue(
"PlatformName"));
75 std::string outFileName(timingCommandLine.
GetOption(
"outfile"));
76 if(outFileName.empty())
77 outFileName =
"TimingData.txt";
79 std::string scalaFileName(timingCommandLine.
GetOption(
"scalability"));
80 if(scalaFileName.empty())
81 scalaFileName =
"ScalabilityData.txt";
83 std::string batFileName(timingCommandLine.
GetOption(
"gnuplot"));
84 if(batFileName.empty())
85 batFileName =
"plottiming.gp";
87 std::string scalaBatFileName(timingCommandLine.
GetOption(
"plot"));
88 if(scalaBatFileName.empty())
89 scalaBatFileName =
"plotscalability.gp";
91 std::vector<std::string> timingFileNames(timingCommandLine.
GetArgs());
92 int numRuns = timingFileNames.size();
96 int numDerivedTimers = derivedTimers.size();
111 std::vector<struct pcrun> pcRuns(numRuns);
115 std::vector<std::string>::iterator timingFileIterator = timingFileNames.begin();
116 while(timingFileIterator != timingFileNames.end()){
118 int runIndex = timingFileIterator - timingFileNames.begin();
119 std::string &timingFileName(*timingFileIterator++);
122 std::ifstream timingFile;
123 if(
OpenFile(timingFile,timingFileName)){
124 std::cerr <<
"Could not open timing file, " 125 << timingFileName <<
"." << std::endl;
142 pcRuns[runIndex].pcRunTimes =
ProcessRun(pcRuns[runIndex].pcRunInfo,runTimes,derivedTimers,
143 excludedTimers,timerSettings,timingDelta);
146 pcruntimes::iterator runIt = pcRuns[runIndex].pcRunTimes.begin();
147 while(runIt != pcRuns[runIndex].pcRunTimes.end())
148 allRoutineNames.push_back(runIt++->first);
149 allRoutineNames.sort();
150 allRoutineNames.unique();
154 std::cout <<
"Timing delta for " << timingFileName
155 <<
" = (" << timingDelta.
min <<
"," 156 << timingDelta.
max <<
"," 157 << timingDelta.
mean <<
")" << std::endl;
160 std::ofstream outFile;
161 outFile.open(outFileName.c_str());
162 std::ostringstream outStream;
164 outFile << outStream.str();
167 if(pcRuns.size() > 1){
171 std::ofstream scalaFile;
172 scalaFile.open(scalaFileName.c_str());
174 scalaFile << outStream.str();
180 outFile.open(batFileName.c_str());
181 outFile << outStream.str();
194 std::ofstream scalaBatFile;
195 scalaBatFile.open(scalaBatFileName.c_str());
198 SpeedUpPlotCommands(outStream,scalaFileName,allRoutineNames,pcRuns,timerSettings,
false,linearScale);
199 scalaBatFile << outStream.str();
200 scalaBatFile.close();
208 SpeedUpPlotCommands(outStream,scalaFileName,allRoutineNames,pcRuns,timerSettings,
true,linearScale);
216 outFile.open(batFileName.c_str());
217 outFile << outStream.str();
void SingleRunPlotCommands(std::ostream &outStream, const std::string &dataFileName, const std::vector< struct pcrun > &pcRuns, int runIndex, const timersettings &timerSettings, bool toDisplay=false)
int main(int argc, char *argv[])
void MultiRunPlotCommands(std::ostream &outStream, const std::string &dataFileName, const std::vector< struct pcrun > &pcRuns, const timersettings &timerSettings, bool toDisplay=false)
void PopulateRunInfo(pcruninfo &pcRunInfo, std::ifstream &inFile)
std::map< std::string, timerlist > derivedtimers
void ReadTimers(pcruntimes &routineTimes, std::ifstream &inFile, int dataColumn)
void SetupTimerSettings(timersettings &timerSettings, const ConfigType &inConfig)
void SummarizeScalabilityData(std::ostream &outStream, const std::vector< struct pcrun > &pcRuns, const timerlist &timerList, const timersettings &timerSettings)
std::map< std::string, struct pctimervalue > pcruntimes
std::list< std::string > timerlist
void SpeedUpPlotCommands(std::ostream &outStream, const std::string &dataFileName, const timerlist &timerList, const std::vector< struct pcrun > &pcRuns, const timersettings &timerSettings, bool toDisplay=false, bool linScale=false)
void SetupDerivedTimers(derivedtimers &derivedTimers, const ConfigType &inConfig)
void SummarizeTimingData(std::ostream &outStream, const std::vector< struct pcrun > &pcRuns, const timerlist &timerList, const timersettings &timerSettings)
void SetupExcludedTimers(timerlist &excludedTimers, const ConfigType &inConfig)
pcruntimes ProcessRun(const pcruninfo &pcRunInfo, const pcruntimes &rawRunTimes, const derivedtimers &derivedTimers, const timerlist &excludedTimers, const timersettings &timerSettings, pctimervalue &timingDelta)
void SetupOptions(CommandLineType &inComLine)