Changeset 413


Ignore:
Timestamp:
01/19/13 19:31:15 (10 years ago)
Author:
ymipsl
Message:

Performance improvment on Lustre

YM

Location:
XIOS/trunk/src/output
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/output/nc4_data_output.cpp

    r399 r413  
    527527         CContext* context = CContext::getCurrent() ; 
    528528//          if (field->getRelFile()->isSyncTime()) SuperClassWriter::sync() ; 
     529         CContextServer* server=context->server ; 
    529530 
    530531         CGrid* grid = field->grid ; 
     
    543544              
    544545         CArray<double,1> time_data(1) ; 
     546          
    545547         if (field->operation.getValue()=="instant") time_data(0) = Time(*field->last_Write_srv) 
    546548                                                                      -Time(context->calendar->getTimeOrigin()); 
    547549         else time_data(0) = (Time(*field->last_Write_srv)+Time(*field->lastlast_Write_srv))/2 
    548550                               -Time(context->calendar->getTimeOrigin()); 
     551          
     552          
     553         bool isRoot ; 
     554         if (server->intraCommRank==0) isRoot=true ; 
     555         else isRoot=false ; 
    549556            
    550557         if (grid->hasAxis()) // 3D 
     
    578585                 } 
    579586                 SuperClassWriter::writeData(field_data3D, fieldid, isCollective, field->getNStep()-1,&start,&count ); 
    580                  SuperClassWriter::writeData(time_data, oss.str(), isCollective, field->getNStep()-1 ); 
     587                 SuperClassWriter::writeTimeAxisData(time_data, oss.str(), isCollective, field->getNStep()-1,isRoot ); 
    581588                 break; 
    582589              } 
     
    613620 
    614621                 SuperClassWriter::writeData(field_data2D, fieldid, isCollective, field->getNStep()-1,&start,&count); 
    615                  SuperClassWriter::writeData(time_data, oss.str(), isCollective, field->getNStep()-1); 
    616                  break; 
     622                 SuperClassWriter::writeTimeAxisData(time_data, oss.str(), isCollective, field->getNStep()-1,isRoot); 
     623                 break;  
    617624               
    618625              } 
  • XIOS/trunk/src/output/onetcdf4.cpp

    r401 r413  
    350350            it  = sizes.begin(), end = sizes.end(); 
    351351         int i = 0; 
    352        
     352         cout<<"nc Size -->"<<sizes.size()<<endl ; 
    353353         if (iddims.begin()->compare(this->getUnlimitedDimensionName()) == 0) 
    354354         { 
     
    379379          
    380380      } 
    381  
    382       //--------------------------------------------------------------- 
    383  
     381       
     382                      
     383  
    384384      template <> 
    385385         void CONetCDF4::writeData_(int grpid, int varid, 
     
    425425         this->writeData_(grpid, varid, sstart, scount, data.dataFirst()); 
    426426      } 
     427 
     428      void CONetCDF4::writeTimeAxisData(const CArray<double, 1>& data, const StdString & name, 
     429                                        bool collective, StdSize record, bool isRoot) 
     430      { 
     431         int grpid = this->getCurrentGroup(); 
     432         int varid = this->getVariable(name); 
     433          
     434         map<int,size_t>::iterator it=timeAxis.find(varid) ; 
     435         if (it==timeAxis.end()) timeAxis[varid]=record ; 
     436         else  
     437         { 
     438           if (it->second >= record) return ; 
     439           else it->second =record ; 
     440         } 
     441          
     442         StdSize array_size = 1; 
     443         std::vector<StdSize> sstart, scount; 
     444          
     445         if (this->wmpi && collective) 
     446         CheckError(nc_var_par_access(grpid, varid, NC_COLLECTIVE)); 
     447         if (this->wmpi && !collective) 
     448         CheckError(nc_var_par_access(grpid, varid, NC_INDEPENDENT)); 
     449          
     450         this->getWriteDataInfos(name, record, array_size,  sstart, scount, NULL, NULL); 
     451         if (using_netcdf_internal)  if (!isRoot) { sstart[0]=sstart[0]+1 ; scount[0]=0 ;} 
     452         this->writeData_(grpid, varid, sstart, scount, data.dataFirst()); 
     453       } 
    427454 
    428455      //--------------------------------------------------------------- 
  • XIOS/trunk/src/output/onetcdf4.hpp

    r382 r413  
    6464                              const std::vector<StdSize> * count = NULL); 
    6565 
    66             void writeData(const CArray<int, 2>& data, const StdString & name); 
    67  
     66            void writeData(const CArray<int, 2>& data, const StdString & name);      
     67            void writeTimeAxisData(const CArray<double,1>& data, const StdString & name, 
     68                                   bool collective, StdSize record, bool Isroot) ; 
    6869            /// Accesseur /// 
    6970            const CONetCDF4Path & getCurrentPath(void) const; 
     
    115116            int ncidp; 
    116117            bool wmpi; 
    117  
     118            map<int,size_t> timeAxis ; 
    118119      }; // class CONetCDF4 
    119120 
Note: See TracChangeset for help on using the changeset viewer.