- Timestamp:
- Jul 8, 2020, 7:49:06 PM (4 years ago)
- Location:
- LMDZ6/branches/Optimisation_LMDZ/libf/phy_common
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Optimisation_LMDZ/libf/phy_common/ioipsl_getin_p_mod.F90
r2352 r3749 17 17 !- 18 18 PRIVATE 19 PUBLIC :: getin_p 19 PUBLIC :: getin_p, getin 20 20 !- 21 21 INTERFACE getin_p -
LMDZ6/branches/Optimisation_LMDZ/libf/phy_common/profiling_physic.F90
r3746 r3749 37 37 REAL, ALLOCATABLE :: elapsed(:,:)!(omp_size, max_id) ! Cumulative time for each timer 38 38 SCOREP_DEFINE_HANDLE_ARRAY(scorep_handle) 39 40 LOGICAL :: profiling_enabled = .false. 39 41 40 42 PUBLIC :: enter_profile, exit_profile, print_profile … … 43 45 ! Be sure to init mod_phys_lmdz_omp_data before profiling 44 46 SUBROUTINE init_profiling 47 use ioipsl_getin_p_mod, only : getin 48 call getin("phy_profiling_enable", profiling_enabled) 45 49 nb_id=0 46 50 allocate(depth(0:omp_size-1)) … … 94 98 !$omp end master 95 99 !$omp barrier 96 end if 97 ! Create prof_id at first call with 'name' 98 if( .not. exists(ids, name) ) then 99 call checked_omp_barrier(name) 100 !$omp master 101 call register_id(name,id) 102 call insert_or_assign(ids, name, id) 103 !$omp end master 104 !$omp barrier 105 end if 106 call enter_profile_aux(get_val(ids, name)) 100 end if 101 if( profiling_enabled ) then 102 ! Create prof_id at first call with 'name' 103 if( .not. exists(ids, name) ) then 104 call checked_omp_barrier(name) 105 !$omp master 106 call register_id(name,id) 107 call insert_or_assign(ids, name, id) 108 !$omp end master 109 !$omp barrier 110 end if 111 call enter_profile_aux(get_val(ids, name)) 112 endif 107 113 END SUBROUTINE 108 114 … … 118 124 ! Region must exist and be active on current thread 119 125 SUBROUTINE exit_profile(name) 120 CHARACTER(*) :: name 121 if(.not. exists(ids, name)) call abort_physic(modname, "Exit unknown timer", 1) 122 call exit_profile_aux(get_val(ids,name)) 126 CHARACTER(*) :: name 127 if( profiling_enabled ) then 128 if(.not. exists(ids, name)) call abort_physic(modname, "Exit unknown timer", 1) 129 call exit_profile_aux(get_val(ids,name)) 130 endif 123 131 END SUBROUTINE 124 132 … … 155 163 REAL :: mean_time, max_process, min_process, percent 156 164 157 call enter_profile("print_profile") 158 159 !$OMP MASTER 160 ! mean_total : mean of sum of all timers on all threads and all procs 161 mean_total_local = SUM(elapsed(:,1:nb_id))/omp_size/mpi_size 162 !call MPI_Reduce(mean_total_local, mean_total, 1, MPI_DOUBLE, MPI_SUM, 0, comm_icosa, ierr) 163 call reduce_sum_mpi( mean_total_local, mean_total ) 164 ! min_total : min on all procs of sum of all timers on all threads 165 min_total_local = MINVAL( SUM(elapsed(:,1:nb_id), 2) ) 166 !call MPI_Reduce(min_total_local, min_total, 1, MPI_DOUBLE, MPI_MIN, 0, comm_icosa, ierr) 167 call reduce_min_mpi(min_total_local, min_total) 168 ! max_total : max on all procs of sum of all timers on all threads 169 max_total_local = MAXVAL( SUM(elapsed(:,1:nb_id), 2) ) 170 !call MPI_Reduce(max_total_local, max_total, 1, MPI_DOUBLE, MPI_MAX, 0, comm_icosa, ierr) 171 call reduce_max_mpi(max_total_local, max_total) 172 173 if(is_mpi_root) PRINT *, '---------------------- Profiling (Physic) --------------' 174 if(is_mpi_root) PRINT ('(A15, F12.3, A, F12.3, A, F12.3, A)'), 'Total (Physic) (s) : ', mean_total, " [", min_total, ",", max_total, "]" 175 if(is_mpi_root) PRINT ('(A15, A7, A47, A47)'), " "," % "," Process mean(s)[ min, max, diff/mean(%) ] ", "Process 1 threads(s)[ min, max, diff/mean(%) ]" 176 DO i=1,nb_id 177 omp_mean_time_local = SUM(elapsed(:,i))/omp_size ! Mean time of timer on local threads 178 omp_min_time_local = MINVAL(elapsed(:,i)) ! Max time of timer on local threads 179 omp_max_time_local = MAXVAL(elapsed(:,i)) ! Min time of timer on local threads 180 !omp_inbalance_local = 100*(max_time-min_time)/min_time 181 182 ! mean_time : mean of timer on all threads and all procs 183 !call MPI_Reduce(omp_mean_time_local, mean_time, 1, MPI_DOUBLE, MPI_SUM, 0, comm_icosa, ierr); 184 call reduce_sum_mpi( omp_mean_time_local, mean_time ) 185 mean_time = mean_time/mpi_size 186 ! max_process_time : max on procs of mean omp time 187 !call MPI_Reduce(omp_mean_time_local, max_process, 1, MPI_DOUBLE, MPI_MAX, 0, comm_icosa, ierr) 188 call reduce_max_mpi(omp_mean_time_local, max_process) 189 ! min_process_time : min on procs of mean omp time 190 !call MPI_Reduce(omp_mean_time_local, min_process, 1, MPI_DOUBLE, MPI_MIN, 0, comm_icosa, ierr) 191 call reduce_min_mpi(omp_mean_time_local, min_process) 192 193 percent = 100*mean_time/mean_total 194 195 if(is_mpi_root) PRINT ('(A15, F5.1, F12.3, A, F12.3, A, F12.3, A, F6.1, A, F12.3, A, F12.3, A, F12.3, A, F6.1, A)'), name(i), percent, mean_time, " [", min_process, ",", max_process, "," , inbalance(mean_time, min_process, max_process), "]", omp_mean_time_local, " [", omp_min_time_local, ",", omp_max_time_local, "," , inbalance(omp_mean_time_local, omp_min_time_local, omp_max_time_local) , "]" 196 END DO 197 if(is_mpi_root) PRINT *, '---------------------- Profiling -----------------------' 198 !$OMP END MASTER 199 call exit_profile("print_profile") 165 if( profiling_enabled ) then 166 call enter_profile("print_profile") 167 168 !$OMP MASTER 169 ! mean_total : mean of sum of all timers on all threads and all procs 170 mean_total_local = SUM(elapsed(:,1:nb_id))/omp_size/mpi_size 171 !call MPI_Reduce(mean_total_local, mean_total, 1, MPI_DOUBLE, MPI_SUM, 0, comm_icosa, ierr) 172 call reduce_sum_mpi( mean_total_local, mean_total ) 173 ! min_total : min on all procs of sum of all timers on all threads 174 min_total_local = MINVAL( SUM(elapsed(:,1:nb_id), 2) ) 175 !call MPI_Reduce(min_total_local, min_total, 1, MPI_DOUBLE, MPI_MIN, 0, comm_icosa, ierr) 176 call reduce_min_mpi(min_total_local, min_total) 177 ! max_total : max on all procs of sum of all timers on all threads 178 max_total_local = MAXVAL( SUM(elapsed(:,1:nb_id), 2) ) 179 !call MPI_Reduce(max_total_local, max_total, 1, MPI_DOUBLE, MPI_MAX, 0, comm_icosa, ierr) 180 call reduce_max_mpi(max_total_local, max_total) 181 182 if(is_mpi_root) PRINT *, '---------------------- Profiling (Physic) --------------' 183 if(is_mpi_root) PRINT ('(A15, F12.3, A, F12.3, A, F12.3, A)'), 'Total (Physic) (s) : ', mean_total, " [", min_total, ",", max_total, "]" 184 if(is_mpi_root) PRINT ('(A15, A7, A47, A47)'), " "," % "," Process mean(s)[ min, max, diff/mean(%) ] ", "Process 1 threads(s)[ min, max, diff/mean(%) ]" 185 DO i=1,nb_id 186 omp_mean_time_local = SUM(elapsed(:,i))/omp_size ! Mean time of timer on local threads 187 omp_min_time_local = MINVAL(elapsed(:,i)) ! Max time of timer on local threads 188 omp_max_time_local = MAXVAL(elapsed(:,i)) ! Min time of timer on local threads 189 !omp_inbalance_local = 100*(max_time-min_time)/min_time 190 191 ! mean_time : mean of timer on all threads and all procs 192 !call MPI_Reduce(omp_mean_time_local, mean_time, 1, MPI_DOUBLE, MPI_SUM, 0, comm_icosa, ierr); 193 call reduce_sum_mpi( omp_mean_time_local, mean_time ) 194 mean_time = mean_time/mpi_size 195 ! max_process_time : max on procs of mean omp time 196 !call MPI_Reduce(omp_mean_time_local, max_process, 1, MPI_DOUBLE, MPI_MAX, 0, comm_icosa, ierr) 197 call reduce_max_mpi(omp_mean_time_local, max_process) 198 ! min_process_time : min on procs of mean omp time 199 !call MPI_Reduce(omp_mean_time_local, min_process, 1, MPI_DOUBLE, MPI_MIN, 0, comm_icosa, ierr) 200 call reduce_min_mpi(omp_mean_time_local, min_process) 201 202 percent = 100*mean_time/mean_total 203 204 if(is_mpi_root) PRINT ('(A15, F5.1, F12.3, A, F12.3, A, F12.3, A, F6.1, A, F12.3, A, F12.3, A, F12.3, A, F6.1, A)'), name(i), percent, mean_time, " [", min_process, ",", max_process, "," , inbalance(mean_time, min_process, max_process), "]", omp_mean_time_local, " [", omp_min_time_local, ",", omp_max_time_local, "," , inbalance(omp_mean_time_local, omp_min_time_local, omp_max_time_local) , "]" 205 END DO 206 if(is_mpi_root) PRINT *, '---------------------- Profiling -----------------------' 207 !$OMP END MASTER 208 call exit_profile("print_profile") 209 endif 200 210 contains 201 211 function inbalance( mean, min, max )
Note: See TracChangeset
for help on using the changeset viewer.