Changeset 1642 for XIOS/dev/branch_openmp/extern/remap/src/mpi_routing.cpp
- Timestamp:
- 01/23/19 10:31:44 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/extern/remap/src/mpi_routing.cpp
r1362 r1642 5 5 #include "timerRemap.hpp" 6 6 #include <iostream> 7 using namespace ep_lib;8 7 9 8 namespace sphereRemap { … … 11 10 const int verbose = 0; 12 11 13 CMPIRouting::CMPIRouting( MPI_Comm comm) : communicator(comm)14 { 15 MPI_Comm_rank(comm, &mpiRank);16 MPI_Comm_size(comm, &mpiSize);12 CMPIRouting::CMPIRouting(ep_lib::MPI_Comm comm) : communicator(comm) 13 { 14 ep_lib::MPI_Comm_rank(comm, &mpiRank); 15 ep_lib::MPI_Comm_size(comm, &mpiSize); 17 16 } 18 17 … … 20 19 but message lengths are *known* to receiver */ 21 20 template <typename T> 22 void alltoalls_known(const vector<vector<T> >& send, vector<vector<T> >& recv, const vector<int>& ranks, MPI_Comm communicator)23 { 24 vector< MPI_Request> request(ranks.size() * 2);25 vector< MPI_Status> status(ranks.size() * 2);21 void alltoalls_known(const vector<vector<T> >& send, vector<vector<T> >& recv, const vector<int>& ranks, ep_lib::MPI_Comm communicator) 22 { 23 vector<ep_lib::MPI_Request> request(ranks.size() * 2); 24 vector<ep_lib::MPI_Status> status(ranks.size() * 2); 26 25 27 26 // communicate data … … 29 28 for (int i = 0; i < ranks.size(); i++) 30 29 if (recv[i].size()) 31 MPI_Irecv(&recv[i][0], recv[i].size()*sizeof(T), MPI_CHAR, ranks[i], 0, communicator, &request[nbRequest++]);30 ep_lib::MPI_Irecv(&recv[i][0], recv[i].size()*sizeof(T), EP_CHAR, ranks[i], 0, communicator, &request[nbRequest++]); 32 31 for (int i = 0; i < ranks.size(); i++) 33 32 if (send[i].size()) 34 MPI_Isend((void *) &send[i][0], send[i].size()*sizeof(T), MPI_CHAR, ranks[i], 0, communicator, &request[nbRequest++]);35 MPI_Waitall(nbRequest, &request[0], &status[0]);33 ep_lib::MPI_Isend((void *) &send[i][0], send[i].size()*sizeof(T), EP_CHAR, ranks[i], 0, communicator, &request[nbRequest++]); 34 ep_lib::MPI_Waitall(nbRequest, &request[0], &status[0]); 36 35 } 37 36 … … 39 38 but message lengths are *unknown* to receiver */ 40 39 template <typename T> 41 void alltoalls_unknown(const vector<vector<T> >& send, vector<vector<T> >& recv, const vector<int>& ranks, MPI_Comm communicator)42 { 43 vector< MPI_Request> request(ranks.size() * 2);44 vector< MPI_Status> status(ranks.size() * 2);40 void alltoalls_unknown(const vector<vector<T> >& send, vector<vector<T> >& recv, const vector<int>& ranks, ep_lib::MPI_Comm communicator) 41 { 42 vector<ep_lib::MPI_Request> request(ranks.size() * 2); 43 vector<ep_lib::MPI_Status> status(ranks.size() * 2); 45 44 46 45 // communicate sizes … … 51 50 sendSizes[i] = send[i].size(); 52 51 for (int i = 0; i < ranks.size(); i++) 53 MPI_Irecv(&recvSizes[i], 1, MPI_INT, ranks[i], 0, communicator, &request[nbRequest++]);52 ep_lib::MPI_Irecv(&recvSizes[i], 1, EP_INT, ranks[i], 0, communicator, &request[nbRequest++]); 54 53 for (int i = 0; i < ranks.size(); i++) 55 MPI_Isend(&sendSizes[i], 1, MPI_INT, ranks[i], 0, communicator, &request[nbRequest++]);56 MPI_Waitall(nbRequest, &request[0], &status[0]);54 ep_lib::MPI_Isend(&sendSizes[i], 1, EP_INT, ranks[i], 0, communicator, &request[nbRequest++]); 55 ep_lib::MPI_Waitall(nbRequest, &request[0], &status[0]); 57 56 58 57 // allocate … … 119 118 CTimer::get("CMPIRouting::init(reduce_scatter)").reset(); 120 119 CTimer::get("CMPIRouting::init(reduce_scatter)").resume(); 121 MPI_Reduce_scatter(toSend, &nbSource, recvCount, MPI_INT, MPI_SUM, communicator);120 ep_lib::MPI_Reduce_scatter(toSend, &nbSource, recvCount, EP_INT, EP_SUM, communicator); 122 121 CTimer::get("CMPIRouting::init(reduce_scatter)").suspend(); 123 122 CTimer::get("CMPIRouting::init(reduce_scatter)").print(); 124 123 125 MPI_Alloc_mem(nbTarget *sizeof(int), MPI_INFO_NULL, &targetRank);126 MPI_Alloc_mem(nbSource *sizeof(int), MPI_INFO_NULL, &sourceRank);124 ep_lib::MPI_Alloc_mem(nbTarget *sizeof(int), EP_INFO_NULL, &targetRank); 125 ep_lib::MPI_Alloc_mem(nbSource *sizeof(int), EP_INFO_NULL, &sourceRank); 127 126 128 127 targetRankToIndex = new int[mpiSize]; … … 138 137 } 139 138 140 MPI_Barrier(communicator);139 ep_lib::MPI_Barrier(communicator); 141 140 CTimer::get("CMPIRouting::init(get_source)").reset(); 142 141 CTimer::get("CMPIRouting::init(get_source)").resume(); 143 142 144 MPI_Request *request = newMPI_Request[nbSource + nbTarget];145 MPI_Status *status = newMPI_Status[nbSource + nbTarget];143 ep_lib::MPI_Request *request = new ep_lib::MPI_Request[nbSource + nbTarget]; 144 ep_lib::MPI_Status *status = new ep_lib::MPI_Status[nbSource + nbTarget]; 146 145 147 146 int indexRequest = 0; … … 151 150 for (int i = 0; i < nbSource; i++) 152 151 { 153 #ifdef _using EP154 MPI_Irecv(&sourceRank[i], 1, MPI_INT, -2, 0, communicator, &request[indexRequest++]);155 #el se156 MPI_Irecv(&sourceRank[i], 1, MPI_INT, MPI_ANY_SOURCE, 0, communicator, &request[indexRequest++]);152 #ifdef _usingMPI 153 ep_lib::MPI_Irecv(&sourceRank[i], 1, EP_INT, MPI_ANY_SOURCE, 0, communicator, &request[indexRequest]); 154 #elif _usingEP 155 ep_lib::MPI_Irecv(&sourceRank[i], 1, EP_INT, -2, 0, communicator, &request[indexRequest]); 157 156 #endif 157 indexRequest++; 158 158 } 159 159 MPI_Barrier(communicator); 160 160 for (int i = 0; i < nbTarget; i++) 161 161 { 162 MPI_Isend(&mpiRank, 1, MPI_INT, targetRank[i], 0, communicator, &request[indexRequest++]); 162 ep_lib::MPI_Isend(&mpiRank, 1, EP_INT, targetRank[i], 0, communicator, &request[indexRequest]); 163 indexRequest++; 163 164 } 164 165 MPI_Waitall(indexRequest, request, status); … … 173 174 for (int i = 0; i < nbSource; i++) 174 175 { 175 #ifdef _using EP176 MPI_Irecv(&sourceRank[i], 1, MPI_INT, -2, 0, communicator, &request[indexRequest]);177 #el se178 MPI_Irecv(&sourceRank[i], 1, MPI_INT, MPI_ANY_SOURCE, 0, communicator, &request[indexRequest]);176 #ifdef _usingMPI 177 ep_lib::MPI_Irecv(&sourceRank[i], 1, EP_INT, MPI_ANY_SOURCE, 0, communicator, &request[indexRequest]); 178 #elif _usingEP 179 ep_lib::MPI_Irecv(&sourceRank[i], 1, EP_INT, -2, 0, communicator, &request[indexRequest]); 179 180 #endif 180 181 } 182 183 for (int i = 0; i < nbTarget; i++) 184 { 185 MPI_Isend(&mpiRank, 1, MPI_INT, targetRank[i], 0, communicator, &request[indexRequest]);181 indexRequest++; 182 } 183 184 for (int i = 0; i < nbTarget; i++) 185 { 186 ep_lib::MPI_Isend(&mpiRank, 1, EP_INT, targetRank[i], 0, communicator, &request[indexRequest]); 186 187 indexRequest++; 187 188 } … … 208 209 for (int i = 0; i < nbSource; i++) 209 210 { 210 MPI_Irecv(&nbSourceElement[i], 1, MPI_INT, sourceRank[i], 0, communicator, &request[indexRequest]);211 ep_lib::MPI_Irecv(&nbSourceElement[i], 1, EP_INT, sourceRank[i], 0, communicator, &request[indexRequest]); 211 212 indexRequest++; 212 213 } … … 215 216 { 216 217 totalTargetElement += nbTargetElement[i]; 217 MPI_Isend(&nbTargetElement[i], 1, MPI_INT, targetRank[i], 0, communicator, &request[indexRequest]);218 ep_lib::MPI_Isend(&nbTargetElement[i], 1, EP_INT, targetRank[i], 0, communicator, &request[indexRequest]); 218 219 indexRequest++; 219 220 } … … 283 284 284 285 285 MPI_Request* request=newMPI_Request[nbSource+nbTarget];286 MPI_Status* status=newMPI_Status[nbSource+nbTarget];286 ep_lib::MPI_Request* request=new ep_lib::MPI_Request[nbSource+nbTarget]; 287 ep_lib::MPI_Status* status=new ep_lib::MPI_Status[nbSource+nbTarget]; 287 288 int indexRequest=0; 288 289 289 MPI_Barrier(communicator);290 ep_lib::MPI_Barrier(communicator); 290 291 CTimer::get("CMPIRouting::transferToTarget").reset(); 291 292 CTimer::get("CMPIRouting::transferToTarget").resume(); … … 293 294 for(int i=0; i<nbSource; i++) 294 295 { 295 MPI_Irecv(sourceBuffer[i],nbSourceElement[i]*sizeof(T),MPI_CHAR, sourceRank[i], 0, communicator, &request[indexRequest]);296 ep_lib::MPI_Irecv(sourceBuffer[i],nbSourceElement[i]*sizeof(T),EP_CHAR, sourceRank[i], 0, communicator, &request[indexRequest]); 296 297 indexRequest++; 297 298 } … … 299 300 for(int i=0;i<nbTarget; i++) 300 301 { 301 MPI_Isend(targetBuffer[i],nbTargetElement[i]*sizeof(T), MPI_CHAR, targetRank[i], 0, communicator, &request[indexRequest]);302 indexRequest++; 303 } 304 305 MPI_Waitall(indexRequest,request,status);302 ep_lib::MPI_Isend(targetBuffer[i],nbTargetElement[i]*sizeof(T), EP_CHAR, targetRank[i], 0, communicator, &request[indexRequest]); 303 indexRequest++; 304 } 305 306 ep_lib::MPI_Waitall(indexRequest,request,status); 306 307 307 308 CTimer::get("CMPIRouting::transferToTarget").suspend(); 308 309 CTimer::get("CMPIRouting::transferToTarget").print(); 309 MPI_Barrier(communicator);310 ep_lib::MPI_Barrier(communicator); 310 311 311 312 // unpack the data … … 347 348 } 348 349 349 MPI_Request *request = newMPI_Request[nbSource + nbTarget];350 MPI_Status *status = newMPI_Status[nbSource + nbTarget];350 ep_lib::MPI_Request *request = new ep_lib::MPI_Request[nbSource + nbTarget]; 351 ep_lib::MPI_Status *status = new ep_lib::MPI_Status[nbSource + nbTarget]; 351 352 int indexRequest = 0; 352 353 353 MPI_Barrier(communicator);354 ep_lib::MPI_Barrier(communicator); 354 355 CTimer::get("CMPIRouting::transferToTarget(messageSize)").reset(); 355 356 CTimer::get("CMPIRouting::transferToTarget(messageSize)").resume(); … … 357 358 for(int i=0; i<nbSource; i++) 358 359 { 359 MPI_Irecv(&sourceMessageSize[i],1,MPI_INT, sourceRank[i], 0, communicator, &request[indexRequest]);360 ep_lib::MPI_Irecv(&sourceMessageSize[i],1,EP_INT, sourceRank[i], 0, communicator, &request[indexRequest]); 360 361 indexRequest++; 361 362 } … … 363 364 for(int i=0; i<nbTarget; i++) 364 365 { 365 MPI_Isend(&targetMessageSize[i],1, MPI_INT, targetRank[i], 0, communicator, &request[indexRequest]);366 indexRequest++; 367 } 368 369 MPI_Waitall(indexRequest,request,status);370 371 MPI_Barrier(communicator);366 ep_lib::MPI_Isend(&targetMessageSize[i],1, EP_INT, targetRank[i], 0, communicator, &request[indexRequest]); 367 indexRequest++; 368 } 369 370 ep_lib::MPI_Waitall(indexRequest,request,status); 371 372 ep_lib::MPI_Barrier(communicator); 372 373 CTimer::get("CMPIRouting::transferToTarget(messageSize)").suspend(); 373 374 CTimer::get("CMPIRouting::transferToTarget(messageSize)").print(); … … 402 403 for(int i=0; i<nbSource; i++) 403 404 { 404 MPI_Irecv(sourceBuffer[i],sourceMessageSize[i],MPI_CHAR, sourceRank[i], 0, communicator, &request[indexRequest]);405 ep_lib::MPI_Irecv(sourceBuffer[i],sourceMessageSize[i],EP_CHAR, sourceRank[i], 0, communicator, &request[indexRequest]); 405 406 indexRequest++; 406 407 } … … 408 409 for(int i=0;i<nbTarget; i++) 409 410 { 410 MPI_Isend(targetBuffer[i],targetMessageSize[i], MPI_CHAR, targetRank[i], 0, communicator, &request[indexRequest]);411 ep_lib::MPI_Isend(targetBuffer[i],targetMessageSize[i], EP_CHAR, targetRank[i], 0, communicator, &request[indexRequest]); 411 412 indexRequest++; 412 413 } … … 467 468 } 468 469 469 MPI_Request* request=newMPI_Request[nbSource+nbTarget];470 MPI_Status* status=newMPI_Status[nbSource+nbTarget];470 ep_lib::MPI_Request* request=new ep_lib::MPI_Request[nbSource+nbTarget]; 471 ep_lib::MPI_Status* status=new ep_lib::MPI_Status[nbSource+nbTarget]; 471 472 int indexRequest=0; 472 473 473 474 for(int i=0; i<nbSource; i++) 474 475 { 475 MPI_Isend(sourceBuffer[i],nbSourceElement[i]*sizeof(T),MPI_CHAR, sourceRank[i], 0, communicator, &request[indexRequest]);476 ep_lib::MPI_Isend(sourceBuffer[i],nbSourceElement[i]*sizeof(T),EP_CHAR, sourceRank[i], 0, communicator, &request[indexRequest]); 476 477 indexRequest++; 477 478 } … … 479 480 for(int i=0;i<nbTarget; i++) 480 481 { 481 MPI_Irecv(targetBuffer[i],nbTargetElement[i]*sizeof(T), MPI_CHAR, targetRank[i], 0, communicator, &request[indexRequest]);482 indexRequest++; 483 } 484 485 MPI_Waitall(indexRequest,request,status);482 ep_lib::MPI_Irecv(targetBuffer[i],nbTargetElement[i]*sizeof(T), EP_CHAR, targetRank[i], 0, communicator, &request[indexRequest]); 483 indexRequest++; 484 } 485 486 ep_lib::MPI_Waitall(indexRequest,request,status); 486 487 487 488 // unpack the data … … 523 524 } 524 525 525 MPI_Request *request = newMPI_Request[nbSource + nbTarget];526 MPI_Status *status = newMPI_Status[nbSource + nbTarget];526 ep_lib::MPI_Request *request = new ep_lib::MPI_Request[nbSource + nbTarget]; 527 ep_lib::MPI_Status *status = new ep_lib::MPI_Status[nbSource + nbTarget]; 527 528 int indexRequest = 0; 528 529 for (int i = 0; i < nbSource; i++) 529 530 { 530 MPI_Isend(&sourceMessageSize[i], 1, MPI_INT, sourceRank[i], 0, communicator, &request[indexRequest]);531 indexRequest++; 532 } 533 for (int i = 0; i < nbTarget; i++) 534 { 535 MPI_Irecv(&targetMessageSize[i], 1, MPI_INT, targetRank[i], 0, communicator, &request[indexRequest]);536 indexRequest++; 537 } 538 MPI_Waitall(indexRequest, request, status);531 ep_lib::MPI_Isend(&sourceMessageSize[i], 1, EP_INT, sourceRank[i], 0, communicator, &request[indexRequest]); 532 indexRequest++; 533 } 534 for (int i = 0; i < nbTarget; i++) 535 { 536 ep_lib::MPI_Irecv(&targetMessageSize[i], 1, EP_INT, targetRank[i], 0, communicator, &request[indexRequest]); 537 indexRequest++; 538 } 539 ep_lib::MPI_Waitall(indexRequest, request, status); 539 540 540 541 for (int i = 0; i < nbTarget; i++) … … 564 565 for (int i = 0; i < nbSource; i++) 565 566 { 566 MPI_Isend(sourceBuffer[i], sourceMessageSize[i], MPI_CHAR, sourceRank[i], 0, communicator, &request[indexRequest]);567 indexRequest++; 568 } 569 for (int i = 0; i < nbTarget; i++) 570 { 571 MPI_Irecv(targetBuffer[i], targetMessageSize[i], MPI_CHAR, targetRank[i], 0, communicator, &request[indexRequest]);572 indexRequest++; 573 } 574 MPI_Waitall(indexRequest, request, status);567 ep_lib::MPI_Isend(sourceBuffer[i], sourceMessageSize[i], EP_CHAR, sourceRank[i], 0, communicator, &request[indexRequest]); 568 indexRequest++; 569 } 570 for (int i = 0; i < nbTarget; i++) 571 { 572 ep_lib::MPI_Irecv(targetBuffer[i], targetMessageSize[i], EP_CHAR, targetRank[i], 0, communicator, &request[indexRequest]); 573 indexRequest++; 574 } 575 ep_lib::MPI_Waitall(indexRequest, request, status); 575 576 576 577 // unpack the data … … 612 613 613 614 template void alltoalls_unknown(const std::vector<std::vector<NES> >& send, std::vector<std::vector<NES> >& recv, 614 const std::vector<int>& ranks, MPI_Comm communicator);615 const std::vector<int>& ranks, ep_lib::MPI_Comm communicator); 615 616 616 617 template void alltoalls_known(const std::vector<std::vector<int> >& send, std::vector<std::vector<int> >& recv, 617 const std::vector<int>& ranks, MPI_Comm communicator);618 619 } 618 const std::vector<int>& ranks, ep_lib::MPI_Comm communicator); 619 620 }
Note: See TracChangeset
for help on using the changeset viewer.