Ignore:
Timestamp:
01/25/17 16:25:17 (7 years ago)
Author:
yushan
Message:

initialize the branch

File:
1 edited

Legend:

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

    r892 r1037  
    1010#include "utils.hpp" 
    1111#include "mpi_tag.hpp" 
     12#ifdef _usingEP 
     13#include "ep_declaration.hpp" 
     14#endif 
     15 
    1216 
    1317namespace xios 
     
    3741  : H(clientIntraComm), index2InfoMapping_(), indexToInfoMappingLevel_(), nbClient_(0) 
    3842{ 
     43   
    3944  MPI_Comm_size(clientIntraComm, &nbClient_); 
    4045  this->computeMPICommLevel(); 
    41   int nbLvl = this->getNbLevel(); 
     46  int nbLvl = this->getNbLevel();   
    4247  sendRank_.resize(nbLvl); 
    4348  recvRank_.resize(nbLvl); 
    4449  Index2VectorInfoTypeMap indexToVecInfoMap; 
    45   indexToVecInfoMap.rehash(std::ceil(indexInfoMap.size()/indexToVecInfoMap.max_load_factor())); 
    46   typename Index2InfoTypeMap::const_iterator it = indexInfoMap.begin(), ite = indexInfoMap.end(); 
    47   for (; it != ite; ++it) indexToVecInfoMap[it->first].push_back(it->second); 
    48   computeDistributedIndex(indexToVecInfoMap, clientIntraComm, nbLvl-1); 
     50  indexToVecInfoMap.rehash(std::ceil(indexInfoMap.size()/indexToVecInfoMap.max_load_factor()));  
     51  typename Index2InfoTypeMap::const_iterator it = indexInfoMap.begin(), ite = indexInfoMap.end();  
     52  for (; it != ite; ++it) 
     53  { 
     54    indexToVecInfoMap[it->first].push_back(it->second); 
     55  }  
     56   
     57  computeDistributedIndex(indexToVecInfoMap, clientIntraComm, nbLvl-1);  
    4958} 
    5059 
     
    179188  { 
    180189    if (0 != recvNbIndexClientCount[idx]) 
     190    { 
    181191      recvIndexFromClients(recvRankClient[idx], recvIndexBuff+currentIndex, recvNbIndexClientCount[idx], commLevel, request); 
     192    } 
    182193    currentIndex += recvNbIndexClientCount[idx]; 
    183194  } 
     
    189200 
    190201  std::vector<MPI_Status> status(request.size()); 
     202 
     203  //printf("1(%d): calling wait all for %lu requests\n", clientRank, request.size()); 
     204 
    191205  MPI_Waitall(request.size(), &request[0], &status[0]); 
     206 
     207 
     208  //printf("               1(%d): calling wait all for %lu requests OK\n", clientRank, request.size()); 
    192209 
    193210  CArray<size_t,1>* tmpGlobalIndex; 
     
    294311 
    295312  std::vector<MPI_Status> statusOnReturn(requestOnReturn.size()); 
     313  //printf("2(%d): calling wait all for %lu requests\n", clientRank, requestOnReturn.size()); 
    296314  MPI_Waitall(requestOnReturn.size(), &requestOnReturn[0], &statusOnReturn[0]); 
     315 
     316  //printf("            2(%d): calling wait all for %lu requests OK\n", clientRank, requestOnReturn.size()); 
    297317 
    298318  Index2VectorInfoTypeMap indexToInfoMapping; 
     
    363383                                                            int level) 
    364384{ 
     385  //printf("in computeDistributedIndex(const Index2VectorInfoTypeMap& indexInfoMap, const MPI_Comm& commLevel, int level)\n"); 
    365386  int clientRank; 
    366387  MPI_Comm_rank(commLevel,&clientRank); 
     
    418439  } 
    419440 
     441  //printf("check 4 OK. clientRank = %d\n", clientRank); 
     442 
    420443  // Calculate from how many clients each client receive message. 
    421444  // Calculate size of buffer for receiving message 
     
    423446  sendRecvRank(level, sendBuff, sendNbIndexBuff, 
    424447               recvRankClient, recvNbIndexClientCount); 
     448  //printf("sendRecvRank OK\n"); 
    425449 
    426450  int recvNbIndexCount = 0; 
     
    435459    recvInfoBuff = new unsigned char[recvNbIndexCount*ProcessDHTElement<InfoType>::typeSize()]; 
    436460  } 
     461 
     462  //printf("check 5 OK. clientRank = %d\n", clientRank); 
    437463 
    438464  // If a client holds information about index and the corresponding which don't belong to it, 
     
    447473    { 
    448474      recvIndexFromClients(recvRankClient[idx], recvIndexBuff+currentIndex, recvNbIndexClientCount[idx], commLevel, request); 
     475 
    449476      recvInfoFromClients(recvRankClient[idx], 
    450477                          recvInfoBuff+currentIndex*ProcessDHTElement<InfoType>::typeSize(), 
    451478                          recvNbIndexClientCount[idx]*ProcessDHTElement<InfoType>::typeSize(), 
    452479                          commLevel, request); 
     480 
    453481    } 
    454482    currentIndex += recvNbIndexClientCount[idx]; 
    455483  } 
     484 
     485  //printf("check 6 OK. clientRank = %d\n", clientRank); 
    456486 
    457487  boost::unordered_map<int, size_t* >::iterator itbIndex = client2ClientIndex.begin(), itIndex, 
    458488                                                iteIndex = client2ClientIndex.end(); 
    459489  for (itIndex = itbIndex; itIndex != iteIndex; ++itIndex) 
     490  { 
    460491    sendIndexToClients(itIndex->first, itIndex->second, sendNbIndexBuff[itIndex->first-groupRankBegin], commLevel, request); 
     492 
     493  } 
     494 
     495  //printf("check 7 OK. clientRank = %d\n", clientRank); 
     496 
    461497  boost::unordered_map<int, unsigned char*>::iterator itbInfo = client2ClientInfo.begin(), itInfo, 
    462498                                                      iteInfo = client2ClientInfo.end(); 
    463499  for (itInfo = itbInfo; itInfo != iteInfo; ++itInfo) 
     500  { 
    464501    sendInfoToClients(itInfo->first, itInfo->second, sendNbInfo[itInfo->first-groupRankBegin], commLevel, request); 
    465502 
     503  } 
     504 
     505  //printf("check 8 OK. clientRank = %d\n", clientRank); 
    466506  std::vector<MPI_Status> status(request.size()); 
     507 
    467508  MPI_Waitall(request.size(), &request[0], &status[0]); 
    468509 
     
    480521    { 
    481522      ProcessDHTElement<InfoType>::unpackElement(infoValue, infoBuff, infoIndex); 
     523      unsigned long pp = *(recvIndexBuff+currentIndex+i); 
     524       
    482525      indexToInfoMapping[*(recvIndexBuff+currentIndex+i)].push_back(infoValue); 
    483526    } 
    484527    currentIndex += count; 
    485528  } 
     529 
     530  //printf("check 9 OK. clientRank = %d\n", clientRank); 
    486531 
    487532  if (0 != recvNbIndexCount) 
     
    498543      delete [] it->second; 
    499544 
     545  //printf("check 10 OK. clientRank = %d\n", clientRank); 
    500546  // Ok, now do something recursive 
    501547  if (0 < level) 
     
    523569  MPI_Request request; 
    524570  requestSendIndex.push_back(request); 
     571 
    525572  MPI_Isend(indices, indiceSize, MPI_UNSIGNED_LONG, 
    526573            clientDestRank, MPI_DHT_INDEX, clientIntraComm, &(requestSendIndex.back())); 
     
    541588  MPI_Request request; 
    542589  requestRecvIndex.push_back(request); 
     590 
    543591  MPI_Irecv(indices, indiceSize, MPI_UNSIGNED_LONG, 
    544592            clientSrcRank, MPI_DHT_INDEX, clientIntraComm, &(requestRecvIndex.back())); 
     
    560608  MPI_Request request; 
    561609  requestSendInfo.push_back(request); 
    562  
     610  //printf("MPI_IsendInfo(info, infoSize, MPI_CHAR,... char count = %d, dest = %d, buf_size = %d\n", infoSize, clientDestRank, sizeof(*info) ); 
    563611  MPI_Isend(info, infoSize, MPI_CHAR, 
    564612            clientDestRank, MPI_DHT_INFO, clientIntraComm, &(requestSendInfo.back())); 
     
    668716    ++nRequest; 
    669717  } 
    670  
     718   
     719  int clientRank; 
     720  MPI_Comm_rank(this->internalComm_,&clientRank); 
     721  //printf("4(%d): calling wait all for %lu requests\n", clientRank, sendNbRank.size()+recvNbRank.size()); 
    671722  MPI_Waitall(sendNbRank.size()+recvNbRank.size(), &request[0], &requestStatus[0]); 
     723  //printf("        4(%d): calling wait all for %lu requests OK\n", clientRank, sendNbRank.size()+recvNbRank.size()); 
    672724} 
    673725 
     
    686738                                                 std::vector<int>& recvNbRank, std::vector<int>& recvNbElements) 
    687739{ 
     740  int myRank; 
     741  MPI_Comm_rank(MPI_COMM_WORLD, &myRank); 
     742  //printf("myRank = %d, in sendRecvRank(int level, const std::vector<int>& sendNbRank, const std::vector<int>& sendNbElements, std::vector<int>& recvNbRank, std::vector<int>& recvNbElements)\n", myRank); 
    688743  int groupBegin = this->getGroupBegin()[level]; 
    689744 
     
    702757  for (int idx = 0; idx < recvBuffSize; ++idx) 
    703758  { 
     759    //printf("myRank = %d starts irecv with src = %d, tag = %d, idx = %d\n", myRank, recvRank[idx], MPI_DHT_INDEX_0, idx); 
    704760    MPI_Irecv(&recvBuff[0]+2*idx, 2, MPI_INT, 
    705761              recvRank[idx], MPI_DHT_INDEX_0, this->internalComm_, &request[nRequest]); 
     762    //printf("myRank = %d MPI_Irecv OK, idx = %d, nRequest = %d\n", myRank, idx, nRequest); 
    706763    ++nRequest; 
    707764  } 
     765 
     766  //printf("myRank = %d, check 1 OK\n", myRank); 
    708767 
    709768  for (int idx = 0; idx < sendBuffSize; ++idx) 
     
    716775  for (int idx = 0; idx < sendBuffSize; ++idx) 
    717776  { 
     777    //printf("myRank = %d starts isend with dest = %d, tag = %d, idx = %d\n", myRank, sendRank[idx], MPI_DHT_INDEX_0, idx); 
    718778    MPI_Isend(&sendBuff[idx*2], 2, MPI_INT, 
    719779              sendRank[idx], MPI_DHT_INDEX_0, this->internalComm_, &request[nRequest]); 
     780    //printf("myRank = %d MPI_Isend OK, idx = %d, nRequest = %d\n", myRank, idx, nRequest); 
    720781    ++nRequest; 
    721782  } 
    722783 
     784  MPI_Barrier(this->internalComm_); 
     785 
     786  //printf("myRank = %d, check 2 OK\n", myRank); 
     787 
     788  int clientRank; 
     789  MPI_Comm_rank(this->internalComm_,&clientRank); 
     790 
     791  //printf("5(%d): calling wait all for %lu requests\n", myRank, sendBuffSize+recvBuffSize); 
    723792  MPI_Waitall(sendBuffSize+recvBuffSize, &request[0], &requestStatus[0]); 
     793  //printf("            5(%d): calling wait all for %lu requests OK\n", myRank, sendBuffSize+recvBuffSize); 
     794  //printf("check 3 OK\n"); 
     795 
    724796  int nbRecvRank = 0, nbRecvElements = 0; 
    725797  recvNbRank.clear(); 
     
    733805    } 
    734806  } 
    735 } 
    736  
    737 } 
     807  //printf("check 4 OK\n"); 
     808} 
     809 
     810} 
Note: See TracChangeset for help on using the changeset viewer.