Changeset 730 for XIOS


Ignore:
Timestamp:
10/13/15 15:14:22 (9 years ago)
Author:
rlacroix
Message:

Fix: Really abide by the automatic buffer size mode (performance or memory).

Location:
XIOS/trunk/src/node
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/node/context.cpp

    r729 r730  
    2525      : CObjectTemplate<CContext>(), CContextAttributes() 
    2626      , calendar(), hasClient(false), hasServer(false), isPostProcessed(false), finalized(false) 
    27       , dataSize_(), idServer_(), client(0), server(0) 
     27      , idServer_(), client(0), server(0) 
    2828   { /* Ne rien faire de plus */ } 
    2929 
     
    3131      : CObjectTemplate<CContext>(id), CContextAttributes() 
    3232      , calendar(), hasClient(false), hasServer(false), isPostProcessed(false), finalized(false) 
    33       , dataSize_(), idServer_(), client(0), server(0) 
     33      , idServer_(), client(0), server(0) 
    3434   { /* Ne rien faire de plus */ } 
    3535 
     
    795795     CFile::mode_attr::t_enum mode = hasClient ? CFile::mode_attr::write : CFile::mode_attr::read; 
    796796 
    797      // Set of grid used by enabled fields 
    798      std::set<StdString> usedGrid; 
     797     std::map<int, StdSize> dataSize; 
    799798 
    800799     // Find all reference domain and axis of all active fields 
    801      int numEnabledFiles = this->enabledFiles.size(); 
    802      for (int i = 0; i < numEnabledFiles; ++i) 
     800     size_t numEnabledFiles = this->enabledFiles.size(); 
     801     for (size_t i = 0; i < numEnabledFiles; ++i) 
    803802     { 
    804803       CFile* file = this->enabledFiles[i]; 
     
    808807       { 
    809808         std::vector<CField*> enabledFields = file->getEnabledFields(); 
    810          int numEnabledFields = enabledFields.size(); 
    811          for (int j = 0; j < numEnabledFields; ++j) 
     809         size_t numEnabledFields = enabledFields.size(); 
     810         for (size_t j = 0; j < numEnabledFields; ++j) 
    812811         { 
    813            StdString currentGrid = enabledFields[j]->grid->getId(); 
    814812           const std::map<int, StdSize> mapSize = enabledFields[j]->getGridDataSize(); 
    815            if (dataSize_.empty()) 
     813           std::map<int, StdSize>::const_iterator it = mapSize.begin(), itE = mapSize.end(); 
     814           for (; it != itE; ++it) 
    816815           { 
    817              dataSize_ = mapSize; 
    818              usedGrid.insert(currentGrid); 
    819            } 
    820            else 
    821            { 
    822              std::map<int, StdSize>::const_iterator it = mapSize.begin(), itE = mapSize.end(); 
    823              if (usedGrid.find(currentGrid) == usedGrid.end()) 
    824              { 
    825                for (; it != itE; ++it) 
    826                { 
    827                  if (0 < dataSize_.count(it->first)) dataSize_[it->first] += it->second; 
    828                  else dataSize_.insert(make_pair(it->first, it->second)); 
    829                } 
    830              } else 
    831              { 
    832                for (; it != itE; ++it) 
    833                { 
    834                  if (0 < dataSize_.count(it->first)) 
    835                   if (CXios::isOptPerformance) dataSize_[it->first] += it->second; 
    836                   else 
    837                   { 
    838                     if (dataSize_[it->first] < it->second) dataSize_[it->first] = it->second; 
    839                   } 
    840                  else dataSize_.insert(make_pair(it->first, it->second)); 
    841                } 
    842              } 
     816             // If dataSize[it->first] does not exist, it will be zero-initialized 
     817             // so we can use it safely without checking for its existance 
     818             if (CXios::isOptPerformance) 
     819               dataSize[it->first] += it->second; 
     820             else if (dataSize[it->first] < it->second) 
     821               dataSize[it->first] = it->second; 
    843822           } 
    844823         } 
     
    846825     } 
    847826 
    848      return dataSize_; 
     827     return dataSize; 
    849828   } 
    850829 
  • XIOS/trunk/src/node/context.hpp

    r711 r730  
    222222         bool isPostProcessed; 
    223223         bool finalized; 
    224          std::map<int, StdSize> dataSize_; 
    225224         StdString idServer_; 
    226225         CGarbageCollector garbageCollector; 
Note: See TracChangeset for help on using the changeset viewer.