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.
In plain terms
How to read a benchmark here.
Every figure on this page is a ratio of two timings. Here is what was timed, against whom, and what had to be true for a run to count.
- RatioWhat was measured?
The same matrix is handed to VVE EigenCore and to the LAPACK routine it replaces, and each one is timed on the same machine, one processor core each. The figure shown is their time divided by ours, so a ratio of one means parity. Timings are the median of repeated trials, and the whole campaign was run again on different hardware to check the ratios hold.
- dsyev and dstemrWho are the opponents?
dsyev works through the whole grid. dstemr, like VVE, works along the band, which is why it is the harder opponent. dsyev is the default route: it is what almost every program gets when it asks LAPACK for the eigenvalues of a symmetric matrix, and it works through every entry. dstemr is the expert route a specialist would choose for a band-shaped matrix, and it is the harder opponent. Both are reference LAPACK, the same plain-arithmetic field VVE itself stands on. Vendor stacks with hand-tuned kernels are a different field, and VVE carries none of that tuning, so they are not in this record.
- Accuracy gateCan a wrong answer be fast?
Not here. Every answer, from both sides, is checked by putting the values back into the original problem and measuring what is left over. A run that fails that check is thrown out before any timing is recorded, so a ratio can never come from VVE doing less work than its opponent. Speed is only reported where accuracy was equal.
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
dsyev, full decomposition, via LD_PRELOAD · one core against one core
Comparison A
Against the call your code already makes.
This is the default path: numpy.linalg.eigh, or a direct dsyev, served by reference LAPACK. VVE EigenCore is swapped in with LD_PRELOAD and nothing else changes — same script, same call site, same inputs. On structured matrices VVE SmartRoute detects the band structure the dense path ignores and routes it to the O(N²) solver. Reference LAPACK is the same plain-arithmetic field VVE stands on: no hand-tuned kernels on either side.
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.
Forty-nine minutes, 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 · one core against one core
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.
Eigenvalue agreement
VVE and reference LAPACK, the same matrix
- LAPACK0.70710678118654752
- VVE0.70710678118654753
agree to the last digit a double can hold
max|Δλ| across the bands-native range
1.78e-15
max |Δλ|, bands-native, N = 8,192 → 524,288
0
correctness failures across the campaign
Accuracy says the answer is right. Determinism says it is the same bits on every machine in scope.
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.