Ignore:
Timestamp:
08/04/17 16:03:34 (7 years ago)
Author:
mhnguyen
Message:

Making some changes to allow pools with different number of server

+) Associate context client to each grid distribution (This should be changed in the future)
+) Correct some buffer size estimation
+) Clean some redundant code and add comments

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/XIOS_DEV_CMIP6/src/node/axis.cpp

    r1235 r1236  
    137137    * \return A map associating the server rank with its minimum buffer size. 
    138138    */ 
    139    std::map<int, StdSize> CAxis::getAttributesBufferSize() 
     139   std::map<int, StdSize> CAxis::getAttributesBufferSize(CContextClient* client) 
    140140   { 
    141141     // For now the assumption is that secondary server pools consist of the same number of procs. 
    142142     // CHANGE the line below if the assumption changes. 
    143      CContext* context = CContext::getCurrent(); 
    144      CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[0] : context->client; 
     143     // CContext* context = CContext::getCurrent(); 
     144     // CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[0] : context->client; 
    145145 
    146146     std::map<int, StdSize> attributesSizes = getMinimumBufferSizeForAttributes(); 
    147147 
    148      bool isNonDistributed = (n == n_glo); 
     148     bool isNonDistributed = (n = n_glo);      
    149149 
    150150     if (client->isServerLeader()) 
     
    168168     { 
    169169       // size estimation for sendDistributedValue 
    170        boost::unordered_map<int, vector<size_t> >::const_iterator it, ite = indSrv_.end(); 
    171        for (it = indSrv_.begin(); it != ite; ++it) 
     170       boost::unordered_map<int, vector<size_t> >::const_iterator it, ite = indSrv_[client].end(); 
     171       for (it = indSrv_[client].begin(); it != ite; ++it) 
    172172       { 
    173173         size_t sizeIndexEvent = CArray<int,1>::size(it->second.size()); 
    174          if (isCompressible_) 
    175            sizeIndexEvent += CArray<int,1>::size(indWrittenSrv_[it->first].size()); 
     174         // if (isCompressible_) 
     175         //   sizeIndexEvent += CArray<int,1>::size(indWrittenSrv_[it->first].size()); 
    176176 
    177177         size_t sizeValEvent = CArray<double,1>::size(it->second.size()); 
     
    505505 
    506506    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
     507 
     508    connectedServerRank_.clear(); 
     509    nbSenders.clear(); 
     510 
    507511    for (int p = 0; p < nbSrvPools; ++p) 
    508512    { 
     
    589593 
    590594 
    591       indSrv_.swap(globalIndexAxisOnServer); 
    592       CClientServerMapping::GlobalIndexMap::const_iterator it  = indSrv_.begin(), 
    593                                                            ite = indSrv_.end(); 
    594       connectedServerRank_.clear(); 
    595       for (it = indSrv_.begin(); it != ite; ++it) { 
    596         connectedServerRank_.push_back(it->first); 
     595      indSrv_[client].swap(globalIndexAxisOnServer); 
     596      CClientServerMapping::GlobalIndexMap::const_iterator it  = indSrv_[client].begin(), 
     597                                                           ite = indSrv_[client].end(); 
     598       
     599      for (it = indSrv_[client].begin(); it != ite; ++it) { 
     600        connectedServerRank_[client].push_back(it->first); 
    597601      } 
    598602 
    599603      for (std::list<int>::const_iterator it = serverZeroIndexLeader.begin(); it != serverZeroIndexLeader.end(); ++it) 
    600         connectedServerRank_.push_back(*it); 
     604        connectedServerRank_[client].push_back(*it); 
    601605 
    602606       // Even if a client has no index, it must connect to at least one server and  
    603607       // send an "empty" data to this server 
    604        if (connectedServerRank_.empty()) 
    605         connectedServerRank_.push_back(client->clientRank % client->serverSize); 
    606  
    607       nbConnectedClients_ = CClientServerMapping::computeConnectedClients(client->serverSize, client->clientSize, client->intraComm, connectedServerRank_); 
     608       if (connectedServerRank_[client].empty()) 
     609        connectedServerRank_[client].push_back(client->clientRank % client->serverSize); 
     610 
     611      nbSenders[client] = CClientServerMapping::computeConnectedClients(client->serverSize, client->clientSize, client->intraComm, connectedServerRank_[client]); 
    608612 
    609613      delete clientServerMap; 
     
    10191023 
    10201024      boost::unordered_map<int, std::vector<size_t> >::const_iterator it, iteMap; 
    1021       iteMap = indSrv_.end(); 
    1022       for (int k = 0; k < connectedServerRank_.size(); ++k) 
     1025      iteMap = indSrv_[client].end(); 
     1026      for (int k = 0; k < connectedServerRank_[client].size(); ++k) 
    10231027      { 
    10241028        int nbData = 0; 
    1025         int rank = connectedServerRank_[k];         
    1026         it = indSrv_.find(rank); 
     1029        int rank = connectedServerRank_[client][k];         
     1030        it = indSrv_[client].find(rank); 
    10271031        if (iteMap != it) 
    10281032          nbData = it->second.size(); 
     
    10901094          listData.back() << list_label.back(); 
    10911095 
    1092         eventData.push(rank, nbConnectedClients_[rank], listData.back()); 
     1096        eventData.push(rank, nbSenders[client][rank], listData.back()); 
    10931097      } 
    10941098 
Note: See TracChangeset for help on using the changeset viewer.