source: XIOS/dev/dev_trunk_omp/extern/src_ep_dev/ep_get.cpp @ 1646

Last change on this file since 1646 was 1646, checked in by yushan, 5 years ago

branch merged with trunk @1645. arch file (ep&mpi) added for ADA

File size: 2.4 KB
Line 
1#ifdef _usingEP
2#include "ep_lib.hpp"
3#include <mpi.h>
4#include "ep_declaration.hpp"
5#include "ep_mpi.hpp"
6
7using namespace std;
8
9namespace ep_lib
10{
11
12        int MPI_Get(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, 
13                  int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win)
14  {
15    int target_mpi_rank   = win->comm->ep_rank_map->at(target_rank).second;
16    int target_local_rank = win->comm->ep_rank_map->at(target_rank).first;
17    int num_ep = win->comm->ep_comm_ptr->size_rank_info[1].second;
18    if(num_ep==1)
19      return  ::MPI_Get(origin_addr, origin_count, to_mpi_type(origin_datatype), target_mpi_rank, to_mpi_aint(target_disp), target_count, to_mpi_type(target_datatype), 
20                       to_mpi_win(win->server_win[target_local_rank]));
21
22    else
23        return  ::MPI_Get(origin_addr, origin_count, to_mpi_type(origin_datatype), target_mpi_rank, to_mpi_aint(target_disp), target_count, to_mpi_type(target_datatype), 
24                       to_mpi_win(win->client_win));
25  }
26
27  int MPI_Rget(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, 
28              int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win, MPI_Request *request)
29  {
30    int target_mpi_rank   = win->comm->ep_rank_map->at(target_rank).second;
31    int target_local_rank = win->comm->ep_rank_map->at(target_rank).first;
32    int num_ep = win->comm->ep_comm_ptr->size_rank_info[1].second;
33
34    ::MPI_Request mpi_request;
35    if(num_ep==1)
36    {
37      int return_value = ::MPI_Rget(origin_addr, origin_count, to_mpi_type(origin_datatype), target_mpi_rank, to_mpi_aint(target_disp), target_count, to_mpi_type(target_datatype), 
38                         to_mpi_win(win->server_win[target_local_rank]), &mpi_request);
39
40      (*request)->mpi_request = new ::MPI_Request(mpi_request);
41
42      (*request)->ep_datatype = origin_datatype;
43      (*request)->type = 1;
44      return return_value;
45    }
46    else
47    {
48      int return_value = ::MPI_Rget(origin_addr, origin_count, to_mpi_type(origin_datatype), target_mpi_rank, to_mpi_aint(target_disp), target_count, to_mpi_type(target_datatype), 
49                         to_mpi_win(win->client_win), &mpi_request);
50
51      (*request)->mpi_request = new ::MPI_Request(mpi_request);
52
53      (*request)->ep_datatype = origin_datatype;
54      (*request)->type = 1;
55      return return_value;
56    }
57  }
58
59}
60#endif
Note: See TracBrowser for help on using the repository browser.