Performance
This chapter looks under the hood at how Numra’s solvers actually perform — not on toy benchmarks, but on the kinds of problems users bring to the library. Every chart you’ll see was generated by a script that lives in the repo, against a Criterion harness that lives in the repo, on a machine whose specs are stamped into every figure’s caption. If a chart says Numra is fast, you can re-run the bench and check.
What you can compare here
Section titled “What you can compare here”- Tolerance vs runtime — how the cost of an integration scales as you tighten the requested accuracy, across DoPri5, Tsit5, and Vern6 on the Lorenz system.
- Stiffness handling — how Radau5, BDF, and ESDIRK54 hold up as
the Van der Pol stiffness parameter sweeps from
μ = 10toμ = 1000. - Dimension scaling — how an explicit solver (DoPri5) and an implicit one (Radau5) cope as the state dimension grows from 2 to 200 on a coupled linear system.
- Dense-output overhead — what you pay, in wall-clock terms, for enabling continuous interpolation alongside the discrete solution.
Methodology
Section titled “Methodology”Every figure in this chapter follows the same evidence rules so the numbers stand on their own:
- Criterion is the harness. Each measurement is a Criterion benchmark with a 3-second warm-up and a 20-second measurement window, well above the default. The mean is reported with a 95% confidence interval drawn as a vertical error bar on every point.
- Deterministic problems. Every benchmark is a closed-form ODE or PDE with no random forcing — the only variance is the OS scheduler and CPU thermal state, both of which are amortised by the long measurement window.
- One repo, one fingerprint. The caption on every figure carries
the Numra commit SHA, the rustc version, the CPU model, and a
pointer to the script that re-renders the figure from the same
raw Criterion output. A sidecar
.provenance.txtships next to every SVG with the full toolchain fingerprint.
How to re-run
Section titled “How to re-run”# 1. Measure (slow — about 10 minutes on a recent laptop):cargo bench -p numra-bench
# 2. Collapse Criterion's per-bench JSON into one file per group:python3 numra-bench/scripts/criterion_to_json.py
# 3. Render every chart:make -C website/figures perfThe intermediate JSON (numra-bench/results/*.json) is also checked
into git, so step 3 works without re-measuring on machines without
the hardware to run the benches at full sample size.
What this chapter does NOT do
Section titled “What this chapter does NOT do”It doesn’t exhaust every solver on every problem; the curated set above is the one that actually matters when you sit down to pick a solver.
For a head-to-head against an established library, see the Numra vs SciPy page next.