Changeset 834


Ignore:
Timestamp:
04/08/16 15:00:24 (5 years ago)
Author:
mhnguyen
Message:

Making some minor changes in distribution client

+) Seperate global index computation and local index computation

Test
+) On Curie
+) OK

Location:
XIOS/trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/distribution_client.cpp

    r833 r834  
    2020   , localDataIndex_(), localMaskIndex_() 
    2121   , globalLocalDataSendToServerMap_() 
    22    , infoIndex_() 
     22   , infoIndex_(), isComputed_(false) 
    2323{ 
    2424} 
     
    3333   , localDataIndex_(), localMaskIndex_() 
    3434   , globalLocalDataSendToServerMap_() 
    35    , infoIndex_() 
     35   , infoIndex_(), isComputed_(false) 
    3636{ 
    3737  readDistributionInfo(grid); 
    3838  createGlobalIndex(); 
    39   createGlobalIndexSendToServer(); 
     39//  createGlobalIndexSendToServer(); 
    4040} 
    4141 
     
    204204 
    205205      dataBegin_.at(indexMap_[idx]+1) = domList[domIndex]->data_jbegin.getValue(); //(2 == domList[domIndex]->data_dim) ? domList[domIndex]->data_jbegin.getValue() : -1; 
    206       dataIndex_.at(indexMap_[idx]+1).resize(domList[domIndex]->data_j_index.numElements()); 
    207       dataIndex_.at(indexMap_[idx]+1) = domList[domIndex]->data_j_index; 
    208       infoIndex_.at(indexMap_[idx]+1).resize(domList[domIndex]->j_index.numElements()); 
    209       infoIndex_.at(indexMap_[idx]+1) = domList[domIndex]->j_index; 
     206//      dataIndex_.at(indexMap_[idx]+1).resize(domList[domIndex]->data_j_index.numElements()); 
     207      dataIndex_.at(indexMap_[idx]+1) = &(domList[domIndex]->data_j_index); 
     208//      infoIndex_.at(indexMap_[idx]+1).resize(domList[domIndex]->j_index.numElements()); 
     209      infoIndex_.at(indexMap_[idx]+1) = &(domList[domIndex]->j_index); 
    210210 
    211211      // On the i axis 
     
    218218 
    219219      dataBegin_.at(indexMap_[idx]) = domList[domIndex]->data_ibegin.getValue(); 
    220       dataIndex_.at(indexMap_[idx]).resize(domList[domIndex]->data_i_index.numElements()); 
    221       dataIndex_.at(indexMap_[idx]) = domList[domIndex]->data_i_index; 
    222       infoIndex_.at(indexMap_[idx]).resize(domList[domIndex]->i_index.numElements()); 
    223       infoIndex_.at(indexMap_[idx]) = domList[domIndex]->i_index; 
     220//      dataIndex_.at(indexMap_[idx]).resize(domList[domIndex]->data_i_index.numElements()); 
     221      dataIndex_.at(indexMap_[idx]) = &(domList[domIndex]->data_i_index); 
     222//      infoIndex_.at(indexMap_[idx]).resize(domList[domIndex]->i_index.numElements()); 
     223      infoIndex_.at(indexMap_[idx]) = &(domList[domIndex]->i_index); 
    224224 
    225225      dataNIndex_.at(idx) = domList[domIndex]->data_i_index.numElements(); 
     
    240240 
    241241      dataBegin_.at(indexMap_[idx]) = axisList[axisIndex]->data_begin.getValue(); 
    242       dataIndex_.at(indexMap_[idx]).resize(axisList[axisIndex]->data_index.numElements()); 
    243       dataIndex_.at(indexMap_[idx]) = axisList[axisIndex]->data_index; 
    244       infoIndex_.at(indexMap_[idx]).resize(axisList[axisIndex]->index.numElements()); 
    245       infoIndex_.at(indexMap_[idx]) = axisList[axisIndex]->index; 
     242//      dataIndex_.at(indexMap_[idx]).resize(axisList[axisIndex]->data_index.numElements()); 
     243      dataIndex_.at(indexMap_[idx]) = &(axisList[axisIndex]->data_index); 
     244//      infoIndex_.at(indexMap_[idx]).resize(axisList[axisIndex]->index.numElements()); 
     245      infoIndex_.at(indexMap_[idx]) = &(axisList[axisIndex]->index); 
    246246      dataNIndex_.at(idx) = axisList[axisIndex]->data_index.numElements(); 
    247247      dataDims_.at(idx) = 1; 
     
    281281      for (int j = 0; j < dataNIndex_[i]; ++j) 
    282282      { 
    283         iIdx = getDomainIndex(dataIndex_[indexMap_[i]](j), dataIndex_[indexMap_[i]+1](j), 
     283        iIdx = getDomainIndex((*dataIndex_[indexMap_[i]])(j), (*dataIndex_[indexMap_[i]+1])(j), 
    284284                              dataBegin_[indexMap_[i]], dataBegin_[indexMap_[i]+1], 
    285285                              dataDims_[i], nLocal_[indexMap_[i]], jIdx); 
     
    320320      for (int j = 0; j < dataNIndex_[i]; ++j) 
    321321      { 
    322         iIdx = getAxisIndex(dataIndex_[indexMap_[i]](j), dataBegin_[indexMap_[i]], nLocal_[indexMap_[i]]); 
     322        iIdx = getAxisIndex((*dataIndex_[indexMap_[i]])(j), dataBegin_[indexMap_[i]], nLocal_[indexMap_[i]]); 
    323323        if ((iIdx >= nBeginLocal_[indexMap_[i]]) && 
    324324           (iIdx < nLocal_[indexMap_[i]]) && (axisMasks_[idxAxis](iIdx))) 
     
    341341  this->globalIndex_.resize(ssize); 
    342342  std::vector<int> idxLoop(this->numElement_,0); 
    343   int innnerLoopSize = infoIndex_[0].numElements(); 
     343  int innnerLoopSize = (*infoIndex_[0]).numElements(); 
    344344  while (idx < ssize) 
    345345  { 
    346346    for (int i = 0; i < this->numElement_; ++i) 
    347347    { 
    348       if (idxLoop[i] == infoIndex_[indexMap_[i]].numElements()) 
     348      if (idxLoop[i] == (*infoIndex_[indexMap_[i]]).numElements()) 
    349349      { 
    350350        idxLoop[i] = 0; 
     
    355355    for (int i = 0; i < innnerLoopSize; ++i) 
    356356    { 
    357       size_t globalIndex = infoIndex_[0](idxLoop[0]); 
     357      size_t globalIndex = (*infoIndex_[0])(idxLoop[0]); 
    358358      size_t mulDim = 1; 
    359359      for (int idxElement = 0; idxElement < this->numElement_; ++idxElement) 
     
    365365          { 
    366366            mulDim *= nGlob_[indexMap_[idxElement]+j-1]; 
    367             globalIndex += (infoIndex_[indexMap_[idxElement]+j](idxLoop[idxElement]))*mulDim; 
     367            globalIndex += ((*infoIndex_[indexMap_[idxElement]+j])(idxLoop[idxElement]))*mulDim; 
    368368          } 
    369369        } 
     
    373373          { 
    374374            mulDim *= nGlob_[indexMap_[idxElement]-1]; 
    375             globalIndex += (infoIndex_[indexMap_[idxElement]](idxLoop[idxElement]))*mulDim; 
     375            globalIndex += ((*infoIndex_[indexMap_[idxElement]])(idxLoop[idxElement]))*mulDim; 
    376376          } 
    377377        } 
     
    397397void CDistributionClient::createGlobalIndexSendToServer() 
    398398{ 
     399  if (isComputed_) return; 
     400  isComputed_ = true; 
    399401  createLocalDomainDataIndex(); 
    400402  createLocalAxisDataIndex(); 
     
    487489          { 
    488490            actualIdx = currentIndex[indexMap_[idxElement]]+currentIndex[indexMap_[idxElement]+1]*nLocal_[indexMap_[idxElement]]; 
    489             isIndexOnServer = isIndexOnServer && ((infoIndex_[indexMap_[idxElement]](actualIdx)) <= nZoomEnd_[indexMap_[idxElement]]) 
    490                                               && (nZoomBegin_[indexMap_[idxElement]] <= (infoIndex_[indexMap_[idxElement]](actualIdx))) 
    491                                               && ((infoIndex_[indexMap_[idxElement]+1](actualIdx)) <= nZoomEnd_[indexMap_[idxElement]+1]) 
    492                                               && (nZoomBegin_[indexMap_[idxElement]+1] <= (infoIndex_[indexMap_[idxElement]+1](actualIdx))); 
     491            isIndexOnServer = isIndexOnServer && (((*infoIndex_[indexMap_[idxElement]])(actualIdx)) <= nZoomEnd_[indexMap_[idxElement]]) 
     492                                              && (nZoomBegin_[indexMap_[idxElement]] <= ((*infoIndex_[indexMap_[idxElement]])(actualIdx))) 
     493                                              && (((*infoIndex_[indexMap_[idxElement]+1])(actualIdx)) <= nZoomEnd_[indexMap_[idxElement]+1]) 
     494                                              && (nZoomBegin_[indexMap_[idxElement]+1] <= ((*infoIndex_[indexMap_[idxElement]+1])(actualIdx))); 
    493495          } 
    494496          else 
    495497          { 
    496             isIndexOnServer = isIndexOnServer && ((infoIndex_[indexMap_[idxElement]](currentIndex[indexMap_[idxElement]])) <= nZoomEnd_[indexMap_[idxElement]]) 
    497                                               && (nZoomBegin_[indexMap_[idxElement]] <= (infoIndex_[indexMap_[idxElement]](currentIndex[indexMap_[idxElement]]))); 
     498            isIndexOnServer = isIndexOnServer && (((*infoIndex_[indexMap_[idxElement]])(currentIndex[indexMap_[idxElement]])) <= nZoomEnd_[indexMap_[idxElement]]) 
     499                                              && (nZoomBegin_[indexMap_[idxElement]] <= ((*infoIndex_[indexMap_[idxElement]])(currentIndex[indexMap_[idxElement]]))); 
    498500          } 
    499501        } 
     
    616618          { 
    617619            actualIdx = currentIndex[indexMap_[idxElement]]+currentIndex[indexMap_[idxElement]+1]*nLocal_[indexMap_[idxElement]]; 
    618             isIndexOnServer = isIndexOnServer && ((infoIndex_[indexMap_[idxElement]](actualIdx)) <= nZoomEnd_[indexMap_[idxElement]]) 
    619                                               && (nZoomBegin_[indexMap_[idxElement]] <= (infoIndex_[indexMap_[idxElement]](actualIdx))) 
    620                                               && ((infoIndex_[indexMap_[idxElement]+1](actualIdx)) <= nZoomEnd_[indexMap_[idxElement]+1]) 
    621                                               && (nZoomBegin_[indexMap_[idxElement]+1] <= (infoIndex_[indexMap_[idxElement]+1](actualIdx))); 
     620            isIndexOnServer = isIndexOnServer && (((*infoIndex_[indexMap_[idxElement]])(actualIdx)) <= nZoomEnd_[indexMap_[idxElement]]) 
     621                                              && (nZoomBegin_[indexMap_[idxElement]] <= ((*infoIndex_[indexMap_[idxElement]])(actualIdx))) 
     622                                              && (((*infoIndex_[indexMap_[idxElement]+1])(actualIdx)) <= nZoomEnd_[indexMap_[idxElement]+1]) 
     623                                              && (nZoomBegin_[indexMap_[idxElement]+1] <= ((*infoIndex_[indexMap_[idxElement]+1])(actualIdx))); 
    622624          } 
    623625          else 
    624626          { 
    625             isIndexOnServer = isIndexOnServer && ((infoIndex_[indexMap_[idxElement]](currentIndex[indexMap_[idxElement]])) <= nZoomEnd_[indexMap_[idxElement]]) 
    626                                               && (nZoomBegin_[indexMap_[idxElement]] <= (infoIndex_[indexMap_[idxElement]](currentIndex[indexMap_[idxElement]]))); 
     627            isIndexOnServer = isIndexOnServer && (((*infoIndex_[indexMap_[idxElement]])(currentIndex[indexMap_[idxElement]])) <= nZoomEnd_[indexMap_[idxElement]]) 
     628                                              && (nZoomBegin_[indexMap_[idxElement]] <= ((*infoIndex_[indexMap_[idxElement]])(currentIndex[indexMap_[idxElement]]))); 
    627629          } 
    628630        } 
     
    632634          int actualIdx = (axisDomainOrder_(0)) ? currentIndex[0]+currentIndex[1]*nLocal_[0] 
    633635                                                : currentIndex[0]; 
    634           size_t globalIndex = infoIndex_[0](actualIdx); //idxLoop[0] + nBeginGlobal_[0]; 
     636          size_t globalIndex = (*infoIndex_[0])(actualIdx); //idxLoop[0] + nBeginGlobal_[0]; 
    635637          size_t mulDim = 1; 
    636638          for (int idxElement = 0; idxElement < this->numElement_; ++idxElement) 
     
    643645              { 
    644646                mulDim *= nGlob_[indexMap_[idxElement]+j-1]; 
    645                 globalIndex += (infoIndex_[indexMap_[idxElement]+j](actualIdx))*mulDim; 
     647                globalIndex += ((*infoIndex_[indexMap_[idxElement]+j])(actualIdx))*mulDim; 
    646648              } 
    647649            } 
     
    651653              { 
    652654                mulDim *= nGlob_[indexMap_[idxElement]-1]; 
    653                 globalIndex += (infoIndex_[indexMap_[idxElement]](currentIndex[indexMap_[idxElement]]))*mulDim; 
     655                globalIndex += ((*infoIndex_[indexMap_[idxElement]])(currentIndex[indexMap_[idxElement]]))*mulDim; 
    654656              } 
    655657            } 
     
    712714  Return global local data mapping of client 
    713715*/ 
    714 const CDistributionClient::GlobalLocalDataMap& CDistributionClient::getGlobalLocalDataSendToServer() const 
    715 { 
     716const CDistributionClient::GlobalLocalDataMap& CDistributionClient::getGlobalLocalDataSendToServer() 
     717{ 
     718  if (!isComputed_) createGlobalIndexSendToServer(); 
    716719  return globalLocalDataSendToServerMap_; 
    717720} 
     
    720723  Return local data index of client 
    721724*/ 
    722 const std::vector<int>& CDistributionClient::getLocalDataIndexOnClient() const 
    723 { 
     725const std::vector<int>& CDistributionClient::getLocalDataIndexOnClient() 
     726{ 
     727  if (!isComputed_) createGlobalIndexSendToServer(); 
    724728  return localDataIndex_; 
    725729} 
     
    728732  Return local mask index of client 
    729733*/ 
    730 const std::vector<int>& CDistributionClient::getLocalMaskIndexOnClient() const 
    731 { 
     734const std::vector<int>& CDistributionClient::getLocalMaskIndexOnClient() 
     735{ 
     736  if (!isComputed_) createGlobalIndexSendToServer(); 
    732737  return localMaskIndex_; 
    733738} 
  • XIOS/trunk/src/distribution_client.hpp

    r831 r834  
    3737    CDistributionClient(int rank, CGrid* grid); 
    3838 
     39    void createGlobalIndexSendToServer(); 
     40 
    3941    /** Default destructor */ 
    4042    virtual ~CDistributionClient(); 
    4143 
    42     virtual const std::vector<int>& getLocalDataIndexOnClient() const; 
    43     const GlobalLocalDataMap& getGlobalLocalDataSendToServer() const; 
    44     const std::vector<int>& getLocalMaskIndexOnClient() const; 
     44    virtual const std::vector<int>& getLocalDataIndexOnClient(); 
     45    const GlobalLocalDataMap& getGlobalLocalDataSendToServer(); 
     46    const std::vector<int>& getLocalMaskIndexOnClient(); 
    4547 
    4648    std::vector<int> getNGlob() { return nGlob_; } 
     
    5658  protected: 
    5759    void createGlobalIndex(); 
    58     void createGlobalIndexSendToServer(); 
    5960    void readDistributionInfo(CGrid* grid); 
    6061    void readDistributionInfo(const std::vector<CDomain*>& domList, 
     
    9899    std::vector<int> dataDims_; //!< Data_dim, domain can have data_dim == 1 or 2 
    99100    std::vector<int> dataBegin_; //!< Data begin (data_ibegin, data_jbegin, etc) 
    100     std::vector<CArray<int,1> > dataIndex_; //!< Data index 
    101     std::vector<CArray<int,1> > infoIndex_; //!< i_index, j_index 
     101    std::vector<CArray<int,1>* > dataIndex_; //!< Data index 
     102    std::vector<CArray<int,1>* > infoIndex_; //!< i_index, j_index 
    102103 
    103104    std::vector<CArray<bool,1> > domainMasks_; //!< Domain mask 
     
    116117    int axisNum_; 
    117118    int domainNum_; 
     119    bool isComputed_; 
    118120 
    119121  private: 
  • XIOS/trunk/src/node/grid.cpp

    r831 r834  
    979979  } 
    980980 
    981   const CDistributionServer* CGrid::getDistributionServer() const 
     981  CDistributionServer* CGrid::getDistributionServer() 
    982982  { 
    983983    return serverDistribution_; 
    984984  } 
    985985 
    986   const CDistributionClient* CGrid::getDistributionClient() const 
     986  CDistributionClient* CGrid::getDistributionClient() 
    987987  { 
    988988    return clientDistribution_; 
  • XIOS/trunk/src/node/grid.hpp

    r824 r834  
    184184         int getOffsetWrittenIndexes() const; 
    185185 
    186          const CDistributionServer* getDistributionServer() const; 
    187          const CDistributionClient* getDistributionClient() const; 
     186         CDistributionServer* getDistributionServer(); 
     187         CDistributionClient* getDistributionClient(); 
    188188         CGridTransformation* getTransformations(); 
    189189 
Note: See TracChangeset for help on using the changeset viewer.