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
e73463c0
Commit
e73463c0
authored
Nov 06, 2015
by
BRAMAS Berenger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
debug the tsm and modify the P2P relatively
parent
5367316b
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
143 additions
and
59 deletions
+143
-59
Src/Core/FFmmAlgorithmThreadBalance.hpp
Src/Core/FFmmAlgorithmThreadBalance.hpp
+0
-1
Src/Core/FFmmAlgorithmThreadTsm.hpp
Src/Core/FFmmAlgorithmThreadTsm.hpp
+4
-0
Src/Core/FFmmAlgorithmTsm.hpp
Src/Core/FFmmAlgorithmTsm.hpp
+4
-0
Src/Kernels/Chebyshev/FChebKernel.hpp
Src/Kernels/Chebyshev/FChebKernel.hpp
+10
-3
Src/Kernels/Chebyshev/FChebSymKernel.hpp
Src/Kernels/Chebyshev/FChebSymKernel.hpp
+10
-3
Src/Kernels/Chebyshev/FChebTensorialKernel.hpp
Src/Kernels/Chebyshev/FChebTensorialKernel.hpp
+10
-3
Src/Kernels/Interpolation/FInterpP2PKernels.hpp
Src/Kernels/Interpolation/FInterpP2PKernels.hpp
+3
-3
Src/Kernels/P2P/FP2P.hpp
Src/Kernels/P2P/FP2P.hpp
+10
-10
Src/Kernels/P2P/FP2PMultiRhs.hpp
Src/Kernels/P2P/FP2PMultiRhs.hpp
+1
-1
Src/Kernels/P2P/FP2PParticleContainer.hpp
Src/Kernels/P2P/FP2PParticleContainer.hpp
+1
-1
Src/Kernels/P2P/FP2PR.hpp
Src/Kernels/P2P/FP2PR.hpp
+9
-9
Src/Kernels/Rotation/FRotationKernel.hpp
Src/Kernels/Rotation/FRotationKernel.hpp
+10
-3
Src/Kernels/Rotation/FRotationOriginalKernel.hpp
Src/Kernels/Rotation/FRotationOriginalKernel.hpp
+10
-3
Src/Kernels/Spherical/FAbstractSphericalKernel.hpp
Src/Kernels/Spherical/FAbstractSphericalKernel.hpp
+10
-3
Src/Kernels/Taylor/FTaylorKernel.hpp
Src/Kernels/Taylor/FTaylorKernel.hpp
+10
-3
Src/Kernels/Taylor/FTaylorKernelSimple.hpp
Src/Kernels/Taylor/FTaylorKernelSimple.hpp
+10
-3
Src/Kernels/Uniform/FUnifDenseKernel.hpp
Src/Kernels/Uniform/FUnifDenseKernel.hpp
+10
-3
Src/Kernels/Uniform/FUnifKernel.hpp
Src/Kernels/Uniform/FUnifKernel.hpp
+11
-4
Src/Kernels/Uniform/FUnifTensorialKernel.hpp
Src/Kernels/Uniform/FUnifTensorialKernel.hpp
+10
-3
No files found.
Src/Core/FFmmAlgorithmThreadBalance.hpp
View file @
e73463c0
...
...
@@ -350,7 +350,6 @@ protected:
WorkloadTemp
*
workloadBuffer
=
workloadBufferThread
[
omp_get_thread_num
()];
memset
(
workloadBuffer
,
0
,
sizeof
(
struct
WorkloadTemp
)
*
leafsNumber
);
// Prepare the P2P
const
int
LeafIndex
=
OctreeHeight
-
1
;
leafsDataArray
.
reset
(
new
LeafData
[
leafsNumber
]);
// We need the offset for each color
...
...
Src/Core/FFmmAlgorithmThreadTsm.hpp
View file @
e73463c0
...
...
@@ -398,6 +398,10 @@ protected:
}
if
(
p2pEnabled
){
// need the current particles and neighbors particles
if
(
iterArray
[
idxLeafs
].
getCurrentCell
()
->
hasSrcChild
()){
myThreadkernels
->
P2P
(
iterArray
[
idxLeafs
].
getCurrentGlobalCoordinate
(),
iterArray
[
idxLeafs
].
getCurrentListTargets
(),
iterArray
[
idxLeafs
].
getCurrentListSrc
()
,
neighbors
,
neighborPositions
,
0
);
}
const
int
counter
=
tree
->
getLeafsNeighbors
(
neighbors
,
neighborPositions
,
iterArray
[
idxLeafs
].
getCurrentGlobalCoordinate
(),
heightMinusOne
);
myThreadkernels
->
P2PRemote
(
iterArray
[
idxLeafs
].
getCurrentGlobalCoordinate
(),
iterArray
[
idxLeafs
].
getCurrentListTargets
(),
iterArray
[
idxLeafs
].
getCurrentListSrc
()
,
neighbors
,
neighborPositions
,
counter
);
...
...
Src/Core/FFmmAlgorithmTsm.hpp
View file @
e73463c0
...
...
@@ -315,6 +315,10 @@ protected:
kernels
->
L2P
(
octreeIterator
.
getCurrentCell
(),
octreeIterator
.
getCurrentListTargets
());
}
if
(
p2pEnabled
){
if
(
octreeIterator
.
getCurrentCell
()
->
hasSrcChild
()){
kernels
->
P2P
(
octreeIterator
.
getCurrentGlobalCoordinate
(),
octreeIterator
.
getCurrentListTargets
(),
octreeIterator
.
getCurrentListSrc
()
,
neighbors
,
neighborPositions
,
0
);
}
// need the current particles and neighbors particles
const
int
counter
=
tree
->
getLeafsNeighbors
(
neighbors
,
neighborPositions
,
octreeIterator
.
getCurrentGlobalCoordinate
(),
heightMinusOne
);
kernels
->
P2PRemote
(
octreeIterator
.
getCurrentGlobalCoordinate
(),
octreeIterator
.
getCurrentListTargets
(),
...
...
Src/Kernels/Chebyshev/FChebKernel.hpp
View file @
e73463c0
...
...
@@ -207,11 +207,18 @@ public:
}
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
[],
const
int
neighborPositions
[],
const
int
inSize
)
override
{
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PInner
(
inTargets
,
MatrixKernel
);
if
(
inTargets
==
inSources
){
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PInner
(
inTargets
,
MatrixKernel
);
}
else
{
const
ContainerClass
*
const
srcPtr
[
1
]
=
{
inSources
};
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PRemote
(
inTargets
,
srcPtr
,
1
,
MatrixKernel
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PRemote
(
inTargets
,
inNeighbors
,
inSize
,
MatrixKernel
);
}
}
void
P2POuter
(
const
FTreeCoordinate
&
/*inLeafPosition*/
,
...
...
Src/Kernels/Chebyshev/FChebSymKernel.hpp
View file @
e73463c0
...
...
@@ -448,11 +448,18 @@ public:
}
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
[],
const
int
neighborPositions
[],
const
int
inSize
)
override
{
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PInner
(
inTargets
,
MatrixKernel
);
if
(
inTargets
==
inSources
){
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PInner
(
inTargets
,
MatrixKernel
);
}
else
{
const
ContainerClass
*
const
srcPtr
[
1
]
=
{
inSources
};
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PRemote
(
inTargets
,
srcPtr
,
1
,
MatrixKernel
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PRemote
(
inTargets
,
inNeighbors
,
inSize
,
MatrixKernel
);
}
}
void
P2POuter
(
const
FTreeCoordinate
&
/*inLeafPosition*/
,
...
...
Src/Kernels/Chebyshev/FChebTensorialKernel.hpp
View file @
e73463c0
...
...
@@ -220,11 +220,18 @@ public:
}
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
[],
const
int
neighborPositions
[],
const
int
inSize
)
override
{
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PInner
(
inTargets
,
MatrixKernel
);
if
(
inTargets
==
inSources
){
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PInner
(
inTargets
,
MatrixKernel
);
}
else
{
const
ContainerClass
*
const
srcPtr
[
1
]
=
{
inSources
};
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PRemote
(
inTargets
,
srcPtr
,
1
,
MatrixKernel
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PRemote
(
inTargets
,
inNeighbors
,
inSize
,
MatrixKernel
);
}
}
void
P2POuter
(
const
FTreeCoordinate
&
/*inLeafPosition*/
,
...
...
Src/Kernels/Interpolation/FInterpP2PKernels.hpp
View file @
e73463c0
...
...
@@ -28,7 +28,7 @@ struct DirectInteractionComputer
template
<
typename
ContainerClass
,
typename
MatrixKernelClass
>
static
void
P2PRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
ContainerClass
*
const
inNeighbors
[],
const
int
inSize
,
const
MatrixKernelClass
*
const
MatrixKernel
){
FP2P
::
FullRemoteKIJ
<
FReal
,
ContainerClass
,
MatrixKernelClass
>
(
inTargets
,
inNeighbors
,
inSize
,
MatrixKernel
);
...
...
@@ -56,7 +56,7 @@ struct DirectInteractionComputer<FReal, 1,NVALS>
template
<
typename
ContainerClass
,
typename
MatrixKernelClass
>
static
void
P2PRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
ContainerClass
*
const
inNeighbors
[],
const
int
inSize
,
const
MatrixKernelClass
*
const
MatrixKernel
){
FP2P
::
FullRemoteMultiRhs
<
FReal
,
ContainerClass
,
MatrixKernelClass
>
(
inTargets
,
inNeighbors
,
inSize
,
MatrixKernel
);
...
...
@@ -83,7 +83,7 @@ struct DirectInteractionComputer<FReal, 1,1>
template
<
typename
ContainerClass
,
typename
MatrixKernelClass
>
static
void
P2PRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
const
ContainerClass
*
const
inNeighbors
[],
const
int
inSize
,
const
MatrixKernelClass
*
const
MatrixKernel
){
FP2PT
<
FReal
>::
template
FullRemote
<
ContainerClass
,
MatrixKernelClass
>(
inTargets
,
inNeighbors
,
inSize
,
MatrixKernel
);
...
...
Src/Kernels/P2P/FP2P.hpp
View file @
e73463c0
...
...
@@ -324,7 +324,7 @@ inline void InnerKIJ(ContainerClass* const FRestrict inTargets, const MatrixKern
* @brief FullRemoteKIJ
*/
template
<
class
FReal
,
class
ContainerClass
,
typename
MatrixKernelClass
>
inline
void
FullRemoteKIJ
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
inline
void
FullRemoteKIJ
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
// get information on tensorial aspect of matrix kernel
...
...
@@ -547,7 +547,7 @@ static void GenericInner(ContainerClass* const FRestrict inTargets, const Matrix
}
template
<
class
FReal
,
class
ContainerClass
,
class
MatrixKernelClass
,
class
ComputeClass
,
int
NbFRealInComputeClass
>
static
void
GenericFullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
GenericFullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
const
FSize
nbParticlesTargets
=
inTargets
->
getNbParticles
();
const
FReal
*
const
targetsPhysicalValues
=
inTargets
->
getPhysicalValues
();
...
...
@@ -625,7 +625,7 @@ struct FP2PT<double>{
}
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
FP2P
::
GenericFullRemote
<
double
,
ContainerClass
,
MatrixKernelClass
,
__m256d
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
...
...
@@ -645,7 +645,7 @@ struct FP2PT<float>{
}
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
FP2P
::
GenericFullRemote
<
float
,
ContainerClass
,
MatrixKernelClass
,
__m256
,
8
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
...
...
@@ -665,7 +665,7 @@ struct FP2PT<double>{
}
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
FP2P
::
GenericFullRemote
<
double
,
ContainerClass
,
MatrixKernelClass
,
__m512d
,
8
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
...
...
@@ -686,7 +686,7 @@ struct FP2PT<float>{
}
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
FP2P
::
GenericFullRemote
<
float
,
ContainerClass
,
MatrixKernelClass
,
__m512
,
16
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
...
...
@@ -707,7 +707,7 @@ struct FP2PT<double>{
}
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
FP2P
::
GenericFullRemote
<
double
,
ContainerClass
,
MatrixKernelClass
,
__m128d
,
2
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
...
...
@@ -728,7 +728,7 @@ struct FP2PT<float>{
}
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
FP2P
::
GenericFullRemote
<
float
,
ContainerClass
,
MatrixKernelClass
,
__m128
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
...
...
@@ -748,7 +748,7 @@ struct FP2PT<double>{
}
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
FP2P
::
GenericFullRemote
<
double
,
ContainerClass
,
MatrixKernelClass
,
double
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
...
...
@@ -768,7 +768,7 @@ struct FP2PT<float>{
}
template
<
class
ContainerClass
,
class
MatrixKernelClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
FP2P
::
GenericFullRemote
<
float
,
ContainerClass
,
MatrixKernelClass
,
float
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
,
MatrixKernel
);
}
...
...
Src/Kernels/P2P/FP2PMultiRhs.hpp
View file @
e73463c0
...
...
@@ -140,7 +140,7 @@ namespace FP2P {
* FullRemoteMultiRhs (generic version)
*/
template
<
class
FReal
,
class
ContainerClass
,
typename
MatrixKernelClass
>
inline
void
FullRemoteMultiRhs
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
inline
void
FullRemoteMultiRhs
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
,
const
MatrixKernelClass
*
const
MatrixKernel
){
const
FSize
nbParticlesTargets
=
inTargets
->
getNbParticles
();
...
...
Src/Kernels/P2P/FP2PParticleContainer.hpp
View file @
e73463c0
...
...
@@ -42,7 +42,7 @@ public:
return
Parent
::
getRawData
()
+
((
0
+
idxRhs
)
*
NVALS
+
idxVals
)
*
Parent
::
getLeadingRawData
();
}
FSize
getLeadingDimension
(){
FSize
getLeadingDimension
()
const
{
return
Parent
::
getLeadingRawData
();
}
...
...
Src/Kernels/P2P/FP2PR.hpp
View file @
e73463c0
...
...
@@ -256,7 +256,7 @@ static void GenericInner(ContainerClass* const FRestrict inTargets){
}
template
<
class
FReal
,
class
ContainerClass
,
class
ComputeClass
,
int
NbFRealInComputeClass
>
static
void
GenericFullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
GenericFullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
const
FSize
nbParticlesTargets
=
inTargets
->
getNbParticles
();
const
FReal
*
const
targetsPhysicalValues
=
inTargets
->
getPhysicalValues
();
...
...
@@ -340,7 +340,7 @@ struct FP2PRT<double>{
}
template
<
class
ContainerClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
FP2PR
::
GenericFullRemote
<
double
,
ContainerClass
,
__m256d
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
...
...
@@ -360,7 +360,7 @@ struct FP2PRT<float>{
}
template
<
class
ContainerClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
FP2PR
::
GenericFullRemote
<
float
,
ContainerClass
,
__m256
,
8
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
...
...
@@ -380,7 +380,7 @@ struct FP2PRT<double>{
}
template
<
class
ContainerClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
FP2PR
::
GenericFullRemote
<
double
,
ContainerClass
,
__m512d
,
8
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
...
...
@@ -400,7 +400,7 @@ struct FP2PRT<float>{
}
template
<
class
ContainerClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
FP2PR
::
GenericFullRemote
<
float
,
ContainerClass
,
__m512
,
16
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
...
...
@@ -421,7 +421,7 @@ struct FP2PRT<double>{
}
template
<
class
ContainerClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
FP2PR
::
GenericFullRemote
<
double
,
ContainerClass
,
__m128d
,
2
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
...
...
@@ -441,7 +441,7 @@ struct FP2PRT<float>{
}
template
<
class
ContainerClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
FP2PR
::
GenericFullRemote
<
float
,
ContainerClass
,
__m128
,
4
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
...
...
@@ -462,7 +462,7 @@ struct FP2PRT<double>{
}
template
<
class
ContainerClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
FP2PR
::
GenericFullRemote
<
double
,
ContainerClass
,
double
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
...
...
@@ -482,7 +482,7 @@ struct FP2PRT<float>{
}
template
<
class
ContainerClass
>
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
ContainerClass
*
const
inNeighbors
[],
static
void
FullRemote
(
ContainerClass
*
const
FRestrict
inTargets
,
const
ContainerClass
*
const
inNeighbors
[],
const
int
limiteNeighbors
){
FP2PR
::
GenericFullRemote
<
float
,
ContainerClass
,
float
,
1
>
(
inTargets
,
inNeighbors
,
limiteNeighbors
);
}
...
...
Src/Kernels/Rotation/FRotationKernel.hpp
View file @
e73463c0
...
...
@@ -1355,11 +1355,18 @@ public:
* Calling this method in multi thread should be done carrefully.
*/
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
[],
const
int
neighborPositions
[],
const
int
inSize
)
override
{
FP2PRT
<
FReal
>::
template
Inner
<
ContainerClass
>(
inTargets
);
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
if
(
inTargets
==
inSources
){
FP2PRT
<
FReal
>::
template
Inner
<
ContainerClass
>(
inTargets
);
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
}
else
{
const
ContainerClass
*
const
srcPtr
[
1
]
=
{
inSources
};
FP2PRT
<
FReal
>::
template
FullRemote
<
ContainerClass
>(
inTargets
,
srcPtr
,
1
);
FP2PRT
<
FReal
>::
template
FullRemote
<
ContainerClass
>(
inTargets
,
inNeighbors
,
inSize
);
}
}
void
P2POuter
(
const
FTreeCoordinate
&
/*inLeafPosition*/
,
...
...
Src/Kernels/Rotation/FRotationOriginalKernel.hpp
View file @
e73463c0
...
...
@@ -791,11 +791,18 @@ public:
* Calling this method in multi thread should be done carrefully.
*/
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
[],
const
int
neighborPositions
[],
const
int
inSize
)
override
{
FP2PRT
<
FReal
>::
template
Inner
<
ContainerClass
>(
inTargets
);
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
if
(
inTargets
==
inSources
){
FP2PRT
<
FReal
>::
template
Inner
<
ContainerClass
>(
inTargets
);
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
}
else
{
const
ContainerClass
*
const
srcPtr
[
1
]
=
{
inSources
};
FP2PRT
<
FReal
>::
template
FullRemote
<
ContainerClass
>(
inTargets
,
srcPtr
,
1
);
FP2PRT
<
FReal
>::
template
FullRemote
<
ContainerClass
>(
inTargets
,
inNeighbors
,
inSize
);
}
}
void
P2POuter
(
const
FTreeCoordinate
&
/*inLeafPosition*/
,
...
...
Src/Kernels/Spherical/FAbstractSphericalKernel.hpp
View file @
e73463c0
...
...
@@ -218,11 +218,18 @@ public:
* Calling this method in multi thread should be done carrefully.
*/
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
[],
const
int
neighborPositions
[],
const
int
inSize
)
override
{
FP2PRT
<
FReal
>::
template
Inner
<
ContainerClass
>(
inTargets
);
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
if
(
inTargets
==
inSources
){
FP2PRT
<
FReal
>::
template
Inner
<
ContainerClass
>(
inTargets
);
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
}
else
{
const
ContainerClass
*
const
srcPtr
[
1
]
=
{
inSources
};
FP2PRT
<
FReal
>::
template
FullRemote
<
ContainerClass
>(
inTargets
,
srcPtr
,
1
);
FP2PRT
<
FReal
>::
template
FullRemote
<
ContainerClass
>(
inTargets
,
inNeighbors
,
inSize
);
}
}
void
P2POuter
(
const
FTreeCoordinate
&
/*inLeafPosition*/
,
...
...
Src/Kernels/Taylor/FTaylorKernel.hpp
View file @
e73463c0
...
...
@@ -958,11 +958,18 @@ public:
* Calling this method in multi thread should be done carrefully.
*/
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
[],
const
int
neighborPositions
[],
const
int
inSize
)
override
{
FP2PRT
<
FReal
>::
template
Inner
<
ContainerClass
>(
inTargets
);
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
if
(
inTargets
==
inSources
){
FP2PRT
<
FReal
>::
template
Inner
<
ContainerClass
>(
inTargets
);
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
}
else
{
const
ContainerClass
*
const
srcPtr
[
1
]
=
{
inSources
};
FP2PRT
<
FReal
>::
template
FullRemote
<
ContainerClass
>(
inTargets
,
srcPtr
,
1
);
FP2PRT
<
FReal
>::
template
FullRemote
<
ContainerClass
>(
inTargets
,
inNeighbors
,
inSize
);
}
}
void
P2POuter
(
const
FTreeCoordinate
&
/*inLeafPosition*/
,
...
...
Src/Kernels/Taylor/FTaylorKernelSimple.hpp
View file @
e73463c0
...
...
@@ -868,11 +868,18 @@ public:
* Calling this method in multi thread should be done carrefully.
*/
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
[],
const
int
neighborPositions
[],
const
int
inSize
)
override
{
FP2PRT
<
FReal
>::
template
Inner
<
ContainerClass
>(
inTargets
);
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
if
(
inTargets
==
inSources
){
FP2PRT
<
FReal
>::
template
Inner
<
ContainerClass
>(
inTargets
);
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
}
else
{
const
ContainerClass
*
const
srcPtr
[
1
]
=
{
inSources
};
FP2PRT
<
FReal
>::
template
FullRemote
<
ContainerClass
>(
inTargets
,
srcPtr
,
1
);
FP2PRT
<
FReal
>::
template
FullRemote
<
ContainerClass
>(
inTargets
,
inNeighbors
,
inSize
);
}
}
void
P2POuter
(
const
FTreeCoordinate
&
/*inLeafPosition*/
,
...
...
Src/Kernels/Uniform/FUnifDenseKernel.hpp
View file @
e73463c0
...
...
@@ -163,11 +163,18 @@ public:
}
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
[],
const
int
neighborPositions
[],
const
int
inSize
)
override
{
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PInner
(
inTargets
,
MatrixKernel
);
if
(
inTargets
==
inSources
){
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PInner
(
inTargets
,
MatrixKernel
);
}
else
{
const
ContainerClass
*
const
srcPtr
[
1
]
=
{
inSources
};
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PRemote
(
inTargets
,
srcPtr
,
1
,
MatrixKernel
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PRemote
(
inTargets
,
inNeighbors
,
inSize
,
MatrixKernel
);
}
}
void
P2POuter
(
const
FTreeCoordinate
&
/*inLeafPosition*/
,
...
...
Src/Kernels/Uniform/FUnifKernel.hpp
View file @
e73463c0
...
...
@@ -189,13 +189,20 @@ public:
}
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
[],
const
int
neighborPositions
[],
const
int
inSize
)
override
{
// Standard FMM separation criterion, i.e. max 27 neighbor clusters per leaf
if
(
LeafLevelSeparationCriterion
==
1
)
{
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PInner
(
inTargets
,
MatrixKernel
);
if
(
LeafLevelSeparationCriterion
==
1
)
{
if
(
inTargets
==
inSources
){
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PInner
(
inTargets
,
MatrixKernel
);
}
else
{
const
ContainerClass
*
const
srcPtr
[
1
]
=
{
inSources
};
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PRemote
(
inTargets
,
srcPtr
,
1
,
MatrixKernel
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PRemote
(
inTargets
,
inNeighbors
,
inSize
,
MatrixKernel
);
}
}
// Nearfield interactions are only computed within the target leaf
else
if
(
LeafLevelSeparationCriterion
==
0
){
...
...
Src/Kernels/Uniform/FUnifTensorialKernel.hpp
View file @
e73463c0
...
...
@@ -251,11 +251,18 @@ public:
}
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
[],
const
int
neighborPositions
[],
const
int
inSize
)
override
{
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PInner
(
inTargets
,
MatrixKernel
);
if
(
inTargets
==
inSources
){
P2POuter
(
inPosition
,
inTargets
,
inNeighbors
,
neighborPositions
,
inSize
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PInner
(
inTargets
,
MatrixKernel
);
}
else
{
const
ContainerClass
*
const
srcPtr
[
1
]
=
{
inSources
};
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PRemote
(
inTargets
,
srcPtr
,
1
,
MatrixKernel
);
DirectInteractionComputer
<
FReal
,
MatrixKernelClass
::
NCMP
,
NVALS
>::
P2PRemote
(
inTargets
,
inNeighbors
,
inSize
,
MatrixKernel
);
}
}
void
P2POuter
(
const
FTreeCoordinate
&
/*inLeafPosition*/
,
...
...
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