Need help wrapping cuOpt in julia

NVIDIA recently open-sourced their cuOpt solver suite. The source code is mostly C++, and it has a C API.

I’m looking into wrapping that in Julia and setting up a JuMP/MOI interface so we can use cuOpt through JuMP. I have never wrapped a C library before (I imagine it will take a combination of Clang, BinaryBuilder and a _jll), let alone one that needs a GPU to run.

If anyone has skills related to this and would be open to help me, I’d very much appreciate it :folded_hands::folded_hands:
I have access to a GPU machine a pretty much anything but Docker, and I’m happy to do the heavy lifting, what I really need is guidance on the overall wrapping / building process.

8 Likes

I don’t know the first thing about C or C++ but I just want to say that I wholeheartedly support this initiative! Good luck, keep us posted :folded_hands:

2 Likes

First step is to be able to install the solver in Julia.

The place to start is to look at GitHub - JuliaPackaging/Yggdrasil: Collection of builder repositories for BinaryBuilder.jl

As an example, heres the script that builds SCS with a GPU:

The binarybuilder docs have some tips and tricks for building: Home · BinaryBuilder.jl

2 Likes

Also @amontoison might be a good person to talk to

I was at Stanford a few months ago and discussed with Chris Maes (lead developer of cuOpt).
Based on the current implementation and our discussion, I don’t really see the advantage compared to cu-pdlp or HiGHS with the support of it.

JuMP / MOI is also not GPU-oriented so I am not sure what you want to achieve at the end except maybe a proof-of-concept or testing the accuracy.

If you want to work on it, be aware that it is not a small task.

2 Likes

Another big thing to consider is the availability of CI testing. (I know we could sort something with JuliaGPU.) I have no plans to work on this for jump-dev unless NVIDIA come to the party somewhat with $ or hardware.

1 Like

I’m more curious about their discrete algorithms on GPU, MILP solver + routing algorithms.

To the best of my knowledge, the MILP / routing algorithms are runned on CPU internally.
Only very specific components of the code are on GPU.

Source: private discussion with Chris

Yes, I would expect so :sweat_smile: I’m still trying to compile it from source.

TBH, figuring out the software aspect of it is as motivating to me as being able to call cuOpt from julia.

1 Like