cuDSS Iterative Refinement

Hello,

I am trying to make use of the iterative refinement feature of the SOLVE phase, and have two CSR matrices with the same indptr/indices but a different values buffer. The documentation seems to suggest this is possible “Note: If a new sparse matrix is given as input for this phase, it would be used for computing the residual (and thus the solver can be a part of LU-based preconditioner)”

Unfortunately, I get a cuDSS error telling me that I cannot use a different values buffer in the SOLVE phase than I used in the factorization phase:

[2025-03-03 19:25:50][CUDSS][2703757][Error][cudssExecute] csr_values = 0x7331f5ed4a00 differs from csr_values passed to FACTORIZATION. New csr_values_ = 0x7331f5e47400

Before I try to work around this, I figured I would double check with you to see what the best practice is for using iterative refinement with a second, different matrix. Am I supposed to re-use the same buffer but change the values?

Thanks,
Dane

Hi Dane!

You’re right with your observation, we turned this feature off in cudss 0.5.0 (admittedly it should be reflected in the release notes or the docs should have changed at least but it slipped through the cracks). We were not sure anyone is actually using this and it made certain internal aspects simpler.

There is no good workaround for this (yes, you can change the values within the same buffer but I guess this can be a disruptive change for the calling application).

We will fix the docs and scope the task for re-enabling this feature.

Let us know if it is a critical blocker for adopting cuDSS or if you want to access this feature before it re-appears in an official release.

Thanks,
Kirill

Thanks Kirill,

I think it was a good idea, but I understand why you would deprecate it. After seeing your comment I went ahead and implemented iterative refinement at a higher layer using cusparse+cublas, which took very little effort and suits my purposes just fine so it is in no way a blocker to me using cuDSS.

From my perspective this feature falls under the category of minor convenience rather than critical blocker.

Thanks,
Dane

1 Like