From 7757df8ca0dc518b09e67d6afd1f6a864af43d6b Mon Sep 17 00:00:00 2001 From: Matthias Messner <matthias.messner@inria.fr> Date: Tue, 20 Mar 2012 10:46:03 +0100 Subject: [PATCH] bugfix in FChebKernel.hpp, added starpu support in testChebAlgorithm [WIP] --- Src/Kernels/Chebyshev/FChebKernel.hpp | 8 ++++---- Tests/Kernels/testChebAlgorithm.cpp | 28 +++++++++++++++++++++------ UTests/utestChebyshevDirect.cpp | 12 +++++++----- 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/Src/Kernels/Chebyshev/FChebKernel.hpp b/Src/Kernels/Chebyshev/FChebKernel.hpp index 7feceabc7..44ac9c96d 100644 --- a/Src/Kernels/Chebyshev/FChebKernel.hpp +++ b/Src/Kernels/Chebyshev/FChebKernel.hpp @@ -179,10 +179,10 @@ public: // TargetParticles); // 2.c) apply Sx and Px (grad Sx) - AbstractBaseClass::Interpolator->applyL2PGradient(LeafCellCenter, - AbstractBaseClass::BoxWidthLeaf, - LeafCell->getLocal(), - TargetParticles); + AbstractBaseClass::Interpolator->applyL2PTotal(LeafCellCenter, + AbstractBaseClass::BoxWidthLeaf, + LeafCell->getLocal(), + TargetParticles); } }; diff --git a/Tests/Kernels/testChebAlgorithm.cpp b/Tests/Kernels/testChebAlgorithm.cpp index 089d65af8..165e7a76b 100644 --- a/Tests/Kernels/testChebAlgorithm.cpp +++ b/Tests/Kernels/testChebAlgorithm.cpp @@ -23,6 +23,8 @@ #include <cstdio> #include <cstdlib> +#include <starpu.h> + #include "../../Src/Kernels/Chebyshev/FChebParticle.hpp" #include "../../Src/Kernels/Chebyshev/FChebLeaf.hpp" #include "../../Src/Kernels/Chebyshev/FChebCell.hpp" @@ -38,6 +40,7 @@ #include "../../Src/Core/FFmmAlgorithm.hpp" #include "../../Src/Core/FFmmAlgorithmThread.hpp" +#include "../../Src/Core/FFmmAlgorithmStarpu.hpp" /** This program show an example of use of @@ -81,8 +84,8 @@ int main(int argc, char* argv[]) { const unsigned int ORDER = 3; const FReal epsilon = FParameters::getValue(argc, argv, "-eps", FReal(1e-3)); - const long NbPart = FParameters::getValue(argc, argv, "-num", 4000000); - const unsigned int TreeHeight = FParameters::getValue(argc, argv, "-h", 7); + const long NbPart = FParameters::getValue(argc, argv, "-num", 400000); + const unsigned int TreeHeight = FParameters::getValue(argc, argv, "-h", 6); const unsigned int SubTreeHeight = FParameters::getValue(argc, argv, "-sh", 2); const unsigned int NbThreads = FParameters::getValue(argc, argv, "-t", 1); @@ -105,10 +108,23 @@ int main(int argc, char* argv[]) typedef FChebMatrixKernelR MatrixKernelClass; typedef FChebCell<ORDER> CellClass; typedef FOctree<ParticleClass,CellClass,ContainerClass,LeafClass> OctreeClass; - //typedef FChebKernel<ParticleClass,CellClass,ContainerClass,MatrixKernelClass,ORDER> KernelClass; - typedef FChebSymKernel<ParticleClass,CellClass,ContainerClass,MatrixKernelClass,ORDER> KernelClass; - //typedef FFmmAlgorithm<OctreeClass,ParticleClass,CellClass,ContainerClass,KernelClass,LeafClass> FmmClass; - typedef FFmmAlgorithmThread<OctreeClass,ParticleClass,CellClass,ContainerClass,KernelClass,LeafClass> FmmClass; + typedef FChebKernel<ParticleClass,CellClass,ContainerClass,MatrixKernelClass,ORDER> KernelClass; + //typedef FChebSymKernel<ParticleClass,CellClass,ContainerClass,MatrixKernelClass,ORDER> KernelClass; + typedef FFmmAlgorithm<OctreeClass,ParticleClass,CellClass,ContainerClass,KernelClass,LeafClass> FmmClass; + //typedef FFmmAlgorithmThread<OctreeClass,ParticleClass,CellClass,ContainerClass,KernelClass,LeafClass> FmmClass; + +// // typedefs for STARPU +// typedef FChebParticle ParticleClass; +// typedef StarVector<ParticleClass> ContainerClass; +// typedef DataVector<ParticleClass> RealContainerClass; +// typedef FChebLeaf<ParticleClass,ContainerClass> LeafClass; +// typedef FChebMatrixKernelR MatrixKernelClass; +// typedef FChebCell<ORDER> RealCellClass; +// typedef FStarCell<RealCellClass> CellClass; +// typedef FOctree<ParticleClass,CellClass,ContainerClass,LeafClass> OctreeClass; +// //typedef FChebKernel<ParticleClass,RealCellClass,RealContainerClass,MatrixKernelClass,ORDER> KernelClass; +// typedef FChebSymKernel<ParticleClass,RealCellClass,RealContainerClass,MatrixKernelClass,ORDER> KernelClass; +// typedef FFmmAlgorithmStarpu<OctreeClass,ParticleClass,CellClass,RealCellClass,ContainerClass,KernelClass,LeafClass> FmmClass; // What we do ////////////////////////////////////////////////////// std::cout << ">> Testing the Chebyshev interpolation base FMM algorithm.\n"; diff --git a/UTests/utestChebyshevDirect.cpp b/UTests/utestChebyshevDirect.cpp index a6ad023bc..678c2f1c4 100644 --- a/UTests/utestChebyshevDirect.cpp +++ b/UTests/utestChebyshevDirect.cpp @@ -31,6 +31,7 @@ #include "../Src/Kernels/Chebyshev/FChebCell.hpp" #include "../Src/Kernels/Chebyshev/FChebMatrixKernel.hpp" #include "../Src/Kernels/Chebyshev/FChebKernel.hpp" +#include "../Src/Kernels/Chebyshev/FChebSymKernel.hpp" /* In this test we compare the spherical fmm results and the direct results. @@ -70,6 +71,7 @@ class TestChebyshevDirect : public FUTester<TestChebyshevDirect> { typedef FChebCell<ORDER> CellClass; typedef FOctree<ParticleClass,CellClass,ContainerClass,LeafClass> OctreeClass; typedef FChebKernel<ParticleClass,CellClass,ContainerClass,MatrixKernelClass,ORDER> KernelClass; + //typedef FChebSymKernel<ParticleClass,CellClass,ContainerClass,MatrixKernelClass,ORDER> KernelClass; typedef FFmmAlgorithm<OctreeClass,ParticleClass,CellClass,ContainerClass,KernelClass,LeafClass> FmmClass; // Warning in make test the exec dir it Build/UTests @@ -110,17 +112,17 @@ class TestChebyshevDirect : public FUTester<TestChebyshevDirect> { for(int idxOther = idxTarget + 1 ; idxOther < loader.getNumberOfParticles() ; ++idxOther){ //kernels.directInteractionMutual(&particles[idxTarget], &particles[idxOther]); const FReal wt = particles[idxTarget].getPhysicalValue(); - const FReal ws = particles[idxOther].getPhysicalValue(); + const FReal ws = particles[idxOther ].getPhysicalValue(); const FReal one_over_r = MatrixKernel.evaluate(particles[idxTarget].getPosition(), particles[idxOther].getPosition()); // potential particles[idxTarget].incPotential(one_over_r * ws); - particles[idxOther].incPotential(one_over_r * wt); + particles[idxOther ].incPotential(one_over_r * wt); // force - F3DPosition force(particles[idxTarget].getPosition() - particles[idxOther].getPosition()); + F3DPosition force(particles[idxOther].getPosition() - particles[idxTarget].getPosition()); force *= ((ws*wt) * (one_over_r*one_over_r*one_over_r)); - particles[idxTarget].incForces( force.getX(), force.getY(), force.getZ()); - particles[idxOther].incForces( -force.getX(), -force.getY(), -force.getZ()); + particles[idxTarget].incForces( force.getX(), force.getY(), force.getZ()); + particles[idxOther ].incForces( -force.getX(), -force.getY(), -force.getZ()); } } -- GitLab