New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 9772 for NEMO/branches/2018/dev_r9759_HPC09_ESIWACE/src/OCE/LBC/mpp_lnk_generic.h90 – NEMO

Ignore:
Timestamp:
2018-06-08T14:52:48+02:00 (6 years ago)
Author:
smasson
Message:

dev_r9759_HPC09_ESIWACE: add benchmark features

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r9759_HPC09_ESIWACE/src/OCE/LBC/mpp_lnk_generic.h90

    r9690 r9772  
    150150      imigr = nn_hls * jpj * ipk * ipl * ipf 
    151151      ! 
    152       SELECT CASE ( nbondi ) 
    153       CASE ( -1 ) 
    154          CALL mppsend( 2, zt3we(1,1,1,1,1,1), imigr, noea, ml_req1 ) 
    155          CALL mpprecv( 1, zt3ew(1,1,1,1,1,2), imigr, noea ) 
    156          IF(l_isend)   CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    157       CASE ( 0 ) 
    158          CALL mppsend( 1, zt3ew(1,1,1,1,1,1), imigr, nowe, ml_req1 ) 
    159          CALL mppsend( 2, zt3we(1,1,1,1,1,1), imigr, noea, ml_req2 ) 
    160          CALL mpprecv( 1, zt3ew(1,1,1,1,1,2), imigr, noea ) 
    161          CALL mpprecv( 2, zt3we(1,1,1,1,1,2), imigr, nowe ) 
    162          IF(l_isend)   CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    163          IF(l_isend)   CALL mpi_wait(ml_req2, ml_stat, ml_err) 
    164       CASE ( 1 ) 
    165          CALL mppsend( 1, zt3ew(1,1,1,1,1,1), imigr, nowe, ml_req1 ) 
    166          CALL mpprecv( 2, zt3we(1,1,1,1,1,2), imigr, nowe ) 
    167          IF(l_isend)   CALL mpi_wait(ml_req1, ml_stat, ml_err ) 
    168       END SELECT 
     152      IF ( ncom_stp == nit000 ) then 
     153         n_sequence = n_sequence + 1 
     154         icomm_sequence(n_sequence,1) = ipk 
     155         icomm_sequence(n_sequence,2) = ipf 
     156         ! write(6,'(A,6I4)') 'size comm ', nn_hls, jpi, jpj, ipk, ipl, ipf 
     157      ELSE IF ( mpprank == 0 .AND. ncom_stp == (nit000+1) .AND. l_print_comm_report ) THEN 
     158         write(6,*) 'Communication pattern report : ' 
     159         write(6,*) ' ' 
     160         write(6,'(A,I3)') ' Exchanged halos : ', n_sequence 
     161         jj = 0; jk = 0; jf = 0; jh = 0 
     162         DO ji = 1, n_sequence 
     163           IF ( icomm_sequence(ji,1) .gt. 1 ) jk = jk + 1 
     164           IF ( icomm_sequence(ji,2) .gt. 1 ) jf = jf + 1 
     165           IF ( icomm_sequence(ji,1) .gt. 1 .AND. icomm_sequence(ji,2) .gt. 1 ) jj = jj + 1 
     166           jh = MAX (jh, icomm_sequence(ji,1)*icomm_sequence(ji,2)) 
     167         END DO 
     168         write(6,'(A,I3)') ' 3D Exchanged halos : ', jk 
     169         write(6,'(A,I3)') ' Multi arrays exchanged halos : ', jf 
     170         write(6,'(A,I3)') '   from which 3D : ', jj 
     171         write(6,'(A,I10)') ' array max size : ', jh*jpi*jpj 
     172         l_print_comm_report = .FALSE. 
     173      END IF 
     174      ! 
     175      IF (ncom_stp <= ( nit000 + 1 ) .or. mod(ncom_stp,nn_comm_mod) == 0 ) THEN 
     176         ! 
     177         CALL tic_tac(.TRUE.) 
     178         ! 
     179         SELECT CASE ( nbondi ) 
     180         CASE ( -1 ) 
     181            CALL mppsend( 2, zt3we(1,1,1,1,1,1), imigr, noea, ml_req1 ) 
     182            CALL mpprecv( 1, zt3ew(1,1,1,1,1,2), imigr, noea ) 
     183            IF(l_isend)   CALL mpi_wait(ml_req1, ml_stat, ml_err) 
     184         CASE ( 0 ) 
     185            CALL mppsend( 1, zt3ew(1,1,1,1,1,1), imigr, nowe, ml_req1 ) 
     186            CALL mppsend( 2, zt3we(1,1,1,1,1,1), imigr, noea, ml_req2 ) 
     187            CALL mpprecv( 1, zt3ew(1,1,1,1,1,2), imigr, noea ) 
     188            CALL mpprecv( 2, zt3we(1,1,1,1,1,2), imigr, nowe ) 
     189            IF(l_isend)   CALL mpi_wait(ml_req1, ml_stat, ml_err) 
     190            IF(l_isend)   CALL mpi_wait(ml_req2, ml_stat, ml_err) 
     191         CASE ( 1 ) 
     192            CALL mppsend( 1, zt3ew(1,1,1,1,1,1), imigr, nowe, ml_req1 ) 
     193            CALL mpprecv( 2, zt3we(1,1,1,1,1,2), imigr, nowe ) 
     194            IF(l_isend)   CALL mpi_wait(ml_req1, ml_stat, ml_err ) 
     195         END SELECT 
     196      END IF 
    169197      ! 
    170198      !                           ! Write Dirichlet lateral conditions 
     
    226254      imigr = nn_hls * jpi * ipk * ipl * ipf 
    227255      ! 
    228       SELECT CASE ( nbondj ) 
    229       CASE ( -1 ) 
    230          CALL mppsend( 4, zt3sn(1,1,1,1,1,1), imigr, nono, ml_req1 ) 
    231          CALL mpprecv( 3, zt3ns(1,1,1,1,1,2), imigr, nono ) 
    232          IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err ) 
    233       CASE ( 0 ) 
    234          CALL mppsend( 3, zt3ns(1,1,1,1,1,1), imigr, noso, ml_req1 ) 
    235          CALL mppsend( 4, zt3sn(1,1,1,1,1,1), imigr, nono, ml_req2 ) 
    236          CALL mpprecv( 3, zt3ns(1,1,1,1,1,2), imigr, nono ) 
    237          CALL mpprecv( 4, zt3sn(1,1,1,1,1,2), imigr, noso ) 
    238          IF(l_isend)   CALL mpi_wait(ml_req1, ml_stat, ml_err ) 
    239          IF(l_isend)   CALL mpi_wait(ml_req2, ml_stat, ml_err ) 
    240       CASE ( 1 ) 
    241          CALL mppsend( 3, zt3ns(1,1,1,1,1,1), imigr, noso, ml_req1 ) 
    242          CALL mpprecv( 4, zt3sn(1,1,1,1,1,2), imigr, noso ) 
    243          IF(l_isend)   CALL mpi_wait(ml_req1, ml_stat, ml_err ) 
    244       END SELECT 
     256      IF (ncom_stp <= ( nit000 + 1 ) .or. mod(ncom_stp,nn_comm_mod) == 0 ) THEN 
     257  
     258         SELECT CASE ( nbondj ) 
     259         CASE ( -1 ) 
     260            CALL mppsend( 4, zt3sn(1,1,1,1,1,1), imigr, nono, ml_req1 ) 
     261            CALL mpprecv( 3, zt3ns(1,1,1,1,1,2), imigr, nono ) 
     262            IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err ) 
     263         CASE ( 0 ) 
     264            CALL mppsend( 3, zt3ns(1,1,1,1,1,1), imigr, noso, ml_req1 ) 
     265            CALL mppsend( 4, zt3sn(1,1,1,1,1,1), imigr, nono, ml_req2 ) 
     266            CALL mpprecv( 3, zt3ns(1,1,1,1,1,2), imigr, nono ) 
     267            CALL mpprecv( 4, zt3sn(1,1,1,1,1,2), imigr, noso ) 
     268            IF(l_isend)   CALL mpi_wait(ml_req1, ml_stat, ml_err ) 
     269            IF(l_isend)   CALL mpi_wait(ml_req2, ml_stat, ml_err ) 
     270         CASE ( 1 ) 
     271            CALL mppsend( 3, zt3ns(1,1,1,1,1,1), imigr, noso, ml_req1 ) 
     272            CALL mpprecv( 4, zt3sn(1,1,1,1,1,2), imigr, noso ) 
     273            IF(l_isend)   CALL mpi_wait(ml_req1, ml_stat, ml_err ) 
     274         END SELECT 
     275         ! imbalance measurement 
     276         CALL tic_tac(.FALSE.) 
     277         ! 
     278      END IF 
    245279      ! 
    246280      !                           ! Write Dirichlet lateral conditions 
Note: See TracChangeset for help on using the changeset viewer.