Commit 41342036 authored by Andreas Marek's avatar Andreas Marek

Merge branch 'master_pre_stage'

parents 9beca25f 5cab7d71
This diff is collapsed.
Changelog for upcoming release
- user can define the default kernels
- simple block4 and block6 real kernel
- not yet decided
Changelog for ELPA 2019.05.001.rc1
- elpa_print_kernels supports GPU usage
- fix an error if PAPI measurements are activated
- new simple real kernels: block4 and block6
- c functions can be build with optional arguments if compiler supports it
(configure option)
- allow measurements with the likwid tool
- users can define the default-kernel at build time
- ELPA versioning number is provided in the C header files
- as announced a year ago, the following deprecated routines have been finally
removed; see DEPRECATED_FEATURES for the replacement routines , which have
been introduced a year ago. Removed routines:
-> mult_at_b_real
-> mult_ah_b_complex
-> invert_trm_real
-> invert_trm_complex
-> cholesky_real
-> cholesky_complex
-> solve_tridi
Changelog for ELPA 2018.11.001
......
......@@ -26,16 +26,17 @@ have been replaced by new names. The old interfaces will be removed
| get_elpa_communicators | elpa_get_communicators | (removed since 2017.11.001) |
| solve_evp_real | elpa_solve_evp_real_1stage_double | (removed since 2017.11.001) |
| solve_evp_complex | elpa_solve_evp_complex_1stage_double | (removed since 2017.11.001) |
| solve_evp_real_1stage | elpa_solve_evp_real_1stage_double | will be removed 2018.11.001 |
| solve_evp_complex_1stage | elpa_solve_evp_complex_1stage_double | will be removed 2018.11.001 |
| solve_evp_real_2stage | elpa_solve_evp_real_2stage_double | will be removed 2018.11.001 |
| solve_evp_complex_2stage | elpa_solve_evp_complex_2stage_double | will be removed 2018.11.001 |
| mult_at_b_real | elpa_mult_at_b_real_double | will be removed 2018.11.001 |
| mult_ah_b_complex | elpa_mult_ah_b_complex_double | will be removed 2018.11.001 |
| invert_trm_real | elpa_invert_trm_real_double | will be removed 2018.11.001 |
| invert_trm_complex | elpa_invert_trm_complex_double | will be removed 2018.11.001 |
| cholesky_real | elpa_cholesky_real_double | will be removed 2018.11.001 |
| cholesky_complex | elpa_cholesky_complex_double | will be removed 2018.11.001 |
| solve_evp_real_1stage | elpa_solve_evp_real_1stage_double | (removed since 2019.05.001) |
| solve_evp_complex_1stage | elpa_solve_evp_complex_1stage_double | (removed since 2019.05.001) |
| solve_evp_real_2stage | elpa_solve_evp_real_2stage_double | (removed since 2019.05.001) |
| solve_evp_complex_2stage | elpa_solve_evp_complex_2stage_double | (removed since 2019.05.001) |
| mult_at_b_real | elpa_mult_at_b_real_double | (removed since 2019.05.001) |
| mult_ah_b_complex | elpa_mult_ah_b_complex_double | (removed since 2019.05.001) |
| invert_trm_real | elpa_invert_trm_real_double | (removed since 2019.05.001) |
| invert_trm_complex | elpa_invert_trm_complex_double | (removed since 2019.05.001) |
| cholesky_real | elpa_cholesky_real_double | (removed since 2019.05.001) |
| cholesky_complex | elpa_cholesky_complex_double | (removed since 2019.05.001) |
| solve_tridi | elpa_solve_tridi_double | (removed since 2019.05.001) |
For all symbols also the corresponding "_single" routines are available
......
......@@ -2,7 +2,7 @@
## Preamble ##
This file provides documentation on how to build the *ELPA* library in **version ELPA-2018.11.001**.
This file provides documentation on how to build the *ELPA* library in **version ELPA-2019.05.001.rc1**.
With release of **version ELPA-2017.05.001** the build process has been significantly simplified,
which makes it easier to install the *ELPA* library.
......@@ -10,13 +10,13 @@ The old, obsolete legacy API will be deprecated in the future !
Allready now, all new features of ELPA are only available with the new API. Thus, there
is no reason to keep the legacy API arround for too long.
The release ELPA 2018.11.001 will be the last release, where the legacy API is
The release ELPA 2018.11.001 was the last release, where the legacy API has been
enabled by default (and can be disabled at build time).
With release ELPA 2019.05.001 the legacy API will be disabled by default, however,
With release ELPA 2019.05.001 the legacy API is disabled by default, however,
can be still switched on at build time.
Most likely with the release ELPA 2019.11.001 the legacy API will be deprecated and not supported anymore.
The release of ELPA 2018.11.001 changes the ABI and API, since more functions have an error argument. In C this error argument is required, in Fortran it is optional.
The release of ELPA 2019.05.001.rc1 changes the ABI and API, since it allows to also build the C-functions with optional error arguments
## How to install *ELPA* ##
......@@ -49,7 +49,8 @@ An excerpt of the most important (*ELPA* specific) options reads as follows:
| configure option | description |
|:------------------------------------ |:----------------------------------------------------- |
| --disable-legacy | do not build legacy API, will be build as default |
| --enable-legacy-interface | build legacy API, will not be build as default |
| --enable-optional-argument-in-C-API | treat error arguments in C-API as optional |
| --enable-openmp | use OpenMP threading, default no. |
| --enable-redirect | for ELPA test programs, allow redirection of <br> stdout/stderr per MPI taks in a file <br> (useful for timing), default no. |
| --enable-single-precision | build with single precision version |
......@@ -57,6 +58,7 @@ An excerpt of the most important (*ELPA* specific) options reads as follows:
| --disable-band-to-full-blocking | build ELPA2 with blocking in band_to_full <br> (default:enabled) |
| --disable-mpi-module | do not use the Fortran MPI module, <br> get interfaces by 'include "mpif.h') |
| --disable-generic | do not build GENERIC kernels, default: enabled |
| --enable-sparc64 | do not build SPARC64 kernels, default: disabled |
| --disable-sse | do not build SSE kernels, default: enabled |
| --disable-sse-assembly | do not build SSE_ASSEMBLY kernels, default: enabled |
| --disable-avx | do not build AVX kernels, default: enabled |
......@@ -72,14 +74,17 @@ An excerpt of the most important (*ELPA* specific) options reads as follows:
| --with-fixed-real-kernel=KERNEL | compile with only a single specific real kernel. |
| --with-fixed-complex-kernel=KERNEL | compile with only a single specific complex kernel. |
| --with-gpu-support-only | Compile and always use the GPU version |
| --with-likwid=[yes|no|PATH] | use the likwid tool to measure performance (has an performance impact!), default: no |
| --with-default-real-kernel=KERNEL | set the real kernel KERNEL as default |
| --with-default-complex-kernel=KERNEL| set the compplex kernel KERNEL as default |
| --enable-scalapack-tests | build SCALAPACK test cases for performance <br> omparison, needs MPI, default no. |
| --enable-autotuning | enables autotuning functionality, default yes |
| --enable-c-tests | enables the C tests for elpa, default yes |
| --disable-assumed-size | do NOT use assumed-size Fortran arrays. default use |
| --enable-scalapack-tests | build also ScalaPack tests for performance comparison; needs MPI |
| --disable-Fortran2008-features | disable Fortran 2008 if compiler does not support it |
| --enable-pyhton | build and install python wrapper, default no |
| --enable-python-tests | enable python tests, default no. |
| --disable-assumed-size | do NOT use assumed-size Fortran arrays. default use |
| --enable-scalapack-tests | build also ScalaPack tests for performance comparison; needs MPI |
| --disable-Fortran2008-features | disable Fortran 2008 if compiler does not support it |
| --enable-pyhton | build and install python wrapper, default no |
| --enable-python-tests | enable python tests, default no. |
We recommend that you do not build ELPA in its main directory but that you use it
......
......@@ -3,6 +3,9 @@
For more details and recent updates please visit the online [issue system] (https://gitlab.mpcdf.mpg.de/elpa/elpa/issues)
Issues which are not mentioned in a newer release are (considered as) solved.
### ELPA 2019.11.001.rc1 release ###
- same issues as in ELPA 2017.11.001
### ELPA 2018.11.001 release ###
- same issues as in ELPA 2017.11.001
......
......@@ -40,6 +40,7 @@ libelpa@SUFFIX@_private_la_SOURCES = \
src/helpers/mod_precision.F90 \
src/helpers/mod_mpi.F90 \
src/helpers/mod_mpi_stubs.F90 \
src/helpers/mod_omp.F90 \
src/elpa_generated_fortran_interfaces.F90 \
src/elpa2/mod_redist_band.F90 \
src/elpa2/mod_pack_unpack_cpu.F90 \
......@@ -454,6 +455,7 @@ nobase_nodist_elpa_include_HEADERS = \
elpa/elpa_version.h \
elpa/elpa_constants.h \
elpa/elpa_generated.h \
elpa/elpa_generated_c_api.h \
elpa/elpa_generated_legacy.h
dist_man_MANS = \
......@@ -685,7 +687,8 @@ test_python.sh:
include doxygen.am
CLEANFILES = \
elpa-generated.h \
elpa_generated.h \
elpa_generated_c_api.h \
elpa1_test* \
elpa2_test*\
elpa2_real* \
......@@ -717,16 +720,14 @@ clean-local:
-rm -rf $(generated_headers)
distclean-local:
-rm -rf ./m4
-rm -rf ./src
-rm -rf ./test
-rm -rf ./modules
-rm -rf .fortran_dependencies
-rm config-f90.h
-rm -rf ./src/elpa2/kernels/.deps
-rm -rf ./src/.deps
-rm -rf ./test/.deps
-rmdir ./src/elpa2/kernels/
-rmdir ./src
-rmdir ./test
-rmdir ./m4
-rmdir modules/
-rmdir .fortran_dependencies/
-rm -rf elpa/elpa_generated_c_api.h
EXTRA_DIST = \
elpa.spec \
......
......@@ -2,22 +2,20 @@
## Current Release ##
The current release is ELPA 2018.11.001 The current supported API version
is 20181113. This release supports the earliest API version 20170403.
The current release is ELPA 2019.05.001.rc1 The current supported API version
is 20190501. This release supports the earliest API version 20170403.
The old, obsolete legacy API will be deprecated in the future !
Allready now, all new features of ELPA are only available with the new API. Thus, there
is no reason to keep the legacy API arround for too long.
The release ELPA 2018.11.001 will be the last release, where the legacy API is
The release ELPA 2018.11.001 was the last release, where the legacy API has been
enabled by default (and can be disabled at build time).
With release ELPA 2019.05.001 the legacy API will be disabled by default, however,
With release ELPA 2019.05.001 the legacy API is disabled by default, however,
can be still switched on at build time.
Most likely with the release ELPA 2019.11.001 the legacy API will be deprecated and
not supported anymore.
Note that the release ELPA 2018.11.001 introduces error codes to all functions, and thus an ABI and API change was neccessary
[![Build
status](https://gitlab.mpcdf.mpg.de/elpa/elpa/badges/master/build.svg)](https://gitlab.mpcdf.mpg.de/elpa/elpa/commits/master)
......@@ -117,7 +115,7 @@ the possible configure options.
## Using *ELPA*
Please have a look at the "**USERS_GUIDE**" file, to get a documentation or at the [online]
(http://elpa.mpcdf.mpg.de/html/Documentation/ELPA-2018.11.001/html/index.html) doxygen
(http://elpa.mpcdf.mpg.de/html/Documentation/ELPA-2019.05.001.rc1/html/index.html) doxygen
documentation, where you find the definition of the interfaces.
## Contributing to *ELPA*
......
This file contains the release notes for the ELPA 2018.11.001 version
This file contains the release notes for the ELPA 2019.05.001.rc1 version
What is new?
-------------
For detailed information about changes since release ELPA 2018.05 please have a look at the Changelog file
For detailed information about changes since release ELPA 2018.11 please have a look at the Changelog file
- improved autotuning
- improved performance of generalized problem via Cannon's algorithm
- check pointing functionality of elpa objects
- store/read/resume of autotuning
- Python interface for ELPA
- more ELPA functions have an optional error argument (Fortran) or required
error argument (C) => ABI and API change
- user can define a default kernel at build time
- ELPA VERSION number is exported to the C-header
- C functions can have an optional error argument, if compiler supports this
=> ABI and API change
- as anounced, removal of deprecated routines
ABI change
---------------------
Since release 2018.05.001 the ABI has changed.
Since release 2018.10.001 the ABI has changed.
Any incompatibilities to previous version?
---------------------------------------
For Fortran:
Break of ABI compatibility, since all functions obtained an optional, integer
argument of the error code.
Break of ABI compatibility, since all routines announced as deperecated have been removed
For C:
Break of ABI and API compatibility, since all functions obtained a required int* argument of the error code.
......@@ -146,7 +146,7 @@ Local documentation (via man pages) should be available (if *ELPA* has been inst
For example "man elpa2_print_kernels" should provide the documentation for the *ELPA* program which prints all
the available kernels.
Also a [online doxygen documentation] (http://elpa.mpcdf.mpg.de/html/Documentation/ELPA-2018.11.001/html/index.html)
Also a [online doxygen documentation] (http://elpa.mpcdf.mpg.de/html/Documentation/ELPA-2019.05.001.rc1/html/index.html)
for each *ELPA* release is available.
......@@ -13,7 +13,7 @@ Local documentation (via man pages) should be available (if *ELPA* has been inst
For example "man elpa2_print_kernels" should provide the documentation for the *ELPA* program, which prints all
the available kernels.
Also a [online doxygen documentation] (http://elpa.mpcdf.mpg.de/html/Documentation/ELPA-2018.11.001/html/index.html)
Also a [online doxygen documentation] (http://elpa.mpcdf.mpg.de/html/Documentation/ELPA-2019.05.001.rc1/html/index.html)
for each *ELPA* release is available.
......@@ -36,9 +36,9 @@ The old, obsolete legacy API will be deprecated in the future !
Allready now, all new features of ELPA are only available with the new API. Thus, there
is no reason to keep the legacy API arround for too long.
The release ELPA 2018.11.001 will be the last release, where the legacy API is
The release ELPA 2018.11.001 was the last release, where the legacy API has been
enabled by default (and can be disabled at build time).
With release ELPA 2019.05.001 the legacy API will be disabled by default, however,
With release ELPA 2019.05.001 the legacy API is disabled by default, however,
can be still switched on at build time.
Most likely with the release ELPA 2019.11.001 the legacy API will be deprecated and
not supported anymore.
......@@ -200,7 +200,7 @@ The following table gives a list of all supported parameters which can be used t
## III) List of computational routines ##
The following compute routines are available in *ELPA*: Please have a look at the man pages or [online doxygen documentation] (http://elpa.mpcdf.mpg.de/html/Documentation/ELPA-2018.11.001/html/index.html) for details.
The following compute routines are available in *ELPA*: Please have a look at the man pages or [online doxygen documentation] (http://elpa.mpcdf.mpg.de/html/Documentation/ELPA-2019.05.001.rc1/html/index.html) for details.
| Name | Purpose | since API version |
......
......@@ -22,7 +22,7 @@ The *ELPA* library consists of two main parts:
Both variants of the *ELPA* solvers are available for real or complex singe and double precision valued matrices.
Thus *ELPA* provides the following user functions (see man pages or [online] (http://elpa.mpcdf.mpg.de/html/Documentation/ELPA-2018.11.001/html/index.html) for details):
Thus *ELPA* provides the following user functions (see man pages or [online] (http://elpa.mpcdf.mpg.de/html/Documentation/ELPA-2019.05.001.rc1/html/index.html) for details):
- elpa_get_communicators : set the row / column communicators for *ELPA*
- elpa_solve_evp_complex_1stage_{single|double} : solve a {single|double} precision complex eigenvalue proplem with the *ELPA 1stage* solver
......
......@@ -319,7 +319,7 @@ print(" tags:")
print(" - avx")
print(" script:")
print(" - ./ci_test_scripts/run_ci_tests.sh -c \" CFLAGS=\\\"-O3 -mavx\\\" FCFLAGS=\\\"-O3 -axAVX\\\" SCALAPACK_LDFLAGS=\\\"$MKL_INTEL_SCALAPACK_LDFLAGS_NO_MPI_NO_OMP\\\" \
SCALAPACK_FCFLAGS=\\\"$MKL_INTEL_SCALAPACK_FCFLAGS_NO_MPI_NO_OMP\\\" --with-mpi=no FC=ifort --enable-shared=no --enable-static=yes --disable-avx2 || { cat config.log; exit 1; } \" -j 8 \
SCALAPACK_FCFLAGS=\\\"$MKL_INTEL_SCALAPACK_FCFLAGS_NO_MPI_NO_OMP\\\" --with-mpi=no FC=ifort --enable-shared=no --enable-static=yes --disable-avx2 --enable-optional-argument-in-C-API || { cat config.log; exit 1; } \" -j 8 \
-t 2 -m 150 -n 50 -b 16 -s $SKIP_STEP -i $INTERACTIVE_RUN -S $SLURM ")
print("\n\n")
......@@ -451,21 +451,40 @@ for comp, s, a in product(
projectBinary="test_real2"
if (comp == "intel"):
print(" - ./ci_test_scripts/run_project_tests.sh -c \" FC=mpiifort FCFLAGS=\\\"-march=native \\\" CFLAGS=\\\"-march=native\\\" \
SCALAPACK_LDFLAGS=\\\"$MKL_INTEL_SCALAPACK_LDFLAGS_MPI_NO_OMP\\\" \
SCALAPACK_FCFLAGS=\\\"$MKL_INTEL_SCALAPACK_FCFLAGS_MPI_NO_OMP\\\" \
--enable-option-checking=fatal --disable-avx2 --prefix=$PWD/installdest --disable-avx2 || { cat config.log; exit 1; } \" \
-t 2 -m 150 -n 50 -b 16 -S $SLURM -p test_project_"+stage[s]+api[a]+" -e "+projectBinary+" \
-C \" FC=mpiifort PKG_CONFIG_PATH=../../installdest/lib/pkgconfig \
--enable-option-checking=fatal || { cat config.log; exit 1; } \" ")
if (a == "new_api"):
print(" - ./ci_test_scripts/run_project_tests.sh -c \" FC=mpiifort FCFLAGS=\\\"-march=native \\\" CFLAGS=\\\"-march=native\\\" \
SCALAPACK_LDFLAGS=\\\"$MKL_INTEL_SCALAPACK_LDFLAGS_MPI_NO_OMP\\\" \
SCALAPACK_FCFLAGS=\\\"$MKL_INTEL_SCALAPACK_FCFLAGS_MPI_NO_OMP\\\" \
--enable-option-checking=fatal --disable-avx2 --prefix=$PWD/installdest --disable-avx2 || { cat config.log; exit 1; } \" \
-t 2 -m 150 -n 50 -b 16 -S $SLURM -p test_project_"+stage[s]+api[a]+" -e "+projectBinary+" \
-C \" FC=mpiifort PKG_CONFIG_PATH=../../installdest/lib/pkgconfig \
--enable-option-checking=fatal || { cat config.log; exit 1; } \" ")
if (a == "legacy_api"):
print(" - ./ci_test_scripts/run_project_tests.sh -c \" FC=mpiifort FCFLAGS=\\\"-march=native \\\" CFLAGS=\\\"-march=native\\\" \
SCALAPACK_LDFLAGS=\\\"$MKL_INTEL_SCALAPACK_LDFLAGS_MPI_NO_OMP\\\" \
SCALAPACK_FCFLAGS=\\\"$MKL_INTEL_SCALAPACK_FCFLAGS_MPI_NO_OMP\\\" \
--enable-option-checking=fatal --enable-legacy-interface --disable-avx2 --prefix=$PWD/installdest --disable-avx2 || { cat config.log; exit 1; } \" \
-t 2 -m 150 -n 50 -b 16 -S $SLURM -p test_project_"+stage[s]+api[a]+" -e "+projectBinary+" \
-C \" FC=mpiifort PKG_CONFIG_PATH=../../installdest/lib/pkgconfig \
--enable-option-checking=fatal || { cat config.log; exit 1; } \" ")
if (comp == "gnu"):
print(" - ./ci_test_scripts/run_project_tests.sh -c \" FC=mpif90 FCFLAGS=\\\"-march=native \\\" CFLAGS=\\\"-march=native\\\" \
SCALAPACK_LDFLAGS=\\\"$MKL_GFORTRAN_SCALAPACK_LDFLAGS_MPI_NO_OMP\\\" \
SCALAPACK_FCFLAGS=\\\"$MKL_GFORTRAN_SCALAPACK_FCFLAGS_MPI_NO_OMP\\\" \
--enable-option-checking=fatal --disable-avx2 --prefix=$PWD/installdest --disable-avx2 || { cat config.log; exit 1; } \" \
-t 2 -m 150 -n 50 -b 16 -S $SLURM -p test_project_"+stage[s]+api[a]+" -e "+projectBinary+" \
-C \" FC=mpif90 PKG_CONFIG_PATH=../../installdest/lib/pkgconfig \
--enable-option-checking=fatal || { cat config.log; exit 1; } \" ")
if (a == "new_api"):
print(" - ./ci_test_scripts/run_project_tests.sh -c \" FC=mpif90 FCFLAGS=\\\"-march=native \\\" CFLAGS=\\\"-march=native\\\" \
SCALAPACK_LDFLAGS=\\\"$MKL_GFORTRAN_SCALAPACK_LDFLAGS_MPI_NO_OMP\\\" \
SCALAPACK_FCFLAGS=\\\"$MKL_GFORTRAN_SCALAPACK_FCFLAGS_MPI_NO_OMP\\\" \
--enable-option-checking=fatal --disable-avx2 --prefix=$PWD/installdest --disable-avx2 || { cat config.log; exit 1; } \" \
-t 2 -m 150 -n 50 -b 16 -S $SLURM -p test_project_"+stage[s]+api[a]+" -e "+projectBinary+" \
-C \" FC=mpif90 PKG_CONFIG_PATH=../../installdest/lib/pkgconfig \
--enable-option-checking=fatal || { cat config.log; exit 1; } \" ")
if (a == "legacy_api"):
print(" - ./ci_test_scripts/run_project_tests.sh -c \" FC=mpif90 FCFLAGS=\\\"-march=native \\\" CFLAGS=\\\"-march=native\\\" \
SCALAPACK_LDFLAGS=\\\"$MKL_GFORTRAN_SCALAPACK_LDFLAGS_MPI_NO_OMP\\\" \
SCALAPACK_FCFLAGS=\\\"$MKL_GFORTRAN_SCALAPACK_FCFLAGS_MPI_NO_OMP\\\" \
--enable-option-checking=fatal --enable-legacy-interface --disable-avx2 --prefix=$PWD/installdest --disable-avx2 || { cat config.log; exit 1; } \" \
-t 2 -m 150 -n 50 -b 16 -S $SLURM -p test_project_"+stage[s]+api[a]+" -e "+projectBinary+" \
-C \" FC=mpif90 PKG_CONFIG_PATH=../../installdest/lib/pkgconfig \
--enable-option-checking=fatal || { cat config.log; exit 1; } \" ")
print("\n\n")
print("#The tests follow here")
......@@ -529,6 +548,7 @@ address_sanitize_flag = {
"no-address-sanitize" : "no-address-sanitize",
}
#matrix_size = {
# "small" : "150",
# "medium" : "1500",
......
......@@ -27,7 +27,7 @@ AM_SILENT_RULES([yes])
# by the current interface, as they are ABI compatible (e.g. only new symbols
# were added by the new interface)
#
AC_SUBST([ELPA_SO_VERSION], [13:0:0])
AC_SUBST([ELPA_SO_VERSION], [14:0:0])
# AC_DEFINE_SUBST(NAME, VALUE, DESCRIPTION)
# -----------------------------------------
......@@ -39,11 +39,11 @@ AC_SUBST([$1], ['$2'])
# API Version
AC_DEFINE([EARLIEST_API_VERSION], [20170403], [Earliest supported ELPA API version])
AC_DEFINE_SUBST(CURRENT_API_VERSION, 20181113, "Current ELPA API version")
AC_DEFINE_SUBST(CURRENT_API_VERSION, 20190524, "Current ELPA API version")
# Autotune Version
AC_DEFINE([EARLIEST_AUTOTUNE_VERSION], [20171201], [Earliest ELPA API version, which supports autotuning])
AC_DEFINE([CURRENT_AUTOTUNE_VERSION], [20181113], [Current ELPA autotune version])
AC_DEFINE_SUBST(CURRENT_AUTOTUNE_VERSION, 20181113, "Current ELPA autotune version")
AC_DEFINE([CURRENT_AUTOTUNE_VERSION], [20190524], [Current ELPA autotune version])
AC_DEFINE_SUBST(CURRENT_AUTOTUNE_VERSION, 20190524, "Current ELPA autotune version")
AX_CHECK_GNU_MAKE()
if test x$_cv_gnu_make_command = x ; then
......@@ -52,8 +52,8 @@ fi
AC_MSG_CHECKING(whether legacy interface should be provided)
AC_ARG_ENABLE([legacy-interface],
AS_HELP_STRING([--disable-legacy-interface],
[do not build legacy API, default yes]),
AS_HELP_STRING([--enable-legacy-interface],
[build legacy API, default no]),
[
if test x"$enableval" = x"yes"; then
enable_legayc=yes
......@@ -61,13 +61,31 @@ AC_ARG_ENABLE([legacy-interface],
enable_legacy=no
fi
],
[enable_legacy=yes])
[enable_legacy=no])
AC_MSG_RESULT([${enable_legacy}])
AM_CONDITIONAL([ENABLE_LEGACY],[test x"$enable_legacy" = x"yes"])
if test x"${enable_legacy}" = x"yes"; then
AC_DEFINE([ENABLE_LEGACY], [1], [enable legacy interface])
fi
AC_MSG_CHECKING(whether in C interface the error argument should be optional)
AC_ARG_ENABLE([optional-argument-in-C-API],
AS_HELP_STRING([--enable-optional-argument-in-C-API],
[do not build C API with error argument as optional, default no]),
[
if test x"$enableval" = x"yes"; then
optional_c_error_argument=yes
else
optional_c_error_argument=no
fi
],
[optional_c_error_argument=no])
AC_MSG_RESULT([${optional_c_error_argument}])
AM_CONDITIONAL([OPTIONAL_C_ERROR_ARGUMENT],[test x"$enable_legacy" = x"yes"])
if test x"${optional_c_error_argument}" = x"yes"; then
AC_DEFINE([OPTIONAL_C_ERROR_ARGUMENT], [1], [enable error argument in C-API to be optional])
fi
# gnu-make fortran module dependencies
m4_include([fdep/fortran_dependencies.m4])
......@@ -290,6 +308,51 @@ if test x"${enable_timings}" = x"yes"; then
fi
AC_LANG_POP([C])
dnl Likwid
AC_LANG_PUSH([Fortran])
AC_ARG_WITH([likwid],
[AS_HELP_STRING([--with-likwid=[[yes|no(default)|PATH]]],
[Use Likwid to measure performance in some parts of the library])],
[with_likwid="$withval"],
[with_likwid="no"])
if test x"$with_likwid" != x"no" ; then
if test -d $with_likwid/lib ; then
LDFLAGS="-L$with_likwid/lib $LDFLAGS"
fi
if test -d $with_likwid/lib64 ; then
LDFLAGS="-L$with_likwid/lib64 $LDFLAGS"
fi
if test -d $with_likwid/include ; then
FCFLAGS="-I$with_likwid/include $FCFLAGS"
fi
AC_SEARCH_LIBS([likwid_markerInit], [likwid], [liblikwid_found="yes"], [liblikwid_found="no"])
if test x"$liblikwid_found" = x"no" ; then
AC_MSG_ERROR([Could not find a usable likwid library, please adjust LDFLAGS])
fi
AC_MSG_CHECKING([whether we can use the likwid module in a Fortran program])
AC_COMPILE_IFELSE([
program foo
use likwid
implicit none
call likwid_markerInit()
call likwid_markerThreadInit()
call likwid_markerStartRegion("foobar")
call likwid_markerStopRegion("foobar")
call likwid_markerClose()
end
],
[AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])
AC_MSG_ERROR([Could not compile a Fortran program using the likwid module, adjust FCFLAGS])])
AC_DEFINE([HAVE_LIKWID], [1], [Use likwid])
fi
AC_LANG_POP([Fortran])
save_FCFLAGS=$FCFLAGS
save_LDFLAGS=$LDFLAGS
......@@ -512,7 +575,7 @@ dnl Test possibility of 'use mpi', if requested
if test x"${with_mpi}" = x"yes" ; then
AC_ARG_ENABLE([mpi-module],
AS_HELP_STRING([--disable-mpi-module],
[do not use the Fortran MPI module, get interfaces by 'include "mpif.h')]),
[do not use the Fortran MPI module, get interfaces by 'include "mpif.h']),
[
if test x"$enableval" = x"yes"; then
enable_mpi_module=yes
......@@ -977,7 +1040,7 @@ if test x"${need_avx512}" = x"yes"; then
if test x"$can_compile_avx512" = x"yes"; then
AC_MSG_CHECKING([whether we compile for Xeon])
AC_RUN_IFELSE([AC_LANG_SOURCE([
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#include <x86intrin.h>
int main(int argc, char **argv){
__m512d sign;
......@@ -993,7 +1056,7 @@ if test x"${need_avx512}" = x"yes"; then
AC_MSG_RESULT([${can_compile_avx512_xeon}])
AC_MSG_CHECKING([whether we compile for Xeon PHI])
AC_RUN_IFELSE([AC_LANG_SOURCE([
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#include <x86intrin.h>
int main(int argc, char **argv){
__m512d sign;
......@@ -1430,21 +1493,21 @@ m4_foreach_w([elpa_m4_kind],[real complex],[
])
])
echo " "
echo "***********************************************************************"
echo "* ELPA 2018.11.001 will be the last release where the old, obsolete, *"
echo "* legacy API is enabled by default! In the 2019.05.001 release *"
echo "* the legacy API will be still available (but as default switched *"
echo "* off). With the 2019.11.001 release it will be abolished! *"
echo "***********************************************************************"
echo " "
echo " "
#echo " "
#echo "***********************************************************************"
#echo "* This is a the first release candidate of ELPA 2018.11.001.rc1 *"
#echo "* There might be still some changes until the final release of *"
#echo "* ELPA 2018.11.001 *"
#echo "* ELPA 2018.11.001 will be the last release where the old, obsolete, *"
#echo "* legacy API is enabled by default! In the 2019.05.001 release *"
#echo "* the legacy API will be still available (but as default switched *"
#echo "* off). With the 2019.11.001 release it will be abolished! *"
#echo "***********************************************************************"
#echo " "
#echo " "
echo "***********************************************************************"
echo "* This is a the first release candidate of ELPA 2019.05.001.rc1 *"
echo "* There might be still some changes until the final release of *"
echo "* ELPA 2019.05.001 *"
echo "***********************************************************************"
echo " "
if test x"$enable_kcomputer" = x"yes" ; then
echo " "
......@@ -1454,5 +1517,11 @@ if test x"$enable_kcomputer" = x"yes" ; then
echo "call: make -f ../generated_headers.am generated-headers top_srcdir=.."
echo "BEFORE triggering the build with make!"
else
if test x"$optional_c_error_argument" = x"yes" ; then
echo "#define OPTIONAL_C_ERROR_ARGUMENT" > elpa/elpa_generated_c_api.h
else
echo "#undef OPTIONAL_C_ERROR_ARGUMENT" > elpa/elpa_generated_c_api.h
fi
make -f $srcdir/generated_headers.am generated-headers top_srcdir="$srcdir" CPP="$CPP"
fi
......@@ -19,7 +19,7 @@
%define with_openmp 0
Name: elpa
Version: 2018.11.001
Version: 2019.05.001.rc1
Release: 1
Summary: A massively parallel eigenvector solver
License: LGPL-3.0
......
......@@ -14,6 +14,7 @@ typedef struct elpa_autotune_struct *elpa_autotune_t;
#include <elpa/elpa_constants.h>
#include <elpa/elpa_generated_c_api.h>
#include <elpa/elpa_generated.h>
#include <elpa/elpa_generic.h>
......
......@@ -227,6 +227,7 @@ for lang, m, g, q, t, p, d, s, lay, spl in product(sorted(language_flag.keys()),
print("endif\n" * endifs)
for lang, p, d in product(sorted(language_flag.keys()), sorted(prec_flag.keys()), sorted(domain_flag.keys())):
endifs = 0
if (p == "single"):
......@@ -286,3 +287,12 @@ print(" " + " \\\n ".join([
prec_flag['double']]))
print("endif")
name = "test_split_comm_real_double"
print("check_SCRIPTS += " + name + "_extended.sh")
print("noinst_PROGRAMS += " + name)
print(name + "_SOURCES = test/Fortran/test_split_comm.F90")
print(name + "_LDADD = $(test_program_ldadd)")
print(name + "_FCFLAGS = $(test_program_fcflags) \\")
print(" " + " \\\n ".join([
domain_flag['real'],
prec_flag['double']]))
......@@ -22,6 +22,22 @@ elpa/elpa_generated.h: $(top_srcdir)/src/elpa_impl.F90 \
$(top_srcdir)/src/elpa_api.F90 | elpa
@rm -f $@
$(call extract_interface,!c>)
$(call extract_interface,!c_o>)
$(call extract_interface,!c_no>)
#if OPTIONAL_C_ERROR_ARGUMENT
#
#elpa/elpa_generated.h: $(top_srcdir)/src/elpa_impl.F90 \
# $(top_srcdir)/src/elpa_impl_math_template.F90 \
# $(top_srcdir)/src/elpa_api.F90 | elpa
# $(call extract_interface,!c_o>)
#
#else
#elpa/elpa_generated.h: $(top_srcdir)/src/elpa_impl.F90 \
# $(top_srcdir)/src/elpa_impl_math_template.F90 \
# $(top_srcdir)/src/elpa_api.F90 | elpa
# $(call extract_interface,!c_no>)
#endif
generated_headers += elpa/elpa_generated_legacy.h
elpa/elpa_generated_legacy.h: $(top_srcdir)/src/elpa_driver/legacy_interface/elpa_driver_c_interface.F90 \
......
......@@ -85,6 +85,9 @@ module elpa1_impl
use, intrinsic :: iso_c_binding
use elpa_utilities
use elpa1_auxiliary_impl
#ifdef HAVE_LIKWID
use likwid
#endif
implicit none
......
......@@ -66,9 +66,8 @@ function elpa_solve_evp_&
use elpa_abstract_impl
use elpa_mpi
use elpa1_compute
#ifdef WITH_OPENMP
use omp_lib
#endif
use elpa_omp
implicit none
#include "../general/precision_kinds.F90"
class(elpa_abstract_impl_t), intent(inout) :: obj
......@@ -122,7 +121,11 @@ function elpa_solve_evp_&
&")
#ifdef WITH_OPENMP
!nrThreads = omp_get_max_threads()
! store the number of OpenMP threads used in the calling function
! restore this at the end of ELPA 2
omp_threads_caller = omp_get_max_threads()
! check the number of threads that ELPA should use internally
call obj%get("omp_threads",nrThreads,error)
call omp_set_num_threads(nrThreads)
#else
......@@ -156,6 +159,13 @@ function elpa_solve_evp_&
if (.not.(obj%eigenvalues_only)) then
q(1,1) = ONE
endif
! restore original OpenMP settings
#ifdef WITH_OPENMP
! store the number of OpenMP threads used in the calling function
! restore this at the end of ELPA 2
call omp_set_num_threads(omp_threads_caller)
#endif
call obj%timer%stop("elpa_solve_evp_&
&MATH_DATATYPE&
&_1stage_&
......@@ -314,16 +324,28 @@ function elpa_solve_evp_&
if (do_tridiag) then
call obj%timer%start("forward")
#ifdef HAVE_LIKWID
call likwid_markerStartRegion("tridi")
#endif
call tridiag_&
&MATH_DATATYPE&
&_&
&PRECISION&
& (obj, na, a, lda, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols, ev, e, tau, do_useGPU_tridiag, wantDebug, nrThreads)
#ifdef HAVE_LIKWID
call likwid_markerStopRegion("tridi")
#endif
call obj%timer%stop("forward")
endif !do_tridiag
if (do_solve) then
call obj%timer%start("solve")
#ifdef HAVE_LIKWID
call likwid_markerStartRegion("solve")
#endif
call solve_tridi_&
&PRECISION&
& (obj, na, nev, ev, e, &
......@@ -334,6 +356,10 @@ function elpa_solve_evp_&
q_real, l_rows, &
#endif
nblk, matrixCols, mpi_comm_rows, mpi_comm_cols, do_useGPU_solve_tridi, wantDebug, success, nrThreads)
#ifdef HAVE_LIKWID
call likwid_markerStopRegion("solve")
#endif
call obj%timer%stop("solve")
if (.not.(success)) return
endif !do_solve
......@@ -369,11 +395,19 @@ function elpa_solve_evp_&
#endif
call obj%timer%start("back")
#ifdef HAVE_LIKWID
call likwid_markerStartRegion("trans_ev")
#endif
call trans_ev_&
&MATH_DATATYPE&
&_&
&PRECISION&
& (obj, na, nev, a, lda, tau, q, ldq, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols, do_useGPU_trans_ev)
#ifdef HAVE_LIKWID
call likwid_markerStopRegion("trans_ev")
#endif
call obj%timer%stop("back")
endif ! do_trans_ev
......@@ -411,6 +445,13 @@ function elpa_solve_evp_&
endif
endif
! restore original OpenMP settings
#ifdef WITH_OPENMP
! store the number of OpenMP threads used in the calling function
! restore this at the end of ELPA 2
call omp_set_num_threads(omp_threads_caller)
#endif