I need to find a few eigenvalues and eigenvectors of some large Hermitian sparse matrices. Right now, I am trying Arpack.jl
and KrylovKit.jl
. Here are some considerations and my experiences.
-
Arpack.jl
does not have special routines for Hermitian matrices, and is less stable thanKrylovKit.jl
. - With moderate size, multithreading works pretty good. For example, my CPU usage (from
top
comand) of my Julia process is roughly 2000% forArpack.jl
diagonalizing 30624x30624 matrices (sparsity 0.005). However, when the matrices become larger (3 million by 3 million, sparsity 0.00012), the CPU usage of bothArpack.jl
andKrylovKit.jl
drops to roughly 200%. - Right now,
KrylovKit.jl
takes 2200 seconds to diagonalize a 2883289x2883289 matrix with sparsity 0.00012 andArpack.jl
needs more than 1 hour.
Eventually, I would like to diagonalize a 30000000x30000000 matrix with sparsity of roughly 0.00003. What would be your suggestions to attack such a problem?