Changeset 1212
- Timestamp:
- 07/12/17 12:27:06 (7 years ago)
- Location:
- XIOS/dev/XIOS_DEV_CMIP6/src/node
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/XIOS_DEV_CMIP6/src/node/context.cpp
r1208 r1212 825 825 if (hasServer && hasClient) 826 826 { 827 int nbPools = clientPrimServer.size(); 828 827 829 // (1) Find all enabled files in write mode 828 830 for (int i = 0; i < this->enabledFiles.size(); ++i) … … 835 837 int size = this->enabledWriteModeFiles.size(); 836 838 std::vector<std::pair<StdSize, CFile*> > dataSizeMap; 839 StdSize dataPerPool = 0; 837 840 for (size_t i = 0; i < size; ++i) 838 841 { … … 861 864 dataSize /= outFreqSec; 862 865 dataSizeMap.push_back(make_pair(dataSize,file)); 863 }864 865 // (3) Sort enabledWriteModeFiles866 dataPerPool += dataSize; 867 } 868 dataPerPool /= nbPools; 866 869 std::sort(dataSizeMap.begin(), dataSizeMap.end()); 867 for (int i = 0; i < size; ++i) 868 { 869 enabledWriteModeFiles[i] = dataSizeMap[i].second; 870 } 871 872 // (4) Assign contextClient to each enabled file 873 int i,j; 874 for (i = 0, j=0; i < enabledFiles.size(); ++i) 875 { 876 if (enabledFiles[i]->mode.isEmpty() || (!enabledFiles[i]->mode.isEmpty() && enabledFiles[i]->mode.getValue() == CFile::mode_attr::write )) 870 871 // (3) Assign contextClient to each enabled file 872 std::vector<StdSize> poolData(nbPools); 873 int lazyPool = 0; 874 for (int i = dataSizeMap.size()-1; i >= 0; --i) 875 { 876 bool contextSet = false; 877 for (int j = 0; j < nbPools; ++j) 877 878 { 878 int n = j / clientPrimServer.size(); 879 int mod = j % clientPrimServer.size(); 880 int poolId; 881 if (n % 2 == 0) 882 poolId =mod; 883 else 884 poolId = clientPrimServer.size()-1-mod; 885 enabledWriteModeFiles[j]->setContextClient(clientPrimServer[poolId]); 886 ++j; 879 if (!contextSet) 880 { 881 if (dataSizeMap[i].first + poolData[j] < dataPerPool) 882 { 883 dataSizeMap[i].second->setContextClient(clientPrimServer[j]); 884 poolData[j] += dataSizeMap[i].first; 885 contextSet = true; 886 } 887 } 888 if (poolData[j] < poolData[lazyPool]) 889 lazyPool = j; 887 890 } 888 else891 if (!contextSet) 889 892 { 890 enabledFiles[i]->setContextClient(client); 893 dataSizeMap[i].second->setContextClient(clientPrimServer[lazyPool]); 894 poolData[lazyPool] += dataSizeMap[i].first; 891 895 } 892 896 } 897 898 for (int i = 0; i < this->enabledReadModeFiles.size(); ++i) 899 enabledReadModeFiles[i]->setContextClient(client); 893 900 } 894 901 else -
XIOS/dev/XIOS_DEV_CMIP6/src/node/context.hpp
r1208 r1212 136 136 void setClientServerBuffer(CContextClient* contextClient); 137 137 138 // Estimate data size for each enabled file in write mode138 // Distribute files (in write mode) among secondary-server pools according to the estimated data flux 139 139 void distributeFiles(void); 140 140
Note: See TracChangeset
for help on using the changeset viewer.