The measured record.
Two comparisons, kept apart on purpose: what VVE does to the dense default path that real code calls, and what it does to the expert O(N²) routine an expert would call instead. Every ratio names its opponent, its routine, and the thread count on both sides.
Cells measured, cells that came back clean
1,107
cells ok — zero timeouts, zero errors
2
runs end to end on independent hardware
1.5–7.2%
spread on every headline ratio between the two runs
Median of at least three trials per cell. Every ratio is computed within a single machine — absolute seconds move between cloud instances of the same SKU, ratios do not. Full decomposition — eigenvalues and eigenvectors — unless a block says otherwise.
Measured against
Reference netlib LAPACK 3.12.0 and system OpenBLAS
dsyev, full decomposition, via LD_PRELOAD · threads 1 vs 1
Comparison A
Against the call your code already makes.
This is the default path: numpy.linalg.eigh, or a direct dsyev, served by whichever LAPACK stack the machine has. VVE is swapped in with LD_PRELOAD and nothing else changes — same script, same call site, same inputs. On structured matrices it detects the band structure the dense path ignores.
Measured against
single-threaded reference netlib LAPACK
dsyev (the default dense path)full decompositionsingle-threadednetlib reference LAPACK/BLAS 3.12.0
Full decomposition, values and vectors, via LD_PRELOAD with zero code changes. Both sides single-threaded.
dsyev — full decomposition, values and vectors, via LD_PRELOAD with zero code changes. Both sides single-threaded. Clustered spectra: wilkinson (odd N) and schrödinger. Both axes log scale.| Family | N = 2,048 | N = 4,096 | N = 8,192 | N = 16,384 |
|---|---|---|---|---|
| wilkinson (odd N) | 9.80× | 23.5× | 45.7× | 89.6× |
| schrödinger | 11.1× | 16.3× | 27.5× | 97.7× |
| Family | N = 2,048 | N = 4,096 | N = 8,192 | N = 16,384 |
|---|---|---|---|---|
| wilkinson (odd N) | 9.8× | 23.5× | 45.7× | 89.6× |
| schrödinger | 11.1× | 16.3× | 27.5× | 97.7× |
| second_diff | 10.9× | 16.2× | 29.8× | 101.7× |
| laplacian1d | 11.3× | 15.4× | 29.0× | 102.6× |
| anderson | 7.5× | 12.1× | 20.4× | 64.1× |
Five structured families, and the ordering holds across all of them: the more structure the matrix has, the more work the dense path is doing that does not need doing. anderson is random-disorder — the least structured family in the campaign, and still 64× at N = 16,384.
| Family | N = 2,048 | N = 4,096 | N = 8,192 | N = 16,384 |
|---|---|---|---|---|
| wilkinson (odd N) | 1.2× | 2.9× | 6.2× | 12.2× |
| schrödinger | 1.8× | 3.2× | 4.8× | 11.7× |
| second_diff | 1.7× | 3.1× | 5.1× | 11.9× |
| laplacian1d | 1.7× | 2.9× | 4.8× | 12.0× |
| anderson | 1.3× | 2.6× | 4.2× | 9.0× |
Full decomposition, N=16,384
9.0–12.2×
vs fully tuned OpenBLAS, one core against one core dsyev (the default dense path) — N = 16,384 — one core against one core
The reference figures above measure the algorithm. These measure the fight. OpenBLAS brings decades of hand-written SIMD to the same call, and the margin still grows monotonically with N, because SIMD is a constant factor and the exponent is not. VVE has written no hand-tuned SIMD; that is headroom, not a result.
Forty-nine minutes, or five minutes and forty-two seconds, or twenty-nine seconds. Same matrix, same call, same core.
Measured against
LAPACK dstemr (MRRR), reference netlib LAPACK 3.10.0
dstemr — LAPACK's expert O(N²) tridiagonal eigensolver · threads 1 vs 1
Comparison B
Against the routine an expert would reach for instead.
The strongest objection to Comparison A is that a numerical expert would never let the dense path see a tridiagonal matrix — they would call dstemr and get O(N²) from LAPACK itself. It is a fair objection, so here is that fight, run separately and never blended with the one above. Accuracy is gated on both sides: neither result counts unless its residual and orthogonality both pass.
| Family | N = 4,096 | N = 16,384 | N = 32,768 | N = 45,056 |
|---|---|---|---|---|
| wilkinson | 3.2× | 3.8× | 4.6× | 5.2× |
| schrödinger | 2.6× | 3.2× | 3.9× | 4.9× |
The margin vs single-threaded LAPACK dstemr widens monotonically with N — 3.21× at 4,096, 5.16× at 45,056, both sides single-threaded — because VVE holds a flat scaling slope where MRRR's degrades on clusters. The last number in that row is the current floor.
The memory law.
Speed is a comparison. Memory is a law: eigvalsh requires the matrix to exist. The bands-native path does not build one.
| N | VVE peak RSS | Dense N×N | Ratio | max |Δλ| |
|---|---|---|---|---|
| 8,192 | 28.7 MB | 0.5 GiB | 18× | 1.78e-15 |
| 32,768 | 31.5 MB | 8.0 GiB | 260× | 1.78e-15 |
| 131,072 | ≈ 53.0 MB | 128 GiB | ≈ 2,500× | 1.78e-15 |
| 524,288 | ≈ 53.0 MB | 2,048 GiB | ≈ 39,600× | 1.78e-15 |
| 8,192 | 28.7 MB | 0.5 GiB |
|---|---|---|
| 32,768 | 31.5 MB | 8.0 GiB |
| 131,072 | 53.0 MB | 128 GiB |
| 524,288 | 53.0 MB | 2,048 GiB |
Accuracy does not drift across that 64× range. max |Δλ| = 1.78e-15 at every size in the table — machine precision, flat.
Accuracy is the gate, not the trade.
No result in either comparison counts unless it passes an accuracy gate on both sides — residual and orthogonality recorded per cell. Eigenvalue agreement runs at about 1e-15, machine epsilon, flat with N. On tightly clustered spectra agreement loosens to roughly 1e-10, which is a conditioning limit that constrains every eigensolver on that input equally.
~1e-15
eigenvalue agreement, flat with N
max|Δλ| across the bands-native range
1.78e-15
max |Δλ|, bands-native, N = 8,192 → 524,288
0
correctness failures across the campaign
Bring us a matrix.
Tell us the spectra you actually run and the hardware you have to run them on. We send an evaluation build and the harness we measured with, so the first number you see is one you measured yourself.