diff --git a/Src/Utils/FGlobal.hpp b/Src/Utils/FGlobal.hpp index 9f4f3b1a85f2dce59b36315c47fd949e4c150c92..34d6fe71c208ed0f1062a9db70af62e99b84f17d 100755 --- a/Src/Utils/FGlobal.hpp +++ b/Src/Utils/FGlobal.hpp @@ -95,5 +95,14 @@ typedef long long MortonIndex; #endif #endif + +/////////////////////////////////////////////////////// +// Test OMP4 +/////////////////////////////////////////////////////// + +#if _OPENMP >= 201307 +#define ScalFMM_USE_OMP4 +#endif + #endif //FGLOBAL_HPP diff --git a/Tests/noDist/testBlockedAlgorithm.cpp b/Tests/noDist/testBlockedAlgorithm.cpp index 6f0b945d4f93398e7341c8bfcebbabd16ec7b3b2..3f5ef766da129d7ddfbedc294f63d9d1437bcb3b 100644 --- a/Tests/noDist/testBlockedAlgorithm.cpp +++ b/Tests/noDist/testBlockedAlgorithm.cpp @@ -1,3 +1,5 @@ +#include "../../Src/Utils/FGlobal.hpp" + #include "../../Src/GroupTree/FGroupTree.hpp" #include "../../Src/Components/FSimpleLeaf.hpp" @@ -29,15 +31,23 @@ int main(int argc, char* argv[]){ "The size of the block of the blocked tree" }; FHelpDescribeAndExit(argc, argv, "Test the blocked tree by counting the particles.", - FParameterDefinitions::OctreeHeight, + FParameterDefinitions::OctreeHeight, FParameterDefinitions::NbThreads, FParameterDefinitions::NbParticles, LocalOptionBlocSize); // Initialize the types typedef FTestCell GroupCellClass; typedef FGroupTestParticleContainer GroupContainerClass; typedef FGroupTree< GroupCellClass, GroupContainerClass, 2, long long int> GroupOctreeClass; typedef FTestKernels< GroupCellClass, GroupContainerClass > GroupKernelClass; +#ifdef ScalFMM_USE_STARPU + typedef FGroupStarPUAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; +#elif defined(ScalFMM_USE_OMP4) + // Set the number of threads + omp_set_num_threads(FParameters::getValue(argc,argv,FParameterDefinitions::NbThreads.options, omp_get_max_threads())); + typedef FGroupTaskDepAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; +#else //typedef FGroupSeqAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; -typedef FGroupTaskDepAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; + typedef FGroupTaskAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; +#endif typedef FTestCell CellClass; typedef FTestParticleContainer ContainerClass; diff --git a/Tests/noDist/testBlockedChebyshev.cpp b/Tests/noDist/testBlockedChebyshev.cpp index 9d50299928be5c3b23f4e697c218e35835f08309..345d0e7f3a9ee1b68ec0f8eb5d8fba800726c44b 100644 --- a/Tests/noDist/testBlockedChebyshev.cpp +++ b/Tests/noDist/testBlockedChebyshev.cpp @@ -1,3 +1,4 @@ +#include "../../Src/Utils/FGlobal.hpp" #include "../../Src/GroupTree/FGroupTree.hpp" @@ -42,8 +43,6 @@ int main(int argc, char* argv[]){ FParameterDefinitions::OctreeHeight,FParameterDefinitions::InputFile, FParameterDefinitions::NbParticles, FParameterDefinitions::NbThreads, LocalOptionBlocSize, LocalOptionNoValidate); - // Set the number of threads - omp_set_num_threads(FParameters::getValue(argc,argv,FParameterDefinitions::NbThreads.options, omp_get_max_threads())); // Initialize the types static const int ORDER = 6; @@ -52,9 +51,16 @@ int main(int argc, char* argv[]){ typedef FP2PGroupParticleContainer<> GroupContainerClass; typedef FGroupTree< GroupCellClass, GroupContainerClass, 5, FReal> GroupOctreeClass; typedef FChebSymKernel<GroupCellClass,GroupContainerClass,MatrixKernelClass,ORDER> GroupKernelClass; - //typedef FGroupSeqAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; - //typedef FGroupTaskAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; +#ifdef ScalFMM_USE_STARPU + typedef FGroupStarPUAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; +#elif defined(ScalFMM_USE_OMP4) + // Set the number of threads + omp_set_num_threads(FParameters::getValue(argc,argv,FParameterDefinitions::NbThreads.options, omp_get_max_threads())); typedef FGroupTaskDepAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; +#else + //typedef FGroupSeqAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; + typedef FGroupTaskAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; +#endif // Get params const int NbLevels = FParameters::getValue(argc,argv,FParameterDefinitions::OctreeHeight.options, 5); diff --git a/Tests/noDist/testBlockedRotation.cpp b/Tests/noDist/testBlockedRotation.cpp index a85d2860c990742458c492c6981665885ca7d5c9..330b134e5f6a7a8f99248eb6343ec06299d5b9f3 100644 --- a/Tests/noDist/testBlockedRotation.cpp +++ b/Tests/noDist/testBlockedRotation.cpp @@ -1,3 +1,5 @@ +#include "../../Src/Utils/FGlobal.hpp" + #include "../../Src/GroupTree/FGroupTree.hpp" #include "../../Src/Components/FSimpleLeaf.hpp" @@ -41,19 +43,23 @@ int main(int argc, char* argv[]){ FParameterDefinitions::NbThreads, FParameterDefinitions::NbParticles, LocalOptionBlocSize, LocalOptionNoValidate); - // Set the number of threads - omp_set_num_threads(FParameters::getValue(argc,argv,FParameterDefinitions::NbThreads.options, omp_get_max_threads())); - - // Initialize the types static const int P = 9; typedef FRotationCell<P> GroupCellClass; typedef FP2PGroupParticleContainer<> GroupContainerClass; typedef FGroupTree< GroupCellClass, GroupContainerClass, 5, FReal> GroupOctreeClass; typedef FRotationKernel< GroupCellClass, GroupContainerClass , P> GroupKernelClass; - //typedef FGroupSeqAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; - //typedef FGroupTaskAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; +#ifdef ScalFMM_USE_STARPU + typedef FGroupStarPUAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; +#elif defined(ScalFMM_USE_OMP4) + // Set the number of threads + omp_set_num_threads(FParameters::getValue(argc,argv,FParameterDefinitions::NbThreads.options, omp_get_max_threads())); typedef FGroupTaskDepAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; +#else + //typedef FGroupSeqAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; + typedef FGroupTaskAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm; +#endif + // Get params const int NbLevels = FParameters::getValue(argc,argv,FParameterDefinitions::OctreeHeight.options, 5); diff --git a/Tests/noDist/testBlockedTree.cpp b/Tests/noDist/testBlockedTree.cpp index 9b67cefb033315c71e943c96bfd13bb02b56d2ad..2d0eb6a9d57edc60f7fd53e64f1351116f10d5b4 100644 --- a/Tests/noDist/testBlockedTree.cpp +++ b/Tests/noDist/testBlockedTree.cpp @@ -1,3 +1,4 @@ +#include "../../Src/Utils/FGlobal.hpp" #include "../../Src/GroupTree/FGroupTree.hpp" @@ -24,6 +25,8 @@ #include "../../Src/Files/FFmaGenericLoader.hpp" #include "../../Src/GroupTree/FGroupSeqAlgorithm.hpp" +#include "../../Src/GroupTree/FGroupTaskAlgorithm.hpp" +#include "../../Src/GroupTree/FGroupTaskDepAlgorithm.hpp" #include "../../Src/GroupTree/FP2PGroupParticleContainer.hpp" #include "../../Src/Utils/FParameterNames.hpp" @@ -84,7 +87,14 @@ int main(int argc, char* argv[]){ typedef FRotationKernel< CellClass, FP2PGroupParticleContainer<> , P> KernelClass; - typedef FGroupSeqAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, CellClass, KernelClass, typename GroupOctreeClass::ParticleGroupClass, FP2PGroupParticleContainer<> > GroupAlgorithm; +#ifdef ScalFMM_USE_STARPU + typedef FGroupStarPUAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, CellClass, KernelClass, typename GroupOctreeClass::ParticleGroupClass, FP2PGroupParticleContainer<> > GroupAlgorithm; +#elif defined(ScalFMM_USE_OMP4) + typedef FGroupTaskDepAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, CellClass, KernelClass, typename GroupOctreeClass::ParticleGroupClass, FP2PGroupParticleContainer<> > GroupAlgorithm; +#else + //typedef FGroupSeqAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, CellClass, KernelClass, typename GroupOctreeClass::ParticleGroupClass, FP2PGroupParticleContainer<> > GroupAlgorithm; + typedef FGroupTaskAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, CellClass, KernelClass, typename GroupOctreeClass::ParticleGroupClass, FP2PGroupParticleContainer<> > GroupAlgorithm; +#endif KernelClass kernel(NbLevels, loader.getBoxWidth(), loader.getCenterOfBox()); GroupAlgorithm algo(&groupedTree2,&kernel);