Changeset 1249 for XIOS/dev/XIOS_DEV_CMIP6/src/node/axis.cpp
- Timestamp:
- 08/30/17 15:33:51 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/XIOS_DEV_CMIP6/src/node/axis.cpp
r1236 r1249 23 23 , isClientAfterTransformationChecked(false) 24 24 , hasBounds(false), isCompressible_(false) 25 , numberWrittenIndexes_( 0), totalNumberWrittenIndexes_(0), offsetWrittenIndexes_(0)25 , numberWrittenIndexes_(), totalNumberWrittenIndexes_(), offsetWrittenIndexes_() 26 26 , transformationMap_(), hasValue(false), hasLabel(false) 27 27 , computedWrittenIndex_(false) … … 34 34 , isClientAfterTransformationChecked(false) 35 35 , hasBounds(false), isCompressible_(false) 36 , numberWrittenIndexes_( 0), totalNumberWrittenIndexes_(0), offsetWrittenIndexes_(0)36 , numberWrittenIndexes_(), totalNumberWrittenIndexes_(), offsetWrittenIndexes_() 37 37 , transformationMap_(), hasValue(false), hasLabel(false) 38 38 , computedWrittenIndex_(false) … … 107 107 \return the number of indexes written by each server 108 108 */ 109 int CAxis::getNumberWrittenIndexes() const 110 { 111 return numberWrittenIndexes_; 109 int CAxis::getNumberWrittenIndexes(MPI_Comm writtenCom) 110 { 111 int writtenSize; 112 MPI_Comm_size(writtenCom, &writtenSize); 113 return numberWrittenIndexes_[writtenSize]; 112 114 } 113 115 … … 116 118 \return the total number of indexes written by the servers 117 119 */ 118 int CAxis::getTotalNumberWrittenIndexes() const 119 { 120 return totalNumberWrittenIndexes_; 120 int CAxis::getTotalNumberWrittenIndexes(MPI_Comm writtenCom) 121 { 122 int writtenSize; 123 MPI_Comm_size(writtenCom, &writtenSize); 124 return totalNumberWrittenIndexes_[writtenSize]; 121 125 } 122 126 … … 125 129 \return the offset of indexes written by each server 126 130 */ 127 int CAxis::getOffsetWrittenIndexes() const 128 { 129 return offsetWrittenIndexes_; 130 } 131 131 int CAxis::getOffsetWrittenIndexes(MPI_Comm writtenCom) 132 { 133 int writtenSize; 134 MPI_Comm_size(writtenCom, &writtenSize); 135 return offsetWrittenIndexes_[writtenSize]; 136 } 137 138 CArray<int, 1>& CAxis::getCompressedIndexToWriteOnServer(MPI_Comm writtenCom) 139 { 140 int writtenSize; 141 MPI_Comm_size(writtenCom, &writtenSize); 142 return compressedIndexToWriteOnServer[writtenSize]; 143 } 132 144 //---------------------------------------------------------------- 133 145 … … 692 704 } 693 705 706 // if (isCompressible()) 707 // { 708 // nbWritten = 0; 709 // boost::unordered_map<size_t,size_t> localGlobalIndexMap; 710 // for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 711 // { 712 // indGlo = *itSrv; 713 // if (ite != globalLocalIndexMap_.find(indGlo)) 714 // { 715 // localGlobalIndexMap[localIndexToWriteOnServer(nbWritten)] = indGlo; 716 // ++nbWritten; 717 // } 718 // } 719 720 // nbWritten = 0; 721 // for (int idx = 0; idx < data_index.numElements(); ++idx) 722 // { 723 // if (localGlobalIndexMap.end() != localGlobalIndexMap.find(data_index(idx))) 724 // { 725 // ++nbWritten; 726 // } 727 // } 728 729 // compressedIndexToWriteOnServer.resize(nbWritten); 730 // nbWritten = 0; 731 // for (int idx = 0; idx < data_index.numElements(); ++idx) 732 // { 733 // if (localGlobalIndexMap.end() != localGlobalIndexMap.find(data_index(idx))) 734 // { 735 // compressedIndexToWriteOnServer(nbWritten) = localGlobalIndexMap[data_index(idx)]; 736 // ++nbWritten; 737 // } 738 // } 739 740 // numberWrittenIndexes_ = nbWritten; 741 // if (isDistributed()) 742 // { 743 744 // MPI_Allreduce(&numberWrittenIndexes_, &totalNumberWrittenIndexes_, 1, MPI_INT, MPI_SUM, server->intraComm); 745 // MPI_Scan(&numberWrittenIndexes_, &offsetWrittenIndexes_, 1, MPI_INT, MPI_SUM, server->intraComm); 746 // offsetWrittenIndexes_ -= numberWrittenIndexes_; 747 // } 748 // else 749 // totalNumberWrittenIndexes_ = numberWrittenIndexes_; 750 // } 751 } 752 753 void CAxis::computeWrittenCompressedIndex(MPI_Comm writtenComm) 754 { 755 int writtenCommSize; 756 MPI_Comm_size(writtenComm, &writtenCommSize); 757 if (compressedIndexToWriteOnServer.find(writtenCommSize) != compressedIndexToWriteOnServer.end()) 758 return; 759 694 760 if (isCompressible()) 695 761 { 696 nbWritten = 0; 762 size_t nbWritten = 0, indGlo; 763 CContext* context=CContext::getCurrent(); 764 CContextServer* server = context->server; 765 766 // We describe the distribution of client (server) on which data are written 767 std::vector<int> nBegin(1), nSize(1), nBeginGlobal(1), nGlob(1); 768 nBegin[0] = zoom_begin; 769 nSize[0] = zoom_n; 770 nBeginGlobal[0] = 0; 771 nGlob[0] = n_glo; 772 CDistributionServer srvDist(server->intraCommSize, nBegin, nSize, nBeginGlobal, nGlob); 773 const CArray<size_t,1>& writtenGlobalIndex = srvDist.getGlobalIndex(); 774 boost::unordered_map<size_t,size_t>::const_iterator itb = globalLocalIndexMap_.begin(), 775 ite = globalLocalIndexMap_.end(), it; 776 777 CArray<size_t,1>::const_iterator itSrvb = writtenGlobalIndex.begin(), 778 itSrve = writtenGlobalIndex.end(), itSrv; 697 779 boost::unordered_map<size_t,size_t> localGlobalIndexMap; 698 780 for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) … … 715 797 } 716 798 717 compressedIndexToWriteOnServer .resize(nbWritten);799 compressedIndexToWriteOnServer[writtenCommSize].resize(nbWritten); 718 800 nbWritten = 0; 719 801 for (int idx = 0; idx < data_index.numElements(); ++idx) … … 721 803 if (localGlobalIndexMap.end() != localGlobalIndexMap.find(data_index(idx))) 722 804 { 723 compressedIndexToWriteOnServer (nbWritten) = localGlobalIndexMap[data_index(idx)];805 compressedIndexToWriteOnServer[writtenCommSize](nbWritten) = localGlobalIndexMap[data_index(idx)]; 724 806 ++nbWritten; 725 807 } 726 808 } 727 809 728 numberWrittenIndexes_ = nbWritten;810 numberWrittenIndexes_[writtenCommSize] = nbWritten; 729 811 if (isDistributed()) 730 812 { 731 813 732 MPI_Allreduce(&numberWrittenIndexes_ , &totalNumberWrittenIndexes_, 1, MPI_INT, MPI_SUM, server->intraComm);733 MPI_Scan(&numberWrittenIndexes_ , &offsetWrittenIndexes_, 1, MPI_INT, MPI_SUM, server->intraComm);734 offsetWrittenIndexes_ -= numberWrittenIndexes_;814 MPI_Allreduce(&numberWrittenIndexes_[writtenCommSize], &totalNumberWrittenIndexes_[writtenCommSize], 1, MPI_INT, MPI_SUM, writtenComm); 815 MPI_Scan(&numberWrittenIndexes_[writtenCommSize], &offsetWrittenIndexes_[writtenCommSize], 1, MPI_INT, MPI_SUM, writtenComm); 816 offsetWrittenIndexes_[writtenCommSize] -= numberWrittenIndexes_[writtenCommSize]; 735 817 } 736 818 else 737 totalNumberWrittenIndexes_ = numberWrittenIndexes_; 738 } 739 } 740 819 totalNumberWrittenIndexes_[writtenCommSize] = numberWrittenIndexes_[writtenCommSize]; 820 } 821 } 741 822 742 823 /*! … … 853 934 if (zoom_n<=0) 854 935 { 855 zoom_ begin = 0; zoom_n = 0;936 zoom_n = 0; zoom_begin=global_zoom_begin; //0; zoom_begin = 0; 856 937 } 857 938
Note: See TracChangeset
for help on using the changeset viewer.