Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
ScalFMM
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
5
Issues
5
List
Boards
Labels
Service Desk
Milestones
Operations
Operations
Incidents
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
solverstack
ScalFMM
Commits
1afca526
Commit
1afca526
authored
Mar 24, 2015
by
BRAMAS Berenger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Prepare for templatize FReal
parent
a466119d
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
202 additions
and
172 deletions
+202
-172
Src/Kernels/Interpolation/FInterpP2PKernels.hpp
Src/Kernels/Interpolation/FInterpP2PKernels.hpp
+2
-2
Src/Kernels/P2P/FP2P.hpp
Src/Kernels/P2P/FP2P.hpp
+88
-76
Src/Kernels/P2P/FP2PR.hpp
Src/Kernels/P2P/FP2PR.hpp
+90
-75
Src/Kernels/Rotation/FRotationKernel.hpp
Src/Kernels/Rotation/FRotationKernel.hpp
+2
-2
Src/Kernels/Rotation/FRotationOriginalKernel.hpp
Src/Kernels/Rotation/FRotationOriginalKernel.hpp
+2
-2
Src/Kernels/Spherical/FAbstractSphericalKernel.hpp
Src/Kernels/Spherical/FAbstractSphericalKernel.hpp
+2
-2
Src/Kernels/Taylor/FTaylorKernel.hpp
Src/Kernels/Taylor/FTaylorKernel.hpp
+2
-2
Src/Kernels/Taylor/FTaylorKernelSimple.hpp
Src/Kernels/Taylor/FTaylorKernelSimple.hpp
+8
-2
Tests/Kernels/testP2PEfficency.cpp
Tests/Kernels/testP2PEfficency.cpp
+2
-2
Tests/noDist/testP2PAvx.cpp
Tests/noDist/testP2PAvx.cpp
+4
-7
No files found.
Src/Kernels/Interpolation/FInterpP2PKernels.hpp
View file @
1afca526
...
@@ -57,7 +57,7 @@ struct DirectInteractionComputer<1,1>
...
@@ -57,7 +57,7 @@ struct DirectInteractionComputer<1,1>
static
void
P2P
(
ContainerClass
*
const
FRestrict
TargetParticles
,
static
void
P2P
(
ContainerClass
*
const
FRestrict
TargetParticles
,
ContainerClass
*
const
NeighborSourceParticles
[
27
],
ContainerClass
*
const
NeighborSourceParticles
[
27
],
const
MatrixKernelClass
*
const
MatrixKernel
){
const
MatrixKernelClass
*
const
MatrixKernel
){
FP2P
::
FullMutual
(
TargetParticles
,
NeighborSourceParticles
,
14
,
MatrixKernel
);
FP2P
T
<
FReal
>::
FullMutual
<
ContainerClass
,
MatrixKernelClass
>
(
TargetParticles
,
NeighborSourceParticles
,
14
,
MatrixKernel
);
}
}
template
<
typename
ContainerClass
,
typename
MatrixKernelClass
>
template
<
typename
ContainerClass
,
typename
MatrixKernelClass
>
...
@@ -65,7 +65,7 @@ struct DirectInteractionComputer<1,1>
...
@@ -65,7 +65,7 @@ struct DirectInteractionComputer<1,1>
ContainerClass
*
const
inNeighbors
[
27
],
ContainerClass
*
const
inNeighbors
[
27
],
const
int
inSize
,
const
int
inSize
,
const
MatrixKernelClass
*
const
MatrixKernel
){
const
MatrixKernelClass
*
const
MatrixKernel
){
FP2P
::
FullRemote
(
inTargets
,
inNeighbors
,
inSize
,
MatrixKernel
);
FP2P
T
<
FReal
>::
FullRemote
<
ContainerClass
,
MatrixKernelClass
>
(
inTargets
,
inNeighbors
,
inSize
,
MatrixKernel
);
}
}
};
};
...
...
Src/Kernels/P2P/FP2P.hpp
View file @
1afca526
...
@@ -574,92 +574,104 @@ static void GenericFullRemote(ContainerClass* const FRestrict inTargets, Contain
...
@@ -574,92 +574,104 @@ static void GenericFullRemote(ContainerClass* const FRestrict inTargets, Contain
}
}
}
}
#ifdef ScalFMM_USE_DOUBLE_PRECISION
}
// End namespace
template
<
class
ValueClass
>
struct
FP2PT
{
};
#if defined(ScalFMM_USE_AVX)
#if defined(ScalFMM_USE_AVX)
// AVX DOUBLE
template
<
>
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
struct
FP2PT
<
double
>
{
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
GenericFullMutual
<
ContainerClass
,
MatrixKernelClass
,
__m256d
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
FP2P
::
GenericFullMutual
<
ContainerClass
,
MatrixKernelClass
,
__m256d
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
}
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
GenericFullRemote
<
ContainerClass
,
MatrixKernelClass
,
__m256d
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
FP2P
::
GenericFullRemote
<
ContainerClass
,
MatrixKernelClass
,
__m256d
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
}
#elif defined(ScalFMM_USE_SSE)
};
// SSE DOUBLE
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
template
<
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
struct
FP2PT
<
float
>
{
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
GenericFullMutual
<
ContainerClass
,
MatrixKernelClass
,
__m128d
,
2
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
FP2P
::
GenericFullMutual
<
ContainerClass
,
MatrixKernelClass
,
__m256
,
8
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
}
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
GenericFullRemote
<
ContainerClass
,
MatrixKernelClass
,
__m128d
,
2
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
FP2P
::
GenericFullRemote
<
ContainerClass
,
MatrixKernelClass
,
__m256
,
8
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
}
#else
};
// SSE DOUBLE
#elif defined(ScalFMM_USE_SSE)
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
template
<
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
struct
FP2PT
<
double
>
{
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
GenericFullMutual
<
ContainerClass
,
MatrixKernelClass
,
FReal
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
FP2P
::
GenericFullMutual
<
ContainerClass
,
MatrixKernelClass
,
__m128d
,
2
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
}
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
GenericFullRemote
<
ContainerClass
,
MatrixKernelClass
,
FReal
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
FP2P
::
GenericFullRemote
<
ContainerClass
,
MatrixKernelClass
,
__m128d
,
2
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
}
#endif
};
#else
#if defined(ScalFMM_USE_AVX)
template
<
>
// AVX DOUBLE
struct
FP2PT
<
float
>
{
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
GenericFullMutual
<
ContainerClass
,
MatrixKernelClass
,
__m256
,
8
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
FP2P
::
GenericFullMutual
<
ContainerClass
,
MatrixKernelClass
,
__m128
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
}
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
GenericFullRemote
<
ContainerClass
,
MatrixKernelClass
,
__m256
,
8
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
FP2P
::
GenericFullRemote
<
ContainerClass
,
MatrixKernelClass
,
__m128
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
}
#elif defined(ScalFMM_USE_SSE)
};
// SSE DOUBLE
#else
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
template
<
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
struct
FP2PT
<
double
>
{
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
GenericFullMutual
<
ContainerClass
,
MatrixKernelClass
,
__m128
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
FP2P
::
GenericFullMutual
<
ContainerClass
,
MatrixKernelClass
,
FReal
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
}
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
GenericFullRemote
<
ContainerClass
,
MatrixKernelClass
,
__m128
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
FP2P
::
GenericFullRemote
<
ContainerClass
,
MatrixKernelClass
,
FReal
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
}
#else
};
// SSE DOUBLE
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
template
<
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
struct
FP2PT
<
float
>
{
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
GenericFullMutual
<
ContainerClass
,
MatrixKernelClass
,
FReal
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
FP2P
::
GenericFullMutual
<
ContainerClass
,
MatrixKernelClass
,
FReal
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
}
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
GenericFullRemote
<
ContainerClass
,
MatrixKernelClass
,
FReal
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
FP2P
::
GenericFullRemote
<
ContainerClass
,
MatrixKernelClass
,
FReal
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
}
#endif
};
#endif
#endif
}
#include "FP2PMultiRhs.hpp"
#include "FP2PMultiRhs.hpp"
#endif // FP2P_HPP
#endif // FP2P_HPP
Src/Kernels/P2P/FP2PR.hpp
View file @
1afca526
...
@@ -300,93 +300,108 @@ static void GenericFullRemote(ContainerClass* const FRestrict inTargets, Contain
...
@@ -300,93 +300,108 @@ static void GenericFullRemote(ContainerClass* const FRestrict inTargets, Contain
}
}
}
}
#ifdef ScalFMM_USE_DOUBLE_PRECISION
}
// End namespace
template
<
class
ValueClass
>
struct
FP2PRT
{
};
#if defined(ScalFMM_USE_AVX)
#if defined(ScalFMM_USE_AVX)
// AVX DOUBLE
template
<
class
ContainerClass
>
template
<
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
struct
FP2PRT
<
double
>
{
template
<
class
ContainerClass
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
const
int
limiteNeighbors
){
GenericFullMutual
<
ContainerClass
,
__m256d
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
FP2PR
::
GenericFullMutual
<
ContainerClass
,
__m256d
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
}
template
<
class
ContainerClass
>
template
<
class
ContainerClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
const
int
limiteNeighbors
){
GenericFullRemote
<
ContainerClass
,
__m256d
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
FP2PR
::
GenericFullRemote
<
ContainerClass
,
__m256d
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
}
#elif defined(ScalFMM_USE_SSE)
};
// SSE DOUBLE
template
<
class
ContainerClass
>
template
<
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
struct
FP2PRT
<
float
>
{
template
<
class
ContainerClass
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
const
int
limiteNeighbors
){
GenericFullMutual
<
ContainerClass
,
__m128d
,
2
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
FP2PR
::
GenericFullMutual
<
ContainerClass
,
__m256
,
8
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
}
template
<
class
ContainerClass
>
template
<
class
ContainerClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
const
int
limiteNeighbors
){
GenericFullRemote
<
ContainerClass
,
__m128d
,
2
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
FP2PR
::
GenericFullRemote
<
ContainerClass
,
__m256
,
8
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
}
#else
};
// SSE DOUBLE
template
<
class
ContainerClass
>
#elif defined(ScalFMM_USE_SSE)
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
template
<
>
struct
FP2PRT
<
double
>
{
template
<
class
ContainerClass
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
const
int
limiteNeighbors
){
GenericFullMutual
<
ContainerClass
,
FReal
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
FP2PR
::
GenericFullMutual
<
ContainerClass
,
__m128d
,
2
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
}
template
<
class
ContainerClass
>
template
<
class
ContainerClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
const
int
limiteNeighbors
){
GenericFullRemote
<
ContainerClass
,
FReal
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
FP2PR
::
GenericFullRemote
<
ContainerClass
,
__m128d
,
2
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
}
#endif
};
#else
#if defined(ScalFMM_USE_AVX)
template
<
>
// AVX DOUBLE
struct
FP2PRT
<
float
>
{
template
<
class
ContainerClass
>
template
<
class
ContainerClass
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
const
int
limiteNeighbors
){
GenericFullMutual
<
ContainerClass
,
__m256
,
8
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
FP2PR
::
GenericFullMutual
<
ContainerClass
,
__m128
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
}
template
<
class
ContainerClass
>
template
<
class
ContainerClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
const
int
limiteNeighbors
){
GenericFullRemote
<
ContainerClass
,
__m256
,
8
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
FP2PR
::
GenericFullRemote
<
ContainerClass
,
__m128
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
}
#elif defined(ScalFMM_USE_SSE)
};
// SSE DOUBLE
template
<
class
ContainerClass
>
#else
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
template
<
>
struct
FP2PRT
<
double
>
{
template
<
class
ContainerClass
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
const
int
limiteNeighbors
){
GenericFullMutual
<
ContainerClass
,
__m128
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
FP2PR
::
GenericFullMutual
<
ContainerClass
,
FReal
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
}
template
<
class
ContainerClass
>
template
<
class
ContainerClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
const
int
limiteNeighbors
){
GenericFullRemote
<
ContainerClass
,
__m128
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
FP2PR
::
GenericFullRemote
<
ContainerClass
,
FReal
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
}
#else
};
// SSE DOUBLE
template
<
class
ContainerClass
>
template
<
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
struct
FP2PRT
<
float
>
{
template
<
class
ContainerClass
>
static
void
FullMutual
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
const
int
limiteNeighbors
){
GenericFullMutual
<
ContainerClass
,
FReal
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
FP2PR
::
GenericFullMutual
<
ContainerClass
,
FReal
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
}
template
<
class
ContainerClass
>
template
<
class
ContainerClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
const
int
limiteNeighbors
){
GenericFullRemote
<
ContainerClass
,
FReal
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
FP2PR
::
GenericFullRemote
<
ContainerClass
,
FReal
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
}
#endif
};
#endif
#endif
}
#endif // FP2PR_HPP
#endif // FP2PR_HPP
Src/Kernels/Rotation/FRotationKernel.hpp
View file @
1afca526
...
@@ -1310,7 +1310,7 @@ public:
...
@@ -1310,7 +1310,7 @@ public:
void
P2P
(
const
FTreeCoordinate
&
/*inPosition*/
,
void
P2P
(
const
FTreeCoordinate
&
/*inPosition*/
,
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
FRestrict
/*inSources*/
,
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
FRestrict
/*inSources*/
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
/*inSize*/
){
ContainerClass
*
const
inNeighbors
[
27
],
const
int
/*inSize*/
){
FP2PR
::
FullMutual
(
inTargets
,
inNeighbors
,
14
);
FP2PRT
<
FReal
>::
FullMutual
<
ContainerClass
>
(
inTargets
,
inNeighbors
,
14
);
}
}
...
@@ -1318,7 +1318,7 @@ public:
...
@@ -1318,7 +1318,7 @@ public:
void
P2PRemote
(
const
FTreeCoordinate
&
/*inPosition*/
,
void
P2PRemote
(
const
FTreeCoordinate
&
/*inPosition*/
,
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
FRestrict
/*inSources*/
,
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
FRestrict
/*inSources*/
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
/*inSize*/
){
ContainerClass
*
const
inNeighbors
[
27
],
const
int
/*inSize*/
){
FP2PR
::
FullRemote
(
inTargets
,
inNeighbors
,
27
);
FP2PRT
<
FReal
>::
FullRemote
<
ContainerClass
>
(
inTargets
,
inNeighbors
,
27
);
}
}
};
};
...
...
Src/Kernels/Rotation/FRotationOriginalKernel.hpp
View file @
1afca526
...
@@ -800,7 +800,7 @@ public:
...
@@ -800,7 +800,7 @@ public:
void
P2P
(
const
FTreeCoordinate
&
/*inPosition*/
,
void
P2P
(
const
FTreeCoordinate
&
/*inPosition*/
,
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
FRestrict
/*inSources*/
,
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
FRestrict
/*inSources*/
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
/*inSize*/
){
ContainerClass
*
const
inNeighbors
[
27
],
const
int
/*inSize*/
){
FP2PR
::
FullMutual
(
inTargets
,
inNeighbors
,
14
);
FP2PR
T
<
FReal
>::
FullMutual
<
ContainerClass
>
(
inTargets
,
inNeighbors
,
14
);
}
}
...
@@ -808,7 +808,7 @@ public:
...
@@ -808,7 +808,7 @@ public:
void
P2PRemote
(
const
FTreeCoordinate
&
/*inPosition*/
,
void
P2PRemote
(
const
FTreeCoordinate
&
/*inPosition*/
,
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
FRestrict
/*inSources*/
,
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
FRestrict
/*inSources*/
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
/*inSize*/
){
ContainerClass
*
const
inNeighbors
[
27
],
const
int
/*inSize*/
){
FP2PR
::
FullRemote
(
inTargets
,
inNeighbors
,
27
);
FP2PR
T
<
FReal
>::
FullRemote
<
ContainerClass
>
(
inTargets
,
inNeighbors
,
27
);
}
}
};
};
...
...
Src/Kernels/Spherical/FAbstractSphericalKernel.hpp
View file @
1afca526
...
@@ -222,7 +222,7 @@ public:
...
@@ -222,7 +222,7 @@ public:
void
P2P
(
const
FTreeCoordinate
&
inLeafPosition
,
void
P2P
(
const
FTreeCoordinate
&
inLeafPosition
,
ContainerClass
*
const
FRestrict
targets
,
const
ContainerClass
*
const
FRestrict
sources
,
ContainerClass
*
const
FRestrict
targets
,
const
ContainerClass
*
const
FRestrict
sources
,
ContainerClass
*
const
directNeighborsParticles
[
27
],
const
int
/*size*/
){
ContainerClass
*
const
directNeighborsParticles
[
27
],
const
int
/*size*/
){
FP2PR
::
FullMutual
(
targets
,
directNeighborsParticles
,
14
);
FP2PR
T
<
FReal
>::
FullMutual
<
ContainerClass
>
(
targets
,
directNeighborsParticles
,
14
);
}
}
/** This P2P has to be used when target != sources
/** This P2P has to be used when target != sources
...
@@ -236,7 +236,7 @@ public:
...
@@ -236,7 +236,7 @@ public:
void
P2PRemote
(
const
FTreeCoordinate
&
,
void
P2PRemote
(
const
FTreeCoordinate
&
,
ContainerClass
*
const
FRestrict
targets
,
const
ContainerClass
*
const
FRestrict
,
ContainerClass
*
const
FRestrict
targets
,
const
ContainerClass
*
const
FRestrict
,
ContainerClass
*
const
directNeighborsParticles
[
27
],
const
int
/*size*/
){
ContainerClass
*
const
directNeighborsParticles
[
27
],
const
int
/*size*/
){
FP2PR
::
FullRemote
(
targets
,
directNeighborsParticles
,
27
);
FP2PR
T
<
FReal
>::
FullRemote
<
ContainerClass
>
(
targets
,
directNeighborsParticles
,
27
);
}
}
private:
private:
...
...
Src/Kernels/Taylor/FTaylorKernel.hpp
View file @
1afca526
...
@@ -969,14 +969,14 @@ public:
...
@@ -969,14 +969,14 @@ public:
ContainerClass
*
const
FRestrict
targets
,
const
ContainerClass
*
const
FRestrict
/*sources*/
,
ContainerClass
*
const
FRestrict
targets
,
const
ContainerClass
*
const
FRestrict
/*sources*/
,
ContainerClass
*
const
directNeighborsParticles
[
27
],
const
int
/*size*/
)
ContainerClass
*
const
directNeighborsParticles
[
27
],
const
int
/*size*/
)
{
{
FP2PR
::
FullMutual
(
targets
,
directNeighborsParticles
,
14
);
FP2PR
T
<
FReal
>::
FullMutual
<
ContainerClass
>
(
targets
,
directNeighborsParticles
,
14
);
}
}
/** Use mutual even if it not useful and call particlesMutualInteraction */
/** Use mutual even if it not useful and call particlesMutualInteraction */
void
P2PRemote
(
const
FTreeCoordinate
&
/*inPosition*/
,
void
P2PRemote
(
const
FTreeCoordinate
&
/*inPosition*/
,
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
FRestrict
/*inSources*/
,
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
FRestrict
/*inSources*/
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
/*inSize*/
){
ContainerClass
*
const
inNeighbors
[
27
],
const
int
/*inSize*/
){
FP2PR
::
FullRemote
(
inTargets
,
inNeighbors
,
27
);
FP2PR
T
<
FReal
>::
FullRemote
<
ContainerClass
>
(
inTargets
,
inNeighbors
,
27
);
}
}
};
};
...
...
Src/Kernels/Taylor/FTaylorKernelSimple.hpp
View file @
1afca526
...
@@ -20,7 +20,7 @@
...
@@ -20,7 +20,7 @@
#include "../../Utils/FMemUtils.hpp"
#include "../../Utils/FMemUtils.hpp"
#include "../../Utils/FLog.hpp"
#include "../../Utils/FLog.hpp"
#include "../P2P/FP2P.hpp"
#include "../P2P/FP2P
R
.hpp"
/**
/**
* @author Cyrille Piacibello
* @author Cyrille Piacibello
...
@@ -882,7 +882,13 @@ public:
...
@@ -882,7 +882,13 @@ public:
ContainerClass
*
const
FRestrict
targets
,
const
ContainerClass
*
const
FRestrict
/*sources*/
,
ContainerClass
*
const
FRestrict
targets
,
const
ContainerClass
*
const
FRestrict
/*sources*/
,
ContainerClass
*
const
directNeighborsParticles
[
27
],
const
int
/*size*/
)
ContainerClass
*
const
directNeighborsParticles
[
27
],
const
int
/*size*/
)
{
{
FP2P
::
FullMutual
(
targets
,
directNeighborsParticles
,
14
);
FP2PRT
<
FReal
>::
FullMutual
<
ContainerClass
>
(
targets
,
directNeighborsParticles
,
14
);
}
void
P2PRemote
(
const
FTreeCoordinate
&
/*inPosition*/
,
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
FRestrict
/*inSources*/
,
ContainerClass
*
const
inNeighbors
[
27
],
const
int
/*inSize*/
){
FP2PRT
<
FReal
>::
FullRemote
<
ContainerClass
>
(
inTargets
,
inNeighbors
,
27
);
}
}
};
};
...
...
Tests/Kernels/testP2PEfficency.cpp
View file @
1afca526
...
@@ -72,12 +72,12 @@ int main(int argc, char ** argv){
...
@@ -72,12 +72,12 @@ int main(int argc, char ** argv){
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
timer
.
tic
();
timer
.
tic
();
FP2PR
::
FullMutual
<
FP2PParticleContainer
<>>
(
&
leaf1
,
&
pleaf2
,
1
);
FP2PR
T
<
FReal
>
::
FullMutual
<
FP2PParticleContainer
<>>
(
&
leaf1
,
&
pleaf2
,
1
);
timer
.
tac
();
timer
.
tac
();
std
::
cout
<<
"Timer taken by FullMutual = "
<<
timer
.
elapsed
()
<<
"s"
<<
std
::
endl
;
std
::
cout
<<
"Timer taken by FullMutual = "
<<
timer
.
elapsed
()
<<
"s"
<<
std
::
endl
;
timer
.
tic
();
timer
.
tic
();
FP2PR
::
FullRemote
<
FP2PParticleContainer
<>>
(
&
leaf1
,
&
pleaf2
,
1
);
FP2PR
T
<
FReal
>
::
FullRemote
<
FP2PParticleContainer
<>>
(
&
leaf1
,
&
pleaf2
,
1
);
timer
.
tac
();
timer
.
tac
();
std
::
cout
<<
"Timer taken by FullRemote = "
<<
timer
.
elapsed
()
<<
"s"
<<
std
::
endl
;
std
::
cout
<<
"Timer taken by FullRemote = "
<<
timer
.
elapsed
()
<<
"s"
<<
std
::
endl
;
...
...
Tests/noDist/testP2PAvx.cpp
View file @
1afca526
...
@@ -131,11 +131,8 @@ int main(int argc, char ** argv){
...
@@ -131,11 +131,8 @@ int main(int argc, char ** argv){
//
//
// computation
// computation
//
//
#ifdef ScalFMM_USE_DOUBLE_PRECISION
printf
(
"Precision, sizeof Real %lu
\n
"
,
sizeof
(
FReal
));
printf
(
"Double precision
\n
"
);
#else
printf
(
"Simple precision
\n
"
);
#endif
#ifdef ScalFMM_USE_AVX
#ifdef ScalFMM_USE_AVX
printf
(
"AVX incomming .......
\n\n
"
);
printf
(
"AVX incomming .......
\n\n
"
);
#endif
#endif
...
@@ -158,7 +155,7 @@ int main(int argc, char ** argv){
...
@@ -158,7 +155,7 @@ int main(int argc, char ** argv){
FTreeCoordinate
coord
=
iterator
.
getCurrentGlobalCoordinate
();
FTreeCoordinate
coord
=
iterator
.
getCurrentGlobalCoordinate
();
ContainerClass
**
neighbors
=
new
ContainerClass
*
[
27
];
ContainerClass
**
neighbors
=
new
ContainerClass
*
[
27
];
tree
.
getLeafsNeighbors
(
neighbors
,
coord
,
1
);
tree
.
getLeafsNeighbors
(
neighbors
,
coord
,
1
);
FP2PR
::
FullMutual
(
iterator
.
getCurrentLeaf
()
->
getTargets
(),
neighbors
,
27
);
FP2PR
T
<
FReal
>::
FullMutual
<
ContainerClass
>
(
iterator
.
getCurrentLeaf
()
->
getTargets
(),
neighbors
,
27
);
}
while
(
iterator
.
moveRight
());
}
while
(
iterator
.
moveRight
());
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment