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

Add description comments

parent 931b20d4
No related branches found
No related tags found
No related merge requests found
...@@ -15,7 +15,7 @@ EventData::EventData() ...@@ -15,7 +15,7 @@ EventData::EventData()
this->start = chrono::steady_clock::now(); this->start = chrono::steady_clock::now();
this->elapsed_time = 0.0; this->elapsed_time = 0.0;
this->count = 0; this->count = 0;
this->ifCUDA = 0; // this->ifCUDA = 0;
this->event_name = "Unnamed"; this->event_name = "Unnamed";
this->ifStart = false, this->ifEnd = false; this->ifStart = false, this->ifEnd = false;
this->if_mode_set = false; this->if_mode_set = false;
...@@ -49,7 +49,7 @@ EventData::EventData(const string& name) ...@@ -49,7 +49,7 @@ EventData::EventData(const string& name)
this->start = chrono::steady_clock::now(); this->start = chrono::steady_clock::now();
this->elapsed_time = 0.0; this->elapsed_time = 0.0;
this->count = 0; this->count = 0;
this->ifCUDA = 0; // this->ifCUDA = 0;
this->event_name = name; this->event_name = name;
this->ifStart = false, this->ifEnd = false; this->ifStart = false, this->ifEnd = false;
this->if_mode_set = false; this->if_mode_set = false;
...@@ -70,7 +70,7 @@ EventData& EventData::operator=(const EventData& src) ...@@ -70,7 +70,7 @@ EventData& EventData::operator=(const EventData& src)
this->start = src.start; this->start = src.start;
this->elapsed_time = 0.0; this->elapsed_time = 0.0;
this->count = 0; this->count = 0;
this->ifCUDA = 0; // this->ifCUDA = 0;
this->event_name = src.event_name; this->event_name = src.event_name;
this->ifStart = false, this->ifEnd = false; this->ifStart = false, this->ifEnd = false;
this->if_mode_set = src.if_mode_set; this->if_mode_set = src.if_mode_set;
...@@ -104,12 +104,12 @@ void EventData::GetModeVals(const int& mode) ...@@ -104,12 +104,12 @@ void EventData::GetModeVals(const int& mode)
else else
this->mode.push_back(false); this->mode.push_back(false);
this->if_mode_set = true;
if((mode == TimerMode::CUDA_mode) || (mode == TimerMode::MPI_CUDA) || (mode == TimerMode::OpenMP_CUDA) || (mode == TimerMode::MPI_OpenMP_CUDA)) if((mode == TimerMode::CUDA_mode) || (mode == TimerMode::MPI_CUDA) || (mode == TimerMode::OpenMP_CUDA) || (mode == TimerMode::MPI_OpenMP_CUDA))
this->mode.push_back(true); this->mode.push_back(true);
else else
this->mode.push_back(false); this->mode.push_back(false);
this->if_mode_set = true;
} }
string EventData::GetEventModeName() string EventData::GetEventModeName()
...@@ -144,3 +144,34 @@ string EventData::GetEventModeName() ...@@ -144,3 +144,34 @@ string EventData::GetEventModeName()
return EventModeName; return EventModeName;
} }
// void EventData::MPISync()
// {
// #ifdef INCLUDE_MPI
// int init_flag, fin_flag;
// MPI_Initialized(&init_flag);
// MPI_Finalized(&fin_flag);
// if((!fin_flag) && init_flag)
// MPI_Barrier(MPI_COMM_WORLD);
// #endif
// }
// void EventData::MPISync()
// {
// #ifdef INCLUDE_MPI
// int init_flag, fin_flag;
// MPI_Initialized(&init_flag);
// MPI_Finalized(&fin_flag);
// if((!fin_flag) && init_flag)
// MPI_Barrier(MPI_COMM_WORLD);
// #endif
// }
// void EventData::OpenMPSync()
// {
// #pragma omp barrier
// }
...@@ -25,3 +25,14 @@ void EventData::DeinitEventsCUDA() ...@@ -25,3 +25,14 @@ void EventData::DeinitEventsCUDA()
this->ifCUDAinit = false; this->ifCUDAinit = false;
} }
} }
// void EventData::CUDASyncStart()
// {
// cudaEventRecord (this->gpu_start);
// }
// void EventData::CUDASyncStart()
// {
// cudaEventRecord(this->gpu_end);
// cudaEventSynchronize(this->gpu_end);
// }
\ No newline at end of file
...@@ -19,26 +19,31 @@ public: ...@@ -19,26 +19,31 @@ public:
cudaEvent_t gpu_start, gpu_end; cudaEvent_t gpu_start, gpu_end;
#endif #endif
bool if_mode_set; bool if_mode_set; // If measurment type (MPI, OpenMP ...) is set
bool ifCUDAinit; bool ifCUDAinit; // If CUDA variables are initialized
chrono_time_type start; bool ifStart, ifEnd; // If measurment for current code block is started/finished
double elapsed_time, double_start; // seconds double elapsed_time, double_start; // seconds
int count, ifCUDA; int count; // Count of current code block measurments
bool ifStart, ifEnd; chrono_time_type start;
std::vector<double> time_series; std::vector<double> time_series; // Measurments time series for current code block
std::string event_name; std::string event_name; // Name ID for current code block
std::vector<bool> mode; // order: mode[0] ~ if MPI, mode[1] ~ if OpenMP, mode[2] ~ if CUDA std::vector<bool> mode; // Measurment type for current code block. Order: mode[0] ~ if MPI, mode[1] ~ if OpenMP, mode[2] ~ if CUDA
EventData(); EventData();
~EventData(); ~EventData();
EventData(const std::string& name); EventData(const std::string& name);
EventData& operator=(const EventData& src); EventData& operator=(const EventData& src);
double GetMeanElapsedTime(); double GetMeanElapsedTime(); // elapsed_time / count for each measuring code block
void GetModeVals(const int& mode); void GetModeVals(const int& mode); //
std::string GetEventModeName(); std::string GetEventModeName(); // Generate measure type for current code block (used for dump), for example "MPI", "MPI_OpenMP" etc.
private: private:
void InitEventsCUDA(); void InitEventsCUDA();
void DeinitEventsCUDA(); void DeinitEventsCUDA();
// void MPISync();
// void OpenMPSync();
// void CUDASyncStart();
// void CUDASyncEnd();
}; };
\ No newline at end of file
...@@ -13,14 +13,14 @@ extern "C" ...@@ -13,14 +13,14 @@ extern "C"
{ {
string str_name = name; string str_name = name;
Timer.Jikan_start(str_name, mode); Timer.JikanStart(str_name, mode);
} }
void TimerEnd(const char* name) void TimerEnd(const char* name)
{ {
string str_name = name; string str_name = name;
Timer.Jikan_end(str_name); Timer.JikanEnd(str_name);
} }
void WriteOutput() void WriteOutput()
......
...@@ -80,7 +80,7 @@ bool Jikan::ifContains(const string& Name) ...@@ -80,7 +80,7 @@ bool Jikan::ifContains(const string& Name)
return true; return true;
} }
void Jikan::Jikan_start(const string& name, const int& mode) void Jikan::JikanStart(const string& name, const int& mode)
{ {
bool ExistFlag, ifMPI, ifOpenMP; bool ExistFlag, ifMPI, ifOpenMP;
ExistFlag = this->ifContains(name); ExistFlag = this->ifContains(name);
...@@ -144,7 +144,7 @@ void Jikan::Jikan_start(const string& name, const int& mode) ...@@ -144,7 +144,7 @@ void Jikan::Jikan_start(const string& name, const int& mode)
} }
} }
void Jikan::Jikan_end(const string& name) void Jikan::JikanEnd(const string& name)
{ {
bool ExistFlag, ifStart; bool ExistFlag, ifStart;
bool ifMPI, ifOpenMP, ifCUDA; bool ifMPI, ifOpenMP, ifCUDA;
...@@ -162,8 +162,8 @@ void Jikan::Jikan_end(const string& name) ...@@ -162,8 +162,8 @@ void Jikan::Jikan_end(const string& name)
if((ifCUDA) && (!ifMPI) && (!ifOpenMP)) if((ifCUDA) && (!ifMPI) && (!ifOpenMP))
{ {
#ifdef INCLUDE_GPU_TIMER #ifdef INCLUDE_GPU_TIMER
this->cuda_Jikan_end(name); this->EndCUDASync(name);
this->cuda_get_time(name); this->CUDAGetTime(name);
#endif #endif
} }
} }
...@@ -262,7 +262,7 @@ void Jikan::StartEvent(const string& name) ...@@ -262,7 +262,7 @@ void Jikan::StartEvent(const string& name)
if((ifCUDA)) if((ifCUDA))
{ {
#ifdef INCLUDE_GPU_TIMER #ifdef INCLUDE_GPU_TIMER
this->cuda_Jikan_start(name); this->StartCUDASync(name);
#endif #endif
} }
...@@ -282,7 +282,7 @@ void Jikan::EndEvent(const string& name) ...@@ -282,7 +282,7 @@ void Jikan::EndEvent(const string& name)
if((ifCUDA)) if((ifCUDA))
{ {
#ifdef INCLUDE_GPU_TIMER #ifdef INCLUDE_GPU_TIMER
this->cuda_Jikan_end(name); this->EndCUDASync(name);
#endif #endif
} }
......
...@@ -9,18 +9,18 @@ ...@@ -9,18 +9,18 @@
using namespace std; using namespace std;
void Jikan::cuda_Jikan_start(const string& name) void Jikan::StartCUDASync(const string& name)
{ {
cudaEventRecord ((this->Events)[name].gpu_start); cudaEventRecord ((this->Events)[name].gpu_start);
} }
void Jikan::cuda_Jikan_end(const string& name) void Jikan::EndCUDASync(const string& name)
{ {
cudaEventRecord((this->Events)[name].gpu_end); cudaEventRecord((this->Events)[name].gpu_end);
cudaEventSynchronize((this->Events)[name].gpu_end); cudaEventSynchronize((this->Events)[name].gpu_end);
} }
void Jikan::cuda_get_time(const string& name) void Jikan::CUDAGetTime(const string& name)
{ {
float GPUtime = 0.0; float GPUtime = 0.0;
cudaEventElapsedTime(&GPUtime, (this->Events)[name].gpu_start, (this->Events)[name].gpu_end ); cudaEventElapsedTime(&GPUtime, (this->Events)[name].gpu_start, (this->Events)[name].gpu_end );
......
...@@ -14,44 +14,42 @@ ...@@ -14,44 +14,42 @@
class Jikan class Jikan
{ {
public: public:
std::map<std::string, EventData> Events; std::map<std::string, EventData> Events; // Measuring code blocks info: string = code block name ID, EventData = measuring code block data
std::map<std::string, std::set<std::string> > EventType; std::map<std::string, std::set<std::string> > EventType; // Code blocks measurment types: synchronious or ansynchronious
std::string JSONname; std::string JSONname; // Measurments dump filename
std::string JSONdata; std::string JSONdata; // Dump string
std::string Error; std::string Error; // Dump error ?
Jikan(); Jikan();
~Jikan(); ~Jikan();
void Jikan_start(const std::string& name, const int& mode); void JikanStart(const std::string& name, const int& mode); // Start code block measurments
void Jikan_end( const std::string& name); void JikanEnd( const std::string& name); // End code block measurments
#ifdef INCLUDE_GPU_TIMER #ifdef INCLUDE_GPU_TIMER
void cuda_Jikan_start(const std::string& name); void StartCUDASync(const std::string& name); // Start CUDA synchronization
void cuda_Jikan_end( const std::string& name); void EndCUDASync( const std::string& name); // End CUDA synchronization
#endif #endif
void GenerateTypedOutputData(const std::string& EventType, std::string& EventTypeString); void GenerateTypedOutputData(const std::string& EventType, std::string& EventTypeString);
void GenerateOutputData(); void GenerateOutputData();
// private: // private:
bool ifContains(const std::string& name); bool ifContains(const std::string& name); // Check if current code block measurments are already exist
#ifdef INCLUDE_MPI #ifdef INCLUDE_MPI
bool ifWriteProc(MPI_Comm comm, int id); bool ifWriteProc(MPI_Comm comm, int id); // Check if current MPI proc ID == id
#endif #endif
bool ifWriteProc(); bool ifWriteProc();
void SetDumpFilename(const std::string& name); // Change dump filename to <name>
void SetDumpFilename(const std::string& name);
private: private:
void StartTimer(const std::string& name); void BarrierMPI(); // Start MPI barrier
void BarrierMPI();
void StartEvent(const std::string& name); void StartEvent(const std::string& name);
void EndEvent(const std::string& name); void EndEvent(const std::string& name);
#ifdef INCLUDE_GPU_TIMER #ifdef INCLUDE_GPU_TIMER
void cuda_get_time(const string& name); void CUDAGetTime(const std::string& name);
#endif #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