in Tools/WinMLRunner/src/OutputHelper.cpp [737:1197]
void OutputHelper::WritePerformanceDataToCSV(const Profiler<WINML_MODEL_TEST_PERF>& profiler, int numIterations,
std::wstring model, const std::string& deviceType, const std::string& inputBinding,
const std::string& inputType, const std::string& deviceCreationLocation,
const std::vector<std::pair<std::string, std::string>>& perfFileMetadata) const
{
double averageLoadTime = profiler[LOAD_MODEL].GetAverage(CounterType::TIMER);
double stdevLoadTime = profiler[LOAD_MODEL].GetStdev(CounterType::TIMER);
double minLoadTime = profiler[LOAD_MODEL].GetMin(CounterType::TIMER);
double maxLoadTime = profiler[LOAD_MODEL].GetMax(CounterType::TIMER);
uint32_t numberLoadIterations = profiler[LOAD_MODEL].GetCount();
double averageCreateSessionTime = profiler[CREATE_SESSION].GetAverage(CounterType::TIMER);
double stdevCreateSessionTime = profiler[CREATE_SESSION].GetStdev(CounterType::TIMER);
double minCreateSessionTime = profiler[CREATE_SESSION].GetMin(CounterType::TIMER);
double maxCreateSessionTime = profiler[CREATE_SESSION].GetMax(CounterType::TIMER);
uint32_t numberCreateSessionIterations = profiler[CREATE_SESSION].GetCount();
double averageBindTime = profiler[BIND_VALUE].GetAverage(CounterType::TIMER);
double stdevBindTime = profiler[BIND_VALUE].GetStdev(CounterType::TIMER);
double minBindTime = profiler[BIND_VALUE].GetMin(CounterType::TIMER);
double maxBindTime = profiler[BIND_VALUE].GetMax(CounterType::TIMER);
double averageFirstBindTime = profiler[BIND_VALUE_FIRST_RUN].GetAverage(CounterType::TIMER);
double stdevFirstBindTime = profiler[BIND_VALUE_FIRST_RUN].GetStdev(CounterType::TIMER);
double minFirstBindTime = profiler[BIND_VALUE_FIRST_RUN].GetMin(CounterType::TIMER);
double maxFirstBindTime = profiler[BIND_VALUE_FIRST_RUN].GetMax(CounterType::TIMER);
double averageEvalTime = profiler[EVAL_MODEL].GetAverage(CounterType::TIMER);
double stdevEvalTime = profiler[EVAL_MODEL].GetStdev(CounterType::TIMER);
double minEvalTime = profiler[EVAL_MODEL].GetMin(CounterType::TIMER);
double maxEvalTime = profiler[EVAL_MODEL].GetMax(CounterType::TIMER);
double averageFirstEvalTime = profiler[EVAL_MODEL_FIRST_RUN].GetAverage(CounterType::TIMER);
double stdevFirstEvalTime = profiler[EVAL_MODEL_FIRST_RUN].GetStdev(CounterType::TIMER);
double minFirstEvalTime = profiler[EVAL_MODEL_FIRST_RUN].GetMin(CounterType::TIMER);
double maxFirstEvalTime = profiler[EVAL_MODEL_FIRST_RUN].GetMax(CounterType::TIMER);
double averageLoadWorkingSetMemoryUsage = profiler[LOAD_MODEL].GetAverage(CounterType::WORKING_SET_USAGE);
double stdevLoadWorkingSetMemoryUsage = profiler[LOAD_MODEL].GetStdev(CounterType::WORKING_SET_USAGE);
double minLoadWorkingSetMemoryUsage = profiler[LOAD_MODEL].GetMin(CounterType::WORKING_SET_USAGE);
double maxLoadWorkingSetMemoryUsage = profiler[LOAD_MODEL].GetMax(CounterType::WORKING_SET_USAGE);
double averageCreateSessionWorkingSetMemoryUsage =
profiler[CREATE_SESSION].GetAverage(CounterType::WORKING_SET_USAGE);
double stdevCreateSessionWorkingSetMemoryUsage =
profiler[CREATE_SESSION].GetStdev(CounterType::WORKING_SET_USAGE);
double minCreateSessionWorkingSetMemoryUsage = profiler[CREATE_SESSION].GetMin(CounterType::WORKING_SET_USAGE);
double maxCreateSessionWorkingSetMemoryUsage = profiler[CREATE_SESSION].GetMax(CounterType::WORKING_SET_USAGE);
double averageBindWorkingSetMemoryUsage = profiler[BIND_VALUE].GetAverage(CounterType::WORKING_SET_USAGE);
double stdevBindWorkingSetMemoryUsage = profiler[BIND_VALUE].GetStdev(CounterType::WORKING_SET_USAGE);
double minBindWorkingSetMemoryUsage = profiler[BIND_VALUE].GetMin(CounterType::WORKING_SET_USAGE);
double maxBindWorkingSetMemoryUsage = profiler[BIND_VALUE].GetMax(CounterType::WORKING_SET_USAGE);
double averageFirstBindWorkingSetMemoryUsage =
profiler[BIND_VALUE_FIRST_RUN].GetAverage(CounterType::WORKING_SET_USAGE);
double stdevFirstBindWorkingSetMemoryUsage =
profiler[BIND_VALUE_FIRST_RUN].GetStdev(CounterType::WORKING_SET_USAGE);
double minFirstBindWorkingSetMemoryUsage =
profiler[BIND_VALUE_FIRST_RUN].GetMin(CounterType::WORKING_SET_USAGE);
double maxFirstBindWorkingSetMemoryUsage =
profiler[BIND_VALUE_FIRST_RUN].GetMax(CounterType::WORKING_SET_USAGE);
double averageEvalWorkingSetMemoryUsage = profiler[EVAL_MODEL].GetAverage(CounterType::WORKING_SET_USAGE);
double stdevEvalWorkingSetMemoryUsage = profiler[EVAL_MODEL].GetStdev(CounterType::WORKING_SET_USAGE);
double minEvalWorkingSetMemoryUsage = profiler[EVAL_MODEL].GetMin(CounterType::WORKING_SET_USAGE);
double maxEvalWorkingSetMemoryUsage = profiler[EVAL_MODEL].GetMax(CounterType::WORKING_SET_USAGE);
double averageFirstEvalWorkingSetMemoryUsage =
profiler[EVAL_MODEL_FIRST_RUN].GetAverage(CounterType::WORKING_SET_USAGE);
double stdevFirstEvalWorkingSetMemoryUsage =
profiler[EVAL_MODEL_FIRST_RUN].GetAverage(CounterType::WORKING_SET_USAGE);
double minFirstEvalWorkingSetMemoryUsage =
profiler[EVAL_MODEL_FIRST_RUN].GetAverage(CounterType::WORKING_SET_USAGE);
double maxFirstEvalWorkingSetMemoryUsage =
profiler[EVAL_MODEL_FIRST_RUN].GetAverage(CounterType::WORKING_SET_USAGE);
double averageLoadDedicatedMemoryUsage = profiler[LOAD_MODEL].GetAverage(CounterType::GPU_DEDICATED_MEM_USAGE);
double stdevLoadDedicatedMemoryUsage = profiler[LOAD_MODEL].GetStdev(CounterType::GPU_DEDICATED_MEM_USAGE);
double minLoadDedicatedMemoryUsage = profiler[LOAD_MODEL].GetMin(CounterType::GPU_DEDICATED_MEM_USAGE);
double maxLoadDedicatedMemoryUsage = profiler[LOAD_MODEL].GetMax(CounterType::GPU_DEDICATED_MEM_USAGE);
double averageCreateSessionDedicatedMemoryUsage =
profiler[CREATE_SESSION].GetAverage(CounterType::GPU_DEDICATED_MEM_USAGE);
double stdevCreateSessionDedicatedMemoryUsage =
profiler[CREATE_SESSION].GetStdev(CounterType::GPU_DEDICATED_MEM_USAGE);
double minCreateSessionDedicatedMemoryUsage =
profiler[CREATE_SESSION].GetMin(CounterType::GPU_DEDICATED_MEM_USAGE);
double maxCreateSessionDedicatedMemoryUsage =
profiler[CREATE_SESSION].GetMax(CounterType::GPU_DEDICATED_MEM_USAGE);
double averageBindDedicatedMemoryUsage = profiler[BIND_VALUE].GetAverage(CounterType::GPU_DEDICATED_MEM_USAGE);
double stdevBindDedicatedMemoryUsage = profiler[BIND_VALUE].GetStdev(CounterType::GPU_DEDICATED_MEM_USAGE);
double minBindDedicatedMemoryUsage = profiler[BIND_VALUE].GetMin(CounterType::GPU_DEDICATED_MEM_USAGE);
double maxBindDedicatedMemoryUsage = profiler[BIND_VALUE].GetMax(CounterType::GPU_DEDICATED_MEM_USAGE);
double averageFirstBindDedicatedMemoryUsage =
profiler[BIND_VALUE_FIRST_RUN].GetAverage(CounterType::GPU_DEDICATED_MEM_USAGE);
double stdevFirstBindDedicatedMemoryUsage =
profiler[BIND_VALUE_FIRST_RUN].GetStdev(CounterType::GPU_DEDICATED_MEM_USAGE);
double minFirstBindDedicatedMemoryUsage =
profiler[BIND_VALUE_FIRST_RUN].GetMin(CounterType::GPU_DEDICATED_MEM_USAGE);
double maxFirstBindDedicatedMemoryUsage =
profiler[BIND_VALUE_FIRST_RUN].GetMax(CounterType::GPU_DEDICATED_MEM_USAGE);
double averageEvalDedicatedMemoryUsage = profiler[EVAL_MODEL].GetAverage(CounterType::GPU_DEDICATED_MEM_USAGE);
double stdevEvalDedicatedMemoryUsage = profiler[EVAL_MODEL].GetStdev(CounterType::GPU_DEDICATED_MEM_USAGE);
double minEvalDedicatedMemoryUsage = profiler[EVAL_MODEL].GetMin(CounterType::GPU_DEDICATED_MEM_USAGE);
double maxEvalDedicatedMemoryUsage = profiler[EVAL_MODEL].GetMax(CounterType::GPU_DEDICATED_MEM_USAGE);
double averageFirstEvalDedicatedMemoryUsage =
profiler[EVAL_MODEL_FIRST_RUN].GetAverage(CounterType::GPU_DEDICATED_MEM_USAGE);
double stdevFirstEvalDedicatedMemoryUsage =
profiler[EVAL_MODEL_FIRST_RUN].GetAverage(CounterType::GPU_DEDICATED_MEM_USAGE);
double minFirstEvalDedicatedMemoryUsage =
profiler[EVAL_MODEL_FIRST_RUN].GetAverage(CounterType::GPU_DEDICATED_MEM_USAGE);
double maxFirstEvalDedicatedMemoryUsage =
profiler[EVAL_MODEL_FIRST_RUN].GetAverage(CounterType::GPU_DEDICATED_MEM_USAGE);
double averageLoadSharedMemoryUsage = profiler[LOAD_MODEL].GetAverage(CounterType::GPU_SHARED_MEM_USAGE);
double stdevLoadSharedMemoryUsage = profiler[LOAD_MODEL].GetStdev(CounterType::GPU_SHARED_MEM_USAGE);
double minLoadSharedMemoryUsage = profiler[LOAD_MODEL].GetMin(CounterType::GPU_SHARED_MEM_USAGE);
double maxLoadSharedMemoryUsage = profiler[LOAD_MODEL].GetMax(CounterType::GPU_SHARED_MEM_USAGE);
double averageCreateSessionSharedMemoryUsage =
profiler[CREATE_SESSION].GetAverage(CounterType::GPU_SHARED_MEM_USAGE);
double stdevCreateSessionSharedMemoryUsage =
profiler[CREATE_SESSION].GetStdev(CounterType::GPU_SHARED_MEM_USAGE);
double minCreateSessionSharedMemoryUsage = profiler[CREATE_SESSION].GetMin(CounterType::GPU_SHARED_MEM_USAGE);
double maxCreateSessionSharedMemoryUsage = profiler[CREATE_SESSION].GetMax(CounterType::GPU_SHARED_MEM_USAGE);
double averageBindSharedMemoryUsage = profiler[BIND_VALUE].GetAverage(CounterType::GPU_SHARED_MEM_USAGE);
double stdevBindSharedMemoryUsage = profiler[BIND_VALUE].GetStdev(CounterType::GPU_SHARED_MEM_USAGE);
double minBindSharedMemoryUsage = profiler[BIND_VALUE].GetMin(CounterType::GPU_SHARED_MEM_USAGE);
double maxBindSharedMemoryUsage = profiler[BIND_VALUE].GetMax(CounterType::GPU_SHARED_MEM_USAGE);
double averageFirstBindSharedMemoryUsage =
profiler[BIND_VALUE_FIRST_RUN].GetAverage(CounterType::GPU_SHARED_MEM_USAGE);
double stdevFirstBindSharedMemoryUsage =
profiler[BIND_VALUE_FIRST_RUN].GetStdev(CounterType::GPU_SHARED_MEM_USAGE);
double minFirstBindSharedMemoryUsage = profiler[BIND_VALUE_FIRST_RUN].GetMin(CounterType::GPU_SHARED_MEM_USAGE);
double maxFirstBindSharedMemoryUsage = profiler[BIND_VALUE_FIRST_RUN].GetMax(CounterType::GPU_SHARED_MEM_USAGE);
double averageEvalSharedMemoryUsage = profiler[EVAL_MODEL].GetAverage(CounterType::GPU_SHARED_MEM_USAGE);
double stdevEvalSharedMemoryUsage = profiler[EVAL_MODEL].GetStdev(CounterType::GPU_SHARED_MEM_USAGE);
double minEvalSharedMemoryUsage = profiler[EVAL_MODEL].GetMin(CounterType::GPU_SHARED_MEM_USAGE);
double maxEvalSharedMemoryUsage = profiler[EVAL_MODEL].GetMax(CounterType::GPU_SHARED_MEM_USAGE);
double averageFirstEvalSharedMemoryUsage =
profiler[EVAL_MODEL_FIRST_RUN].GetAverage(CounterType::GPU_SHARED_MEM_USAGE);
double stdevFirstEvalSharedMemoryUsage =
profiler[EVAL_MODEL_FIRST_RUN].GetAverage(CounterType::GPU_SHARED_MEM_USAGE);
double minFirstEvalSharedMemoryUsage =
profiler[EVAL_MODEL_FIRST_RUN].GetAverage(CounterType::GPU_SHARED_MEM_USAGE);
double maxFirstEvalSharedMemoryUsage =
profiler[EVAL_MODEL_FIRST_RUN].GetAverage(CounterType::GPU_SHARED_MEM_USAGE);
if (!m_csvFileName.empty())
{
// Check if header exists
bool bNewFile = false;
std::ifstream fin;
fin.open(m_csvFileName);
std::filebuf* outbuf = fin.rdbuf();
if (EOF == outbuf->sbumpc())
{
bNewFile = true;
}
fin.close();
std::ofstream fout;
fout.open(m_csvFileName, std::ios_base::app);
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::string modelName = converter.to_bytes(model);
if (bNewFile)
{
fout << "model name"
<< ","
<< "device type"
<< ","
<< "input binding"
<< ","
<< "input type"
<< ","
<< "device creation location"
<< ","
<< "iterations"
<< ","
<< "load iterations"
<< ","
<< "session creation iterations"
<< ","
<< "average load (ms)"
<< ","
<< "standard deviation load (ms)"
<< ","
<< "min load (ms)"
<< ","
<< "max load (ms)"
<< ","
<< "average session creation (ms)"
<< ","
<< "standard deviation session creation (ms)"
<< ","
<< "min session creation (ms)"
<< ","
<< "max session creation (ms)"
<< ","
<< "average first bind (ms)"
<< ","
<< "standard deviation first bind (ms)"
<< ","
<< "min first bind (ms)"
<< ","
<< "max first bind (ms)"
<< ","
<< "average bind (ms)"
<< ","
<< "standard deviation bind (ms)"
<< ","
<< "min bind (ms)"
<< ","
<< "max bind (ms)"
<< ","
<< "average first evaluate (ms)"
<< ","
<< "standard deviation first evaluate (ms)"
<< ","
<< "min first evaluate (ms)"
<< ","
<< "max first evaluate (ms)"
<< ","
<< "average evaluate (ms)"
<< ","
<< "standard deviation evaluate (ms)"
<< ","
<< "min evaluate (ms)"
<< ","
<< "max evaluate (ms)"
<< ","
<< "load average working set memory (MB)"
<< ","
<< "load standard deviation working set memory (MB)"
<< ","
<< "load min working set memory (MB)"
<< ","
<< "load max working set memory (MB)"
<< ","
<< "session creation average working set memory (MB)"
<< ","
<< "session creation standard deviation working set memory (MB)"
<< ","
<< "session creation min working set memory (MB)"
<< ","
<< "session creation max working set memory (MB)"
<< ","
<< "first bind average working set memory (MB)"
<< ","
<< "first bind standard deviation working set memory (MB)"
<< ","
<< "first bind min working set memory (MB)"
<< ","
<< "first bind max working set memory (MB)"
<< ","
<< "bind average working set memory (MB)"
<< ","
<< "bind standard deviation working set memory (MB)"
<< ","
<< "bind min working set memory (MB)"
<< ","
<< "bind max working set memory (MB)"
<< ","
<< "first evaluate average working set memory (MB)"
<< ","
<< "first evaluate standard deviation working set memory (MB)"
<< ","
<< "first evaluate min working set memory (MB)"
<< ","
<< "first evaluate max working set memory (MB)"
<< ","
<< "evaluate average working set memory (MB)"
<< ","
<< "evaluate standard deviation working set memory (MB)"
<< ","
<< "evaluate min working set memory (MB)"
<< ","
<< "evaluate max working set memory (MB)"
<< ","
<< "load average dedicated memory (MB)"
<< ","
<< "load standard deviation dedicated memory (MB)"
<< ","
<< "load min dedicated memory (MB)"
<< ","
<< "load max dedicated memory (MB)"
<< ","
<< "session creation average dedicated memory (MB)"
<< ","
<< "session creation standard deviation dedicated memory (MB)"
<< ","
<< "session creation min dedicated memory (MB)"
<< ","
<< "session creation max dedicated memory (MB)"
<< ","
<< "first bind average dedicated memory (MB)"
<< ","
<< "first bind standard deviation dedicated memory (MB)"
<< ","
<< "first bind min dedicated memory (MB)"
<< ","
<< "first bind max dedicated memory (MB)"
<< ","
<< "bind average dedicated memory (MB)"
<< ","
<< "bind standard deviation dedicated memory (MB)"
<< ","
<< "bind min dedicated memory (MB)"
<< ","
<< "bind max dedicated memory (MB)"
<< ","
<< "first evaluate average dedicated memory (MB)"
<< ","
<< "first evaluate standard deviation dedicated memory (MB)"
<< ","
<< "first evaluate min dedicated memory (MB)"
<< ","
<< "first evaluate max dedicated memory (MB)"
<< ","
<< "evaluate average dedicated memory (MB)"
<< ","
<< "evaluate standard deviation dedicated memory (MB)"
<< ","
<< "evaluate min dedicated memory (MB)"
<< ","
<< "evaluate max dedicated memory (MB)"
<< ","
<< "load average shared memory (MB)"
<< ","
<< "load standard deviation shared memory (MB)"
<< ","
<< "load min shared memory (MB)"
<< ","
<< "load max shared memory (MB)"
<< ","
<< "session creation average shared memory (MB)"
<< ","
<< "session creation standard deviation shared memory (MB)"
<< ","
<< "session creation min shared memory (MB)"
<< ","
<< "session creation max shared memory (MB)"
<< ","
<< "first bind average shared memory (MB)"
<< ","
<< "first bind standard deviation shared memory (MB)"
<< ","
<< "first bind min shared memory (MB)"
<< ","
<< "first bind max shared memory (MB)"
<< ","
<< "bind average shared memory (MB)"
<< ","
<< "bind standard deviation shared memory (MB)"
<< ","
<< "bind min shared memory (MB)"
<< ","
<< "bind max shared memory (MB)"
<< ","
<< "first evaluate average shared memory (MB)"
<< ","
<< "first evaluate standard deviation shared memory (MB)"
<< ","
<< "first evaluate min shared memory (MB)"
<< ","
<< "first evaluate max shared memory (MB)"
<< ","
<< "evaluate average shared memory (MB)"
<< ","
<< "evaluate standard deviation shared memory (MB)"
<< ","
<< "evaluate min shared memory (MB)"
<< ","
<< "evaluate max shared memory (MB)"
<< ",";
for (auto metaDataPair : perfFileMetadata)
{
fout << metaDataPair.first << ",";
}
fout << std::endl;
}
fout << modelName << "," << deviceType << "," << inputBinding << "," << inputType << ","
<< deviceCreationLocation << "," << numIterations << "," << numberLoadIterations << ","
<< numberCreateSessionIterations << "," << averageLoadTime << "," << stdevLoadTime << ","
<< minLoadTime << "," << maxLoadTime << "," << averageCreateSessionTime << ","
<< stdevCreateSessionTime << "," << minCreateSessionTime << "," << maxCreateSessionTime << ","
<< averageFirstBindTime << "," << stdevFirstBindTime << "," << minFirstBindTime << ","
<< maxFirstBindTime << "," << (numIterations <= 1 ? 0 : averageBindTime) << ","
<< (numIterations <= 1 ? 0 : stdevBindTime) << "," << (numIterations <= 1 ? 0 : minBindTime) << ","
<< (numIterations <= 1 ? 0 : maxBindTime) << "," << averageFirstEvalTime << "," << stdevFirstEvalTime
<< "," << minFirstEvalTime << "," << maxFirstEvalTime << ","
<< (numIterations <= 1 ? 0 : averageEvalTime) << "," << (numIterations <= 1 ? 0 : stdevEvalTime) << ","
<< (numIterations <= 1 ? 0 : minEvalTime) << "," << (numIterations <= 1 ? 0 : maxEvalTime) << ","
<< averageLoadWorkingSetMemoryUsage << "," << stdevLoadWorkingSetMemoryUsage << ","
<< minLoadWorkingSetMemoryUsage << "," << maxLoadWorkingSetMemoryUsage << ","
<< averageCreateSessionWorkingSetMemoryUsage << "," << stdevCreateSessionWorkingSetMemoryUsage << ","
<< minCreateSessionWorkingSetMemoryUsage << "," << maxCreateSessionWorkingSetMemoryUsage << ","
<< averageFirstBindWorkingSetMemoryUsage << "," << stdevFirstBindWorkingSetMemoryUsage << ","
<< minFirstBindWorkingSetMemoryUsage << "," << maxFirstBindWorkingSetMemoryUsage << ","
<< (numIterations <= 1 ? 0 : averageBindWorkingSetMemoryUsage) << ","
<< (numIterations <= 1 ? 0 : stdevBindWorkingSetMemoryUsage) << ","
<< (numIterations <= 1 ? 0 : maxBindWorkingSetMemoryUsage) << ","
<< (numIterations <= 1 ? 0 : minBindWorkingSetMemoryUsage) << ","
<< averageFirstBindWorkingSetMemoryUsage << "," << stdevFirstBindWorkingSetMemoryUsage << ","
<< minFirstBindWorkingSetMemoryUsage << "," << maxFirstBindWorkingSetMemoryUsage << ","
<< (numIterations <= 1 ? 0 : averageEvalWorkingSetMemoryUsage) << ","
<< (numIterations <= 1 ? 0 : stdevEvalWorkingSetMemoryUsage) << ","
<< (numIterations <= 1 ? 0 : maxEvalWorkingSetMemoryUsage) << ","
<< (numIterations <= 1 ? 0 : minEvalWorkingSetMemoryUsage) << ","
<< averageLoadDedicatedMemoryUsage << "," << stdevLoadDedicatedMemoryUsage << ","
<< minLoadDedicatedMemoryUsage << "," << maxLoadDedicatedMemoryUsage << ","
<< averageCreateSessionDedicatedMemoryUsage << "," << stdevCreateSessionDedicatedMemoryUsage << ","
<< minCreateSessionDedicatedMemoryUsage << "," << maxCreateSessionDedicatedMemoryUsage << ","
<< averageFirstBindDedicatedMemoryUsage << "," << stdevFirstBindDedicatedMemoryUsage << ","
<< minFirstBindDedicatedMemoryUsage << "," << maxFirstBindDedicatedMemoryUsage << ","
<< (numIterations <= 1 ? 0 : averageBindDedicatedMemoryUsage) << ","
<< (numIterations <= 1 ? 0 : stdevBindDedicatedMemoryUsage) << ","
<< (numIterations <= 1 ? 0 : maxBindDedicatedMemoryUsage) << ","
<< (numIterations <= 1 ? 0 : minBindDedicatedMemoryUsage) << ","
<< averageFirstBindDedicatedMemoryUsage << "," << stdevFirstBindDedicatedMemoryUsage << ","
<< minFirstBindDedicatedMemoryUsage << "," << maxFirstBindDedicatedMemoryUsage << ","
<< (numIterations <= 1 ? 0 : averageEvalDedicatedMemoryUsage) << ","
<< (numIterations <= 1 ? 0 : stdevEvalDedicatedMemoryUsage) << ","
<< (numIterations <= 1 ? 0 : maxEvalDedicatedMemoryUsage) << ","
<< (numIterations <= 1 ? 0 : minEvalDedicatedMemoryUsage) << ","
<< averageLoadSharedMemoryUsage << "," << stdevLoadSharedMemoryUsage << "," << minLoadSharedMemoryUsage
<< "," << maxLoadSharedMemoryUsage << "," << averageCreateSessionSharedMemoryUsage << ","
<< stdevCreateSessionSharedMemoryUsage << "," << minCreateSessionSharedMemoryUsage << ","
<< maxCreateSessionSharedMemoryUsage << "," << averageFirstBindSharedMemoryUsage << ","
<< stdevFirstBindSharedMemoryUsage << "," << minFirstBindSharedMemoryUsage << ","
<< maxFirstBindSharedMemoryUsage << "," << (numIterations <= 1 ? 0 : averageBindSharedMemoryUsage)
<< "," << (numIterations <= 1 ? 0 : stdevBindSharedMemoryUsage) << ","
<< (numIterations <= 1 ? 0 : maxBindSharedMemoryUsage) << ","
<< (numIterations <= 1 ? 0 : minBindSharedMemoryUsage) << "," << averageFirstBindSharedMemoryUsage
<< "," << stdevFirstBindSharedMemoryUsage << "," << minFirstBindSharedMemoryUsage << ","
<< maxFirstBindSharedMemoryUsage << "," << (numIterations <= 1 ? 0 : averageEvalSharedMemoryUsage)
<< "," << (numIterations <= 1 ? 0 : stdevEvalSharedMemoryUsage) << ","
<< (numIterations <= 1 ? 0 : maxEvalSharedMemoryUsage) << ","
<< (numIterations <= 1 ? 0 : minEvalSharedMemoryUsage) << ",";
for (auto metaDataPair : perfFileMetadata)
{
fout << metaDataPair.second << ",";
}
fout << std::endl;
fout.close();
}
}