Ignore:
Timestamp:
01/09/14 09:56:11 (10 years ago)
Author:
ymipsl
Message:

Add new openMP parallelism based on distribution of domains on threads. There is no more limitation of number of threads by MPI process.

YM

File:
1 edited

Legend:

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

    r174 r186  
    11MODULE dimensions 
    22 
    3     INTEGER :: iim 
    4     INTEGER :: jjm 
    5     INTEGER :: ii_begin 
    6     INTEGER :: jj_begin 
    7     INTEGER :: ii_end 
    8     INTEGER :: jj_end 
    9     INTEGER :: ii_nb 
    10     INTEGER :: jj_nb 
    11     INTEGER :: ij_begin 
    12     INTEGER :: ij_end 
    13     INTEGER :: ij_begin_ext 
    14     INTEGER :: ij_end_ext 
     3    INTEGER,SAVE :: iim 
     4!$OMP THREADPRIVATE(iim) 
     5    INTEGER,SAVE :: jjm 
     6!$OMP THREADPRIVATE(jjm) 
     7    INTEGER,SAVE :: ii_begin 
     8!$OMP THREADPRIVATE(ii_begin) 
     9    INTEGER,SAVE :: jj_begin 
     10!$OMP THREADPRIVATE(jj_begin) 
     11    INTEGER,SAVE :: ii_end 
     12!$OMP THREADPRIVATE(ii_end) 
     13    INTEGER,SAVE :: jj_end 
     14!$OMP THREADPRIVATE(jj_end) 
     15    INTEGER,SAVE :: ii_nb 
     16!$OMP THREADPRIVATE(ii_nb) 
     17    INTEGER,SAVE :: jj_nb 
     18!$OMP THREADPRIVATE(jj_nb) 
     19    INTEGER,SAVE :: ij_begin 
     20!$OMP THREADPRIVATE(ij_begin) 
     21    INTEGER,SAVE :: ij_end 
     22!$OMP THREADPRIVATE(ij_end) 
     23    INTEGER,SAVE :: ij_begin_ext 
     24!$OMP THREADPRIVATE(ij_begin_ext) 
     25    INTEGER,SAVE :: ij_end_ext 
     26!$OMP THREADPRIVATE(ij_end_ext) 
    1527         
    16     INTEGER :: t_right 
    17     INTEGER :: t_rup 
    18     INTEGER :: t_lup 
    19     INTEGER :: t_left 
    20     INTEGER :: t_ldown 
    21     INTEGER :: t_rdown 
     28    INTEGER,SAVE :: t_right 
     29!$OMP THREADPRIVATE(t_right) 
     30    INTEGER,SAVE :: t_rup 
     31!$OMP THREADPRIVATE(t_rup) 
     32    INTEGER,SAVE :: t_lup 
     33!$OMP THREADPRIVATE(t_lup) 
     34    INTEGER,SAVE :: t_left 
     35!$OMP THREADPRIVATE(t_left) 
     36    INTEGER,SAVE :: t_ldown 
     37!$OMP THREADPRIVATE(t_ldown) 
     38    INTEGER,SAVE :: t_rdown 
     39!$OMP THREADPRIVATE(t_rdown) 
    2240 
    23     INTEGER :: u_right 
    24     INTEGER :: u_rup 
    25     INTEGER :: u_lup 
    26     INTEGER :: u_left 
    27     INTEGER :: u_ldown 
    28     INTEGER :: u_rdown 
     41    INTEGER,SAVE :: u_right 
     42!$OMP THREADPRIVATE(u_right) 
     43    INTEGER,SAVE :: u_rup 
     44!$OMP THREADPRIVATE(u_rup) 
     45    INTEGER,SAVE :: u_lup 
     46!$OMP THREADPRIVATE(u_lup) 
     47    INTEGER,SAVE :: u_left 
     48!$OMP THREADPRIVATE(u_left) 
     49    INTEGER,SAVE :: u_ldown 
     50!$OMP THREADPRIVATE(u_ldown) 
     51    INTEGER,SAVE :: u_rdown 
     52!$OMP THREADPRIVATE(u_rdown) 
    2953 
    30     INTEGER :: z_rup 
    31     INTEGER :: z_up 
    32     INTEGER :: z_lup 
    33     INTEGER :: z_ldown 
    34     INTEGER :: z_down 
    35     INTEGER :: z_rdown 
     54    INTEGER,SAVE :: z_rup 
     55!$OMP THREADPRIVATE(z_rup) 
     56    INTEGER,SAVE :: z_up 
     57!$OMP THREADPRIVATE(z_up) 
     58    INTEGER,SAVE :: z_lup 
     59!$OMP THREADPRIVATE(z_lup) 
     60    INTEGER,SAVE :: z_ldown 
     61!$OMP THREADPRIVATE(z_ldown) 
     62    INTEGER,SAVE :: z_down 
     63!$OMP THREADPRIVATE(z_down) 
     64    INTEGER,SAVE :: z_rdown 
     65!$OMP THREADPRIVATE(z_rdown) 
    3666 
    37     INTEGER :: t_pos(6) 
    38     INTEGER :: u_pos(6) 
    39     INTEGER :: z_pos(6) 
     67    INTEGER,SAVE :: t_pos(6) 
     68!$OMP THREADPRIVATE(t_pos) 
     69    INTEGER,SAVE :: u_pos(6) 
     70!$OMP THREADPRIVATE(u_pos) 
     71    INTEGER,SAVE :: z_pos(6) 
     72!$OMP THREADPRIVATE(z_pos) 
    4073         
    4174CONTAINS 
     
    4881    TYPE(t_domain),POINTER :: d 
    4982     
    50      
    51 !$OMP MASTER 
    5283    d=>domain(ind) 
    5384      
     
    91122     z_pos(:)=d%z_pos(:) 
    92123 
    93 !$OMP END MASTER      
    94 !$OMP BARRIER 
    95124   END SUBROUTINE swap_dimensions 
    96125    
Note: See TracChangeset for help on using the changeset viewer.