ChASE has gone a complex restructuring process that included major changes in the hierarchical folder structure, a clearer division between parallel implementations and a new Test-Driven-Development which introduced unit testing for many of its routines. In particular:
- A clear division between Chase algorithm and their implementation has been maintained
- The name of the base virtual class has changed from Chase to ChaseBase
- All Implementation for sequential and parallel CPU/GPU architecture has been clearly separated and based on the new ChaseBase class.
- All reliance on external numerical libraries (BLAS, LAPACK, etc.) has been separated and templated
- Utilities for the initialization of pure MPI, cuda-aware MPI and NCCL grids has been redefined and clearly separated
- Implementation of the kernels have been grouped in a
linalg
folder which contains- matrix classes for shared-memory CPU and GPU architectures
- matrix classes for distinct distribution of matrices and vectors
- shared memory kernels
- distributed CPU kernels
- single GPU kernels
- distributed GPU kernels
- Functionalities for mixed precision have been added
- Unit testing has been introduced for
- the grid functionalities
- matrix type functionalities
- all kernels for the separate cases (CPU, GPU, distributed CPU, etc.)
- Examples have been generalized and redistribution of matrices has been abstracted
- A template for Collaboration Agreement (CLA) has been added