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: every entrydstemr: the band
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.

vs single-threaded reference netlib LAPACK 3.12.0 dsyev — the algorithmic baseline

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.

Speedup against reference netlib dsyev on clustered spectraA log-log line chart of speedup vs single-threaded reference netlib LAPACK dsyev, both sides single-threaded. Wilkinson rises from 9.8× at N = 2,048 to 89.6× at N = 16,384. Schrödinger rises from 11.1× to 97.7× across the same sizes.10.0×20.0×50.0×100.0×2,0484,0968,19216,384N — matrix dimension (log₂)× vs dsyevone doubling per doublingwilkinson (odd N)89.6×schrödinger97.7×
Speedup vs single-threaded reference netlib LAPACK 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.
Speedup vs single-threaded reference netlib dsyev. Full decomposition. Higher is faster.
FamilyN = 2,048N = 4,096N = 8,192N = 16,384
wilkinson (odd N)9.80×23.5×45.7×89.6×
schrödinger11.1×16.3×27.5×97.7×
Speedup vs single-threaded reference netlib dsyev. Full decomposition. Higher is faster.
FamilyN = 2,048N = 4,096N = 8,192N = 16,384
wilkinson (odd N)9.8×23.5×45.7×89.6×
schrödinger11.1×16.3×27.5×97.7×
second_diff10.9×16.2×29.8×101.7×
laplacian1d11.3×15.4×29.0×102.6×
anderson7.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.

Measured against

single-threaded reference netlib LAPACK

dsyev (the default dense path)full decompositionsingle-threadednetlib reference LAPACK/BLAS 3.12.0

Wall clock at N = 16,384A horizontal bar chart comparing reference netlib at 2,932.9 seconds and VVE at 28.8 seconds.01,000.02,000.0seconds — one full decompositionreference netlib LAPACK 3.12.0 dsyevsingle-threaded2,932.9 s48 min 53 sVVEsingle-threaded28.8 s28.8 s
second_diff, N = 16,384 — median wall clock for one full decomposition. Both single-threaded.
Wall clock at N = 16,384
StackSecondsWall clock
reference netlib LAPACK 3.12.0 dsyev — single-threaded2,932.9 s48 min 53 s
VVE — single-threaded28.8 s28.8 s

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.

vs single-threaded LAPACK dstemr (MRRR), full decomposition, accuracy gated on both sides
Speedup vs single-threaded dstemr on clustered spectra. Full decomposition. Higher is faster.
FamilyN = 4,096N = 16,384N = 32,768N = 45,056
wilkinson3.2×3.8×4.6×5.2×
schrödinger2.6×3.2×3.9×4.9×

Measured against

LAPACK's own expert O(N²) routine, single-threaded

dstemr (MRRR)full decompositionsingle-threadednetlib reference LAPACK 3.10.0, reference BLAS

Wall clock at N = 45,056A horizontal bar chart comparing LAPACK dstemr at 883.3 seconds and VVE at 171.1 seconds.0500.0seconds — one full decompositionLAPACK dstemr (MRRR)single-threaded883.3 s14 min 43 sVVEsingle-threaded171.1 s2 min 51 s
wilkinson, N = 45,056 — median wall clock for one full decomposition. Both single-threaded.
Wall clock at N = 45,056
StackSecondsWall clock
LAPACK dstemr (MRRR) — single-threaded883.3 s14 min 43 s
VVE — single-threaded171.1 s2 min 51 s

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.

Bands-native values-only path, second_diff. Peak RSS against the dense N×N buffer the same problem would require.
NVVE peak RSSDense N×NRatiomax |Δλ|
8,19228.7 MB0.5 GiB18×1.78e-15
32,76831.5 MB8.0 GiB260×1.78e-15
131,072≈ 53.0 MB128 GiB≈ 2,500×1.78e-15
524,288≈ 53.0 MB2,048 GiB≈ 39,600×1.78e-15
VVE peak RSS against dense memory requirementA log-log comparison. The VVE line remains almost flat from 28.7 MB to about 53 MB while the dense requirement rises from 0.5 GiB to 2,048 GiB.8,19232,768131,072524,288VVE peak RSSDense N×N
VVE peak RSS against the dense N×N requirement, log-log. One line is flat; the other is a slope of 2.
Memory figure data
8,19228.7 MB0.5 GiB
32,76831.5 MB8.0 GiB
131,07253.0 MB128 GiB
524,28853.0 MB2,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


About 15 digits agree at every size, which is the limit of double precision. Illustrative digits; the gate is recorded per cell.

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.