Ignore:
Timestamp:
12/21/17 14:50:18 (6 years ago)
Author:
yushan
Message:

dev EP-RMA : MPI_Win_allocate

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_openmp/extern/ep_dev/ep_win.cpp

    r1383 r1388  
    3535      for(int i=0; i<num_ep_max; i++) 
    3636      { 
    37         ::MPI_Win_create(base, to_mpi_aint(size.mpi_aint), disp_unit, to_mpi_info(info.mpi_info), to_mpi_comm(comm.mpi_comm), static_cast< ::MPI_Win*>(win->server_win[i])); 
     37        ::MPI_Win_create(base, to_mpi_aint(size), disp_unit, to_mpi_info(info), to_mpi_comm(comm.mpi_comm), static_cast< ::MPI_Win*>(win->server_win[i])); 
    3838        win->comm = comm; 
    3939      } 
     
    4343      win->client_win = new ::MPI_Win; 
    4444       
    45       for(int i=0; i<num_ep_max; i++) 
     45      for(int i=0; i<num_ep; i++) 
    4646      { 
    4747        if(rank_loc == i) 
    4848        { 
    4949          printf("Calling MPI_Win_create from client, rank = %d\n", rank); 
    50           ::MPI_Win_create(base, to_mpi_aint(size.mpi_aint), disp_unit, to_mpi_info(info.mpi_info), to_mpi_comm(comm.mpi_comm), static_cast< ::MPI_Win*>(win->client_win));  
     50          ::MPI_Win_create(base, to_mpi_aint(size), disp_unit, to_mpi_info(info), to_mpi_comm(comm.mpi_comm), static_cast< ::MPI_Win*>(win->client_win));  
    5151          win->comm = comm; 
    5252        } 
     
    5454      } 
    5555 
    56       // #pragma omp critical (win_create) 
    57       // { 
    58       //   ::MPI_Win_create(base, to_mpi_aint(size.mpi_aint), disp_unit, to_mpi_info(info.mpi_info), to_mpi_comm(comm.mpi_comm), static_cast< ::MPI_Win*>(win->client_win));  
    59       //   win->comm = comm; 
    60       // } 
     56      if(num_ep_max > num_ep) 
     57      { 
     58 
     59        #pragma omp master 
     60        { 
     61          for(int i=0; i<num_ep_max-num_ep; i++) 
     62          { 
     63            win->null_win[i] = new ::MPI_Win; 
     64            ::MPI_Win_create(NULL, 0, disp_unit, to_mpi_info(info), to_mpi_comm(comm.mpi_comm), static_cast< ::MPI_Win*>(win->null_win[i]));  
     65          }   
     66        }   
     67      } 
     68 
    6169    } 
    6270    return 0; 
     
    9098    else 
    9199    { 
    92       for(int i=0; i<num_ep_max; i++) 
     100      for(int i=0; i<num_ep; i++) 
    93101      { 
    94102        if(rank_loc == i) 
     
    99107        MPI_Barrier_local(win->comm); 
    100108      } 
     109 
     110 
     111      if(num_ep_max > num_ep) 
     112      { 
     113        #pragma omp master 
     114        { 
     115          for(int i=0; i<num_ep_max-num_ep; i++) 
     116          { 
     117            ::MPI_Win_free(static_cast< ::MPI_Win*>(win->null_win[i]));  
     118          }   
     119        }   
     120      } 
     121 
    101122    } 
    102123    return 0; 
     
    126147    else 
    127148    { 
    128       for(int i=0; i<num_ep_max; i++) 
     149      for(int i=0; i<num_ep; i++) 
    129150      { 
    130151        if(rank_loc == i) 
     
    134155        } 
    135156        MPI_Barrier_local(win.comm); 
     157      } 
     158 
     159 
     160      if(num_ep_max > num_ep) 
     161      { 
     162        #pragma omp master 
     163        { 
     164          for(int i=0; i<num_ep_max-num_ep; i++) 
     165          { 
     166            ::MPI_Win_fence(assert, *static_cast< ::MPI_Win*>(win.null_win[i]));  
     167          }   
     168        }   
    136169      } 
    137170    } 
Note: See TracChangeset for help on using the changeset viewer.