check_para.f90 2.34 KB
Newer Older
1 2 3 4 5 6 7 8
MODULE m_judft_para

CONTAINS
   subroutine juDFT_check_para()
      implicit none
      call check_omp_para()
   end subroutine juDFT_check_para

9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
   !subroutine check_mpi_para(mpi)
      !use m_judft_string
      !use m_judft_stop
      !implicit none
      !TYPE(t_mpi)    ,INTENT(IN) :: mpi
      !real(8)                    :: summe, summe_seq, t_mpi, t_seq
      !integer(4)                 :: rank, size, ierr
      !integer                    :: i, omp_threads
      !integer, parameter          :: loop_end = 300000000

      !t_mpi = MPI_Wtime()
      !summe = 0.0
      !do i = 1, loop_end*omp_threads
         !summe = summe + 1.0
      !enddo
      !t_mpi = MPI_Wtime() - t_mpi

      !call MPI_Reduce(summe, summe_seq, 1, MPI_REAL8, MPI_SUM, 0, mpi%mpi_comm)

      !if(mpi%irank == 0) then
         !summe = summe / mpi%isize

         !t_seq = MPI_Wtime()
         !summe = 0.0
         !do i = 1, loop_end*omp_threads
            !summe = summe + 1.0
         !enddo
         !t_seq = MPI_Wtime() - t_seq
      !endif

   !end subroutine check_mpi_para


42 43 44 45 46 47 48 49 50 51 52 53
   subroutine check_omp_para()
      use omp_lib
      use m_judft_string
      use m_judft_stop
      implicit none
      real(8)  :: summe, t_omp, t_seq
      integer(4)  :: rank, size, ierr
      integer  :: i, omp_threads
      integer, parameter :: loop_end = 300000000

      summe = 0.0
      !$omp parallel reduction(+: t_omp)
54 55 56 57 58 59 60 61
      omp_threads = OMP_GET_NUM_THREADS()
      t_omp = OMP_GET_WTIME()
      !$omp do reduction(+:summe)
      do i = 1, loop_end*omp_threads
         summe = summe + 1.0
      enddo
      !$omp end do
      t_omp = OMP_GET_WTIME() - t_omp
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
      !$omp end parallel

      t_omp = t_omp / omp_threads

      summe = summe / omp_threads

      t_seq = OMP_GET_WTIME()
      do i = 1, loop_end
         summe = summe - 1.0
      enddo
      t_seq = OMP_GET_WTIME() - t_seq

      if( abs(t_seq/t_omp -1.0) < 0.1)then
         write (*,*) "Parallelization OK"
      else
77
         write (*,*) "number of OMPs = ", omp_threads
78 79 80 81 82
         write (*,*) "t_omp = ", t_omp
         write (*,*) "t_seq = ", t_seq
         write (*,*) "Summe = ", summe

         call juDFT_warn("OMP parallelization underperform with a parallel efficiency of " // &
83
            float2str(t_seq/t_omp), hint="check if your slurm files is set properly")
84 85 86 87
      endif
   end subroutine check_omp_para

END MODULE m_judft_para