Changeset 1209


Ignore:
Timestamp:
07/11/17 17:57:38 (4 years ago)
Author:
yushan
Message:

bug corrected. happened when certain threads send 0 elements in the allgatherv call

Location:
XIOS/dev/branch_openmp
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_openmp/bld.cfg

    r1203 r1209  
    3434#bld::target generate_fortran_interface.exe  
    3535#bld::target xios_server.exe  
    36 bld::target test_remap.exe 
    3736#bld::target test_regular.exe 
    3837#bld::target test_expand_domain.exe 
    39 #bld::target test_new_features.exe test_unstruct_complete.exe  
    40 bld::target test_omp.exe test_complete_omp.exe test_remap_omp.exe test_unstruct_omp.exe 
    41 #bld::target test_client.exe test_complete.exe #test_xios2_cmip6.exe 
     38#bld::target test_new_features.exe  
     39#bld::target test_unstruct_complete.exe  
     40bld::target test_omp.exe  
     41bld::target test_complete_omp.exe  
     42bld::target test_remap_omp.exe  
     43bld::target test_unstruct_omp.exe 
     44bld::target test_netcdf_omp.exe 
     45#bld::target test_client.exe  
     46#bld::target test_complete.exe 
     47#bld::target test_remap.exe 
     48#bld::target test_unstruct.exe 
     49#bld::target test_xios2_cmip6.exe 
    4250#bld::target test_connectivity_expand.exe 
    4351#bld::target toy_cmip6.exe 
  • XIOS/dev/branch_openmp/extern/src_ep_dev/ep_gatherv.cpp

    r1203 r1209  
    7070    } 
    7171 
    72     for(int j=0; j<count; j+=BUFFER_SIZE) 
     72    for(int j=0; count!=0? j<count: j<count+1; j+=BUFFER_SIZE) 
    7373    { 
    7474      for(int k=1; k<num_ep; k++) 
     
    7878          #pragma omp critical (write_to_buffer) 
    7979          { 
    80             copy(send_buf+j, send_buf + min(BUFFER_SIZE, count-j) , buffer); 
     80            if(count!=0) copy(send_buf+j, send_buf + min(BUFFER_SIZE, count-j) , buffer); 
    8181            #pragma omp flush 
    8282          } 
     
    114114    } 
    115115 
    116     for(int j=0; j<count; j+=BUFFER_SIZE) 
     116    for(int j=0; count!=0? j<count: j<count+1; j+=BUFFER_SIZE) 
    117117    { 
    118118      for(int k=1; k<num_ep; k++) 
     
    122122          #pragma omp critical (write_to_buffer) 
    123123          { 
    124             copy(send_buf+j, send_buf + min(BUFFER_SIZE, count-j) , buffer); 
     124            if(count!=0) copy(send_buf+j, send_buf + min(BUFFER_SIZE, count-j) , buffer); 
    125125            #pragma omp flush 
    126126          } 
     
    158158    } 
    159159 
    160     for(int j=0; j<count; j+=BUFFER_SIZE) 
     160    for(int j=0; count!=0? j<count: j<count+1; j+=BUFFER_SIZE) 
    161161    { 
    162162      for(int k=1; k<num_ep; k++) 
     
    166166          #pragma omp critical (write_to_buffer) 
    167167          { 
    168             copy(send_buf+j, send_buf + min(BUFFER_SIZE, count-j) , buffer); 
     168            if(count!=0) copy(send_buf+j, send_buf + min(BUFFER_SIZE, count-j) , buffer); 
    169169            #pragma omp flush 
    170170          } 
     
    202202    } 
    203203 
    204     for(int j=0; j<count; j+=BUFFER_SIZE) 
     204    for(int j=0; count!=0? j<count: j<count+1; j+=BUFFER_SIZE) 
    205205    { 
    206206      for(int k=1; k<num_ep; k++) 
     
    210210          #pragma omp critical (write_to_buffer) 
    211211          { 
    212             copy(send_buf+j, send_buf + min(BUFFER_SIZE, count-j) , buffer); 
     212            if(count!=0)copy(send_buf+j, send_buf + min(BUFFER_SIZE, count-j) , buffer); 
    213213            #pragma omp flush 
    214214          } 
     
    246246    } 
    247247 
    248     for(int j=0; j<count; j+=BUFFER_SIZE) 
     248    for(int j=0; count!=0? j<count: j<count+1; j+=BUFFER_SIZE) 
    249249    { 
    250250      for(int k=1; k<num_ep; k++) 
     
    254254          #pragma omp critical (write_to_buffer) 
    255255          { 
    256             copy(send_buf+j, send_buf + min(BUFFER_SIZE, count-j) , buffer); 
     256            if(count!=0) copy(send_buf+j, send_buf + min(BUFFER_SIZE, count-j) , buffer); 
    257257            #pragma omp flush 
    258258          } 
     
    290290    } 
    291291 
    292     for(int j=0; j<count; j+=BUFFER_SIZE) 
     292    for(int j=0; count!=0? j<count: j<count+1; j+=BUFFER_SIZE) 
    293293    { 
    294294      for(int k=1; k<num_ep; k++) 
     
    298298          #pragma omp critical (write_to_buffer) 
    299299          { 
    300             copy(send_buf+j, send_buf + min(BUFFER_SIZE, count-j) , buffer); 
     300            if(count!=0) copy(send_buf+j, send_buf + min(BUFFER_SIZE, count-j) , buffer); 
    301301            #pragma omp flush 
    302302          } 
     
    520520    num_ep = comm.ep_comm_ptr->size_rank_info[1].second; 
    521521    mpi_size = comm.ep_comm_ptr->size_rank_info[2].second; 
    522  
    523     //printf("size of recvbuf = %lu\n", sizeof(recvbuf)); 
    524     //printf("size of (char*)recvbuf = %lu\n", sizeof((char*)recvbuf)); 
    525522     
    526     if(ep_size == mpi_size)  
    527       return ::MPI_Allgatherv(sendbuf, sendcount, static_cast< ::MPI_Datatype>(datatype), recvbuf, recvcounts, displs, 
    528                               static_cast< ::MPI_Datatype>(datatype), static_cast< ::MPI_Comm>(comm.mpi_comm)); 
    529     
    530523 
    531524    int recv_plus_displs[ep_size]; 
  • XIOS/dev/branch_openmp/inputs/Unstruct/iodef.xml

    r1203 r1209  
    1515<!--        <field field_ref="field_A_expand" name="field"/> --> 
    1616        <field field_ref="field_A_srf" name="field_A"/> 
    17         <field field_ref="field_A_srf" name="field_rect" grid_ref="grid_rect" enabled=".FALSE." /> 
     17        <field field_ref="field_A_srf" name="field_rect" grid_ref="grid_rect" enabled=".TRUE." /> 
    1818        <field field_ref="field_A_srf" name="field_rect2" grid_ref="grid_rect2" enabled=".TRUE." /> 
    1919        <field field_ref="field_A_srf" name="field_rect3" grid_ref="grid_rect3" enabled=".TRUE."/> 
     
    4040     </domain> 
    4141 
    42      <domain id="dst_domain_regular_pole" ni_glo="90" nj_glo="45" type="rectilinear"> 
     42     <domain id="dst_domain_regular_pole" ni_glo="80" nj_glo="40" type="rectilinear"> 
    4343       <generate_rectilinear_domain id="domain_regular_pole"/> 
    4444       <interpolate_domain write_weight="false" order="1" renormalize="true"/>        
     
    5353       <generate_rectilinear_domain id="domain_regular_pole3"/> 
    5454       <interpolate_domain write_weight="false" order="1" renormalize="true"/>        
    55        <zoom_domain ibegin="0" ni="65" jbegin="0" nj="65" />  
     55       <zoom_domain ibegin="0" ni="70" jbegin="0" nj="70" />  
    5656     </domain> 
    5757 
  • XIOS/dev/branch_openmp/src/client_client_dht_template_impl.hpp

    r1203 r1209  
    105105  int clientRank; 
    106106  MPI_Comm_rank(commLevel,&clientRank); 
    107   ep_lib::MPI_Barrier(commLevel); 
     107  //ep_lib::MPI_Barrier(commLevel); 
    108108  int groupRankBegin = this->getGroupBegin()[level]; 
    109109  int nbClient = this->getNbInGroup()[level]; 
     
    434434  MPI_Comm_rank(commLevel,&clientRank); 
    435435  computeSendRecvRank(level, clientRank); 
    436   ep_lib::MPI_Barrier(commLevel); 
     436  //ep_lib::MPI_Barrier(commLevel); 
    437437 
    438438  int groupRankBegin = this->getGroupBegin()[level]; 
  • XIOS/dev/branch_openmp/src/node/field.cpp

    r1205 r1209  
    2626namespace xios{ 
    2727 
    28    /// ////////////////////// Définitions ////////////////////// /// 
     28   /// ////////////////////// Dfinitions ////////////////////// /// 
    2929 
    3030   CField::CField(void) 
     
    716716     if (context->hasClient) 
    717717     { 
    718        printf("proc %d begein transformation\n", myRank); 
    719718       solveTransformedGrid(); 
    720        printf("proc %d end transformation\n", myRank); 
    721        MPI_Barrier(context->client->intraComm); 
    722719     } 
    723720 
  • XIOS/dev/branch_openmp/src/test/test_unstruct_omp.f90

    r1203 r1209  
    5555  if(mpi_rank < mpi_size-2) then 
    5656 
    57   !$omp parallel default(private) firstprivate(dtime) 
     57  !$omp parallel default(firstprivate) firstprivate(dtime) 
    5858 
    5959  CALL xios_initialize(id,return_comm=comm) 
     
    7979  ALLOCATE(field_A_glo(ncell_glo,llm)) 
    8080  ALLOCATE(mask_glo(ncell_glo)) 
     81 
     82  lon_glo(:) = 0 
     83  lat_glo(:) = 0 
     84  bounds_lon_glo(:,:) = 0 
     85  bounds_lat_glo(:,:) = 0 
     86  i_index_glo(:) = 0 
     87  field_A_glo(:,:) = 0 
     88  mask_glo(:) = 0 
    8189 
    8290  ind=0 
     
    181189  ALLOCATE(mask(ncell)) 
    182190  ALLOCATE(n_local(ncell)) 
     191  
     192  i_index(:)=0 
     193  lon(:)=0 
     194  lat(:)=0 
     195  bounds_lon(:,:)=0 
     196  bounds_lat(:,:)=0 
     197  field_A_srf(:,:)=0 
     198  mask(:)=0 
     199  n_local(:)=0 
     200 
    183201  ncell=0 
    184202  data_n_index=0 
     
    203221  ALLOCATE(field_A_compressed(data_n_index,llm)) 
    204222  ALLOCATE(data_i_index(data_n_index)) 
     223  field_A_compressed(:,:)=0 
     224  data_i_index(:)=0 
     225 
     226 
    205227  data_n_index=0 
    206228  DO ind=1,ncell 
Note: See TracChangeset for help on using the changeset viewer.