Changeset 870
- Timestamp:
- 06/09/16 11:33:32 (9 years ago)
- Location:
- XIOS/trunk/src
- Files:
-
- 2 deleted
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/distribution_client.cpp
r864 r870 488 488 if (isCurrentIndexDataCorrect) 489 489 { 490 int gridMaskIndex = 0; //currentIndex[0];490 int gridMaskIndex = 0; 491 491 for (int k = 0; k < this->numElement_; ++k) 492 492 { … … 505 505 if (isIndexOnServer) 506 506 { 507 size_t globalIndex = 0; //currentGlobalIndex[0];507 size_t globalIndex = 0; 508 508 for (int k = 0; k < numElement_; ++k) 509 509 { … … 524 524 } 525 525 526 ///*!527 // Create local index of domain(s).528 // A domain can have data index which even contains the "ghost" points. Very often, these529 //data surround the true data. In order to send correct data to server,530 //a client need to know index of the true data.531 //*/532 //void CDistributionClient::createLocalDomainDataIndex()533 //{534 // int numDomain = 0;535 // for (int i = 0; i < axisDomainOrder_.numElements(); ++i)536 // if (axisDomainOrder_(i)) ++numDomain;537 //538 // localDomainIndex_.resize(numDomain*2);539 // indexDomainData_.resize(numDomain);540 //541 // int idxDomain = 0;542 // for (int i = 0; i < axisDomainOrder_.numElements(); ++i)543 // {544 // if (axisDomainOrder_(i))545 // {546 // int iIdx, jIdx = 0, count = 0;547 // indexDomainData_[idxDomain].resize(dataNIndex_[i], false);548 // for (int j = 0; j < dataNIndex_[i]; ++j)549 // {550 // iIdx = getDomainIndex((*dataIndex_[indexMap_[i]])(j), (*dataIndex_[indexMap_[i]+1])(j),551 // dataBegin_[indexMap_[i]], dataBegin_[indexMap_[i]+1],552 // dataDims_[i], nLocal_[indexMap_[i]], jIdx);553 //554 // if ((iIdx >= nBeginLocal_[indexMap_[i]]) && (iIdx < nLocal_[indexMap_[i]]) &&555 // (jIdx >= nBeginLocal_[indexMap_[i]+1]) && (jIdx < nLocal_[indexMap_[i]+1]) &&556 // (domainMasks_[idxDomain](iIdx + jIdx*nLocal_[indexMap_[i]])))557 // {558 // (localDomainIndex_[idxDomain]).push_back(iIdx);559 // (localDomainIndex_[idxDomain*2+1]).push_back(jIdx);560 // indexDomainData_[idxDomain][j] = true;561 // }562 // }563 // ++idxDomain;564 // }565 // }566 //}567 568 ///*!569 // Create local index of axis.570 //*/571 //void CDistributionClient::createLocalAxisDataIndex()572 //{573 // int numAxis = 0;574 // for (int i = 0; i < axisDomainOrder_.numElements(); ++i)575 // if (!axisDomainOrder_(i)) ++numAxis;576 //577 // localAxisIndex_.resize(numAxis);578 // indexAxisData_.resize(numAxis);579 //580 // int idxAxis = 0;581 // for (int i = 0; i < axisDomainOrder_.numElements(); ++i)582 // {583 // if (!axisDomainOrder_(i))584 // {585 // int iIdx = 0;586 // indexAxisData_[idxAxis].resize(dataNIndex_[i], false);587 // for (int j = 0; j < dataNIndex_[i]; ++j)588 // {589 // iIdx = getAxisIndex((*dataIndex_[indexMap_[i]])(j), dataBegin_[indexMap_[i]], nLocal_[indexMap_[i]]);590 // if ((iIdx >= nBeginLocal_[indexMap_[i]]) &&591 // (iIdx < nLocal_[indexMap_[i]]) && (axisMasks_[idxAxis](iIdx)))592 // {593 // localAxisIndex_[idxAxis].push_back(iIdx);594 // indexAxisData_[idxAxis][j] = true;595 // }596 // }597 // ++idxAxis;598 // }599 // }600 //}601 602 526 void CDistributionClient::createGlobalIndex() 603 527 { … … 652 576 653 577 } 654 655 656 ///*!657 // Create global index on client658 // In order to do the mapping between client-server, each client creates its own659 //global index of sending data. This global index is then used to calculate to which server660 //the client needs to send it data as well as which part of data belongs to the server.661 //So as to make clients and server coherent in order of index, global index is calculated by662 //take into account of C-convention, the rightmost dimension varies faster.663 //*/664 //void CDistributionClient::createGlobalIndexSendToServer()665 //{666 // if (isComputed_) return;667 // isComputed_ = true;668 // createLocalDomainDataIndex();669 // createLocalAxisDataIndex();670 //671 // int idxDomain = 0, idxAxis = 0;672 // std::vector<int> eachElementSize(numElement_);673 //674 // // Precompute size of the loop675 // for (int i = 0; i < numElement_; ++i)676 // {677 // if(axisDomainOrder_(i))678 // {679 // eachElementSize[i] = localDomainIndex_[idxDomain].size();680 // idxDomain += 2;681 // }682 // else683 // {684 // eachElementSize[i] = localAxisIndex_[idxAxis].size();685 // ++idxAxis;686 // }687 // }688 //689 // // Compute size of the global index on client690 // std::vector<StdSize> idxLoop(numElement_,0);691 // std::vector<StdSize> currentIndex(this->dims_,0);692 // int innerLoopSize = eachElementSize[0];693 // size_t idx = 0, indexLocalDataOnClientCount = 0, indexSend2ServerCount = 0;694 // size_t ssize = 1;695 // for (int i = 0; i < numElement_; ++i) ssize *= eachElementSize[i];696 // while (idx < ssize)697 // {698 // for (int i = 0; i < numElement_-1; ++i)699 // {700 // if (idxLoop[i] == eachElementSize[i])701 // {702 // idxLoop[i] = 0;703 // ++idxLoop[i+1];704 // }705 // }706 //707 // // Find out outer index708 // // Depending the inner-most element is axis or domain,709 // // The outer loop index begins correspondingly at one (1) or zero (0)710 // idxDomain = idxAxis = 0;711 // if (axisDomainOrder_(0)) ++idxDomain;712 // else ++idxAxis;713 // for (int i = 1; i < numElement_; ++i)714 // {715 // if (axisDomainOrder_(i))716 // {717 // currentIndex[indexMap_[i]] = localDomainIndex_[idxDomain][idxLoop[i]];718 // currentIndex[indexMap_[i]+1] = localDomainIndex_[idxDomain+1][idxLoop[i]];719 // idxDomain += 2;720 // }721 // else722 // {723 // currentIndex[indexMap_[i]] = localAxisIndex_[idxAxis][idxLoop[i]];724 // ++idxAxis;725 // }726 // }727 //728 // // Inner most index729 // idxDomain = idxAxis = 0;730 // for (int i = 0; i < innerLoopSize; ++i)731 // {732 // if (axisDomainOrder_(0))733 // {734 // currentIndex[0] = localDomainIndex_[idxDomain][i];735 // currentIndex[1] = localDomainIndex_[idxDomain+1][i];736 // }737 // else currentIndex[0] = localAxisIndex_[idxAxis][i];738 //739 // StdSize gridMaskIndex = currentIndex[0];740 // int mulDimMask = 1;741 // for (int k = 1; k < this->dims_; ++k)742 // {743 // mulDimMask *= nLocal_[k-1];744 // gridMaskIndex += (currentIndex[k])*mulDimMask;745 // }746 //747 // if (gridMask_(gridMaskIndex))748 // {749 // ++indexLocalDataOnClientCount;750 // bool isIndexOnServer = true;751 //752 // for (int idxElement = 0; idxElement < this->numElement_; ++idxElement)753 // {754 // int actualIdx = 0;755 // if (axisDomainOrder_(idxElement))756 // {757 // actualIdx = currentIndex[indexMap_[idxElement]]+currentIndex[indexMap_[idxElement]+1]*nLocal_[indexMap_[idxElement]];758 // isIndexOnServer = isIndexOnServer && (((*infoIndex_[indexMap_[idxElement]])(actualIdx)) <= nZoomEnd_[indexMap_[idxElement]])759 // && (nZoomBegin_[indexMap_[idxElement]] <= ((*infoIndex_[indexMap_[idxElement]])(actualIdx)))760 // && (((*infoIndex_[indexMap_[idxElement]+1])(actualIdx)) <= nZoomEnd_[indexMap_[idxElement]+1])761 // && (nZoomBegin_[indexMap_[idxElement]+1] <= ((*infoIndex_[indexMap_[idxElement]+1])(actualIdx)));762 // }763 // else764 // {765 // isIndexOnServer = isIndexOnServer && (((*infoIndex_[indexMap_[idxElement]])(currentIndex[indexMap_[idxElement]])) <= nZoomEnd_[indexMap_[idxElement]])766 // && (nZoomBegin_[indexMap_[idxElement]] <= ((*infoIndex_[indexMap_[idxElement]])(currentIndex[indexMap_[idxElement]])));767 // }768 // }769 // if (isIndexOnServer) ++indexSend2ServerCount;770 // }771 //772 // }773 // idxLoop[0] += innerLoopSize;774 // idx += innerLoopSize;775 // }776 //777 // // Now allocate these arrays778 // localDataIndex_.resize(indexLocalDataOnClientCount);779 // localMaskIndex_.resize(indexSend2ServerCount);780 // globalLocalDataSendToServerMap_.rehash(std::ceil(indexSend2ServerCount/globalLocalDataSendToServerMap_.max_load_factor())); //globalLocalDataSendToServerMap_.reserve(indexSend2ServerCount);781 //782 // // We need to loop with data index783 // idxLoop.assign(numElement_,0);784 // idx = indexLocalDataOnClientCount = indexSend2ServerCount = 0;785 // ssize = 1; for (int i = 0; i < numElement_; ++i) ssize *= dataNIndex_[i];786 // innerLoopSize = dataNIndex_[0];787 // int countLocalData = 0;788 // std::vector<int> correctOuterIndex(numElement_,0);789 // bool isOuterIndexCorrect = true;790 // while (idx < ssize)791 // {792 // for (int i = 0; i < numElement_-1; ++i)793 // {794 // if (idxLoop[i] == dataNIndex_[i])795 // {796 // idxLoop[i] = 0;797 // correctOuterIndex[i] = 0;798 // ++idxLoop[i+1];799 // if (isOuterIndexCorrect) ++correctOuterIndex[i+1];800 // }801 // }802 //803 // // Depending the inner-most element axis or domain,804 // // The outer loop index begins correspondingly at one (1) or zero (0)805 // idxDomain = idxAxis = 0;806 // if (axisDomainOrder_(0)) ++idxDomain;807 // else ++idxAxis;808 // bool isIndexDomainDataCorrect = true;809 // bool isIndexAxisDataCorrect = true;810 //811 // for (int i = 1; i < numElement_; ++i)812 // {813 // if (axisDomainOrder_(i))814 // {815 // if (indexDomainData_[idxDomain][idxLoop[i]])816 // {817 // currentIndex[indexMap_[i]] = localDomainIndex_[idxDomain][correctOuterIndex[i]];818 // currentIndex[indexMap_[i]+1] = localDomainIndex_[idxDomain*2+1][correctOuterIndex[i]];819 // isIndexDomainDataCorrect &= true;820 // }821 // else isIndexDomainDataCorrect = false;822 // ++idxDomain;823 // }824 // else825 // {826 // if (indexAxisData_[idxAxis][idxLoop[i]])827 // {828 // currentIndex[indexMap_[i]] = localAxisIndex_[idxAxis][correctOuterIndex[i]];829 // isIndexAxisDataCorrect &= true;830 // }831 // else isIndexAxisDataCorrect = false;832 // ++idxAxis;833 // }834 // }835 //836 // isOuterIndexCorrect = (isIndexAxisDataCorrect) && (isIndexDomainDataCorrect);837 //838 // // Inner most index839 // idxDomain = idxAxis = 0;840 // int correctIndexDomain = 0, correctIndexAxis = 0;841 // for (int i = 0; i < innerLoopSize; ++i)842 // {843 // bool isCurrentIndexDomainDataCorrect = isIndexDomainDataCorrect;844 // bool isCurrentIndexAxisDataCorrect = isIndexAxisDataCorrect;845 //846 // if (axisDomainOrder_(0))847 // {848 // if (indexDomainData_[idxDomain][i])849 // {850 // currentIndex[0] = localDomainIndex_[idxDomain][correctIndexDomain];851 // currentIndex[1] = localDomainIndex_[idxDomain+1][correctIndexDomain];852 // isCurrentIndexDomainDataCorrect &= true;853 // ++correctIndexDomain;854 // }855 // else isCurrentIndexDomainDataCorrect = false;856 // }857 // else858 // {859 // if (indexAxisData_[idxAxis][i])860 // {861 // currentIndex[0] = localAxisIndex_[idxAxis][correctIndexAxis];862 // isCurrentIndexAxisDataCorrect &= true;863 // ++correctIndexAxis;864 // }865 // else isCurrentIndexAxisDataCorrect = false;866 // }867 //868 // int gridMaskIndex = currentIndex[0];869 // int mulDimMask = 1;870 // for (int k = 1; k < this->dims_; ++k)871 // {872 // mulDimMask *= nLocal_[k-1];873 // gridMaskIndex += (currentIndex[k])*mulDimMask;874 // }875 //876 // if (isCurrentIndexDomainDataCorrect &&877 // isCurrentIndexAxisDataCorrect &&878 // gridMask_(gridMaskIndex))879 // {880 // localDataIndex_[indexLocalDataOnClientCount] = countLocalData;881 // bool isIndexOnServer = true;882 // for (int idxElement = 0; idxElement < this->numElement_; ++idxElement)883 // {884 // int actualIdx = 0;885 // if (axisDomainOrder_(idxElement))886 // {887 // actualIdx = currentIndex[indexMap_[idxElement]]+currentIndex[indexMap_[idxElement]+1]*nLocal_[indexMap_[idxElement]];888 // isIndexOnServer = isIndexOnServer && (((*infoIndex_[indexMap_[idxElement]])(actualIdx)) <= nZoomEnd_[indexMap_[idxElement]])889 // && (nZoomBegin_[indexMap_[idxElement]] <= ((*infoIndex_[indexMap_[idxElement]])(actualIdx)))890 // && (((*infoIndex_[indexMap_[idxElement]+1])(actualIdx)) <= nZoomEnd_[indexMap_[idxElement]+1])891 // && (nZoomBegin_[indexMap_[idxElement]+1] <= ((*infoIndex_[indexMap_[idxElement]+1])(actualIdx)));892 // }893 // else894 // {895 // isIndexOnServer = isIndexOnServer && (((*infoIndex_[indexMap_[idxElement]])(currentIndex[indexMap_[idxElement]])) <= nZoomEnd_[indexMap_[idxElement]])896 // && (nZoomBegin_[indexMap_[idxElement]] <= ((*infoIndex_[indexMap_[idxElement]])(currentIndex[indexMap_[idxElement]])));897 // }898 // }899 //900 // if (isIndexOnServer)901 // {902 // int actualIdx = (axisDomainOrder_(0)) ? currentIndex[0]+currentIndex[1]*nLocal_[0]903 // : currentIndex[0];904 // size_t globalIndex = (*infoIndex_[0])(actualIdx); //idxLoop[0] + nBeginGlobal_[0];905 // size_t mulDim = 1;906 // for (int idxElement = 0; idxElement < this->numElement_; ++idxElement)907 // {908 // if (axisDomainOrder_(idxElement))909 // {910 // actualIdx = currentIndex[indexMap_[idxElement]]+currentIndex[indexMap_[idxElement]+1]*nLocal_[indexMap_[idxElement]];911 // int jb = (0 == idxElement) ? 1 : 0;912 // for (int j = jb; j <= 1; ++j)913 // {914 // mulDim *= nGlob_[indexMap_[idxElement]+j-1];915 // globalIndex += ((*infoIndex_[indexMap_[idxElement]+j])(actualIdx))*mulDim;916 // }917 // }918 // else919 // {920 // if (0 != idxElement)921 // {922 // mulDim *= nGlob_[indexMap_[idxElement]-1];923 // globalIndex += ((*infoIndex_[indexMap_[idxElement]])(currentIndex[indexMap_[idxElement]]))*mulDim;924 // }925 // }926 // }927 // globalLocalDataSendToServerMap_[globalIndex] = indexLocalDataOnClientCount;928 // localMaskIndex_[indexSend2ServerCount] = gridMaskIndex;929 // ++indexSend2ServerCount;930 // }931 // ++indexLocalDataOnClientCount;932 // }933 // ++countLocalData;934 // }935 // idxLoop[0] += innerLoopSize;936 // idx += innerLoopSize;937 // }938 //}939 578 940 579 /*!
Note: See TracChangeset
for help on using the changeset viewer.