Ignore:
Timestamp:
05/17/17 18:30:38 (7 years ago)
Author:
mhnguyen
Message:

Reading for two-level server

+) Update reading with the changes of grid distribution
+) Correct a minor bug on modification grid mask
+) Do some code cleaning

Test
+) On Curie
+) Work in both mode: classical and two-level
+) Push some *.nc for test_remap

File:
1 edited

Legend:

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

    r1129 r1136  
    125125 
    126126    CContext* context = CContext::getCurrent(); 
    127 //    CContextClient* client = context->client; 
    128     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    129     // int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    130     // for (int i = 0; i < nbSrvPools; ++i) 
    131     // { 
    132127      CContextClient* client = (!context->hasServer) ? context->client : this->file->getContextClient(); 
    133128 
     
    261256    {             
    262257      CArray<int,1>& storeClient = grid->storeIndex_client; 
    263       // for (map<int, CArray<size_t, 1> >::iterator it = grid->outIndexFromClient.begin(); it != grid->outIndexFromClient.end(); ++it) 
    264       // { 
    265       //   // sizeData += it->second.numElements(); 
    266       //   data_srv.insert(std::make_pair(it->first, CArray<double,1>(it->second.numElements()))); 
    267       // } 
    268  
    269       // for (map<int, CArray<size_t, 1> >::iterator it = grid->outLocalIndexStoreOnClient.begin(); it != grid->outLocalIndexStoreOnClient.end(); ++it) 
    270       // { 
    271       //   // sizeData += it->second.numElements(); 
    272       //   data_srv.insert(std::make_pair(it->first, CArray<double,1>(it->second.numElements()))); 
    273       // } 
    274  
    275       // Gather all data from different clients 
    276       // recvDataSrv.resize(sizeData); 
     258 
     259      // Gather all data from different clients       
    277260      recvDataSrv.resize(storeClient.numElements()); 
    278261      recvFoperationSrv = boost::shared_ptr<func::CFunctor>(new func::CInstant(recvDataSrv)); 
    279262    } 
    280263 
    281     CArray<double,1> recv_data_tmp(recvDataSrv.numElements()); 
    282     // sizeData = 0; 
     264    CArray<double,1> recv_data_tmp(recvDataSrv.numElements());     
    283265    const CDate& currDate = context->getCalendar()->getCurrentDate(); 
    284266    const CDate opeDate   = last_operation_srv +freq_op + freq_operation_srv - freq_op; 
     
    286268    if (opeDate <= currDate) 
    287269    { 
    288        for (map<int, CArray<size_t, 1> >::iterator it = grid->outLocalIndexStoreOnClient.begin(); it != grid->outLocalIndexStoreOnClient.end(); ++it) 
     270      for (map<int, CArray<size_t, 1> >::iterator it = grid->outLocalIndexStoreOnClient.begin(); it != grid->outLocalIndexStoreOnClient.end(); ++it) 
    289271      { 
    290272        CArray<double,1> tmp; 
     
    294276        { 
    295277          recv_data_tmp(indexTmp(idx)) = tmp(idx); 
    296         } 
    297         // recv_data_tmp(Range(sizeData,sizeData+it->second.numElements()-1)) = tmp;   
    298         // sizeData += it->second.numElements();       
    299       } 
    300  
    301       // for (map<int, CArray<size_t, 1> >::iterator it = grid->outIndexFromClient.begin(); it != grid->outIndexFromClient.end(); ++it) 
    302       // {         
    303       //   CArray<double,1> tmp; 
    304       //   CArray<size_t,1>& indexTmp = it->second; 
    305       //   *(rankBuffers[it->first]) >> tmp; 
    306       //   for (int idx = 0; idx < indexTmp.numElements(); ++idx) 
    307       //   { 
    308       //     recv_data_tmp(indexTmp(idx)) = tmp(idx); 
    309       //   } 
    310       //   // recv_data_tmp(Range(sizeData,sizeData+it->second.numElements()-1)) = tmp;   
    311       //   // sizeData += it->second.numElements();       
    312       // } 
     278        }       
     279      } 
    313280    } 
    314281 
     
    328295      (*recvFoperationSrv)(data); 
    329296      last_operation_srv = currDate; 
    330 //        sendUpdateData(fieldData); 
    331         // Redirecting data to the correct secondary server 
    332         //int fileIdx = std::find(context->enabledFiles.begin(), context->enabledFiles.end(), this->file) - context->enabledFiles.begin(); 
    333         //int srvId = fileIdx % context->clientPrimServer.size(); 
    334         //sendUpdateData(fieldData, context->clientPrimServer[srvId]); 
    335297    } 
    336298 
     
    416378      if (grid->doGridHaveDataToWrite() || getRelFile()->type == CFile::type_attr::one_file) 
    417379      { 
    418         getRelFile()->checkFile(); 
     380        getRelFile()->checkWriteFile(); 
    419381        this->incrementNStep(); 
    420382        getRelFile()->getDataOutput()->writeFieldData(CField::get(this)); 
     
    479441  { 
    480442    CContext* context = CContext::getCurrent(); 
    481     CContextClient* client = context->client; 
     443    CContextClient* client = context->client;     
    482444 
    483445    CEventClient event(getType(), EVENT_ID_READ_DATA_READY); 
     
    486448    bool hasData = readField(); 
    487449 
    488     map<int, CArray<double,1> >::iterator it; 
    489 //    for (it = data_srv.begin(); it != data_srv.end(); it++) 
    490 //    { 
    491 //      msgs.push_back(CMessage()); 
    492 //      CMessage& msg = msgs.back(); 
    493 //      msg << getId(); 
    494 //      if (hasData) 
    495 //        msg << getNStep() - 1 << it->second; 
    496 //      else 
    497 //        msg << int(-1); 
    498 //      event.push(it->first, grid->nbSenders[it->first], msg); 
    499 //    } 
    500 //    client->sendEvent(event); 
     450     
    501451    if (!grid->doGridHaveDataDistributed()) 
    502452    { 
    503453       if (client->isServerLeader()) 
    504454       { 
    505           if (!data_srv.empty()) 
    506           { 
    507             it = data_srv.begin(); 
     455          if (0 != recvDataSrv.numElements()) 
     456          {             
    508457            const std::list<int>& ranks = client->getRanksServerLeader(); 
    509458            for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     
    513462              msg << getId(); 
    514463              if (hasData) 
    515                 msg << getNStep() - 1 << it->second; 
     464                msg << getNStep() - 1 << recvDataSrv; 
    516465              else 
    517466                msg << int(-1); 
     
    519468            } 
    520469          } 
     470 
    521471          client->sendEvent(event); 
    522472       } 
    523473       else 
    524474       { 
    525           // if (!data_srv.empty()) 
    526           // { 
    527           //   it = data_srv.begin(); 
    528           //   const std::list<int>& ranks = client->getRanksServerNotLeader(); 
    529           //   for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    530           //   { 
    531           //     msgs.push_back(CMessage()); 
    532           //     CMessage& msg = msgs.back(); 
    533           //     msg << getId(); 
    534           //     if (hasData) 
    535           //       msg << getNStep() - 1 << it->second; 
    536           //     else 
    537           //       msg << int(-1); 
    538           //     event.push(*itRank, 1, msg); 
    539           //   } 
    540           // } 
    541475          client->sendEvent(event); 
    542476       } 
     
    544478    else 
    545479    { 
    546       for (it = data_srv.begin(); it != data_srv.end(); it++) 
     480      for (map<int, CArray<size_t, 1> >::iterator it = grid->outLocalIndexStoreOnClient.begin();  
     481                                                  it != grid->outLocalIndexStoreOnClient.end(); ++it) 
    547482      { 
     483        CArray<size_t,1>& indexTmp = it->second; 
     484        CArray<double,1> tmp(indexTmp.numElements()); 
     485        for (int idx = 0; idx < indexTmp.numElements(); ++idx) 
     486        { 
     487          tmp(idx) = recvDataSrv(indexTmp(idx)); 
     488        }  
     489 
    548490        msgs.push_back(CMessage()); 
    549491        CMessage& msg = msgs.back(); 
    550492        msg << getId(); 
    551493        if (hasData) 
    552           msg << getNStep() - 1 << it->second; 
     494          msg << getNStep() - 1 << tmp; 
    553495        else 
    554496          msg << int(-1); 
    555         event.push(it->first, grid->nbSenders[0][it->first], msg); 
     497        event.push(it->first, grid->nbReadSenders[0][it->first], msg); 
    556498      } 
    557499      client->sendEvent(event); 
     
    561503  bool CField::readField(void) 
    562504  { 
     505    grid->computeWrittenIndex(); 
    563506    if (!getRelFile()->allDomainEmpty) 
    564507    { 
    565508      if (grid->doGridHaveDataToWrite() || getRelFile()->type == CFile::type_attr::one_file) 
    566509      { 
    567         if (data_srv.empty()) 
    568         { 
    569           for (map<int, CArray<size_t, 1> >::iterator it = grid->outIndexFromClient.begin(); it != grid->outIndexFromClient.end(); ++it) 
    570             data_srv.insert(std::make_pair(it->first, CArray<double,1>(it->second.numElements()))); 
     510        if (0 == recvDataSrv.numElements()) 
     511        {             
     512          CArray<int,1>& storeClient = grid->storeIndex_client;           
     513          recvDataSrv.resize(storeClient.numElements());           
    571514        } 
    572515 
    573         getRelFile()->checkFile(); 
     516        getRelFile()->checkReadFile(); 
    574517        if (!nstepMax) 
    575518        { 
     
    578521 
    579522        this->incrementNStep(); 
    580  
    581  
    582523 
    583524        if (getNStep() > nstepMax && (getRelFile()->cyclic.isEmpty() || !getRelFile()->cyclic) ) 
     
    14261367   void CField::scaleFactorAddOffset(double scaleFactor, double addOffset) 
    14271368   { 
    1428      map<int, CArray<double,1> >::iterator it; 
    1429      for (it = data_srv.begin(); it != data_srv.end(); it++) it->second = (it->second - addOffset) / scaleFactor; 
     1369     // map<int, CArray<double,1> >::iterator it; 
     1370     // for (it = data_srv.begin(); it != data_srv.end(); it++) it->second = (it->second - addOffset) / scaleFactor; 
     1371     recvDataSrv = (recvDataSrv - addOffset) / scaleFactor; 
    14301372   } 
    14311373 
    14321374   void CField::invertScaleFactorAddOffset(double scaleFactor, double addOffset) 
    14331375   { 
    1434      map<int, CArray<double,1> >::iterator it; 
    1435      for (it = data_srv.begin(); it != data_srv.end(); it++) it->second = it->second * scaleFactor + addOffset; 
    1436    } 
    1437  
    1438    void CField::outputField(CArray<double,3>& fieldOut) 
    1439    { 
    1440       map<int, CArray<double,1> >::iterator it; 
    1441       for (it = data_srv.begin(); it != data_srv.end(); it++) 
    1442       { 
    1443         grid->outputField(it->first, it->second, fieldOut.dataFirst()); 
    1444       } 
    1445    } 
    1446  
    1447    void CField::outputField(CArray<double,2>& fieldOut) 
    1448    { 
    1449       map<int, CArray<double,1> >::iterator it; 
    1450       for(it=data_srv.begin();it!=data_srv.end();it++) 
    1451       { 
    1452          grid->outputField(it->first, it->second, fieldOut.dataFirst()); 
    1453       } 
     1376     // map<int, CArray<double,1> >::iterator it; 
     1377     // for (it = data_srv.begin(); it != data_srv.end(); it++) it->second = it->second * scaleFactor + addOffset; 
     1378     recvDataSrv = recvDataSrv * scaleFactor + addOffset; 
    14541379   } 
    14551380 
    14561381   void CField::outputField(CArray<double,1>& fieldOut) 
    1457    { 
    1458       map<int, CArray<double,1> >::iterator it;       
    1459       
     1382   {  
    14601383      CArray<size_t,1>& outIndexClient = grid->localIndexToWriteOnClient; 
    14611384      CArray<size_t,1>& outIndexServer = grid->localIndexToWriteOnServer; 
     
    14641387        fieldOut(outIndexServer(idx)) = recvDataSrv(outIndexClient(idx)); 
    14651388      } 
    1466  
     1389   } 
     1390 
     1391   void CField::inputField(CArray<double,1>& fieldIn) 
     1392   { 
     1393      // map<int, CArray<double,1> >::iterator it; 
    14671394      // for (it = data_srv.begin(); it != data_srv.end(); it++) 
    14681395      // { 
    1469       //    grid->outputField(it->first, it->second, fieldOut.dataFirst()); 
     1396      //    grid->inputField(it->first, fieldOut.dataFirst(), it->second); 
    14701397      // } 
    1471     // grid->outputField(recvDataSrv, fieldOut); 
    1472    } 
    1473  
    1474    void CField::inputField(CArray<double,3>& fieldOut) 
    1475    { 
    1476       map<int, CArray<double,1> >::iterator it; 
    1477       for (it = data_srv.begin(); it != data_srv.end(); it++) 
     1398      CArray<size_t,1>& outIndexClient = grid->localIndexToWriteOnClient; 
     1399      CArray<size_t,1>& outIndexServer = grid->localIndexToWriteOnServer; 
     1400      for (size_t idx = 0; idx < outIndexServer.numElements(); ++idx) 
    14781401      { 
    1479         grid->inputField(it->first, fieldOut.dataFirst(), it->second); 
    1480       } 
    1481    } 
    1482  
    1483    void CField::inputField(CArray<double,2>& fieldOut) 
    1484    { 
    1485       map<int, CArray<double,1> >::iterator it; 
    1486       for(it = data_srv.begin(); it != data_srv.end(); it++) 
    1487       { 
    1488          grid->inputField(it->first, fieldOut.dataFirst(), it->second); 
    1489       } 
    1490    } 
    1491  
    1492    void CField::inputField(CArray<double,1>& fieldOut) 
    1493    { 
    1494       map<int, CArray<double,1> >::iterator it; 
    1495       for (it = data_srv.begin(); it != data_srv.end(); it++) 
    1496       { 
    1497          grid->inputField(it->first, fieldOut.dataFirst(), it->second); 
    1498       } 
     1402        recvDataSrv(outIndexClient(idx)) = fieldIn(outIndexServer(idx)); 
     1403      } 
     1404 
    14991405   } 
    15001406 
     
    16031509   { 
    16041510      sendAddItem(id, (int)EVENT_ID_ADD_VARIABLE); 
    1605     // CContext* context = CContext::getCurrent(); 
    1606  
    1607     // if (!context->hasServer) 
    1608     // { 
    1609     //    CContextClient* client = context->client; 
    1610  
    1611     //    CEventClient event(this->getType(),EVENT_ID_ADD_VARIABLE); 
    1612     //    if (client->isServerLeader()) 
    1613     //    { 
    1614     //      CMessage msg; 
    1615     //      msg << this->getId(); 
    1616     //      msg << id; 
    1617     //      const std::list<int>& ranks = client->getRanksServerLeader(); 
    1618     //      for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    1619     //        event.push(*itRank,1,msg); 
    1620     //      client->sendEvent(event); 
    1621     //    } 
    1622     //    else client->sendEvent(event); 
    1623     // } 
    16241511   } 
    16251512 
     
    16271514   { 
    16281515      sendAddItem(id, (int)EVENT_ID_ADD_VARIABLE, client); 
    1629     // CContext* context = CContext::getCurrent(); 
    1630  
    1631     // if (!context->hasServer) 
    1632     // { 
    1633     //    CContextClient* client = context->client; 
    1634  
    1635     //    CEventClient event(this->getType(),EVENT_ID_ADD_VARIABLE); 
    1636     //    if (client->isServerLeader()) 
    1637     //    { 
    1638     //      CMessage msg; 
    1639     //      msg << this->getId(); 
    1640     //      msg << id; 
    1641     //      const std::list<int>& ranks = client->getRanksServerLeader(); 
    1642     //      for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    1643     //        event.push(*itRank,1,msg); 
    1644     //      client->sendEvent(event); 
    1645     //    } 
    1646     //    else client->sendEvent(event); 
    1647     // } 
    16481516   } 
    16491517 
     
    16511519   { 
    16521520      sendAddItem(id, (int)EVENT_ID_ADD_VARIABLE_GROUP); 
    1653     // CContext* context = CContext::getCurrent(); 
    1654     // if (!context->hasServer) 
    1655     // { 
    1656     //    CContextClient* client = context->client; 
    1657  
    1658     //    CEventClient event(this->getType(),EVENT_ID_ADD_VARIABLE_GROUP); 
    1659     //    if (client->isServerLeader()) 
    1660     //    { 
    1661     //      CMessage msg; 
    1662     //      msg << this->getId(); 
    1663     //      msg << id; 
    1664     //      const std::list<int>& ranks = client->getRanksServerLeader(); 
    1665     //      for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    1666     //        event.push(*itRank,1,msg); 
    1667     //      client->sendEvent(event); 
    1668     //    } 
    1669     //    else client->sendEvent(event); 
    1670     // } 
    16711521   } 
    16721522 
Note: See TracChangeset for help on using the changeset viewer.