#include "ep_lib.hpp" #include #include "ep_declaration.hpp" #include "ep_mpi.hpp" using namespace std; namespace ep_lib { int MPI_Put(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win) { int target_mpi_rank = win->comm->ep_rank_map->at(target_rank).second; int target_local_rank = win->comm->ep_rank_map->at(target_rank).first; int num_ep = win->comm->ep_comm_ptr->size_rank_info[1].second; if(num_ep==1) return ::MPI_Put(origin_addr, origin_count, to_mpi_type(origin_datatype), target_mpi_rank, to_mpi_aint(target_disp), target_count, to_mpi_type(target_datatype), to_mpi_win(win->server_win[target_local_rank])); else return ::MPI_Put(origin_addr, origin_count, to_mpi_type(origin_datatype), target_mpi_rank, to_mpi_aint(target_disp), target_count, to_mpi_type(target_datatype), to_mpi_win(win->client_win)); } int MPI_Rput(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win, MPI_Request *request) { int target_mpi_rank = win->comm->ep_rank_map->at(target_rank).second; int target_local_rank = win->comm->ep_rank_map->at(target_rank).first; int num_ep = win->comm->ep_comm_ptr->size_rank_info[1].second; ::MPI_Request mpi_request; if(num_ep==1) { int return_value = ::MPI_Rput(origin_addr, origin_count, to_mpi_type(origin_datatype), target_mpi_rank, to_mpi_aint(target_disp), target_count, to_mpi_type(target_datatype), to_mpi_win(win->server_win[target_local_rank]), &mpi_request); (*request)->mpi_request = new ::MPI_Request(mpi_request); (*request)->ep_datatype = origin_datatype; (*request)->type = 1; return return_value; } else { int return_value = ::MPI_Rput(origin_addr, origin_count, to_mpi_type(origin_datatype), target_mpi_rank, to_mpi_aint(target_disp), target_count, to_mpi_type(target_datatype), to_mpi_win(win->client_win), &mpi_request); (*request)->mpi_request = new ::MPI_Request(mpi_request); (*request)->ep_datatype = origin_datatype; (*request)->type = 1; return return_value; } } }