From 5b6d230c848c055c7801a772e22f83be3574ddb2 Mon Sep 17 00:00:00 2001 From: Martin Khannouz <martin.khannouz@inria.fr> Date: Wed, 16 Mar 2016 16:41:15 +0100 Subject: [PATCH] Change a little bit the way task are added. Also change the script to compile everything and run test on my computer. --- .../FGroupTaskStarpuImplicitAlgorithm.hpp | 70 ++++++++--- .../Core/FGroupTaskStarpuMpiAlgorithm.hpp | 112 +++++++++++++++++- Tests/GroupTree/compareDAGmapping.cpp | 95 +++++++++++++-- compile_dag_result.sh | 14 ++- 4 files changed, 254 insertions(+), 37 deletions(-) diff --git a/Src/GroupTree/Core/FGroupTaskStarpuImplicitAlgorithm.hpp b/Src/GroupTree/Core/FGroupTaskStarpuImplicitAlgorithm.hpp index fbbc2fbd0..6cbfd9b80 100644 --- a/Src/GroupTree/Core/FGroupTaskStarpuImplicitAlgorithm.hpp +++ b/Src/GroupTree/Core/FGroupTaskStarpuImplicitAlgorithm.hpp @@ -40,8 +40,11 @@ #include "../StarPUUtils/FStarPUOpenClWrapper.hpp" #include "../OpenCl/FOpenCLDeviceWrapper.hpp" #endif + #define SCALFMM_SIMGRID_TASKNAMEPARAMS +#ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS #include "../StarPUUtils/FStarPUTaskNameParams.hpp" +#endif #include "Containers/FBoolArray.hpp" #include <iostream> @@ -145,9 +148,8 @@ protected: std::unique_ptr<char[]> l2pTaskNames; std::unique_ptr<char[]> p2pTaskNames; std::unique_ptr<char[]> p2pOuterTaskNames; - FStarPUTaskNameParams* taskNames; #else - FStarPUTaskNameParams* taskNames; + FStarPUTaskNameParams* taskNames = nullptr; #endif #endif #ifdef SCALFMM_STARPU_USE_PRIO @@ -185,7 +187,11 @@ public: FAssertLF(starpu_mpi_init ( 0, 0, 1 ) == 0); MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank); MPI_Comm_size(MPI_COMM_WORLD,&nproc); - taskNames = new FStarPUTaskNameParams(mpi_rank); +#ifdef STARPU_USE_TASK_NAME +#ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS + taskNames = new FStarPUTaskNameParams(mpi_rank, nproc); +#endif +#endif cout << mpi_rank << "/" << nproc << endl; starpu_malloc_set_align(32); @@ -1087,7 +1093,9 @@ protected: STARPU_RW, cellHandles[tree->getHeight()-1][idxGroup].up, STARPU_R, particleHandles[idxGroup].symb, #ifdef STARPU_USE_TASK_NAME - #ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, p2mTaskNames.get(), + #else //"P2M-nb_i_p" STARPU_NAME, taskNames->print("P2M", "%d, %lld, %lld, %lld, %lld, %d\n", tree->getCellGroup(tree->getHeight()-1,idxGroup)->getNumberOfCellsInBlock(), @@ -1138,7 +1146,9 @@ protected: STARPU_R, cellHandles[idxLevel+1][idxSubGroup].symb, //symbolique, readonly STARPU_R, cellHandles[idxLevel+1][idxSubGroup].up, //level d'avant readonly #ifdef STARPU_USE_TASK_NAME - #ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, m2mTaskNames[idxLevel].get(), + #else //"M2M-l_nb_i_nbc_ic_s" STARPU_NAME, taskNames->print("M2M", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", idxLevel, @@ -1177,7 +1187,9 @@ protected: STARPU_R, cellHandles[idxLevel+1][idxSubGroup].symb, //symbolique, readonly STARPU_R, cellHandles[idxLevel+1][idxSubGroup].up, //level d'avant readonly #ifdef STARPU_USE_TASK_NAME - #ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, m2mTaskNames[idxLevel].get(), + #else //M2M-l_nb_i_nbc_ic_s STARPU_NAME, taskNames->print("M2M", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", idxLevel, @@ -1225,7 +1237,9 @@ protected: STARPU_R, cellHandles[idxLevel][idxGroup].up, (STARPU_RW | STARPU_COMMUTE_IF_SUPPORTED), cellHandles[idxLevel][idxGroup].down, #ifdef STARPU_USE_TASK_NAME - #ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, m2lTaskNames[idxLevel].get(), + #else //"M2L-l_nb_i" STARPU_NAME, taskNames->print("M2L", "%d, %d, %lld, %lld, %lld, %lld, %lld, %d\n", idxLevel, @@ -1265,7 +1279,9 @@ protected: STARPU_R, cellHandles[idxLevel][interactionid].symb, STARPU_R, cellHandles[idxLevel][interactionid].up, #ifdef STARPU_USE_TASK_NAME - #ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, m2lOuterTaskNames[idxLevel].get(), + #else //"M2L_out-l_nb_i_nb_i_s STARPU_NAME, taskNames->print("M2L_out", "%d, %d, %lld, %d, %lld, %d, %lld, %lld, %lld, %lld, %d\n", idxLevel, @@ -1299,7 +1315,9 @@ protected: STARPU_R, cellHandles[idxLevel][idxGroup].symb, STARPU_R, cellHandles[idxLevel][idxGroup].up, #ifdef STARPU_USE_TASK_NAME - #ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, m2lOuterTaskNames[idxLevel].get(), + #else //"M2L_out-l_nb_i_nb_i_s" STARPU_NAME, taskNames->print("M2L_out", "%d, %d, %lld, %d, %lld, %d, %lld, %lld, %lld, %lld, %d\n", idxLevel, @@ -1361,9 +1379,11 @@ protected: STARPU_R, cellHandles[idxLevel+1][idxSubGroup].symb, //symbolique, readonly STARPU_RW, cellHandles[idxLevel+1][idxSubGroup].down, //level d'avant readonly #ifdef STARPU_USE_TASK_NAME - #ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, l2lTaskNames[idxLevel].get(), + #else //"L2L-l_nb_i_nbc_ic_s" - STARPU_NAME, taskNames->print("L2L", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", + STARPU_NAME, taskNames->print("L2L", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", idxLevel, tree->getCellGroup(idxLevel,idxGroup)->getNumberOfCellsInBlock(), tree->getCellGroup(idxLevel,idxGroup)->getSizeOfInterval(), @@ -1394,9 +1414,11 @@ protected: STARPU_R, cellHandles[idxLevel+1][idxSubGroup].symb, //symbolique, readonly (STARPU_RW | STARPU_COMMUTE_IF_SUPPORTED), cellHandles[idxLevel+1][idxSubGroup].down, //level d'avant readonly #ifdef STARPU_USE_TASK_NAME - #ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, l2lTaskNames[idxLevel].get(), + #else //"L2L-l_nb_i_nbc_ic_s" - STARPU_NAME, taskNames->print("L2L", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", + STARPU_NAME, taskNames->print("L2L", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", idxLevel, tree->getCellGroup(idxLevel,idxGroup)->getNumberOfCellsInBlock(), tree->getCellGroup(idxLevel,idxGroup)->getSizeOfInterval(), @@ -1435,9 +1457,11 @@ protected: STARPU_R, cellHandles[idxLevel+1][idxSubGroup].symb, //symbolique, readonly STARPU_RW, cellHandles[idxLevel+1][idxSubGroup].down, //level d'avant readonly #ifdef STARPU_USE_TASK_NAME - #ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, l2lTaskNames[idxLevel].get(), + #else //"L2L-l_nb_i_nbc_ic_s" - STARPU_NAME, taskNames->print("L2L", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", + STARPU_NAME, taskNames->print("L2L", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", idxLevel, tree->getCellGroup(idxLevel,idxGroup)->getNumberOfCellsInBlock(), tree->getCellGroup(idxLevel,idxGroup)->getSizeOfInterval(), @@ -1468,7 +1492,9 @@ protected: STARPU_R, cellHandles[idxLevel+1][idxSubGroup].symb, //symbolique, readonly (STARPU_RW | STARPU_COMMUTE_IF_SUPPORTED), cellHandles[idxLevel+1][idxSubGroup].down, //level d'avant readonly #ifdef STARPU_USE_TASK_NAME - #ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, l2lTaskNames[idxLevel].get(), + #else //"L2L-l_nb_i_nbc_ic_s" STARPU_NAME, taskNames->print("L2L", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", idxLevel, @@ -1528,7 +1554,9 @@ protected: STARPU_EXECUTE_ON_DATA, particleHandles[interactionid].down, #endif #ifdef STARPU_USE_TASK_NAME - #ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, p2pOuterTaskNames.get(), + #else //"P2P_out-nb_i_p_nb_i_p_s" STARPU_NAME, taskNames->print("P2P_out", "%d, %lld, %lld, %d, %lld, %lld, %d, %lld, %lld, %lld, %lld, %d\n", tree->getParticleGroup(idxGroup)->getNumberOfLeavesInBlock(), @@ -1565,7 +1593,9 @@ protected: (STARPU_RW | STARPU_COMMUTE_IF_SUPPORTED), particleHandles[idxGroup].down, #endif #ifdef STARPU_USE_TASK_NAME - #ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, p2pTaskNames.get(), + #else //"P2P-nb_i_p" STARPU_NAME, taskNames->print("P2P", "%d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", tree->getParticleGroup(idxGroup)->getNumberOfLeavesInBlock(), @@ -1612,7 +1642,9 @@ protected: (STARPU_RW | STARPU_COMMUTE_IF_SUPPORTED), particleHandles[idxGroup].down, #endif #ifdef STARPU_USE_TASK_NAME - #ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, l2pTaskNames.get(), + #else //"L2P-nb_i_p" STARPU_NAME, taskNames->print("L2P", "%d, %lld, %lld, %lld, %lld, %d\n", tree->getCellGroup(tree->getHeight()-1,idxGroup)->getNumberOfCellsInBlock(), diff --git a/Src/GroupTree/Core/FGroupTaskStarpuMpiAlgorithm.hpp b/Src/GroupTree/Core/FGroupTaskStarpuMpiAlgorithm.hpp index d8200754e..441cacc81 100644 --- a/Src/GroupTree/Core/FGroupTaskStarpuMpiAlgorithm.hpp +++ b/Src/GroupTree/Core/FGroupTaskStarpuMpiAlgorithm.hpp @@ -48,7 +48,10 @@ #include "../StarPUUtils/FStarPUReduxCpu.hpp" +#define SCALFMM_SIMGRID_TASKNAMEPARAMS +#ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS #include "../StarPUUtils/FStarPUTaskNameParams.hpp" +#endif template <class OctreeClass, class CellContainerClass, class KernelClass, class ParticleGroupClass, class StarPUCpuWrapperClass #ifdef SCALFMM_ENABLE_CUDA_KERNEL @@ -150,8 +153,19 @@ protected: #endif #ifdef STARPU_USE_TASK_NAME +#ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + std::vector<std::unique_ptr<char[]>> m2mTaskNames; + std::vector<std::unique_ptr<char[]>> m2lTaskNames; + std::vector<std::unique_ptr<char[]>> m2lOuterTaskNames; + std::vector<std::unique_ptr<char[]>> l2lTaskNames; + std::unique_ptr<char[]> p2mTaskNames; + std::unique_ptr<char[]> l2pTaskNames; + std::unique_ptr<char[]> p2pTaskNames; + std::unique_ptr<char[]> p2pOuterTaskNames; +#else FStarPUTaskNameParams taskNames; #endif +#endif #ifdef SCALFMM_STARPU_USE_PRIO typedef FStarPUFmmPrioritiesV2 PrioClass;// FStarPUFmmPriorities #endif @@ -173,7 +187,9 @@ public: openclWrapper(tree->getHeight()), #endif #ifdef STARPU_USE_TASK_NAME - taskNames(inComm.processId()), + #ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS + taskNames(inComm.processId(), inComm.processCount()), + #endif #endif wrapperptr(&wrappers){ FAssertLF(tree, "tree cannot be null"); @@ -247,6 +263,34 @@ public: } void buildTaskNames(){ +#ifdef STARPU_USE_TASK_NAME +#ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + const int namesLength = 128; + m2mTaskNames.resize(tree->getHeight()); + m2lTaskNames.resize(tree->getHeight()); + m2lOuterTaskNames.resize(tree->getHeight()); + l2lTaskNames.resize(tree->getHeight()); + for(int idxLevel = 0 ; idxLevel < tree->getHeight() ; ++idxLevel){ + m2mTaskNames[idxLevel].reset(new char[namesLength]); + snprintf(m2mTaskNames[idxLevel].get(), namesLength, "M2M-level-%d", idxLevel); + m2lTaskNames[idxLevel].reset(new char[namesLength]); + snprintf(m2lTaskNames[idxLevel].get(), namesLength, "M2L-level-%d", idxLevel); + m2lOuterTaskNames[idxLevel].reset(new char[namesLength]); + snprintf(m2lOuterTaskNames[idxLevel].get(), namesLength, "M2L-out-level-%d", idxLevel); + l2lTaskNames[idxLevel].reset(new char[namesLength]); + snprintf(l2lTaskNames[idxLevel].get(), namesLength, "L2L-level-%d", idxLevel); + } + + p2mTaskNames.reset(new char[namesLength]); + snprintf(p2mTaskNames.get(), namesLength, "P2M"); + l2pTaskNames.reset(new char[namesLength]); + snprintf(l2pTaskNames.get(), namesLength, "L2P"); + p2pTaskNames.reset(new char[namesLength]); + snprintf(p2pTaskNames.get(), namesLength, "P2P"); + p2pOuterTaskNames.reset(new char[namesLength]); + snprintf(p2pOuterTaskNames.get(), namesLength, "P2P-out"); +#endif +#endif } void syncData(){ @@ -1593,7 +1637,9 @@ protected: STARPU_RW, cellHandles[tree->getHeight()-1][idxGroup].up, STARPU_R, particleHandles[idxGroup].symb, #ifdef STARPU_USE_TASK_NAME - #ifdef SCALFMM_SIMGRID_TASKNAMEPARAMS + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, p2mTaskNames.get(), + #else STARPU_NAME, taskNames.print("P2M", "%d, %lld, %lld, %lld, %lld, %d\n", 0, 0, @@ -1656,7 +1702,10 @@ protected: task->priority = PrioClass::Controller().getInsertionPosM2M(idxLevel); #endif #ifdef STARPU_USE_TASK_NAME - STARPU_NAME, taskNames.print("M2M", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", +#ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + task->name = m2mTaskNames[idxLevel].get(); +#else + task->name = taskNames.print("M2M", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", idxLevel, 0, 0, @@ -1669,6 +1718,7 @@ protected: tree->getCellGroup(idxLevel+1, idxSubGroup)->getEndingIndex(), comm.processId()); +#endif #endif FAssertLF(starpu_task_submit(task) == 0); } @@ -1703,6 +1753,9 @@ protected: task->priority = PrioClass::Controller().getInsertionPosM2M(idxLevel); #endif #ifdef STARPU_USE_TASK_NAME +#ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + task->name = m2mTaskNames[idxLevel].get(); +#else task->name = taskNames.print("M2M", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", idxLevel, 0, @@ -1715,6 +1768,7 @@ protected: tree->getCellGroup(idxLevel+1, idxSubGroup)->getStartingIndex(), tree->getCellGroup(idxLevel+1, idxSubGroup)->getEndingIndex(), comm.processId()); +#endif #endif FAssertLF(starpu_task_submit(task) == 0); } @@ -1801,6 +1855,9 @@ protected: task->priority = PrioClass::Controller().getInsertionPosM2M(idxLevel); #endif #ifdef STARPU_USE_TASK_NAME + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + task->name = m2mTaskNames[idxLevel].get(); + #else task->name = taskNames.print("M2M", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", idxLevel, 0, @@ -1813,6 +1870,7 @@ protected: processesBlockInfos[idxLevel+1][firstOtherBlock + nbSubCellGroups].firstIndex, processesBlockInfos[idxLevel+1][firstOtherBlock + nbSubCellGroups].lastIndex, comm.processId()); + #endif #endif FAssertLF(starpu_task_submit(task) == 0); } @@ -1884,6 +1942,9 @@ protected: STARPU_R, remoteCellGroups[idxLevel][interactionid].handleSymb, STARPU_R, remoteCellGroups[idxLevel][interactionid].handleUp, #ifdef STARPU_USE_TASK_NAME + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, m2lOuterTaskNames[idxLevel].get(), + #else STARPU_NAME, taskNames.print("M2L_out", "%d, %d, %lld, %d, %lld, %d, %lld, %lld, %lld, %lld, %d\n", idxLevel, 0, @@ -1896,6 +1957,7 @@ protected: processesBlockInfos[idxLevel][interactionid].firstIndex, processesBlockInfos[idxLevel][interactionid].lastIndex, comm.processId()), + #endif #endif 0); } @@ -1926,6 +1988,9 @@ protected: STARPU_R, cellHandles[idxLevel][idxGroup].up, (STARPU_RW|STARPU_COMMUTE_IF_SUPPORTED), cellHandles[idxLevel][idxGroup].down, #ifdef STARPU_USE_TASK_NAME + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, m2lTaskNames[idxLevel].get(), + #else //"M2L-l_nb_i" STARPU_NAME, taskNames.print("M2L", "%d, %d, %lld, %lld, %lld, %lld, %lld, %d\n", idxLevel, @@ -1936,6 +2001,7 @@ protected: tree->getCellGroup(idxLevel, idxGroup)->getStartingIndex(), tree->getCellGroup(idxLevel, idxGroup)->getEndingIndex(), comm.processId()), + #endif #endif 0); } @@ -1964,6 +2030,9 @@ protected: STARPU_R, cellHandles[idxLevel][interactionid].symb, STARPU_R, cellHandles[idxLevel][interactionid].up, #ifdef STARPU_USE_TASK_NAME + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, m2lOuterTaskNames[idxLevel].get(), + #else STARPU_NAME, taskNames.print("M2L_out", "%d, %d, %lld, %d, %lld, %d, %lld, %lld, %lld, %lld, %d\n", idxLevel, 0, @@ -1976,6 +2045,7 @@ protected: tree->getCellGroup(idxLevel, interactionid)->getStartingIndex(), tree->getCellGroup(idxLevel, interactionid)->getEndingIndex(), comm.processId()), + #endif #endif 0); @@ -1994,6 +2064,9 @@ protected: STARPU_R, cellHandles[idxLevel][idxGroup].symb, STARPU_R, cellHandles[idxLevel][idxGroup].up, #ifdef STARPU_USE_TASK_NAME + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, m2lOuterTaskNames[idxLevel].get(), + #else STARPU_NAME, taskNames.print("M2L_out", "%d, %d, %lld, %d, %lld, %d, %lld, %lld, %lld, %lld, %d\n", idxLevel, 0, @@ -2006,6 +2079,7 @@ protected: tree->getCellGroup(idxLevel, interactionid)->getStartingIndex(), tree->getCellGroup(idxLevel, interactionid)->getEndingIndex(), comm.processId()), + #endif #endif 0); } @@ -2156,6 +2230,9 @@ protected: task->priority = PrioClass::Controller().getInsertionPosL2L(idxLevel); #endif #ifdef STARPU_USE_TASK_NAME + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + task->name = l2lTaskNames[idxLevel].get(); + #else task->name = taskNames.print("L2L", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", idxLevel, 0, @@ -2168,6 +2245,7 @@ protected: tree->getCellGroup(idxLevel+1, idxSubGroup)->getStartingIndex(), tree->getCellGroup(idxLevel+1, idxSubGroup)->getEndingIndex(), comm.processId()); + #endif #endif FAssertLF(starpu_task_submit(task) == 0); } @@ -2201,6 +2279,9 @@ protected: task->priority = PrioClass::Controller().getInsertionPosL2L(idxLevel); #endif #ifdef STARPU_USE_TASK_NAME +#ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + task->name = l2lTaskNames[idxLevel].get(); +#else task->name = taskNames.print("L2L", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", idxLevel, 0, @@ -2213,6 +2294,7 @@ protected: tree->getCellGroup(idxLevel+1, idxSubGroup)->getStartingIndex(), tree->getCellGroup(idxLevel+1, idxSubGroup)->getEndingIndex(), comm.processId()); + #endif #endif FAssertLF(starpu_task_submit(task) == 0); @@ -2270,6 +2352,9 @@ protected: task->priority = PrioClass::Controller().getInsertionPosL2L(idxLevel); #endif #ifdef STARPU_USE_TASK_NAME +#ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + task->name = l2lTaskNames[idxLevel].get(); +#else task->name = taskNames.print("L2L", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", idxLevel, 0, @@ -2282,6 +2367,7 @@ protected: tree->getCellGroup(idxLevel+1, idxSubGroup)->getStartingIndex(), tree->getCellGroup(idxLevel+1, idxSubGroup)->getEndingIndex(), comm.processId()); +#endif #endif FAssertLF(starpu_task_submit(task) == 0); } @@ -2320,6 +2406,9 @@ protected: task->priority = PrioClass::Controller().getInsertionPosL2L(idxLevel); #endif #ifdef STARPU_USE_TASK_NAME +#ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + task->name = l2lTaskNames[idxLevel].get(); +#else task->name = taskNames.print("L2L", "%d, %d, %lld, %d, %lld, %lld, %lld, %lld, %lld, %lld, %d\n", idxLevel, 0, @@ -2332,6 +2421,7 @@ protected: tree->getCellGroup(idxLevel+1, idxSubGroup)->getStartingIndex(), tree->getCellGroup(idxLevel+1, idxSubGroup)->getEndingIndex(), comm.processId()); +#endif #endif FAssertLF(starpu_task_submit(task) == 0); } @@ -2361,6 +2451,9 @@ protected: (STARPU_RW|STARPU_COMMUTE_IF_SUPPORTED), particleHandles[idxGroup].down, STARPU_R, remoteParticleGroupss[interactionid].handleSymb, #ifdef STARPU_USE_TASK_NAME + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, p2pOuterTaskNames.get(), + #else //"P2P_out-nb_i_p_nb_i_p_s" STARPU_NAME, taskNames.print("P2P_out", "%d, %lld, %lld, %d, %lld, %lld, %d, %lld, %lld, %lld, %lld, %d\n", 0, @@ -2375,6 +2468,7 @@ protected: processesBlockInfos[tree->getHeight()-1][interactionid].firstIndex, processesBlockInfos[tree->getHeight()-1][interactionid].lastIndex, comm.processId()), + #endif #endif 0); } @@ -2416,6 +2510,9 @@ protected: (STARPU_RW|STARPU_COMMUTE_IF_SUPPORTED), particleHandles[interactionid].down, #endif #ifdef STARPU_USE_TASK_NAME + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, p2pOuterTaskNames.get(), + #else STARPU_NAME, taskNames.print("P2P_out", "%d, %lld, %lld, %d, %lld, %lld, %d, %lld, %lld, %lld, %lld, %d\n", 0, 0, @@ -2429,6 +2526,7 @@ protected: tree->getParticleGroup(interactionid)->getStartingIndex(), tree->getParticleGroup(interactionid)->getEndingIndex(), comm.processId()), + #endif #endif 0); } @@ -2449,12 +2547,16 @@ protected: (STARPU_RW|STARPU_COMMUTE_IF_SUPPORTED), particleHandles[idxGroup].down, #endif #ifdef STARPU_USE_TASK_NAME + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, p2pTaskNames.get(), + #else STARPU_NAME, taskNames.print("P2P", "0, 0, 0, %lld, %lld, %lld, %lld, %d\n", tree->getParticleGroup(idxGroup)->getStartingIndex(), tree->getParticleGroup(idxGroup)->getEndingIndex(), tree->getParticleGroup(idxGroup)->getStartingIndex(), tree->getParticleGroup(idxGroup)->getEndingIndex(), comm.processId()), + #endif #endif 0); } @@ -2489,6 +2591,9 @@ protected: (STARPU_RW|STARPU_COMMUTE_IF_SUPPORTED), particleHandles[idxGroup].down, #endif #ifdef STARPU_USE_TASK_NAME + #ifndef SCALFMM_SIMGRID_TASKNAMEPARAMS + STARPU_NAME, l2pTaskNames.get(), + #else STARPU_NAME, taskNames.print("L2P", "%d, %lld, %lld, %lld, %lld, %d\n", 0, 0, @@ -2496,6 +2601,7 @@ protected: tree->getParticleGroup(idxGroup)->getStartingIndex(), tree->getParticleGroup(idxGroup)->getEndingIndex(), comm.processId()), + #endif #endif 0); } diff --git a/Tests/GroupTree/compareDAGmapping.cpp b/Tests/GroupTree/compareDAGmapping.cpp index a7b63f6d8..305d8b4c7 100644 --- a/Tests/GroupTree/compareDAGmapping.cpp +++ b/Tests/GroupTree/compareDAGmapping.cpp @@ -7,6 +7,7 @@ #include <thread> #include <deque> #include <unordered_set> +#include <unordered_map> using namespace std; #include "../../Src/Utils/FGlobal.hpp" @@ -22,10 +23,18 @@ struct Task vector<long long int> id; int mpiNode; int level; + double perf; bool operator==(const Task & other) const { if(type != other.type || id.size() != other.id.size()) return false; + if(type == P2P_OUT) //Symétrisation + if(id[0] == other.id[2] && id[1] == other.id[3] && id[2] == other.id[0] && id[3] == other.id[1]) + return true; + if(type == M2L_OUT) //Symétrisation + if(id[1] == other.id[3] && id[2] == other.id[4] && id[3] == other.id[1] && id[4] == other.id[2]) + return true; + for(size_t i = 0; i < id.size(); ++i) if(id[i] != other.id[i]) return false; @@ -56,6 +65,7 @@ namespace std { struct DagData { unordered_set<Task> allTask; + unordered_map<long long int, double> performence; }; bool parseLine(DagData & dagData, deque<string> & lineElements) @@ -67,6 +77,7 @@ bool parseLine(DagData & dagData, deque<string> & lineElements) { task.type = P2P_OUT; task.uniqueId = stoll(lineElements[1]); + task.perf = dagData.performence.count(task.uniqueId) == 1 ? dagData.performence[task.uniqueId] : 0.0; task.id.resize(4); task.id[0] = stoll(lineElements[9]); task.id[1] = stoll(lineElements[10]); @@ -79,6 +90,7 @@ bool parseLine(DagData & dagData, deque<string> & lineElements) { task.type = P2P; task.uniqueId = stoll(lineElements[1]); + task.perf = dagData.performence.count(task.uniqueId) == 1 ? dagData.performence[task.uniqueId] : 0.0; task.id.resize(4); task.id[0] = stoll(lineElements[5]); task.id[1] = stoll(lineElements[6]); @@ -93,6 +105,7 @@ bool parseLine(DagData & dagData, deque<string> & lineElements) { task.type = M2L; task.uniqueId = stoll(lineElements[1]); + task.perf = dagData.performence.count(task.uniqueId) == 1 ? dagData.performence[task.uniqueId] : 0.0; task.id.resize(5); task.id[0] = stoll(lineElements[2]); task.id[1] = stoll(lineElements[5]); @@ -106,6 +119,7 @@ bool parseLine(DagData & dagData, deque<string> & lineElements) { task.type = M2L_OUT; task.uniqueId = stoll(lineElements[1]); + task.perf = dagData.performence.count(task.uniqueId) == 1 ? dagData.performence[task.uniqueId] : 0.0; task.id.resize(5); task.id[0] = stoll(lineElements[2]); task.id[1] = stoll(lineElements[8]); @@ -119,6 +133,7 @@ bool parseLine(DagData & dagData, deque<string> & lineElements) { task.type = M2M; task.uniqueId = stoll(lineElements[1]); + task.perf = dagData.performence.count(task.uniqueId) == 1 ? dagData.performence[task.uniqueId] : 0.0; task.id.resize(5); task.id[0] = stoll(lineElements[2]); task.id[1] = stoll(lineElements[8]); @@ -132,6 +147,7 @@ bool parseLine(DagData & dagData, deque<string> & lineElements) { task.type = L2L; task.uniqueId = stoll(lineElements[1]); + task.perf = dagData.performence.count(task.uniqueId) == 1 ? dagData.performence[task.uniqueId] : 0.0; task.id.resize(5); task.id[0] = stoll(lineElements[2]); task.id[1] = stoll(lineElements[8]); @@ -145,6 +161,7 @@ bool parseLine(DagData & dagData, deque<string> & lineElements) { task.type = L2P; task.uniqueId = stoll(lineElements[1]); + task.perf = dagData.performence.count(task.uniqueId) == 1 ? dagData.performence[task.uniqueId] : 0.0; task.id.resize(2); task.id[0] = stoll(lineElements[5]); task.id[1] = stoll(lineElements[6]); @@ -155,6 +172,7 @@ bool parseLine(DagData & dagData, deque<string> & lineElements) { task.type = L2P; task.uniqueId = stoll(lineElements[1]); + task.perf = dagData.performence.count(task.uniqueId) == 1 ? dagData.performence[task.uniqueId] : 0.0; task.id.resize(2); task.id[0] = stoll(lineElements[5]); task.id[1] = stoll(lineElements[6]); @@ -192,20 +210,64 @@ bool fillDagData(const char* const filename, DagData & dagData) string line; string delim(", "); deque<string> splitLine; - int count = 0; while(!fichier.eof()) { - ++count; getline(fichier, line); splitLine.clear(); split(line, delim, splitLine); parseLine(dagData, splitLine); } - cout << (count-1) << " lines in " << filename << endl; - // instructions fichier.close(); // on ferme le fichier return true; } +bool getTaskPerf(string line, double &perf) +{ + perf = stod(line); + return true; +} +bool getTaskId(string line, long long int & taskId) +{ + size_t pos = line.rfind('_'); + if(pos == string::npos) + return false; + taskId = stoll(line.substr(pos)); + return true; +} +void fillPerformanceData(const char* const filename, DagData & dagData) +{ + std::ifstream fichier(filename, ios::in); // on ouvre le fichier en lecture + + if(!fichier) // si l'ouverture a réussi + cerr << "Couldn't open " << filename << endl; + + string line; + string delim(", "); + deque<string> splitLine; + bool getPerf = false; + long long int taskId; + double perf; + while(!fichier.eof()) + { + getline(fichier, line); + if(line.size() > 0 && line[0] == 'N') + { + if(getTaskId(line.substr(3), taskId)) + getPerf = true; + } + else if(getPerf && line.size() > 0 && line[0] == 'S') + { + if(getTaskPerf(line.substr(3), perf)) + { + getPerf = false;; + dagData.performence[taskId] = perf; + } + } + splitLine.clear(); + split(line, delim, splitLine); + parseLine(dagData, splitLine); + } + fichier.close(); // on ferme le fichier +} void compareDag(DagData& dag1, DagData& dag2, int treeHeight) { long long int notFoundCount[treeHeight] = {0}; @@ -238,33 +300,46 @@ void compareDag(DagData& dag1, DagData& dag2, int treeHeight) if(notFound[i] == true) cout << "Diff lvl " << i << " -> " << notFoundCount[i] << endl; } -int main(int argc, char* argv[]){ +int main(int argc, char* argv[]) +{ + const FParameterNames ExplicitTrace { + {"-E"}, + "Simgrid trace from explicit mpi" + }; + const FParameterNames ImplicitTrace { + {"-I"} , + "Simgrid trace from implicit mpi" + }; const FParameterNames Explicit { {"-e"}, - "Trace from explicit mpi" + "Simgrid trace from explicit mpi" }; const FParameterNames Implicit { {"-i"} , - "Trace from implicit mpi" + "Simgrid trace from implicit mpi" }; const FParameterNames TreeHeight { {"-h"}, "Height of the tree" }; - FHelpDescribeAndExit(argc, argv, "Compare DAG mapping", Explicit, Implicit, TreeHeight); + FHelpDescribeAndExit(argc, argv, "Compare DAG mapping", Explicit, Implicit, ExplicitTrace, ImplicitTrace, TreeHeight); // Get params - const char* const explicitFilename = FParameters::getStr(argc,argv,Explicit.options, "explicit.rec"); - const char* const implicitFilename = FParameters::getStr(argc,argv,Implicit.options, "implicit.rec"); + 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; std::thread explicitThread([&](){ + fillPerformanceData(explicitTraceFilename, explicitData); explicitGood = fillDagData(explicitFilename, explicitData); }); explicitThread.join(); std::thread implicitThread([&](){ + fillPerformanceData(implicitTraceFilename, implicitData); implicitGood = fillDagData(implicitFilename, implicitData); }); implicitThread.join(); diff --git a/compile_dag_result.sh b/compile_dag_result.sh index 81df751fb..c89f92aab 100755 --- a/compile_dag_result.sh +++ b/compile_dag_result.sh @@ -1,10 +1,14 @@ #!/bin/sh export SCALFMM_SIMGRIDOUT='scalfmm.out' -make testBlockedImplicitAlgorithm generateMapping testBlockedMpiAlgorithm compareDAGmapping -j16 +export GROUP_SIZE=8 +export TREE_HEIGHT=3 +export NB_NODE=8 +export NB_PARTICLE_PER_NODE=$((`awk "BEGIN{print 8 ** ($TREE_HEIGHT-1)}"` / $NB_NODE)) +make testBlockedImplicitAlgorithm generateMapping testBlockedMpiAlgorithm compareDAGmapping -j $((`nproc`*2)) if [ $? -ne 0 ]; then exit fi -mpiexec -n 8 ./Tests/Release/testBlockedMpiAlgorithm -nb 8 -bs 8 -h 3 +mpiexec -n $NB_NODE ./Tests/Release/testBlockedMpiAlgorithm -nb $NB_PARTICLE_PER_NODE -bs $GROUP_SIZE -h $TREE_HEIGHT if [ $? -ne 0 ]; then exit fi @@ -18,10 +22,10 @@ for i in $a; do done cp -f $SCALFMM_SIMGRIDOUT scalfmm_explicit.out -mpiexec -n 8 ./Tests/Release/generateMapping -nb 8 -bs 8 -h 3 -mpiexec -n 8 ./Tests/Release/testBlockedImplicitAlgorithm -map mapping -f canard.fma -bs 8 -h 3 +mpiexec -n $NB_NODE ./Tests/Release/generateMapping -nb $NB_PARTICLE_PER_NODE -bs $GROUP_SIZE -h $TREE_HEIGHT +mpiexec -n $NB_NODE ./Tests/Release/testBlockedImplicitAlgorithm -map mapping -f canard.fma -bs $GROUP_SIZE -h $TREE_HEIGHT if [ $? -ne 0 ]; then exit fi cp -f scalfmm.out_0 scalfmm_implicit.out -./Tests/Release/compareDAGmapping -e scalfmm_explicit.out -i scalfmm_implicit.out -h 3 > output +./Tests/Release/compareDAGmapping -e scalfmm_explicit.out -i scalfmm_implicit.out -h $TREE_HEIGHT > output -- GitLab