Changeset 667


Ignore:
Timestamp:
01/24/18 18:49:49 (6 years ago)
Author:
dubos
Message:

trunk : basic coarse-grain profiling

Location:
codes/icosagcm/trunk/src
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/trunk/src/icosa_init.f90

    r599 r667  
    2121  USE etat0_mod 
    2222  USE diagflux_mod 
     23  USE profiling_mod 
    2324  IMPLICIT NONE 
    2425   
     26    CALL init_profiling 
    2527    CALL init_mpipara 
    2628    CALL trace_off 
  • codes/icosagcm/trunk/src/output/output_field.f90

    r548 r667  
    11MODULE output_field_mod 
    2 USE genmod 
     2  USE genmod 
     3  USE xios_mod 
     4  USE profiling_mod 
     5  IMPLICIT NONE 
     6  SAVE 
    37  PRIVATE 
     8 
    49  LOGICAL,SAVE :: xios_output  
    510!$OMP THREADPRIVATE(xios_output)      
    611  LOGICAL,SAVE :: enable_io     
    712!$OMP THREADPRIVATE(enable_io)      
     13 
     14  INTEGER :: id_output 
    815 
    916  PUBLIC enable_io,xios_output,output_field_init,output_field,output_field_finalize 
     
    1320  SUBROUTINE output_field_init 
    1421  USE getin_mod 
    15   USE xios_mod 
    16   USE write_field_mod 
    1722  IMPLICIT NONE 
     23 
     24    CALL register_id('output',id_output) 
    1825 
    1926    enable_io=.TRUE. 
     
    3037      CALL xios_init_write_field 
    3138    ENDIF 
    32  
    33      
    3439  END SUBROUTINE output_field_init 
    3540 
    3641  SUBROUTINE output_field(name_in,field) 
    3742    USE field_mod 
    38     USE xios_mod 
    3943    USE write_field_mod 
    4044    IMPLICIT NONE   
    41      CHARACTER(LEN=*),INTENT(IN) :: name_in 
    42       TYPE(t_field),POINTER :: field(:) 
    43  
    44       IF (xios_output) THEN 
    45         CALL xios_write_field(name_in,field) 
    46       ELSE 
     45    CHARACTER(LEN=*),INTENT(IN) :: name_in 
     46    TYPE(t_field),POINTER :: field(:) 
     47     
     48    CALL enter_profile(id_output) 
     49    IF (xios_output) THEN 
     50       CALL xios_write_field(name_in,field) 
     51    ELSE 
    4752       CALL writeField(name_in,field) 
    48       ENDIF 
     53    ENDIF 
     54    CALL exit_profile(id_output) 
    4955 
    5056  END SUBROUTINE output_field 
    5157 
    5258  SUBROUTINE output_field_finalize 
    53   USE ioipsl 
    54   USE xios_mod 
    55   IMPLICIT NONE 
     59    USE ioipsl 
     60    IMPLICIT NONE 
    5661     
    5762    IF (xios_output) THEN 
    58       CALL xios_write_field_finalize 
     63       CALL xios_write_field_finalize 
    5964    ENDIF 
    6065     
  • codes/icosagcm/trunk/src/parallel/mpipara.F90

    r548 r667  
    1212  INTEGER,SAVE :: mpi_master 
    1313   
    14    
     14  INTEGER,SAVE :: id_mpi ! id for profiling 
     15 
    1516  INTERFACE allocate_mpi_buffer 
    1617    MODULE PROCEDURE allocate_mpi_buffer_r2, allocate_mpi_buffer_r3,allocate_mpi_buffer_r4 
  • codes/icosagcm/trunk/src/parallel/transfert_mpi.f90

    r604 r667  
    22USE genmod 
    33USE field_mod 
     4IMPLICIT NONE 
    45   
    56  TYPE array 
     
    8586  END INTERFACE 
    8687 
    87  
    88    
    8988CONTAINS 
    9089        
    9190       
    9291  SUBROUTINE init_transfert 
     92  USE profiling_mod 
    9393  USE domain_mod 
    9494  USE dimensions 
     
    100100  INTEGER :: ind,i,j 
    101101  LOGICAL ::ok 
    102   
     102 
     103    CALL register_id('MPI', id_mpi) 
     104 
    103105    CALL create_request(field_t,req_i1) 
    104106 
     
    10941096 
    10951097  SUBROUTINE send_message_mpi(field,message) 
     1098  USE profiling_mod 
    10961099  USE field_mod 
    10971100  USE domain_mod 
     
    11241127 
    11251128!    CALL trace_start("send_message_mpi") 
     1129 
     1130    CALL enter_profile(id_mpi) 
    11261131 
    11271132!$OMP BARRIER 
     
    14821487!$OMP BARRIER 
    14831488!    CALL trace_end("send_message_mpi") 
     1489 
     1490    CALL exit_profile(id_mpi) 
    14841491     
    14851492  END SUBROUTINE send_message_mpi 
     
    14991506    
    15001507  SUBROUTINE wait_message_mpi(message) 
     1508  USE profiling_mod 
    15011509  USE field_mod 
    15021510  USE domain_mod 
     
    15271535    message%open=.FALSE. 
    15281536    IF (.NOT. message%pending) RETURN 
     1537 
     1538    CALL enter_profile(id_mpi) 
    15291539 
    15301540!    CALL trace_start("wait_message_mpi") 
     
    16671677!$OMP BARRIER 
    16681678     
     1679    CALL exit_profile(id_mpi) 
     1680 
    16691681  END SUBROUTINE wait_message_mpi 
    16701682 
  • codes/icosagcm/trunk/src/time/timeloop_gcm.f90

    r607 r667  
    11MODULE timeloop_gcm_mod 
     2  USE profiling_mod 
    23  USE icosa 
    34  USE disvert_mod 
     
    1314  TYPE(t_message),SAVE :: req_ps0, req_mass0, req_theta_rhodz0, req_u0, req_q0, req_W0, req_geopot0 
    1415  LOGICAL, SAVE :: positive_theta 
    15  
     16  INTEGER :: itau_prof, id_timeloop, id_dyn, id_phys, id_dissip, id_adv, id_diags 
    1617  PUBLIC :: init_timeloop, timeloop 
    1718 
     
    3233    CHARACTER(len=255) :: def 
    3334 
     35    CALL register_id('timeloop',id_timeloop) 
     36    CALL register_id('dyn',id_dyn) 
     37    CALL register_id('dissip',id_dissip) 
     38    CALL register_id('phys',id_phys) 
     39    CALL register_id('adv',id_adv) 
     40    CALL register_id('diags',id_diags) 
     41 
    3442    CALL init_caldyn 
    3543     
    3644!    IF (xios_output) itau_out=1 
    3745    IF (.NOT. enable_io) itau_out=HUGE(itau_out) 
     46 
     47    itau_prof=100 
     48    CALL getin('itau_profiling',itau_prof) 
    3849 
    3950    positive_theta=.FALSE. 
     
    231242 
    232243    !$OMP MASTER 
    233     CALL SYSTEM_CLOCK(start_clock) 
    234     CALL SYSTEM_CLOCK(count_rate=rate_clock) 
     244    CALL SYSTEM_CLOCK(start_clock, rate_clock) 
    235245    !$OMP END MASTER    
    236246 
    237247    DO it=itau0+1,itau0+itaumax 
    238  
    239248       IF (is_master) CALL print_iteration(it, itau0, itaumax, start_clock, rate_clock) 
     249 
     250       CALL enter_profile(id_timeloop) 
    240251 
    241252       IF (xios_output) THEN 
     
    267278       CALL guided(it*dt,f_ps,f_theta_rhodz,f_u,f_q) 
    268279 
     280       CALL enter_profile(id_dyn) 
    269281       SELECT CASE(scheme_family) 
    270282       CASE(explicit) 
     
    273285          CALL HEVI_scheme(it, fluxt_zero) 
    274286       END SELECT 
    275  
     287       CALL exit_profile(id_dyn) 
     288 
     289       CALL enter_profile(id_dissip) 
    276290       IF (MOD(it,itau_dissip)==0) THEN 
    277291           
     
    288302          ENDIF 
    289303           
     304          CALL enter_profile(id_diags) 
    290305          CALL check_conserve_detailed(it, AAM_dyn, & 
    291306               f_ps,f_dps,f_u,f_theta_rhodz,f_phis) 
     307          CALL exit_profile(id_diags) 
    292308        
    293309          CALL dissip(f_ps,f_mass,f_phis,f_geopot,f_theta_rhodz,f_u, f_dtheta_rhodz,f_du) 
     
    299315          END IF 
    300316 
     317          CALL enter_profile(id_diags) 
    301318          CALL check_conserve_detailed(it, AAM_dissip, & 
    302319               f_ps,f_dps,f_u,f_theta_rhodz,f_phis) 
     320          CALL exit_profile(id_diags) 
    303321       END IF 
     322       CALL exit_profile(id_dissip) 
    304323        
     324       CALL enter_profile(id_adv) 
    305325       IF(MOD(it,itau_adv)==0) THEN 
    306326          CALL advect_tracer(f_hfluxt,f_wfluxt,f_u, f_q,f_rhodz, & ! update q and rhodz after RK step 
     
    322342          IF(positive_theta) CALL copy_q_to_theta(f_theta_rhodz,f_rhodz,f_q) 
    323343       END IF 
     344       CALL exit_profile(id_adv) 
    324345        
     346       CALL enter_profile(id_diags) 
    325347       IF (MOD(it,itau_physics)==0) THEN 
    326348          CALL check_conserve_detailed(it, AAM_dyn, & 
    327349            f_ps,f_dps,f_u,f_theta_rhodz,f_phis) 
     350          CALL enter_profile(id_phys) 
    328351          CALL physics(it,f_phis, f_ps, f_theta_rhodz, f_u, f_wflux, f_q)         
     352          CALL exit_profile(id_phys) 
    329353          CALL check_conserve_detailed(it, AAM_phys, & 
    330354               f_ps,f_dps,f_u,f_theta_rhodz,f_phis) 
     
    345369          CALL write_output_fields_basic(.FALSE.,f_phis, f_ps, f_mass, f_geopot, f_theta_rhodz, f_u, f_W, f_q) 
    346370       ENDIF 
    347  
     371       CALL exit_profile(id_diags) 
     372 
     373       CALL exit_profile(id_timeloop) 
    348374    END DO 
    349375     
     
    382408            '  -- Completion in (min) : ', INT((total-elapsed)/60.) 
    383409    END IF 
     410    IF(MOD(it,itau_prof)==0) CALL print_profile 
     411 
    384412  END SUBROUTINE print_iteration 
    385413 
Note: See TracChangeset for help on using the changeset viewer.