- Timestamp:
- 07/31/17 17:59:25 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/XIOS_DEV_CMIP6/src/server_distribution_description.cpp
r887 r1232 100 100 \param [in] positionDimensionDistributed dimension of server on which we make the cut. 101 101 */ 102 voidCServerDistributionDescription::computeServerGlobalIndexInRange(const std::pair<size_t, size_t>& indexBeginEnd,102 std::vector<int> CServerDistributionDescription::computeServerGlobalIndexInRange(const std::pair<size_t, size_t>& indexBeginEnd, 103 103 int positionDimensionDistributed) 104 104 { 105 int nBand = 0; 105 106 switch (serverType_) { 106 107 case BAND_DISTRIBUTION: 107 computeBandDistribution(nServer_, positionDimensionDistributed);108 nBand = computeBandDistribution(nServer_, positionDimensionDistributed); 108 109 break; 109 110 default: … … 122 123 std::vector<int> currentIndex(dim); 123 124 124 for (int idxServer = 0; idxServer < n Server_; ++idxServer)125 for (int idxServer = 0; idxServer < nBand; ++idxServer) 125 126 { 126 127 size_t ssize = 1, idx = 0; … … 161 162 } 162 163 } 164 165 // List of servers without distribution (cause total number of server is greater than number of bands, for example) 166 std::vector<int> zeroIndexServer(nServer_-nBand); 167 for (int idxServer = nBand; idxServer < nServer_; ++idxServer) 168 zeroIndexServer[idxServer-nBand] = idxServer; 169 170 return zeroIndexServer; 163 171 } 164 172 … … 172 180 \param [in] positionDimensionDistributed dimension of server on which we make the cut. 173 181 */ 174 void CServerDistributionDescription::computeServerGlobalByElement(std::vector<boost::unordered_map<size_t,std::vector<int> > >& indexServerOnElement, 175 int clientRank, 176 int clientSize, 177 const CArray<int,1>& axisDomainOrder, 178 int positionDimensionDistributed) 179 { 182 std::vector<int> CServerDistributionDescription::computeServerGlobalByElement(std::vector<boost::unordered_map<size_t,std::vector<int> > >& indexServerOnElement, 183 int clientRank, 184 int clientSize, 185 const CArray<int,1>& axisDomainOrder, 186 int positionDimensionDistributed) 187 { 188 int nBand = 0; 180 189 switch (serverType_) { 181 190 case BAND_DISTRIBUTION: 182 computeBandDistribution(nServer_, positionDimensionDistributed);191 nBand = computeBandDistribution(nServer_, positionDimensionDistributed); 183 192 break; 184 193 default: … … 197 206 } 198 207 199 for (int idxServer = 0; idxServer < n Server_; ++idxServer)208 for (int idxServer = 0; idxServer < nBand; ++idxServer) 200 209 { 201 210 std::vector<int> elementDimension(4); … … 247 256 } 248 257 } 258 259 // List of servers without distribution (cause total number of server is greater than number of bands, for example) 260 std::vector<int> zeroIndexServer(nServer_-nBand); 261 for (int idxServer = nBand; idxServer < nServer_; ++idxServer) 262 zeroIndexServer[idxServer-nBand] = idxServer; 263 264 return zeroIndexServer; 249 265 } 250 266 … … 297 313 \param [in] nServer number of server 298 314 */ 299 voidCServerDistributionDescription::computeBandDistribution(int nServer, int positionDimensionDistributed)315 int CServerDistributionDescription::computeBandDistribution(int nServer, int positionDimensionDistributed) 300 316 { 301 317 int dim = nGlobal_.size(); … … 324 340 int positionDistributed = (1<dim) ? positionDimensionDistributed_ : 0; 325 341 nGlobTemp = nGlobal_[positionDistributed]; 326 327 for (int i = 0; i < nServer; ++i) 342 int nbBand = std::min(nGlobTemp, nServer); 343 344 for (int i = 0; i < nbBand; ++i) 328 345 { 329 346 if (0 < i) njRangeBegin[i] = njRangeEnd[i-1]; 330 njRangeSize = nGlobTemp / n Server;331 if (i < nGlobTemp%n Server) ++njRangeSize;347 njRangeSize = nGlobTemp / nbBand; 348 if (i < nGlobTemp%nbBand) ++njRangeSize; 332 349 njRangeEnd[i] = njRangeSize + njRangeBegin[i]; 333 350 } 334 njRangeEnd[nServer-1] = nGlobTemp; 351 njRangeEnd[nbBand-1] = nGlobTemp; 352 353 for (int i = nbBand; i < nServer; ++i) 354 { 355 njRangeBegin[i] = njRangeEnd[i] = 0; 356 } 335 357 336 358 for (int i = 0; i < nServer; ++i) … … 358 380 } 359 381 } 382 383 return nbBand; 360 384 } 361 385
Note: See TracChangeset
for help on using the changeset viewer.