v0.10.0
MadNLP v0.10.0
Highlights: the main
solve!loop is now allocation-free in steady state — ~99% of per-iteration allocations have been removed by replacingmapreduce-based reductions with explicit loops and extracting backend-specific kernels so that GPU code paths can plug in without touching the core. Plus a CUDA.jl v6 / CUDSS 0.7 / Julia 1.12 update forMadNLPGPU.
Performance
- Remove ~99% of per-iteration allocations from
solve!.get_varphi,get_inf_du,get_inf_compl,get_min_complementarity, and friends insrc/IPM/kernels.jlare rewritten as explicit loops instead ofmapreduce.count_lu_boundsreplaces the boolean-mask +sumpattern inget_vars_info/get_cons_info. Indexed updates in_set_aug_diagonal!are wrapped in@viewsto avoid temporary copies. The unused densejac_bufferallocation in the NLPModels callback is removed. (#603) - New
populate_RR_nn!kernel for restoration-phase initialization, factored out so backends can override it. (#603)
Breaking changes
RRfield onMadNLPSolveris now typedUnion{Nothing,RobustRestorer{T,VT}}(wasRobustRestorer{T}). Downstream code that holds a typed reference toRobustRestorerneeds the extra type parameter. (#603)get_vars_infoandget_cons_infoare now restricted toAbstractMadNLPSolver. (#603)- New extension points (
_get_varphi,get_varphi,get_inf_du,get_inf_compl,get_min_complementarity,get_varphi_d,get_alpha_max,get_alpha_z, restoration-phaseget_*_Rvariants,populate_RR_nn!,count_lu_bounds,SubVector) are exported fromMadNLPfor backends to specialize. (#603)
MadNLPGPU v0.10.0
Highlights: bumped to CUDA.jl v6 and CUDSS 0.7, and GPU specializations of the new MadNLP core kernels.
Dependencies
- Require CUDA.jl ≥ 6.0.0 and CUDSS ≥ 0.7. (#615)
- Depend on the CUDA subpackages (
CUDACore,cuBLAS,cuSOLVER,cuSPARSE) instead of theCUDAmeta-package. The CUDA extension now activates from these subpackages directly, so MadNLPGPU works alongside any CUDA.jl v6.x without forcing the meta-package into the project. (#615) - AMDGPU.jl ≥ 2.
New features
- GPU specializations of the IPM kernels refactored out in MadNLP #603 (
get_varphi,get_inf_du,get_inf_compl,get_min_complementarity, restorationpopulate_RR_nn!, etc.), dispatched onAbstractGPUVectorOrSubVector. The GPU path keeps usingmapreducewhile the CPU path uses explicit loops — both avoid the per-iteration allocations that the prior code had. (#603)
Fixes
- Work around a Julia 1.12 regression with the global solver state in
MadNLPGPU.jl. (#615)
Compatibility
- Requires MadNLP ≥ 0.10.0.
Merged pull requests:
- Removing 99% of allocations in
solve!(#603) (@apozharski) - compat CUDA@6.0.0 CUDSS@0.7 (#615) (@michel2323)