From 8a78a9cc0624cf7c20a78bfa31508299e7a4d5e0 Mon Sep 17 00:00:00 2001 From: piacibel <cyrille.piacibello@inria.fr> Date: Thu, 10 Apr 2014 14:42:18 +0200 Subject: [PATCH] Hybrid Algorithm modified, and Parallel Details paper updated, with some tips for using EZTrace on ScalFMM --- Doc/Src_tex/ParallelDetails.pdf | Bin 265120 -> 280508 bytes Doc/Src_tex/ParallelDetails.tex | 220 +++- Src/Core/FFmmAlgorithmThreadProc.hpp | 1476 ++++++++++++++------------ 3 files changed, 979 insertions(+), 717 deletions(-) mode change 100755 => 100644 Src/Core/FFmmAlgorithmThreadProc.hpp diff --git a/Doc/Src_tex/ParallelDetails.pdf b/Doc/Src_tex/ParallelDetails.pdf index 6ad670aee7216bbe3450fcd1b4d235cbc2e443a2..9c46298ee0600395a6bb9b6433c352b844ca0b16 100755 GIT binary patch delta 80802 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	@~JxZh3 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󍏿I)<yRlw6}q~DO`QK~QG&tl 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 a&WKWSdLuWBFps&Vp`kgKs;aBM8y5hQ`1YCr delta 65637 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 F1pxgVe{cW* diff --git a/Doc/Src_tex/ParallelDetails.tex b/Doc/Src_tex/ParallelDetails.tex index 1a81839a7..070d9a4c8 100755 --- a/Doc/Src_tex/ParallelDetails.tex +++ b/Doc/Src_tex/ParallelDetails.tex @@ -3,11 +3,12 @@ \usepackage{listings} \usepackage{geometry} \usepackage{graphicx} +\usepackage{tikz} \usepackage[hypertexnames=false, pdftex]{hyperref} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % use:$ pdflatex ParallelDetails.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\author{Berenger Bramas, Olivier Coulaud, Cyrille Piacibelo} +\author{Berenger Bramas, Olivier Coulaud, Cyrille Piacibello} \title{ScalFmm - Parallel Algorithms (Draft)} \date{\today} @@ -152,26 +153,64 @@ That is the reason why we need to balance the data among nodes. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Balancing the leaves} -After sorting, each process has potentially several leaves. -If we have two processes $P_{i}$ and $P_{j}$ with $i < j$ the sort guarantees that all leaves from node i are inferior than the leaves on the node j in a Morton indexing way. -But the leaves are randomly distributed among the nodes and we need to balance them. -It is a simple reordoring of the data, but the data has to stayed sorted. +After sorting, each process has potentially several leaves. If we +have two processes $P_{i}$ and $P_{j}$ with $i < j$ the sort +guarantees that all leaves from node i are inferior than the leaves on +the node j in a Morton indexing way. But the leaves are randomly +distributed among the nodes and we need to balance them. It is a +simple reordoring of the data, but the data has to stayed sorted. \begin{enumerate} \item Each process informs other to tell how many leaves it holds. -\item Each process compute how many leaves it has to send or to receive from left or right. +\item Each process compute how many leaves it has to send or to + receive from left or right. \label{balRef} \end{enumerate} -At the end of the algorithm our system is completely balanced with the same number of leaves on each process. + +At the end of the algorithm our system is completely balanced with the +same number of leaves on each process. If another kind of balancing +algorithm is needed, one can only change the BalanceAlgorithm class +that is given in parameter to the ArrayToTree static method in the +step \ref{balRef}. + +\subsection{Balancing algorithms supported} +Any balancing algorithm can be used, but it has to provide at least +two method, as showed in the class FAbstractBalancingAlgorithm. +Those methods are : +\begin{enumerate} +\item GetLeft : return the number of leaves that will belongs only to + proc on the left of given proc. +\item GetRight : return the number of leaves that will belongs only to + proc on the right of given proc. +\end{enumerate} + +In the parameters of those two methods, one can find the total number +of leaves, the total number of particles, the number of proc, and the +index of a proc to be treated. \begin{figure}[h!] \begin{center} \includegraphics[width=15cm, height=15cm, keepaspectratio=true]{Images/Balance.png} - \caption{Balancing Example} + \caption{Balancing Example : A process has to send data to the + left if its current left limit is upper than its objective + limit. Same in the other side, and we can reverse the calculs + to know if a process has to received data.} \end{center} \end{figure} -A process has to send data to the left if its current left limit is upper than its objective limit. -Same in the other side, and we can reverse the calculs to know if a process has to received data. +\clearpage +\subsection{Mpi calls} +Once every process know exactly what it needs to compute for itself +and for any other proc the bound GetRight() and GetLeft(), there is +only one Mpi communication AllToAll. + +To prepare the buffers to be sent and received, each proc count the +number of leafs (and the size) it holds, and divide them into +potentially three parts : +\begin{enumerate} +\item The datas to send to proc on left (Can be null). +\item The datas to keep (can be null). +\item The datas to send to proc on right(can be null). +\end{enumerate} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -237,10 +276,10 @@ shared cell at a level. There are to cases : \begin{itemize} - \item My first cell is shared means that I need to send the children I have of - this cell to the processus on my left. - \item My last cell is shared means that I need to receive some - children from the processus on my right. +\item My first cell is shared means that I need to send the children I have of + this cell to the processus on my left. +\item My last cell is shared means that I need to receive some + children from the processus on my right. \end{itemize} @@ -313,6 +352,46 @@ Example : \hline \end{tabular} +\subsection{Modified M2M} +The algorithm may not be efficient for special cases. Since the +communications do not progress (even in asynchrone way) while +computing the M2M, the algorithm has been modified, in order to set +one of the OMP thread to the communications. + +\begin{algorithm}[H] + \RestyleAlgo{boxed} + \LinesNumbered + \SetAlgoLined + \KwData{none} + \KwResult{none} + \BlankLine + \For{idxLevel $\leftarrow$ $Height - 2$ \KwTo 1}{ + \tcp{pragma omp single} + \Begin(To be done by one thread only){ + \uIf{$cells[0]$ not in my working interval}{ + isend($cells[0].child$)\; + hasSend $\leftarrow$ true\; + } + \uIf{$cells[end]$ in another working interval}{ + irecv(recvBuffer)\; + hasRecv $\leftarrow$ true\; + } + \emph{Wait send and recv if needed}\; + \uIf{hasRecv is true}{ + M2M($cells[end]$, recvBuffer)\; + } + } + \tcp{pragma omp for} + \Begin(To be done by all the other threads){ + \ForAll{Cell c at level idxLevel in working interval}{ + M2M(c, c.child)\; + } + } + } + \BlankLine + \caption{Distributed M2M} +\end{algorithm} + \clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -413,13 +492,25 @@ Finally they send and receive data in an asynchronous way and cover it by the P2 \BlankLine \caption{Distributed P2P} \end{algorithm} + +\subsection{Shared Memory Version} +The P2P algorithm is computed once for each pair of leafs belonging to +the same proc. This means that when a proc will compute the force on +the particles of leaf $1$ due to the particles of leaf $2$, both leafs +$1$ and $2$ will be updated. + +This way of compute the interaction is faster, but leads to +concurrency problems. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{M2L} The M2L operator is relatively similar to the P2P. -Hence P2P is done at the leaves level, M2L is done on several levels from Height - 2 to 2. +Hence P2P is done at the leaves level, M2L is done on several levels from $Height - 2$ to 2. At each level, a node needs to have access to all the distant neighbors of the cells it is the proprietary and those ones can be hosted by any other node. Anyway, each node can compute a part of the M2L with the data it has. +\subsection{Original Algorithm} The algorithm can be viewed as several tasks: \begin{enumerate} \item Compute to know what data has to be sent @@ -436,7 +527,7 @@ The algorithm can be viewed as several tasks: \KwData{none} \KwResult{none} \BlankLine - \ForAll{Level idxLeve from 2 to Height - 2}{ + \ForAll{Level idxLevel from 2 to Height - 2}{ \ForAll{Cell c at level idxLevel}{ neighborsIndexes $\leftarrow$ $c.potentialDistantNeighbors()$\; \ForAll{index in neighborsIndexes}{ @@ -462,6 +553,103 @@ The algorithm can be viewed as several tasks: \BlankLine \caption{Distributed M2L} \end{algorithm} + +\subsection{Algorithm Modified} +The idea in the following version is to cover the communications +between process with the work (M2L Self) that can be done without +anything from outside. + +\begin{algorithm}[H] + \RestyleAlgo{boxed} + \LinesNumbered + \SetAlgoLined + \KwData{none} + \KwResult{none} + \BlankLine + \Begin(To be done by one thread only){ \label{single} + \ForAll{Level idxLevel from 2 to Height - 2}{ + \ForAll{Cell c at level idxLevel}{ + neighborsIndexes $\leftarrow$ $c.potentialDistantNeighbors()$\; + \ForAll{index in neighborsIndexes}{ + \uIf{index belong to another proc}{ + isend(c)\; + \emph{Mark c as a cell that is linked to another proc}\; + } + } + } + } + \emph{Wait send and recv if needed}\; + } + \Begin(To be done by everybody else){\label{multiple} + \emph{Normal M2L}\; + } + \ForAll{Cell c received}{ + $lightOctree.insert( c )$\; + } + \ForAll{Level idxLeve from 2 to Height - 1}{ + \ForAll{Cell c at level idxLevel that are marked}{ + neighborsIndexes $\leftarrow$ $c.potentialDistantNeighbors()$\; + neighbors $\leftarrow$ lightOctree.get(neighborsIndexes)\; + M2L( c, neighbors)\; + } + } + \BlankLine + \caption{Distributed M2L 2} + +\end{algorithm} + + +\appendix + +\clearpage +\chapter{Cheat sheet about using EZtrace with ViTE on ScalFMM} + +In this appendix, one can find usefull information about using EZtrace +on ScalFMM, and visualisation with ViTE. + +\section{EZtrace} +EZTrace is a tool that aims at generating automatically execution +trace from HPC (High Performance Computing) programs. + +It does not need any source instrumentation. +Usefull variables : + +\begin{itemize} +\item EZTRACE\_FLUSH : set the value to $1$ in order to flush the + event buffer to the disk in case of uge amouts of datas. +\item EZTRACE\_TRACE : choice of the type of event one wants to + have. Example : EZTRACE\_TRACE="mpi stdio omp memory". Remark : Mpi do a + lot of call to pthread, so I suggest to not trace pthread events in + order to visualize the results. +\item EZTRACE\_TRACE\_DIR : path to a directory in wich eztrace will + store trace for each MPI Proc. (Set to /lustre/username/smt to avoid + overhead) +\end{itemize} + +Once the traces are generated, one need to convert them, in order to +visualize its. + +\section{ViTE} +ViTE is a high memory consumption software, so in order to use it, +avoid tracing pthread for example. + +One can zoom in and out in the gant chart. + +Plugin : One can get a histogram of each proc display the percentage +of time spend in different section. +\begin{itemize} + \item Got to Preferences $\rightarrow$ Plugin. +\end{itemize} + +Sorting the gant charts : Sometimes the process are badly sorted (like +0,1,10,11,2,3,4,5,6,7,8,9). It's possible to sort them with the mouse, +or with editing an xml file : +\begin{itemize} + \item Got to Preferences $\rightarrow$ Node Selection and then Sort, + or export/load xml file . +\end{itemize} + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{thebibliography}{9} diff --git a/Src/Core/FFmmAlgorithmThreadProc.hpp b/Src/Core/FFmmAlgorithmThreadProc.hpp old mode 100755 new mode 100644 index d5c13e167..c9da61c88 --- a/Src/Core/FFmmAlgorithmThreadProc.hpp +++ b/Src/Core/FFmmAlgorithmThreadProc.hpp @@ -23,6 +23,7 @@ #include "../Utils/FLog.hpp" #include "../Utils/FTrace.hpp" #include "../Utils/FTic.hpp" +#include "../Utils/FMPILog.hpp" #include "../Utils/FGlobal.hpp" #include "../Containers/FBoolArray.hpp" @@ -61,8 +62,8 @@ */ template<class OctreeClass, class CellClass, class ContainerClass, class KernelClass, class LeafClass> class FFmmAlgorithmThreadProc : public FAbstractAlgorithm { - - // const static int MaxSizePerCell = CellClass::GetSize(); + // Can be deleted + // const static int MaxSizePerCell = CellClass::GetSize(); OctreeClass* const tree; //< The octree to work on KernelClass** kernels; //< The kernels @@ -78,6 +79,8 @@ class FFmmAlgorithmThreadProc : public FAbstractAlgorithm { const int idProcess; //< Id of current process const int OctreeHeight; //<Height of the tree + + FMPILog* sharedLogger; //< Shared Logger to store all the information needed /** An interval is the morton index interval * that a proc use (it holds data in this interval) @@ -96,7 +99,6 @@ class FFmmAlgorithmThreadProc : public FAbstractAlgorithm { return workingIntervalsPerLevel[OctreeHeight * proc + level]; } - public: /** Get current proc interval at level */ Interval& getWorkingInterval( int level){ @@ -117,8 +119,9 @@ public: : tree(inTree) , kernels(0), comm(inComm), iterArray(nullptr),numberOfLeafs(0), MaxThreads(omp_get_max_threads()), nbProcess(inComm.processCount()), idProcess(inComm.processId()), OctreeHeight(tree->getHeight()),intervals(new Interval[inComm.processCount()]), - workingIntervalsPerLevel(new Interval[inComm.processCount() * tree->getHeight()]){ - + workingIntervalsPerLevel(new Interval[inComm.processCount() * tree->getHeight()]) + { + FLOG(sharedLogger = new FMPILog(comm)); FAssertLF(tree, "tree cannot be null"); this->kernels = new KernelClass*[MaxThreads]; @@ -146,7 +149,7 @@ public: */ void execute(const unsigned operationsToProceed = FFmmNearAndFarFields){ FTRACE( FTrace::FFunction functionTrace( __FUNCTION__, "Fmm" , __FILE__ , __LINE__ ) ); - + FLOG(sharedLogger->newCounter("Prolog")); // Count leaf this->numberOfLeafs = 0; { @@ -179,7 +182,6 @@ public: octreeIterator.gotoBottomLeft(); octreeIterator.moveUp(); - //Da fck is dat ?! MortonIndex currentLimit = intervals[idProcess-1].max >> 3; for(int idxLevel = OctreeHeight - 2 ; idxLevel >= 1 ; --idxLevel){ @@ -198,6 +200,8 @@ public: delete[] myIntervals; } + FLOG(sharedLogger->tac("Prolog")); + // run; if(operationsToProceed & FFmmP2M) bottomPass(); @@ -209,6 +213,7 @@ public: if((operationsToProceed & FFmmP2P) || (operationsToProceed & FFmmL2P)) directPass(); + // delete array delete [] iterArray; iterArray = 0; @@ -224,8 +229,8 @@ private: void bottomPass(){ FTRACE( FTrace::FFunction functionTrace(__FUNCTION__, "Fmm" , __FILE__ , __LINE__) ); FLOG( FLog::Controller.write("\tStart Bottom Pass\n").write(FLog::Flush) ); - FLOG(FTic counterTime); - + //FLOG(sharedLogger->newCounter(std::string("counterTimeP2M"))); + typename OctreeClass::Iterator octreeIterator(tree); // Iterate on leafs @@ -235,7 +240,8 @@ private: iterArray[leafs++] = octreeIterator; } while(octreeIterator.moveRight()); - FLOG(FTic computationCounter); + //FLOG(sharedLogger->newCounter("ParallelSectionP2M")); + //FLOG(sharedLogger->newCounter("ParallelSection")); #pragma omp parallel { KernelClass * const myThreadkernels = kernels[omp_get_thread_num()]; @@ -244,11 +250,11 @@ private: myThreadkernels->P2M( iterArray[idxLeafs].getCurrentCell() , iterArray[idxLeafs].getCurrentListSrc()); } } - FLOG(computationCounter.tac()); - - FLOG( FLog::Controller << "\tFinished (@Bottom Pass (P2M) = " << counterTime.tacAndElapsed() << " s)\n" ); - FLOG( FLog::Controller << "\t\t Computation : " << computationCounter.elapsed() << " s\n" ); - + //FLOG(sharedLogger->tac("ParallelSection")); + //FLOG(sharedLogger->tac("ParallelSectionP2M")); + //FLOG(sharedLogger->tac("counterTimeP2M")); + // FLOG( FLog::Controller << "\tFinished (@Bottom Pass (P2M) = " << counterTime.tacAndElapsed() << " s)\n" ); + // FLOG( FLog::Controller << "\t\t Computation : " << computationCounter.elapsed() << " s\n" ); } ///////////////////////////////////////////////////////////////////////////// @@ -262,9 +268,9 @@ private: FLOG( FLog::Controller.write("\tStart Upward Pass\n").write(FLog::Flush); ); FLOG(FTic counterTime); FLOG(FTic computationCounter); - FLOG(FTic prepareCounter); - FLOG(FTic waitCounter); - + FLOG(FTic singleCounter); + FLOG(FTic parallelCounter); + // Start from leal level - 1 typename OctreeClass::Iterator octreeIterator(tree); octreeIterator.gotoBottomLeft(); @@ -286,10 +292,9 @@ private: CellClass recvBufferCells[8]; int firstProcThatSend = idProcess + 1; - - // for each levels + FLOG(computationCounter.tic()); + //Loop for work for(int idxLevel = OctreeHeight - 2 ; idxLevel > 1 ; --idxLevel ){ - // No more work for me if(idProcess != 0 && getWorkingInterval((idxLevel+1), idProcess).max <= getWorkingInterval((idxLevel+1), idProcess - 1).max){ break; @@ -303,141 +308,154 @@ private: } while(octreeIterator.moveRight()); avoidGotoLeftIterator.moveUp(); octreeIterator = avoidGotoLeftIterator; - - // We may need to send something - int iterRequests = 0; + int cellsToSend = -1; + int iterRequests = 0; + + int endIndex = numberOfCells; + //Test if i'm not the last, and I need st to compute my last M2M + if((idProcess != nbProcess-1) && (getWorkingInterval(idxLevel+1,idProcess+1)).min <= getWorkingInterval(idxLevel+1,idProcess).max){ + endIndex--; + } while(iterArray[cellsToSend+1].getCurrentGlobalIndex() < getWorkingInterval(idxLevel, idProcess).min){ ++cellsToSend; } - - FTRACE( FTrace::FRegion regionTrace( "Preprocess" , __FUNCTION__ , __FILE__ , __LINE__) ); - - FLOG(prepareCounter.tic()); - if(idProcess != 0 - && (getWorkingInterval((idxLevel+1), idProcess).min >>3) <= (getWorkingInterval((idxLevel+1), idProcess - 1).max >>3)){ - - char state = 0; - sendBuffer.write(state); - - const CellClass* const* const child = iterArray[cellsToSend].getCurrentChild(); - for(int idxChild = 0 ; idxChild < 8 ; ++idxChild){ - if( child[idxChild] && getWorkingInterval((idxLevel+1), idProcess).min <= child[idxChild]->getMortonIndex() ){ - child[idxChild]->serializeUp(sendBuffer); - state = char(state | (0x1 << idxChild)); + FLOG(parallelCounter.tic()); +#pragma omp parallel + { + //This single section is supposed post and receive the comms, and then do the M2M associated with its. +#pragma omp single + { + FLOG(singleCounter.tic()); + //Datas needed in several parts of the section + bool hasToReceive; + int endProcThatSend; + + //Post Send + if(idProcess != 0 + && (getWorkingInterval((idxLevel+1), idProcess).min >>3) <= (getWorkingInterval((idxLevel+1), idProcess - 1).max >>3)){ - } - } - sendBuffer.writeAt(0,state); - - while( sendToProc && iterArray[cellsToSend].getCurrentGlobalIndex() <= getWorkingInterval(idxLevel , sendToProc - 1).max){ - --sendToProc; - } - - MPI_Isend(sendBuffer.data(), sendBuffer.getSize(), MPI_PACKED, sendToProc, - FMpi::TagFmmM2M, comm.getComm(), &requests[iterRequests++]); - - } - // We may need to receive something - bool hasToReceive = false; - int endProcThatSend = firstProcThatSend; - - if(idProcess != nbProcess - 1){ // if I'm the last one (idProcess == nbProcess-1), I shall not receive anything in a M2M - while(firstProcThatSend < nbProcess - && (getWorkingInterval((idxLevel+1), firstProcThatSend).max) <= (getWorkingInterval((idxLevel+1), idProcess).max)){ - // Second condition :: while firstProcThatSend max morton index is < to myself max interval - ++firstProcThatSend; - } - - if(firstProcThatSend < nbProcess && - (getWorkingInterval((idxLevel+1), firstProcThatSend).min >>3) <= (getWorkingInterval((idxLevel+1) , idProcess).max>>3) ){ - - endProcThatSend = firstProcThatSend; - - while( endProcThatSend < nbProcess && - (getWorkingInterval((idxLevel+1) ,endProcThatSend).min >>3) <= (getWorkingInterval((idxLevel+1) , idProcess).max>>3)){ - ++endProcThatSend; - } - - - if(firstProcThatSend != endProcThatSend){ - hasToReceive = true; + char state = 0; + sendBuffer.write(state); + + const CellClass* const* const child = iterArray[cellsToSend].getCurrentChild(); + for(int idxChild = 0 ; idxChild < 8 ; ++idxChild){ + if( child[idxChild] && getWorkingInterval((idxLevel+1), idProcess).min <= child[idxChild]->getMortonIndex() ){ + child[idxChild]->serializeUp(sendBuffer); + state = char(state | (0x1 << idxChild)); + + } + } + sendBuffer.writeAt(0,state); - for(int idxProc = firstProcThatSend ; idxProc < endProcThatSend ; ++idxProc ){ - MPI_Irecv(&recvBuffer.data()[idxProc * recvBufferOffset], recvBufferOffset, MPI_PACKED, - idxProc, FMpi::TagFmmM2M, comm.getComm(), &requests[iterRequests++]); + while( sendToProc && iterArray[cellsToSend].getCurrentGlobalIndex() <= getWorkingInterval(idxLevel , sendToProc - 1).max){ + --sendToProc; } + + MPI_Isend(sendBuffer.data(), sendBuffer.getSize(), MPI_PACKED, sendToProc, + FMpi::TagFmmM2M, comm.getComm(), &requests[iterRequests++]); + } - } - } - - FLOG(prepareCounter.tac()); - FTRACE( regionTrace.end() ); - - // Compute - const int endIndex = (hasToReceive?numberOfCells-1:numberOfCells); - FLOG(computationCounter.tic()); -#pragma omp parallel - { - KernelClass& myThreadkernels = (*kernels[omp_get_thread_num()]); -#pragma omp for nowait - for( int idxCell = cellsToSend + 1 ; idxCell < endIndex ; ++idxCell){ - myThreadkernels.M2M( iterArray[idxCell].getCurrentCell() , iterArray[idxCell].getCurrentChild(), idxLevel); - } - } - FLOG(computationCounter.tac()); - - // Are we sending or waiting anything? - if(iterRequests){ - FLOG(waitCounter.tic()); - MPI_Waitall( iterRequests, requests, status); - FLOG(waitCounter.tac()); - - // we were receiving data - if( hasToReceive ){ - CellClass* currentChild[8]; - memcpy(currentChild, iterArray[numberOfCells - 1].getCurrentChild(), 8 * sizeof(CellClass*)); - - // retreive data and merge my child and the child from others - for(int idxProc = firstProcThatSend ; idxProc < endProcThatSend ; ++idxProc){ - recvBuffer.seek(idxProc * recvBufferOffset); - int state = int(recvBuffer.getValue<char>()); + //Post receive + { + // We may need to receive something + hasToReceive = false; + endProcThatSend = firstProcThatSend; - int position = 0; - while( state && position < 8){ - while(!(state & 0x1)){ - state >>= 1; - ++position; + if(idProcess != nbProcess - 1){ // if I'm the last one (idProcess == nbProcess-1), I shall not receive anything in a M2M + while(firstProcThatSend < nbProcess + && (getWorkingInterval((idxLevel+1), firstProcThatSend).max) <= (getWorkingInterval((idxLevel+1), idProcess).max)){ + // Second condition :: while firstProcThatSend max morton index is < to myself max interval + ++firstProcThatSend; } - FAssertLF(!currentChild[position], "Already has a cell here"); - - recvBufferCells[position].deserializeUp(recvBuffer); - currentChild[position] = (CellClass*) &recvBufferCells[position]; - - state >>= 1; - ++position; + if(firstProcThatSend < nbProcess && + (getWorkingInterval((idxLevel+1), firstProcThatSend).min >>3) <= (getWorkingInterval((idxLevel+1) , idProcess).max>>3) ){ + + endProcThatSend = firstProcThatSend; + + while( endProcThatSend < nbProcess && + (getWorkingInterval((idxLevel+1) ,endProcThatSend).min >>3) <= (getWorkingInterval((idxLevel+1) , idProcess).max>>3)){ + ++endProcThatSend; + } + + + if(firstProcThatSend != endProcThatSend){ + hasToReceive = true; + + for(int idxProc = firstProcThatSend ; idxProc < endProcThatSend ; ++idxProc ){ + MPI_Irecv(&recvBuffer.data()[idxProc * recvBufferOffset], recvBufferOffset, MPI_PACKED, + idxProc, FMpi::TagFmmM2M, comm.getComm(), &requests[iterRequests++]); + } + } + } } } + //Wait For the comms, and do the work + { + // Are we sending or waiting anything? + if(iterRequests){ + //FLOG(sharedLogger->tic("waitCounterM2M")); + MPI_Waitall( iterRequests, requests, status); + //FLOG(sharedLogger->tac("waitCounterM2M")); + // we were receiving data + if( hasToReceive ){ + CellClass* currentChild[8]; + memcpy(currentChild, iterArray[numberOfCells - 1].getCurrentChild(), 8 * sizeof(CellClass*)); + + // retreive data and merge my child and the child from others + for(int idxProc = firstProcThatSend ; idxProc < endProcThatSend ; ++idxProc){ + recvBuffer.seek(idxProc * recvBufferOffset); + int state = int(recvBuffer.getValue<char>()); + + int position = 0; + while( state && position < 8){ + while(!(state & 0x1)){ + state >>= 1; + ++position; + } + + FAssertLF(!currentChild[position], "Already has a cell here"); + + recvBufferCells[position].deserializeUp(recvBuffer); + currentChild[position] = (CellClass*) &recvBufferCells[position]; + + state >>= 1; + ++position; + } + } - // Finally compute - FLOG(computationCounter.tic()); - (*kernels[0]).M2M( iterArray[numberOfCells - 1].getCurrentCell() , currentChild, idxLevel); - FLOG(computationCounter.tac()); - - firstProcThatSend = endProcThatSend - 1; + // Finally compute + //FLOG(sharedLogger->tic("ParallelSectionM2M")); + (*kernels[0]).M2M( iterArray[numberOfCells - 1].getCurrentCell() , currentChild, idxLevel); + //FLOG(sharedLogger->tac("ParallelSectionM2M")); + + firstProcThatSend = endProcThatSend - 1; + } + } + } + sendBuffer.reset(); + recvBuffer.seek(0); + FLOG(singleCounter.tac()); + }//End Of Single section + + KernelClass& myThreadkernels = (*kernels[omp_get_thread_num()]); +#pragma omp for nowait + for( int idxCell = cellsToSend+1 ; idxCell < endIndex ; ++idxCell){ + myThreadkernels.M2M( iterArray[idxCell].getCurrentCell() , iterArray[idxCell].getCurrentChild(), idxLevel); } - } - sendBuffer.reset(); - recvBuffer.seek(0); + }//End of parallel section + FLOG(parallelCounter.tac()); } + - - FLOG( FLog::Controller << "\tFinished (@Upward Pass (M2M) = " << counterTime.tacAndElapsed() << " s)\n" ); - FLOG( FLog::Controller << "\t\t Computation : " << computationCounter.cumulated() << " s\n" ); - FLOG( FLog::Controller << "\t\t Prepare : " << prepareCounter.cumulated() << " s\n" ); - FLOG( FLog::Controller << "\t\t Wait : " << waitCounter.cumulated() << " s\n" ); + FLOG(counterTime.tac()); + FLOG(computationCounter.tac()); + FLOG( FLog::Controller << "\tFinished (@Upward Pass (M2M) = " << counterTime.elapsed() << " s)\n" ); + FLOG( FLog::Controller << "\t\t Computation : " << computationCounter.elapsed() << " s\n" ); + FLOG( FLog::Controller << "\t\t Wait : " << singleCounter.cumulated() << " s\n" ); + FLOG( FLog::Controller << "\t\t Wait : " << parallelCounter.cumulated() << " s\n" ); } ///////////////////////////////////////////////////////////////////////////// @@ -452,10 +470,11 @@ private: FLOG( FLog::Controller.write("\tStart Downward Pass (M2L)\n").write(FLog::Flush); ); FLOG(FTic counterTime); FLOG(FTic computationCounter); - FLOG(FTic sendCounter); - FLOG(FTic receiveCounter); - FLOG(FTic prepareCounter); + FLOG(FTic singleCounter); FLOG(FTic gatherCounter); + FLOG(FTic m2lSelf); + FLOG(FTic m2lFar); + FLOG(FTic sendCounter); ////////////////////////////////////////////////////////////////// // First know what to send to who @@ -470,307 +489,326 @@ private: FBoolArray** const leafsNeedOther = new FBoolArray*[OctreeHeight]; memset(leafsNeedOther, 0, sizeof(FBoolArray*) * OctreeHeight); - { - FTRACE( FTrace::FRegion regionTrace( "Preprocess" , __FUNCTION__ , __FILE__ , __LINE__) ); - FLOG(prepareCounter.tic()); - - // To know if a leaf has been already sent to a proc - bool*const alreadySent = new bool[nbProcess]; - memset(alreadySent, 0, sizeof(bool) * nbProcess); + //Variables needed in multiple omp sections + int iterRequest; + MPI_Request * requests; + MPI_Status * status; + int* globalReceiveMap; + FMpiBufferWriter** sendBuffer; + FMpiBufferReader** recvBuffer; - typename OctreeClass::Iterator octreeIterator(tree); - octreeIterator.moveDown(); - typename OctreeClass::Iterator avoidGotoLeftIterator(octreeIterator); - // for each levels - for(int idxLevel = 2 ; idxLevel < OctreeHeight ; ++idxLevel ){ - if(idProcess != 0 - && getWorkingInterval(idxLevel, idProcess).max <= getWorkingInterval(idxLevel, idProcess - 1).max){ +#pragma omp parallel + { +#pragma omp single nowait + { + FTRACE( FTrace::FRegion regionTrace( "Preprocess" , __FUNCTION__ , __FILE__ , __LINE__) ); + FLOG(singleCounter.tic()); + + // To know if a leaf has been already sent to a proc + bool*const alreadySent = new bool[nbProcess]; + memset(alreadySent, 0, sizeof(bool) * nbProcess); + + typename OctreeClass::Iterator octreeIterator(tree); + octreeIterator.moveDown(); + typename OctreeClass::Iterator avoidGotoLeftIterator(octreeIterator); + // for each levels + for(int idxLevel = 2 ; idxLevel < OctreeHeight ; ++idxLevel ){ + if(idProcess != 0 + && getWorkingInterval(idxLevel, idProcess).max <= getWorkingInterval(idxLevel, idProcess - 1).max){ + avoidGotoLeftIterator.moveDown(); + octreeIterator = avoidGotoLeftIterator; + + continue; + } + + int numberOfCells = 0; + + while(octreeIterator.getCurrentGlobalIndex() < getWorkingInterval(idxLevel , idProcess).min){ + octreeIterator.moveRight(); + } + + // for each cells + do{ + iterArray[numberOfCells] = octreeIterator; + ++numberOfCells; + } while(octreeIterator.moveRight()); avoidGotoLeftIterator.moveDown(); octreeIterator = avoidGotoLeftIterator; - - continue; - } - - int numberOfCells = 0; - - while(octreeIterator.getCurrentGlobalIndex() < getWorkingInterval(idxLevel , idProcess).min){ - octreeIterator.moveRight(); - } - - // for each cells - do{ - iterArray[numberOfCells] = octreeIterator; - ++numberOfCells; - } while(octreeIterator.moveRight()); - avoidGotoLeftIterator.moveDown(); - octreeIterator = avoidGotoLeftIterator; - - leafsNeedOther[idxLevel] = new FBoolArray(numberOfCells); - - - // Which cell potentialy needs other data and in the same time - // are potentialy needed by other - MortonIndex neighborsIndexes[189]; - for(int idxCell = 0 ; idxCell < numberOfCells ; ++idxCell){ - // Find the M2L neigbors of a cell - const int counter = iterArray[idxCell].getCurrentGlobalCoordinate().getInteractionNeighbors(idxLevel, neighborsIndexes); - - memset(alreadySent, false, sizeof(bool) * nbProcess); - bool needOther = false; - // Test each negibors to know which one do not belong to us - for(int idxNeigh = 0 ; idxNeigh < counter ; ++idxNeigh){ - if(neighborsIndexes[idxNeigh] < getWorkingInterval(idxLevel , idProcess).min - || (getWorkingInterval(idxLevel , idProcess).max) < neighborsIndexes[idxNeigh]){ - int procToReceive = idProcess; - while( 0 != procToReceive && neighborsIndexes[idxNeigh] < getWorkingInterval(idxLevel , procToReceive).min ){ - --procToReceive; - } - while( procToReceive != nbProcess -1 && (getWorkingInterval(idxLevel , procToReceive).max) < neighborsIndexes[idxNeigh]){ - ++procToReceive; - } - // Maybe already sent to that proc? - if( !alreadySent[procToReceive] - && getWorkingInterval(idxLevel , procToReceive).min <= neighborsIndexes[idxNeigh] - && neighborsIndexes[idxNeigh] <= getWorkingInterval(idxLevel , procToReceive).max){ - - alreadySent[procToReceive] = true; - - needOther = true; - - toSend[idxLevel * nbProcess + procToReceive].push(iterArray[idxCell]); - ++indexToSend[idxLevel * nbProcess + procToReceive]; + + leafsNeedOther[idxLevel] = new FBoolArray(numberOfCells); + + + // Which cell potentialy needs other data and in the same time + // are potentialy needed by other + MortonIndex neighborsIndexes[189]; + for(int idxCell = 0 ; idxCell < numberOfCells ; ++idxCell){ + // Find the M2L neigbors of a cell + const int counter = iterArray[idxCell].getCurrentGlobalCoordinate().getInteractionNeighbors(idxLevel, neighborsIndexes); + + memset(alreadySent, false, sizeof(bool) * nbProcess); + bool needOther = false; + // Test each negibors to know which one do not belong to us + for(int idxNeigh = 0 ; idxNeigh < counter ; ++idxNeigh){ + if(neighborsIndexes[idxNeigh] < getWorkingInterval(idxLevel , idProcess).min + || (getWorkingInterval(idxLevel , idProcess).max) < neighborsIndexes[idxNeigh]){ + int procToReceive = idProcess; + while( 0 != procToReceive && neighborsIndexes[idxNeigh] < getWorkingInterval(idxLevel , procToReceive).min ){ + --procToReceive; + } + while( procToReceive != nbProcess -1 && (getWorkingInterval(idxLevel , procToReceive).max) < neighborsIndexes[idxNeigh]){ + ++procToReceive; + } + // Maybe already sent to that proc? + if( !alreadySent[procToReceive] + && getWorkingInterval(idxLevel , procToReceive).min <= neighborsIndexes[idxNeigh] + && neighborsIndexes[idxNeigh] <= getWorkingInterval(idxLevel , procToReceive).max){ + + alreadySent[procToReceive] = true; + + needOther = true; + + toSend[idxLevel * nbProcess + procToReceive].push(iterArray[idxCell]); + ++indexToSend[idxLevel * nbProcess + procToReceive]; + } } } + if(needOther){ + leafsNeedOther[idxLevel]->set(idxCell,true); + } + } - if(needOther){ - leafsNeedOther[idxLevel]->set(idxCell,true); - } - + } - } - FLOG(prepareCounter.tac()); - - delete[] alreadySent; - } - - ////////////////////////////////////////////////////////////////// - // Gather this information - ////////////////////////////////////////////////////////////////// - - FLOG(gatherCounter.tic()); - // All process say to each others - // what the will send to who - int*const globalReceiveMap = new int[nbProcess * nbProcess * OctreeHeight]; - memset(globalReceiveMap, 0, sizeof(int) * nbProcess * nbProcess * OctreeHeight); - FMpi::MpiAssert( MPI_Allgather( indexToSend, nbProcess * OctreeHeight, MPI_INT, globalReceiveMap, nbProcess * OctreeHeight, MPI_INT, comm.getComm()), __LINE__ ); - FLOG(gatherCounter.tac()); - - - ////////////////////////////////////////////////////////////////// - // Send and receive for real - ////////////////////////////////////////////////////////////////// - - FLOG(sendCounter.tic()); - // Then they can send and receive (because they know what they will receive) - // To send in asynchrone way - MPI_Request*const requests = new MPI_Request[2 * nbProcess * OctreeHeight]; - MPI_Status*const status = new MPI_Status[2 * nbProcess * OctreeHeight]; - int iterRequest = 0; - - const int SizeOfCellToSend = sizeof(MortonIndex) + sizeof(int) + MaxSizePerCell; - - FMpiBufferWriter**const sendBuffer = new FMpiBufferWriter*[nbProcess * OctreeHeight]; - memset(sendBuffer, 0, sizeof(FMpiBufferWriter*) * nbProcess * OctreeHeight); + delete[] alreadySent; + - FMpiBufferReader**const recvBuffer = new FMpiBufferReader*[nbProcess * OctreeHeight]; - memset(recvBuffer, 0, sizeof(FMpiBufferReader*) * nbProcess * OctreeHeight); + ////////////////////////////////////////////////////////////////// + // Gather this information + ////////////////////////////////////////////////////////////////// + + FLOG(gatherCounter.tic()); + // All process say to each others + // what the will send to who + globalReceiveMap = new int[nbProcess * nbProcess * OctreeHeight]; + memset(globalReceiveMap, 0, sizeof(int) * nbProcess * nbProcess * OctreeHeight); + FMpi::MpiAssert( MPI_Allgather( indexToSend, nbProcess * OctreeHeight, MPI_INT, globalReceiveMap, nbProcess * OctreeHeight, MPI_INT, comm.getComm()), __LINE__ ); + FLOG(gatherCounter.tac()); + + ////////////////////////////////////////////////////////////////// + // Send and receive for real + ////////////////////////////////////////////////////////////////// + + FLOG(sendCounter.tic()); + // Then they can send and receive (because they know what they will receive) + // To send in asynchrone way + requests = new MPI_Request[2 * nbProcess * OctreeHeight]; + status = new MPI_Status[2 * nbProcess * OctreeHeight]; + iterRequest = 0; + + const int SizeOfCellToSend = int(sizeof(MortonIndex) + sizeof(int) + MaxSizePerCell); + + sendBuffer = new FMpiBufferWriter*[nbProcess * OctreeHeight]; + memset(sendBuffer, 0, sizeof(FMpiBufferWriter*) * nbProcess * OctreeHeight); + + recvBuffer = new FMpiBufferReader*[nbProcess * OctreeHeight]; + memset(recvBuffer, 0, sizeof(FMpiBufferReader*) * nbProcess * OctreeHeight); - for(int idxLevel = 2 ; idxLevel < OctreeHeight ; ++idxLevel ){ - for(int idxProc = 0 ; idxProc < nbProcess ; ++idxProc){ - const int toSendAtProcAtLevel = indexToSend[idxLevel * nbProcess + idxProc]; - if(toSendAtProcAtLevel != 0){ - sendBuffer[idxLevel * nbProcess + idxProc] = new FMpiBufferWriter(comm.getComm(),toSendAtProcAtLevel * SizeOfCellToSend); - - for(int idxLeaf = 0 ; idxLeaf < toSendAtProcAtLevel; ++idxLeaf){ - const MortonIndex cellIndex = toSend[idxLevel * nbProcess + idxProc][idxLeaf].getCurrentGlobalIndex(); - sendBuffer[idxLevel * nbProcess + idxProc]->write(cellIndex); - toSend[idxLevel * nbProcess + idxProc][idxLeaf].getCurrentCell()->serializeUp(*sendBuffer[idxLevel * nbProcess + idxProc]); + + for(int idxLevel = 2 ; idxLevel < OctreeHeight ; ++idxLevel ){ + for(int idxProc = 0 ; idxProc < nbProcess ; ++idxProc){ + const int toSendAtProcAtLevel = indexToSend[idxLevel * nbProcess + idxProc]; + if(toSendAtProcAtLevel != 0){ + sendBuffer[idxLevel * nbProcess + idxProc] = new FMpiBufferWriter(comm.getComm(),toSendAtProcAtLevel * SizeOfCellToSend); + + for(int idxLeaf = 0 ; idxLeaf < toSendAtProcAtLevel; ++idxLeaf){ + const MortonIndex cellIndex = toSend[idxLevel * nbProcess + idxProc][idxLeaf].getCurrentGlobalIndex(); + sendBuffer[idxLevel * nbProcess + idxProc]->write(cellIndex); + toSend[idxLevel * nbProcess + idxProc][idxLeaf].getCurrentCell()->serializeUp(*sendBuffer[idxLevel * nbProcess + idxProc]); + } + + FMpi::MpiAssert( MPI_Isend( sendBuffer[idxLevel * nbProcess + idxProc]->data(), + sendBuffer[idxLevel * nbProcess + idxProc]->getSize(),MPI_PACKED, idxProc, + FMpi::TagLast + idxLevel, comm.getComm(), &requests[iterRequest++]) , __LINE__ ); + } + + const int toReceiveFromProcAtLevel = globalReceiveMap[(idxProc * nbProcess * OctreeHeight) + idxLevel * nbProcess + idProcess]; + if(toReceiveFromProcAtLevel){ + recvBuffer[idxLevel * nbProcess + idxProc] = new FMpiBufferReader(comm.getComm(),toReceiveFromProcAtLevel * SizeOfCellToSend); + + FMpi::MpiAssert( MPI_Irecv(recvBuffer[idxLevel * nbProcess + idxProc]->data(), + recvBuffer[idxLevel * nbProcess + idxProc]->getCapacity(), MPI_PACKED,idxProc, + FMpi::TagLast + idxLevel, comm.getComm(), &requests[iterRequest++]) , __LINE__ ); + } } - - FMpi::MpiAssert( MPI_Isend( sendBuffer[idxLevel * nbProcess + idxProc]->data(), - sendBuffer[idxLevel * nbProcess + idxProc]->getSize(),MPI_PACKED, idxProc, - FMpi::TagLast + idxLevel, comm.getComm(), &requests[iterRequest++]) , __LINE__ ); } - - const int toReceiveFromProcAtLevel = globalReceiveMap[(idxProc * nbProcess * OctreeHeight) + idxLevel * nbProcess + idProcess]; - if(toReceiveFromProcAtLevel){ - recvBuffer[idxLevel * nbProcess + idxProc] = new FMpiBufferReader(comm.getComm(),toReceiveFromProcAtLevel * SizeOfCellToSend); - - FMpi::MpiAssert( MPI_Irecv(recvBuffer[idxLevel * nbProcess + idxProc]->data(), - recvBuffer[idxLevel * nbProcess + idxProc]->getCapacity(), MPI_PACKED,idxProc, - FMpi::TagLast + idxLevel, comm.getComm(), &requests[iterRequest++]) , __LINE__ ); + FLOG(sendCounter.tac()); + { + ////////////////////////////////////////////////////////////////// + // Wait received data and compute + ////////////////////////////////////////////////////////////////// + + // Wait to receive every things (and send every things) + MPI_Waitall(iterRequest, requests, status); } - } - } - FLOG(sendCounter.tac()); - - ////////////////////////////////////////////////////////////////// - // Do M2L - ////////////////////////////////////////////////////////////////// - - { - FTRACE( FTrace::FRegion regionTrace("Compute", __FUNCTION__ , __FILE__ , __LINE__) ); - typename OctreeClass::Iterator octreeIterator(tree); - octreeIterator.moveDown(); - typename OctreeClass::Iterator avoidGotoLeftIterator(octreeIterator); - // Now we can compute all the data - // for each levels - for(int idxLevel = 2 ; idxLevel < OctreeHeight ; ++idxLevel ){ - if(idProcess != 0 - && getWorkingInterval(idxLevel, idProcess).max <= getWorkingInterval(idxLevel, idProcess - 1).max){ - + FLOG(singleCounter.tac()); + }//End of Single section + + ////////////////////////////////////////////////////////////////// + // Do M2L SELF + ////////////////////////////////////////////////////////////////// + FLOG(m2lSelf.tic()); + { + FTRACE( FTrace::FRegion regionTrace("Compute", __FUNCTION__ , __FILE__ , __LINE__) ); + typename OctreeClass::Iterator octreeIterator(tree); + octreeIterator.moveDown(); + typename OctreeClass::Iterator avoidGotoLeftIterator(octreeIterator); + // Now we can compute all the data + // for each levels + for(int idxLevel = 2 ; idxLevel < OctreeHeight ; ++idxLevel ){ + if(idProcess != 0 + && getWorkingInterval(idxLevel, idProcess).max <= getWorkingInterval(idxLevel, idProcess - 1).max){ + + avoidGotoLeftIterator.moveDown(); + octreeIterator = avoidGotoLeftIterator; + + continue; + } + + int numberOfCells = 0; + while(octreeIterator.getCurrentGlobalIndex() < getWorkingInterval(idxLevel , idProcess).min){ + octreeIterator.moveRight(); + } + // for each cells + do{ + iterArray[numberOfCells] = octreeIterator; + ++numberOfCells; + } while(octreeIterator.moveRight()); avoidGotoLeftIterator.moveDown(); octreeIterator = avoidGotoLeftIterator; + + FLOG(computationCounter.tic()); + //FLOG(sharedLogger->tic("ParallelSection")); + //FLOG(sharedLogger->newCounter("TestParallelM2L")); - continue; - } - - int numberOfCells = 0; - while(octreeIterator.getCurrentGlobalIndex() < getWorkingInterval(idxLevel , idProcess).min){ - octreeIterator.moveRight(); - } - // for each cells - do{ - iterArray[numberOfCells] = octreeIterator; - ++numberOfCells; - } while(octreeIterator.moveRight()); - avoidGotoLeftIterator.moveDown(); - octreeIterator = avoidGotoLeftIterator; - - FLOG(computationCounter.tic()); -#pragma omp parallel - { - KernelClass * const myThreadkernels = kernels[omp_get_thread_num()]; - const CellClass* neighbors[343]; - -#pragma omp for schedule(dynamic) nowait - for(int idxCell = 0 ; idxCell < numberOfCells ; ++idxCell){ - const int counter = tree->getInteractionNeighbors(neighbors, iterArray[idxCell].getCurrentGlobalCoordinate(), idxLevel); - if(counter) myThreadkernels->M2L( iterArray[idxCell].getCurrentCell() , neighbors, counter, idxLevel); + { + KernelClass * const myThreadkernels = kernels[omp_get_thread_num()]; + const CellClass* neighbors[343]; + +#pragma omp for schedule(dynamic) //nowait + for(int idxCell = 0 ; idxCell < numberOfCells ; ++idxCell){ + const int counter = tree->getInteractionNeighbors(neighbors, iterArray[idxCell].getCurrentGlobalCoordinate(), idxLevel); + if(counter) myThreadkernels->M2L( iterArray[idxCell].getCurrentCell() , neighbors, counter, idxLevel); + } + myThreadkernels->finishedLevelM2L(idxLevel); } - - myThreadkernels->finishedLevelM2L(idxLevel); + //FLOG(sharedLogger->tac("TestParallelM2L")); + FLOG(computationCounter.tac()); + //FLOG(sharedLogger->tac("ParallelSection")); } - FLOG(computationCounter.tac()); } + FLOG(m2lSelf.tac()); } + + + FTRACE( FTrace::FRegion regionTrace("Compute Received data", __FUNCTION__ , __FILE__ , __LINE__) ); + + typename OctreeClass::Iterator octreeIterator(tree); + octreeIterator.moveDown(); + typename OctreeClass::Iterator avoidGotoLeftIterator(octreeIterator); + // compute the second time + // for each levels + for(int idxLevel = 2 ; idxLevel < OctreeHeight ; ++idxLevel ){ + if(idProcess != 0 + && getWorkingInterval(idxLevel, idProcess).max <= getWorkingInterval(idxLevel, idProcess - 1).max){ + + avoidGotoLeftIterator.moveDown(); + octreeIterator = avoidGotoLeftIterator; + + continue; + } - ////////////////////////////////////////////////////////////////// - // Wait received data and compute - ////////////////////////////////////////////////////////////////// - - // Wait to receive every things (and send every things) - MPI_Waitall(iterRequest, requests, status); - - { - FTRACE( FTrace::FRegion regionTrace("Compute Received data", __FUNCTION__ , __FILE__ , __LINE__) ); - FLOG(receiveCounter.tic()); - typename OctreeClass::Iterator octreeIterator(tree); - octreeIterator.moveDown(); - typename OctreeClass::Iterator avoidGotoLeftIterator(octreeIterator); - // compute the second time - // for each levels - for(int idxLevel = 2 ; idxLevel < OctreeHeight ; ++idxLevel ){ - if(idProcess != 0 - && getWorkingInterval(idxLevel, idProcess).max <= getWorkingInterval(idxLevel, idProcess - 1).max){ - - avoidGotoLeftIterator.moveDown(); - octreeIterator = avoidGotoLeftIterator; - - continue; - } - - // put the received data into a temporary tree - FLightOctree<CellClass> tempTree; - for(int idxProc = 0 ; idxProc < nbProcess ; ++idxProc){ - const int toReceiveFromProcAtLevel = globalReceiveMap[(idxProc * nbProcess * OctreeHeight) + idxLevel * nbProcess + idProcess]; + // put the received data into a temporary tree + FLightOctree<CellClass> tempTree; + for(int idxProc = 0 ; idxProc < nbProcess ; ++idxProc){ + const int toReceiveFromProcAtLevel = globalReceiveMap[(idxProc * nbProcess * OctreeHeight) + idxLevel * nbProcess + idProcess]; - for(int idxCell = 0 ; idxCell < toReceiveFromProcAtLevel ; ++idxCell){ - const MortonIndex cellIndex = recvBuffer[idxLevel * nbProcess + idxProc]->FMpiBufferReader::getValue<MortonIndex>(); + for(int idxCell = 0 ; idxCell < toReceiveFromProcAtLevel ; ++idxCell){ + const MortonIndex cellIndex = recvBuffer[idxLevel * nbProcess + idxProc]->FMpiBufferReader::getValue<MortonIndex>(); - CellClass* const newCell = new CellClass; - newCell->setMortonIndex(cellIndex); - newCell->deserializeUp(*recvBuffer[idxLevel * nbProcess + idxProc]); + CellClass* const newCell = new CellClass; + newCell->setMortonIndex(cellIndex); + newCell->deserializeUp(*recvBuffer[idxLevel * nbProcess + idxProc]); - tempTree.insertCell(cellIndex, idxLevel, newCell); - } + tempTree.insertCell(cellIndex, idxLevel, newCell); } + } + // take cells from our octree only if they are + // linked to received data + int numberOfCells = 0; + int realCellId = 0; - // take cells from our octree only if they are - // linked to received data - int numberOfCells = 0; - int realCellId = 0; - - while(octreeIterator.getCurrentGlobalIndex() < getWorkingInterval(idxLevel , idProcess).min){ - octreeIterator.moveRight(); + while(octreeIterator.getCurrentGlobalIndex() < getWorkingInterval(idxLevel , idProcess).min){ + octreeIterator.moveRight(); + } + // for each cells + do{ + // copy cells that need data from others + if(leafsNeedOther[idxLevel]->get(realCellId++)){ + iterArray[numberOfCells++] = octreeIterator; } - // for each cells - do{ - // copy cells that need data from others - if(leafsNeedOther[idxLevel]->get(realCellId++)){ - iterArray[numberOfCells++] = octreeIterator; - } - } while(octreeIterator.moveRight()); - avoidGotoLeftIterator.moveDown(); - octreeIterator = avoidGotoLeftIterator; + } while(octreeIterator.moveRight()); + avoidGotoLeftIterator.moveDown(); + octreeIterator = avoidGotoLeftIterator; - delete leafsNeedOther[idxLevel]; - leafsNeedOther[idxLevel] = 0; + delete leafsNeedOther[idxLevel]; + leafsNeedOther[idxLevel] = 0; - // Compute this cells - FLOG(computationCounter.tic()); + // Compute this cells + FLOG(computationCounter.tic()); + //FLOG(sharedLogger->tic("ParallelSection")); + FLOG(m2lFar.tic()); #pragma omp parallel - { - KernelClass * const myThreadkernels = kernels[omp_get_thread_num()]; - MortonIndex neighborsIndex[189]; - int neighborsPosition[189]; - const CellClass* neighbors[343]; + { + KernelClass * const myThreadkernels = kernels[omp_get_thread_num()]; + MortonIndex neighborsIndex[189]; + int neighborsPosition[189]; + const CellClass* neighbors[343]; #pragma omp for schedule(dynamic) nowait - for(int idxCell = 0 ; idxCell < numberOfCells ; ++idxCell){ - // compute indexes - memset(neighbors, 0, 343 * sizeof(CellClass*)); - const int counterNeighbors = iterArray[idxCell].getCurrentGlobalCoordinate().getInteractionNeighbors(idxLevel, neighborsIndex, neighborsPosition); - - int counter = 0; - // does we receive this index from someone? - for(int idxNeig = 0 ;idxNeig < counterNeighbors ; ++idxNeig){ - if(neighborsIndex[idxNeig] < (getWorkingInterval(idxLevel , idProcess).min) - || (getWorkingInterval(idxLevel , idProcess).max) < neighborsIndex[idxNeig]){ - - CellClass*const otherCell = tempTree.getCell(neighborsIndex[idxNeig], idxLevel); - - if(otherCell){ - //otherCell->setMortonIndex(neighborsIndex[idxNeig]); - neighbors[ neighborsPosition[idxNeig] ] = otherCell; - ++counter; - } + for(int idxCell = 0 ; idxCell < numberOfCells ; ++idxCell){ + // compute indexes + memset(neighbors, 0, 343 * sizeof(CellClass*)); + const int counterNeighbors = iterArray[idxCell].getCurrentGlobalCoordinate().getInteractionNeighbors(idxLevel, neighborsIndex, neighborsPosition); + + int counter = 0; + // does we receive this index from someone? + for(int idxNeig = 0 ;idxNeig < counterNeighbors ; ++idxNeig){ + if(neighborsIndex[idxNeig] < (getWorkingInterval(idxLevel , idProcess).min) + || (getWorkingInterval(idxLevel , idProcess).max) < neighborsIndex[idxNeig]){ + + CellClass*const otherCell = tempTree.getCell(neighborsIndex[idxNeig], idxLevel); + + if(otherCell){ + //otherCell->setMortonIndex(neighborsIndex[idxNeig]); + neighbors[ neighborsPosition[idxNeig] ] = otherCell; + ++counter; } } - // need to compute - if(counter){ - myThreadkernels->M2L( iterArray[idxCell].getCurrentCell() , neighbors, counter, idxLevel); - } } - - myThreadkernels->finishedLevelM2L(idxLevel); + // need to compute + if(counter){ + myThreadkernels->M2L( iterArray[idxCell].getCurrentCell() , neighbors, counter, idxLevel); + } } - FLOG(computationCounter.tac()); + + myThreadkernels->finishedLevelM2L(idxLevel); } - FLOG(receiveCounter.tac()); + //FLOG(sharedLogger->tac("ParallelSection")); + FLOG(computationCounter.tac()); + FLOG(m2lFar.tac()); } for(int idxComm = 0 ; idxComm < nbProcess * OctreeHeight; ++idxComm){ @@ -790,16 +828,17 @@ private: FLOG( FLog::Controller << "\tFinished (@Downward Pass (M2L) = " << counterTime.tacAndElapsed() << " s)\n" ); FLOG( FLog::Controller << "\t\t Computation : " << computationCounter.cumulated() << " s\n" ); - FLOG( FLog::Controller << "\t\t Send : " << sendCounter.cumulated() << " s\n" ); - FLOG( FLog::Controller << "\t\t Receive : " << receiveCounter.cumulated() << " s\n" ); - FLOG( FLog::Controller << "\t\t Gather : " << gatherCounter.cumulated() << " s\n" ); - FLOG( FLog::Controller << "\t\t Prepare : " << prepareCounter.cumulated() << " s\n" ); + FLOG( FLog::Controller << "\t\t Single : " << singleCounter.cumulated() << " s\n" ); + FLOG( FLog::Controller << "\t\t M2L Self : " << m2lSelf.cumulated() << " s\n" ); + FLOG( FLog::Controller << "\t\t M2L Far : " << m2lFar.cumulated() << " s\n" ); + FLOG( FLog::Controller << "\t\t M2L Gather : " << gatherCounter.elapsed() << " s\n" ); + FLOG( FLog::Controller << "\t\t M2L Send : " << sendCounter.elapsed() << " s\n" ); } ////////////////////////////////////////////////////////////////// // ---------------- L2L --------------- ////////////////////////////////////////////////////////////////// - + void downardPass(){ // second L2L const int MaxSizePerCell = CellClass::GetSize(); FTRACE( FTrace::FFunction functionTrace(__FUNCTION__, "Fmm" , __FILE__ , __LINE__) ); @@ -813,10 +852,10 @@ private: typename OctreeClass::Iterator octreeIterator(tree); octreeIterator.moveDown(); typename OctreeClass::Iterator avoidGotoLeftIterator(octreeIterator); - + MPI_Request*const requests = new MPI_Request[nbProcess]; MPI_Status*const status = new MPI_Status[nbProcess]; - + const int heightMinusOne = OctreeHeight - 1; FMpiBufferWriter sendBuffer(comm.getComm(),MaxSizePerCell); @@ -847,51 +886,75 @@ private: ++firstCellWork; } - bool needToRecv = false; - int iterRequests = 0; - - FLOG(prepareCounter.tic()); - - // do we need to receive one or zeros cell - if(idProcess != 0 - && (getWorkingInterval((idxLevel + 1) , idProcess).min >> 3 ) <= (getWorkingInterval((idxLevel+1) , idProcess - 1).max >> 3 ) ){ - needToRecv = true; - +#pragma omp parallel + { +#pragma omp single + { + bool needToRecv = false; + int iterRequests = 0; - MPI_Irecv( recvBuffer.data(), recvBuffer.getCapacity(), MPI_PACKED, MPI_ANY_SOURCE, - FMpi::TagFmmL2L, comm.getComm(), &requests[iterRequests++]); - } + FLOG(prepareCounter.tic()); + + // do we need to receive one or zeros cell + if(idProcess != 0 + && (getWorkingInterval((idxLevel + 1) , idProcess).min >> 3 ) <= (getWorkingInterval((idxLevel+1) , idProcess - 1).max >> 3 ) ){ + needToRecv = true; - if(idProcess != nbProcess - 1){ - int firstProcThatRecv = idProcess + 1; - while( firstProcThatRecv < nbProcess && - getWorkingInterval((idxLevel + 1) , firstProcThatRecv).max <= getWorkingInterval((idxLevel+1) , idProcess).max){ - ++firstProcThatRecv; - } + MPI_Irecv( recvBuffer.data(), recvBuffer.getCapacity(), MPI_PACKED, MPI_ANY_SOURCE, + FMpi::TagFmmL2L, comm.getComm(), &requests[iterRequests++]); + } - int endProcThatRecv = firstProcThatRecv; - while( endProcThatRecv < nbProcess && - (getWorkingInterval((idxLevel + 1) , endProcThatRecv).min >> 3) <= (getWorkingInterval((idxLevel+1) , idProcess).max >> 3) ){ - ++endProcThatRecv; - } + + if(idProcess != nbProcess - 1){ + int firstProcThatRecv = idProcess + 1; + while( firstProcThatRecv < nbProcess && + getWorkingInterval((idxLevel + 1) , firstProcThatRecv).max <= getWorkingInterval((idxLevel+1) , idProcess).max){ + ++firstProcThatRecv; + } - if(firstProcThatRecv != endProcThatRecv){ - iterArray[numberOfCells - 1].getCurrentCell()->serializeDown(sendBuffer); + int endProcThatRecv = firstProcThatRecv; + while( endProcThatRecv < nbProcess && + (getWorkingInterval((idxLevel + 1) , endProcThatRecv).min >> 3) <= (getWorkingInterval((idxLevel+1) , idProcess).max >> 3) ){ + ++endProcThatRecv; + } + + if(firstProcThatRecv != endProcThatRecv){ + iterArray[numberOfCells - 1].getCurrentCell()->serializeDown(sendBuffer); - for(int idxProc = firstProcThatRecv ; idxProc < endProcThatRecv ; ++idxProc ){ + for(int idxProc = firstProcThatRecv ; idxProc < endProcThatRecv ; ++idxProc ){ - MPI_Isend(sendBuffer.data(), sendBuffer.getSize(), MPI_PACKED, idxProc, - FMpi::TagFmmL2L, comm.getComm(), &requests[iterRequests++]); + MPI_Isend(sendBuffer.data(), sendBuffer.getSize(), MPI_PACKED, idxProc, + FMpi::TagFmmL2L, comm.getComm(), &requests[iterRequests++]); + } + + } } + + // are we sending or receiving? + if(iterRequests){ + + // process + FLOG(waitCounter.tic()); + MPI_Waitall( iterRequests, requests, status); + FLOG(waitCounter.tac()); + + if(needToRecv){ + // Need to compute + FLOG(computationCounter.tic()); + iterArray[firstCellWork].getCurrentCell()->deserializeDown(recvBuffer); + + kernels[0]->L2L( iterArray[firstCellWork].getCurrentCell() , iterArray[firstCellWork].getCurrentChild(), idxLevel); + FLOG(computationCounter.tac()); + } + } + + }//End Of Single Section + FLOG(prepareCounter.tac()); - } - } - FLOG(prepareCounter.tac()); - - FLOG(computationCounter.tic()); -#pragma omp parallel - { + FLOG(computationCounter.tic()); + //FLOG(sharedLogger->tic("ParallelSection")); + //#pragma omp parallel KernelClass& myThreadkernels = (*kernels[omp_get_thread_num()]); #pragma omp for nowait for(int idxCell = firstCellWork + 1 ; idxCell < numberOfCells ; ++idxCell){ @@ -899,24 +962,7 @@ private: } } FLOG(computationCounter.tac()); - - // are we sending or receiving? - if(iterRequests){ - - // process - FLOG(waitCounter.tic()); - MPI_Waitall( iterRequests, requests, status); - FLOG(waitCounter.tac()); - - if(needToRecv){ - // Need to compute - FLOG(computationCounter.tic()); - iterArray[firstCellWork].getCurrentCell()->deserializeDown(recvBuffer); - - kernels[0]->L2L( iterArray[firstCellWork].getCurrentCell() , iterArray[firstCellWork].getCurrentChild(), idxLevel); - FLOG(computationCounter.tac()); - } - } + //FLOG(sharedLogger->tac("ParallelSection")); sendBuffer.reset(); recvBuffer.seek(0); @@ -941,6 +987,7 @@ private: ContainerClass* targets; ContainerClass* sources; }; + /** P2P */ void directPass(){ FTRACE( FTrace::FFunction functionTrace(__FUNCTION__, "Fmm" , __FILE__ , __LINE__) ); @@ -949,9 +996,11 @@ private: FLOG( FTic prepareCounter); FLOG( FTic gatherCounter); FLOG( FTic waitCounter); + FLOG(FTic computation2Counter); + FLOG(FTic computationCounter); /////////////////////////////////////////////////// - // Prepare data to send receive + // Prepar data to send receive /////////////////////////////////////////////////// FLOG(prepareCounter.tic()); @@ -973,158 +1022,40 @@ private: */ int*const globalReceiveMap = new int[nbProcess * nbProcess]; memset(globalReceiveMap, 0, sizeof(int) * nbProcess * nbProcess); + + FVector<LeafData> * leafsNeedOtherData; + LeafData* leafsDataArray; + OctreeClass* otherP2Ptree; FBoolArray leafsNeedOther(this->numberOfLeafs); int countNeedOther = 0; - - { - FTRACE( FTrace::FRegion regionTrace( "Preprocess" , __FUNCTION__ , __FILE__ , __LINE__) ); - // Copy leafs - { - typename OctreeClass::Iterator octreeIterator(tree); - octreeIterator.gotoBottomLeft(); - int idxLeaf = 0; - do{ - this->iterArray[idxLeaf++] = octreeIterator; - } while(octreeIterator.moveRight()); - } - - // Number of cells max - //const int limite = 1 << (this->OctreeHeight - 1); - // pointer to send - FVector<typename OctreeClass::Iterator>*const toSend = new FVector<typename OctreeClass::Iterator>[nbProcess]; - - // array that will be send to other processus for them to build the globalReceiveMap - int partsToSend[nbProcess]; - memset(partsToSend, 0, sizeof(int) * nbProcess); - - // To know if a leaf has been already sent to a proc - int alreadySent[nbProcess]; - - //Will store the indexes of the neighbors of current cell - MortonIndex indexesNeighbors[26]; - //Obviously unused - //int uselessIndexArray[26]; - - for(int idxLeaf = 0 ; idxLeaf < this->numberOfLeafs ; ++idxLeaf){ - memset(alreadySent, 0, sizeof(int) * nbProcess); - bool needOther = false; - //Get the neighbors of current cell in indexesNeighbors, and their number in neighCount - const int neighCount = (iterArray[idxLeaf].getCurrentGlobalCoordinate()).getNeighborsIndexes(OctreeHeight,indexesNeighbors); - //Loop over the neighbor leafs - for(int idxNeigh = 0 ; idxNeigh < neighCount ; ++idxNeigh){ - //Test if leaf belongs to someone else (false if it's mine) - if(indexesNeighbors[idxNeigh] < (intervals[idProcess].min) || (intervals[idProcess].max) < indexesNeighbors[idxNeigh]){ - needOther = true; - - // find the proc that will need current leaf - int procToReceive = idProcess; - while( procToReceive != 0 && indexesNeighbors[idxNeigh] < intervals[procToReceive].min){ - --procToReceive; //scroll process "before" current process - } - - while( procToReceive != nbProcess - 1 && (intervals[procToReceive].max) < indexesNeighbors[idxNeigh]){ - ++procToReceive;//scroll process "after" current process - } - // Test : Not Already Send && USELESS TEST ? - if( !alreadySent[procToReceive] && intervals[procToReceive].min <= indexesNeighbors[idxNeigh] && indexesNeighbors[idxNeigh] <= intervals[procToReceive].max){ - - alreadySent[procToReceive] = 1; - toSend[procToReceive].push( iterArray[idxLeaf] ); - partsToSend[procToReceive] += iterArray[idxLeaf].getCurrentListSrc()->getSavedSize(); - partsToSend[procToReceive] += int(sizeof(MortonIndex)); - } - } - } - - if(needOther){ //means that something need to be sent (or received) - leafsNeedOther.set(idxLeaf,true); - ++countNeedOther; - } - } - - // No idea why it is mandatory there, could it be a few line before, - for(int idxProc = 0 ; idxProc < nbProcess ; ++idxProc){ - if(partsToSend[idxProc]){ - partsToSend[idxProc] += int(sizeof(int)); - } - } - - //Share to all processus globalReceiveMap - FLOG(gatherCounter.tic()); - FMpi::MpiAssert( MPI_Allgather( partsToSend, nbProcess, MPI_INT, globalReceiveMap, nbProcess, MPI_INT, comm.getComm()), __LINE__ ); - FLOG(gatherCounter.tac()); - - {//TODO : remove - //Print the globalReceiveMap for Process 0 - // if(idProcess == 0) - // { - // printf("\n Proc 0 :: \n"); - // for(int u = 0 ; u < nbProcess ; ++u){ - // for(int v = 0 ; v < nbProcess ; ++v){ - // printf("\t %d",globalReceiveMap[u*nbProcess+v]); - // } - // printf("\n"); - // } - // } - } - - - //Prepare receive - for(int idxProc = 0 ; idxProc < nbProcess ; ++idxProc){ - if(globalReceiveMap[idxProc * nbProcess + idProcess]){ //if idxProc has sth for me. - //allocate buffer of right size - recvBuffer[idxProc] = new FMpiBufferReader(comm.getComm(),globalReceiveMap[idxProc * nbProcess + idProcess]); - FMpi::MpiAssert( MPI_Irecv(recvBuffer[idxProc]->data(), recvBuffer[idxProc]->getCapacity(), MPI_PACKED, - idxProc, FMpi::TagFmmP2P, comm.getComm(), &requests[iterRequest++]) , __LINE__ ); - } - } - - nbMessagesToRecv = iterRequest; - // Prepare send - for(int idxProc = 0 ; idxProc < nbProcess ; ++idxProc){ - if(toSend[idxProc].getSize() != 0){ - sendBuffer[idxProc] = new FMpiBufferWriter(comm.getComm(),globalReceiveMap[idProcess*nbProcess+idxProc]); - // << is equivalent to write(). - (*sendBuffer[idxProc]) << toSend[idxProc].getSize(); - for(int idxLeaf = 0 ; idxLeaf < toSend[idxProc].getSize() ; ++idxLeaf){ - (*sendBuffer[idxProc]) << toSend[idxProc][idxLeaf].getCurrentGlobalIndex(); - toSend[idxProc][idxLeaf].getCurrentListSrc()->save(*sendBuffer[idxProc]); - } - //TEST BERENGER - //if(sendBuffer[idxProc]->getSize() != partsToSend[idxProc]){ - FMpi::MpiAssert( MPI_Isend( sendBuffer[idxProc]->data(), sendBuffer[idxProc]->getSize() , MPI_PACKED , - idxProc, FMpi::TagFmmP2P, comm.getComm(), &requests[iterRequest++]) , __LINE__ ); - - } - } - - delete[] toSend; - } - FLOG(prepareCounter.tac()); - + /////////////////////////////////////////////////// // Prepare data for thread P2P /////////////////////////////////////////////////// - + // init const int LeafIndex = OctreeHeight - 1; const int SizeShape = 3*3*3; - + int shapeLeaf[SizeShape]; memset(shapeLeaf,0,SizeShape*sizeof(int)); + + leafsDataArray = new LeafData[this->numberOfLeafs]; - LeafData* const leafsDataArray = new LeafData[this->numberOfLeafs]; + leafsNeedOtherData = new FVector<LeafData>(countNeedOther); - FVector<LeafData> leafsNeedOtherData(countNeedOther); + // This first part is sequential, we split the datas between + // colors to avoid writing concurrency later with omp threads + // split data { FTRACE( FTrace::FRegion regionTrace( "Split" , __FUNCTION__ , __FILE__ , __LINE__) ); typename OctreeClass::Iterator octreeIterator(tree); octreeIterator.gotoBottomLeft(); - + // to store which shape for each leaf typename OctreeClass::Iterator* const myLeafs = new typename OctreeClass::Iterator[this->numberOfLeafs]; int*const shapeType = new int[this->numberOfLeafs]; @@ -1155,7 +1086,7 @@ private: leafsDataArray[startPosAtShape[shapePosition]].cell = myLeafs[idxInArray].getCurrentCell(); leafsDataArray[startPosAtShape[shapePosition]].targets = myLeafs[idxInArray].getCurrentListTargets(); leafsDataArray[startPosAtShape[shapePosition]].sources = myLeafs[idxInArray].getCurrentListSrc(); - if( leafsNeedOther.get(idxLeaf) ) leafsNeedOtherData.push(leafsDataArray[startPosAtShape[shapePosition]]); + if( leafsNeedOther.get(idxLeaf) ) leafsNeedOtherData->push(leafsDataArray[startPosAtShape[shapePosition]]); ++startPosAtShape[shapePosition]; } @@ -1163,143 +1094,288 @@ private: delete[] shapeType; delete[] myLeafs; } - - - ////////////////////////////////////////////////////////// - // Computation P2P that DO NOT need others data - ////////////////////////////////////////////////////////// - FTRACE( FTrace::FRegion regionP2PTrace("Compute P2P", __FUNCTION__ , __FILE__ , __LINE__) ); - - FLOG(FTic computationCounter); - + + //At this point, we start with the parallel section + //One thread will be in charge of communication + //Two comm : AllGather then iSend and IRecv #pragma omp parallel { +#pragma omp single nowait + { + FTRACE( FTrace::FRegion regionTrace( "Preprocess" , __FUNCTION__ , __FILE__ , __LINE__) ); + // Copy leafs + { + typename OctreeClass::Iterator octreeIterator(tree); + octreeIterator.gotoBottomLeft(); + int idxLeaf = 0; + do{ + this->iterArray[idxLeaf++] = octreeIterator; + } while(octreeIterator.moveRight()); + } + + // Number of cells max + //const int limite = 1 << (this->OctreeHeight - 1); + // pointer to send + FVector<typename OctreeClass::Iterator>*const toSend = new FVector<typename OctreeClass::Iterator>[nbProcess]; + + // array that will be send to other processus for them to build the globalReceiveMap + int partsToSend[nbProcess]; + memset(partsToSend, 0, sizeof(int) * nbProcess); + + // To know if a leaf has been already sent to a proc + int alreadySent[nbProcess]; + + //Will store the indexes of the neighbors of current cell + MortonIndex indexesNeighbors[26]; + //Obviously unused + //int uselessIndexArray[26]; + + for(int idxLeaf = 0 ; idxLeaf < this->numberOfLeafs ; ++idxLeaf){ + memset(alreadySent, 0, sizeof(int) * nbProcess); + bool needOther = false; + //Get the neighbors of current cell in indexesNeighbors, and their number in neighCount + const int neighCount = (iterArray[idxLeaf].getCurrentGlobalCoordinate()).getNeighborsIndexes(OctreeHeight,indexesNeighbors); + //Loop over the neighbor leafs + for(int idxNeigh = 0 ; idxNeigh < neighCount ; ++idxNeigh){ + //Test if leaf belongs to someone else (false if it's mine) + if(indexesNeighbors[idxNeigh] < (intervals[idProcess].min) || (intervals[idProcess].max) < indexesNeighbors[idxNeigh]){ + needOther = true; + + // find the proc that will need current leaf + int procToReceive = idProcess; + while( procToReceive != 0 && indexesNeighbors[idxNeigh] < intervals[procToReceive].min){ + --procToReceive; //scroll process "before" current process + } + + while( procToReceive != nbProcess - 1 && (intervals[procToReceive].max) < indexesNeighbors[idxNeigh]){ + ++procToReceive;//scroll process "after" current process + } + // Test : Not Already Send && USELESS TEST ? + if( !alreadySent[procToReceive] && intervals[procToReceive].min <= indexesNeighbors[idxNeigh] && indexesNeighbors[idxNeigh] <= intervals[procToReceive].max){ + + alreadySent[procToReceive] = 1; + toSend[procToReceive].push( iterArray[idxLeaf] ); + partsToSend[procToReceive] += iterArray[idxLeaf].getCurrentListSrc()->getSavedSize(); + partsToSend[procToReceive] += int(sizeof(MortonIndex)); + } + } + } + + if(needOther){ //means that something need to be sent (or received) + leafsNeedOther.set(idxLeaf,true); + ++countNeedOther; + } + } + + // No idea why it is mandatory there, could it be a few line before, + for(int idxProc = 0 ; idxProc < nbProcess ; ++idxProc){ + if(partsToSend[idxProc]){ + partsToSend[idxProc] += int(sizeof(int)); + } + } + + //Share to all processus globalReceiveMap + FLOG(gatherCounter.tic()); + FMpi::MpiAssert( MPI_Allgather( partsToSend, nbProcess, MPI_INT, globalReceiveMap, nbProcess, MPI_INT, comm.getComm()), __LINE__ ); + FLOG(gatherCounter.tac()); + + {//TODO : remove + //Print the globalReceiveMap for Process 0 + // if(idProcess == 0) +// { +// printf("\n Proc 0 :: \n"); +// for(int u = 0 ; u < nbProcess ; ++u){ +// for(int v = 0 ; v < nbProcess ; ++v){ +// printf("\t %d",globalReceiveMap[u*nbProcess+v]); +// } +// printf("\n"); +// } +// } + + } + + + //Prepare receive + for(int idxProc = 0 ; idxProc < nbProcess ; ++idxProc){ + if(globalReceiveMap[idxProc * nbProcess + idProcess]){ //if idxProc has sth for me. + //allocate buffer of right size + recvBuffer[idxProc] = new FMpiBufferReader(comm.getComm(),globalReceiveMap[idxProc * nbProcess + idProcess]); + FMpi::MpiAssert( MPI_Irecv(recvBuffer[idxProc]->data(), recvBuffer[idxProc]->getCapacity(), MPI_PACKED, + idxProc, FMpi::TagFmmP2P, comm.getComm(), &requests[iterRequest++]) , __LINE__ ); + } + } + + nbMessagesToRecv = iterRequest; + // Prepare send + for(int idxProc = 0 ; idxProc < nbProcess ; ++idxProc){ + if(toSend[idxProc].getSize() != 0){ + sendBuffer[idxProc] = new FMpiBufferWriter(comm.getComm(),globalReceiveMap[idProcess*nbProcess+idxProc]); + // << is equivalent to write(). + (*sendBuffer[idxProc]) << toSend[idxProc].getSize(); + for(int idxLeaf = 0 ; idxLeaf < toSend[idxProc].getSize() ; ++idxLeaf){ + (*sendBuffer[idxProc]) << toSend[idxProc][idxLeaf].getCurrentGlobalIndex(); + toSend[idxProc][idxLeaf].getCurrentListSrc()->save(*sendBuffer[idxProc]); + } + //TEST BERENGER + //if(sendBuffer[idxProc]->getSize() != partsToSend[idxProc]){ + FMpi::MpiAssert( MPI_Isend( sendBuffer[idxProc]->data(), sendBuffer[idxProc]->getSize() , MPI_PACKED , + idxProc, FMpi::TagFmmP2P, comm.getComm(), &requests[iterRequest++]) , __LINE__ ); + + } + } + + delete[] toSend; + ////////////////////////////////////////////////////////// + // Waitsend receive + ////////////////////////////////////////////////////////// + + FLOG(computation2Counter.tic()); + + // Create an octree with leaves from others + otherP2Ptree = new OctreeClass( tree->getHeight(), tree->getSubHeight(), tree->getBoxWidth(), tree->getBoxCenter() ); + int complete = 0; + int*const indexMessage = new int[nbProcess * 2]; + while( complete != iterRequest){ + memset(indexMessage, 0, sizeof(int) * nbProcess * 2); + int countMessages = 0; + // Wait data + FLOG(waitCounter.tic()); + MPI_Waitsome(iterRequest, requests, &countMessages, indexMessage, status); + + FLOG(waitCounter.tac()); + complete += countMessages; + + + for(int idxRcv = 0 ; idxRcv < countMessages ; ++idxRcv){ + if( indexMessage[idxRcv] < nbMessagesToRecv ){ + const int idxProc = status[idxRcv].MPI_SOURCE; + int nbLeaves; + (*recvBuffer[idxProc]) >> nbLeaves; + for(int idxLeaf = 0 ; idxLeaf < nbLeaves ; ++idxLeaf){ + MortonIndex leafIndex; + (*recvBuffer[idxProc]) >> leafIndex; + otherP2Ptree->createLeaf(leafIndex)->getSrc()->restore((*recvBuffer[idxProc])); + } + delete recvBuffer[idxProc]; + recvBuffer[idxProc] = 0; + } + } + } + delete[] indexMessage; + + }//End single section + + FLOG(prepareCounter.tac()); + + ////////////////////////////////////////////////////////// + // Computation P2P that DO NOT need others data + ////////////////////////////////////////////////////////// + FTRACE( FTrace::FRegion regionP2PTrace("Compute P2P", __FUNCTION__ , __FILE__ , __LINE__) ); + + FLOG(computationCounter.tic()); + //FLOG(sharedLogger->tic("ParallelSection")); + //#pragma omp parallel + //{ KernelClass& myThreadkernels = (*kernels[omp_get_thread_num()]); // There is a maximum of 26 neighbors ContainerClass* neighbors[27]; int previous = 0; - + for(int idxShape = 0 ; idxShape < SizeShape ; ++idxShape){ const int endAtThisShape = shapeLeaf[idxShape] + previous; - -#pragma omp for + // #pragma omp single + // { + // char file[5]; + // sprintf(file,"re%d",idProcess); + // FILE * fd = fopen(file,"a+"); + // fprintf(fd,"Proc %d \t, Color : %d, from %d to %d, total %d \n",idProcess,idxShape,previous,endAtThisShape,endAtThisShape-previous); + // fclose(fd); + // } +#pragma omp for schedule(auto) for(int idxLeafs = previous ; idxLeafs < endAtThisShape ; ++idxLeafs){ LeafData& currentIter = leafsDataArray[idxLeafs]; myThreadkernels.L2P(currentIter.cell, currentIter.targets); - + // need the current particles and neighbors particles const int counter = tree->getLeafsNeighbors(neighbors, currentIter.coord, LeafIndex); myThreadkernels.P2P( currentIter.coord,currentIter.targets, currentIter.sources, neighbors, counter); } - + previous = endAtThisShape; } - } - FLOG(computationCounter.tac()); - FTRACE( regionP2PTrace.end() ); - - ////////////////////////////////////////////////////////// - // Waitsend receive - ////////////////////////////////////////////////////////// - - FLOG(FTic computation2Counter); - - // Create an octree with leaves from others - OctreeClass otherP2Ptree( tree->getHeight(), tree->getSubHeight(), tree->getBoxWidth(), tree->getBoxCenter() ); - int complete = 0; - int*const indexMessage = new int[nbProcess * 2]; - while( complete != iterRequest){ - memset(indexMessage, 0, sizeof(int) * nbProcess * 2); - int countMessages = 0; - // Wait data - FLOG(waitCounter.tic()); - MPI_Waitsome(iterRequest, requests, &countMessages, indexMessage, status); + //} + + //FLOG(sharedLogger->tac("ParallelSection")); + FLOG(computationCounter.tac()); + FTRACE( regionP2PTrace.end() ); - FLOG(waitCounter.tac()); - complete += countMessages; - - - for(int idxRcv = 0 ; idxRcv < countMessages ; ++idxRcv){ - if( indexMessage[idxRcv] < nbMessagesToRecv ){ - const int idxProc = status[idxRcv].MPI_SOURCE; - int nbLeaves; - (*recvBuffer[idxProc]) >> nbLeaves; - for(int idxLeaf = 0 ; idxLeaf < nbLeaves ; ++idxLeaf){ - MortonIndex leafIndex; - (*recvBuffer[idxProc]) >> leafIndex; - otherP2Ptree.createLeaf(leafIndex)->getSrc()->restore((*recvBuffer[idxProc])); - } - delete recvBuffer[idxProc]; - recvBuffer[idxProc] = 0; - } - } - } - delete[] indexMessage; - - ////////////////////////////////////////////////////////// - // Computation P2P that need others data - ////////////////////////////////////////////////////////// - - FTRACE( FTrace::FRegion regionOtherTrace("Compute P2P Other", __FUNCTION__ , __FILE__ , __LINE__) ); - FLOG( computation2Counter.tic() ); - -#pragma omp parallel - { - KernelClass& myThreadkernels = (*kernels[omp_get_thread_num()]); - // There is a maximum of 26 neighbors - ContainerClass* neighbors[27]; - MortonIndex indexesNeighbors[27]; - int indexArray[26]; - // Box limite - const int nbLeafToProceed = leafsNeedOtherData.getSize(); - -#pragma omp for - for(int idxLeafs = 0 ; idxLeafs < nbLeafToProceed ; ++idxLeafs){ - LeafData currentIter = leafsNeedOtherData[idxLeafs]; - - // need the current particles and neighbors particles - int counter = 0; - memset( neighbors, 0, sizeof(ContainerClass*) * 27); - - // Take possible data - const int nbNeigh = currentIter.coord.getNeighborsIndexes(OctreeHeight, indexesNeighbors, indexArray); - - for(int idxNeigh = 0 ; idxNeigh < nbNeigh ; ++idxNeigh){ - if(indexesNeighbors[idxNeigh] < (intervals[idProcess].min) || (intervals[idProcess].max) < indexesNeighbors[idxNeigh]){ - ContainerClass*const hypotheticNeighbor = otherP2Ptree.getLeafSrc(indexesNeighbors[idxNeigh]); - if(hypotheticNeighbor){ - neighbors[ indexArray[idxNeigh] ] = hypotheticNeighbor; - ++counter; + + ////////////////////////////////////////////////////////// + // Computation P2P that need others data + ////////////////////////////////////////////////////////// + + FTRACE( FTrace::FRegion regionOtherTrace("Compute P2P Other", __FUNCTION__ , __FILE__ , __LINE__) ); + //FLOG( computation2Counter.tic() ); + //FLOG(sharedLogger->tic("ParallelSection")); + //#pragma omp parallel + { + /*KernelClass& myThreadkernels = (*kernels[omp_get_thread_num()]);*/ + // There is a maximum of 26 neighbors + /*ContainerClass* neighbors[27];*/ + MortonIndex indexesNeighbors[27]; + int indexArray[26]; + // Box limite + const int nbLeafToProceed = leafsNeedOtherData->getSize(); + +#pragma omp for schedule(auto) nowait + for(int idxLeafs = 0 ; idxLeafs < nbLeafToProceed ; ++idxLeafs){ + LeafData currentIter = (*leafsNeedOtherData)[idxLeafs]; + + // need the current particles and neighbors particles + int counter = 0; + memset( neighbors, 0, sizeof(ContainerClass*) * 27); + + // Take possible data + const int nbNeigh = currentIter.coord.getNeighborsIndexes(OctreeHeight, indexesNeighbors, indexArray); + + for(int idxNeigh = 0 ; idxNeigh < nbNeigh ; ++idxNeigh){ + if(indexesNeighbors[idxNeigh] < (intervals[idProcess].min) || (intervals[idProcess].max) < indexesNeighbors[idxNeigh]){ + ContainerClass*const hypotheticNeighbor = otherP2Ptree->getLeafSrc(indexesNeighbors[idxNeigh]); + if(hypotheticNeighbor){ + neighbors[ indexArray[idxNeigh] ] = hypotheticNeighbor; + ++counter; + } } } - } - - myThreadkernels.P2PRemote( currentIter.cell->getCoordinate(), currentIter.targets, - currentIter.sources, neighbors, counter); + + myThreadkernels.P2PRemote( currentIter.cell->getCoordinate(), currentIter.targets, + currentIter.sources, neighbors, counter); + }//End For + } - - } - + }//End parallel section + //FLOG(sharedLogger->tac("ParallelSection")); + for(int idxProc = 0 ; idxProc < nbProcess ; ++idxProc){ delete sendBuffer[idxProc]; delete recvBuffer[idxProc]; } delete[] globalReceiveMap; delete[] leafsDataArray; - + FLOG(computation2Counter.tac()); - - + + FLOG( FLog::Controller << "\tFinished (@Direct Pass (L2P + P2P) = " << counterTime.tacAndElapsed() << " s)\n" ); FLOG( FLog::Controller << "\t\t Computation L2P + P2P : " << computationCounter.elapsed() << " s\n" ); FLOG( FLog::Controller << "\t\t Computation P2P 2 : " << computation2Counter.elapsed() << " s\n" ); FLOG( FLog::Controller << "\t\t Prepare P2P : " << prepareCounter.elapsed() << " s\n" ); FLOG( FLog::Controller << "\t\t Gather P2P : " << gatherCounter.elapsed() << " s\n" ); FLOG( FLog::Controller << "\t\t Wait : " << waitCounter.elapsed() << " s\n" ); - + } - + }; @@ -1308,5 +1384,3 @@ private: #endif //FFMMALGORITHMTHREAD_HPP - - -- GitLab