rename and document script to automatically convert 'default(none)' to 'default(shared)' OpenMP pragmas

This commit is contained in:
Axel Kohlmeyer 2019-02-12 09:44:19 -05:00
parent ac7d74f2a5
commit eb8a6512e2
4 changed files with 27 additions and 9 deletions

View File

@ -116,6 +116,18 @@ enables OpenMP. For GNU compilers it is -fopenmp. For (recent) Intel
compilers it is -qopenmp. If you are using a different compiler,
please refer to its documentation.
[OpenMP Compiler compatibility info]: :link(default-none-issues)
Some compilers do not fully support the 'default(none)' directive
and others (e.g. GCC version 9 and beyond) may implement OpenMP 4.0
semantics, which are incompatible with the OpenMP 3.1 directives used
in LAMMPS (for maximal compatibility with compiler versions in use).
In those case, all 'default(none)' directives (which aid in detecting
incorrect and unwanted sharing) can be replaced with 'default(shared)'
while dropping all 'shared()' directives. The script
'src/USER-OMP/hack_openmp_for_pgi_gcc9.sh' can be used to automate
this conversion.
:line
Choice of compiler and compile/link options :h4,link(compile)

View File

@ -932,7 +932,9 @@ LINKFLAGS: -fopenmp # for GNU Compilers
LINKFLAGS: -qopenmp # for Intel compilers on Linux :pre
For other platforms and compilers, please consult the documentation
about OpenMP support for your compiler.
about OpenMP support for your compiler. Please see the note about
how to address compatibility "issues with the 'default(none)'
directive"_Build_basics.html#default-none-issues of some compilers.
:line

View File

@ -1,8 +0,0 @@
#!/bin/sh
for f in *.h *.cpp
do \
sed -e '/#pragma omp/s/^\(.*default\)(none)\(.*\)$/\1(shared)\2/' \
-e '/#pragma omp/s/shared([a-z0-9,_]\+)//' \
-i.bak $f
done

View File

@ -0,0 +1,12 @@
#!/bin/sh
# convert default(none) directives for OpenMP pragmas to default(shared) and remove shared() directive
# this allows compiling OpenMP pragmas in LAMMPS with compilers that don't support default(none) properly
# or require backward incompatible OpenMP 4 and OpenMP 5 semantics
for f in *.h *.cpp
do \
sed -e '/#pragma omp/s/^\(.*default\)(none)\(.*\)$/\1(shared)\2/' \
-e '/#pragma omp/s/shared([a-z0-9,_]\+)//' \
-i.bak $f
done