Ignore:
Timestamp:
09/16/16 15:33:42 (8 years ago)
Author:
ymipsl
Message:

MPI transfer :

thread_serialized and thread_multiple is now working correctly when omp_level_size > 1

YM

File:
1 edited

Legend:

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

    r392 r478  
    11211121    INTEGER :: offset,msize,rank 
    11221122    INTEGER :: lbegin, lend 
     1123    INTEGER :: max_req 
    11231124 
    11241125!    CALL trace_start("send_message_mpi") 
     
    12261227       
    12271228      ELSE  IF (field(1)%ndim==3) THEN 
    1228        
     1229        max_req=0 
     1230        DO ind=1,ndomain 
     1231          req=>message%request(ind) 
     1232          IF (req%nsend>max_req) max_req=req%nsend 
     1233        ENDDO 
     1234               
    12291235        DO ind=1,ndomain 
    12301236          IF (.NOT. assigned_domain(ind) ) CYCLE 
     
    12561262              CALL trace_end("copy_to_buffer") 
    12571263 
     1264              IF (mpi_threading_mode==MPI_THREAD_SERIALIZED.OR.mpi_threading_mode==MPI_THREAD_MULTIPLE .AND. omp_level_size>1) THEN 
     1265                !$OMP BARRIER 
     1266              ENDIF 
     1267               
    12581268              IF (is_omp_level_master) THEN 
    12591269                IF (mpi_threading_mode==MPI_THREAD_SERIALIZED) THEN 
     
    12671277                ENDIF 
    12681278              ENDIF 
     1279            ELSE 
     1280              IF (mpi_threading_mode==MPI_THREAD_SERIALIZED.OR.mpi_threading_mode==MPI_THREAD_MULTIPLE .AND. omp_level_size>1) THEN 
     1281                !$OMP BARRIER 
     1282              ENDIF 
    12691283            ENDIF 
    12701284          ENDDO 
     1285 
     1286          IF (mpi_threading_mode==MPI_THREAD_SERIALIZED.OR.mpi_threading_mode==MPI_THREAD_MULTIPLE .AND. omp_level_size>1) THEN 
     1287            DO isend=req%nsend+1,max_req 
     1288              !$OMP BARRIER 
     1289            ENDDO 
     1290          ENDIF 
     1291 
    12711292        ENDDO 
    12721293          
     
    13171338 
    13181339      ELSE  IF (field(1)%ndim==4) THEN 
     1340 
     1341        max_req=0 
     1342        DO ind=1,ndomain 
     1343          req=>message%request(ind) 
     1344          IF (req%nsend>max_req) max_req=req%nsend 
     1345        ENDDO 
    13191346     
    13201347        DO ind=1,ndomain 
     
    13491376              ENDDO 
    13501377              CALL trace_end("copy_to_buffer") 
     1378 
     1379              IF (mpi_threading_mode==MPI_THREAD_SERIALIZED.OR.mpi_threading_mode==MPI_THREAD_MULTIPLE .AND. omp_level_size>1) THEN 
     1380                !$OMP BARRIER 
     1381              ENDIF 
    13511382 
    13521383              IF (is_omp_level_master) THEN 
     
    13611392                ENDIF 
    13621393              ENDIF 
    1363  
     1394            ELSE 
     1395              IF (mpi_threading_mode==MPI_THREAD_SERIALIZED.OR.mpi_threading_mode==MPI_THREAD_MULTIPLE .AND. omp_level_size>1) THEN 
     1396                !$OMP BARRIER 
     1397              ENDIF 
    13641398            ENDIF 
    13651399          ENDDO 
     1400           
     1401          IF (mpi_threading_mode==MPI_THREAD_SERIALIZED.OR.mpi_threading_mode==MPI_THREAD_MULTIPLE .AND. omp_level_size>1) THEN 
     1402            DO isend=req%nsend+1,max_req 
     1403              !$OMP BARRIER 
     1404            ENDDO 
     1405          ENDIF 
     1406 
    13661407        ENDDO 
    13671408         
Note: See TracChangeset for help on using the changeset viewer.