#include "JikanDepths.h" #include "Jikan.h" using namespace std; void GetModeVals(bool& OpenMP, bool& MPI, bool& CUDA, const int& mode) { if(mode == TimerMode::OpenMP) || (mode == TimerMode::MPI_OpenMP) || (mode == TimerMode::MPI_OpenMP_CUDA) OpenMP = true; else OpenMP = false; } extern "C" { extern class Jikan Timer; void TimerStart(const char* name, int& mode) { #ifdef INCLUDE_OPEN_MP #pragma omp master if((mode == TimerMode::OpenMP) || (mode == TimerMode::MPI_OpenMP) || (mode == TimerMode::MPI_OpenMP_CUDA)) { #endif if() string str_name = name; Timer.Jikan_start(str_name); #ifdef INCLUDE_OPEN_MP } #endif } void TimerEnd(const char* name) { #ifdef INCLUDE_OPEN_MP #pragma omp master { #endif string str_name = name; Timer.Jikan_end(str_name); #ifdef INCLUDE_OPEN_MP } #endif } #ifdef INCLUDE_MPI void MPI_SyncTimerStart(const char* name) { #ifdef INCLUDE_OPEN_MP #pragma omp master { #endif string str_name = name; int init_flag, fin_flag; MPI_Initialized(&init_flag); MPI_Finalized(&fin_flag); if((!fin_flag) && init_flag) MPI_Barrier(MPI_COMM_WORLD); Timer.Jikan_sync_start(str_name); #ifdef INCLUDE_OPEN_MP } #endif } void MPI_SyncTimerEnd(const char* name) { #ifdef INCLUDE_OPEN_MP #pragma omp master { #endif string str_name = name; int init_flag, fin_flag; MPI_Initialized(&init_flag); MPI_Finalized(&fin_flag); if((!fin_flag) && init_flag) MPI_Barrier(MPI_COMM_WORLD); Timer.Jikan_sync_end(str_name); #ifdef INCLUDE_OPEN_MP } #endif } void MPI_SyncTimerStartCustom(const char* name, MPI_Comm comm) { #ifdef INCLUDE_OPEN_MP #pragma omp master { #endif string str_name = name; int init_flag, fin_flag; MPI_Initialized(&init_flag); MPI_Finalized(&fin_flag); if((!fin_flag) && init_flag) MPI_Barrier(MPI_COMM_WORLD); Timer.Jikan_sync_start(str_name); #ifdef INCLUDE_OPEN_MP } #endif } void MPI_SyncTimerEndCustom(const char* name, MPI_Comm comm) { #ifdef INCLUDE_OPEN_MP #pragma omp master { #endif string str_name = name; int init_flag, fin_flag; MPI_Initialized(&init_flag); MPI_Finalized(&fin_flag); if((!fin_flag) && init_flag) MPI_Barrier(comm); Timer.Jikan_sync_end(str_name); #ifdef INCLUDE_OPEN_MP } #endif } void WriteOutputCustom(MPI_Comm comm, int id) { #ifdef INCLUDE_OPEN_MP #pragma omp master { #endif bool ifWrite = Timer.ifWriteProc(comm, id); if(ifWrite == true) Timer.GenerateOutputData(); #ifdef INCLUDE_OPEN_MP } #endif } void WriteOutput(int id) { #ifdef INCLUDE_OPEN_MP #pragma omp master { #endif bool ifWrite = Timer.ifWriteProc(MPI_COMM_WORLD, id); // cout << ifWrite << endl; if(ifWrite == true) Timer.GenerateOutputData(); #ifdef INCLUDE_OPEN_MP } #endif } #else void WriteOutput() { #ifdef INCLUDE_OPEN_MP #pragma omp master { #endif bool ifWrite = Timer.ifWriteProc(); if(ifWrite == true) Timer.GenerateOutputData(); #ifdef INCLUDE_OPEN_MP } #endif } #endif #ifdef INCLUDE_OPEN_MP void OpenMP_SyncTimerStart(const char* name) { #pragma omp barrier #pragma omp master { string str_name = name; Timer.Jikan_sync_start(str_name); } } void OpenMP_SyncTimerEnd(const char* name) { #pragma omp barrier #pragma omp master { string str_name = name; Timer.Jikan_sync_end(str_name); } } #endif //-------- #ifdef INCLUDE_GPU_TIMER void CudaTimerStart(const char* name) { #ifdef INCLUDE_OPEN_MP #pragma omp master { #endif string str_name = name; Timer.cuda_Jikan_start(str_name); #ifdef INCLUDE_OPEN_MP } #endif } void CudaTimerEnd(const char* name) { #ifdef INCLUDE_OPEN_MP #pragma omp master { #endif string str_name = name; Timer.cuda_Jikan_end(str_name); #ifdef INCLUDE_OPEN_MP } #endif } #endif }