Core benchmark

Ubuntu Latest

This benchmark suite evaluates 14 optimal control problems on a standard CPU platform using GitHub Actions runners.

Benchmark Configuration:

  • Solvers: Ipopt and MadNLP
  • Models: JuMP, ADNLPModels, ExaModels (CPU)
  • Grid sizes: 200, 500, 1000 discretisation points
  • Discretisation: Trapeze method
  • Tolerance: 1e-6
  • Ipopt strategy: Adaptive barrier parameter
  • Limits: 1000 iterations max, 500s wall time

This configuration focuses on CPU-based solvers and provides a comprehensive comparison across different modelling frameworks.

Note

The linear solver is MUMPS for all experiments.

🖥️ Environment

📅 Timestamp     : 2025-10-25 14:44:00 UTC
🔧 Julia version : 1.11.7
💻 OS            : Linux
🖥️ Machine       : runnervmwhb2z

You can download the exact environment used for this benchmark:

These files allow you to reproduce the benchmark environment and results exactly.

ℹ️ Version info
Julia Version 1.11.7
Commit f2b3dbda30a (2025-09-08 12:10 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 4 × AMD EPYC 7763 64-Core Processor
  WORD_SIZE: 64
  LLVM: libLLVM-16.0.6 (ORCJIT, znver3)
Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
Environment:
  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
📦 Package status
Project CTBenchmarks v0.2.2
Status `~/work/CTBenchmarks.jl/CTBenchmarks.jl/Project.toml`
  [6e4b80f9] BenchmarkTools v1.6.3
  [052768ef] CUDA v5.9.2
  [a93c6f00] DataFrames v1.8.1
  [b6b21f68] Ipopt v1.12.1
 [682c06a0] JSON v0.21.4
  [4076af6c] JuMP v1.29.2
  [d72a61cc] MadNLPGPU v0.7.16
  [3b83494e] MadNLPMumps v0.5.1
  [f4238b75] NLPModelsIpopt v0.11.0
  [5f98b655] OptimalControl v1.1.5
  [59046045] OptimalControlProblems v0.3.1
  [bd369af6] Tables v1.12.1
  [ade2ca70] Dates v1.11.0
  [b77e0a4c] InteractiveUtils v1.11.0
  [44cfe95a] Pkg v1.11.0
  [de0858da] Printf v1.11.0
  [6462fe0b] Sockets v1.11.0
Info Packages marked with  have new versions available but compatibility constraints restrict them from upgrading. To see why use `status --outdated`
📚 Complete manifest
Project CTBenchmarks v0.2.2
Status `~/work/CTBenchmarks.jl/CTBenchmarks.jl/Manifest.toml`
  [54578032] ADNLPModels v0.8.13
  [47edcb42] ADTypes v1.18.0
  [14f7f29c] AMD v0.5.3
  [621f4979] AbstractFFTs v1.5.0
  [79e6a3ab] Adapt v4.4.0
  [a9b6321e] Atomix v1.1.2
  [13072b0f] AxisAlgorithms v1.1.0
  [ab4f0b2a] BFloat16s v0.6.0
  [6e4b80f9] BenchmarkTools v1.6.3
  [fa961155] CEnum v0.5.0
  [54762871] CTBase v0.16.4
  [790bbbee] CTDirect v0.17.4
  [1c39547c] CTFlows v0.8.9
  [34c4fa32] CTModels v0.6.9
  [32681960] CTParser v0.7.1
  [052768ef] CUDA v5.9.2
  [1af6417a] CUDA_Runtime_Discovery v1.0.0
  [45b445bb] CUDSS v0.6.1
  [d360d2e6] ChainRulesCore v1.26.0
  [523fee87] CodecBzip2 v0.8.5
  [944b1d66] CodecZlib v0.7.8
  [3da002f7] ColorTypes v0.12.1
  [5ae59095] Colors v0.13.1
  [38540f10] CommonSolve v0.2.4
  [bbf7d656] CommonSubexpressions v0.3.1
  [34da2185] Compat v4.18.1
  [a8cc5b0e] Crayons v4.1.1
  [9a962f9c] DataAPI v1.16.0
  [a93c6f00] DataFrames v1.8.1
  [864edb3b] DataStructures v0.19.1
  [e2d170a0] DataValueInterfaces v1.0.0
  [163ba53b] DiffResults v1.1.0
  [b552c78f] DiffRules v1.15.1
  [ffbed154] DocStringExtensions v0.9.5
  [1037b233] ExaModels v0.9.2
  [e2ba6199] ExprTools v0.1.10
  [9aa1b823] FastClosures v0.3.2
  [1a297f60] FillArrays v1.14.0
  [53c48c17] FixedPointNumbers v0.8.5
  [f6369f11] ForwardDiff v1.2.2
  [069b7b12] FunctionWrappers v1.1.3
  [0c68f7d7] GPUArrays v11.2.6
  [46192b85] GPUArraysCore v0.2.0
  [61eb1bfa] GPUCompiler v1.7.2
  [096a3bc2] GPUToolbox v1.0.0
  [34c5aeac] HSL v0.5.1
  [076d061b] HashArrayMappedTries v0.2.0
  [842dd82b] InlineStrings v1.4.5
  [a98d9a8b] Interpolations v0.16.2
  [41ab1584] InvertedIndices v1.3.1
  [b6b21f68] Ipopt v1.12.1
  [92d709cd] IrrationalConstants v0.2.6
  [82899510] IteratorInterfaceExtensions v1.0.0
  [692b3bcd] JLLWrappers v1.7.1
 [682c06a0] JSON v0.21.4
  [0f8b85d8] JSON3 v1.14.3
  [4076af6c] JuMP v1.29.2
  [63c18a36] KernelAbstractions v0.9.38
  [40e66cde] LDLFactorizations v0.10.1
  [929cbde3] LLVM v9.4.4
  [8b046642] LLVMLoopInfo v1.0.0
  [b964fa9f] LaTeXStrings v1.4.0
  [5c8ed15e] LinearOperators v2.11.0
  [2ab3a3ac] LogExpFunctions v0.3.29
  [33e6dc65] MKL v0.9.0
  [d8e11817] MLStyle v0.4.17
  [1914dd2f] MacroTools v0.5.16
  [2621e9c9] MadNLP v0.8.12
  [d72a61cc] MadNLPGPU v0.7.16
  [3b83494e] MadNLPMumps v0.5.1
  [b8f27783] MathOptInterface v1.46.0
  [2679e427] Metis v1.5.0
  [e1d29d7a] Missings v1.2.0
  [d8a4904e] MutableArithmetics v1.6.7
  [a4795742] NLPModels v0.21.5
  [f4238b75] NLPModelsIpopt v0.11.0
  [e01155f1] NLPModelsModifiers v0.7.2
  [5da4648a] NVTX v1.0.1
  [77ba4419] NaNMath v1.1.3
  [6fe1bfb0] OffsetArrays v1.17.0
  [5f98b655] OptimalControl v1.1.5
  [59046045] OptimalControlProblems v0.3.1
  [bac558e1] OrderedCollections v1.8.1
  [d96e819e] Parameters v0.12.3
  [69de0a69] Parsers v2.8.3
  [2dfb63ee] PooledArrays v1.4.3
 [aea7be01] PrecompileTools v1.2.1
  [21216c6a] Preferences v1.5.0
  [08abe8d2] PrettyTables v3.1.0
  [be4d8f0f] Quadmath v0.5.13
  [74087812] Random123 v1.7.1
  [e6cf234a] RandomNumbers v1.6.0
  [c84ed2f1] Ratios v0.4.5
  [3cdcf5f2] RecipesBase v1.3.4
  [189a3867] Reexport v1.2.2
  [ae029012] Requires v1.3.1
  [37e2e3b7] ReverseDiff v1.16.1
  [7e506255] ScopedValues v1.5.0
  [6c6a2e73] Scratch v1.3.0
  [91c51154] SentinelArrays v1.4.8
  [ff4d7338] SolverCore v0.3.8
  [a2af1166] SortingAlgorithms v1.2.2
  [9f842d2f] SparseConnectivityTracer v1.1.1
  [0a514795] SparseMatrixColorings v0.4.22
  [276daf66] SpecialFunctions v2.6.1
  [90137ffa] StaticArrays v1.9.15
  [1e83bf80] StaticArraysCore v1.4.4
  [10745b16] Statistics v1.11.1
  [892a3eda] StringManipulation v0.4.1
  [856f2bd8] StructTypes v1.11.0
  [3783bdb8] TableTraits v1.0.1
  [bd369af6] Tables v1.12.1
  [a759f4b9] TimerOutputs v0.5.29
  [e689c965] Tracy v0.1.6
  [3bb67fe8] TranscodingStreams v0.11.3
  [3a884ed6] UnPack v1.0.2
  [013be700] UnsafeAtomics v0.3.0
  [efce3f68] WoodburyMatrices v1.0.0
  [ae81ac8f] ASL_jll v0.1.3+0
  [6e34b625] Bzip2_jll v1.0.9+0
  [d1e2174e] CUDA_Compiler_jll v0.3.0+0
  [4ee394cb] CUDA_Driver_jll v13.0.2+0
  [76a88914] CUDA_Runtime_jll v0.19.2+0
  [4889d778] CUDSS_jll v0.7.1+0
  [017b0a0e] HSL_jll v4.0.4+0
  [e33a78d0] Hwloc_jll v2.12.2+0
  [1d5cc7b8] IntelOpenMP_jll v2025.2.0+0
  [9cc047cb] Ipopt_jll v300.1400.1900+0
  [9c1d0b0a] JuliaNVTXCallbacks_jll v0.2.1+0
  [dad2f222] LLVMExtra_jll v0.0.38+0
  [ad6e5548] LibTracyClient_jll v0.9.1+6
  [94ce4f54] Libiconv_jll v1.18.0+0
  [d00139f3] METIS_jll v5.1.3+0
  [856f044c] MKL_jll v2025.2.0+0
  [d7ed1dd3] MUMPS_seq_jll v500.800.100+0
  [e98f9f5b] NVTX_jll v3.2.2+0
  [656ef2d0] OpenBLAS32_jll v0.3.29+0
  [efe28fd5] OpenSpecFun_jll v0.5.6+0
 [319450e9] SPRAL_jll v2025.5.20+0
 [02c8fc9c] XML2_jll v2.13.9+0
  [a65dc6b1] Xorg_libpciaccess_jll v0.18.1+0
  [1e29f10c] demumble_jll v1.3.0+0
  [1317d2d5] oneTBB_jll v2022.0.0+1
  [0dad84c5] ArgTools v1.1.2
  [56f22d72] Artifacts v1.11.0
  [2a0f44e3] Base64 v1.11.0
  [ade2ca70] Dates v1.11.0
  [8ba89e20] Distributed v1.11.0
  [f43a241f] Downloads v1.6.0
  [7b1f6079] FileWatching v1.11.0
  [9fa8497b] Future v1.11.0
  [b77e0a4c] InteractiveUtils v1.11.0
  [4af54fe1] LazyArtifacts v1.11.0
  [b27032c2] LibCURL v0.6.4
  [76f85450] LibGit2 v1.11.0
  [8f399da3] Libdl v1.11.0
  [37e2e46d] LinearAlgebra v1.11.0
  [56ddb016] Logging v1.11.0
  [d6f4376e] Markdown v1.11.0
  [a63ad114] Mmap v1.11.0
  [ca575930] NetworkOptions v1.2.0
  [44cfe95a] Pkg v1.11.0
  [de0858da] Printf v1.11.0
  [9abbd945] Profile v1.11.0
  [3fa0cd96] REPL v1.11.0
  [9a3f8284] Random v1.11.0
  [ea8e919c] SHA v0.7.0
  [9e88b42a] Serialization v1.11.0
  [1a1011a3] SharedArrays v1.11.0
  [6462fe0b] Sockets v1.11.0
  [2f01184e] SparseArrays v1.11.0
  [f489334b] StyledStrings v1.11.0
  [4607b0f0] SuiteSparse
  [fa267f1f] TOML v1.0.3
  [a4e569a6] Tar v1.10.0
  [8dfed614] Test v1.11.0
  [cf7118a7] UUIDs v1.11.0
  [4ec0a83e] Unicode v1.11.0
  [e66e0078] CompilerSupportLibraries_jll v1.1.1+0
  [deac9b47] LibCURL_jll v8.6.0+0
  [e37daf67] LibGit2_jll v1.7.2+0
  [29816b5a] LibSSH2_jll v1.11.0+1
  [c8ffd9c3] MbedTLS_jll v2.28.6+0
  [14a3606d] MozillaCACerts_jll v2023.12.12
  [4536629a] OpenBLAS_jll v0.3.27+1
  [05823500] OpenLibm_jll v0.8.5+0
  [bea87d4a] SuiteSparse_jll v7.7.0+0
  [83775a58] Zlib_jll v1.2.13+1
  [8e850b90] libblastrampoline_jll v5.11.0+0
  [8e850ede] nghttp2_jll v1.59.0+0
  [3f19e933] p7zip_jll v17.4.0+2
Info Packages marked with  have new versions available but compatibility constraints restrict them from upgrading. To see why use `status --outdated -m`

📊 Results

Benchmarks results:

┌─ Problem: beam
│
├──┬ Solver: ipopt, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:  11.737 ms | iters: 12     | obj: 8.891342e+00  | CPU:  13.08 KiB
│  │  ✓ | adnlp    | time:  15.307 ms | iters: 12     | obj: 8.891342e+00  | CPU:   1.84 MiB
│  │  ✓ | exa      | time:  11.924 ms | iters: 12     | obj: 8.891342e+00  | CPU:  68.36 KiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  30.198 ms | iters: 15     | obj: 8.889302e+00  | CPU:  15.89 KiB
│  │  ✓ | adnlp    | time:  39.888 ms | iters: 15     | obj: 8.889302e+00  | CPU:   5.50 MiB
│  │  ✓ | exa      | time:  29.961 ms | iters: 15     | obj: 8.889302e+00  | CPU: 134.52 KiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:  90.645 ms | iters: 25     | obj: 8.888998e+00  | CPU:  24.36 KiB
│  │  ✓ | adnlp    | time: 125.470 ms | iters: 26     | obj: 8.889037e+00  | CPU:  18.03 MiB
│  │  ✓ | exa      | time:  91.953 ms | iters: 26     | obj: 8.889037e+00  | CPU: 251.55 KiB
│  └─
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:  10.536 ms | iters: 18     | obj: 8.891339e+00  | CPU:   2.02 MiB
│  │  ✓ | adnlp    | time:  15.290 ms | iters: 18     | obj: 8.891339e+00  | CPU:   4.38 MiB
│  │  ✓ | exa      | time:  10.716 ms | iters: 18     | obj: 8.891339e+00  | CPU:   1.93 MiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  20.810 ms | iters: 16     | obj: 8.889296e+00  | CPU:   4.00 MiB
│  │  ✓ | adnlp    | time:  31.023 ms | iters: 16     | obj: 8.889296e+00  | CPU:   9.26 MiB
│  │  ✓ | exa      | time:  21.600 ms | iters: 16     | obj: 8.889296e+00  | CPU:   3.84 MiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:  52.529 ms | iters: 22     | obj: 8.889005e+00  | CPU:   8.93 MiB
│  │  ✓ | adnlp    | time:  80.791 ms | iters: 22     | obj: 8.889006e+00  | CPU:  23.14 MiB
│  │  ✓ | exa      | time:  54.746 ms | iters: 22     | obj: 8.889005e+00  | CPU:   8.45 MiB
│  └─
└─

┌─ Problem: chain
│
├──┬ Solver: ipopt, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:  11.581 ms | iters: 6      | obj: 5.068916e+00  | CPU:  13.83 KiB
│  │  ✓ | adnlp    | time:  13.969 ms | iters: 6      | obj: 5.068916e+00  | CPU:   3.91 MiB
│  │  ✓ | exa      | time:   8.719 ms | iters: 6      | obj: 5.068916e+00  | CPU:  69.03 KiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  54.053 ms | iters: 13     | obj: 5.068578e+00  | CPU:  29.19 KiB
│  │  ✓ | adnlp    | time:  63.489 ms | iters: 13     | obj: 5.068578e+00  | CPU:  19.17 MiB
│  │  ✓ | exa      | time:  37.923 ms | iters: 13     | obj: 5.068578e+00  | CPU: 145.53 KiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:  52.966 ms | iters: 6      | obj: 5.068510e+00  | CPU:  13.83 KiB
│  │  ✓ | adnlp    | time:  62.383 ms | iters: 6      | obj: 5.068510e+00  | CPU:  19.35 MiB
│  │  ✓ | exa      | time:  38.706 ms | iters: 6      | obj: 5.068510e+00  | CPU: 250.28 KiB
│  └─
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:  12.383 ms | iters: 6      | obj: 5.068916e+00  | CPU:   6.31 MiB
│  │  ✓ | adnlp    | time:  11.995 ms | iters: 6      | obj: 5.068916e+00  | CPU:   5.32 MiB
│  │  ✓ | exa      | time:   7.593 ms | iters: 6      | obj: 5.068916e+00  | CPU:   1.71 MiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  53.379 ms | iters: 13     | obj: 5.068578e+00  | CPU:  15.97 MiB
│  │  ✓ | adnlp    | time:  56.158 ms | iters: 13     | obj: 5.068578e+00  | CPU:  22.67 MiB
│  │  ✓ | exa      | time:  34.112 ms | iters: 13     | obj: 5.068578e+00  | CPU:   4.21 MiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:  56.570 ms | iters: 6      | obj: 5.068510e+00  | CPU:  32.19 MiB
│  │  ✓ | adnlp    | time:  52.891 ms | iters: 6      | obj: 5.068510e+00  | CPU:  24.73 MiB
│  │  ✓ | exa      | time:  30.516 ms | iters: 6      | obj: 5.068510e+00  | CPU:   6.74 MiB
│  └─
└─

┌─ Problem: double_oscillator
│
├──┬ Solver: ipopt, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:   8.025 ms | iters: 4      | obj: 9.103363e-04  | CPU:  10.11 KiB
│  │  ✓ | adnlp    | time:  14.149 ms | iters: 4      | obj: 9.103363e-04  | CPU:   4.44 MiB
│  │  ✓ | exa      | time:   9.452 ms | iters: 4      | obj: 9.103363e-04  | CPU: 101.77 KiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  17.233 ms | iters: 4      | obj: 9.109247e-04  | CPU:  10.11 KiB
│  │  ✓ | adnlp    | time:  32.309 ms | iters: 4      | obj: 9.109247e-04  | CPU:  11.03 MiB
│  │  ✓ | exa      | time:  21.060 ms | iters: 4      | obj: 9.109247e-04  | CPU: 212.14 KiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:  32.586 ms | iters: 4      | obj: 9.110179e-04  | CPU:  10.11 KiB
│  │  ✓ | adnlp    | time:  66.245 ms | iters: 4      | obj: 9.110179e-04  | CPU:  22.02 MiB
│  │  ✓ | exa      | time:  40.438 ms | iters: 4      | obj: 9.110179e-04  | CPU: 395.52 KiB
│  └─
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:   7.783 ms | iters: 5      | obj: 9.103362e-04  | CPU:   2.93 MiB
│  │  ✓ | adnlp    | time:  15.026 ms | iters: 5      | obj: 9.103362e-04  | CPU:   7.10 MiB
│  │  ✓ | exa      | time:   8.243 ms | iters: 5      | obj: 9.103362e-04  | CPU:   3.03 MiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  17.343 ms | iters: 5      | obj: 9.109230e-04  | CPU:   6.80 MiB
│  │  ✓ | adnlp    | time:  36.053 ms | iters: 5      | obj: 9.109230e-04  | CPU:  17.06 MiB
│  │  ✓ | exa      | time:  19.111 ms | iters: 5      | obj: 9.109230e-04  | CPU:   6.88 MiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:  33.552 ms | iters: 5      | obj: 9.110070e-04  | CPU:  11.30 MiB
│  │  ✓ | adnlp    | time:  76.441 ms | iters: 5      | obj: 9.110070e-04  | CPU:  33.65 MiB
│  │  ✓ | exa      | time:  37.330 ms | iters: 5      | obj: 9.110070e-04  | CPU:  13.30 MiB
│  └─
└─

┌─ Problem: ducted_fan
│
├──┬ Solver: ipopt, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:   2.645 s  | iters: 81     | obj: 1.831942e+03  | CPU: 156.19 KiB
│  │  ✓ | adnlp    | time: 801.096 ms | iters: 94     | obj: 1.831942e+03  | CPU: 115.44 MiB
│  │  ✓ | exa      | time: 468.436 ms | iters: 92     | obj: 1.831942e+03  | CPU: 254.73 KiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  77.312 s  | iters: 319    | obj: 1.831665e+03  | CPU: 764.94 KiB
│  │  ✓ | adnlp    | time:   3.580 s  | iters: 114    | obj: 1.831665e+03  | CPU: 345.82 MiB
│  │  ✓ | exa      | time:   1.758 s  | iters: 139    | obj: 1.831665e+03  | CPU: 481.52 KiB
│  │
│  │  N = 1000
│  │  ✗ | JuMP     | time: 500.850 s  | iters: 334    | obj: 1.936108e+03  | CPU: 633.41 KiB
│  │  ✓ | adnlp    | time:  12.341 s  | iters: 149    | obj: 1.831623e+03  | CPU: 943.17 MiB
│  │  ✓ | exa      | time:  15.105 s  | iters: 295    | obj: 1.831623e+03  | CPU: 949.12 KiB
│  └─
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:   1.271 s  | iters: 37     | obj: 1.831942e+03  | CPU: 143.93 MiB
│  │  ✗ | adnlp   : ERROR: DomainError(Inf, "sincos(x) is only defined for finite x.")
│  │  ✓ | exa      | time: 142.539 ms | iters: 37     | obj: 1.831942e+03  | CPU:   9.16 MiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  25.353 s  | iters: 132    | obj: 1.831665e+03  | CPU: 832.73 MiB
│  │  ✓ | adnlp    | time:   3.905 s  | iters: 190    | obj: 1.831665e+03  | CPU: 763.97 MiB
│  │  ✓ | exa      | time: 667.835 ms | iters: 91     | obj: 1.831665e+03  | CPU:  51.19 MiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time: 104.867 s  | iters: 72     | obj: 1.831625e+03  | CPU:   2.93 GiB
│  │  ✓ | adnlp    | time:   2.470 s  | iters: 68     | obj: 1.831625e+03  | CPU: 479.03 MiB
│  │  ✓ | exa      | time:   1.584 s  | iters: 73     | obj: 1.831625e+03  | CPU:  65.92 MiB
│  └─
└─

┌─ Problem: electric_vehicle
│
├──┬ Solver: ipopt, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:   5.787 ms | iters: 4      | obj: 1.228699e+03  | CPU:   9.84 KiB
│  │  ✓ | adnlp    | time:   8.433 ms | iters: 4      | obj: 1.228699e+03  | CPU:   2.71 MiB
│  │  ✓ | exa      | time:   4.550 ms | iters: 4      | obj: 1.228699e+03  | CPU:  58.31 KiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  12.546 ms | iters: 4      | obj: 1.228599e+03  | CPU:  10.11 KiB
│  │  ✓ | adnlp    | time:  19.376 ms | iters: 4      | obj: 1.228599e+03  | CPU:   6.74 MiB
│  │  ✓ | exa      | time:   9.309 ms | iters: 4      | obj: 1.228599e+03  | CPU: 107.38 KiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:  19.267 ms | iters: 3      | obj: 1.228585e+03  | CPU:   8.25 KiB
│  │  ✓ | adnlp    | time:  31.169 ms | iters: 3      | obj: 1.228585e+03  | CPU:  11.14 MiB
│  │  ✓ | exa      | time:  14.576 ms | iters: 3      | obj: 1.228585e+03  | CPU: 188.53 KiB
│  └─
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:   6.773 ms | iters: 4      | obj: 1.228699e+03  | CPU:   4.64 MiB
│  │  ✓ | adnlp    | time:   7.589 ms | iters: 4      | obj: 1.228699e+03  | CPU:   3.86 MiB
│  │  ✓ | exa      | time:   3.760 ms | iters: 4      | obj: 1.228699e+03  | CPU:   1.65 MiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  15.638 ms | iters: 4      | obj: 1.228599e+03  | CPU:  10.71 MiB
│  │  ✓ | adnlp    | time:  17.678 ms | iters: 4      | obj: 1.228599e+03  | CPU:   8.98 MiB
│  │  ✓ | exa      | time:   8.150 ms | iters: 4      | obj: 1.228599e+03  | CPU:   3.46 MiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:  27.378 ms | iters: 3      | obj: 1.228585e+03  | CPU:  22.09 MiB
│  │  ✓ | adnlp    | time:  30.312 ms | iters: 3      | obj: 1.228585e+03  | CPU:  15.10 MiB
│  │  ✓ | exa      | time:  12.766 ms | iters: 3      | obj: 1.228585e+03  | CPU:   6.35 MiB
│  └─
└─

┌─ Problem: glider
│
├──┬ Solver: ipopt, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:   7.762 s  | iters: 305    | obj: 1.248896e+03  | CPU: 573.98 KiB
│  │  ✓ | adnlp    | time:   6.454 s  | iters: 341    | obj: 1.248896e+03  | CPU: 332.66 MiB
│  │  ✓ | exa      | time:   5.516 s  | iters: 344    | obj: 1.248896e+03  | CPU: 544.89 KiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  22.089 s  | iters: 675    | obj: 1.247978e+03  | CPU:   1.25 MiB
│  │  ✓ | adnlp    | time:  17.502 s  | iters: 877    | obj: 1.247978e+03  | CPU:   2.06 GiB
│  │  ✓ | exa      | time:   7.097 s  | iters: 688    | obj: 1.247978e+03  | CPU: 1012.45 KiB
│  │
│  │  N = 1000
│  │  ✗ | JuMP     | time:  71.114 s  | iters: 1000   | obj: 4.568775e+02  | CPU:   1.86 MiB
│  │  ✗ | adnlp    | time:  47.537 s  | iters: 1000   | obj: 4.570726e+02  | CPU:   4.68 GiB
│  │  ✗ | exa      | time:  25.010 s  | iters: 1000   | obj: 4.551521e+02  | CPU:   1.49 MiB
│  └─
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:   3.567 s  | iters: 321    | obj: 1.248809e+03  | CPU:  72.66 MiB
│  │  ✓ | adnlp    | time:   1.550 s  | iters: 263    | obj: 1.248809e+03  | CPU: 286.90 MiB
│  │  ✓ | exa      | time:   1.012 s  | iters: 320    | obj: 1.248809e+03  | CPU:  33.51 MiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  22.832 s  | iters: 690    | obj: 1.247978e+03  | CPU: 254.22 MiB
│  │  ✓ | adnlp    | time:  11.488 s  | iters: 679    | obj: 1.247978e+03  | CPU:   1.75 GiB
│  │  ✓ | exa      | time:   2.702 s  | iters: 365    | obj: 1.247978e+03  | CPU:  91.39 MiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:  48.711 s  | iters: 726    | obj: 1.247985e+03  | CPU: 516.47 MiB
│  │  ✓ | adnlp    | time:  30.433 s  | iters: 707    | obj: 1.247985e+03  | CPU:   3.63 GiB
│  │  ✓ | exa      | time:  11.003 s  | iters: 713    | obj: 1.247985e+03  | CPU: 310.20 MiB
│  └─
└─

┌─ Problem: insurance
│
├──┬ Solver: ipopt, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time: 221.889 ms | iters: 54     | obj: 2.058581e+00  | CPU: 103.47 KiB
│  │  ✓ | adnlp    | time: 297.735 ms | iters: 54     | obj: 2.058581e+00  | CPU:  71.58 MiB
│  │  ✓ | exa      | time: 183.245 ms | iters: 54     | obj: 2.058581e+00  | CPU: 204.22 KiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:   1.018 s  | iters: 101    | obj: 2.059214e+00  | CPU: 190.86 KiB
│  │  ✓ | adnlp    | time:   1.308 s  | iters: 93     | obj: 2.059214e+00  | CPU: 302.44 MiB
│  │  ✓ | exa      | time: 870.029 ms | iters: 106    | obj: 2.059214e+00  | CPU: 438.41 KiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:   2.621 s  | iters: 111    | obj: 2.058960e+00  | CPU: 212.19 KiB
│  │  ✓ | adnlp    | time:   4.241 s  | iters: 128    | obj: 2.059312e+00  | CPU: 831.45 MiB
│  │  ✓ | exa      | time:   2.589 s  | iters: 132    | obj: 2.059511e+00  | CPU: 767.33 KiB
│  └─
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time: 427.989 ms | iters: 117    | obj: 2.058569e+00  | CPU:  35.63 MiB
│  │  ✓ | adnlp    | time: 574.071 ms | iters: 117    | obj: 2.058569e+00  | CPU: 196.21 MiB
│  │  ✓ | exa      | time: 319.365 ms | iters: 117    | obj: 2.058569e+00  | CPU:  26.02 MiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:   2.718 s  | iters: 252    | obj: 2.059179e+00  | CPU: 137.15 MiB
│  │  ✓ | adnlp    | time:   6.067 s  | iters: 416    | obj: 2.059179e+00  | CPU:   1.55 GiB
│  │  ✓ | exa      | time:   3.082 s  | iters: 345    | obj: 2.059179e+00  | CPU: 153.99 MiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:  11.672 s  | iters: 534    | obj: 2.059433e+00  | CPU: 501.22 MiB
│  │  ✓ | adnlp    | time:  20.443 s  | iters: 689    | obj: 2.059433e+00  | CPU:   4.91 GiB
│  │  ✓ | exa      | time:   9.067 s  | iters: 521    | obj: 2.059433e+00  | CPU: 442.19 MiB
│  └─
└─

┌─ Problem: jackson
│
├──┬ Solver: ipopt, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:  21.286 ms | iters: 14     | obj: 1.918604e-01  | CPU:  28.70 KiB
│  │  ✓ | adnlp    | time:  30.616 ms | iters: 14     | obj: 1.918604e-01  | CPU:   3.86 MiB
│  │  ✓ | exa      | time:  21.870 ms | iters: 14     | obj: 1.918604e-01  | CPU:  94.20 KiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  61.563 ms | iters: 18     | obj: 1.918218e-01  | CPU:  36.14 KiB
│  │  ✓ | adnlp    | time:  91.708 ms | iters: 18     | obj: 1.918218e-01  | CPU:  11.97 MiB
│  │  ✓ | exa      | time:  63.379 ms | iters: 18     | obj: 1.918218e-01  | CPU: 184.95 KiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:  96.959 ms | iters: 16     | obj: 1.918162e-01  | CPU:  32.42 KiB
│  │  ✓ | adnlp    | time: 172.763 ms | iters: 16     | obj: 1.918162e-01  | CPU:  21.45 MiB
│  │  ✓ | exa      | time: 100.489 ms | iters: 16     | obj: 1.918162e-01  | CPU: 327.52 KiB
│  └─
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:  18.628 ms | iters: 20     | obj: 1.918580e-01  | CPU:   5.21 MiB
│  │  ✓ | adnlp    | time:  34.153 ms | iters: 20     | obj: 1.918580e-01  | CPU:   9.00 MiB
│  │  ✓ | exa      | time:  19.497 ms | iters: 20     | obj: 1.918580e-01  | CPU:   4.77 MiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  40.804 ms | iters: 19     | obj: 1.918158e-01  | CPU:  11.93 MiB
│  │  ✓ | adnlp    | time:  76.209 ms | iters: 19     | obj: 1.918158e-01  | CPU:  20.73 MiB
│  │  ✓ | exa      | time:  43.146 ms | iters: 19     | obj: 1.918158e-01  | CPU:  10.83 MiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:  82.845 ms | iters: 20     | obj: 1.918046e-01  | CPU:  25.23 MiB
│  │  ✓ | adnlp    | time: 163.989 ms | iters: 20     | obj: 1.918046e-01  | CPU:  42.61 MiB
│  │  ✓ | exa      | time:  88.202 ms | iters: 20     | obj: 1.918046e-01  | CPU:  21.63 MiB
│  └─
└─

┌─ Problem: robbins
│
├──┬ Solver: ipopt, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:  15.814 ms | iters: 12     | obj: 1.962627e+01  | CPU:  13.36 KiB
│  │  ✓ | adnlp    | time:  21.277 ms | iters: 12     | obj: 1.962627e+01  | CPU:   2.29 MiB
│  │  ✓ | exa      | time:  15.646 ms | iters: 12     | obj: 1.962627e+01  | CPU:  87.92 KiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  39.202 ms | iters: 14     | obj: 1.946667e+01  | CPU:  15.05 KiB
│  │  ✓ | adnlp    | time:  55.485 ms | iters: 14     | obj: 1.946667e+01  | CPU:   6.47 MiB
│  │  ✓ | exa      | time:  40.590 ms | iters: 14     | obj: 1.946667e+01  | CPU: 176.80 KiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time: 108.162 ms | iters: 22     | obj: 1.944023e+01  | CPU:  21.83 KiB
│  │  ✓ | adnlp    | time: 160.827 ms | iters: 22     | obj: 1.944023e+01  | CPU:  19.31 MiB
│  │  ✓ | exa      | time: 112.958 ms | iters: 22     | obj: 1.944023e+01  | CPU: 329.48 KiB
│  └─
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:  22.394 ms | iters: 29     | obj: 1.962627e+01  | CPU:   2.97 MiB
│  │  ✓ | adnlp    | time:  35.221 ms | iters: 29     | obj: 1.962627e+01  | CPU:   7.52 MiB
│  │  ✓ | exa      | time:  23.257 ms | iters: 29     | obj: 1.962627e+01  | CPU:   2.72 MiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  47.688 ms | iters: 27     | obj: 1.946665e+01  | CPU:   6.15 MiB
│  │  ✓ | adnlp    | time:  78.617 ms | iters: 27     | obj: 1.946665e+01  | CPU:  16.98 MiB
│  │  ✓ | exa      | time:  49.654 ms | iters: 27     | obj: 1.946665e+01  | CPU:   5.76 MiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time: 156.201 ms | iters: 47     | obj: 1.944023e+01  | CPU:  16.46 MiB
│  │  ✓ | adnlp    | time: 263.824 ms | iters: 47     | obj: 1.944023e+01  | CPU:  53.36 MiB
│  │  ✓ | exa      | time: 161.942 ms | iters: 47     | obj: 1.944023e+01  | CPU:  15.11 MiB
│  └─
└─

┌─ Problem: robot
│
├──┬ Solver: ipopt, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:  92.453 ms | iters: 18     | obj: 9.141396e+00  | CPU:  36.14 KiB
│  │  ✓ | adnlp    | time: 116.926 ms | iters: 18     | obj: 9.141396e+00  | CPU:  12.91 MiB
│  │  ✓ | exa      | time:  68.224 ms | iters: 18     | obj: 9.141396e+00  | CPU: 180.83 KiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time: 296.899 ms | iters: 21     | obj: 9.141008e+00  | CPU:  41.72 KiB
│  │  ✓ | adnlp    | time: 375.519 ms | iters: 21     | obj: 9.141008e+00  | CPU:  36.89 MiB
│  │  ✓ | exa      | time: 193.888 ms | iters: 21     | obj: 9.141008e+00  | CPU: 373.55 KiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:   1.098 s  | iters: 33     | obj: 9.141261e+00  | CPU:  65.59 KiB
│  │  ✓ | adnlp    | time:   1.107 s  | iters: 31     | obj: 9.142037e+00  | CPU: 106.70 MiB
│  │  ✓ | exa      | time: 606.892 ms | iters: 29     | obj: 9.141600e+00  | CPU: 699.23 KiB
│  └─
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time: 103.244 ms | iters: 22     | obj: 9.141450e+00  | CPU:  23.70 MiB
│  │  ✗ | adnlp   : ERROR: DomainError(Inf, "sincos(x) is only defined for finite x.")
│  │  ✓ | exa      | time:  66.621 ms | iters: 22     | obj: 9.141450e+00  | CPU:   8.04 MiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time: 358.331 ms | iters: 28     | obj: 9.141126e+00  | CPU:  61.76 MiB
│  │  ✓ | adnlp    | time: 424.021 ms | iters: 28     | obj: 9.141126e+00  | CPU:  67.88 MiB
│  │  ✓ | exa      | time: 213.016 ms | iters: 28     | obj: 9.141126e+00  | CPU:  22.21 MiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time: 861.779 ms | iters: 27     | obj: 9.141204e+00  | CPU: 124.54 MiB
│  │  ✓ | adnlp    | time: 904.780 ms | iters: 28     | obj: 9.142465e+00  | CPU: 133.60 MiB
│  │  ✓ | exa      | time: 523.390 ms | iters: 27     | obj: 9.141204e+00  | CPU:  42.55 MiB
│  └─
└─

┌─ Problem: rocket
│
├──┬ Solver: ipopt, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:  43.117 ms | iters: 16     | obj: 1.012836e+00  | CPU:  32.42 KiB
│  │  ✓ | adnlp    | time:  58.116 ms | iters: 16     | obj: 1.012836e+00  | CPU:  15.20 MiB
│  │  ✓ | exa      | time:  24.688 ms | iters: 16     | obj: 1.012836e+00  | CPU:  98.89 KiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time: 110.505 ms | iters: 17     | obj: 1.012836e+00  | CPU:  34.28 KiB
│  │  ✓ | adnlp    | time: 150.488 ms | iters: 17     | obj: 1.012836e+00  | CPU:  39.89 MiB
│  │  ✓ | exa      | time:  60.731 ms | iters: 17     | obj: 1.012836e+00  | CPU: 186.55 KiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time: 300.899 ms | iters: 20     | obj: 1.012836e+00  | CPU:  39.86 KiB
│  │  ✓ | adnlp    | time: 378.167 ms | iters: 20     | obj: 1.012836e+00  | CPU:  92.29 MiB
│  │  ✓ | exa      | time: 143.319 ms | iters: 20     | obj: 1.012836e+00  | CPU: 334.27 KiB
│  └─
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:  46.545 ms | iters: 18     | obj: 1.012810e+00  | CPU:  19.71 MiB
│  │  ✓ | adnlp    | time:  54.445 ms | iters: 18     | obj: 1.012810e+00  | CPU:  20.32 MiB
│  │  ✓ | exa      | time:  20.311 ms | iters: 18     | obj: 1.012810e+00  | CPU:   4.45 MiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time: 123.495 ms | iters: 19     | obj: 1.012773e+00  | CPU:  49.28 MiB
│  │  ✓ | adnlp    | time: 143.148 ms | iters: 19     | obj: 1.012773e+00  | CPU:  52.11 MiB
│  │  ✓ | exa      | time:  52.260 ms | iters: 19     | obj: 1.012773e+00  | CPU:  10.49 MiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time: 282.835 ms | iters: 18     | obj: 1.012710e+00  | CPU:  96.47 MiB
│  │  ✓ | adnlp    | time: 301.226 ms | iters: 18     | obj: 1.012710e+00  | CPU:  98.86 MiB
│  │  ✓ | exa      | time: 105.224 ms | iters: 18     | obj: 1.012710e+00  | CPU:  19.97 MiB
│  └─
└─

┌─ Problem: space_shuttle
│
├──┬ Solver: ipopt, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:   3.325 s  | iters: 143    | obj: 3.853784e-01  | CPU: 268.56 KiB
│  │  ✓ | adnlp    | time:   1.516 s  | iters: 124    | obj: 3.853783e-01  | CPU: 211.53 MiB
│  │  ✓ | exa      | time: 849.088 ms | iters: 124    | obj: 3.853783e-01  | CPU: 332.83 KiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:   7.334 s  | iters: 114    | obj: 5.958750e-01  | CPU: 214.64 KiB
│  │  ✓ | adnlp    | time:   3.857 s  | iters: 108    | obj: 5.958750e-01  | CPU: 458.96 MiB
│  │  ✓ | exa      | time:   1.832 s  | iters: 108    | obj: 5.958750e-01  | CPU: 489.77 KiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:  20.669 s  | iters: 139    | obj: 3.050204e-01  | CPU: 264.25 KiB
│  │  ✓ | adnlp    | time:  36.471 s  | iters: 228    | obj: 3.036105e-01  | CPU:   1.88 GiB
│  │  ✓ | exa      | time:  12.780 s  | iters: 200    | obj: 3.037427e-01  | CPU: 874.72 KiB
│  └─
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:   2.508 s  | iters: 116    | obj: 3.853767e-01  | CPU: 149.03 MiB
│  │  ✓ | adnlp    | time:   1.779 s  | iters: 148    | obj: 3.854907e-01  | CPU: 300.50 MiB
│  │  ✓ | exa      | time: 786.350 ms | iters: 148    | obj: 3.854907e-01  | CPU:  44.76 MiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:   4.365 s  | iters: 75     | obj: 5.958750e-01  | CPU: 342.39 MiB
│  │  ✓ | adnlp    | time:   4.324 s  | iters: 138    | obj: 5.958750e-01  | CPU: 683.43 MiB
│  │  ✓ | exa      | time:   1.756 s  | iters: 138    | obj: 5.958750e-01  | CPU:  99.36 MiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time: 182.757 s  | iters: 864    | obj: 3.050207e-01  | CPU:   2.29 GiB
│  │  ✓ | adnlp    | time:  21.023 s  | iters: 230    | obj: 3.050207e-01  | CPU:   2.47 GiB
│  │  ✗ | exa      | time:   9.339 s  | iters: 254    | obj: 1.691066e-01  | CPU: 451.53 MiB
│  └─
└─

┌─ Problem: steering
│
├──┬ Solver: ipopt, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:  34.126 ms | iters: 12     | obj: 5.545770e-01  | CPU:  25.38 KiB
│  │  ✓ | adnlp    | time:  39.413 ms | iters: 12     | obj: 5.545770e-01  | CPU:   6.94 MiB
│  │  ✓ | exa      | time:  28.375 ms | iters: 12     | obj: 5.545770e-01  | CPU: 106.84 KiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time: 114.558 ms | iters: 17     | obj: 5.545719e-01  | CPU:  34.67 KiB
│  │  ✓ | adnlp    | time: 134.376 ms | iters: 17     | obj: 5.545719e-01  | CPU:  23.39 MiB
│  │  ✓ | exa      | time:  96.456 ms | iters: 17     | obj: 5.545719e-01  | CPU: 222.38 KiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time: 258.912 ms | iters: 18     | obj: 5.545711e-01  | CPU:  36.53 KiB
│  │  ✓ | adnlp    | time: 303.367 ms | iters: 18     | obj: 5.545711e-01  | CPU:  49.13 MiB
│  │  ✓ | exa      | time: 209.373 ms | iters: 18     | obj: 5.545711e-01  | CPU: 406.78 KiB
│  └─
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:  31.299 ms | iters: 13     | obj: 5.545770e-01  | CPU:   9.32 MiB
│  │  ✓ | adnlp    | time:  34.662 ms | iters: 13     | obj: 5.545770e-01  | CPU:   9.83 MiB
│  │  ✓ | exa      | time:  23.339 ms | iters: 13     | obj: 5.545770e-01  | CPU:   2.82 MiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  83.411 ms | iters: 14     | obj: 5.545718e-01  | CPU:  23.11 MiB
│  │  ✓ | adnlp    | time:  97.533 ms | iters: 14     | obj: 5.545718e-01  | CPU:  25.10 MiB
│  │  ✓ | exa      | time:  60.825 ms | iters: 14     | obj: 5.545718e-01  | CPU:   6.42 MiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time: 195.305 ms | iters: 15     | obj: 5.545711e-01  | CPU:  44.78 MiB
│  │  ✓ | adnlp    | time: 215.652 ms | iters: 15     | obj: 5.545711e-01  | CPU:  52.36 MiB
│  │  ✓ | exa      | time: 141.139 ms | iters: 15     | obj: 5.545711e-01  | CPU:  12.58 MiB
│  └─
└─

┌─ Problem: vanderpol
│
├──┬ Solver: ipopt, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:   4.487 ms | iters: 3      | obj: 1.047836e+00  | CPU:   8.03 KiB
│  │  ✓ | adnlp    | time:   6.230 ms | iters: 3      | obj: 1.047836e+00  | CPU: 955.22 KiB
│  │  ✓ | exa      | time:   3.715 ms | iters: 3      | obj: 1.047836e+00  | CPU:  53.44 KiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:   9.417 ms | iters: 3      | obj: 1.047812e+00  | CPU:   8.25 KiB
│  │  ✓ | adnlp    | time:  13.715 ms | iters: 3      | obj: 1.047812e+00  | CPU:   2.30 MiB
│  │  ✓ | exa      | time:   7.524 ms | iters: 3      | obj: 1.047812e+00  | CPU: 102.50 KiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:  17.679 ms | iters: 3      | obj: 1.047808e+00  | CPU:   8.25 KiB
│  │  ✓ | adnlp    | time:  26.996 ms | iters: 3      | obj: 1.047808e+00  | CPU:   4.58 MiB
│  │  ✓ | exa      | time:  13.943 ms | iters: 3      | obj: 1.047808e+00  | CPU: 184.69 KiB
│  └─
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 200
│  │  ✓ | JuMP     | time:   5.668 ms | iters: 3      | obj: 1.047836e+00  | CPU:   4.55 MiB
│  │  ✓ | adnlp    | time:   5.532 ms | iters: 3      | obj: 1.047836e+00  | CPU:   2.02 MiB
│  │  ✓ | exa      | time:   3.101 ms | iters: 3      | obj: 1.047836e+00  | CPU:   1.65 MiB
│  │
│  │  N = 500
│  │  ✓ | JuMP     | time:  13.020 ms | iters: 3      | obj: 1.047812e+00  | CPU:  10.52 MiB
│  │  ✓ | adnlp    | time:  12.446 ms | iters: 3      | obj: 1.047812e+00  | CPU:   4.40 MiB
│  │  ✓ | exa      | time:   6.664 ms | iters: 3      | obj: 1.047812e+00  | CPU:   3.47 MiB
│  │
│  │  N = 1000
│  │  ✓ | JuMP     | time:  26.182 ms | iters: 3      | obj: 1.047808e+00  | CPU:  21.94 MiB
│  │  ✓ | adnlp    | time:  24.726 ms | iters: 3      | obj: 1.047808e+00  | CPU:   8.38 MiB
│  │  ✓ | exa      | time:  12.571 ms | iters: 3      | obj: 1.047808e+00  | CPU:   6.51 MiB
│  └─
└─

Moonshot

This benchmark suite evaluates 14 optimal control problems on GPU-accelerated hardware, focusing on large-scale problems.

Benchmark Configuration:

  • Solver: MadNLP (GPU-optimised)
  • Models: ExaModels (CPU), ExaModels (GPU)
  • Grid sizes: 1000, 5000, 10000 discretisation points
  • Discretisation: Trapeze method
  • Tolerance: 1e-6
  • Limits: 1000 iterations max, 1000s wall time

This configuration demonstrates GPU acceleration capabilities with ExaModels on large-scale problems, comparing CPU vs GPU performance for the same modelling framework.

Note

The linear solver is MUMPS for all experiments.

🚀 Environment

📅 Timestamp     : 2025-10-25 13:28:15 UTC
🔧 Julia version : 1.11.7
💻 OS            : Linux
🖥️ Machine       : moonshot

You can download the exact environment used for this benchmark:

These files allow you to reproduce the benchmark environment and results exactly.

ℹ️ Version info
Julia Version 1.11.7
Commit f2b3dbda30a (2025-09-08 12:10 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 144 × Intel(R) Xeon(R) Gold 6140 CPU @ 2.30GHz
  WORD_SIZE: 64
  LLVM: libLLVM-16.0.6 (ORCJIT, skylake-avx512)
Threads: 16 default, 0 interactive, 8 GC (on 144 virtual cores)
Environment:
  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
  JULIA_DEPOT_PATH = /scratch/github-actions/julia_depot
  LD_LIBRARY_PATH = /home/mschanen/local/lib:/home/mschanen/local/lib:
  JULIA_NUM_THREADS = 16
📦 Package status
Project CTBenchmarks v0.2.2
Status `/scratch/github-actions/actions_runner_control_toolbox/_work/CTBenchmarks.jl/CTBenchmarks.jl/Project.toml`
  [6e4b80f9] BenchmarkTools v1.6.3
  [052768ef] CUDA v5.9.2
  [a93c6f00] DataFrames v1.8.1
  [b6b21f68] Ipopt v1.12.1
 [682c06a0] JSON v0.21.4
  [4076af6c] JuMP v1.29.2
  [d72a61cc] MadNLPGPU v0.7.16
  [3b83494e] MadNLPMumps v0.5.1
  [f4238b75] NLPModelsIpopt v0.11.0
  [5f98b655] OptimalControl v1.1.5
  [59046045] OptimalControlProblems v0.3.1
  [bd369af6] Tables v1.12.1
  [ade2ca70] Dates v1.11.0
  [b77e0a4c] InteractiveUtils v1.11.0
  [44cfe95a] Pkg v1.11.0
  [de0858da] Printf v1.11.0
  [6462fe0b] Sockets v1.11.0
Info Packages marked with  have new versions available but compatibility constraints restrict them from upgrading. To see why use `status --outdated`
📚 Complete manifest
Project CTBenchmarks v0.2.2
Status `/scratch/github-actions/actions_runner_control_toolbox/_work/CTBenchmarks.jl/CTBenchmarks.jl/Manifest.toml`
  [54578032] ADNLPModels v0.8.13
  [47edcb42] ADTypes v1.18.0
  [14f7f29c] AMD v0.5.3
  [621f4979] AbstractFFTs v1.5.0
  [79e6a3ab] Adapt v4.4.0
  [a9b6321e] Atomix v1.1.2
  [13072b0f] AxisAlgorithms v1.1.0
  [ab4f0b2a] BFloat16s v0.6.0
  [6e4b80f9] BenchmarkTools v1.6.3
  [fa961155] CEnum v0.5.0
  [54762871] CTBase v0.16.4
  [790bbbee] CTDirect v0.17.4
  [1c39547c] CTFlows v0.8.9
  [34c4fa32] CTModels v0.6.9
  [32681960] CTParser v0.7.1
  [052768ef] CUDA v5.9.2
  [1af6417a] CUDA_Runtime_Discovery v1.0.0
  [45b445bb] CUDSS v0.6.1
  [d360d2e6] ChainRulesCore v1.26.0
  [523fee87] CodecBzip2 v0.8.5
  [944b1d66] CodecZlib v0.7.8
  [3da002f7] ColorTypes v0.12.1
  [5ae59095] Colors v0.13.1
  [38540f10] CommonSolve v0.2.4
  [bbf7d656] CommonSubexpressions v0.3.1
  [34da2185] Compat v4.18.1
  [a8cc5b0e] Crayons v4.1.1
  [9a962f9c] DataAPI v1.16.0
  [a93c6f00] DataFrames v1.8.1
  [864edb3b] DataStructures v0.19.1
  [e2d170a0] DataValueInterfaces v1.0.0
  [163ba53b] DiffResults v1.1.0
  [b552c78f] DiffRules v1.15.1
  [ffbed154] DocStringExtensions v0.9.5
  [1037b233] ExaModels v0.9.2
  [e2ba6199] ExprTools v0.1.10
  [9aa1b823] FastClosures v0.3.2
  [1a297f60] FillArrays v1.14.0
  [53c48c17] FixedPointNumbers v0.8.5
  [f6369f11] ForwardDiff v1.2.2
  [069b7b12] FunctionWrappers v1.1.3
  [0c68f7d7] GPUArrays v11.2.6
  [46192b85] GPUArraysCore v0.2.0
  [61eb1bfa] GPUCompiler v1.7.2
  [096a3bc2] GPUToolbox v1.0.0
  [34c5aeac] HSL v0.5.1
  [076d061b] HashArrayMappedTries v0.2.0
  [842dd82b] InlineStrings v1.4.5
  [a98d9a8b] Interpolations v0.16.2
  [41ab1584] InvertedIndices v1.3.1
  [b6b21f68] Ipopt v1.12.1
  [92d709cd] IrrationalConstants v0.2.6
  [82899510] IteratorInterfaceExtensions v1.0.0
  [692b3bcd] JLLWrappers v1.7.1
 [682c06a0] JSON v0.21.4
  [0f8b85d8] JSON3 v1.14.3
  [4076af6c] JuMP v1.29.2
  [63c18a36] KernelAbstractions v0.9.38
  [40e66cde] LDLFactorizations v0.10.1
  [929cbde3] LLVM v9.4.4
  [8b046642] LLVMLoopInfo v1.0.0
  [b964fa9f] LaTeXStrings v1.4.0
  [5c8ed15e] LinearOperators v2.11.0
  [2ab3a3ac] LogExpFunctions v0.3.29
  [33e6dc65] MKL v0.9.0
  [d8e11817] MLStyle v0.4.17
  [1914dd2f] MacroTools v0.5.16
  [2621e9c9] MadNLP v0.8.12
  [d72a61cc] MadNLPGPU v0.7.16
  [3b83494e] MadNLPMumps v0.5.1
  [b8f27783] MathOptInterface v1.46.0
  [2679e427] Metis v1.5.0
  [e1d29d7a] Missings v1.2.0
  [d8a4904e] MutableArithmetics v1.6.7
  [a4795742] NLPModels v0.21.5
  [f4238b75] NLPModelsIpopt v0.11.0
  [e01155f1] NLPModelsModifiers v0.7.2
  [5da4648a] NVTX v1.0.1
  [77ba4419] NaNMath v1.1.3
  [6fe1bfb0] OffsetArrays v1.17.0
  [5f98b655] OptimalControl v1.1.5
  [59046045] OptimalControlProblems v0.3.1
  [bac558e1] OrderedCollections v1.8.1
  [d96e819e] Parameters v0.12.3
  [69de0a69] Parsers v2.8.3
  [2dfb63ee] PooledArrays v1.4.3
 [aea7be01] PrecompileTools v1.2.1
  [21216c6a] Preferences v1.5.0
  [08abe8d2] PrettyTables v3.1.0
  [be4d8f0f] Quadmath v0.5.13
  [74087812] Random123 v1.7.1
  [e6cf234a] RandomNumbers v1.6.0
  [c84ed2f1] Ratios v0.4.5
  [3cdcf5f2] RecipesBase v1.3.4
  [189a3867] Reexport v1.2.2
  [ae029012] Requires v1.3.1
  [37e2e3b7] ReverseDiff v1.16.1
  [7e506255] ScopedValues v1.5.0
  [6c6a2e73] Scratch v1.3.0
  [91c51154] SentinelArrays v1.4.8
  [ff4d7338] SolverCore v0.3.8
  [a2af1166] SortingAlgorithms v1.2.2
  [9f842d2f] SparseConnectivityTracer v1.1.1
  [0a514795] SparseMatrixColorings v0.4.22
  [276daf66] SpecialFunctions v2.6.1
  [90137ffa] StaticArrays v1.9.15
  [1e83bf80] StaticArraysCore v1.4.4
  [10745b16] Statistics v1.11.1
  [892a3eda] StringManipulation v0.4.1
  [856f2bd8] StructTypes v1.11.0
  [3783bdb8] TableTraits v1.0.1
  [bd369af6] Tables v1.12.1
  [a759f4b9] TimerOutputs v0.5.29
  [e689c965] Tracy v0.1.6
  [3bb67fe8] TranscodingStreams v0.11.3
  [3a884ed6] UnPack v1.0.2
  [013be700] UnsafeAtomics v0.3.0
  [efce3f68] WoodburyMatrices v1.0.0
  [ae81ac8f] ASL_jll v0.1.3+0
  [6e34b625] Bzip2_jll v1.0.9+0
  [d1e2174e] CUDA_Compiler_jll v0.3.0+0
  [4ee394cb] CUDA_Driver_jll v13.0.2+0
  [76a88914] CUDA_Runtime_jll v0.19.2+0
  [4889d778] CUDSS_jll v0.7.1+0
  [017b0a0e] HSL_jll v4.0.4+0
  [e33a78d0] Hwloc_jll v2.12.2+0
  [1d5cc7b8] IntelOpenMP_jll v2025.2.0+0
  [9cc047cb] Ipopt_jll v300.1400.1900+0
  [9c1d0b0a] JuliaNVTXCallbacks_jll v0.2.1+0
  [dad2f222] LLVMExtra_jll v0.0.38+0
  [ad6e5548] LibTracyClient_jll v0.9.1+6
  [94ce4f54] Libiconv_jll v1.18.0+0
  [d00139f3] METIS_jll v5.1.3+0
  [856f044c] MKL_jll v2025.2.0+0
  [d7ed1dd3] MUMPS_seq_jll v500.800.100+0
  [e98f9f5b] NVTX_jll v3.2.2+0
  [656ef2d0] OpenBLAS32_jll v0.3.29+0
  [efe28fd5] OpenSpecFun_jll v0.5.6+0
 [319450e9] SPRAL_jll v2025.5.20+0
 [02c8fc9c] XML2_jll v2.13.9+0
  [a65dc6b1] Xorg_libpciaccess_jll v0.18.1+0
  [1e29f10c] demumble_jll v1.3.0+0
  [1317d2d5] oneTBB_jll v2022.0.0+1
  [0dad84c5] ArgTools v1.1.2
  [56f22d72] Artifacts v1.11.0
  [2a0f44e3] Base64 v1.11.0
  [ade2ca70] Dates v1.11.0
  [8ba89e20] Distributed v1.11.0
  [f43a241f] Downloads v1.6.0
  [7b1f6079] FileWatching v1.11.0
  [9fa8497b] Future v1.11.0
  [b77e0a4c] InteractiveUtils v1.11.0
  [4af54fe1] LazyArtifacts v1.11.0
  [b27032c2] LibCURL v0.6.4
  [76f85450] LibGit2 v1.11.0
  [8f399da3] Libdl v1.11.0
  [37e2e46d] LinearAlgebra v1.11.0
  [56ddb016] Logging v1.11.0
  [d6f4376e] Markdown v1.11.0
  [a63ad114] Mmap v1.11.0
  [ca575930] NetworkOptions v1.2.0
  [44cfe95a] Pkg v1.11.0
  [de0858da] Printf v1.11.0
  [9abbd945] Profile v1.11.0
  [3fa0cd96] REPL v1.11.0
  [9a3f8284] Random v1.11.0
  [ea8e919c] SHA v0.7.0
  [9e88b42a] Serialization v1.11.0
  [1a1011a3] SharedArrays v1.11.0
  [6462fe0b] Sockets v1.11.0
  [2f01184e] SparseArrays v1.11.0
  [f489334b] StyledStrings v1.11.0
  [4607b0f0] SuiteSparse
  [fa267f1f] TOML v1.0.3
  [a4e569a6] Tar v1.10.0
  [8dfed614] Test v1.11.0
  [cf7118a7] UUIDs v1.11.0
  [4ec0a83e] Unicode v1.11.0
  [e66e0078] CompilerSupportLibraries_jll v1.1.1+0
  [deac9b47] LibCURL_jll v8.6.0+0
  [e37daf67] LibGit2_jll v1.7.2+0
  [29816b5a] LibSSH2_jll v1.11.0+1
  [c8ffd9c3] MbedTLS_jll v2.28.6+0
  [14a3606d] MozillaCACerts_jll v2023.12.12
  [4536629a] OpenBLAS_jll v0.3.27+1
  [05823500] OpenLibm_jll v0.8.5+0
  [bea87d4a] SuiteSparse_jll v7.7.0+0
  [83775a58] Zlib_jll v1.2.13+1
  [8e850b90] libblastrampoline_jll v5.11.0+0
  [8e850ede] nghttp2_jll v1.59.0+0
  [3f19e933] p7zip_jll v17.4.0+2
Info Packages marked with  have new versions available but compatibility constraints restrict them from upgrading. To see why use `status --outdated -m`

⚡ Results

Benchmarks results:

┌─ Problem: beam
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 1000
│  │  ✓ | exa      | time:  59.865 ms | iters: 22     | obj: 8.889006e+00  | CPU:   8.45 MiB
│  │  ✓ | exa_gpu  | time: 142.711 ms | iters: 25     | obj: 8.827707e+00  | CPU:  9.238 MiB | GPU: 11.902 MiB
│  │
│  │  N = 5000
│  │  ✓ | exa      | time: 320.342 ms | iters: 17     | obj: 8.888990e+00  | CPU:  34.86 MiB
│  │  ✓ | exa_gpu  | time: 193.168 ms | iters: 31     | obj: 8.586481e+00  | CPU: 13.002 MiB | GPU: 61.717 MiB
│  │
│  │  N = 10000
│  │  ✓ | exa      | time: 700.976 ms | iters: 18     | obj: 8.889088e+00  | CPU:  71.26 MiB
│  │  ✓ | exa_gpu  | time: 188.773 ms | iters: 22     | obj: 8.291850e+00  | CPU: 12.807 MiB | GPU: 116.519 MiB
│  └─
└─

┌─ Problem: chain
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 1000
│  │  ✓ | exa      | time:  32.421 ms | iters: 6      | obj: 5.068510e+00  | CPU:   6.74 MiB
│  │  ✓ | exa_gpu  | time:  95.181 ms | iters: 13     | obj: 5.065447e+00  | CPU:  6.466 MiB | GPU: 19.022 MiB
│  │
│  │  N = 5000
│  │  ✓ | exa      | time: 294.845 ms | iters: 5      | obj: 5.068475e+00  | CPU:  31.13 MiB
│  │  ✓ | exa_gpu  | time: 148.442 ms | iters: 16     | obj: 5.053179e+00  | CPU: 11.576 MiB | GPU: 96.378 MiB
│  │
│  │  N = 10000
│  │  ✓ | exa      | time: 656.787 ms | iters: 5      | obj: 5.068449e+00  | CPU:  61.82 MiB
│  │  ✓ | exa_gpu  | time:   3.129 s  | iters: 403    | obj: 5.037613e+00  | CPU: 191.632 MiB | GPU: 553.801 MiB
│  └─
└─

┌─ Problem: double_oscillator
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 1000
│  │  ✓ | exa      | time:  41.685 ms | iters: 5      | obj: 9.110070e-04  | CPU:  13.30 MiB
│  │  ✓ | exa_gpu  | time:  73.667 ms | iters: 8      | obj: 8.386344e-04  | CPU:  6.162 MiB | GPU: 37.826 MiB
│  │
│  │  N = 5000
│  │  ✓ | exa      | time: 536.670 ms | iters: 5      | obj: 9.110369e-04  | CPU:  64.60 MiB
│  │  ✓ | exa_gpu  | time: 102.482 ms | iters: 4      | obj: 9.079947e-04  | CPU: 13.692 MiB | GPU: 186.410 MiB
│  │
│  │  N = 10000
│  │  ✓ | exa      | time:   1.152 s  | iters: 5      | obj: 9.110439e-04  | CPU: 128.74 MiB
│  │  ✓ | exa_gpu  | time: 159.148 ms | iters: 4      | obj: 9.048849e-04  | CPU: 24.686 MiB | GPU: 372.791 MiB
│  └─
└─

┌─ Problem: ducted_fan
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 1000
│  │  ✓ | exa      | time:   1.702 s  | iters: 73     | obj: 1.831625e+03  | CPU:  64.56 MiB
│  │  ✓ | exa_gpu  | time:   1.931 s  | iters: 127    | obj: 1.828961e+03  | CPU: 67.785 MiB | GPU: 91.003 MiB
│  │
│  │  N = 5000
│  │  ✓ | exa      | time:  17.344 s  | iters: 114    | obj: 1.831617e+03  | CPU: 604.21 MiB
│  │  ✓ | exa_gpu  | time:   2.336 s  | iters: 39     | obj: 1.818331e+03  | CPU: 38.948 MiB | GPU: 352.288 MiB
│  │
│  │  N = 10000
│  │  ✗ | exa      | time:  24.935 s  | iters: 69     | obj: 1.176093e+02  | CPU: 982.00 MiB
│  │  ✓ | exa_gpu  | time:  17.786 s  | iters: 195    | obj: 1.805046e+03  | CPU: 129.078 MiB | GPU:  1.036 GiB
│  └─
└─

┌─ Problem: electric_vehicle
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 1000
│  │  ✓ | exa      | time:  14.304 ms | iters: 3      | obj: 1.228585e+03  | CPU:   6.35 MiB
│  │  ✓ | exa_gpu  | time:  74.098 ms | iters: 11     | obj: 1.227994e+03  | CPU:  5.935 MiB | GPU: 17.560 MiB
│  │
│  │  N = 5000
│  │  ✓ | exa      | time: 133.396 ms | iters: 3      | obj: 1.228581e+03  | CPU:  29.99 MiB
│  │  ✓ | exa_gpu  | time:  92.120 ms | iters: 12     | obj: 1.225635e+03  | CPU: 10.414 MiB | GPU: 88.029 MiB
│  │
│  │  N = 10000
│  │  ✓ | exa      | time: 286.716 ms | iters: 3      | obj: 1.228580e+03  | CPU:  59.53 MiB
│  │  ✓ | exa_gpu  | time: 159.506 ms | iters: 12     | obj: 1.222695e+03  | CPU: 15.533 MiB | GPU: 176.041 MiB
│  └─
└─

┌─ Problem: glider
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 1000
│  │  ✓ | exa      | time:  11.675 s  | iters: 734    | obj: 1.247985e+03  | CPU: 318.60 MiB
│  │  ✗ | exa_gpu  | time:  15.737 s  | iters: 1000   | obj: 4.999827e+02  | CPU: 780.544 MiB | GPU: 228.325 MiB
│  │
│  │  N = 5000
│  │  ✓ | exa      | time:  64.147 s  | iters: 522    | obj: 1.247987e+03  | CPU:   1.16 GiB
│  │  ✗ | exa_gpu  | time:  47.958 s  | iters: 1000   | obj: 1.596359e+02  | CPU:  1.069 GiB | GPU:  1.079 GiB
│  │
│  │  N = 10000
│  │  ✓ | exa      | time: 117.346 s  | iters: 459    | obj: 1.247987e+03  | CPU:   2.02 GiB
│  │  ✗ | exa_gpu  | time:  93.329 s  | iters: 1000   | obj: 4.815478e+02  | CPU: 776.781 MiB | GPU:  2.220 GiB
│  └─
└─

┌─ Problem: insurance
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 1000
│  │  ✓ | exa      | time:  10.369 s  | iters: 538    | obj: 2.059433e+00  | CPU: 462.87 MiB
│  │  ✓ | exa_gpu  | time: 577.607 ms | iters: 61     | obj: 1.175172e+00  | CPU: 28.485 MiB | GPU: 57.504 MiB
│  │
│  │  N = 5000
│  │  ✓ | exa      | time:  90.667 s  | iters: 752    | obj: 2.059534e+00  | CPU:   3.20 GiB
│  │  ✓ | exa_gpu  | time:   3.807 s  | iters: 245    | obj: 1.173336e+00  | CPU: 113.984 MiB | GPU: 594.673 MiB
│  │
│  │  N = 10000
│  │  ✓ | exa      | time: 149.623 s  | iters: 558    | obj: 2.059237e+00  | CPU:   4.81 GiB
│  │  ✓ | exa_gpu  | time:   7.898 s  | iters: 228    | obj: 1.171076e+00  | CPU: 123.755 MiB | GPU:  1.136 GiB
│  └─
└─

┌─ Problem: jackson
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 1000
│  │  ✓ | exa      | time:  96.405 ms | iters: 20     | obj: 1.918046e-01  | CPU:  21.63 MiB
│  │  ✓ | exa_gpu  | time: 234.059 ms | iters: 31     | obj: -7.511061e-07 | CPU: 13.242 MiB | GPU: 34.912 MiB
│  │
│  │  N = 5000
│  │  ✓ | exa      | time: 707.112 ms | iters: 19     | obj: 1.917600e-01  | CPU: 103.29 MiB
│  │  ✓ | exa_gpu  | time: 224.028 ms | iters: 22     | obj: -3.468065e-07 | CPU: 17.825 MiB | GPU: 167.117 MiB
│  │
│  │  N = 10000
│  │  ✓ | exa      | time:   1.478 s  | iters: 18     | obj: 1.917093e-01  | CPU: 200.21 MiB
│  │  ✓ | exa_gpu  | time: 297.914 ms | iters: 23     | obj: -7.464148e-07 | CPU: 27.905 MiB | GPU: 335.868 MiB
│  └─
└─

┌─ Problem: robbins
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 1000
│  │  ✓ | exa      | time: 169.545 ms | iters: 47     | obj: 1.944023e+01  | CPU:  15.11 MiB
│  │  ✓ | exa_gpu  | time: 193.444 ms | iters: 25     | obj: 1.942160e+01  | CPU: 10.050 MiB | GPU: 17.509 MiB
│  │
│  │  N = 5000
│  │  ✓ | exa      | time:   1.845 s  | iters: 63     | obj: 1.943235e+01  | CPU:  89.39 MiB
│  │  ✓ | exa_gpu  | time: 903.473 ms | iters: 107    | obj: 1.934096e+01  | CPU: 39.959 MiB | GPU: 130.364 MiB
│  │
│  │  N = 10000
│  │  ✓ | exa      | time:   2.913 s  | iters: 43     | obj: 1.943232e+01  | CPU: 136.58 MiB
│  │  ✓ | exa_gpu  | time: 891.014 ms | iters: 88     | obj: 1.925063e+01  | CPU: 37.560 MiB | GPU: 240.557 MiB
│  └─
└─

┌─ Problem: robot
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 1000
│  │  ✓ | exa      | time: 587.719 ms | iters: 27     | obj: 9.141204e+00  | CPU:  42.55 MiB
│  │  ✓ | exa_gpu  | time: 518.742 ms | iters: 30     | obj: 9.123238e+00  | CPU: 18.727 MiB | GPU: 66.844 MiB
│  │
│  │  N = 5000
│  │  ✓ | exa      | time:   7.643 s  | iters: 41     | obj: 9.142359e+00  | CPU: 307.02 MiB
│  │  ✓ | exa_gpu  | time:   1.635 s  | iters: 27     | obj: 9.053093e+00  | CPU: 29.256 MiB | GPU: 329.227 MiB
│  │
│  │  N = 10000
│  │  ✓ | exa      | time:  19.166 s  | iters: 47     | obj: 9.143634e+00  | CPU: 754.05 MiB
│  │  ✓ | exa_gpu  | time:   3.372 s  | iters: 32     | obj: 8.965878e+00  | CPU: 47.584 MiB | GPU: 672.443 MiB
│  └─
└─

┌─ Problem: rocket
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 1000
│  │  ✓ | exa      | time: 114.797 ms | iters: 18     | obj: 1.012710e+00  | CPU:  19.97 MiB
│  │  ✓ | exa_gpu  | time: 506.758 ms | iters: 50     | obj: 1.000000e+00  | CPU: 21.575 MiB | GPU: 44.095 MiB
│  │
│  │  N = 5000
│  │  ✓ | exa      | time: 761.548 ms | iters: 18     | obj: 1.012223e+00  | CPU:  97.64 MiB
│  │  ✓ | exa_gpu  | time: 768.695 ms | iters: 27     | obj: 1.000007e+00  | CPU: 21.807 MiB | GPU: 201.423 MiB
│  │
│  │  N = 10000
│  │  ✓ | exa      | time:   1.634 s  | iters: 17     | obj: 1.011682e+00  | CPU: 190.76 MiB
│  │  ✓ | exa_gpu  | time:   1.208 s  | iters: 24     | obj: 1.000001e+00  | CPU: 31.671 MiB | GPU: 397.830 MiB
│  └─
└─

┌─ Problem: space_shuttle
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 1000
│  │  ✓ | exa      | time:  13.171 s  | iters: 340    | obj: 3.050195e-01  | CPU: 599.43 MiB
│  │  ✓ | exa_gpu  | time:  10.997 s  | iters: 420    | obj: -8.780199e-02 | CPU: 326.389 MiB | GPU: 309.406 MiB
│  │
│  │  N = 5000
│  │  ✗ | exa      | time:  74.983 s  | iters: 301    | obj: -9.202651e-01 | CPU:   1.95 GiB
│  │  ✗ | exa_gpu  | time:  23.621 s  | iters: 293    | obj: 4.215226e-01  | CPU: 324.947 MiB | GPU:  1.298 GiB
│  │
│  │  N = 10000
│  │  ✗ | exa      | time:  90.168 s  | iters: 185    | obj: 2.310158e-01  | CPU:   2.92 GiB
│  │  ✗ | exa_gpu  | time:  22.454 s  | iters: 166    | obj: 4.087187e-01  | CPU: 242.169 MiB | GPU:  2.189 GiB
│  └─
└─

┌─ Problem: steering
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 1000
│  │  ✓ | exa      | time: 152.764 ms | iters: 15     | obj: 5.545711e-01  | CPU:  12.58 MiB
│  │  ✓ | exa_gpu  | time: 223.693 ms | iters: 14     | obj: 5.545599e-01  | CPU:  8.125 MiB | GPU: 27.359 MiB
│  │
│  │  N = 5000
│  │  ✓ | exa      | time:   1.203 s  | iters: 16     | obj: 5.545709e-01  | CPU:  62.15 MiB
│  │  ✓ | exa_gpu  | time: 807.203 ms | iters: 16     | obj: 5.545179e-01  | CPU: 14.275 MiB | GPU: 138.008 MiB
│  │
│  │  N = 10000
│  │  ✓ | exa      | time:   2.862 s  | iters: 18     | obj: 5.545709e-01  | CPU: 129.56 MiB
│  │  ✓ | exa_gpu  | time:   1.202 s  | iters: 16     | obj: 5.544658e-01  | CPU: 21.192 MiB | GPU: 275.910 MiB
│  └─
└─

┌─ Problem: vanderpol
│
├──┬ Solver: madnlp, Discretization: trapeze
│  │
│  │  N = 1000
│  │  ✓ | exa      | time:  14.201 ms | iters: 3      | obj: 1.047808e+00  | CPU:   6.51 MiB
│  │  ✓ | exa_gpu  | time:  67.615 ms | iters: 7      | obj: 1.045639e+00  | CPU:  4.413 MiB | GPU: 17.544 MiB
│  │
│  │  N = 5000
│  │  ✓ | exa      | time: 140.096 ms | iters: 3      | obj: 1.047807e+00  | CPU:  30.82 MiB
│  │  ✓ | exa_gpu  | time:  85.506 ms | iters: 7      | obj: 1.036994e+00  | CPU:  8.680 MiB | GPU: 87.681 MiB
│  │
│  │  N = 10000
│  │  ✓ | exa      | time: 306.031 ms | iters: 3      | obj: 1.047807e+00  | CPU:  61.20 MiB
│  │  ✓ | exa_gpu  | time: 108.121 ms | iters: 7      | obj: 1.026238e+00  | CPU: 13.952 MiB | GPU: 175.349 MiB
│  └─
└─