Add external ReSolve interface#2
Draft
tamar-dewilde wants to merge 2 commits into
Draft
Conversation
Collaborator
Author
|
External ReSolve validation completed using ReSolve commit:
Attached are the complete CPU, CUDA, and Frontier validation logs: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Add an experimental EVLOSER sparse linear solver interface to HiOp that uses an installed public ORNL/ReSolve package.
Enable the interface at configure time with:
Runtime solver selection:
The interface supports CPU KLU solves and RF refactorization on CUDA and HIP. The existing embedded
resolvesolver implementation remains unchanged.@pelesh
Proposed changes
Add
HIOP_USE_EVLOSERas an independent sparse solver option.Add the HiOp EVLOSER wrapper and external ReSolve provider.
Discover public ReSolve with
find_package(ReSolve CONFIG REQUIRED).Link through
ReSolve::ReSolve.Propagate the ReSolve dependency through the installed HiOp CMake configuration.
Use public ReSolve components for:
Convert HiOp symmetric sparse matrices to the CSR representation expected by ReSolve.
Support host and device matrix, right-hand-side, and solution transfers.
Return failed factorizations and refactorizations to HiOp for regularization and retry.
Register EVLOSER in sparse KKT solver selection and dual initialization.
Require the inertia-free factorization acceptor for EVLOSER.
Add driver options:
-evloser-evloser_cuda_rf-evloser_hip_rfAdd EVLOSER RF regression tests:
NlpSparseRaja2_EVLOSER_RF(CUDA) andNlpSparseRaja2_EVLOSER_HIP_RF(HIP).Keep the existing embedded
resolvesolver sources unchanged.Additional cleanup in files touched by this branch
Checklist
All tests pass (
make testandmake test_installper testing [instructions](https://github.com/ORNL/ReSolve?tab=readme-ov-file#test-and-deploy)). Code tested onI have manually run the non-experimental examples and verified that residuals are close to machine precision. Code tested on:
Code compiles cleanly with flags
-Wall -Wpedantic -Wconversion -Wextra.Regression tests were added and run for the new code.
The new code is documented.
The feature branch is rebased with respect to the target branch.
I have updated CHANGELOG.md to reflect the changes in this PR.
Further comments
The HIP RF path runs without iterative refinement because the current iterative-refinement implementation depends on CUDA-only Krylov kernels.
SuiteSparse/KLU was supplied through the active Spack environment with
spack -e. The HiOp Spack recipe was not changed.Detailed CPU, CUDA, and Frontier validation logs will be attached in a follow-up comment.
This remains a draft PR until the external EVLOSER interface has been reviewed and is ready for integration.