Ignore:
Timestamp:
05/26/15 16:13:46 (9 years ago)
Author:
rlacroix
Message:

Allow using more servers than clients.

This will be useful later when implementing server to client communications.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/node/domain.cpp

    r594 r595  
    646646    CServerDistributionDescription serverDescription(nGlobDomain); 
    647647 
    648     int ni_srv=ni_glo.getValue() ; 
    649     int ibegin_srv=0 ; 
    650     int iend_srv=ni_glo.getValue() ; 
    651  
    652     int nj_srv ; 
    653     int jbegin_srv ; 
    654     int jend_srv ; 
    655  
    656     CContext* context=CContext::getCurrent() ; 
    657     CContextClient* client=context->client ; 
    658     int nbServer=client->serverSize ; 
    659     int serverRank=client->getServerLeader() ; 
    660  
    661      serverDescription.computeServerDistribution(nbServer); 
    662      std::vector<std::vector<int> > serverIndexBegin = serverDescription.getServerIndexBegin(); 
    663      std::vector<std::vector<int> > serverDimensionSizes = serverDescription.getServerDimensionSizes(); 
    664      ibegin_srv = (serverIndexBegin[serverRank])[0]; 
    665      jbegin_srv = serverIndexBegin[serverRank][1]; 
    666      ni_srv = serverDimensionSizes[serverRank][0]; 
    667      nj_srv = serverDimensionSizes[serverRank][1]; 
    668      iend_srv = ibegin_srv+ni_srv-1; 
    669      jend_srv = jbegin_srv+nj_srv-1; 
    670  
    671      CEventClient event(getType(),EVENT_ID_SERVER_ATTRIBUT) ; 
    672      if (client->isServerLeader()) 
    673      { 
    674        CMessage msg ; 
    675        msg<<this->getId() ; 
    676        msg<<ni_srv<<ibegin_srv<<iend_srv<<nj_srv<<jbegin_srv<<jend_srv; 
    677        event.push(client->getServerLeader(),1,msg) ; 
    678        client->sendEvent(event) ; 
    679      } 
    680      else client->sendEvent(event) ; 
     648    CContext* context = CContext::getCurrent(); 
     649    CContextClient* client = context->client; 
     650    int nbServer = client->serverSize; 
     651 
     652    serverDescription.computeServerDistribution(nbServer); 
     653    std::vector<std::vector<int> > serverIndexBegin = serverDescription.getServerIndexBegin(); 
     654    std::vector<std::vector<int> > serverDimensionSizes = serverDescription.getServerDimensionSizes(); 
     655 
     656    CEventClient event(getType(),EVENT_ID_SERVER_ATTRIBUT); 
     657    if (client->isServerLeader()) 
     658    { 
     659      std::list<CMessage> msgs; 
     660 
     661      const std::list<int>& ranks = client->getRanksServerLeader(); 
     662      for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     663      { 
     664        // Use const int to ensure CMessage holds a copy of the value instead of just a reference 
     665        const int ibegin_srv = serverIndexBegin[*itRank][0]; 
     666        const int jbegin_srv = serverIndexBegin[*itRank][1]; 
     667        const int ni_srv = serverDimensionSizes[*itRank][0]; 
     668        const int nj_srv = serverDimensionSizes[*itRank][1]; 
     669        const int iend_srv = ibegin_srv + ni_srv - 1; 
     670        const int jend_srv = jbegin_srv + nj_srv - 1; 
     671 
     672        msgs.push_back(CMessage()); 
     673        CMessage& msg = msgs.back(); 
     674        msg << this->getId() ; 
     675        msg << ni_srv << ibegin_srv << iend_srv << nj_srv << jbegin_srv << jend_srv; 
     676 
     677        event.push(*itRank,1,msg); 
     678      } 
     679      client->sendEvent(event); 
     680    } 
     681    else client->sendEvent(event); 
    681682  } 
    682683 
     
    921922  void CDomain::recvServerAttribut(CBufferIn& buffer) 
    922923  { 
    923     int zoom_iend=zoom_ibegin.getValue()+zoom_ni.getValue()-1 ; 
    924     int zoom_jend=zoom_jbegin.getValue()+zoom_nj.getValue()-1 ; 
    925  
    926      buffer>>ni_srv>>ibegin_srv>>iend_srv>>nj_srv>>jbegin_srv>>jend_srv; 
    927  
     924    int zoom_iend = zoom_ibegin.getValue() + zoom_ni.getValue() - 1; 
     925    int zoom_jend = zoom_jbegin.getValue() + zoom_nj.getValue() - 1; 
     926 
     927    buffer >> ni_srv >> ibegin_srv >> iend_srv >> nj_srv >> jbegin_srv >> jend_srv; 
    928928 
    929929    zoom_ibegin_srv = zoom_ibegin.getValue() > ibegin_srv ? zoom_ibegin.getValue() : ibegin_srv ; 
Note: See TracChangeset for help on using the changeset viewer.