Add EVLOSER interface#1
Conversation
248fd54 to
e784fe8
Compare
|
I ran a temporary EVLOSER HIP RF debug build before cleaning up the branch. The new driver path selected the HIP EVLOSER RF backend correctly: This verified that the HIP path was being selected correctly and that the expected factorization/refactorization/solve lifecycle was reached during the debug run. Note: the remaining red check appears to be in the Spack/mirror workflow rather than the source changes. I looked into it briefly, but I did not want to keep changing CI logic in this draft PR without guidance. |
b874bed to
7621a05
Compare
7621a05 to
240786a
Compare
Embedded EVLOSER HIP / CUDA RF comparisonBoth runs used:
Both backends produced the same iteration count, objective, and six-digit self-check result. The initial KLU factorization required regularization and recovered on both backends, suggesting the behavior is not backend-specific. The HIP The suite totals differ because tests are registered by configuration. All registered EVLOSER tests passed. The existing ReSolve solver sources are unchanged. EVLOSER is gated by I also built a separate ReSolve-enabled configuration and manually ran |
Description
Add an experimental EVLOSER sparse linear solver interface to HiOp.
EVLOSER is added as a separate embedded backend next to the existing ReSolve path. ReSolve remains CUDA-only, while EVLOSER has CUDA and is gated by its own
HIOP_USE_EVLOSERoption. The existing sparse solver option path is extended so EVLOSER can be selected withlinear_solver_sparse=evloser.The HIP path currently supports RF refactorization without iterative refinement. The CUDA path keeps the RF and iterative refinement structure.
@pelesh
Proposed changes
src/LinAlg/EVLOSER.hiopLinSolverSparseEVLOSER.hppandhiopLinSolverSparseEVLOSER.cpp.evloseras a valid sparse linear solver option.HIOP_USE_EVLOSERas a separate build option, independent ofHIOP_USE_RESOLVE.-evloser-evloser_cuda_rf-evloser_hip_rfEVLOSERKLUCPUNlpSparse1_EVLOSER_CPUNlpSparse2_EVLOSER_CPUNlpSparseRaja2_3NlpSparseRaja2_4Additional cleanup in files touched by this branch:
use_ginkgo_cuda = falseit was duplicated anduse_ginkgo_hipwas never initialized so it was corrected to initializeuse_ginkgo_hip. Unrelated to EVLOSER, found while editing the same flag-parsing code.Checklist
make testandmake test_installper testing instructions). Code tested on./examples/<your_example>.exe -hto get instructions how to run examples). Code tested on:-Wall -Wpedantic -Wconversion -Wextra.Further comments
The HIP EVLOSER path currently disables iterative refinement because the existing iterative refinement implementation depends on CUDA-only Krylov kernels. The HIP RF path still registers, builds, and passes the sparse RAJA RF test on Frontier.
SuiteSparse/KLU was supplied through the active Spack environment with
spack -e. The HiOp Spack recipe was not changed.The following environment-specific adjustments were used during validation and are not part of this PR:
FortranCInterfaceproduced an emptyFC_GLOBALdefinition for HIP-compiled translation units that includehiop_blasdefs.hpp. A local force-include was used for validation. This should be addressed separately in the HIP build configuration.