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
b38c4c31
Commit
b38c4c31
authored
Jan 05, 2016
by
BRAMAS Berenger
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
git+ssh://scm.gforge.inria.fr//gitroot//scalfmm/scalfmm
parents
0c1ed390
38808150
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
340 additions
and
285 deletions
+340
-285
CMakeLists.txt
CMakeLists.txt
+1
-0
CMakeModules/morse/find/FindFFTW.cmake
CMakeModules/morse/find/FindFFTW.cmake
+317
-274
Src/GroupTree/Core/FGroupTaskDepAlgorithm.hpp
Src/GroupTree/Core/FGroupTaskDepAlgorithm.hpp
+16
-11
Src/ScalFmmConfig.h.cmake
Src/ScalFmmConfig.h.cmake
+6
-0
No files found.
CMakeLists.txt
View file @
b38c4c31
...
...
@@ -93,6 +93,7 @@ if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/morse/
# OPENMP 4/5 support
option
(
OPENMP_SUPPORT_COMMUTE
"Set to ON to let tasks commute (KSTAR/StarPU compiler only)"
OFF
)
option
(
OPENMP_SUPPORT_PRIORITY
"Set to ON to enable tasks priority (KSTAR/StarPU compiler only)"
OFF
)
option
(
OPENMP_SUPPORT_TASK_NAME
"Set to ON to enable a taskname clause for tasks (KSTAR/StarPU compiler only)"
OFF
)
option
(
SCALFMM_DISABLE_NATIVE_OMP4
"Set to ON to disable the gcc/intel omp4"
OFF
)
option
(
SCALFMM_TIME_OMPTASKS
"Set to ON to time omp4 tasks and generate output file"
OFF
)
# STARPU options
...
...
CMakeModules/morse/find/FindFFTW.cmake
View file @
b38c4c31
This diff is collapsed.
Click to expand it.
Src/GroupTree/Core/FGroupTaskDepAlgorithm.hpp
View file @
b38c4c31
...
...
@@ -15,7 +15,6 @@
#include "FOutOfBlockInteraction.hpp"
#include <vector>
#include <vector>
#include <omp.h>
...
...
@@ -37,6 +36,12 @@
#define priority_if_supported(x)
#endif
#undef taskname_if_supported
#ifdef OPENMP_SUPPORT_TASK_NAME
#define taskname_if_supported(n) taskname(n)
#else
#define taskname_if_supported(n)
#endif
template
<
class
OctreeClass
,
class
CellContainerClass
,
class
CellClass
,
...
...
@@ -372,7 +377,7 @@ protected:
ParticleGroupClass
*
containers
=
tree
->
getParticleGroup
(
idxGroup
);
#pragma omp task default(shared) firstprivate(leafCells, cellPoles, containers) depend(inout: cellPoles[0]) priority_if_supported(priorities.getInsertionPosP2M())
#pragma omp task default(shared) firstprivate(leafCells, cellPoles, containers) depend(inout: cellPoles[0]) priority_if_supported(priorities.getInsertionPosP2M())
taskname_if_supported("P2M")
{
FTIME_TASKS
(
FTaskTimer
::
ScopeEvent
taskTime
(
omp_get_thread_num
(),
&
taskTimeRecorder
,
leafCells
->
getStartingIndex
()
*
20
*
8
,
"P2M"
));
KernelClass
*
const
kernel
=
kernels
[
omp_get_thread_num
()];
...
...
@@ -417,7 +422,7 @@ protected:
subCellGroup
=
(
*
iterChildCells
);
subCellGroupPoles
=
(
*
iterChildCells
)
->
getRawMultipoleBuffer
();
#pragma omp task default(none) firstprivate(idxLevel, currentCells, cellPoles, subCellGroup, subCellGroupPoles) depend(commute_if_supported: cellPoles[0]) depend(in: subCellGroupPoles[0])
priority_if_supported(priorities.getInsertionPosM2M(idxLevel)
)
#pragma omp task default(none) firstprivate(idxLevel, currentCells, cellPoles, subCellGroup, subCellGroupPoles) depend(commute_if_supported: cellPoles[0]) depend(in: subCellGroupPoles[0])
priority_if_supported(priorities.getInsertionPosM2M(idxLevel)) taskname_if_supported("M2M"
)
{
KernelClass
*
const
kernel
=
kernels
[
omp_get_thread_num
()];
const
MortonIndex
firstParent
=
FMath
::
Max
(
currentCells
->
getStartingIndex
(),
subCellGroup
->
getStartingIndex
()
>>
3
);
...
...
@@ -492,7 +497,7 @@ protected:
PoleCellClass
*
cellPoles
=
currentCells
->
getRawMultipoleBuffer
();
LocalCellClass
*
cellLocals
=
currentCells
->
getRawLocalBuffer
();
#pragma omp task default(none) firstprivate(currentCells, cellPoles, cellLocals, idxLevel) depend(commute_if_supported: cellLocals[0]) depend(in: cellPoles[0]) priority_if_supported(priorities.getInsertionPosM2L(idxLevel))
#pragma omp task default(none) firstprivate(currentCells, cellPoles, cellLocals, idxLevel) depend(commute_if_supported: cellLocals[0]) depend(in: cellPoles[0]) priority_if_supported(priorities.getInsertionPosM2L(idxLevel))
taskname_if_supported("M2L")
{
FTIME_TASKS
(
FTaskTimer
::
ScopeEvent
taskTime
(
omp_get_thread_num
(),
&
taskTimeRecorder
,
((
currentCells
->
getStartingIndex
()
*
20
)
+
idxLevel
)
*
8
+
2
,
"M2L"
));
const
MortonIndex
blockStartIdx
=
currentCells
->
getStartingIndex
();
...
...
@@ -555,7 +560,7 @@ protected:
LocalCellClass
*
cellOtherLocals
=
cellsOther
->
getRawLocalBuffer
();
const
std
::
vector
<
OutOfBlockInteraction
>*
outsideInteractions
=
&
(
*
currentInteractions
).
interactions
;
#pragma omp task default(none) firstprivate(currentCells, cellLocals, outsideInteractions, cellsOther, cellOtherPoles, idxLevel) depend(commute_if_supported: cellLocals[0]) depend(in: cellOtherPoles[0]) priority_if_supported(priorities.getInsertionPosM2LExtern(idxLevel))
#pragma omp task default(none) firstprivate(currentCells, cellLocals, outsideInteractions, cellsOther, cellOtherPoles, idxLevel) depend(commute_if_supported: cellLocals[0]) depend(in: cellOtherPoles[0]) priority_if_supported(priorities.getInsertionPosM2LExtern(idxLevel))
taskname_if_supported("M2L-out")
{
FTIME_TASKS
(
FTaskTimer
::
ScopeEvent
taskTime
(
omp_get_thread_num
(),
&
taskTimeRecorder
,
(((
currentCells
->
getStartingIndex
()
+
1
)
*
(
cellsOther
->
getStartingIndex
()
+
2
))
*
20
+
idxLevel
)
*
8
+
3
,
"M2L-ext"
));
KernelClass
*
const
kernel
=
kernels
[
omp_get_thread_num
()];
...
...
@@ -571,7 +576,7 @@ protected:
}
}
#pragma omp task default(none) firstprivate(currentCells, cellPoles, outsideInteractions, cellsOther, cellOtherLocals, idxLevel) depend(commute_if_supported: cellOtherLocals[0]) depend(in: cellPoles[0]) priority_if_supported(priorities.getInsertionPosM2LExtern(idxLevel))
#pragma omp task default(none) firstprivate(currentCells, cellPoles, outsideInteractions, cellsOther, cellOtherLocals, idxLevel) depend(commute_if_supported: cellOtherLocals[0]) depend(in: cellPoles[0]) priority_if_supported(priorities.getInsertionPosM2LExtern(idxLevel))
taskname_if_supported("M2L-out")
{
FTIME_TASKS
(
FTaskTimer
::
ScopeEvent
taskTime
(
omp_get_thread_num
(),
&
taskTimeRecorder
,
(((
currentCells
->
getStartingIndex
()
+
1
)
*
(
cellsOther
->
getStartingIndex
()
+
1
))
*
20
+
idxLevel
)
*
8
+
3
,
"M2L-ext"
));
KernelClass
*
const
kernel
=
kernels
[
omp_get_thread_num
()];
...
...
@@ -631,7 +636,7 @@ protected:
subCellLocalGroupsLocal
=
(
*
iterChildCells
)
->
getRawLocalBuffer
();
if
(
noCommuteAtLastLevel
==
false
||
idxLevel
!=
FAbstractAlgorithm
::
lowerWorkingLevel
-
2
){
#pragma omp task default(none) firstprivate(idxLevel, currentCells, cellLocals, subCellGroup, subCellLocalGroupsLocal) depend(commute_if_supported: subCellLocalGroupsLocal[0]) depend(in: cellLocals[0]) priority_if_supported(priorities.getInsertionPosL2L(idxLevel))
#pragma omp task default(none) firstprivate(idxLevel, currentCells, cellLocals, subCellGroup, subCellLocalGroupsLocal) depend(commute_if_supported: subCellLocalGroupsLocal[0]) depend(in: cellLocals[0]) priority_if_supported(priorities.getInsertionPosL2L(idxLevel))
taskname_if_supported("L2L")
{
KernelClass
*
const
kernel
=
kernels
[
omp_get_thread_num
()];
...
...
@@ -674,7 +679,7 @@ protected:
}
}
else
{
#pragma omp task default(none) firstprivate(idxLevel, currentCells, cellLocals, subCellGroup, subCellLocalGroupsLocal) depend(inout: subCellLocalGroupsLocal[0]) depend(in: cellLocals[0]) priority_if_supported(priorities.getInsertionPosL2L(idxLevel))
#pragma omp task default(none) firstprivate(idxLevel, currentCells, cellLocals, subCellGroup, subCellLocalGroupsLocal) depend(inout: subCellLocalGroupsLocal[0]) depend(in: cellLocals[0]) priority_if_supported(priorities.getInsertionPosL2L(idxLevel))
taskname_if_supported("L2L")
{
KernelClass
*
const
kernel
=
kernels
[
omp_get_thread_num
()];
...
...
@@ -760,7 +765,7 @@ protected:
unsigned
char
*
containersOtherDown
=
containersOther
->
getRawAttributesBuffer
();
const
std
::
vector
<
OutOfBlockInteraction
>*
outsideInteractions
=
&
(
*
currentInteractions
).
interactions
;
#pragma omp task default(none) firstprivate(containers, containersDown, containersOther, containersOtherDown, outsideInteractions) depend(commute_if_supported: containersOtherDown[0], containersDown[0]) priority_if_supported(priorities.getInsertionPosP2PExtern())
#pragma omp task default(none) firstprivate(containers, containersDown, containersOther, containersOtherDown, outsideInteractions) depend(commute_if_supported: containersOtherDown[0], containersDown[0]) priority_if_supported(priorities.getInsertionPosP2PExtern())
taskname_if_supported("P2P-out")
{
FTIME_TASKS
(
FTaskTimer
::
ScopeEvent
taskTime
(
omp_get_thread_num
(),
&
taskTimeRecorder
,
((
containersOther
->
getStartingIndex
()
+
1
)
*
(
containers
->
getStartingIndex
()
+
1
))
*
20
*
8
+
6
,
"P2P-ext"
));
KernelClass
*
const
kernel
=
kernels
[
omp_get_thread_num
()];
...
...
@@ -798,7 +803,7 @@ protected:
ParticleGroupClass
*
containers
=
(
*
iterParticles
);
unsigned
char
*
containersDown
=
containers
->
getRawAttributesBuffer
();
#pragma omp task default(none) firstprivate(containers, containersDown) depend(commute_if_supported: containersDown[0]) priority_if_supported(priorities.getInsertionPosP2P())
#pragma omp task default(none) firstprivate(containers, containersDown) depend(commute_if_supported: containersDown[0]) priority_if_supported(priorities.getInsertionPosP2P())
taskname_if_supported("P2P")
{
FTIME_TASKS
(
FTaskTimer
::
ScopeEvent
taskTime
(
omp_get_thread_num
(),
&
taskTimeRecorder
,
containers
->
getStartingIndex
()
*
20
*
8
+
5
,
"P2P"
));
const
MortonIndex
blockStartIdx
=
containers
->
getStartingIndex
();
...
...
@@ -853,7 +858,7 @@ protected:
ParticleGroupClass
*
containers
=
tree
->
getParticleGroup
(
idxGroup
);
unsigned
char
*
containersDown
=
containers
->
getRawAttributesBuffer
();
#pragma omp task default(shared) firstprivate(leafCells, cellLocals, containers, containersDown) depend(commute_if_supported: containersDown[0]) depend(in: cellLocals[0]) priority_if_supported(priorities.getInsertionPosL2P())
#pragma omp task default(shared) firstprivate(leafCells, cellLocals, containers, containersDown) depend(commute_if_supported: containersDown[0]) depend(in: cellLocals[0]) priority_if_supported(priorities.getInsertionPosL2P())
taskname_if_supported("L2P")
{
FTIME_TASKS
(
FTaskTimer
::
ScopeEvent
taskTime
(
omp_get_thread_num
(),
&
taskTimeRecorder
,
(
leafCells
->
getStartingIndex
()
*
20
*
8
)
+
7
,
"L2P"
));
KernelClass
*
const
kernel
=
kernels
[
omp_get_thread_num
()];
...
...
Src/ScalFmmConfig.h.cmake
View file @
b38c4c31
...
...
@@ -131,6 +131,12 @@ const std::string SCALFMMCompileLibs("@SCALFMM_COMPILE_LIBS@");
#cmakedefine OPENMP_SUPPORT_PRIORITY
///////////////////////////////////////////////////////
// To use a taskname clause for tasks with KSTAR OMP4
///////////////////////////////////////////////////////
#cmakedefine OPENMP_SUPPORT_TASK_NAME
///////////////////////////////////////////////////////
// To record omp4 task times for statistics
///////////////////////////////////////////////////////
...
...
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