Ignore:
Timestamp:
09/10/20 13:51:02 (4 years ago)
Author:
ymipsl
Message:

Big update on on going work related to data distribution and transfer between clients and servers.
Revisite of the source and store filter using "connectors".

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/gatherer_connector.hpp

    r1918 r1930  
    2929       
    3030      template<typename T> 
    31       void transfer(map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut) 
     31      void transfer(int sizeT, map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut) 
    3232      { 
    33         dataOut.resize(dstSize_) ; 
     33        // for future, make a specific transfer function for sizeT=1 to avoid multiplication (increasing performance) 
     34        dataOut.resize(dstSize_*sizeT) ;   
    3435        T* output = dataOut.dataFirst() ; 
    3536        for(auto& data : dataIn) 
     
    3940          auto& connector=connector_[rank] ; 
    4041          auto& mask=mask_[rank] ; 
    41           int size=data.second.numElements() ; 
     42          int size=mask.size() ; 
    4243 
    4344          for(int i=0, j=0 ;i<size;i++) 
     
    4546            if (mask[i])  
    4647            { 
    47               output[connector[j]] = input[i] ; 
     48              int cj = connector[j]*sizeT ; 
     49              int ci = i*sizeT ; 
     50              for (int k=0;k<sizeT;k++) output[cj+k] = input[ci+k] ; 
    4851              j++ ; 
    4952            } 
     
    5255      } 
    5356     
     57      template<typename T> 
     58      void transfer(map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut) 
     59      { 
     60        transfer(1,dataIn,dataOut) ; 
     61      } 
    5462 
    5563      template<typename T> 
     
    93101      void transfer(map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut, T missingValue) 
    94102      { 
    95         dataOut.resize(dstSize_) ; 
    96         dataOut=missingValue ; 
    97         transfer(map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut) ; 
     103        transfer(1, dataIn, dataout, missingValue) 
    98104      } 
    99105       
    100106      template<typename T> 
    101       void transfer(CEventServer& event, CArray<T,1>& dataOut) 
     107      void transfer(int sizeT, map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut, T missingValue) 
     108      { 
     109        dataOut.resize(dstSize_*sizeT) ; 
     110        dataOut=missingValue ; 
     111        transfer(sizeT, dataIn, dataOut) ; 
     112      } 
     113 
     114      template<typename T> 
     115      void transfer(CEventServer& event, int sizeT, CArray<T,1>& dataOut) 
    102116      { 
    103117        map<int, CArray<T,1>> dataIn ; 
     
    107121          (*subEvent.buffer) >> data ; 
    108122        } 
    109         transfer(dataIn, dataOut) ; 
     123        transfer(sizeT, dataIn, dataOut) ; 
     124      } 
     125       
     126      template<typename T> 
     127      void transfer(CEventServer& event, CArray<T,1>& dataOut) 
     128      { 
     129        transfer(event, 1, dataOut) ; 
     130      } 
     131 
     132      template<typename T> 
     133      void transfer(CEventServer& event, int sizeT, CArray<T,1>& dataOut, T missingValue) 
     134      { 
     135        map<int, CArray<T,1>> dataIn ; 
     136        for (auto& subEvent : event.subEvents)  
     137        { 
     138          auto& data = dataIn[subEvent.rank];  
     139          (*subEvent.buffer) >> data ; 
     140        } 
     141        transfer(sizeT, dataIn, dataOut, missingValue) ; 
    110142      } 
    111143 
     
    119151          (*subEvent.buffer) >> data ; 
    120152        } 
    121         transfer(dataIn, dataOut, missingValue) ; 
     153        transfer(1, dataIn, dataOut, missingValue) ; 
    122154      } 
    123155 
Note: See TracChangeset for help on using the changeset viewer.