Ignore:
Timestamp:
12/05/16 17:47:54 (7 years ago)
Author:
oabramkina
Message:

First working version with compression by secondary servers.

File:
1 edited

Legend:

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

    r987 r1009  
    889889  { 
    890890    CContext* context = CContext::getCurrent(); 
    891  
    892     CContextClient* contextClientTmp = (0 != context->clientPrimServer) ? context->clientPrimServer  
    893                                                                         : context->client; 
    894  
    895      
    896     int nbServer = contextClientTmp->serverSize; 
    897  
    898     CServerDistributionDescription serverDescription(globalDim, nbServer); 
    899     serverDescription.computeServerDistribution(); 
    900  
    901     std::vector<std::vector<int> > serverIndexBegin = serverDescription.getServerIndexBegin(); 
    902     std::vector<std::vector<int> > serverDimensionSizes = serverDescription.getServerDimensionSizes(); 
    903  
    904     globalDimGrid.resize(globalDim.size()); 
    905     for (int idx = 0; idx < globalDim.size(); ++idx) globalDimGrid(idx) = globalDim[idx]; 
    906  
    907     CEventClient event(getType(),EVENT_ID_SERVER_ATTRIBUT); 
    908     if (contextClientTmp->isServerLeader()) 
    909     { 
    910       std::list<CMessage> msgs; 
    911  
    912       const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
    913       for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    914       { 
    915         // Use const int to ensure CMessage holds a copy of the value instead of just a reference 
    916         const int begin = serverIndexBegin[*itRank][orderPositionInGrid]; 
    917         const int ni    = serverDimensionSizes[*itRank][orderPositionInGrid]; 
    918         const int end   = begin + ni - 1; 
    919  
    920         msgs.push_back(CMessage()); 
    921         CMessage& msg = msgs.back(); 
    922         msg << this->getId(); 
    923         msg << ni << begin << end; 
    924         msg << global_zoom_begin.getValue() << global_zoom_n.getValue(); 
    925         msg << isCompressible_; 
    926         msg << orderPositionInGrid; 
    927         msg << globalDimGrid; 
    928  
    929         event.push(*itRank,1,msg); 
    930       } 
    931       contextClientTmp->sendEvent(event); 
    932     } 
    933     else contextClientTmp->sendEvent(event); 
     891    int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     892    for (int i = 0; i < nbSrvPools; ++i) 
     893    { 
     894      CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] 
     895                                                                          : context->client; 
     896      int nbServer = contextClientTmp->serverSize; 
     897 
     898      CServerDistributionDescription serverDescription(globalDim, nbServer); 
     899      serverDescription.computeServerDistribution(); 
     900 
     901      std::vector<std::vector<int> > serverIndexBegin = serverDescription.getServerIndexBegin(); 
     902      std::vector<std::vector<int> > serverDimensionSizes = serverDescription.getServerDimensionSizes(); 
     903 
     904      globalDimGrid.resize(globalDim.size()); 
     905      for (int idx = 0; idx < globalDim.size(); ++idx) globalDimGrid(idx) = globalDim[idx]; 
     906 
     907      CEventClient event(getType(),EVENT_ID_SERVER_ATTRIBUT); 
     908      if (contextClientTmp->isServerLeader()) 
     909      { 
     910        std::list<CMessage> msgs; 
     911 
     912        const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     913        for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     914        { 
     915          // Use const int to ensure CMessage holds a copy of the value instead of just a reference 
     916          const int begin = serverIndexBegin[*itRank][orderPositionInGrid]; 
     917          const int ni    = serverDimensionSizes[*itRank][orderPositionInGrid]; 
     918          const int end   = begin + ni - 1; 
     919 
     920          msgs.push_back(CMessage()); 
     921          CMessage& msg = msgs.back(); 
     922          msg << this->getId(); 
     923          msg << ni << begin << end; 
     924          msg << global_zoom_begin.getValue() << global_zoom_n.getValue(); 
     925          msg << isCompressible_; 
     926          msg << orderPositionInGrid; 
     927          msg << globalDimGrid; 
     928 
     929          event.push(*itRank,1,msg); 
     930        } 
     931        contextClientTmp->sendEvent(event); 
     932      } 
     933      else contextClientTmp->sendEvent(event); 
     934    } 
    934935  } 
    935936 
Note: See TracChangeset for help on using the changeset viewer.