Compilation
As ezp is wrapper library of ScaLAPACK, the following dependencies are necessary to compile any executables that use ezp.
- an implementation of
LAPACKandBLAS, such asOpenBLAS,Intel® oneAPI Math Kernel Library (oneMKL),AMD Optimizing CPU Libraries (AOCL), etc. - an implementation of
ScaLAPACK, such as the reference implementation, Intel's implementation, NVIDIA's implementation, etc. - an implementation of
MPI, such asOpenMPI,MPICH,Intel® MPIetc.
Before compiling the executables, one must ensure those libraries are available.
oneAPI
The easiest approach is to use the Intel® oneAPI toolkit.
It provides the Intel® MPI Library and the Intel® oneAPI Math Kernel Library (oneMKL) which contains a complete ScaLAPACK and LAPACK/BLAS implementation.
The following is a sample workflow that runs on Fedora.
System Libraries
Using system libraries is possible but most bundled libraries are broken/outdated on various distros. It's likely the bundled system libraries do not work for various compatibility issues. To circumvent, one then needs to manually compile all those dependencies before using them. This is cumbersome.
openSUSE has a functioning toolset.
Simply install the library and you are ready to go.
Fedora 41 has an environment that is close to usable.
The following is an example that uses system packages.
Other mainstream distros require more fixes. Still, it is not recommended due to the lack of flexibility. It may not be possible/feasible to switch to another implementation of any of those libraries.
Compilation Options
64-bit Integer
Use -DEZP_USE_64BIT_INT=ON flag in CMake, or define the macro EZP_INT64.
Name Mangling
Use -DEZP_ADD_UNDERSCORE=ON flag in CMake, or define the macro EZP_UNDERSCORE.
Standalone Solvers
Use -DEZP_STANDALONE=ON flag in CMake to compile standalone solver.
Enable OpenMP
Use -DEZP_ENABLE_OPENMP=ON flag in CMake to enable the -fopenmp compiling flag.