The size problem

A platform-specific LAPACK and BLAS stack is 7–60 MB, and it is tuned to the processor it was built for. On a board image that has to be signed, stored in flash and kept identical across a fleet, that is a large and variable dependency to carry for one routine. It also tends to assume a Fortran runtime and a glibc the board may not have.

libvve.so is one file. It contains its own eigensolver, depends on nothing beyond libc, libm and libpthread, and is the same source on an Intel or AMD workstation and on an Arm board.

libvve.so, to scale

1.4 MBVVE7–60 MBtuned LAPACK + BLAS
One file against a tuned LAPACK and BLAS stack, drawn to scale by area. Numbers from the footprint claim on the benchmarks page.

What it needs

Runtime requirements of libvve.so 1.3.0.
RequirementValue
Operating systemLinux (glibc)
Architecturesx86_64 (Intel, AMD) and aarch64 (Arm), from the same source
Shared librarieslibc, libm, libpthread
BLAS, LAPACK, Fortran runtimenone
Arithmetic64-bit IEEE-754 floating point, portable tier
IntegrationLD_PRELOAD=libvve.so for existing LAPACK calls, or the bands-native C entry point

Develop on the workstation, ship on the board

The expensive part of an embedded sensing product is not the first board, it is the evidence: the tests, the sign-off, the record that says the algorithm does what it claims. When the math library returns different last digits on the target than on the machine the evidence was gathered on, that record has to be re-argued for every new board.

VVE EigenCore returns the same bits on x86_64 and aarch64 from the same source, under either compiler. The tests that pass on the developer's workstation pass identically on the board, and the fingerprints prove it rather than assert it.

x86Intel · AMDArmArmsame answer, bit for bit
The same answer on the workstation it was developed on and on the board it ships to. Records on the determinism page.

8-way grid — PASS

96


fingerprints identical across Intel/AMD and Arm, GCC and Clang

Memory that fits a board

A board does not have a server's memory. For banded problems the bands-native path never builds the dense matrix, so its working memory grows with N rather than N². That is what lets a large array fit in a board's budget rather than a workstation's.

Peak resident memory, N = 524,288

53MB


against the dense N×N buffer the same problem would require

Growth per dimension

46bytes / dimension


so the ceiling is set by the problem, not the solver

The workload it was built around

Direction-of-arrival estimation with MUSIC or ESPRIT puts a symmetric eigendecomposition inside every frame of a radar, sonar or communications array, on a board that has to fit, draw the power it is allowed, and later be qualified. Correlated sources bunch the eigenvalues together, which is the Wilkinson-type spectrum on which the structure-aware path is furthest ahead.

angleantenna arraysignal
Each element hears the same signal a moment apart. The eigendecomposition of their covariance is the stage that sets the frame time.

Clustered spectrum, N = 16,383

89.6×


vs single-threaded reference netlib LAPACK dsyev (the default dense path) — one core against one core, same machine

What it is not

  • It is a Linux shared library. Linux (glibc) is the supported platform; there is no bare-metal or real-time-OS build to claim.
  • It has no speed claim on dense, unstructured matrices. Where no band exists, the call runs an ordinary dense algorithm.
  • Its determinism guarantee is per build. A new version of VVE may move the last bit, and we say so rather than hide it.

Send us your array geometry.

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.