I am trying to diagonalize a large sparse and hermitian matrix, but I can probably afford to make it real symmetric. This matrix is large, it can be 10^6 x 10^6. But I am only interested in a few of its lowest eigenvalues, probably just around 50 of them. I heard that several ways to do this is to use Lanczos or conjugate-gradient method. Are there routines in MKL I can use to employ one or both of the aforementioned methods?
Starting in MKL 2019 release, a new functionality called the Extremal Eigenvalue solvers was introduced for finding a certain number of smallest or largest eigenvalues of a sparse matrix. See MKL Support for Smallest/Largest Eigenvalues for a short article describing what it does and MKL Documentation for Extremal Eigenvalues for the APIs themselves and more details.
Essentially, we have two algorithms available: the Krylov-Schur (similar to Lanczos) method and a subspace projection method that utilizes the FEAST eigensolver technology.
An additionally, you may take a look at the existing examples (dexample_extremal_ev_c.c dexample_extremal_gv_c.c dexample_extremal_svd_c.c ) shows how to properly call these API. You may check these examples into mklroot\examples\solvers_eec\source\ directory
The intel version installed in the cluster I am working on is still 2018 version, are there other routines in this version? Eigenproblem of a large, sparse matrix is nothing recent, I am imagining library developers of some prominent vendors would have had such solvers for quite a while now.