Unverified Commit ff7beab2 authored by Andreas Marek's avatar Andreas Marek
Browse files

Prepare release of ELPA_2015.02.001

The qr decomposition is now available as a runtime choice.
Some testing has still to be done
parent 2d84e981
...@@ -2,19 +2,20 @@ How to install ELPA: ...@@ -2,19 +2,20 @@ How to install ELPA:
---------------------- ----------------------
First of all, if you do not want to build ELPA yourself, and you run Linux, First of all, if you do not want to build ELPA yourself, and you run Linux,
it is worth haveing a look at the ELPA webpage and/or the repositories of it is worth haveing a look at the ELPA webpage and/or the repositories of
your Linux distibution: there exist pre-build packages for a few your Linux distibution: there exist pre-build packages for a few
distributions like Fedora, Debian, and Opensuse. More, will hopefully follow distributions like Fedora, Debian, and Opensuse. More, will hopefully follow
in the future. in the future.
If you want to build (or have to since no packages are available) ELPA yourself, If you want to build (or have to since no packages are available) ELPA yourself,
please note that ELPA is shipped with a typical "configure" and "make" please note that ELPA is shipped with a typical "configure" and "make"
procedure. It is recommended to use this way to install ELPA, see (A). procedure. It is recommended to use this way to install ELPA, see (A).
If you do not want to install ELPA as library, but to include it in your If you do not want to install ELPA as library, but to include it in your
source code, please refer to point (B). source code, please refer to point (B). Note, that this is not recommended
An example makefile "Makefile.example" can be found in ./test, and no support whatsoever can be given for this approach !
to give some hints how this is done. Please distibute then all files of ELPA However, an example makefile "Makefile.example" can be found in ./test,
with your code. Please note, that usage of ELPA as described in Section (B) to give some hints how this is done. Please distibute then all files of ELPA
with your code. Please note, that usage of ELPA as described in Section (B)
requires advanced knowledge about compilers, preprocessor flags, and requires advanced knowledge about compilers, preprocessor flags, and
optimizations. Please also not, that we cannot give any official support if optimizations. Please also not, that we cannot give any official support if
ELPA is used as described in Section (B)! ELPA is used as described in Section (B)!
...@@ -26,26 +27,26 @@ ELPA is used as described in Section (B)! ...@@ -26,26 +27,26 @@ ELPA is used as described in Section (B)!
The configure installation is best done in four steps The configure installation is best done in four steps
1) run configure: 1) run configure:
Check the available options with "configure --help". Check the available options with "configure --help".
ELPA is shipped with several different versions of the ELPA is shipped with several different versions of the
elpa2-kernel, each is optimized and tuned for a different elpa2-kernel, each is optimized and tuned for a different
architecture. architecture.
1.1) Choice of ELPA2 kernels 1.1) Choice of ELPA2 kernels
With this release of ELPA (2014.06 or newer) it is _not_ With the release of ELPA (2014.06 or newer) it is _not_
mandatory anymore to define the (real and complex) kernels mandatory anymore to define the (real and complex) kernels
at build time. The configure procedure will build all the at build time. The configure procedure will build all the
kernels which can be used on the build system. The choice of kernels which can be used on the build system. The choice of
the kernels is now a run-time option. This is the most the kernels is now a run-time option. This is the most
convenient and also recommended way. It is intended to augment convenient and also recommended way. It is intended to augment
this with an auto-tuning feature. this with an auto-tuning feature.
Nevertheless, one can still define at build-time _one_ Nevertheless, one can still define at build-time _one_
specific kernel (for the real and the complex case each). specific kernel (for the real and the complex case each).
Then, ELPA is configured only with this real (and complex) Then, ELPA is configured only with this real (and complex)
kernel, and all run-time checking is disabled. Have a look kernel, and all run-time checking is disabled. Have a look
at the "configure --help" messages and please refer to the at the "configure --help" messages and please refer to the
file "./src/elpa2_kernels/README_elpa2_kernels.txt". file "./src/elpa2_kernels/README_elpa2_kernels.txt".
...@@ -55,8 +56,8 @@ The configure installation is best done in four steps ...@@ -55,8 +56,8 @@ The configure installation is best done in four steps
The configure script tries to auto-detect an installed Blacs/Scalapack The configure script tries to auto-detect an installed Blacs/Scalapack
library. If this is successfull, you do not have to specify anything library. If this is successfull, you do not have to specify anything
in this regard. However, this will fail, if you do not use Netlib in this regard. However, this will fail, if you do not use Netlib
Blacs/Scalapack but vendor specific implementations (e.g. Intel's MKL Blacs/Scalapack but vendor specific implementations (e.g. Intel's MKL
library or the implementation of Cray). library or the implementation of Cray).
Please then point to your Blacs/Scalapack installation and the Please then point to your Blacs/Scalapack installation and the
...@@ -79,7 +80,7 @@ The configure installation is best done in four steps ...@@ -79,7 +80,7 @@ The configure installation is best done in four steps
variable "FCFLAGS", "CFLAGS", and "CXXFLAGS", e.g. FCFLAGS="-O3 -xAVX", variable "FCFLAGS", "CFLAGS", and "CXXFLAGS", e.g. FCFLAGS="-O3 -xAVX",
please see "./src/elpa2_kernels/README_elpa2_kernels.txt". please see "./src/elpa2_kernels/README_elpa2_kernels.txt".
Setting the optimization flags for the AVX kernels can be a hazel. If AVX Setting the optimization flags for the AVX kernels can be a hazel. If AVX
kernels are build for your system, you can set the configure option kernels are build for your system, you can set the configure option
"--with-avx-optimizations=yes". This will automatically set a few compiler "--with-avx-optimizations=yes". This will automatically set a few compiler
optimization flags which turned out to be beneficial for AVX support. optimization flags which turned out to be beneficial for AVX support.
...@@ -107,7 +108,7 @@ The configure installation is best done in four steps ...@@ -107,7 +108,7 @@ The configure installation is best done in four steps
3) run "make check" 3) run "make check"
a simple test of ELPA is done. At the moment the usage of "mpiexec" a simple test of ELPA is done. At the moment the usage of "mpiexec"
is required. If this is not possible at your system, you can run the is required. If this is not possible at your system, you can run the
binaries "elpa1_test_real", "elpa2_test_real", binaries "elpa1_test_real", "elpa2_test_real",
"elpa1_test_complex", "elpa2_test_complex", "elpa1_test_complex", "elpa2_test_complex",
"elpa2_test_complex_default_kernel", "elpa2_test_complex_choose_kernel_with_api", "elpa2_test_complex_default_kernel", "elpa2_test_complex_choose_kernel_with_api",
"elpa2_test_real_default_kernel", and "elpa2_test_real_choose_kernel_with_api" "elpa2_test_real_default_kernel", and "elpa2_test_real_choose_kernel_with_api"
...@@ -128,7 +129,7 @@ The configure installation is best done in four steps ...@@ -128,7 +129,7 @@ The configure installation is best done in four steps
B) Installing ELPA without the autotools procedure B) Installing ELPA without the autotools procedure
=================================================== ===================================================
You can find an example makefile "Makefile.example" in "./test", You can find an example makefile "Makefile.example" in "./test",
to see how you can use ELPA directly in your code, and not as library. to see how you can use ELPA directly in your code, and not as library.
If you do so, please distibute then all files of ELPA with your code. If you do so, please distibute then all files of ELPA with your code.
However, this is not the recommended way for several reasons: However, this is not the recommended way for several reasons:
...@@ -138,21 +139,21 @@ B) Installing ELPA without the autotools procedure ...@@ -138,21 +139,21 @@ B) Installing ELPA without the autotools procedure
- you still have to choose an elpa2-kernel (see at (A)). Getting them - you still have to choose an elpa2-kernel (see at (A)). Getting them
build from hand might be tedious. build from hand might be tedious.
- the file elpa2.F90 uses preprocessor defines for the different kernels. - the file elpa2.F90 uses preprocessor defines for the different kernels.
you will have to do this by hand, if you do not use the autotools you will have to do this by hand, if you do not use the autotools
infrastructure. infrastructure.
- also the test programs now use preprocessor defines, discriminating - also the test programs now use preprocessor defines, discriminating
between version with and without OpenMP between version with and without OpenMP
- it is entirely possible that due to ever growing complexity of ELPA - it is entirely possible that due to ever growing complexity of ELPA
in future releases the build procedure without autotools will not be in future releases the build procedure without autotools will not be
supported anymore supported anymore
Thus, if you really want to use ELPA this way and not with the autotools Thus, if you really want to use ELPA this way and not with the autotools
please ensure the following please ensure the following
- make yourself familiar with the preprocessor flags you will need - make yourself familiar with the preprocessor flags you will need
for your configuration of ELPA and define them in a file "config-f90.h" for your configuration of ELPA and define them in a file "config-f90.h"
- adapte the Makefile.example accordingly to your needs - adapte the Makefile.example accordingly to your needs
Again, it is strongly encouraged to use the autotools build procedure! Again, it is strongly encouraged to use the autotools build procedure!
How to use ELPA: How to use ELPA:
......
...@@ -10,7 +10,10 @@ lib_LTLIBRARIES = libelpa@SUFFIX@.la ...@@ -10,7 +10,10 @@ lib_LTLIBRARIES = libelpa@SUFFIX@.la
libelpa@SUFFIX@_la_LINK = $(FCLINK) $(AM_LDFLAGS) -version-info $(ELPA_SO_VERSION) -lstdc++ libelpa@SUFFIX@_la_LINK = $(FCLINK) $(AM_LDFLAGS) -version-info $(ELPA_SO_VERSION) -lstdc++
libelpa@SUFFIX@_la_SOURCES = src/elpa1.F90 src/elpa2.F90 libelpa@SUFFIX@_la_SOURCES = src/elpa1.F90 src/elpa2.F90
libelpa@SUFFIX@_la_SOURCES += src/elpa_qr/qr_utils.f90 \
src/elpa_qr/elpa_qrkernels.f90 \
src/elpa_qr/elpa_pdlarfb.f90 \
src/elpa_qr/elpa_pdgeqrf.f90
if HAVE_DETAILED_TIMINGS if HAVE_DETAILED_TIMINGS
libelpa@SUFFIX@_la_SOURCES += src/timer.F90 \ libelpa@SUFFIX@_la_SOURCES += src/timer.F90 \
src/ftimings/ftimings.F90 \ src/ftimings/ftimings.F90 \
...@@ -23,13 +26,6 @@ if HAVE_DETAILED_TIMINGS ...@@ -23,13 +26,6 @@ if HAVE_DETAILED_TIMINGS
src/ftimings/papi.c src/ftimings/papi.c
endif endif
if WITH_QR
libelpa@SUFFIX@_la_SOURCES += src/elpa_qr/qr_utils.f90 \
src/elpa_qr/elpa_qrkernels.f90 \
src/elpa_qr/elpa_pdlarfb.f90 \
src/elpa_qr/elpa_pdgeqrf.f90
endif
if WITH_REAL_GENERIC_KERNEL if WITH_REAL_GENERIC_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real.f90 libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real.f90
endif endif
...@@ -103,6 +99,7 @@ dist_files_DATA = \ ...@@ -103,6 +99,7 @@ dist_files_DATA = \
test/test_complex_gen.F90 \ test/test_complex_gen.F90 \
test/test_real2.F90 \ test/test_real2.F90 \
test/test_real2_default_kernel.F90 \ test/test_real2_default_kernel.F90 \
test/test_real2_default_kernel_qr_decomposition.F90 \
test/test_real2_choose_kernel_with_api.F90 \ test/test_real2_choose_kernel_with_api.F90 \
src/print_available_elpa2_kernels.F90 \ src/print_available_elpa2_kernels.F90 \
test/test_real.F90 \ test/test_real.F90 \
...@@ -124,6 +121,7 @@ bin_PROGRAMS = \ ...@@ -124,6 +121,7 @@ bin_PROGRAMS = \
noinst_PROGRAMS = \ noinst_PROGRAMS = \
elpa2_test_real_default_kernel@SUFFIX@ \ elpa2_test_real_default_kernel@SUFFIX@ \
elpa2_test_real_default_kernel_qr_decomposition@SUFFIX@ \
elpa2_test_complex_default_kernel@SUFFIX@ \ elpa2_test_complex_default_kernel@SUFFIX@ \
elpa2_test_real_choose_kernel_with_api@SUFFIX@ \ elpa2_test_real_choose_kernel_with_api@SUFFIX@ \
elpa2_test_complex_choose_kernel_with_api@SUFFIX@ elpa2_test_complex_choose_kernel_with_api@SUFFIX@
...@@ -147,6 +145,10 @@ elpa2_test_real_default_kernel@SUFFIX@_SOURCES = test/test_real2_default_kernel. ...@@ -147,6 +145,10 @@ elpa2_test_real_default_kernel@SUFFIX@_SOURCES = test/test_real2_default_kernel.
elpa2_test_real_default_kernel@SUFFIX@_LDADD = $(build_lib) elpa2_test_real_default_kernel@SUFFIX@_LDADD = $(build_lib)
elpa2_test_real_default_kernel_qr_decomposition@SUFFIX@_SOURCES = test/test_real2_default_kernel_qr_decomposition.F90 test/util.F90 $(redirect_sources)
elpa2_test_real_default_kernel_qr_decomposition@SUFFIX@_LDADD = $(build_lib)
elpa2_test_real_choose_kernel_with_api@SUFFIX@_SOURCES = test/test_real2_choose_kernel_with_api.F90 test/util.F90 $(redirect_sources) elpa2_test_real_choose_kernel_with_api@SUFFIX@_SOURCES = test/test_real2_choose_kernel_with_api.F90 test/util.F90 $(redirect_sources)
elpa2_test_real_choose_kernel_with_api@SUFFIX@_LDADD = $(build_lib) elpa2_test_real_choose_kernel_with_api@SUFFIX@_LDADD = $(build_lib)
...@@ -178,6 +180,7 @@ check_SCRIPTS = \ ...@@ -178,6 +180,7 @@ check_SCRIPTS = \
elpa1_test_complex.sh \ elpa1_test_complex.sh \
elpa2_test_complex.sh \ elpa2_test_complex.sh \
elpa2_test_complex_default_kernel.sh \ elpa2_test_complex_default_kernel.sh \
elpa2_test_complex_default_kernel_qr_decomposition.sh \
elpa2_test_real_choose_kernel_with_api.sh \ elpa2_test_real_choose_kernel_with_api.sh \
elpa2_test_complex_choose_kernel_with_api.sh \ elpa2_test_complex_choose_kernel_with_api.sh \
elpa2_print_kernels@SUFFIX@ elpa2_print_kernels@SUFFIX@
...@@ -196,6 +199,10 @@ elpa2_test_real_default_kernel.sh: ...@@ -196,6 +199,10 @@ elpa2_test_real_default_kernel.sh:
echo 'mpiexec -n 2 ./elpa2_test_real_default_kernel@SUFFIX@ $$TEST_FLAGS' > elpa2_test_real_default_kernel.sh echo 'mpiexec -n 2 ./elpa2_test_real_default_kernel@SUFFIX@ $$TEST_FLAGS' > elpa2_test_real_default_kernel.sh
chmod +x elpa2_test_real_default_kernel.sh chmod +x elpa2_test_real_default_kernel.sh
elpa2_test_real_default_kernel_qr_decomposition.sh:
echo 'mpiexec -n 2 ./elpa2_test_real_default_kernel_qr_decomposition@SUFFIX@ $$TEST_FLAGS' > elpa2_test_real_default_kernel_qr_decomposition.sh
chmod +x elpa2_test_real_default_kernel_qr_decomposition.sh
elpa2_test_real_choose_kernel_with_api.sh: elpa2_test_real_choose_kernel_with_api.sh:
echo 'mpiexec -n 2 ./elpa2_test_real_choose_kernel_with_api@SUFFIX@ $$TEST_FLAGS' > elpa2_test_real_choose_kernel_with_api.sh echo 'mpiexec -n 2 ./elpa2_test_real_choose_kernel_with_api@SUFFIX@ $$TEST_FLAGS' > elpa2_test_real_choose_kernel_with_api.sh
chmod +x elpa2_test_real_choose_kernel_with_api.sh chmod +x elpa2_test_real_choose_kernel_with_api.sh
...@@ -227,6 +234,7 @@ CLEANFILES = \ ...@@ -227,6 +234,7 @@ CLEANFILES = \
elpa1_test_complex.sh \ elpa1_test_complex.sh \
elpa2_test_real.sh \ elpa2_test_real.sh \
elpa2_test_real_default_kernel.sh \ elpa2_test_real_default_kernel.sh \
elpa2_test_real_default_kernel_qr_decomposition.sh \
elpa2_test_complex.sh \ elpa2_test_complex.sh \
elpa2_test_complex_default_kernel.sh \ elpa2_test_complex_default_kernel.sh \
elpa2_test_real_choose_kernel_with_api.sh \ elpa2_test_real_choose_kernel_with_api.sh \
......
This diff is collapsed.
...@@ -12,7 +12,7 @@ such improvements under the same exact terms of the (modified) LGPL v3 ...@@ -12,7 +12,7 @@ such improvements under the same exact terms of the (modified) LGPL v3
that we are using here. Please do not simply absorb ELPA into your own that we are using here. Please do not simply absorb ELPA into your own
project and then redistribute binary-only without making your exact project and then redistribute binary-only without making your exact
version of the ELPA source code (unmodified or MODIFIED) available as version of the ELPA source code (unmodified or MODIFIED) available as
well. well.
*** Citing: *** Citing:
...@@ -20,15 +20,15 @@ well. ...@@ -20,15 +20,15 @@ well.
A description of some algorithms present in ELPA can be found in: A description of some algorithms present in ELPA can be found in:
T. Auckenthaler, V. Blum, H.-J. Bungartz, T. Huckle, R. Johanni, T. Auckenthaler, V. Blum, H.-J. Bungartz, T. Huckle, R. Johanni,
L. Kr\"amer, B. Lang, H. Lederer, and P. R. Willems, L. Kr\"amer, B. Lang, H. Lederer, and P. R. Willems,
"Parallel solution of partial symmetric eigenvalue problems from "Parallel solution of partial symmetric eigenvalue problems from
electronic structure calculations", electronic structure calculations",
Parallel Computing 37, 783-794 (2011). Parallel Computing 37, 783-794 (2011).
doi:10.1016/j.parco.2011.05.002. doi:10.1016/j.parco.2011.05.002.
Marek, A.; Blum, V.; Johanni, R.; Havu, V.; Lang, B.; Auckenthaler, Marek, A.; Blum, V.; Johanni, R.; Havu, V.; Lang, B.; Auckenthaler,
T.; Heinecke, A.; Bungartz, H.-J.; Lederer, H. T.; Heinecke, A.; Bungartz, H.-J.; Lederer, H.
"The ELPA library: scalable parallel eigenvalue solutions for electronic "The ELPA library: scalable parallel eigenvalue solutions for electronic
structure theory and computational science", structure theory and computational science",
Journal of Physics Condensed Matter, 26 (2014) Journal of Physics Condensed Matter, 26 (2014)
doi:10.1088/0953-8984/26/21/213201 doi:10.1088/0953-8984/26/21/213201
...@@ -38,10 +38,10 @@ well. ...@@ -38,10 +38,10 @@ well.
make appropriate reference to that as well, once it appears. make appropriate reference to that as well, once it appears.
*** Copyright: *** Copyright:
Copyright of the original code rests with the authors inside the ELPA Copyright of the original code rests with the authors inside the ELPA
consortium. The code is distributed under the terms of the GNU Lesser General consortium. The code is distributed under the terms of the GNU Lesser General
Public License version 3 (LGPL). Public License version 3 (LGPL).
Please also note the express "NO WARRANTY" disclaimers in the GPL. Please also note the express "NO WARRANTY" disclaimers in the GPL.
...@@ -50,7 +50,7 @@ Please see the file "COPYING" for details, and the files "gpl.txt" and ...@@ -50,7 +50,7 @@ Please see the file "COPYING" for details, and the files "gpl.txt" and
"lgpl.txt" for further information. "lgpl.txt" for further information.
*** Using ELPA: *** Using ELPA:
ELPA is designed to be compiled (Fortran) on its own, to be later ELPA is designed to be compiled (Fortran) on its own, to be later
linked to your own application. In order to use ELPA, you must still linked to your own application. In order to use ELPA, you must still
...@@ -69,98 +69,24 @@ are usually available from any HPC proprietary compiler vendors. ...@@ -69,98 +69,24 @@ are usually available from any HPC proprietary compiler vendors.
For example, Intel's ifort compiler contains the "math kernel library" For example, Intel's ifort compiler contains the "math kernel library"
(MKL), providing BLAS/Lapack/BLACS/Scalapack functionality. (except on (MKL), providing BLAS/Lapack/BLACS/Scalapack functionality. (except on
Mac OS X, where the BLACS and Scalapack part must still be obtained Mac OS X, where the BLACS and Scalapack part must still be obtained
and compiled separately). and compiled separately).
A very usable general-purpose MPI library is OpenMPI (ELPA was tested A very usable general-purpose MPI library is OpenMPI (ELPA was tested
with OpenMPI 1.4.3 for example). Intel MPI seems to be a very well with OpenMPI 1.4.3 for example). Intel MPI seems to be a very well
performing option on Intel platforms. performing option on Intel platforms.
Examples of how to use ELPA are included in the accompanying Examples of how to use ELPA are included in the accompanying
test_*.f90 subroutines in the "test" directory. An example makefile test_*.f90 subroutines in the "test" directory. An example makefile
"Makefile.example" is also included as a minimal example of how to "Makefile.example" is also included as a minimal example of how to
build and link ELPA to any other piece of code. In general, however, build and link ELPA to any other piece of code. In general, however,
we suggest to use the build environment in order to install ELPA we suggest to use the build environment in order to install ELPA
as library to your system. as library to your system.
*** Structure of this repository: *** Structure of this repository:
* README file - this file. Please also consult the ELPA Wiki, and As in most git repositories, also this repository contains different branches.
consider adding any useful information that you may have. The branch "master" is always identical to the one representing the latest release
of ELPA. All other branches, either represent development work, or previous releases of
* COPYING directory - the copyright and licensing information for ELPA. ELPA.
.
* src directory - contains all the files that are needed for the
actual ELPA subroutines. If you are attempting to use ELPA in your
own application, these are the files which you need.
* test directory
- Contains the Makefile that demonstrates how to compile and link to
the ELPA routines
- All test programs solve a eigenvalue problem and check the correctnes
of the result by evaluating || A*x - x*lamba || and checking the
orthogonality of the eigenvectors
elpa1_test_real Real eigenvalue problem, 1 stage solver
test_real_gen Real generalized eigenvalue problem, 1 stage solver
elpa1test_complex Complex eigenvalue problem, 1 stage solver
test_complex_gen Complex generalized eigenvalue problem, 1 stage solver
elpa2_test_real Real eigenvalue problem, 2 stage solver
elpa2test_complex Complex eigenvalue problem, 2 stage solver
- There are two programs which read matrices from a file, solve the
eigenvalue problem, print the eigenvalues and check the correctness
of the result (all using elpa1 only)
read_real for the real eigenvalue problem
read_real_gen for the real generalized eigenvalue problem
A*x - B*x*lambda = 0
read_real has to be called with 1 command line argument (the file
containing the matrix). The file must be in ASCII (formatted) form.
read_real_gen has to be called with 3 command line arguments. The
first argument is either 'asc' or 'bin' (without quotes) and
determines the format of the following files. 'asc' refers to ASCII
(formatted) and 'bin' to binary (unformatted). Command line
arguments 2 and 3 are the names of the files which contain matrices
A and B.
The structure of the matrix files for read_real and read_real_gen
depends on the format of the files:
* ASCII format (both read_real and read_real_gen):
The files must contain the following lines:
- 1st line containing the matrix size
- then following the upper half of the matrix in column-major
(i.e. Fortran) order, one number per line:
a(1,1)
a(1,2)
a(2,2)
...
a(1,i)
...
a(i,i)
...
a(1,n)
...
a(n,n)
* Binary format (read_real_gen only):
The files must contain the following records:
- 1st record: matrix size (type integer)
- 2nd record: a(1,1)
- 3rd record: a(1,2) a(2,2)
- ...
- ... a(1,i) ... a(i,i)
- ...
- ... a(1,n) ... a(n,n)
The type of the matrix elements a(i,j) is real*8.
This file contains the release notes for the ELPA 2014.06.001 version This file contains the release notes for the ELPA 2015.02.001 version
...@@ -10,56 +10,31 @@ a) ...@@ -10,56 +10,31 @@ a)
Most importantly, the ABI of the ELPA libray changed! Most importantly, the ABI of the ELPA libray changed!
A rebuild/relink of the user code using the ELPA library is mandatory! A rebuild/relink of the user code using the ELPA library is mandatory!
Furthermore, the name of the installed library has changed, in order to allow the
possiblity to have several versions of ELPA installed with
different ABIs. In order to have an unique identifier, the library will from
now on be called "libelpa.so.[versioning]" (for single threaded version)
and "libelpa_openmp.so.[versioning]" (for the hybrid MPI/OpenMP version).
"Versioning", is an implementation (i.e. operating system) dependent, which
uniquely defines the library version. In this release this is is most
propably "elpa{_openmp}.so.1.0.0"
b) b)
With this release (and newer) it is not mandatory anymore to specify the real The only major change (which results in point a) is in the ELPA-2
and complex kernels at build-time! Instead the choice of kernel is now a part of the library for real matrices:
run-time option
The kernels can either be choosen by environment variables "REAL_ELPA_KERNEL"
and "COMPLEX_ELPA_KERNEL", or in the code with an additional argument in
the call to the library (see the examples in ./test for more details)
It is still possible to build ELPA with a specific real and complex kernel, if the fully blocked QR decomposition has been moved from the development part
one wants to obtain the old behaviour (see configure --help for the exact to the release!
options)
c) It is now possible to use this QR decomposition by either setting an
environment variable "ELPA_QR_DECOMPOSITION" to "yes", or to call the
At build time, configure now expects variables "SCALAPACK_FCFLAGS" and "solve_evp_real_2stage" solver with the additional (optional) argument
"SCLAPACK_LDFLAGS" to be set, which replace the previous "BLACS_FCFLAGS" and "useQR=.true."
"BLACS_LDFLAGS".
d) Note, that the environment variable always takes precedence over the setting in
the API call.
Binaries names for the test programs have been renamed: instead of
"test_real1" (for ELPA 1) and "test_real2" (for ELPA 2) and so forth, now
the binary names are "elpa1_test_real" and "elpa2_test_real" ...
Furthernote, that if neither the environment variable or the API keyword are not
set, or set to "no" or ".false.", respectively, then no qr decomposition is used
(i.e. the previous behaviour is maintained).
Any incompatibles to previous version? Any incompatibles to previous version?
--------------------------------------- ---------------------------------------
As mentioned before, the ABI of ELPA has changed! It will be necessary As mentioned before, the ABI of ELPA has changed! It will be necessary
to rebuild the programs using ELPA, if this new version should be used. to rebuild the programs using ELPA, if this new version should be used.
Beware, using the new library with code which was build with an older version Beware, using the new library with code which was build with an older verion
should not even run. If it does, the results will be wrong ! should not even run. If it does, the results will be wrong !
Among others, the ELPA drivers are now functions, which return a logical
"success" value, which is false in case that an error occured.
Please, catch this error flag in your user code! See the the examples in the
subdirectoy "./test".
...@@ -100,9 +100,6 @@ ...@@ -100,9 +100,6 @@
/* use OpenMP threading */ /* use OpenMP threading */
#undef WITH_OPENMP #undef WITH_OPENMP
/* use QR decomposition */
#undef WITH_QR
/* can use real_avx_block2 kernel */ /* can use real_avx_block2 kernel */
#undef WITH_REAL_AVX_BLOCK2_KERNEL #undef WITH_REAL_AVX_BLOCK2_KERNEL
......
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for elpa 2014.06.004. # Generated by GNU Autoconf 2.69 for elpa 2015.02.001.
# #
# Report bugs to <elpa-library@rzg.mpg.de>. # Report bugs to <elpa-library@rzg.mpg.de>.
# #
...@@ -590,8 +590,8 @@ MAKEFLAGS= ...@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package. # Identity of this package.
PACKAGE_NAME='elpa' PACKAGE_NAME='elpa'
PACKAGE_TARNAME='elpa' PACKAGE_TARNAME='elpa'
PACKAGE_VERSION='2014.06.004' PACKAGE_VERSION='2015.02.001'
PACKAGE_STRING='elpa 2014.06.004' PACKAGE_STRING='elpa 2015.02.001'
PACKAGE_BUGREPORT='elpa-library@rzg.mpg.de' PACKAGE_BUGREPORT='elpa-library@rzg.mpg.de'
PACKAGE_URL='' PACKAGE_URL=''
   
...@@ -700,8 +700,6 @@ WITH_REAL_GENERIC_KERNEL_FALSE ...@@ -700,8 +700,6 @@ WITH_REAL_GENERIC_KERNEL_FALSE
WITH_REAL_GENERIC_KERNEL_TRUE WITH_REAL_GENERIC_KERNEL_TRUE
SCALAPACK_FCFLAGS SCALAPACK_FCFLAGS
SCALAPACK_LDFLAGS SCALAPACK_LDFLAGS
WITH_QR_FALSE
WITH_QR_TRUE
OPENMP_FCFLAGS OPENMP_FCFLAGS
WITH_OPENMP_FALSE WITH_OPENMP_FALSE
WITH_OPENMP_TRUE WITH_OPENMP_TRUE
...@@ -830,7 +828,6 @@ enable_papi ...@@ -830,7 +828,6 @@ enable_papi
with_avx_optimization with_avx_optimization
with_openmp with_openmp
enable_openmp enable_openmp
with_qr
with_only_real_generic_kernel with_only_real_generic_kernel
with_only_real_generic_simple_kernel with_only_real_generic_simple_kernel
with_only_real_sse_kernel with_only_real_sse_kernel
...@@ -1414,7 +1411,7 @@ if test "$ac_init_help" = "long"; then ...@@ -1414,7 +1411,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing. # Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh. # This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF cat <<_ACEOF
\`configure' configures elpa 2014.06.004 to adapt to many kinds of systems. \`configure' configures elpa 2015.02.001 to adapt to many kinds of systems.
   
Usage: $0 [OPTION]... [VAR=VALUE]... Usage: $0 [OPTION]... [VAR=VALUE]...
   
...@@ -1484,7 +1481,7 @@ fi ...@@ -1484,7 +1481,7 @@ fi
   
if test -n "$ac_init_help"; then if test -n "$ac_init_help"; then
case $ac_init_help in case $ac_init_help in
short | recursive ) echo "Configuration of elpa 2014.06.004:";; short | recursive ) echo "Configuration of elpa 2015.02.001:";;
esac esac
cat <<\_ACEOF cat <<\_ACEOF
   
...@@ -1519,7 +1516,6 @@ Optional Packages: ...@@ -1519,7 +1516,6 @@ Optional Packages:
ftimings), default no. ftimings), default no.
--with-avx-optimization use AVX optimization, default no.