Skip to content
Snippets Groups Projects
Commit 5aaf300e authored by 数学の武士's avatar 数学の武士
Browse files

Add continious measure

parent 2e7ff45e
No related branches found
No related tags found
No related merge requests found
......@@ -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;
......
......@@ -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
......
......@@ -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()
......
......@@ -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)
......
......@@ -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].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].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
}
}
......
......@@ -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].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
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment