Changeset 1503 for XIOS/dev/branch_openmp/extern/ep_dev/ep_recv.cpp
- Timestamp:
- 05/28/18 17:28:07 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/extern/ep_dev/ep_recv.cpp
r1500 r1503 19 19 namespace ep_lib 20 20 { 21 22 21 23 22 int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm, MPI_Status *status) 24 23 { 25 24 26 if(!comm->is_ep) 27 { 28 ::MPI_Status mpi_status; 29 ::MPI_Recv(buf, count, to_mpi_type(datatype), src<0? MPI_ANY_SOURCE : src, tag<0? MPI_ANY_TAG: tag, to_mpi_comm(comm->mpi_comm), &mpi_status); 30 31 status->ep_src = src; 32 status->ep_tag = tag; 33 status->ep_datatype = datatype; 34 35 return 0; 36 } 37 38 //Message_Check(comm); 25 if(!comm->is_ep) return MPI_Recv_mpi(buf, count, datatype, src, tag, comm, status); 26 27 Debug("MPI_Recv with EP"); 39 28 40 29 MPI_Request request; … … 45 34 } 46 35 47 36 48 37 49 38 50 39 int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm, MPI_Request *request) 51 40 { 52 41 if(!comm->is_ep) return MPI_Irecv_mpi(buf, count, datatype, src, tag, comm, request); 42 53 43 Debug("MPI_Irecv with EP"); 54 44 int dest_rank; 55 45 MPI_Comm_rank(comm, &dest_rank); 56 46 57 58 if(!comm->is_ep) 59 { 60 ::MPI_Request mpi_request; 61 ::MPI_Irecv(buf, count, to_mpi_type(datatype), src<0? MPI_ANY_SOURCE : src, tag<0? MPI_ANY_TAG: tag, to_mpi_comm(comm->mpi_comm), &mpi_request); 62 63 (*request)->mpi_request = new ::MPI_Request(mpi_request); 64 (*request)->ep_src = src; 65 (*request)->ep_datatype = datatype; 66 (*request)->ep_tag = tag; 67 } 68 69 *request = new ep_request; 70 printf("new %p : in ep_lib::MPI_Irecv, *request = new ep_request\n", (*request)); 47 *request = new ep_request; 48 memcheck("new " << *request <<" : in ep_lib::MPI_Irecv, *request = new ep_request"); 71 49 72 50 (*request)->mpi_request = new ::MPI_Request; 73 printf("new %p : in ep_lib::MPI_Irecv, (*request)->mpi_request = new ::MPI_Request\n", (*request)->mpi_request);51 memcheck("new " << (*request)->mpi_request << " : in ep_lib::MPI_Irecv, (*request)->mpi_request = new ::MPI_Request"); 74 52 75 53 (*request)->buf = buf; … … 82 60 (*request)->ep_tag = tag; 83 61 (*request)->ep_datatype = datatype; 84 85 86 /* With Improbe*/ 62 63 if(EP_PendingRequests == 0 ) EP_PendingRequests = new std::list< MPI_Request* >; 87 64 88 if(EP_PendingRequests == 0 ) 89 { 90 EP_PendingRequests = new std::list< MPI_Request* >; 91 } 92 93 EP_PendingRequests->push_back(request); 65 EP_PendingRequests->push_back(request); 66 int ep_rank = comm->ep_comm_ptr->size_rank_info[0].first; 67 memcheck("EP_PendingRequests["<<ep_rank<<"]->size() = " << EP_PendingRequests->size()); 94 68 95 Request_Check(); 96 97 return 0; 69 return Request_Check(); 98 70 } 99 100 int MPI_Imrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message, MPI_Request *request) 101 { 102 Debug("MPI_Imrecv"); 103 104 (*request)->type = 3; 105 106 ::MPI_Imrecv(buf, count, to_mpi_type(datatype), to_mpi_message_ptr(*message), to_mpi_request_ptr(*request)); 107 108 (*request)->ep_datatype = datatype; 109 (*request)->ep_tag = (*message)->ep_tag; 110 (*request)->ep_src = (*message)->ep_src; 111 112 113 return 0; 114 } 115 116 71 117 72 int MPI_Mrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message, MPI_Status *status) 118 73 { 119 Debug(" EP Mrecv called\n");74 Debug("MPI_Mrecv with MPI/EP"); 120 75 121 ::MPI_Status mpi_status; 122 ::MPI_Mrecv(buf, count, to_mpi_type(datatype), static_cast< ::MPI_Message* >((*message)->mpi_message), &mpi_status); 76 status->mpi_status = new ::MPI_Status; 77 memcheck("new " << status->mpi_status << " : in ep_lib::MPI_Mrecv, status->mpi_status = new ::MPI_Status"); 78 79 ::MPI_Mrecv(buf, count, to_mpi_type(datatype), static_cast< ::MPI_Message* >((*message)->mpi_message), to_mpi_status_ptr(*status)); 123 80 124 status->mpi_status = new ::MPI_Status(mpi_status);81 125 82 status->ep_src = (*message)->ep_src; 126 83 status->ep_datatype = datatype; 127 84 status->ep_tag = (*message)->ep_tag; 128 85 86 memcheck("delete " << (*message)->mpi_message << " : in ep_lib::MPI_Mrecv, delete (*message)->mpi_message"); 129 87 delete (*message)->mpi_message; 130 88 131 //check_sum_recv(buf, count, datatype, message->ep_src, message->ep_tag); 89 #ifdef _check_sum 90 check_sum_recv(buf, count, datatype, message->ep_src, message->ep_tag); 91 #endif 132 92 133 return 0;93 return Request_Check(); 134 94 } 135 95 96 97 int MPI_Imrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message, MPI_Request *request) 98 { 99 Debug("MPI_Imrecv with MPI/EP"); 100 101 (*request)->type = 3; 102 (*request)->ep_datatype = datatype; 103 (*request)->ep_tag = (*message)->ep_tag; 104 (*request)->ep_src = (*message)->ep_src; 105 106 ::MPI_Imrecv(buf, count, to_mpi_type(datatype), to_mpi_message_ptr(*message), to_mpi_request_ptr(*request)); 107 108 memcheck("delete " << (*message)->mpi_message << " : in ep_lib::MPI_Imrecv, delete (*message)->mpi_message"); 109 delete (*message)->mpi_message; 110 111 #ifdef _check_sum 112 check_sum_recv(buf, count, datatype, message->ep_src, message->ep_tag); 113 #endif 114 115 116 return Request_Check(); 117 } 118 119 120 int MPI_Recv_mpi(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm, MPI_Status *status) 121 { 122 Debug("MPI_Recv with MPI"); 123 status->ep_src = src; 124 status->ep_tag = tag; 125 status->ep_datatype = datatype; 126 127 return ::MPI_Recv(buf, count, to_mpi_type(datatype), src<0? MPI_ANY_SOURCE : src, tag<0? MPI_ANY_TAG: tag, to_mpi_comm(comm->mpi_comm), to_mpi_status_ptr(*status)); 128 } 129 130 int MPI_Irecv_mpi(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm, MPI_Request *request) 131 { 132 Debug("MPI_Irecv with MPI"); 133 int dest_rank; 134 MPI_Comm_rank(comm, &dest_rank); 135 136 *request = new ep_request; 137 memcheck("new "<< *request <<" : in ep_lib::MPI_Irecv, *request = new ep_request"); 138 139 (*request)->mpi_request = new ::MPI_Request; 140 memcheck("new "<< (*request)->mpi_request <<" : in ep_lib::MPI_Irecv, (*request)->mpi_request = new ::MPI_Request"); 141 142 (*request)->ep_src = src; 143 (*request)->ep_datatype = datatype; 144 (*request)->type = 2; 145 (*request)->ep_tag = tag; 146 147 return ::MPI_Irecv(buf, count, to_mpi_type(datatype), src<0? MPI_ANY_SOURCE : src, tag<0? MPI_ANY_TAG: tag, to_mpi_comm(comm->mpi_comm), to_mpi_request_ptr(*request)); 148 } 136 149 } 137 150
Note: See TracChangeset
for help on using the changeset viewer.