Ignore:
Timestamp:
11/10/16 13:29:57 (7 years ago)
Author:
mhnguyen
Message:

First working version.
There are more things to do with it

File:
1 edited

Legend:

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

    r970 r987  
    845845  } 
    846846 
     847  // void CAxis::sendServerAttribut(const std::vector<int>& globalDim, int orderPositionInGrid, 
     848  //                                CServerDistributionDescription::ServerDistributionType distType) 
     849  // { 
     850  //   CContext* context = CContext::getCurrent(); 
     851  //   CContextClient* client = context->client; 
     852  //   int nbServer = client->serverSize; 
     853 
     854  //   CServerDistributionDescription serverDescription(globalDim, nbServer); 
     855  //   serverDescription.computeServerDistribution(); 
     856 
     857  //   std::vector<std::vector<int> > serverIndexBegin = serverDescription.getServerIndexBegin(); 
     858  //   std::vector<std::vector<int> > serverDimensionSizes = serverDescription.getServerDimensionSizes(); 
     859 
     860  //   CEventClient event(getType(),EVENT_ID_SERVER_ATTRIBUT); 
     861  //   if (client->isServerLeader()) 
     862  //   { 
     863  //     std::list<CMessage> msgs; 
     864 
     865  //     const std::list<int>& ranks = client->getRanksServerLeader(); 
     866  //     for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     867  //     { 
     868  //       // Use const int to ensure CMessage holds a copy of the value instead of just a reference 
     869  //       const int begin = serverIndexBegin[*itRank][orderPositionInGrid]; 
     870  //       const int ni    = serverDimensionSizes[*itRank][orderPositionInGrid]; 
     871  //       const int end   = begin + ni - 1; 
     872 
     873  //       msgs.push_back(CMessage()); 
     874  //       CMessage& msg = msgs.back(); 
     875  //       msg << this->getId(); 
     876  //       msg << ni << begin << end; 
     877  //       msg << global_zoom_begin.getValue() << global_zoom_n.getValue(); 
     878  //       msg << isCompressible_; 
     879 
     880  //       event.push(*itRank,1,msg); 
     881  //     } 
     882  //     client->sendEvent(event); 
     883  //   } 
     884  //   else client->sendEvent(event); 
     885  // } 
     886 
    847887  void CAxis::sendServerAttribut(const std::vector<int>& globalDim, int orderPositionInGrid, 
    848888                                 CServerDistributionDescription::ServerDistributionType distType) 
    849889  { 
    850890    CContext* context = CContext::getCurrent(); 
    851     CContextClient* client = context->client; 
    852     int nbServer = client->serverSize; 
     891 
     892    CContextClient* contextClientTmp = (0 != context->clientPrimServer) ? context->clientPrimServer  
     893                                                                        : context->client; 
     894 
     895     
     896    int nbServer = contextClientTmp->serverSize; 
    853897 
    854898    CServerDistributionDescription serverDescription(globalDim, nbServer); 
     
    858902    std::vector<std::vector<int> > serverDimensionSizes = serverDescription.getServerDimensionSizes(); 
    859903 
     904    globalDimGrid.resize(globalDim.size()); 
     905    for (int idx = 0; idx < globalDim.size(); ++idx) globalDimGrid(idx) = globalDim[idx]; 
     906 
    860907    CEventClient event(getType(),EVENT_ID_SERVER_ATTRIBUT); 
    861     if (client->isServerLeader()) 
     908    if (contextClientTmp->isServerLeader()) 
    862909    { 
    863910      std::list<CMessage> msgs; 
    864911 
    865       const std::list<int>& ranks = client->getRanksServerLeader(); 
     912      const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
    866913      for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    867914      { 
     
    877924        msg << global_zoom_begin.getValue() << global_zoom_n.getValue(); 
    878925        msg << isCompressible_; 
     926        msg << orderPositionInGrid; 
     927        msg << globalDimGrid; 
    879928 
    880929        event.push(*itRank,1,msg); 
    881930      } 
    882       client->sendEvent(event); 
    883     } 
    884     else client->sendEvent(event); 
     931      contextClientTmp->sendEvent(event); 
     932    } 
     933    else contextClientTmp->sendEvent(event); 
    885934  } 
    886935 
     
    891940    *buffer >> axisId; 
    892941    get(axisId)->recvServerAttribut(*buffer); 
     942 
     943    CContext* context = CContext::getCurrent(); 
     944    if (context->hasClient && context->hasServer) 
     945    { 
     946      std::vector<int> globalDim(get(axisId)->globalDimGrid.numElements()); 
     947      for (int idx = 0; idx < globalDim.size(); ++idx) globalDim[idx] = get(axisId)->globalDimGrid(idx); 
     948      get(axisId)->sendServerAttribut(globalDim, get(axisId)->orderPosInGrid,  
     949                                      CServerDistributionDescription::BAND_DISTRIBUTION); 
     950    } 
    893951  } 
    894952 
     
    900958    buffer >> global_zoom_begin_tmp >> global_zoom_n_tmp; 
    901959    buffer >> isCompressible_; 
     960    buffer >> orderPosInGrid; 
     961    buffer >> globalDimGrid; 
     962 
    902963    global_zoom_begin = global_zoom_begin_tmp; 
    903964    global_zoom_n  = global_zoom_n_tmp; 
Note: See TracChangeset for help on using the changeset viewer.