[STATS] Adding process id to output filename

This change appends the process id to the KMP_STATS_FILE (if specified) which
enables MPI processes to output their stats to separate files.

Differential Revision: http://reviews.llvm.org/D21386

llvm-svn: 273273
This commit is contained in:
Jonathan Peyton 2016-06-21 15:20:33 +00:00
parent ea26f3f82a
commit 98b76f6f87
2 changed files with 20 additions and 4 deletions

View File

@ -356,7 +356,6 @@ kmp_stats_list* kmp_stats_list::iterator::operator*() const {
/* *************************************************************** */
/* ************* kmp_stats_output_module functions ************** */
const char* kmp_stats_output_module::outputFileName = NULL;
const char* kmp_stats_output_module::eventsFileName = NULL;
const char* kmp_stats_output_module::plotFileName = NULL;
int kmp_stats_output_module::printPerThreadFlag = 0;
@ -372,7 +371,24 @@ void kmp_stats_output_module::init()
char * threadEvents = getenv("KMP_STATS_EVENTS");
// set the stats output filenames based on environment variables and defaults
outputFileName = statsFileName;
if(statsFileName) {
// append the process id to the output filename
// events.csv --> events-pid.csv
size_t index;
std::string baseFileName, pid, suffix;
std::stringstream ss;
outputFileName = std::string(statsFileName);
index = outputFileName.find_last_of('.');
if(index == std::string::npos) {
baseFileName = outputFileName;
} else {
baseFileName = outputFileName.substr(0, index);
suffix = outputFileName.substr(index);
}
ss << getpid();
pid = ss.str();
outputFileName = baseFileName + "-" + pid + suffix;
}
eventsFileName = eventsFileName ? eventsFileName : "events.dat";
plotFileName = plotFileName ? plotFileName : "events.plt";
@ -573,7 +589,7 @@ void kmp_stats_output_module::outputStats(const char* heading)
statistic totalStats[TIMER_LAST]; /* Synthesized, cross threads versions of normal timer stats */
statistic allCounters[COUNTER_LAST];
FILE * statsOut = outputFileName ? fopen (outputFileName, "a+") : stderr;
FILE * statsOut = !outputFileName.empty() ? fopen (outputFileName.c_str(), "a+") : stderr;
if (!statsOut)
statsOut = stderr;

View File

@ -687,7 +687,7 @@ class kmp_stats_output_module {
};
private:
static const char* outputFileName;
std::string outputFileName;
static const char* eventsFileName;
static const char* plotFileName;
static int printPerThreadFlag;