diff --git a/Event.cpp b/Event.cpp index fab2995e31f051cddc3b42b948b4f497cc18472b..f722cb249dd0185a3b8394da413cd3e5792e0cc1 100644 --- a/Event.cpp +++ b/Event.cpp @@ -72,11 +72,11 @@ EventData& EventData::operator=(const EventData& src) { this->double_start = src.double_start; this->start = src.start; - this->elapsed_time = 0.0; - this->count = 0; + this->elapsed_time = src.elapsed_time; + this->count = src.count; // this->ifCUDA = 0; this->event_name = src.event_name; - this->ifStart = false, this->ifEnd = false; + this->ifStart = src.ifStart, this->ifEnd = src.ifEnd; this->if_mode_set = src.if_mode_set; this->ifCUDAinit = src.ifCUDAinit; @@ -84,8 +84,11 @@ EventData& EventData::operator=(const EventData& src) this->mode = src.mode; #ifdef INCLUDE_GPU_TIMER + this->InitEventsCUDA(); this->gpu_start = src.gpu_start; this->gpu_end = src.gpu_end; + + // printf("Copied %e, ori %e\n", Ellapsed(this->gpu_start, this->gpu_end), Ellapsed(src.gpu_start, src.gpu_end)); #endif return *this; diff --git a/Jikan.h b/Jikan.h index a005d4ba4032949c100d801d7a4676af1d8c368a..8c9c792a790139d00ff241299c86c89719441ad5 100644 --- a/Jikan.h +++ b/Jikan.h @@ -1,7 +1,7 @@ #pragma once //------------------------- Jikan-config --------------------------------------------- -//#define TIMER_ON +#define TIMER_ON #define INCLUDE_GPU_TIMER #define INCLUDE_MPI // #define INCLUDE_OPEN_MP diff --git a/JikanDepths.cpp b/JikanDepths.cpp index 5c6de17e62a25ae27da93053ecc316988ece0564..7198133a3efddaab60bb00c7ceb3c140233cdb78 100644 --- a/JikanDepths.cpp +++ b/JikanDepths.cpp @@ -93,15 +93,6 @@ void Jikan::JikanStart(const string& name, const int& mode) bool ExistFlag, ifMPI, ifOpenMP; ExistFlag = this->ifContains(name); - #ifdef INCLUDE_OPEN_MP - #pragma omp master - { - #endif - (this->Events)[name].ifStart = true; - #ifdef INCLUDE_OPEN_MP - } - #endif - if(!ExistFlag) { #ifdef INCLUDE_OPEN_MP @@ -114,6 +105,18 @@ void Jikan::JikanStart(const string& name, const int& mode) } #endif } + + #ifdef INCLUDE_OPEN_MP + #pragma omp master + { + #endif + (this->Events)[name].ifStart = true; + // printf("(this->Events)[name].ifStart = %d\n", (this->Events)[name].ifStart); + #ifdef INCLUDE_OPEN_MP + } + #endif + + // printf("118 (this->Events)[name].ifStart = %d\n", (this->Events)[name].ifStart); // else // { // bool ifStart = (this->Events)[name].ifStart; @@ -165,10 +168,14 @@ void Jikan::JikanStart(const string& name, const int& mode) #pragma omp master { #endif + // printf("170 (this->Events)[name].ifStart = %d\n", (this->Events)[name].ifStart); this->StartEvent(name); + // printf("(this->Events)[name].ifStart = %d\n", (this->Events)[name].ifStart); #ifdef INCLUDE_OPEN_MP } #endif + + // printf("177 (this->Events)[name].ifStart = %d\n", (this->Events)[name].ifStart); } void Jikan::JikanEnd(const string& name) @@ -179,11 +186,16 @@ void Jikan::JikanEnd(const string& name) ExistFlag = this->ifContains(name); ifStart = (this->Events)[name].ifStart; + // printf("JikanEnd\n"); + if((!ExistFlag) || (!ifStart)) + { + // printf("ExistFlag = %d, ifStart = %d\n", ExistFlag, ifStart); return; + } ifMPI = (this->Events)[name].mode[0], ifOpenMP = (this->Events)[name].mode[1], ifCUDA = (this->Events)[name].mode[2]; - + // printf("JikanEnd:: ifCUDA = %d\n", ifCUDA); #ifdef INCLUDE_OPEN_MP #pragma omp master { @@ -216,13 +228,12 @@ void Jikan::JikanEnd(const string& name) if(ifMPI) this->BarrierMPI(); - (this->Events)[name].ifStart = false; - this->EndEvent(name); #ifdef INCLUDE_OPEN_MP } #endif //--------------------------------------------------------------------------------------- + (this->Events)[name].ifStart = false; } void Jikan::GenerateTypedOutputData(const string& EventType, string& EventTypeString) @@ -299,6 +310,7 @@ void Jikan::StartEvent(const string& name) if((ifCUDA)) { #ifdef INCLUDE_GPU_TIMER + // printf("StartCUDASync\n"); this->StartCUDASync(name); #endif } @@ -319,6 +331,7 @@ void Jikan::EndEvent(const string& name) if((ifCUDA)) { #ifdef INCLUDE_GPU_TIMER + // printf("EndCUDASync\n"); this->EndCUDASync(name); #endif } diff --git a/ToJSON.cpp b/ToJSON.cpp index 8241654fd09287e84d8688852c049017fa1e942e..828d45800177b681581fa2fe46a538ee6235bea9 100644 --- a/ToJSON.cpp +++ b/ToJSON.cpp @@ -2,6 +2,7 @@ #include "Event.h" #include <fstream> +#include <sstream> using namespace std; @@ -35,37 +36,45 @@ string JSON::StartTypedBlock(const string& name) return row; } -bool JSON::GenerateRow(EventData Event, string &ResRow, const string& EndRowJSON) +string Number2String(const double Val) { - string EventModeName = JSON::StartSubRow("Event mode") + "\"" + Event.GetEventModeName() + "\"" + JSON::SeparateSubRows; - - char AccurateValue[256]; - sprintf(AccurateValue, "%.10e", Event.elapsed_time); + ostringstream StrTSValue; + StrTSValue << Val << scientific; + string NumberAsString = StrTSValue.str(); - string FullElapsedTime = JSON::StartSubRow(string("Full elapsed time")) + string(AccurateValue) + JSON::SeparateSubRows; + return NumberAsString; +} - AccurateValue[0] = '\0'; +bool JSON::GenerateRow(EventData Event, string &ResRow, const string& EndRowJSON) +{ + string EventModeName = JSON::StartSubRow("Event mode") + "\"" + Event.GetEventModeName() + "\"" + JSON::SeparateSubRows; + string FullElapsedTime = JSON::StartSubRow(string("Full elapsed time")) + Number2String(Event.elapsed_time) + JSON::SeparateSubRows; double mean_elapsed = Event.GetMeanElapsedTime(); - sprintf(AccurateValue, "%.10e", mean_elapsed); - string MeanElapsedTime = JSON::StartSubRow(string("Mean elapsed time")) + string(AccurateValue) + JSON::SeparateSubRows; + string MeanElapsedTime = JSON::StartSubRow(string("Mean elapsed time")) + Number2String(mean_elapsed) + JSON::SeparateSubRows; string TimeSeries = JSON::StartSubRow(string("Time series")) + "["; int TimeSeriesLen = Event.time_series.size(); for (int i = 0; i < TimeSeriesLen - 1; i++) { - AccurateValue[0] = '\0'; - sprintf(AccurateValue, "%.10e", Event.time_series[i]); - TimeSeries += string(AccurateValue) + ", "; + // ostringstream StrTSValue; + // StrTSValue << Event.time_series[i]; + // string strObj = StrTSValue.str(); + // // printf("Event.time_series[i] = %e, AccurateValue %s\n", Event.time_series[i], AccurateValue); + // TimeSeries += strObj + ", "; + + TimeSeries += Number2String(Event.time_series[i]) + ", "; } if(TimeSeriesLen != 0) { - AccurateValue[0] = '\0'; - sprintf(AccurateValue, "%.10e", Event.time_series[TimeSeriesLen - 1]); - TimeSeries += string(AccurateValue); + // ostringstream StrTSValue; + // StrTSValue << Event.time_series[TimeSeriesLen - 1]; + // string strObj = StrTSValue.str(); + TimeSeries += Number2String(Event.time_series[TimeSeriesLen - 1]); } TimeSeries += "]" ; + // printf("TimeSeries %s\n", TimeSeries.c_str()); string JSONrow = JSON::StartSubRow(Event.event_name) + "{" + EventModeName + FullElapsedTime + MeanElapsedTime + TimeSeries + EndRowJSON; @@ -77,7 +86,7 @@ bool JSON::GenerateRow(EventData Event, string &ResRow, const string& EndRowJSON bool JSON::WriteOutput(const string& Filename, const string& OutputData) { ofstream file; - file.open(Filename); + file.open(Filename.c_str(), ios::out); if (!file) { @@ -87,7 +96,10 @@ bool JSON::WriteOutput(const string& Filename, const string& OutputData) } file << OutputData; + // file.write((char *)&OutputData, sizeof(string)); file.close(); + // printf("OutputData %s\n", OutputData.c_str()); + return true; }