# MadIPM: A GPU-accelerated interior-point solver for large-scale LPs

**URL:** https://discourse.julialang.org/t/madipm-a-gpu-accelerated-interior-point-solver-for-large-scale-lps/132630
**Category:** Optimization (Mathematical)
**Created:** [September 24, 2025, 5:18pm UTC](https://discourse.julialang.org/t/madipm-a-gpu-accelerated-interior-point-solver-for-large-scale-lps/132630 "2025-09-24T17:18:53Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![amontoison](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/amontoison/32/218741_2.png) [@amontoison](https://discourse.julialang.org/u/amontoison)
#### Post date: [September 24, 2025, 5:18pm UTC](https://discourse.julialang.org/t/madipm-a-gpu-accelerated-interior-point-solver-for-large-scale-lps/132630/1 "2025-09-24T17:18:53Z")

</div>

We have released MadIPM, a GPU-accelerated interior-point solver for large-scale linear programming. 🎉  
This work is done in collaboration with @sshin23 and @frapac.

MadIPM is built on top of MadNLP. It implements the Mehrotra predictor-corrector method.

Compared to other interior-point solvers, MadIPM is designed to run on the GPU. The linear systems arising in the interior-point method are solved with the linear solver NVIDIA cuDSS.  
MadIPM also reuses the high-performance GPU kernels developed in **MadNLPGPU** using _KernelAbstractions.jl_. These include routines for assembling KKT systems, performing line search, and other critical operations in optimization solvers, along with new GPU kernels tailored specifically for the LP case.

If you want to give it a try, the code is available on [github](https://github.com/MadNLP/MadIPM.jl).

Solving a LP on the GPU with JuMP simply amounts to:

```julia
using JuMP
using MadIPM
using CUDA, KernelAbstractions, MadNLPGPU

c = rand(10)
model = Model(MadIPM.Optimizer)
set_optimizer_attribute(model, "array_type", CuVector{Float64})
set_optimizer_attribute(model, "linear_solver", MadNLPGPU.CUDSSSolver)

@variable(model, 0 <= x[1:10], start=0.5)
@constraint(model, sum(x) == 1.0)
@objective(model, Min, c' * x)

JuMP.optimize!(model)

```

While performance depends on the problem, early benchmarks indicate that MadIPM can be competitive with Gurobi on large-scale LPs when run on a GPU.

 ![madipm_vs_gurobi](https://global.discourse-cdn.com/julialang/original/3X/b/e/bed83aa4e574333dc892ffaa106f3019d4011e38.png)

Our paper, [_GPU Implementation of Second-Order Linear and Nonlinear Programming Solvers_](https://arxiv.org/abs/2508.16094), was just accepted for presentation at the **ScaleOPT workshop at NeurIPS 2025**! It contains more details for those interested in the technical aspects.

I will also be giving a short talk about it earlier at **JuMP-dev 2025** in New Zealand 🇳🇿.

---

<div class="post-metadata">

### Author: ![sshin23](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sshin23/32/205225_2.png) [@sshin23](https://discourse.julialang.org/u/sshin23)
#### Post date: [September 24, 2025, 5:50pm UTC](https://discourse.julialang.org/t/madipm-a-gpu-accelerated-interior-point-solver-for-large-scale-lps/132630/2 "2025-09-24T17:50:19Z")

</div>

Congratulations @amontoison! Julia community is leading the innovation in optimization solvers!

---

<div class="post-metadata">

### Author: ![jindavid](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jindavid/32/217445_2.png) [@jindavid](https://discourse.julialang.org/u/jindavid)
#### Post date: [September 24, 2025, 8:38pm UTC](https://discourse.julialang.org/t/madipm-a-gpu-accelerated-interior-point-solver-for-large-scale-lps/132630/3 "2025-09-24T20:38:26Z")

</div>

Congrats!! @amontoison @frapac@sshin23

---

<div class="post-metadata">

### Author: ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/27854_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)
#### Post date: [September 25, 2025, 5:45am UTC](https://discourse.julialang.org/t/madipm-a-gpu-accelerated-interior-point-solver-for-large-scale-lps/132630/4 "2025-09-25T05:45:51Z")

</div>

Awesome work! Two questions on my end:

- Did you benchmark against GPU alternatives such as cuPDLP, cuOpt, or the (upcoming?) GPU options in HiGHS / Gurobi? There may be some overlap inside this list, I’m not really up to speed.
- Wanna collaborate on batched GPU solvers? My research team has tons of applications for those.

---

<div class="post-metadata">

### Author: ![frapac](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/frapac/32/6879_2.png) [@frapac](https://discourse.julialang.org/u/frapac)
#### Post date: [September 25, 2025, 9:45am UTC](https://discourse.julialang.org/t/madipm-a-gpu-accelerated-interior-point-solver-for-large-scale-lps/132630/5 "2025-09-25T09:45:51Z")

</div>

thank you for the positive feedback @gdalle!

- We have benchmarked MadIPM against cuPDLP. However cuPDLP was not able to converge to the given tolerance (1e-8). We should compare against cuPDLPx.
- HiGHS has implemented PDLP, but the solver is not available on the GPU yet, as far as I know. Same for Gurobi: I don’t think they have released the new version supporting GPU.

With pleasure to discuss about your potential use-cases for a batch optimization solver! For us, it’s the next target.
