Ignore:
Timestamp:
01/23/19 10:31:44 (6 years ago)
Author:
yushan
Message:

dev on ADA. add flag switch _usingEP/_usingMPI

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_openmp/extern/remap/src/mpi_routing.cpp

    r1362 r1642  
    55#include "timerRemap.hpp" 
    66#include <iostream> 
    7 using namespace ep_lib; 
    87 
    98namespace sphereRemap { 
     
    1110const int verbose = 0; 
    1211 
    13 CMPIRouting::CMPIRouting(MPI_Comm comm) : communicator(comm) 
    14 { 
    15         MPI_Comm_rank(comm, &mpiRank); 
    16         MPI_Comm_size(comm, &mpiSize); 
     12CMPIRouting::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); 
    1716} 
    1817 
     
    2019    but message lengths are *known* to receiver */ 
    2120template <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); 
     21void 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); 
    2625 
    2726        // communicate data 
     
    2928        for (int i = 0; i < ranks.size(); i++) 
    3029                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++]); 
    3231        for (int i = 0; i < ranks.size(); i++) 
    3332                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]); 
    3635} 
    3736 
     
    3938    but message lengths are *unknown* to receiver */ 
    4039template <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); 
     40void 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); 
    4544 
    4645        // communicate sizes 
     
    5150                sendSizes[i] = send[i].size(); 
    5251        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++]); 
    5453        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]); 
    5756 
    5857        // allocate 
     
    119118        CTimer::get("CMPIRouting::init(reduce_scatter)").reset(); 
    120119        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); 
    122121        CTimer::get("CMPIRouting::init(reduce_scatter)").suspend(); 
    123122        CTimer::get("CMPIRouting::init(reduce_scatter)").print(); 
    124123 
    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); 
    127126 
    128127        targetRankToIndex = new int[mpiSize]; 
     
    138137        } 
    139138 
    140         MPI_Barrier(communicator); 
     139        ep_lib::MPI_Barrier(communicator); 
    141140        CTimer::get("CMPIRouting::init(get_source)").reset(); 
    142141        CTimer::get("CMPIRouting::init(get_source)").resume(); 
    143142 
    144         MPI_Request *request = new MPI_Request[nbSource + nbTarget]; 
    145         MPI_Status  *status = new MPI_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]; 
    146145 
    147146        int indexRequest = 0; 
     
    151150        for (int i = 0; i < nbSource; i++) 
    152151        { 
    153                 #ifdef _usingEP 
    154                 MPI_Irecv(&sourceRank[i], 1, MPI_INT, -2, 0, communicator, &request[indexRequest++]); 
    155                 #else 
    156                 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]); 
    157156                #endif 
     157                indexRequest++; 
    158158        } 
    159159        MPI_Barrier(communicator); 
    160160        for (int i = 0; i < nbTarget; i++) 
    161161        { 
    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++; 
    163164        } 
    164165        MPI_Waitall(indexRequest, request, status); 
     
    173174        for (int i = 0; i < nbSource; i++) 
    174175        { 
    175                 #ifdef _usingEP 
    176                 MPI_Irecv(&sourceRank[i], 1, MPI_INT, -2, 0, communicator, &request[indexRequest]); 
    177                 #else 
    178                 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]); 
    179180                #endif 
    180                 indexRequest++; 
    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]); 
    186187                indexRequest++; 
    187188        } 
     
    208209        for (int i = 0; i < nbSource; i++) 
    209210        { 
    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]); 
    211212                indexRequest++; 
    212213        } 
     
    215216        { 
    216217                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]); 
    218219                indexRequest++; 
    219220        } 
     
    283284 
    284285 
    285         MPI_Request* request=new MPI_Request[nbSource+nbTarget]; 
    286         MPI_Status*  status=new MPI_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]; 
    287288        int indexRequest=0; 
    288289 
    289         MPI_Barrier(communicator); 
     290        ep_lib::MPI_Barrier(communicator); 
    290291        CTimer::get("CMPIRouting::transferToTarget").reset(); 
    291292        CTimer::get("CMPIRouting::transferToTarget").resume(); 
     
    293294        for(int i=0; i<nbSource; i++) 
    294295        { 
    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]); 
    296297                indexRequest++; 
    297298        } 
     
    299300        for(int i=0;i<nbTarget; i++) 
    300301        { 
    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); 
    306307 
    307308        CTimer::get("CMPIRouting::transferToTarget").suspend(); 
    308309        CTimer::get("CMPIRouting::transferToTarget").print(); 
    309         MPI_Barrier(communicator); 
     310        ep_lib::MPI_Barrier(communicator); 
    310311 
    311312        // unpack the data 
     
    347348        } 
    348349 
    349         MPI_Request *request = new MPI_Request[nbSource + nbTarget]; 
    350         MPI_Status  *status = new MPI_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]; 
    351352        int indexRequest = 0; 
    352353 
    353         MPI_Barrier(communicator); 
     354        ep_lib::MPI_Barrier(communicator); 
    354355        CTimer::get("CMPIRouting::transferToTarget(messageSize)").reset(); 
    355356        CTimer::get("CMPIRouting::transferToTarget(messageSize)").resume(); 
     
    357358        for(int i=0; i<nbSource; i++) 
    358359        { 
    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]); 
    360361                indexRequest++; 
    361362        } 
     
    363364        for(int i=0; i<nbTarget; i++) 
    364365        { 
    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); 
    372373        CTimer::get("CMPIRouting::transferToTarget(messageSize)").suspend(); 
    373374        CTimer::get("CMPIRouting::transferToTarget(messageSize)").print(); 
     
    402403        for(int i=0; i<nbSource; i++) 
    403404        { 
    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]); 
    405406                indexRequest++; 
    406407        } 
     
    408409        for(int i=0;i<nbTarget; i++) 
    409410        { 
    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]); 
    411412                indexRequest++; 
    412413        } 
     
    467468        } 
    468469 
    469         MPI_Request* request=new MPI_Request[nbSource+nbTarget]; 
    470         MPI_Status*  status=new MPI_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]; 
    471472        int indexRequest=0; 
    472473 
    473474        for(int i=0; i<nbSource; i++) 
    474475        { 
    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]); 
    476477                indexRequest++; 
    477478        } 
     
    479480        for(int i=0;i<nbTarget; i++) 
    480481        { 
    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); 
    486487 
    487488        // unpack the data 
     
    523524        } 
    524525 
    525         MPI_Request *request = new MPI_Request[nbSource + nbTarget]; 
    526         MPI_Status  *status = new MPI_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]; 
    527528        int indexRequest = 0; 
    528529        for (int i = 0; i < nbSource; i++) 
    529530        { 
    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); 
    539540 
    540541        for (int i = 0; i < nbTarget; i++) 
     
    564565        for (int i = 0; i < nbSource; i++) 
    565566        { 
    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); 
    575576 
    576577        // unpack the data 
     
    612613 
    613614template 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); 
    615616 
    616617template 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.