Changeset 1345


Ignore:
Timestamp:
11/24/17 15:13:47 (6 years ago)
Author:
oabramkina
Message:

In addition to r1294: all domain/axis attributes are only sent to secondary-server pools that need them (and not to all pools).

Location:
XIOS/dev/XIOS_DEV_CMIP6/src/node
Files:
5 edited

Legend:

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

    r1337 r1345  
    2626      , transformationMap_(), hasValue(false), hasLabel(false) 
    2727      , computedWrittenIndex_(false) 
     28          , clients() 
    2829   { 
    2930   } 
     
    3738      , transformationMap_(), hasValue(false), hasLabel(false) 
    3839      , computedWrittenIndex_(false) 
     40          , clients() 
    3941   { 
    4042   } 
     
    839841                                        CServerDistributionDescription::ServerDistributionType distType) 
    840842  { 
    841     CContext* context = CContext::getCurrent(); 
    842  
    843     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    844     for (int i = 0; i < nbSrvPools; ++i) 
    845     { 
    846       CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] 
    847                                                                          : context->client; 
    848       int nbServer = contextClientTmp->serverSize; 
     843    std::set<CContextClient*>::iterator it; 
     844    for (it=clients.begin(); it!=clients.end(); ++it) 
     845    { 
     846      CContextClient* client = *it; 
     847      int nbServer = client->serverSize; 
    849848 
    850849      CServerDistributionDescription serverDescription(globalDim, nbServer); 
     
    855854 
    856855      CEventClient event(getType(),EVENT_ID_DISTRIBUTION_ATTRIBUTE); 
    857       if (contextClientTmp->isServerLeader()) 
     856      if (client->isServerLeader()) 
    858857      { 
    859858        std::list<CMessage> msgs; 
    860859 
    861         const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     860        const std::list<int>& ranks = client->getRanksServerLeader(); 
    862861        for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    863862        { 
     
    875874          event.push(*itRank,1,msg); 
    876875        } 
    877         contextClientTmp->sendEvent(event); 
    878       } 
    879       else contextClientTmp->sendEvent(event); 
     876        client->sendEvent(event); 
     877      } 
     878      else client->sendEvent(event); 
    880879    } 
    881880  } 
     
    960959  void CAxis::sendNonDistributedAttributes() 
    961960  { 
    962     CContext* context = CContext::getCurrent(); 
    963  
    964     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
    965     for (int p = 0; p < nbSrvPools; ++p) 
    966     { 
    967       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
     961    std::set<CContextClient*>::iterator it; 
     962    for (it=clients.begin(); it!=clients.end(); ++it) 
     963        { 
     964          CContextClient* client = *it; 
    968965 
    969966      CEventClient event(getType(), EVENT_ID_NON_DISTRIBUTED_ATTRIBUTES); 
     
    10861083  { 
    10871084    int ns, n, i, j, ind, nv, idx; 
    1088     CContext* context = CContext::getCurrent(); 
    1089      
    1090     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
    1091     for (int p = 0; p < nbSrvPools; ++p) 
    1092     { 
    1093       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
     1085    std::set<CContextClient*>::iterator it; 
     1086 
     1087    for (it=clients.begin(); it!=clients.end(); ++it) 
     1088    { 
     1089      CContextClient* client = *it; 
    10941090      int nbServer = client->serverSize; 
    10951091 
     
    14421438  } 
    14431439 
     1440  void CAxis::setContextClient(CContextClient* contextClient) 
     1441  { 
     1442    clients.insert(contextClient); 
     1443  } 
     1444 
    14441445  void CAxis::parse(xml::CXMLNode & node) 
    14451446  { 
  • XIOS/dev/XIOS_DEV_CMIP6/src/node/axis.hpp

    r1337 r1345  
    9494         virtual void parse(xml::CXMLNode & node); 
    9595 
     96         void setContextClient(CContextClient* contextClient); 
     97 
    9698         /// Accesseurs statiques /// 
    9799         static StdString GetName(void); 
     
    150152 
    151153      private: 
     154 
     155/** Clients that have to send a domain. There can be multiple clients in case of secondary server, otherwise only one client. */ 
     156         std::set<CContextClient*> clients; 
     157 
    152158         bool isChecked; 
    153159         bool areClientAttributesChecked_; 
  • XIOS/dev/XIOS_DEV_CMIP6/src/node/domain.cpp

    r1337 r1345  
    3333      , lonvalue(), latvalue(), bounds_lonvalue(), bounds_latvalue() 
    3434      , globalLocalIndexMap_(), computedWrittenIndex_(false) 
     35          , clients() 
    3536   { 
    3637   } 
     
    4445      , lonvalue(), latvalue(), bounds_lonvalue(), bounds_latvalue() 
    4546      , globalLocalIndexMap_(), computedWrittenIndex_(false) 
     47          , clients() 
    4648   { 
    4749    } 
     
    20652067  { 
    20662068    int ns, n, i, j, ind, nv, idx; 
    2067     CContext* context = CContext::getCurrent(); 
    2068  
    2069     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    2070     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    2071     for (int p = 0; p < nbSrvPools; ++p) 
     2069    std::set<CContextClient*>::iterator it; 
     2070    for (it=clients.begin(); it!=clients.end(); ++it) 
    20722071    { 
    2073       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
     2072      CContextClient* client = *it; 
     2073 
    20742074      int serverSize = client->serverSize; 
    20752075      CEventClient eventIndex(getType(), EVENT_ID_INDEX); 
     
    21152115  void CDomain::sendDistributionAttributes(void) 
    21162116  { 
    2117     CContext* context = CContext::getCurrent(); 
    2118      // Use correct context client to send message 
    2119     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    2120     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    2121     for (int i = 0; i < nbSrvPools; ++i) 
     2117    std::set<CContextClient*>::iterator it; 
     2118    for (it=clients.begin(); it!=clients.end(); ++it) 
    21222119    { 
    2123       CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] 
    2124                                                                          : context->client;     
    2125       int nbServer = contextClientTmp->serverSize; 
     2120      CContextClient* client = *it; 
     2121      int nbServer = client->serverSize; 
    21262122      std::vector<int> nGlobDomain(2); 
    21272123      nGlobDomain[0] = this->ni_glo; 
     
    21362132 
    21372133      CEventClient event(getType(),EVENT_ID_SERVER_ATTRIBUT); 
    2138       if (contextClientTmp->isServerLeader()) 
     2134      if (client->isServerLeader()) 
    21392135      { 
    21402136        std::list<CMessage> msgs; 
    21412137 
    2142         const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     2138        const std::list<int>& ranks = client->getRanksServerLeader(); 
    21432139        for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    21442140        { 
     
    21582154          event.push(*itRank,1,msg); 
    21592155        } 
    2160         contextClientTmp->sendEvent(event); 
    2161       } 
    2162       else contextClientTmp->sendEvent(event); 
     2156        client->sendEvent(event); 
     2157      } 
     2158      else client->sendEvent(event); 
    21632159    } 
    21642160  } 
     
    21702166  { 
    21712167    int ns, n, i, j, ind, nv, idx; 
    2172     CContext* context = CContext::getCurrent(); 
    2173  
    2174     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    2175     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    2176     for (int p = 0; p < nbSrvPools; ++p) 
     2168    std::set<CContextClient*>::iterator it; 
     2169    for (it=clients.begin(); it!=clients.end(); ++it) 
    21772170    { 
    2178       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
     2171      CContextClient* client = *it; 
    21792172      int serverSize = client->serverSize; 
    21802173 
     
    22192212 
    22202213    int ns, n, i, j, ind, nv, idx; 
    2221     CContext* context = CContext::getCurrent(); 
    2222  
    2223     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    2224     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    2225     for (int p = 0; p < nbSrvPools; ++p) 
     2214    std::set<CContextClient*>::iterator it; 
     2215 
     2216    for (it=clients.begin(); it!=clients.end(); ++it) 
    22262217    { 
    2227       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
     2218      CContextClient* client = *it; 
    22282219      int serverSize = client->serverSize; 
    22292220 
     
    22712262 
    22722263    int ns, n, i, j, ind, nv, idx; 
    2273     CContext* context = CContext::getCurrent(); 
    2274  
    2275     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    2276     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    2277     for (int p = 0; p < nbSrvPools; ++p) 
     2264    std::set<CContextClient*>::iterator it; 
     2265    for (it=clients.begin(); it!=clients.end(); ++it) 
    22782266    { 
    2279       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
     2267      CContextClient* client = *it; 
    22802268      int serverSize = client->serverSize; 
    22812269 
     
    23682356  { 
    23692357    int ns, n, i, j, ind, nv, idx; 
    2370     CContext* context = CContext::getCurrent(); 
    2371  
    2372     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    2373     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    2374     for (int p = 0; p < nbSrvPools; ++p) 
     2358    std::set<CContextClient*>::iterator it; 
     2359    for (it=clients.begin(); it!=clients.end(); ++it) 
    23752360    { 
    2376       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
     2361      CContextClient* client = *it; 
     2362 
    23772363      int serverSize = client->serverSize; 
    23782364 
     
    31283114  } 
    31293115 
     3116  void CDomain::setContextClient(CContextClient* contextClient) 
     3117  { 
     3118    clients.insert(contextClient); 
     3119  } 
     3120 
    31303121  /*! 
    31313122    Parse children nodes of a domain in xml file. 
  • XIOS/dev/XIOS_DEV_CMIP6/src/node/domain.hpp

    r1337 r1345  
    7171         
    7272         virtual void parse(xml::CXMLNode & node); 
     73 
     74         void setContextClient(CContextClient* contextClient); 
    7375 
    7476         /// Vérifications /// 
     
    199201 
    200202       private:          
     203 
     204/** Clients that have to send a domain. There can be multiple clients in case of secondary server, otherwise only one client. */ 
     205         std::set<CContextClient*> clients; 
     206 
    201207         bool doZoomByIndex_; 
    202208         bool isChecked, computedWrittenIndex_; 
  • XIOS/dev/XIOS_DEV_CMIP6/src/node/grid.cpp

    r1340 r1345  
    25092509  { 
    25102510    clients.insert(contextClient); 
     2511    for (int i=0; i<this->getDomains().size(); i++) 
     2512        this->getDomains()[i]->setContextClient(contextClient); 
     2513    for (int i=0; i<this->getAxis().size(); i++) 
     2514        this->getAxis()[i]->setContextClient(contextClient); 
    25112515  } 
    25122516 
Note: See TracChangeset for help on using the changeset viewer.