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

dev EP-RMA : MPI_Win_allocate

Location:
XIOS/dev/branch_openmp/extern/ep_dev
Files:
1 added
1 deleted
7 edited

Legend:

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

    r1383 r1388  
    255255} 
    256256 
    257 MPI_Info to_mpi_info(void* info) 
    258 { 
    259   return *(static_cast< MPI_Info* >(info)); 
     257MPI_Info to_mpi_info(ep_lib::MPI_Info info) 
     258{ 
     259  return *(static_cast< MPI_Info* >(info.mpi_info)); 
    260260} 
    261261 
  • XIOS/dev/branch_openmp/extern/ep_dev/ep_lib.hpp

    r1381 r1388  
    6969  int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr); 
    7070   
    71   int MPI_Alloc_mem(unsigned long size, MPI_Info info, void *baseptr); 
     71  //int MPI_Alloc_mem(unsigned long size, MPI_Info info, void *baseptr); 
    7272 
    7373 
  • XIOS/dev/branch_openmp/extern/ep_dev/ep_lib_win.hpp

    r1385 r1388  
    2323                         int result_count, MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp, 
    2424                         int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win); 
    25  
     25   
     26  int MPI_Win_allocate (MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, void *baseptr, MPI_Win *win); 
    2627} 
    2728 
  • XIOS/dev/branch_openmp/extern/ep_dev/ep_mpi.hpp

    r1383 r1388  
    88MPI_Comm     to_mpi_comm(void* comm); 
    99MPI_Message  to_mpi_message(void* message); 
    10 MPI_Info     to_mpi_info(void* info); 
     10MPI_Info     to_mpi_info(ep_lib::MPI_Info info); 
    1111MPI_Win      to_mpi_win(void* win); 
    1212MPI_Aint     to_mpi_aint(ep_lib::MPI_Aint aint); 
  • XIOS/dev/branch_openmp/extern/ep_dev/ep_type.hpp

    r1385 r1388  
    277277    public: 
    278278      bool is_ep; 
    279       void* mpi_win[12]; // client side 
    280279      MPI_Comm comm; 
    281280 
    282       void* server_win[12]; 
     281      void* server_win[16]; 
    283282      void* client_win; 
     283      void* null_win[16]; 
    284284  }; 
    285285 
  • 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    } 
  • XIOS/dev/branch_openmp/extern/ep_dev/main.cpp

    r1385 r1388  
    637637  { 
    638638    printf("Proc %d is client\n", mpi_rank); 
    639     num_threads = 2; 
     639    num_threads = 2+mpi_rank; 
    640640  } 
    641641  else 
     
    730730                         1, MPI_INT, MPI_SUM, ep_win); 
    731731    } 
    732  
    733      
     732     
     733    MPI_Win_fence(0, ep_win); 
     734 
     735    MPI_Win ep_win_allocated; 
     736    int* baseptr = new int[10]; 
     737    MPI_Aint base_size = 4; 
     738 
     739    MPI_Win_allocate (base_size, sizeof(int), info, comm, baseptr, &ep_win_allocated); 
     740 
     741    MPI_Win_fence(0, ep_win_allocated); 
     742 
     743    MPI_Win_free(&ep_win_allocated); 
     744    delete[] baseptr; 
     745 
    734746    MPI_Win_free(&ep_win); 
    735747    printf("rank = %d, buf = %d, local_buf = %d, result_buf = %d\n", rank, buf, local_buf, result_buf); 
Note: See TracChangeset for help on using the changeset viewer.