Changeset 1984 for XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution
- Timestamp:
- 12/06/20 22:14:56 (4 years ago)
- Location:
- XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution
- Files:
-
- 4 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/gatherer_connector.hpp
r1930 r1984 29 29 30 30 template<typename T> 31 void transfer(int sizeT, map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut)31 void transfer(int repeat, int sizeT, map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut) 32 32 { 33 33 // for future, make a specific transfer function for sizeT=1 to avoid multiplication (increasing performance) 34 dataOut.resize(dstSize_*sizeT) ; 35 T* output = dataOut.dataFirst() ; 34 size_t dstSlice = dstSize_*sizeT ; 35 dataOut.resize(repeat* dstSlice) ; 36 36 37 for(auto& data : dataIn) 37 38 { 39 T* output = dataOut.dataFirst() ; 38 40 int rank=data.first ; 39 41 auto input = data.second.dataFirst() ; … … 41 43 auto& mask=mask_[rank] ; 42 44 int size=mask.size() ; 43 44 for(int i=0, j=0 ;i<size;i++)45 { 46 if (mask[i])45 size_t srcSlice = size * sizeT ; 46 for(int l=0; l<repeat; l++) 47 { 48 for(int i=0, j=0 ;i<size;i++) 47 49 { 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] ; 51 j++ ; 50 if (mask[i]) 51 { 52 int cj = connector[j]*sizeT ; 53 int ci = i*sizeT ; 54 for (int k=0;k<sizeT;k++) output[cj+k] = input[ci+k] ; 55 j++ ; 56 } 52 57 } 58 input+=srcSlice ; 59 output+=dstSlice ; 53 60 } 54 61 } 62 } 63 64 template<typename T> 65 void transfer(int sizeT, map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut) 66 { 67 transfer(1, 1, dataIn, dataOut) ; 55 68 } 56 69 … … 101 114 void transfer(map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut, T missingValue) 102 115 { 103 transfer(1, dataIn, dataout, missingValue)116 transfer(1, 1, dataIn, dataout, missingValue) 104 117 } 105 118 … … 107 120 void transfer(int sizeT, map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut, T missingValue) 108 121 { 109 dataOut.resize(dstSize_*sizeT) ; 122 transfer(1, sizeT, dataIn, dataOut, missingValue) ; 123 } 124 125 template<typename T> 126 void transfer(int repeat , int sizeT, map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut, T missingValue) 127 { 128 dataOut.resize(repeat*dstSize_*sizeT) ; 110 129 dataOut=missingValue ; 111 transfer( sizeT, dataIn, dataOut) ;130 transfer(1, sizeT, dataIn, dataOut) ; 112 131 } 113 132 … … 121 140 (*subEvent.buffer) >> data ; 122 141 } 123 transfer( sizeT, dataIn, dataOut) ;142 transfer(1, sizeT, dataIn, dataOut) ; 124 143 } 125 144 … … 139 158 (*subEvent.buffer) >> data ; 140 159 } 141 transfer( sizeT, dataIn, dataOut, missingValue) ;160 transfer(1, sizeT, dataIn, dataOut, missingValue) ; 142 161 } 143 162 … … 151 170 (*subEvent.buffer) >> data ; 152 171 } 153 transfer(1, dataIn, dataOut, missingValue) ;172 transfer(1, 1, dataIn, dataOut, missingValue) ; 154 173 } 155 174 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_remote_connector.cpp
r1938 r1984 87 87 srcView_[nSrc-1]->getGlobalIndex(srcGlobalIndex, sliceIndex, srcSliceSize.data(), srcView_.data(), nSrc-1) ; 88 88 89 CArray<size_t,1> srcGlobalIndexArray(srcGlobalIndex.data(), shape(srcGlobalIndex.size()),neverDeleteData) ; 90 dataRanks.computeIndexInfoMapping(srcGlobalIndexArray) ; 89 if (srcGlobalIndex.size()>0) 90 { 91 CArray<size_t,1> srcGlobalIndexArray(srcGlobalIndex.data(), shape(srcGlobalIndex.size()),neverDeleteData) ; 92 dataRanks.computeIndexInfoMapping(srcGlobalIndexArray) ; 93 } 94 else 95 { 96 CArray<size_t,1> srcGlobalIndexArray ; 97 dataRanks.computeIndexInfoMapping(srcGlobalIndexArray) ; 98 } 91 99 const auto& returnInfo = dataRanks.getInfoIndexMap() ; 92 100 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/scatterer_connector.hpp
r1943 r1984 38 38 void transfer(const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut) 39 39 { 40 transfer(1, dataIn, dataOut) ;40 transfer(1,1, dataIn, dataOut) ; 41 41 } 42 42 … … 44 44 void transfer(const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut, T missingValue) 45 45 { 46 transfer(1, dataIn, dataOut, missingValue) ;46 transfer(1, 1, dataIn, dataOut, missingValue) ; 47 47 } 48 48 … … 50 50 void transfer(int sizeT, const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut) 51 51 { 52 transfer(1, sizeT, dataIn, dataOut) 53 } 54 55 template<typename T, int n> 56 void transfer(int repeat, int sizeT, const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut) 57 { 52 58 // for future, make a specific transfer function for sizeT=1 to avoid multiplication (increasing performance) 59 size_t srcSlice = sizeT*srcSize_ ; 53 60 for(auto& rankConnector : connector_) 54 61 { … … 58 65 int dstSize = mask.size() ; 59 66 auto& data = dataOut[rank] ; 60 data.resize(dstSize * sizeT) ; 67 size_t dstSlice = dstSize*sizeT ; 68 data.resize(repeat*dstSlice) ; 61 69 T* dstData = data.dataFirst() ; 62 70 const T* srcData = dataIn.dataFirst() ; 63 for(int i=0, j=0; i<dstSize; i++) 64 if (mask[i]) 65 { 66 for(int k=0;k<sizeT;k++) dstData[i*sizeT+k] = srcData[connector[j]*sizeT+k] ; 67 j++ ; 68 } 69 } 70 } 71 72 template<typename T, int n> 73 void transfer(int sizeT, const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut, T missingValue) 71 for(int l=0; l<repeat; l++) 72 { 73 for(int i=0, j=0; i<dstSize; i++) 74 if (mask[i]) 75 { 76 for(int k=0;k<sizeT;k++) dstData[i*sizeT+k] = srcData[connector[j]*sizeT+k] ; 77 j++ ; 78 } 79 dstData+=dstSlice ; 80 srcData+=srcSlice ; 81 } 82 } 83 } 84 85 template<typename T, int n> 86 void transfer(int repeat, int sizeT, const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut, T missingValue) 74 87 { 75 88 // for future, make a specific transfer function for sizeT=1 to avoid multiplication (increasing performance) 89 size_t srcSlice = sizeT*srcSize_ ; 76 90 for(auto& rankConnector : connector_) 77 91 { … … 81 95 int dstSize = mask.size() ; 82 96 auto& data = dataOut[rank] ; 83 data.resize(dstSize * sizeT) ; 97 size_t dstSlice = dstSize*sizeT ; 98 data.resize(repeat * dstSlice) ; 84 99 T* dstData = data.dataFirst() ; 85 100 const T* srcData = dataIn.dataFirst() ; 86 for(int i=0, j=0; i<dstSize; i++) 87 if (mask[i]) 88 { 89 for(int k=0;k<sizeT;k++) dstData[i*sizeT+k] = srcData[connector[j]*sizeT+k] ; 90 j++ ; 91 } 92 else 93 { 94 for(int k=0;k<sizeT;k++) dstData[i*sizeT+k] = missingValue ; 95 j++ ; 96 } 101 for(int l=0; l<repeat; l++) 102 { 103 for(int i=0, j=0; i<dstSize; i++) 104 if (mask[i]) 105 { 106 for(int k=0;k<sizeT;k++) dstData[i*sizeT+k] = srcData[connector[j]*sizeT+k] ; 107 j++ ; 108 } 109 else 110 { 111 for(int k=0;k<sizeT;k++) dstData[i*sizeT+k] = missingValue ; 112 j++ ; 113 } 114 dstData+=dstSlice ; 115 srcData+=srcSlice ; 116 } 97 117 } 98 118 } … … 101 121 void transfer(const CArray<T,n>& dataIn, CContextClient* client, CEventClient& event, const CMessage& messageHeader) 102 122 { 103 transfer( 1, dataIn, client, event, messageHeader) ;123 transfer( 1, dataIn, client, event, messageHeader) ; 104 124 } 105 125 … … 107 127 void transfer(const CArray<T,n>& dataIn, T missingValue, CContextClient* client, CEventClient& event, const CMessage& messageHeader) 108 128 { 109 transfer( 1, dataIn, missingValue, client, event, messageHeader) ;129 transfer( 1, dataIn, missingValue, client, event, messageHeader) ; 110 130 } 111 131 … … 114 134 { 115 135 map<int, CArray<T,1>> dataOut ; 116 transfer( sizeT, dataIn, dataOut) ;136 transfer(1, sizeT, dataIn, dataOut) ; 117 137 sendToServer(dataOut, client, event, messageHeader) ; 118 138 } … … 122 142 { 123 143 map<int, CArray<T,1>> dataOut ; 124 transfer( sizeT, dataIn, dataOut, missingValue) ;144 transfer(1, sizeT, dataIn, dataOut, missingValue) ; 125 145 sendToServer(dataOut, client, event, messageHeader) ; 126 146 }
Note: See TracChangeset
for help on using the changeset viewer.