Ignore:
Timestamp:
01/10/18 16:16:44 (6 years ago)
Author:
yushan
Message:

dev EP-RMA : MPI_Rput MPI_Rget MPI_Raccumulate MPI_Rget_accumulate (to be tested)

File:
1 edited

Legend:

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

    r1385 r1398  
    2424  } 
    2525 
     26  int MPI_Raccumulate(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype,  
     27                     int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win, MPI_Request *request) 
     28  { 
     29    int target_mpi_rank   = win.comm.rank_map->at(target_rank).second; 
     30    int target_local_rank = win.comm.rank_map->at(target_rank).first; 
     31    int num_ep = win.comm.ep_comm_ptr->size_rank_info[1].second; 
     32    ::MPI_Request mpi_request; 
     33 
     34    if(num_ep==1) 
     35    { 
     36      int return_value = ::MPI_Raccumulate(origin_addr, origin_count, to_mpi_type(origin_datatype), target_mpi_rank, to_mpi_aint(target_disp), target_count, to_mpi_type(target_datatype),  
     37                                   to_mpi_op(op), to_mpi_win(win.server_win[target_local_rank]), &mpi_request); 
     38      request->mpi_request = new ::MPI_Request(mpi_request); 
     39 
     40      request->ep_datatype = origin_datatype; 
     41      request->type = 1; 
     42      return return_value; 
     43    } 
     44 
     45    else 
     46    { 
     47      int return_value = ::MPI_Raccumulate(origin_addr, origin_count, to_mpi_type(origin_datatype), target_mpi_rank, to_mpi_aint(target_disp), target_count, to_mpi_type(target_datatype),  
     48                                   to_mpi_op(op), to_mpi_win(win.client_win), &mpi_request); 
     49      request->mpi_request = new ::MPI_Request(mpi_request); 
     50 
     51      request->ep_datatype = origin_datatype; 
     52      request->type = 1; 
     53      return return_value; 
     54    } 
     55  } 
     56 
     57 
    2658  int MPI_Get_accumulate(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, void *result_addr,  
    2759                         int result_count, MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp, 
     
    3971  } 
    4072 
     73  int MPI_Rget_accumulate(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, void *result_addr,  
     74                         int result_count, MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp, 
     75                         int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win, MPI_Request *request) 
     76  { 
     77    int target_mpi_rank   = win.comm.rank_map->at(target_rank).second; 
     78    int target_local_rank = win.comm.rank_map->at(target_rank).first; 
     79    int num_ep = win.comm.ep_comm_ptr->size_rank_info[1].second; 
     80    ::MPI_Request mpi_request; 
     81    if(num_ep==1) 
     82    { 
     83      int return_value = ::MPI_Rget_accumulate(origin_addr, origin_count, to_mpi_type(origin_datatype), result_addr, result_count, to_mpi_type(result_datatype), target_mpi_rank, to_mpi_aint(target_disp), target_count, 
     84                                      to_mpi_type(target_datatype), to_mpi_op(op), to_mpi_win(win.server_win[target_local_rank]), &mpi_request); 
     85      request->mpi_request = new ::MPI_Request(mpi_request); 
     86 
     87      request->ep_datatype = origin_datatype; 
     88      request->type = 1; 
     89      return return_value; 
     90    } 
     91    else 
     92    { 
     93      int return_value = ::MPI_Rget_accumulate(origin_addr, origin_count, to_mpi_type(origin_datatype), result_addr, result_count, to_mpi_type(result_datatype), target_mpi_rank, to_mpi_aint(target_disp), target_count, 
     94                                      to_mpi_type(target_datatype), to_mpi_op(op), to_mpi_win(win.client_win), &mpi_request); 
     95      request->mpi_request = new ::MPI_Request(mpi_request); 
     96 
     97      request->ep_datatype = origin_datatype; 
     98      request->type = 1; 
     99      return return_value; 
     100    } 
     101  } 
     102 
    41103} 
Note: See TracChangeset for help on using the changeset viewer.