Drop in
This is the speed path. How the drop-in works.
Array signal processing
A row of antennas hears a signal. The system has to say which direction it came from before the next frame arrives, on a small board, with an answer that is the same every time so it can be signed off once. The step that decides all of that is an eigenproblem. VVE is built for that step.
In the field this is MUSIC and ESPRIT: the array covariance matrix is decomposed, signal is split from noise, and the spectrum is scanned, all inside one frame.
Wilkinson, N=16,383
89.6×
vs single-threaded reference netlib LAPACK dsyev (the default dense path) — wilkinson, N = 16,383
Wilkinson, N = 45,056
5.16×
vs LAPACK's own expert O(N²) routine, single-threaded dstemr (MRRR)
libvve.so
1.4MB
libvve.so, zero external dependencies
In four pictures
In plain terms
A direction finder has one expensive step. What the problem is, why that step is the one that hurts, and why the answer has to be the same on every board.
An array of antennas or microphones hears the same signal at slightly different moments at each element. From those differences, software works out where the signal came from. The standard methods, MUSIC and ESPRIT, start by building a matrix of how every element's signal relates to every other, and then take that matrix apart with an eigensolver to separate the signals from the noise.
Every other stage in the chain is cheap and predictable. The eigendecomposition is the stage that sets how long a frame takes, how much memory the board needs, and how much of the system has to be re-examined when anything changes. It has to finish inside the frame, on a board with no room for a large tuned math library.
A sensing product is tested and signed off, then shipped on many boards for years. If the answer shifts with the chip, every new board reopens that work. VVE EigenCore returns the same bits on x86 and Arm from the same source, so the evidence gathered on one does not have to be re-argued on the next.
The signal chain
Five steps from listening to a direction. Four of them are cheap and predictable. The third grows with the array, pulls in a math library, and produces the number that has to be identical next year on next year's board.
1
The antennas record a short burst of what they hear.
array snapshots
2
A table of how each element's recording relates to every other.
covariance matrix R
3the step that sets the clock
The eigensolver finds the directions hidden in that table. This is the one expensive step.
eigendecomposition of R
4
A few strong components are the signal. The rest is noise and is set aside.
signal / noise subspace split
5
Every direction is tried. The one that fits stands out as a sharp peak.
MUSIC / ESPRIT spectrum
| The workload requires | VVE answers with |
|---|---|
| A frame-rate latency budget. | VVE SmartRoute, structure-aware O(N²) routing — 89.6× vs single-threaded reference netlib dsyev at N = 16,383, and up to 5.16× vs single-threaded LAPACK dstemr on clustered spectra; both comparisons are single-threaded on both sides. |
| A board with no room for a tuned BLAS. | 1.4 MB, zero external dependencies. Runtime dependencies are libc, libm and libpthread. Intel/AMD and Arm from the same source. |
| Evidence that survives qualification. | The same bits across machine, chip family, compiler and chip generation — 96 fingerprint records across 12 groups, zero mismatches, 541 / 541 across chip generations. |
| Correlated sources. | Clustered spectra are where VVE's margin is largest and where it holds at every size measured — the wilkinson and schrödinger families in the campaign. |
Subspace methods need a clean split between the signal eigenvalues and the noise floor. Correlated and coherent arrivals collapse that separation — the signal eigenvalues bunch, and the classical response is to spend more work resolving them. MRRR resolves a cluster by refining its representation tree, and that refinement is exactly where its cost goes up. VVE's routing does not pay that penalty, which is why the two clustered families in the campaign are the two where it wins at every size measured.
Wilkinson, N=16,383
89.6×
vs single-threaded reference netlib LAPACK dsyev (the default dense path) — wilkinson, N = 16,383, full decomposition
Full decomposition, N=45,056, Wilkinson spectrum
5.16×
vs LAPACK's own expert O(N²) routine, single-threaded dstemr (MRRR) — wilkinson, N = 45,056, accuracy gated on both sides
Wilkinson, N=45,056, wall clock
171.1s
dstemr vs VVE, wilkinson, N = 45,056, both single-threaded
96 / 96
SHA-256 records identical across Intel/AMD and Arm chips, GCC and Clang
This is the speed path. How the drop-in works.
One small code change, and the dense matrix never exists: your program hands VVE the band instead of the whole thing. This is the memory path, and it is what makes large arrays fit in a board's memory budget rather than a server's.
Array size, snapshot count, source correlation, target board and instruction set. We will run your case on the harness and send the numbers back with the build, so the first result you see comes from your problem rather than ours.