Changeset 1295 for XIOS/dev/branch_openmp/extern/src_ep_dev/ep_send.cpp
- Timestamp:
- 10/06/17 13:56:33 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/extern/src_ep_dev/ep_send.cpp
r1289 r1295 9 9 #include <mpi.h> 10 10 #include "ep_declaration.hpp" 11 #include "ep_mpi.hpp" 11 12 12 13 … … 17 18 { 18 19 if(!comm.is_ep) 19 { 20 ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm); 21 ::MPI_Send(buf, count, static_cast< ::MPI_Datatype>(datatype), dest, tag, mpi_comm); 22 return 0; 23 } 20 return ::MPI_Send(buf, count, to_mpi_type(datatype), dest, tag, to_mpi_comm(comm.mpi_comm)); 24 21 25 22 MPI_Request request; … … 38 35 if(!comm.is_ep) 39 36 { 40 ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm); 41 ::MPI_Ssend(buf, count, static_cast< ::MPI_Datatype>(datatype), dest, tag, mpi_comm); 42 return 0; 37 return ::MPI_Ssend(buf, count, to_mpi_type(datatype), dest, tag, to_mpi_comm(comm.mpi_comm)); 43 38 } 44 39 … … 51 46 } 52 47 53 int MPI_Bsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) 54 { 55 if(!comm.is_ep) 56 { 57 ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm); 58 ::MPI_Bsend(buf, count, static_cast< ::MPI_Datatype>(datatype), dest, tag, mpi_comm); 59 return 0; 60 } 61 62 MPI_Request request; 63 MPI_Status status; 64 //MPI_Ibsend(buf, count, datatype, dest, tag, comm, &request); 65 MPI_Wait(&request, &status); 66 67 //check_sum_send(buf, count, datatype, dest, tag, comm); 68 69 return 0; 70 } 71 48 72 49 73 50 … … 84 61 { 85 62 ::MPI_Request mpi_request; 86 ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm); 87 ::MPI_Isend(buf, count, static_cast< ::MPI_Datatype> (datatype), dest, tag, mpi_comm, &mpi_request); 63 ::MPI_Isend(buf, count, to_mpi_type(datatype), dest, tag, to_mpi_comm(comm.mpi_comm), &mpi_request); 88 64 89 65 request->mpi_request = mpi_request; … … 104 80 //check_sum_send(buf, count, datatype, dest, tag, comm, 1); 105 81 106 int ep_src_loc = comm.ep_comm_ptr->size_rank_info[1].first;82 int ep_src_loc = comm.ep_comm_ptr->size_rank_info[1].first; 107 83 int ep_dest_loc = comm.ep_comm_ptr->comm_list->rank_map->at(dest).first; 108 int mpi_tag 109 int mpi_dest 84 int mpi_tag = tag_combine(tag, ep_src_loc, ep_dest_loc); 85 int mpi_dest = comm.ep_comm_ptr->comm_list->rank_map->at(dest).second; 110 86 111 87 request->ep_src = src_rank; … … 113 89 request->ep_datatype = datatype; 114 90 115 ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm> (comm.mpi_comm);116 91 ::MPI_Request mpi_request; 117 92 118 ::MPI_Isend(buf, count, static_cast< ::MPI_Datatype>(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request);93 ::MPI_Isend(buf, count, to_mpi_type(datatype), mpi_dest, mpi_tag, to_mpi_comm(comm.mpi_comm), &mpi_request); 119 94 120 95 request->mpi_request = mpi_request; 121 request->type = 1; 96 request->type = 1; // used in wait 122 97 request->comm = comm; 123 98 request->buf = const_cast<void*>(buf); … … 143 118 { 144 119 ::MPI_Request mpi_request; 145 ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm); 146 ::MPI_Issend(buf, count, static_cast< ::MPI_Datatype> (datatype), dest, tag, mpi_comm, &mpi_request); 120 ::MPI_Issend(buf, count, to_mpi_type(datatype), dest, tag, to_mpi_comm(comm.mpi_comm), &mpi_request); 147 121 148 122 request->mpi_request = mpi_request; … … 162 136 //check_sum_send(buf, count, datatype, dest, tag, comm, 1); 163 137 164 int ep_src_loc = comm.ep_comm_ptr->size_rank_info[1].first;138 int ep_src_loc = comm.ep_comm_ptr->size_rank_info[1].first; 165 139 int ep_dest_loc = comm.ep_comm_ptr->comm_list->rank_map->at(dest).first; 166 int mpi_tag 167 int mpi_dest 140 int mpi_tag = tag_combine(tag, ep_src_loc, ep_dest_loc); 141 int mpi_dest = comm.ep_comm_ptr->comm_list->rank_map->at(dest).second; 168 142 169 143 request->ep_src = src_rank; … … 171 145 request->ep_datatype = datatype; 172 146 173 ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm> (comm.mpi_comm);174 147 ::MPI_Request mpi_request; 175 148 176 ::MPI_Issend(buf, count, static_cast< ::MPI_Datatype>(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request);149 ::MPI_Issend(buf, count, to_mpi_type(datatype), mpi_dest, mpi_tag, to_mpi_comm(comm.mpi_comm), &mpi_request); 177 150 178 151 request->mpi_request = mpi_request; 179 request->type = 1; 152 request->type = 1; // used in wait 180 153 request->comm = comm; 181 154 request->buf = NULL; … … 187 160 } 188 161 189 int MPI_Ibsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request)190 {191 Debug("\nMPI_Isend with EP\n");192 int src_rank;193 MPI_Comm_rank(comm, &src_rank);194 195 196 197 if(!comm.is_ep)198 {199 ::MPI_Request mpi_request;200 ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm);201 ::MPI_Ibsend(buf, count, static_cast< ::MPI_Datatype> (datatype), dest, tag, mpi_comm, &mpi_request);202 203 request->mpi_request = mpi_request;204 205 request->ep_src = src_rank;206 request->ep_tag = tag;207 request->ep_datatype = datatype;208 request->type = 1;209 request->comm = comm;210 211 return 0;212 }213 214 if(comm.is_intercomm) return 0;//MPI_Ibsend_intercomm(buf, count, datatype, dest, tag, comm, request);215 216 // EP intracomm217 218 //check_sum_send(buf, count, datatype, dest, tag, comm, 1);219 220 int ep_src_loc = comm.ep_comm_ptr->size_rank_info[1].first;221 int ep_dest_loc = comm.ep_comm_ptr->comm_list->rank_map->at(dest).first;222 int mpi_tag = tag_combine(tag, ep_src_loc, ep_dest_loc);223 int mpi_dest = comm.ep_comm_ptr->comm_list->rank_map->at(dest).second;224 225 request->ep_src = src_rank;226 request->ep_tag = tag;227 request->ep_datatype = datatype;228 229 ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm> (comm.mpi_comm);230 ::MPI_Request mpi_request;231 232 ::MPI_Ibsend(buf, count, static_cast< ::MPI_Datatype>(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request);233 234 request->mpi_request = mpi_request;235 request->type = 1; // used in wait236 request->comm = comm;237 request->buf = const_cast<void*>(buf);238 239 //Message_Check(comm);240 241 return 0;242 }243 162 244 163 … … 256 175 int src_comm_label; 257 176 258 for(int i=0; i<comm.ep_comm_ptr->intercomm->local_rank_map->size(); i++) 259 { 260 if(comm.ep_comm_ptr->intercomm->local_rank_map->at(i).first == src_ep_rank) 261 { 262 src_comm_label = comm.ep_comm_ptr->intercomm->local_rank_map->at(i).second; 263 break; 264 } 265 } 177 src_comm_label = comm.ep_comm_ptr->intercomm->local_rank_map->at(src_ep_rank).second; 178 179 180 266 181 267 182 //Message_Check(comm); … … 276 191 int mpi_tag = tag_combine(tag, ep_src_loc, ep_dest_loc); 277 192 278 ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm); 279 ::MPI_Request mpi_request; 280 281 ::MPI_Isend(buf, count, static_cast< ::MPI_Datatype >(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request); 282 283 request->mpi_request = mpi_request; 284 request->type = 1; // used in wait 193 ::MPI_Request mpi_request; 194 195 ::MPI_Isend(buf, count, to_mpi_type(datatype), mpi_dest, mpi_tag, to_mpi_comm(comm.mpi_comm), &mpi_request); 196 197 request->mpi_request = mpi_request; 198 request->type = 1; // used in wait 285 199 request->comm = comm; 286 200 … … 298 212 int mpi_tag = tag_combine(tag, ep_src_loc, ep_dest_loc); 299 213 300 ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm >(comm.ep_comm_ptr->intercomm->mpi_inter_comm); 301 ::MPI_Request mpi_request; 302 303 ::MPI_Isend(buf, count, static_cast< ::MPI_Datatype >(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request); 304 305 request->mpi_request = mpi_request; 306 request->type = 1; // used in wait 214 ::MPI_Request mpi_request; 215 216 ::MPI_Isend(buf, count, to_mpi_type(datatype), mpi_dest, mpi_tag, to_mpi_comm(comm.ep_comm_ptr->intercomm->mpi_inter_comm), &mpi_request); 217 218 request->mpi_request = mpi_request; 219 request->type = 1; // used in wait 307 220 request->comm = comm; 308 221 … … 349 262 int mpi_tag = tag_combine(tag, ep_src_loc, ep_dest_loc); 350 263 351 ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm); 352 ::MPI_Request mpi_request; 353 354 ::MPI_Issend(buf, count, static_cast< ::MPI_Datatype >(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request); 355 356 request->mpi_request = mpi_request; 357 request->type = 1; // used in wait 264 ::MPI_Request mpi_request; 265 266 ::MPI_Issend(buf, count, to_mpi_type(datatype), mpi_dest, mpi_tag, to_mpi_comm(comm.mpi_comm), &mpi_request); 267 268 request->mpi_request = mpi_request; 269 request->type = 1; // used in wait 358 270 request->comm = comm; 359 271 … … 371 283 int mpi_tag = tag_combine(tag, ep_src_loc, ep_dest_loc); 372 284 373 ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm >(comm.ep_comm_ptr->intercomm->mpi_inter_comm); 374 ::MPI_Request mpi_request; 375 376 ::MPI_Issend(buf, count, static_cast< ::MPI_Datatype >(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request); 377 378 request->mpi_request = mpi_request; 379 request->type = 1; // used in wait 285 ::MPI_Request mpi_request; 286 287 ::MPI_Issend(buf, count, to_mpi_type(datatype), mpi_dest, mpi_tag, to_mpi_comm(comm.ep_comm_ptr->intercomm->mpi_inter_comm), &mpi_request); 288 289 request->mpi_request = mpi_request; 290 request->type = 1; // used in wait 380 291 request->comm = comm; 381 292 … … 389 300 } 390 301 391 int MPI_Ibsend_intercomm(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request)392 {393 printf("MPI_Ibsend with intercomm not yet implemented\n");394 MPI_Abort(comm, 0);395 //check_sum_send(buf, count, datatype, dest, tag, comm, 1);396 397 int dest_remote_ep_rank = comm.ep_comm_ptr->intercomm->remote_rank_map->at(dest).first;398 int dest_remote_comm_label = comm.ep_comm_ptr->intercomm->remote_rank_map->at(dest).second;399 400 int src_ep_rank = comm.ep_comm_ptr->intercomm->size_rank_info[0].first;401 int src_comm_label;402 403 for(int i=0; i<comm.ep_comm_ptr->intercomm->local_rank_map->size(); i++)404 {405 if(comm.ep_comm_ptr->intercomm->local_rank_map->at(i).first == src_ep_rank)406 {407 src_comm_label = comm.ep_comm_ptr->intercomm->local_rank_map->at(i).second;408 break;409 }410 }411 412 //Message_Check(comm);413 414 415 if(dest_remote_comm_label == src_comm_label) // mpi_dest differs416 {417 int inter_src = comm.ep_comm_ptr->intercomm->local_rank_map->at(src_ep_rank).first;418 int ep_src_loc = comm.rank_map->at(inter_src).first;419 int ep_dest_loc = comm.rank_map->at(dest_remote_ep_rank).first;420 int mpi_dest = comm.rank_map->at(dest_remote_ep_rank).second;421 int mpi_tag = tag_combine(tag, ep_src_loc, ep_dest_loc);422 423 ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm);424 ::MPI_Request mpi_request;425 426 ::MPI_Isend(buf, count, static_cast< ::MPI_Datatype >(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request);427 428 request->mpi_request = mpi_request;429 request->type = 1; // used in wait430 request->comm = comm;431 432 request->ep_src = src_ep_rank;433 request->ep_tag = tag;434 request->ep_datatype = datatype;435 }436 437 else // dest_remote_comm_label != src_comm_label438 {439 int inter_src = comm.ep_comm_ptr->intercomm->local_rank_map->at(src_ep_rank).first;440 int ep_src_loc = comm.rank_map->at(inter_src).first;441 int ep_dest_loc = comm.ep_comm_ptr->intercomm->intercomm_rank_map->at(dest_remote_ep_rank).first;442 int mpi_dest = comm.ep_comm_ptr->intercomm->intercomm_rank_map->at(dest_remote_ep_rank).second;443 int mpi_tag = tag_combine(tag, ep_src_loc, ep_dest_loc);444 445 ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm >(comm.ep_comm_ptr->intercomm->mpi_inter_comm);446 ::MPI_Request mpi_request;447 448 ::MPI_Isend(buf, count, static_cast< ::MPI_Datatype >(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request);449 450 request->mpi_request = mpi_request;451 request->type = 1; // used in wait452 request->comm = comm;453 454 request->ep_src = src_ep_rank;455 request->ep_tag = tag;456 request->ep_datatype = datatype;457 }458 459 return 0;460 461 }462 302 } 463 303
Note: See TracChangeset
for help on using the changeset viewer.