|
|
# ELPA Library
|
|
|
For static calculations it is recommend to use ELPA Library, which has better performance than ScaLapack. In particularly, ELPA allows for utilization of GPUs which provide significant boost for calculations. In order to activate ELPA lib in [predefines.h](https://gitlab.fizyka.pw.edu.pl/gabrielw/wslda/-/tree/public/st-myproject-template/predefines.h) set:
|
|
|
For static calculations, it is recommended to use ELPA Library, which has better performance than ScaLapack. In particular, ELPA allows for the utilization of GPUs which provide a significant boost for calculations. In order to activate ELPA lib in [predefines.h](https://gitlab.fizyka.pw.edu.pl/gabrielw/wslda/-/tree/public/st-myproject-template/predefines.h) set:
|
|
|
```c
|
|
|
// select diagonalization routine
|
|
|
#define DIAGONALIZATION_ROUTINE ELPA
|
... | ... | @@ -33,7 +33,7 @@ Moreover, you need to inspect carefully part: |
|
|
1. [GPU-Acceleration of the ELPA2 Distributed Eigensolver for Dense Symmetric and Hermitian Eigenproblems](https://arxiv.org/abs/2002.10991)
|
|
|
|
|
|
# ScaLapack library
|
|
|
If target system does not provide ELPA libray user can use (standard) diagonalization library: [ScaLAPACK](http://www.netlib.org/scalapack/). W-SLDA Toolkit can utilize following ScaLapack diagonalization engines:
|
|
|
If the target system does not provide ELPA library user can use (standard) diagonalization library: [ScaLAPACK](http://www.netlib.org/scalapack/). W-SLDA Toolkit can utilize the following ScaLapack diagonalization engines:
|
|
|
```c
|
|
|
#define DIAGONALIZATION_ROUTINE PZHEEVR
|
|
|
```
|
... | ... | @@ -41,11 +41,12 @@ or |
|
|
```c
|
|
|
#define DIAGONALIZATION_ROUTINE PZHEEVD
|
|
|
```
|
|
|
It is recommended to use `PZHEEVR`. This engine takes advantage from fact that typically we extract only fraction of eigenstates. However, we find that in some rare cases (system dependent) this routine does not work correctly. In such can `PZHEEVD` should be used.
|
|
|
It is recommended to use `PZHEEVR`. This engine takes advantage from the fact that typically we extract only a fraction of eigenstates. However, we find that in some rare cases (system dependent) this routine does not work correctly. In such a case, `PZHEEVD` should be used.
|
|
|
|
|
|
# Benchmarks
|
|
|
| matrix size | p | q | mb | nb | prec. | routine | system | time [sec] | cost |
|
|
|
| ------------|---|---|----|----|--------|---------|--------|------------|------|
|
|
|
| **65,536 = 2x32^3** | 24 | 28 | 8 | 8 | complex| ELPA (1-GPU) | Summit | **118** | **0.52 nh** |
|
|
|
| **128,000 = 2x40^3** | 20 | 20 | 32 | 32 | complex| ELPA (1-GPU) | Daint | **220** | **24.4 nh** |
|
|
|
| 128,000 | 54 | 64 | 32 | 32 | complex| ELPA (2-CPU) | Daint | 677 | 54.1 nh |
|
|
|
| 128,000 | 54 | 64 | 32 | 32 | complex| PZHEEVR | Daint | 945 | 75.6 nh |
|
... | ... | |