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

dev on ADA. add flag switch _usingEP/_usingMPI

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_openmp/src/filter/spatial_transform_filter.cpp

    r1545 r1642  
    1 #include "mpi.hpp" 
    21#include "spatial_transform_filter.hpp" 
    32#include "grid_transformation.hpp" 
     
    54#include "context_client.hpp" 
    65#include "timer.hpp" 
    7 using namespace ep_lib; 
    86 
    97namespace xios 
     
    7068      onOutputReady(outputPacket); 
    7169  } 
    72  
    73  
    74  
    75  
    7670 
    7771  CSpatialTemporalFilter::CSpatialTemporalFilter(CGarbageCollector& gc, CSpatialTransformFilterEngine* engine, CGridTransformation* gridTransformation, double outputValue, size_t inputSlotsCount) 
     
    142136  } 
    143137 
    144   std::map<CGridTransformation*, std::shared_ptr<CSpatialTransformFilterEngine> > *CSpatialTransformFilterEngine::engines_ptr = 0; 
     138  std::map<CGridTransformation*, std::shared_ptr<CSpatialTransformFilterEngine> > CSpatialTransformFilterEngine::engines; 
    145139 
    146140  CSpatialTransformFilterEngine* CSpatialTransformFilterEngine::get(CGridTransformation* gridTransformation) 
     
    149143      ERROR("CSpatialTransformFilterEngine& CSpatialTransformFilterEngine::get(CGridTransformation* gridTransformation)", 
    150144            "Impossible to get the requested engine, the grid transformation is invalid."); 
    151      
    152     if(engines_ptr == NULL) engines_ptr = new std::map<CGridTransformation*, std::shared_ptr<CSpatialTransformFilterEngine> >; 
    153  
    154  
    155     std::map<CGridTransformation*, std::shared_ptr<CSpatialTransformFilterEngine> >::iterator it = engines_ptr->find(gridTransformation); 
    156     if (it == engines_ptr->end()) 
     145 
     146    std::map<CGridTransformation*, std::shared_ptr<CSpatialTransformFilterEngine> >::iterator it = engines.find(gridTransformation); 
     147    if (it == engines.end()) 
    157148    { 
    158149      std::shared_ptr<CSpatialTransformFilterEngine> engine(new CSpatialTransformFilterEngine(gridTransformation)); 
    159       it = engines_ptr->insert(std::make_pair(gridTransformation, engine)).first; 
     150      it = engines.insert(std::make_pair(gridTransformation, engine)).first; 
    160151    } 
    161152 
     
    206197    const std::list<CGridTransformation::RecvIndexGridDestinationMap>& listLocalIndexToReceive = gridTransformation->getLocalIndexToReceiveOnGridDest(); 
    207198    const std::list<size_t>& listNbLocalIndexToReceive = gridTransformation->getNbLocalIndexToReceiveOnGridDest(); 
    208     const std::list<std::vector<bool> >& listLocalIndexMaskOnDest = gridTransformation->getLocalMaskIndexOnGridDest(); 
    209199    const std::vector<CGenericAlgorithmTransformation*>& listAlgos = gridTransformation->getAlgos(); 
    210200 
     
    215205    std::list<CGridTransformation::RecvIndexGridDestinationMap>::const_iterator itListRecv = listLocalIndexToReceive.begin(); 
    216206    std::list<size_t>::const_iterator itNbListRecv = listNbLocalIndexToReceive.begin(); 
    217     std::list<std::vector<bool> >::const_iterator itLocalMaskIndexOnDest = listLocalIndexMaskOnDest.begin(); 
    218207    std::vector<CGenericAlgorithmTransformation*>::const_iterator itAlgo = listAlgos.begin(); 
    219208 
    220     for (; itListSend != iteListSend; ++itListSend, ++itListRecv, ++itNbListRecv, ++itLocalMaskIndexOnDest, ++itAlgo) 
     209    for (; itListSend != iteListSend; ++itListSend, ++itListRecv, ++itNbListRecv, ++itAlgo) 
    221210    { 
    222211      CArray<double,1> dataCurrentSrc(dataCurrentDest); 
     
    235224 
    236225      idxSendBuff = 0; 
    237       std::vector<MPI_Request> sendRecvRequest(localIndexToSend.size() + itListRecv->size()); 
    238       int position = 0; 
     226      std::vector<ep_lib::MPI_Request> sendRecvRequest; 
    239227      for (itSend = itbSend; itSend != iteSend; ++itSend, ++idxSendBuff) 
    240228      { 
     
    246234          sendBuff[idxSendBuff][idx] = dataCurrentSrc(localIndex_p(idx)); 
    247235        } 
    248         MPI_Isend(sendBuff[idxSendBuff], countSize, MPI_DOUBLE, destRank, 12, client->intraComm, &sendRecvRequest[position++]); 
     236        sendRecvRequest.push_back(ep_lib::MPI_Request()); 
     237        ep_lib::MPI_Isend(sendBuff[idxSendBuff], countSize, EP_DOUBLE, destRank, 12, client->intraComm, &sendRecvRequest.back()); 
    249238      } 
    250239 
     
    263252        int srcRank = itRecv->first; 
    264253        int countSize = itRecv->second.size(); 
    265         MPI_Irecv(recvBuff + currentBuff, countSize, MPI_DOUBLE, srcRank, 12, client->intraComm, &sendRecvRequest[position++]); 
     254        sendRecvRequest.push_back(ep_lib::MPI_Request()); 
     255        ep_lib::MPI_Irecv(recvBuff + currentBuff, countSize, EP_DOUBLE, srcRank, 12, client->intraComm, &sendRecvRequest.back()); 
    266256        currentBuff += countSize; 
    267257      } 
    268       std::vector<MPI_Status> status(sendRecvRequest.size()); 
    269       MPI_Waitall(sendRecvRequest.size(), &sendRecvRequest[0], &status[0]); 
     258      std::vector<ep_lib::MPI_Status> status(sendRecvRequest.size()); 
     259      ep_lib::MPI_Waitall(sendRecvRequest.size(), &sendRecvRequest[0], &status[0]); 
    270260 
    271261      dataCurrentDest.resize(*itNbListRecv); 
    272       const std::vector<bool>& localMaskDest = *itLocalMaskIndexOnDest; 
    273       for (int i = 0; i < localMaskDest.size(); ++i) 
    274         if (localMaskDest[i]) dataCurrentDest(i) = 0.0; 
    275         else dataCurrentDest(i) = defaultValue; 
     262      dataCurrentDest = 0.0; 
    276263 
    277264      std::vector<bool> localInitFlag(dataCurrentDest.numElements(), true); 
Note: See TracChangeset for help on using the changeset viewer.