Ignore:
Timestamp:
02/09/15 20:18:34 (9 years ago)
Author:
ymipsl
Message:

Merge recent developments from saturn branch onto trunk.

  • lmdz generic physics interface
  • performance improvment on mix mpi/openmp
  • asynchrone and overlaping communication
  • best domain distribution between process and threads
  • ....

This version is compatible with the actual saturn version and the both branches are considered merged on dynamico component.

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/trunk/src/omp_para.F90

    r324 r327  
    6868  IMPLICIT NONE 
    6969  LOGICAL, INTENT(IN) :: is_mpi_master 
    70   INTEGER :: ll_nb,i 
     70  INTEGER :: ll_nb,i,llb,lle 
    7171 
    7272#ifdef CPP_USING_OMP 
     
    7777 
    7878  IF (using_openmp) THEN     
    79 !$OMP PARALLEL PRIVATE(ll_nb,i) 
     79!$OMP PARALLEL PRIVATE(ll_nb,i,llb,lle) 
    8080   
    8181!$OMP MASTER 
     
    123123    IF (omp_level_rank==omp_level_size-1) is_omp_last_level=.TRUE. 
    124124     
    125     ll_end=0 
     125    lle=0 
     126     
    126127    DO i=0,omp_level_rank 
    127       ll_begin=ll_end+1 
     128      llb=lle+1 
    128129      ll_nb=llm/omp_level_size 
    129130      IF (MOD(llm,omp_level_size)>i) ll_nb=ll_nb+1 
    130       ll_end=ll_begin+ll_nb-1 
     131      lle=llb+ll_nb-1 
    131132    ENDDO 
     133    ll_begin=llb 
     134    ll_end=lle 
    132135     
    133136    ll_beginp1=ll_begin 
     
    160163 
    161164   ELSE 
    162      is_master=is_mpi_master 
    163165     omp_size=1 
    164166     omp_level_size=1 
     
    198200  END SUBROUTINE init_omp_para 
    199201 
     202  SUBROUTINE distrib_level(size,lbegin,lend) 
     203  IMPLICIT NONE 
     204    INTEGER,INTENT(IN)  :: size   
     205    INTEGER,INTENT(OUT) :: lbegin   
     206    INTEGER,INTENT(OUT) :: lend   
     207    INTEGER :: div,rest 
     208     
     209    div=size/omp_level_size 
     210    rest=MOD(size,omp_level_size) 
     211    IF (omp_level_rank<rest) THEN 
     212      lbegin=(div+1)*omp_level_rank+1 
     213      lend=lbegin+div 
     214    ELSE 
     215      lbegin=(div+1)*rest + (omp_level_rank-rest)*div+1 
     216      lend=lbegin+div-1 
     217    ENDIF 
     218  END SUBROUTINE distrib_level 
     219 
    200220 
    201221  SUBROUTINE switch_omp_distrib_level 
Note: See TracChangeset for help on using the changeset viewer.