From 5aaf300ee83c2d574c79278137e9ec40c054c17a Mon Sep 17 00:00:00 2001 From: Lizzzka007 <gashchuk2011@mail.ru> Date: Mon, 1 May 2023 23:24:47 +0300 Subject: [PATCH] Add continious measure --- Event.cpp | 5 ++-- Event.h | 1 + Jikan.cpp | 4 +-- Jikan.h | 10 ++++++-- JikanDepths.cpp | 65 ++++++++++++++++++++++++++++++++++++++++--------- JikanDepths.cu | 15 +++++++++--- JikanDepths.h | 6 ++--- 7 files changed, 82 insertions(+), 24 deletions(-) diff --git a/Event.cpp b/Event.cpp index f722cb2..bd43d52 100644 --- a/Event.cpp +++ b/Event.cpp @@ -15,6 +15,7 @@ EventData::EventData() this->start = chrono::steady_clock::now(); this->elapsed_time = 0.0; this->count = 0; + this->ContiniousTime = 0.0; // this->ifCUDA = 0; this->event_name = "Unnamed"; this->ifStart = false, this->ifEnd = false; @@ -53,7 +54,7 @@ EventData::EventData(const string& name) this->start = chrono::steady_clock::now(); this->elapsed_time = 0.0; this->count = 0; - // this->ifCUDA = 0; + this->ContiniousTime = 0.0; this->event_name = name; this->ifStart = false, this->ifEnd = false; this->if_mode_set = false; @@ -74,7 +75,7 @@ EventData& EventData::operator=(const EventData& src) this->start = src.start; this->elapsed_time = src.elapsed_time; this->count = src.count; - // this->ifCUDA = 0; + this->ContiniousTime = src.ContiniousTime; this->event_name = src.event_name; this->ifStart = src.ifStart, this->ifEnd = src.ifEnd; this->if_mode_set = src.if_mode_set; diff --git a/Event.h b/Event.h index cff3885..8a4f7dc 100644 --- a/Event.h +++ b/Event.h @@ -23,6 +23,7 @@ public: bool ifCUDAinit; // If CUDA variables are initialized bool ifStart, ifEnd; // If measurment for current code block is started/finished double elapsed_time, double_start; // seconds + double ContiniousTime; int count; // Count of current code block measurments chrono_time_type start; std::vector<double> time_series; // Measurments time series for current code block diff --git a/Jikan.cpp b/Jikan.cpp index 652666b..6b71019 100644 --- a/Jikan.cpp +++ b/Jikan.cpp @@ -16,11 +16,11 @@ extern "C" Timer.JikanStart(str_name, mode); } - void TimerEnd(const char* name) + void TimerEnd(const char* name, const int cont_mode_t) { string str_name = name; - Timer.JikanEnd(str_name); + Timer.JikanEnd(str_name, cont_mode_t); } void WriteOutput() diff --git a/Jikan.h b/Jikan.h index 8c9c792..1acf6d1 100644 --- a/Jikan.h +++ b/Jikan.h @@ -27,17 +27,23 @@ enum TimerMode MPI_CUDA = MPI_mode * CUDA_mode, }; +enum ContinueMode +{ + cont = 1, + finish = 0, +}; + #ifdef __cplusplus extern "C" { #endif void TimerStart(const char* name, const int mode_t); - void TimerEnd(const char* name); + void TimerEnd(const char* name, const int cont_mode_t); void WriteOutput(); #ifdef TIMER_ON #define START_JIKAN_TIMER(name, mode_t) TimerStart(name, mode_t); - #define END_JIKAN_TIMER(name) TimerEnd(name); + #define END_JIKAN_TIMER(name, cont_mode_t) TimerEnd(name, cont_mode_t); #define JIKAN_TIMER_OUTPUT() WriteOutput(); #else #define START_JIKAN_TIMER(name, mode_t) diff --git a/JikanDepths.cpp b/JikanDepths.cpp index 7198133..c4e5fb1 100644 --- a/JikanDepths.cpp +++ b/JikanDepths.cpp @@ -55,6 +55,26 @@ Jikan::Jikan() bool Jikan::ifWriteProc() { + #ifdef INCLUDE_MPI + int init_flag, fin_flag; + + MPI_Initialized(&init_flag); + MPI_Finalized(&fin_flag); + + int GlobalCommRank; + + if((!fin_flag) && init_flag) + { + MPI_Comm_rank(MPI_COMM_WORLD, &GlobalCommRank); + if(GlobalCommRank == 0) + return true; + else + return false; + } + else + return true; + #endif + return true; } @@ -178,7 +198,7 @@ void Jikan::JikanStart(const string& name, const int& mode) // printf("177 (this->Events)[name].ifStart = %d\n", (this->Events)[name].ifStart); } -void Jikan::JikanEnd(const string& name) +void Jikan::JikanEnd(const string& name, const int cont_mode_t) { bool ExistFlag, ifStart; bool ifMPI, ifOpenMP, ifCUDA; @@ -204,7 +224,7 @@ void Jikan::JikanEnd(const string& name) { #ifdef INCLUDE_GPU_TIMER this->EndCUDASync(name); - this->CUDAGetTime(name); + this->CUDAGetTime(name, cont_mode_t); #endif } #ifdef INCLUDE_OPEN_MP @@ -228,7 +248,7 @@ void Jikan::JikanEnd(const string& name) if(ifMPI) this->BarrierMPI(); - this->EndEvent(name); + this->EndEvent(name, cont_mode_t); #ifdef INCLUDE_OPEN_MP } #endif @@ -324,14 +344,17 @@ void Jikan::StartEvent(const string& name) (this->Events)[name].start = chrono::steady_clock::now(); } -void Jikan::EndEvent(const string& name) +#define btoa(x) ((x)?"true":"false") + +void Jikan::EndEvent(const string& name, const int cont_mode_t) { bool ifMPI = (this->Events)[name].mode[0], ifOpenMP = (this->Events)[name].mode[1], ifCUDA = (this->Events)[name].mode[2]; - if((ifCUDA)) + // printf("%s %s %s\n", btoa(ifMPI), btoa(ifOpenMP), btoa(ifCUDA)); + + if(ifCUDA) { #ifdef INCLUDE_GPU_TIMER - // printf("EndCUDASync\n"); this->EndCUDASync(name); #endif } @@ -343,10 +366,19 @@ void Jikan::EndEvent(const string& name) double main_elapsed = end - (this->Events)[name].double_start; (this->Events)[name].elapsed_time += main_elapsed; - (this->Events)[name].count ++; + (this->Events)[name].ContiniousTime += main_elapsed; + + if(cont_mode_t == 0) + { + (this->Events)[name].count ++; + } #ifdef SAVE_TIME_SERIES - (this->Events)[name].time_series.push_back(main_elapsed); + if(cont_mode_t == 0) + { + (this->Events)[name].time_series.push_back((this->Events)[name].ContiniousTime); + (this->Events)[name].ContiniousTime = 0.0; + } #endif } #endif @@ -357,12 +389,21 @@ void Jikan::EndEvent(const string& name) chrono_time_type start = (this->Events)[name].start; double main_elapsed = chrono::duration_cast<chrono::nanoseconds>(end - start).count() * 1e-9; - + //printf("%e\n", main_elapsed); (this->Events)[name].elapsed_time += main_elapsed; - (this->Events)[name].count ++; + (this->Events)[name].ContiniousTime += main_elapsed; + + if(cont_mode_t == 0) + { + (this->Events)[name].count ++; + } #ifdef SAVE_TIME_SERIES - (this->Events)[name].time_series.push_back(main_elapsed); + if(cont_mode_t == 0) + { + (this->Events)[name].time_series.push_back((this->Events)[name].ContiniousTime); + (this->Events)[name].ContiniousTime = 0.0; + } #endif } } @@ -380,4 +421,4 @@ void Jikan::BarrierMPI() #endif } -class Jikan Timer; \ No newline at end of file +class Jikan Timer; diff --git a/JikanDepths.cu b/JikanDepths.cu index 75335df..d1d734d 100644 --- a/JikanDepths.cu +++ b/JikanDepths.cu @@ -20,15 +20,24 @@ void Jikan::EndCUDASync(const string& name) cudaEventSynchronize((this->Events)[name].gpu_end); } -void Jikan::CUDAGetTime(const string& name) +void Jikan::CUDAGetTime(const string& name, const int cont_mode_t) { float GPUtime = 0.0; cudaEventElapsedTime(&GPUtime, (this->Events)[name].gpu_start, (this->Events)[name].gpu_end ); GPUtime *= 1e-3; (this->Events)[name].elapsed_time += GPUtime; - (this->Events)[name].count ++; + (this->Events)[name].ContiniousTime += GPUtime; + + if(cont_mode_t == 0) + { + (this->Events)[name].count ++; + } #ifdef SAVE_TIME_SERIES - (this->Events)[name].time_series.push_back(GPUtime); + if(cont_mode_t == 0) + { + (this->Events)[name].time_series.push_back((this->Events)[name].ContiniousTime); + (this->Events)[name].ContiniousTime = 0.0; + } #endif } \ No newline at end of file diff --git a/JikanDepths.h b/JikanDepths.h index 3a1eb93..d12e259 100644 --- a/JikanDepths.h +++ b/JikanDepths.h @@ -24,7 +24,7 @@ public: ~Jikan(); void JikanStart(const std::string& name, const int& mode); // Start code block measurments - void JikanEnd( const std::string& name); // End code block measurments + void JikanEnd( const std::string& name, const int cont_mode_t); // End code block measurments #ifdef INCLUDE_GPU_TIMER void StartCUDASync(const std::string& name); // Start CUDA synchronization @@ -47,9 +47,9 @@ public: private: void BarrierMPI(); // Start MPI barrier void StartEvent(const std::string& name); - void EndEvent(const std::string& name); + void EndEvent(const std::string& name, const int cont_mode_t); #ifdef INCLUDE_GPU_TIMER - void CUDAGetTime(const std::string& name); + void CUDAGetTime(const std::string& name, const int cont_mode_t); #endif }; \ No newline at end of file -- GitLab