quda
quda copied to clipboard
Revisiting convergence criteria for the eigensolvers
There are a few known cases (especially with Arnoldi) where the Ritz values (computed in double precision) meet the convergence criteria for the eigensolver, but the actual eigenvalues from the constructed eigenvectors do not. One solution (that doesn't always work) is to over-converge, that is, set a higher tolerance on the Ritz values than we actually need for the eigenvalues.
The proposal here is to add logic to the eigensolvers to check to make sure the eigenvalues converge, not just the Ritz values, before exiting the eigensolver. This is analogous to how the linear system solvers in QUDA track the iterated residual for most of the solve, but don't actually return until the explicitly reconstructed residual passes tolerance checks.
This may include revisiting some of the locking logic in the eigensolver, since we'll need to be able to "unlock" eigenpairs. I wrote my own Lanczos many moons ago that uses different locking/unlocking logic than what's in QUDA, so I might give that a spin. It's available here: https://github.com/weinbe2/quantum-linalg/blob/master/tests/lanczos_tests/thick_deflate_lanczos.h