Skip to content
Snippets Groups Projects
Commit cda97468 authored by Matthieu Schaller's avatar Matthieu Schaller
Browse files

Compile the gravity code as a separate convenience library. Use special...

Compile the gravity code as a separate convenience library. Use special compilation flags for this library. When compiling on AVX512, add extra flags to compile the gravity files.
parent f05bd301
No related branches found
No related tags found
1 merge request!946Special flags for gravity
......@@ -451,6 +451,26 @@ if test "$enable_opt" = "yes" ; then
AX_CC_MAXOPT
ac_test_CFLAGS="yes"
detected_ax_gcc_arch=`echo $ax_gcc_arch | awk '{print $1;}'`
# Choose the best flags for the gravity sub-library on this compiler and architecture
if test "$ax_cv_c_compiler_vendor" = "intel"; then
if test "$detected_ax_gcc_arch" = "skylake-avx512"; then
GRAVITY_CFLAGS="-qopt-zmm-usage=high"
else
AC_MSG_WARN([No additional flags needed for gravity on this platform])
fi
elif test "$ax_cv_c_compiler_vendor" = "gnu"; then
if test "$detected_ax_gcc_arch" = "skylake-avx512"; then
GRAVITY_CFLAGS="-mprefer-vector-width=512"
else
AC_MSG_WARN([No additional flags needed for gravity on this platform])
fi
else
AC_MSG_WARN([Do not know what best gravity vectorization flags to choose for this compiler])
fi
AC_SUBST([GRAVITY_CFLAGS])
# Check SSE & AVX support (some overlap with AX_CC_MAXOPT).
# Don't use the SIMD_FLAGS result with Intel compilers. The -x<code>
# value from AX_CC_MAXOPT should be sufficient.
......
......@@ -19,7 +19,7 @@
AM_CFLAGS = $(HDF5_CPPFLAGS) $(GSL_INCS) $(FFTW_INCS) $(NUMA_INCS) $(GRACKLE_INCS)
# Assign a "safe" version number
AM_LDFLAGS = $(HDF5_LDFLAGS) $(FFTW_LIBS) -version-info 0:0:0
AM_LDFLAGS = $(HDF5_LDFLAGS) $(FFTW_LIBS)
# The git command, if available.
GIT_CMD = @GIT_CMD@
......@@ -31,11 +31,13 @@ EXTRA_LIBS = $(HDF5_LIBS) $(FFTW_LIBS) $(NUMA_LIBS) $(PROFILER_LIBS) $(TCMALLOC_
MPI_LIBS = $(PARMETIS_LIBS) $(METIS_LIBS) $(MPI_THREAD_LIBS)
MPI_FLAGS = -DWITH_MPI $(PARMETIS_INCS) $(METIS_INCS)
# Build the libswiftsim library
# Build the libswiftsim library and a convenience library just for the gravity tasks
lib_LTLIBRARIES = libswiftsim.la
noinst_LTLIBRARIES = libgrav.la
# Build a MPI-enabled version too?
if HAVEMPI
lib_LTLIBRARIES += libswiftsim_mpi.la
noinst_LTLIBRARIES += libgrav_mpi.la
endif
# List required headers
......@@ -70,7 +72,7 @@ EAGLE_FEEDBACK_SOURCES += feedback/EAGLE/feedback.c
endif
# Common source files
AM_SOURCES = space.c runner_main.c runner_doiact_hydro.c runner_doiact_grav.c \
AM_SOURCES = space.c runner_main.c runner_doiact_hydro.c \
runner_doiact_stars.c runner_doiact_black_holes.c runner_ghost.c runner_recv.c \
runner_sort.c runner_drift.c runner_black_holes.c runner_time_integration.c \
runner_doiact_hydro_vec.c runner_others.c\
......@@ -239,19 +241,28 @@ nobase_noinst_HEADERS = align.h approx_math.h atomic.h barrier.h cycle.h error.h
pressure_floor/GEAR/pressure_floor_struct.h pressure_floor/none/pressure_floor_struct.h
# Sources and special flags for the gravity library
libgrav_la_SOURCES = runner_doiact_grav.c
libgrav_la_CFLAGS = $(AM_CFLAGS) $(GRAVITY_CFLAGS)
libgrav_la_LDFLAGS = $(AM_LDFLAGS) $(EXTRA_LIBS)
# Sources and special flags for the gravity MPI library
libgrav_mpi_la_SOURCES = runner_doiact_grav.c
libgrav_mpi_la_CFLAGS = $(AM_CFLAGS) $(GRAVITY_CFLAGS) -DWITH_MPI
libgrav_mpi_la_LDFLAGS = $(AM_LDFLAGS) $(MPI_LIBS) $(EXTRA_LIBS)
# Sources and flags for regular library
libswiftsim_la_SOURCES = $(AM_SOURCES)
libswiftsim_la_CFLAGS = $(AM_CFLAGS)
libswiftsim_la_LDFLAGS = $(AM_LDFLAGS) $(EXTRA_LIBS)
libswiftsim_la_LIBADD = $(GRACKLE_LIBS) $(VELOCIRAPTOR_LIBS)
libswiftsim_la_LDFLAGS = $(AM_LDFLAGS) $(EXTRA_LIBS) -version-info 0:0:0
libswiftsim_la_LIBADD = $(GRACKLE_LIBS) $(VELOCIRAPTOR_LIBS) libgrav.la
# Sources and flags for MPI library
libswiftsim_mpi_la_SOURCES = $(AM_SOURCES)
libswiftsim_mpi_la_CFLAGS = $(AM_CFLAGS) $(MPI_FLAGS)
libswiftsim_mpi_la_LDFLAGS = $(AM_LDFLAGS) $(MPI_LIBS) $(EXTRA_LIBS)
libswiftsim_mpi_la_LDFLAGS = $(AM_LDFLAGS) $(MPI_LIBS) $(EXTRA_LIBS) -version-info 0:0:0
libswiftsim_mpi_la_SHORTNAME = mpi
libswiftsim_mpi_la_LIBADD = $(GRACKLE_LIBS) $(VELOCIRAPTOR_LIBS)
libswiftsim_mpi_la_LIBADD = $(GRACKLE_LIBS) $(VELOCIRAPTOR_LIBS) $(MPI_LIBS) libgrav_mpi.la
# Versioning. If any sources change then update the version_string.h file with
# the current git revision and package version.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment