Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • wslda wslda
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Container Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • wtools
  • wsldawslda
  • Wiki
  • Setting up diagonalization engine

Setting up diagonalization engine · Changes

Page history
Create Setting up diagonalization engine authored Dec 09, 2020 by Gabriel Wlazłowski's avatar Gabriel Wlazłowski
Hide whitespace changes
Inline Side-by-side
Setting-up-diagonalization-engine.md 0 → 100644
View page @ 3599471e
# 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:
```c
// select diagonalization routine
#define DIAGONALIZATION_ROUTINE ELPA
```
Moreover, you need to inspect carefully part:
```c
// ---------------------- ELPA SETTINGS ---------------------------
// Fill this part only if ELPA library is used for diagonnalization
// uncomment it if you want to activate GPU for diagonalizations
#define ELPA_USE_GPU
// Select ELPA kernels
#define ELPS_USE_SOLVER ELPA_SOLVER_1STAGE
#define ELPA_USE_COMPLEX_KERNEL ELPA_2STAGE_COMPLEX_DEFAULT
#define ELPA_USE_REAL_KERNEL ELPA_2STAGE_REAL_DEFAULT
// Fraction of eigenvectors to be extracted in each cycle.
// 1.0 corresponds to extraction if all eigenvectors (USE IT IF YOU YOU ARE NOT SURE)
// NOTE: value of this parameter should assure that all eigenstates below requested Ec are extracted.
// NOTE: For 3D case this value typically can be set to 0.78
#define ELPA_NEV_FRACTION 1.0
```
## Documentation
1. [Eigenvalue SoLvers for Petaflop-Applications (ELPA)](https://elpa.mpcdf.mpg.de/)
2. [Wiki: Eigenvalue SoLvers for Petaflop-Applications (ELPA)](https://gitlab.mpcdf.mpg.de/elpa/elpa/-/wikis/home)
3. [ELPA installation guide](ELPA installation guide)
## Publications about ELPA performance
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:
```c
#define DIAGONALIZATION_ROUTINE PZHEEVR
```
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.
# Benchmarks
| matrix size | p | q | mb | nb | prec. | routine | system | time [sec] | cost |
| ------------|---|---|----|----|--------|---------|--------|------------|------|
| **221,184 = 2*48^3** |46 | 84| 16 | 16 | complex| ELPA (1-GPU) | Summit | **736** | **18.8 nh** |
| 221,184 |46 | 84| 16 | 16 | complex| ELPA (2-GPU) | Summit | 3098 | 79.2 nh |
| 221,184 |46 | 84| 16 | 16 | complex| PZHEEVD | Summit | 5995 | 153.2 nh |
| **524,288=2*64^3** | 96 | 112 | 16 | 16 | complex| ELPA (1-GPU) | Summit | **2,217** | **157.7 nh** |
| **746,496=2*72^3** | 112 | 192 | 16 | 16 | complex| ELPA (1-GPU) | Summit | **3,436** | **488.7 nh** |
| **128,000 = 2*40^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 |
| **147,456=4*64*24^2** | 24 | 25 | 32 | 32 | complex| ELPA (1-GPU) | Daint | **375** | **62.5 nh** |
(1-GPU): `ELPA_SOLVER_1STAGE`, `ELPA_2STAGE_COMPLEX_GPU`
(2-GPU): `ELPA_SOLVER_2STAGE`, `ELPA_2STAGE_COMPLEX_GPU`
(2-CPU): `ELPA_SOLVER_2STAGE`, `ELPA_2STAGE_COMPLEX_DEFAULT`
Clone repository
  • API version
  • Automatic interpolations
  • Auxiliary tools
  • Browsing the code
  • Broyden algorithm
  • C and CUDA
  • Campaign of calculations
  • Checking correctness of settings
  • Chemical potentials control
  • Code & Results quality
  • Common failures of static codes
  • Common failures of time dependent codes
  • Computation domain
  • Configuring GPU machine
  • Constraining densities and potentials
View All Pages