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/domain.cpp

    r987 r1009  
    10241024     } 
    10251025   } 
    1026  
    1027  
    1028  
    1029  
    1030  
    1031  
    10321026 
    10331027   void CDomain::checkEligibilityForCompressedOutput(void) 
     
    13961390    CContext* context = CContext::getCurrent(); 
    13971391     // Use correct context client to send message 
    1398      CContextClient* contextClientTmp = (0 != context->clientPrimServer) ? context->clientPrimServer  
    1399                                                                          : context->client; 
    1400  
    1401     // CContextClient* client = context->client; 
    1402     int nbServer = contextClientTmp->serverSize; 
    1403  
    1404     CServerDistributionDescription serverDescription(nGlobDomain_, nbServer); 
    1405     if (isUnstructed_) serverDescription.computeServerDistribution(false, 0); 
    1406     else serverDescription.computeServerDistribution(false, 1); 
    1407  
    1408     std::vector<std::vector<int> > serverIndexBegin = serverDescription.getServerIndexBegin(); 
    1409     std::vector<std::vector<int> > serverDimensionSizes = serverDescription.getServerDimensionSizes(); 
    1410  
    1411     CEventClient event(getType(),EVENT_ID_SERVER_ATTRIBUT); 
    1412     if (contextClientTmp->isServerLeader()) 
    1413     { 
    1414       std::list<CMessage> msgs; 
    1415  
    1416       const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
    1417       for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    1418       { 
    1419         // Use const int to ensure CMessage holds a copy of the value instead of just a reference 
    1420         const int ibegin_srv = serverIndexBegin[*itRank][0]; 
    1421         const int jbegin_srv = serverIndexBegin[*itRank][1]; 
    1422         const int ni_srv = serverDimensionSizes[*itRank][0]; 
    1423         const int nj_srv = serverDimensionSizes[*itRank][1]; 
    1424         const int iend_srv = ibegin_srv + ni_srv - 1; 
    1425         const int jend_srv = jbegin_srv + nj_srv - 1; 
    1426  
    1427         msgs.push_back(CMessage()); 
    1428         CMessage& msg = msgs.back(); 
    1429         msg << this->getId() ; 
    1430         msg << ni_srv << ibegin_srv << iend_srv << nj_srv << jbegin_srv << jend_srv; 
    1431         msg << global_zoom_ni.getValue() << global_zoom_ibegin.getValue() << global_zoom_nj.getValue() << global_zoom_jbegin.getValue(); 
    1432         msg << isCompressible_; 
    1433  
    1434         event.push(*itRank,1,msg); 
    1435       } 
    1436       contextClientTmp->sendEvent(event); 
    1437     } 
    1438     else contextClientTmp->sendEvent(event); 
     1392    int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1393    for (int i = 0; i < nbSrvPools; ++i) 
     1394    { 
     1395       CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] 
     1396                                                                           : context->client; 
     1397      // CContextClient* client = context->client; 
     1398      int nbServer = contextClientTmp->serverSize; 
     1399 
     1400      CServerDistributionDescription serverDescription(nGlobDomain_, nbServer); 
     1401      if (isUnstructed_) serverDescription.computeServerDistribution(false, 0); 
     1402      else serverDescription.computeServerDistribution(false, 1); 
     1403 
     1404      std::vector<std::vector<int> > serverIndexBegin = serverDescription.getServerIndexBegin(); 
     1405      std::vector<std::vector<int> > serverDimensionSizes = serverDescription.getServerDimensionSizes(); 
     1406 
     1407      CEventClient event(getType(),EVENT_ID_SERVER_ATTRIBUT); 
     1408      if (contextClientTmp->isServerLeader()) 
     1409      { 
     1410        std::list<CMessage> msgs; 
     1411 
     1412        const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     1413        for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     1414        { 
     1415          // Use const int to ensure CMessage holds a copy of the value instead of just a reference 
     1416          const int ibegin_srv = serverIndexBegin[*itRank][0]; 
     1417          const int jbegin_srv = serverIndexBegin[*itRank][1]; 
     1418          const int ni_srv = serverDimensionSizes[*itRank][0]; 
     1419          const int nj_srv = serverDimensionSizes[*itRank][1]; 
     1420          const int iend_srv = ibegin_srv + ni_srv - 1; 
     1421          const int jend_srv = jbegin_srv + nj_srv - 1; 
     1422 
     1423          msgs.push_back(CMessage()); 
     1424          CMessage& msg = msgs.back(); 
     1425          msg << this->getId() ; 
     1426          msg << ni_srv << ibegin_srv << iend_srv << nj_srv << jbegin_srv << jend_srv; 
     1427          msg << global_zoom_ni.getValue() << global_zoom_ibegin.getValue() << global_zoom_nj.getValue() << global_zoom_jbegin.getValue(); 
     1428          msg << isCompressible_; 
     1429 
     1430          event.push(*itRank,1,msg); 
     1431        } 
     1432        contextClientTmp->sendEvent(event); 
     1433      } 
     1434      else contextClientTmp->sendEvent(event); 
     1435    } 
    14391436  } 
    14401437 
Note: See TracChangeset for help on using the changeset viewer.