v0.9.2
MadNLP v0.9.2
Highlights: new SchurComplementKKTSystem for two-stage stochastic programs (CPU + GPU), an API cleanup so solver and wrapper internals are accessed through getter functions, and a MUMPS 5.8.x fix.
New features
- Add
SchurComplementKKTSystemfor exploiting the block-arrowhead structure of two-stage stochastic programs. Reduces each Newton step to a densend × nddesign-variable system via per-scenario eliminations. CPU variant uses Umfpack for the per-scenario blocks by default; GPU variant lives in theMadNLPGPUCUDA extension and uses batched cuDSS + strided-batched CUBLAS. (#598)
API changes
- Solver member access is now through getter functions instead of direct field access. Downstream code that reaches into
MadNLPSolverfields will need to migrate. (#497) - Wrapper models use getters for inner-model access. (#595)
solveis now re-exported fromSolverCore, aligning MadNLP with the broader JuliaSmoothOptimizers ecosystem. (#601)
Fixes
- Update MUMPS bindings for the 5.8.x ABI. (#613)
Documentation
- Fix
mu_initin the warm-start tutorial. (#607)
MadNLPGPU v0.9.0
Highlights: CUDA/CUDSS and AMDGPU are now weak dependencies, and the new Schur-complement KKT system has a GPU backend.
- CUDA/CUDSS moved to weak deps, GPU backend code deduplicated. Installing MadNLPGPU no longer pulls CUDA on machines without it; the CUDA-specific code (
LapackCUDASolver,CUDSSSolver, GPU Schur) lives in theMadNLPGPUCUDAExtextension and loads only when both CUDA.jl and CUDSS.jl are present. The AMDGPU backend follows the same pattern viaMadNLPGPUAMDGPUExt. (#596) - GPU SchurComplementKKTSystem: batched per-scenario factorizations via cuDSS, Schur accumulation via CUBLAS strided-batched GEMM. (#598)
- Requires MadNLP ≥ 0.9.2.
Known issue — V100 / Volta (sm_70):
CUDA Toolkit 13 dropped support for Volta GPUs. Starting at CUDA.jl v5.10 (March 2026), Pkg may resolve to a CUDA.jl that auto-selects the CUDA 13 runtime, which then fails on V100. MadNLPGPU's compat allows this. Until JuliaGPU/CUDA.jl#3134 ships in a tagged release, V100 users should pin to a CUDA 12.x toolkit by running once per environment:
using CUDA
CUDA.set_runtime_version!(v"12.9") # any 12.x worksAlternatively, pin CUDA = "~5.9" in your project's Project.toml.
MadNLPTests v0.6.1
- Add Schur-complement two-stage stochastic test fixtures used by
MadNLPandMadNLPGPUSchur tests. (#598)
Merged pull requests:
- Overhaul solver member access via functions (#497) (@apozharski)
- Wrappers should use getters for nlp models meta (#595) (@apozharski)
- Add SchurComplementKKTSystem for two-stage stochastic programs (#598) (@michel2323)
- Revert and use function solve from SolverCore (#601) (@frapac)
- [doc] Fix mu_init in warm-start tutorial (#607) (@frapac)
- [Mumps] Fix the MUMPS structure for v5.8.x (#613) (@frapac)
Closed issues:
- Documentation (#93)
- Restoration failed when using MadNLP for ODE parameter estimation (#264)
- Using weak dependencies (#265)
- lost of precision in constraints using MadNLP.SparseCondensedKKTSystem? (#593)
- Consider not exporting own
solve!(#597) - Performance regression in v0.9.1 compared to v0.8.12 with Mumps (#602)
- Warm-start Tutorial Appears to be Out-of-Date (#606)