Skip to content

Benchmarks

Mean wall-clock execution time, measured on a GitHub Actions ubuntu-22.04 runner (2-core x86_64 VM on an Intel Xeon 8370C, 2.8 GHz base / 3.5 GHz boost). Mean time is averaged over a variable number of calibrated rounds (from ~9 for large inputs up to ~6000 for small inputs).

These tables are regenerated automatically by the benchmark CI job on each push to main. An interactive history of the same measurements is published at the benchmark dashboard.

For the asymptotic complexity (which is what stays fixed as the implementation evolves), see the Benchmarks section of the README.

Array-based solvers

Mean time in milliseconds for the array-based solvers, by input length \(N\) (number of sampled points):

Solver \ N 500 1000 2000 4000 8000
VIE-1 0.03 0.05 0.11 0.37 1.34
VIE-1 (continuous) 0.03 0.06 0.14 0.42 1.47
VIE-2 0.05 0.13 0.44 1.64 6.33
VIDE 0.44 1.13 3.26 10.6 37.6
VIE-1 (d=2) 0.08 0.21 0.69 2.53 9.76
VIE-1 (d=2, continuous) 0.08 0.22 0.72 2.63 9.81
VIE-2 (d=2) 0.23 0.82 3.18 12.4 49.2
VIDE (d=2) 0.81 2.68 9.69 36.9 143

Callable-input solvers

The callable-input solvers run the general path (Python + adaptive quadrature, no Toeplitz reuse), so they are benchmarked on much smaller problems, sized by the number of mesh intervals \(M\) (each carrying len(coll_choices) collocation nodes). The weakly singular row uses an Abel kernel \(K(u) = u^{-1/2}\) on a graded mesh with the singularity declared:

Solver \ M 25 50 100
function_solve_VIE_1 9.42 34.5 131
function_solve_VIE_2 9.34 34.7 136
function_solve_VIE_2 (vector, d=3) 16.2 60.5 236
function_solve_VIDE 9.64 35.1 134
function_solve_VIE_2 (weakly singular) 117 266 653