Commit 52b3ce2a authored by Andreas Marek's avatar Andreas Marek
Browse files

Fix typos and markdown

parent 919e9ba0
### How to contribute to the *ELPA* library: ### ### How to contribute to the *ELPA* library: ###
We are very happy and gratefull if you are willing to help us improve *ELPA*. We are very happy and grateful if you are willing to help us improve *ELPA*.
Thus, we would like to make this process as simple as possible for you, Thus, we would like to make this process as simple as possible for you,
but at the same time still keep it manageable for us but at the same time still keep it manageable for us
......
...@@ -7,8 +7,8 @@ in the (near) future from the *ELPA* library. ...@@ -7,8 +7,8 @@ in the (near) future from the *ELPA* library.
### A) Deprecated interfaces:### ### A) Deprecated interfaces:###
With the release of ELPA 2017.05.001 a new, more general API for the library has With the release of ELPA 2017.05.001 a new, more general API for the library has
been published. All new features of ELPA will only be accesible via this new interface. been published. All new features of ELPA will only be accessible via this new interface.
For ease of transion, the old API as defined in release ELPA 2016.11.001 has been frozen in For ease of transiiton, the old API as defined in release ELPA 2016.11.001 has been frozen in
and will be still supported for some time, albeit without any new features. This old API has been and will be still supported for some time, albeit without any new features. This old API has been
deprecated in release ELPA 2019.11.001 and has been removed. deprecated in release ELPA 2019.11.001 and has been removed.
......
...@@ -7,8 +7,8 @@ With release of **version ELPA-2017.05.001** the build process has been signific ...@@ -7,8 +7,8 @@ With release of **version ELPA-2017.05.001** the build process has been signific
which makes it easier to install the *ELPA* library. which makes it easier to install the *ELPA* library.
The old, obsolete legacy API will be deprecated in the future ! 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 Already 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. is no reason to keep the legacy API around for too long.
The release ELPA 2018.11.001 was the last release, where the legacy API has been 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). enabled by default (and can be disabled at build time).
...@@ -17,95 +17,97 @@ can be still switched on at build time. ...@@ -17,95 +17,97 @@ can be still switched on at build time.
With this release ELPA 2019.11.001, the legacy API will be deprecated and not supported anymore. With this release ELPA 2019.11.001, the legacy API will be deprecated and not supported anymore.
The release of ELPA 2019.11.001 does change the API and ABI compared to the release 2019.05.002, since The release of ELPA 2019.11.001 does change the API and ABI compared to the release 2019.05.002, since
the legacy API has been droped. the legacy API has been dropped.
## How to install *ELPA* ## ## 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 having a look at the [*ELPA* webpage*] (http://elpa.mpcdf.mpg.de) it is worth having a look at the [*ELPA* webpage*](http://elpa.mpcdf.mpg.de)
and/or the repositories of your Linux distribution: there exist and/or the repositories of your Linux distribution: there exist
pre-build packages for a number of Linux distributions like Fedora, pre-build packages for a number of Linux distributions like Fedora,
Debian, and OpenSuse. More, will hopefully follow in the future. Debian, and OpenSuse. More, will hopefully follow 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`
autotools procedure. This is the **only supported way** how to build and install *ELPA*. autotools procedure. This is the **only supported way** how to build and install *ELPA*.
If you obtained *ELPA* from the official git repository, you will not find If you obtained *ELPA* from the official git repository, you will not find
the needed configure script! You will have to create the configure scipt with autoconf. the needed configure script! You will have to create the configure script with autoconf.
## (A): Installing *ELPA* as library with configure ## ## (A): Installing *ELPA* as library with configure ##
*ELPA* can be installed with the build steps *ELPA* can be installed with the build steps
- configure - `configure`
- make - `make`
- make check | or make check CHECK_LEVEL=extended - `make check` | or `make check CHECK_LEVEL=extended`
- make install - `make install`
Please look at configure --help for all available options. Please look at `configure --help` for all available options.
An excerpt of the most important (*ELPA* specific) options reads as follows: An excerpt of the most important (*ELPA* specific) options reads as follows:
| configure option | description | | configure option | description |
|:------------------------------------ |:----------------------------------------------------- | |:------------------------------------ |:----------------------------------------------------- |
| --enable-legacy-interface | build legacy API, will not 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-optional-argument-in-C-API` | treat error arguments in C-API as optional |
| --enable-openmp | use OpenMP threading, default no. | | `--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-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 | | `--enable-single-precision` | build with single precision version |
| --disable-timings | more detailed timing, default yes <br> **If disabled some features like autotune will <br> not work anymmore !** | | `--disable-timings` | more detailed timing, default yes <br> **If disabled some features like autotune will <br> not work anymmore !** |
| --disable-band-to-full-blocking | build ELPA2 with blocking in band_to_full <br> (default:enabled) | | `--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-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 | | `--disable-generic` | do not build GENERIC kernels, default: enabled |
| --enable-sparc64 | do not build SPARC64 kernels, default: disabled | | `--enable-sparc64` | do not build SPARC64 kernels, default: disabled |
| --disable-sse | do not build SSE kernels, default: enabled | | `--disable-sse` | do not build SSE kernels, default: enabled |
| --disable-sse-assembly | do not build SSE_ASSEMBLY kernels, default: enabled | | `--disable-sse-assembly` | do not build SSE_ASSEMBLY kernels, default: enabled |
| --disable-avx | do not build AVX kernels, default: enabled | | `--disable-avx` | do not build AVX kernels, default: enabled |
| --disable-avx2 | do not build AVX2 kernels, default: enabled | | `--disable-avx2` | do not build AVX2 kernels, default: enabled |
| --enable-avx512 | build AVX512 kernels, default: disabled | | `--enable-avx512` | build AVX512 kernels, default: disabled |
| --enable-gpu | build GPU kernels, default: disabled | | `--enable-gpu` | build GPU kernels, default: disabled |
| --enable-bgp | build BGP kernels, default: disabled | | `--enable-bgp` | build BGP kernels, default: disabled |
| --enable-bgq | build BGQ kernels, default: disabled | | `--enable-bgq` | build BGQ kernels, default: disabled |
| --with-mpi=[yes|no] | compile with MPI. Default: yes | | `--with-mpi=[yes|no]` | compile with MPI. Default: yes |
| --with-cuda-path=PATH | prefix where CUDA is installed [default=auto] | | `--with-cuda-path=PATH` | prefix where CUDA is installed [default=auto] |
| --with-cuda-sdk-path=PATH | prefix where CUDA SDK is installed [default=auto] | | `--with-cuda-sdk-path=PATH` | prefix where CUDA SDK is installed [default=auto] |
| --with-GPU-compute-capability=VALUE | use compute capability VALUE for GPU version, <br> default: "sm_35" | | `--with-GPU-compute-capability=VALUE` | use compute capability VALUE for GPU version, <br> default: "sm_35" |
| --with-fixed-real-kernel=KERNEL | compile with only a single specific real kernel. | | `--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-fixed-complex-kernel=KERNEL` | compile with only a single specific complex kernel. |
| --with-gpu-support-only | Compile and always use the GPU version | | `--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-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-real-kernel=KERNEL` | set the real kernel KERNEL as default |
| --with-default-complex-kernel=KERNEL| set the compplex 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-scalapack-tests` | build SCALAPACK test cases for performance <br> omparison, needs MPI, default no. |
| --enable-autotuning | enables autotuning functionality, default yes | | `--enable-autotuning` | enables autotuning functionality, default yes |
| --enable-c-tests | enables the C tests for elpa, 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 | | `--disable-assumed-size` | do NOT use assumed-size Fortran arrays. default use |
| --enable-scalapack-tests | build also ScalaPack tests for performance comparison; needs MPI | | `--enable-scalapack-tests` | build also ScalaPack tests for performance comparison; needs MPI |
| --disable-Fortran2008-features | disable Fortran 2008 if compiler does not support it | | `--disable-Fortran2008-features` | disable Fortran 2008 if compiler does not support it |
| --enable-pyhton | build and install python wrapper, default no | | `--enable-pyhton` | build and install python wrapper, default no |
| --enable-python-tests | enable python tests, default no. | | `--enable-python-tests` | enable python tests, default no. |
| --enable-skew-symmetric-support | enable support for real valued skew-symmetric matrices | | `--enable-skew-symmetric-support` | enable support for real valued skew-symmetric matrices |
| --enable-store-build-config | stores the build config in the library object | | `--enable-store-build-config` | stores the build config in the library object |
| --64bit-integer-math-support | assumes that BLAS/LAPACK/SCALAPACK use 64bit integers (experimentatl) | | `--64bit-integer-math-support` | assumes that BLAS/LAPACK/SCALAPACK use 64bit integers (experimentatl) |
| --64bit-integer-mpi-support | assumes that MPI uses 64bit integers (experimental) | | `--64bit-integer-mpi-support` | assumes that MPI uses 64bit integers (experimental) |
| --heterogenous-cluster-support | allows ELPA to run on clusters of nodes with different Intel CPUs (experimental) | | `--heterogenous-cluster-support` | allows ELPA to run on clusters of nodes with different Intel CPUs (experimental) |
We recommend that you do not build ELPA in its main directory but that you use it We recommend that you do not build ELPA in its main directory but that you use it
in a sub-directory: in a sub-directory:
```
mkdir build mkdir build
cd build cd build
../configure [with all options needed for your system, see below] ../configure [with all options needed for your system, see below]
```
In this way, you have a clean separation between original *ELPA* source files and the compiled In this way, you have a clean separation between original *ELPA* source files and the compiled
object files object files
Please note, that it is necessary to set the **compiler options** like optimisation flags etc. Please note, that it is necessary to set the **compiler options** like optimisation flags etc.
for the Fortran and C part. for the Fortran and C part.
For example sth. like this is a usual way: ./configure FCFLAGS="-O2 -mavx" CFLAGS="-O2 -mavx" For example sth. like this is a usual way: `./configure FCFLAGS="-O2 -mavx" CFLAGS="-O2 -mavx"`
For details, please have a look at the documentation for the compilers of your choice. For details, please have a look at the documentation for the compilers of your choice.
**Note** that most kernels can only be build if the correct compiler flags for this kernel (e.g. AVX-512) **Note** that most kernels can only be build if the correct compiler flags for this kernel (e.g. AVX-512)
...@@ -118,7 +120,7 @@ It is possible to build the *ELPA* library with or without MPI support. ...@@ -118,7 +120,7 @@ It is possible to build the *ELPA* library with or without MPI support.
Normally *ELPA* is build with MPI, in order to speed-up calculations by using distributed Normally *ELPA* is build with MPI, in order to speed-up calculations by using distributed
parallelisation over several nodes. This is, however, only reasonably if the programs parallelisation over several nodes. This is, however, only reasonably if the programs
calling the *ELPA* library are already MPI parallized, and *ELPA* can use the same calling the *ELPA* library are already MPI parallelized, and *ELPA* can use the same
block-cyclic distribution of data as in the calling program. block-cyclic distribution of data as in the calling program.
Programs which do not support MPI parallelisation can still make use of the *ELPA* library if it Programs which do not support MPI parallelisation can still make use of the *ELPA* library if it
...@@ -126,7 +128,7 @@ has also been build without MPI support. ...@@ -126,7 +128,7 @@ has also been build without MPI support.
If you want to build *ELPA* with MPI support, please have a look at "A) Setting of MPI compiler and libraries". If you want to build *ELPA* with MPI support, please have a look at "A) Setting of MPI compiler and libraries".
For builds without MPI support, please have a look at "B) Building *ELPA* without MPI support". For builds without MPI support, please have a look at "B) Building *ELPA* without MPI support".
**NOTE** that if *ELPA* is build without MPI support, it will be serial unless the OpenMP parallization is **NOTE** that if *ELPA* is build without MPI support, it will be serial unless the OpenMP parallelization is
explicitely enabled. explicitely enabled.
Please note, that it is absolutely supported that both versions of the *ELPA* library are build Please note, that it is absolutely supported that both versions of the *ELPA* library are build
...@@ -138,14 +140,18 @@ In the standard case *ELPA* needs a MPI compiler and MPI libraries. The configur ...@@ -138,14 +140,18 @@ In the standard case *ELPA* needs a MPI compiler and MPI libraries. The configur
will try to set this by itself. If, however, on the build system the compiler wrapper will try to set this by itself. If, however, on the build system the compiler wrapper
cannot automatically found, it is recommended to set it by hand with a variable, e.g. cannot automatically found, it is recommended to set it by hand with a variable, e.g.
```
configure FC=mpif90 configure FC=mpif90
```
In some cases, on your system different MPI libraries and compilers are installed. Then it might happen In some cases, on your system different MPI libraries and compilers are installed. Then it might happen
that during the build step an error like "no module mpi" or "cannot open module mpi" is given. that during the build step an error like "no module mpi" or "cannot open module mpi" is given.
You can disable that the *ELPA* library uses a MPI modules (and instead uses MPI header files) by You can disable that the *ELPA* library uses a MPI modules (and instead uses MPI header files) by
adding adding
```
--disable-mpi-module --disable-mpi-module
```
to the configure call. to the configure call.
...@@ -156,18 +162,22 @@ Please continue reading at "C) Enabling GPU support" ...@@ -156,18 +162,22 @@ Please continue reading at "C) Enabling GPU support"
If you want to build *ELPA* without MPI support, add If you want to build *ELPA* without MPI support, add
```
--with-mpi=no --with-mpi=no
```
to your configure call. to your configure call.
You have to specify which compilers should be used with e.g., You have to specify which compilers should be used with e.g.,
```
configure FC=gfortran --with-mpi=no configure FC=gfortran --with-mpi=no
```
**DO NOT specify a MPI compiler here!** **DO NOT specify a MPI compiler here!**
Note, that the installed *ELPA* library files will be suffixed with Note, that the installed *ELPA* library files will be suffixed with
"_onenode", in order to discriminate this build from possible ones with MPI. `_onenode`, in order to discriminate this build from possible ones with MPI.
Please continue reading at "C) Enabling GPU support" Please continue reading at "C) Enabling GPU support"
...@@ -181,13 +191,17 @@ For GPU support, NVIDIA GPUs with compute capability >= 3.5 are needed. ...@@ -181,13 +191,17 @@ For GPU support, NVIDIA GPUs with compute capability >= 3.5 are needed.
GPU support is set with GPU support is set with
```
--enable-gpu --enable-gpu
```
It might be necessary to also set the options (please see configure --help) It might be necessary to also set the options (please see configure --help)
```
--with-cuda-path --with-cuda-path
--with-cuda-sdk-path --with-cuda-sdk-path
--with-GPU-compute-capability --with-GPU-compute-capability
```
Please continue reading at "D) Enabling OpenMP support". Please continue reading at "D) Enabling OpenMP support".
...@@ -246,21 +260,24 @@ and *SCALAPACK* implementation from *Intel's MKL* library. ...@@ -246,21 +260,24 @@ and *SCALAPACK* implementation from *Intel's MKL* library.
Together with the Intel Fortran Compiler the call to configure might then look like: Together with the Intel Fortran Compiler the call to configure might then look like:
```
configure SCALAPACK_LDFLAGS="-L$MKL_HOME/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential \ configure SCALAPACK_LDFLAGS="-L$MKL_HOME/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential \
-lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -Wl,-rpath,$MKL_HOME/lib/intel64" \ -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -Wl,-rpath,$MKL_HOME/lib/intel64" \
SCALAPACK_FCFLAGS="-L$MKL_HOME/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential \ SCALAPACK_FCFLAGS="-L$MKL_HOME/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential \
-lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -I$MKL_HOME/include/intel64/lp64" -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -I$MKL_HOME/include/intel64/lp64"
```
and for *INTEL MKL* together with *GNU GFORTRAN* : and for *INTEL MKL* together with *GNU GFORTRAN* :
```
configure SCALAPACK_LDFLAGS="-L$MKL_HOME/lib/intel64 -lmkl_scalapack_lp64 -lmkl_gf_lp64 -lmkl_sequential \ configure SCALAPACK_LDFLAGS="-L$MKL_HOME/lib/intel64 -lmkl_scalapack_lp64 -lmkl_gf_lp64 -lmkl_sequential \
-lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -Wl,-rpath,$MKL_HOME/lib/intel64" \ -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -Wl,-rpath,$MKL_HOME/lib/intel64" \
SCALAPACK_FCFLAGS="-L$MKL_HOME/lib/intel64 -lmkl_scalapack_lp64 -lmkl_gf_lp64 -lmkl_sequential \ SCALAPACK_FCFLAGS="-L$MKL_HOME/lib/intel64 -lmkl_scalapack_lp64 -lmkl_gf_lp64 -lmkl_sequential \
-lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -I$MKL_HOME/include/intel64/lp64" -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -I$MKL_HOME/include/intel64/lp64"
```
Please, for the correct link-line refer to the documentation of the correspondig library. In case of *Intel's MKL* we Please, for the correct link-line refer to the documentation of the correspondig library. In case of *Intel's MKL* we
suggest the [Intel Math Kernel Library Link Line Advisor] (https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor). suggest the [Intel Math Kernel Library Link Line Advisor](https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor).
### Choice of ELPA2 compute kernels ### ### Choice of ELPA2 compute kernels ###
...@@ -271,14 +288,17 @@ others are disabled by default and must be enabled if they are wanted. ...@@ -271,14 +288,17 @@ others are disabled by default and must be enabled if they are wanted.
One can enable "kernel classes" by setting e.g. One can enable "kernel classes" by setting e.g.
```
--enable-avx2 --enable-avx2
```
This will try to build all the AVX2 kernels. Please see configure --help for all options This will try to build all the AVX2 kernels. Please see configure --help for all options
With With
```
--disable-avx2 --disable-avx2
```
one chan choose not to build the AVX2 kernels. one chan choose not to build the AVX2 kernels.
...@@ -289,8 +309,8 @@ It is possible to build *ELPA* with as many kernels as desired, the user can the ...@@ -289,8 +309,8 @@ It is possible to build *ELPA* with as many kernels as desired, the user can the
kernels should be used. kernels should be used.
It this is not desired, it is possible to build *ELPA* with only one (not necessary the same) kernel for the It this is not desired, it is possible to build *ELPA* with only one (not necessary the same) kernel for the
real and complex valued case, respectively. This can be done with the "--with-fixed-real-kernel=NAME" or real and complex valued case, respectively. This can be done with the `--with-fixed-real-kernel=NAME` or
"--with-fixed-complex-kernel=NAME" configure options. For details please do a "configure --help" `--with-fixed-complex-kernel=NAME` configure options. For details please do a "configure --help"
#### Cross compilation #### #### Cross compilation ####
...@@ -325,13 +345,15 @@ AVX-2 instructions this will lead to a crash. ...@@ -325,13 +345,15 @@ AVX-2 instructions this will lead to a crash.
One can avoid this unfortunate situation by disabling instructions set which are _not_ supported on the target system. One can avoid this unfortunate situation by disabling instructions set which are _not_ supported on the target system.
In the case above, setting In the case above, setting
```
--disable-avx2 --disable-avx2
```
during build, will remdy this problem. during build, will remdy this problem.
### Doxygen documentation ### ### Doxygen documentation ###
A doxygen documentation can be created with the "--enable-doxygen-doc" configure option A doxygen documentation can be created with the `--enable-doxygen-doc` configure option
### Some examples ### ### Some examples ###
...@@ -345,22 +367,24 @@ with GNU compiler for the C part. ...@@ -345,22 +367,24 @@ with GNU compiler for the C part.
Remarks: Remarks:
- you have to know the name of the Intel Fortran compiler wrapper - you have to know the name of the Intel Fortran compiler wrapper
- you do not have to specify a C compiler (with CC); GNU C compiler is recognized automatically - you do not have to specify a C compiler (with CC); GNU C compiler is recognized automatically
- you should specify compiler flags for Intel Fortran compiler; in the example only "-O3 -xAVX2" is set - you should specify compiler flags for Intel Fortran compiler; in the example only `-O3 -xAVX2` is set
- you should be careful with the CFLAGS, the example shows typical flags - you should be careful with the CFLAGS, the example shows typical flags
```
FC=mpi_wrapper_for_intel_Fortran_compiler CC=mpi_wrapper_for_gnu_C_compiler ./configure FCFLAGS="-O3 -xAVX2" CFLAGS="-O3 -march=native -mavx2 -mfma -funsafe-loop-optimizations -funsafe-math-optimizations -ftree-vect-loop-version -ftree-vectorize" --enable-option-checking=fatal SCALAPACK_LDFLAGS="-L$MKLROOT/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread " SCALAPACK_FCFLAGS="-I$MKL_HOME/include/intel64/lp64" FC=mpi_wrapper_for_intel_Fortran_compiler CC=mpi_wrapper_for_gnu_C_compiler ./configure FCFLAGS="-O3 -xAVX2" CFLAGS="-O3 -march=native -mavx2 -mfma -funsafe-loop-optimizations -funsafe-math-optimizations -ftree-vect-loop-version -ftree-vectorize" --enable-option-checking=fatal SCALAPACK_LDFLAGS="-L$MKLROOT/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread " SCALAPACK_FCFLAGS="-I$MKL_HOME/include/intel64/lp64"
```
2. Building with GNU Fortran compiler and GNU C compiler: 2. Building with GNU Fortran compiler and GNU C compiler:
Remarks: Remarks:
- you have to know the name of the GNU Fortran compiler wrapper - you have to know the name of the GNU Fortran compiler wrapper
- you DO have to specify a C compiler (with CC); GNU C compiler is recognized automatically - you DO have to specify a C compiler (with CC); GNU C compiler is recognized automatically
- you should specify compiler flags for GNU Fortran compiler; in the example only "-O3 -march=native -mavx2 -mfma" is set - you should specify compiler flags for GNU Fortran compiler; in the example only `-O3 -march=native -mavx2 -mfma` is set
- you should be careful with the CFLAGS, the example shows typical flags - you should be careful with the CFLAGS, the example shows typical flags
```
FC=mpi_wrapper_for_gnu_Fortran_compiler CC=mpi_wrapper_for_gnu_C_compiler ./configure FCFLAGS="-O3 -march=native -mavx2 -mfma" CFLAGS="-O3 -march=native -mavx2 -mfma -funsafe-loop-optimizations -funsafe-math-optimizations -ftree-vect-loop-version -ftree-vectorize" --enable-option-checking=fatal SCALAPACK_LDFLAGS="-L$MKLROOT/lib/intel64 -lmkl_scalapack_lp64 -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread " SCALAPACK_FCFLAGS="-I$MKL_HOME/include/intel64/lp64" FC=mpi_wrapper_for_gnu_Fortran_compiler CC=mpi_wrapper_for_gnu_C_compiler ./configure FCFLAGS="-O3 -march=native -mavx2 -mfma" CFLAGS="-O3 -march=native -mavx2 -mfma -funsafe-loop-optimizations -funsafe-math-optimizations -ftree-vect-loop-version -ftree-vectorize" --enable-option-checking=fatal SCALAPACK_LDFLAGS="-L$MKLROOT/lib/intel64 -lmkl_scalapack_lp64 -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread " SCALAPACK_FCFLAGS="-I$MKL_HOME/include/intel64/lp64"
```
2. Building with Intel Fortran compiler and Intel C compiler: 2. Building with Intel Fortran compiler and Intel C compiler:
......
## A list of known (and hopefully soon solved) issues of *ELPA* ## ## A list of known (and hopefully soon solved) issues of *ELPA* ##
For more details and recent updates please visit the online [issue system] (https://gitlab.mpcdf.mpg.de/elpa/elpa/issues) 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. Issues which are not mentioned in a newer release are (considered as) solved.
### ELPA 2019.11.001 release ### ### ELPA 2019.11.001 release ###
...@@ -31,7 +31,7 @@ Issues which are not mentioned in a newer release are (considered as) solved. ...@@ -31,7 +31,7 @@ Issues which are not mentioned in a newer release are (considered as) solved.
- at the moment no issues are known - at the moment no issues are known
### ELPA 2017.05.001 release ### ### ELPA 2017.05.001 release ###
- accidently a memory leak has been introduced - accidentaly a memory leak has been introduced
### ELPA 2017.05.001.rc2 release ### ### ELPA 2017.05.001.rc2 release ###
- compilation with Intel Compiler 2018 beta does not work - compilation with Intel Compiler 2018 beta does not work
...@@ -55,6 +55,6 @@ Issues which are not mentioned in a newer release are (considered as) solved. ...@@ -55,6 +55,6 @@ Issues which are not mentioned in a newer release are (considered as) solved.
### ELPA 2016.05.001 release ### ### ELPA 2016.05.001 release ###
- QR decomposition fails for certain combinations of matrix sizes, number of eigenvalues to compute and block size - QR decomposition fails for certain combinations of matrix sizes, number of eigenvalues to compute and block size
- The generated check-scripts (in the step "make check") do not call the binary with "mpiexec" when *ELPA* is build with - The generated check-scripts (in the step "make check") do not call the binary with `mpiexec` when *ELPA* is build with
MPI MPI
...@@ -6,7 +6,7 @@ The current release is ELPA 2019.11.001 The current supported API version ...@@ -6,7 +6,7 @@ The current release is ELPA 2019.11.001 The current supported API version
is 20190501. This release supports the earliest API version 20170403. is 20190501. This release supports the earliest API version 20170403.
The old, obsolete legacy API will be deprecated in the future ! 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 Already 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. is no reason to keep the legacy API arround for too long.
The release ELPA 2018.11.001 was the last release, where the legacy API has been The release ELPA 2018.11.001 was the last release, where the legacy API has been
...@@ -81,7 +81,7 @@ Nonetheless, we are grateful if you cite the following publications: ...@@ -81,7 +81,7 @@ Nonetheless, we are grateful if you cite the following publications:
If you use ELPA in general: If you use ELPA in general:
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ämer, 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).
......
...@@ -11,14 +11,14 @@ the user application) ...@@ -11,14 +11,14 @@ the user application)
1. including the *ELPA* modules 1. including the *ELPA* modules
```Fortran ```fortran
use elpa1 use elpa1
use elpa2 ! this step was only needed if you wanted to use the ELPA 2stage solver use elpa2 ! this step was only needed if you wanted to use the ELPA 2stage solver
``` ```
2. invoke the "elpa_get_communicators" routine, in order to obtain the row/column MPI communicators needed by *ELPA* 2. invoke the `elpa_get_communicators` routine, in order to obtain the row/column MPI communicators needed by *ELPA*
```Fortran ```fortran
mpierr = elpa_get_communicators(mpi_comm_world, my_prow, my_pcol, & mpierr = elpa_get_communicators(mpi_comm_world, my_prow, my_pcol, &
mpi_comm_rows, mpi_comm_cols) mpi_comm_rows, mpi_comm_cols)
``` ```
...@@ -45,7 +45,7 @@ the user application): ...@@ -45,7 +45,7 @@ the user application):
1. include the correct *ELPA* module and define a name for the ELPA instance 1. include the correct *ELPA* module and define a name for the ELPA instance
```Fortran ```fortran
use elpa ! this is the only module needed for ELPA use elpa ! this is the only module needed for ELPA
class(elpa_t), pointer :: e ! name the ELPA instance "e" class(elpa_t), pointer :: e ! name the ELPA instance "e"
...@@ -53,7 +53,7 @@ the user application): ...@@ -53,7 +53,7 @@ the user application):
2. initialize ELPA and create the instance 2. initialize ELPA and create the instance
```Fortran ```fortran
if (elpa_init(20170403) /= ELPA_OK) then ! put here the version number of the API if (elpa_init(20170403) /= ELPA_OK) then ! put here the version number of the API
error stop "ELPA API version not supported" ! which you are using error stop "ELPA API version not supported" ! which you are using
endif endif
...@@ -63,7 +63,7 @@ the user application): ...@@ -63,7 +63,7 @@ the user application):
3. set the parameters which describe the matrix setup and the MPI 3. set the parameters which describe the matrix setup and the MPI
```Fortran ```fortran
call e%set("na", na,success) ! size of matrix call e%set("na", na,success) ! size of matrix
call e%set("local_nrows", na_rows,success) ! MPI process local rows of the distributed matrixdo the call e%set("local_nrows", na_rows,success) ! MPI process local rows of the distributed matrixdo the
! desired task with the *ELPA* library, which could be ! desired task with the *ELPA* library, which could be
...@@ -79,11 +79,11 @@ the user application): ...@@ -79,11 +79,11 @@ the user application):
4. setup the ELPA instance 4. setup the ELPA instance
```Fortran ```fortran
success = e%setup() success = e%setup()
``` ```
5. set/get any possible option (see man pages, or the document USERS_GUIDE.md) 5. set/get any possible option (see man pages, or the document [USERS_GUIDE.md](USERS_GUIDE.md))
```Fortran ```Fortran
call e%get("qr", qr, success) ! query whether QR-decomposition is set call e%get("qr", qr, success) ! query whether QR-decomposition is set
...@@ -98,7 +98,7 @@ the user application): ...@@ -98,7 +98,7 @@ the user application):
``` ```
At the moment, the following configurable runtime options are supported ([see here if you cannot read it in your editor] (https://gitlab.mpcdf.mpg.de/elpa/elpa/wikis/USERS_GUIDE)): At the moment, the following configurable runtime options are supported ([see here if you cannot read it in your editor](https://gitlab.mpcdf.mpg.de/elpa/elpa/wikis/USERS_GUIDE)):