Skip to content
Snippets Groups Projects
Jikan copy.cpp 4.66 KiB
Newer Older
  • Learn to ignore specific revisions
  • #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
    }