Ignore:
Timestamp:
05/16/17 17:54:30 (7 years ago)
Author:
yushan
Message:

branch merged with trunk r1130

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_yushan_merged/src/client_client_dht_template_impl.hpp

    r892 r1134  
    1010#include "utils.hpp" 
    1111#include "mpi_tag.hpp" 
     12#ifdef _usingEP 
     13#include "ep_declaration.hpp" 
     14#endif 
     15 
    1216 
    1317namespace xios 
    1418{ 
    1519template<typename T, typename H> 
    16 CClientClientDHTTemplate<T,H>::CClientClientDHTTemplate(const MPI_Comm& clientIntraComm) 
     20CClientClientDHTTemplate<T,H>::CClientClientDHTTemplate(const ep_lib::MPI_Comm& clientIntraComm) 
    1721  : H(clientIntraComm), index2InfoMapping_(), indexToInfoMappingLevel_(), nbClient_(0) 
    1822{ 
     
    3438template<typename T, typename H> 
    3539CClientClientDHTTemplate<T,H>::CClientClientDHTTemplate(const Index2InfoTypeMap& indexInfoMap, 
    36                                                         const MPI_Comm& clientIntraComm) 
     40                                                        const ep_lib::MPI_Comm& clientIntraComm) 
    3741  : H(clientIntraComm), index2InfoMapping_(), indexToInfoMappingLevel_(), nbClient_(0) 
    3842{ 
     
    5963template<typename T, typename H> 
    6064CClientClientDHTTemplate<T,H>::CClientClientDHTTemplate(const Index2VectorInfoTypeMap& indexInfoMap, 
    61                                                         const MPI_Comm& clientIntraComm) 
     65                                                        const ep_lib::MPI_Comm& clientIntraComm) 
    6266  : H(clientIntraComm), index2InfoMapping_(), indexToInfoMappingLevel_(), nbClient_(0) 
    6367{ 
     
    9599template<typename T, typename H> 
    96100void CClientClientDHTTemplate<T,H>::computeIndexInfoMappingLevel(const CArray<size_t,1>& indices, 
    97                                                                  const MPI_Comm& commLevel, 
     101                                                                 const ep_lib::MPI_Comm& commLevel, 
    98102                                                                 int level) 
    99103{ 
     
    169173    recvIndexBuff = new unsigned long[recvNbIndexCount]; 
    170174 
    171   std::vector<MPI_Request> request; 
     175  std::vector<ep_lib::MPI_Request> request; 
    172176  std::vector<int>::iterator itbRecvIndex = recvRankClient.begin(), itRecvIndex, 
    173177                             iteRecvIndex = recvRankClient.end(), 
     
    179183  { 
    180184    if (0 != recvNbIndexClientCount[idx]) 
     185    { 
    181186      recvIndexFromClients(recvRankClient[idx], recvIndexBuff+currentIndex, recvNbIndexClientCount[idx], commLevel, request); 
     187    } 
    182188    currentIndex += recvNbIndexClientCount[idx]; 
    183189  } 
     
    188194    sendIndexToClients(itIndex->first, (itIndex->second), sendNbIndexBuff[itIndex->first-groupRankBegin], commLevel, request); 
    189195 
    190   std::vector<MPI_Status> status(request.size()); 
     196  std::vector<ep_lib::MPI_Status> status(request.size()); 
    191197  MPI_Waitall(request.size(), &request[0], &status[0]); 
    192198 
     
    242248  } 
    243249 
    244   std::vector<MPI_Request> requestOnReturn; 
     250  std::vector<ep_lib::MPI_Request> requestOnReturn; 
    245251  currentIndex = 0; 
    246252  for (int idx = 0; idx < recvRankOnReturn.size(); ++idx) 
     
    293299  } 
    294300 
    295   std::vector<MPI_Status> statusOnReturn(requestOnReturn.size()); 
     301  std::vector<ep_lib::MPI_Status> statusOnReturn(requestOnReturn.size()); 
    296302  MPI_Waitall(requestOnReturn.size(), &requestOnReturn[0], &statusOnReturn[0]); 
    297303 
     
    360366template<typename T, typename H> 
    361367void CClientClientDHTTemplate<T,H>::computeDistributedIndex(const Index2VectorInfoTypeMap& indexInfoMap, 
    362                                                             const MPI_Comm& commLevel, 
     368                                                            const ep_lib::MPI_Comm& commLevel, 
    363369                                                            int level) 
    364370{ 
     
    412418    { 
    413419      client2ClientIndex[indexClient + groupRankBegin][sendNbIndexBuff[indexClient]] = it->first;; 
    414   //          ProcessDHTElement<InfoType>::packElement(it->second, client2ClientInfo[indexClient + groupRankBegin], sendNbInfo[indexClient]); 
    415420      ProcessDHTElement<InfoType>::packElement(infoTmp[idx], client2ClientInfo[indexClient + groupRankBegin], sendNbInfo[indexClient]); 
    416421      ++sendNbIndexBuff[indexClient]; 
     
    439444  // it will send a message to the correct clients. 
    440445  // Contents of the message are index and its corresponding informatioin 
    441   std::vector<MPI_Request> request; 
     446  std::vector<ep_lib::MPI_Request> request; 
    442447  int currentIndex = 0; 
    443448  int nbRecvClient = recvRankClient.size(); 
     
    458463                                                iteIndex = client2ClientIndex.end(); 
    459464  for (itIndex = itbIndex; itIndex != iteIndex; ++itIndex) 
     465  { 
    460466    sendIndexToClients(itIndex->first, itIndex->second, sendNbIndexBuff[itIndex->first-groupRankBegin], commLevel, request); 
     467  } 
     468 
    461469  boost::unordered_map<int, unsigned char*>::iterator itbInfo = client2ClientInfo.begin(), itInfo, 
    462470                                                      iteInfo = client2ClientInfo.end(); 
    463471  for (itInfo = itbInfo; itInfo != iteInfo; ++itInfo) 
     472  { 
    464473    sendInfoToClients(itInfo->first, itInfo->second, sendNbInfo[itInfo->first-groupRankBegin], commLevel, request); 
    465474 
    466   std::vector<MPI_Status> status(request.size()); 
     475  } 
     476 
     477  std::vector<ep_lib::MPI_Status> status(request.size()); 
     478 
    467479  MPI_Waitall(request.size(), &request[0], &status[0]); 
    468480 
     
    518530template<typename T, typename H> 
    519531void CClientClientDHTTemplate<T,H>::sendIndexToClients(int clientDestRank, size_t* indices, size_t indiceSize, 
    520                                                        const MPI_Comm& clientIntraComm, 
    521                                                        std::vector<MPI_Request>& requestSendIndex) 
    522 { 
    523   MPI_Request request; 
     532                                                       const ep_lib::MPI_Comm& clientIntraComm, 
     533                                                       std::vector<ep_lib::MPI_Request>& requestSendIndex) 
     534{ 
     535  ep_lib::MPI_Request request; 
    524536  requestSendIndex.push_back(request); 
    525537  MPI_Isend(indices, indiceSize, MPI_UNSIGNED_LONG, 
     
    536548template<typename T, typename H> 
    537549void CClientClientDHTTemplate<T,H>::recvIndexFromClients(int clientSrcRank, size_t* indices, size_t indiceSize, 
    538                                                          const MPI_Comm& clientIntraComm, 
    539                                                          std::vector<MPI_Request>& requestRecvIndex) 
    540 { 
    541   MPI_Request request; 
     550                                                         const ep_lib::MPI_Comm& clientIntraComm, 
     551                                                         std::vector<ep_lib::MPI_Request>& requestRecvIndex) 
     552{ 
     553  ep_lib::MPI_Request request; 
    542554  requestRecvIndex.push_back(request); 
    543555  MPI_Irecv(indices, indiceSize, MPI_UNSIGNED_LONG, 
     
    555567template<typename T, typename H> 
    556568void CClientClientDHTTemplate<T,H>::sendInfoToClients(int clientDestRank, unsigned char* info, int infoSize, 
    557                                                       const MPI_Comm& clientIntraComm, 
    558                                                       std::vector<MPI_Request>& requestSendInfo) 
    559 { 
    560   MPI_Request request; 
     569                                                      const ep_lib::MPI_Comm& clientIntraComm, 
     570                                                      std::vector<ep_lib::MPI_Request>& requestSendInfo) 
     571{ 
     572  ep_lib::MPI_Request request; 
    561573  requestSendInfo.push_back(request); 
    562  
    563574  MPI_Isend(info, infoSize, MPI_CHAR, 
    564575            clientDestRank, MPI_DHT_INFO, clientIntraComm, &(requestSendInfo.back())); 
     
    575586template<typename T, typename H> 
    576587void CClientClientDHTTemplate<T,H>::recvInfoFromClients(int clientSrcRank, unsigned char* info, int infoSize, 
    577                                                         const MPI_Comm& clientIntraComm, 
    578                                                         std::vector<MPI_Request>& requestRecvInfo) 
    579 { 
    580   MPI_Request request; 
     588                                                        const ep_lib::MPI_Comm& clientIntraComm, 
     589                                                        std::vector<ep_lib::MPI_Request>& requestRecvInfo) 
     590{ 
     591  ep_lib::MPI_Request request; 
    581592  requestRecvInfo.push_back(request); 
    582593 
     
    651662{ 
    652663  recvNbElements.resize(recvNbRank.size()); 
    653   std::vector<MPI_Request> request(sendNbRank.size()+recvNbRank.size()); 
    654   std::vector<MPI_Status> requestStatus(sendNbRank.size()+recvNbRank.size()); 
     664  std::vector<ep_lib::MPI_Request> request(sendNbRank.size()+recvNbRank.size()); 
     665  std::vector<ep_lib::MPI_Status> requestStatus(sendNbRank.size()+recvNbRank.size()); 
    655666 
    656667  int nRequest = 0; 
     
    696707  std::vector<int> recvBuff(recvBuffSize*2,0); 
    697708 
    698   std::vector<MPI_Request> request(sendBuffSize+recvBuffSize); 
    699   std::vector<MPI_Status> requestStatus(sendBuffSize+recvBuffSize); 
     709  std::vector<ep_lib::MPI_Request> request(sendBuffSize+recvBuffSize); 
     710  std::vector<ep_lib::MPI_Status> requestStatus(sendBuffSize+recvBuffSize); 
    700711 
    701712  int nRequest = 0; 
     
    721732  } 
    722733 
     734  //MPI_Barrier(this->internalComm_); 
     735 
    723736  MPI_Waitall(sendBuffSize+recvBuffSize, &request[0], &requestStatus[0]); 
     737 
    724738  int nbRecvRank = 0, nbRecvElements = 0; 
    725739  recvNbRank.clear(); 
Note: See TracChangeset for help on using the changeset viewer.