From b21c42e2026751fc24a8be5791b5e24a38c87f53 Mon Sep 17 00:00:00 2001 From: Martin Khannouz <martin.khannouz@inria.fr> Date: Wed, 6 Apr 2016 09:54:01 +0200 Subject: [PATCH] Add comments and fix some warning. --- .../FGroupTaskStarpuImplicitAlgorithm.hpp | 2 +- Tests/GroupTree/compareDAGmapping.cpp | 33 ++++++++----------- .../testBlockedImplicitAlgorithm.cpp | 4 +-- .../testBlockedImplicitChebyshev.cpp | 8 ++--- 4 files changed, 21 insertions(+), 26 deletions(-) diff --git a/Src/GroupTree/Core/FGroupTaskStarpuImplicitAlgorithm.hpp b/Src/GroupTree/Core/FGroupTaskStarpuImplicitAlgorithm.hpp index 708428f78..67033c70d 100644 --- a/Src/GroupTree/Core/FGroupTaskStarpuImplicitAlgorithm.hpp +++ b/Src/GroupTree/Core/FGroupTaskStarpuImplicitAlgorithm.hpp @@ -1667,7 +1667,7 @@ protected: #endif 0); std::vector<OutOfBlockInteraction>* outsideInteractionsOpposite = new std::vector<OutOfBlockInteraction>(externalInteractionsLeafLevel[idxGroup][idxInteraction].interactions); - for(int i = 0; i < outsideInteractionsOpposite->size(); ++i) + for(unsigned int i = 0; i < outsideInteractionsOpposite->size(); ++i) { MortonIndex tmp = outsideInteractionsOpposite->at(i).outIndex; outsideInteractionsOpposite->at(i).outIndex = outsideInteractionsOpposite->at(i).insideIndex; diff --git a/Tests/GroupTree/compareDAGmapping.cpp b/Tests/GroupTree/compareDAGmapping.cpp index 037b47d14..a41107b36 100644 --- a/Tests/GroupTree/compareDAGmapping.cpp +++ b/Tests/GroupTree/compareDAGmapping.cpp @@ -109,7 +109,7 @@ bool parseLine(DagData & dagData, deque<string> & lineElements) task.id[3] = stoll(lineElements[7]); task.id[4] = stoll(lineElements[8]); task.mpiNode = stoi(lineElements[9]); - task.level = task.id[0]; + task.level = (int)task.id[0]; dagData.allTask.insert(task); } else if(lineElements.size() >= 13 && lineElements[0] == "M2L_out") @@ -124,7 +124,7 @@ bool parseLine(DagData & dagData, deque<string> & lineElements) task.id[3] = stoll(lineElements[10]); task.id[4] = stoll(lineElements[11]); task.mpiNode = stoi(lineElements[12]); - task.level = task.id[0]; + task.level = (int)task.id[0]; dagData.allTask.insert(task); } else if(lineElements.size() >= 13 && lineElements[0] == "M2M") @@ -139,7 +139,7 @@ bool parseLine(DagData & dagData, deque<string> & lineElements) task.id[3] = stoll(lineElements[10]); task.id[4] = stoll(lineElements[11]); task.mpiNode = stoi(lineElements[12]); - task.level = task.id[0]; + task.level = (int)task.id[0]; dagData.allTask.insert(task); } else if(lineElements.size() >= 13 && lineElements[0] == "L2L") @@ -154,7 +154,7 @@ bool parseLine(DagData & dagData, deque<string> & lineElements) task.id[3] = stoll(lineElements[10]); task.id[4] = stoll(lineElements[11]); task.mpiNode = stoi(lineElements[12]); - task.level = task.id[0]; + task.level = (int)task.id[0]; dagData.allTask.insert(task); } else if(lineElements.size() >= 8 && lineElements[0] == "L2P") @@ -295,8 +295,11 @@ void compareDag(DagData const& dag1, DagData const& dag2, int const treeHeight) bool found = false; Task sameTask[2]; int sameTaskId = 0; + //Count task per level if(task.level < treeHeight) ++taskCount[omp_get_thread_num()][task.level]; + //Look into the second dag to find task in it + //We look for two task because it may be symetrized for(auto it = dag2.allTask.begin(); it != dag2.allTask.end(); ++it) { if(task == *it) @@ -307,6 +310,7 @@ void compareDag(DagData const& dag1, DagData const& dag2, int const treeHeight) break; } } + //If the task it not found, print it and count it if(found == false) { #pragma omp critical @@ -314,31 +318,21 @@ void compareDag(DagData const& dag1, DagData const& dag2, int const treeHeight) if(task.level < treeHeight) ++notFoundCount[omp_get_thread_num()][task.level]; } - else + else //else check the mapping { bool sameNode = false; for(int i = 0; i < sameTaskId; ++i) if(sameTask[i].mpiNode == task.mpiNode) sameNode = true; - + //The tasks are not mapped on the same node if(!sameNode) - { - #pragma omp critical - { - //task.print(); - //sameTask[0].print();//Il y a au moins une tâche identique trouvée - //if(sameTaskId == 2) - //sameTask[1].print();//Il y a au moins une tâche identique trouvée - //cout << sameTaskId << endl; - //cout << endl; - } if(task.level < treeHeight) ++differenceMapping[omp_get_thread_num()][task.level]; - } } } } #pragma omp taskwait + //Sum results by level and print it for(int i = 0; i < treeHeight; ++i) { long long int sum = 0; @@ -351,6 +345,7 @@ void compareDag(DagData const& dag1, DagData const& dag2, int const treeHeight) sumDiffMapping += differenceMapping[j][i]; sumTaskCount += taskCount[j][i]; } + //Print only if there is error repported on the level if(sum > 0 || sumDiffMapping > 0) std::cout << "Diff lvl " << i << " -> " << sum << " (Mapping error : " << sumDiffMapping << "/" << sumTaskCount << ")" << std::endl; } @@ -384,12 +379,11 @@ int main(int argc, char* argv[]) // Get params const char* const explicitFilename = FParameters::getStr(argc,argv,Explicit.options, "scalfmm_explicit.out"); const char* const implicitFilename = FParameters::getStr(argc,argv,Implicit.options, "scalfmm_implicit.out"); - const char* const explicitTraceFilename = FParameters::getStr(argc,argv,Explicit.options, "explicit.rec"); - const char* const implicitTraceFilename = FParameters::getStr(argc,argv,Implicit.options, "implicit.rec"); const int treeHeight = FParameters::getValue(argc,argv,TreeHeight.options, 5); DagData implicitData, explicitData; bool implicitGood, explicitGood; + //Read data from files and put it into the DAG data structure std::thread explicitThread([&](){ explicitData.treeHeight = treeHeight; explicitGood = fillDagData(explicitFilename, explicitData); @@ -400,6 +394,7 @@ int main(int argc, char* argv[]) }); implicitThread.join(); explicitThread.join(); + //If every thing went good, start comparing if(implicitGood && explicitGood) { cout << explicitData.allTask.size() << " tasks in explicit." << endl; diff --git a/Tests/GroupTree/testBlockedImplicitAlgorithm.cpp b/Tests/GroupTree/testBlockedImplicitAlgorithm.cpp index d37105dbf..8fe53c3b8 100644 --- a/Tests/GroupTree/testBlockedImplicitAlgorithm.cpp +++ b/Tests/GroupTree/testBlockedImplicitAlgorithm.cpp @@ -103,7 +103,7 @@ int main(int argc, char* argv[]){ const char* const filename = FParameters::getStr(argc,argv,FParameterDefinitions::InputFile.options, "../Data/test20k.fma"); LoaderClass loader(filename); #endif - int mpi_rank, nproc = 8, provided; + int mpi_rank, nproc; FMpi mpiComm(argc,argv); mpi_rank = mpiComm.global().processId(); nproc = mpiComm.global().processCount(); @@ -285,7 +285,7 @@ void sortParticle(FPoint<FReal> * allParticles, int treeHeight, int groupSize, v for(int i = 0; i < countGroup; ++i) sizeForEachGroup[treeHeight-1].push_back(groupSize); if(size_last > 0) - sizeForEachGroup[treeHeight-1].push_back(size_last); + sizeForEachGroup[treeHeight-1].push_back((int)size_last); } //Calcul du working interval au niveau des feuilles diff --git a/Tests/GroupTree/testBlockedImplicitChebyshev.cpp b/Tests/GroupTree/testBlockedImplicitChebyshev.cpp index 9f484fccf..a0ebc7ea2 100644 --- a/Tests/GroupTree/testBlockedImplicitChebyshev.cpp +++ b/Tests/GroupTree/testBlockedImplicitChebyshev.cpp @@ -94,7 +94,7 @@ int main(int argc, char* argv[]){ const char* const filename = FParameters::getStr(argc,argv,FParameterDefinitions::InputFile.options, "../Data/test20k.fma"); LoaderClass loader(filename); #endif - int mpi_rank, nproc, provided; + int mpi_rank, nproc; FMpi mpiComm(argc,argv); mpi_rank = mpiComm.global().processId(); nproc = mpiComm.global().processCount(); @@ -147,8 +147,8 @@ int main(int argc, char* argv[]){ treeCheck.insert(allParticlesToSort[idxPart], 0.1); } - MatrixKernelClass MatrixKernel; - KernelClass kernels(NbLevels, loader.getBoxWidth(), loader.getCenterOfBox(), &MatrixKernel); + MatrixKernelClass MatrixKernelValidation; + KernelClass kernels(NbLevels, loader.getBoxWidth(), loader.getCenterOfBox(), &MatrixKernelValidation); FmmClass algorithm(&treeCheck, &kernels); algorithm.execute(operationsToProceed); @@ -314,7 +314,7 @@ void sortParticle(FPoint<FReal> * allParticles, int treeHeight, int groupSize, v for(int i = 0; i < countGroup; ++i) sizeForEachGroup[treeHeight-1].push_back(groupSize); if(size_last > 0) - sizeForEachGroup[treeHeight-1].push_back(size_last); + sizeForEachGroup[treeHeight-1].push_back((int)size_last); } //Calcul du working interval au niveau des feuilles -- GitLab