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.jldoes 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
topcomand) of my Julia process is roughly 2000% forArpack.jldiagonalizing 30624x30624 matrices (sparsity 0.005). However, when the matrices become larger (3 million by 3 million, sparsity 0.00012), the CPU usage of bothArpack.jlandKrylovKit.jldrops to roughly 200%. - Right now,
KrylovKit.jltakes 2200 seconds to diagonalize a 2883289x2883289 matrix with sparsity 0.00012 andArpack.jlneeds 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?