Skip to main content
Version: Next (unstable)

Performance

These benchmarks use Eidos, Miden VM's native hash function, for STARK proof generation. The resulting proofs are therefore recursion-friendly: they can be efficiently verified inside Miden VM.

Single-core prover performance​

The VM executes the Blake3 example program on an Apple M4 Pro with one Rayon worker. The rows measure chains of 2, 8, 32, and 128 Blake3 calls, with VM cycles padded to a power of two. The default proof parameters target 96-bit conjectured security. See the Eidos security and usage guide.

Padded VM cyclesExecution timeProving timeRAM consumedProof size
2143.00 ms1.04 sec0.60 GiB154.4 KiB
2162.95 ms2.42 sec0.79 GiB154.2 KiB
2183.97 ms9.02 sec1.91 GiB173.1 KiB
2207.68 ms38.92 sec6.46 GiB192.0 KiB

The Apple M5 Max results use one Rayon worker. Timings and proof sizes are medians of five samples after one warmup proof.

Padded VM cyclesExecution timeProving timeRAM consumedProof size
2142.63 ms0.92 sec0.65 GiB154.4 KiB
2162.75 ms2.13 sec1.35 GiB154.2 KiB
2183.18 ms7.48 sec2.25 GiB173.1 KiB
2205.21 ms30.01 sec6.93 GiB192.0 KiB

The AMD Ryzen 9 9950X results use one Rayon worker. Ryzen timings and proof sizes are medians of five samples.

Padded VM cyclesExecution timeProving timeRAM consumedProof size
2145.99 ms0.95 sec0.37 GiB154.4 KiB
2166.29 ms2.30 sec0.54 GiB154.2 KiB
2186.87 ms8.46 sec1.59 GiB173.1 KiB
2209.04 ms33.78 sec5.66 GiB192.0 KiB

Multi-core prover performance​

The following runs use 128 Blake3 calls (828,632 VM cycles, padded to 220).

MachineExecution timeProving timeExecution %Implied Frequency
Apple M1 Pro (12 threads)9.4 ms7.75 sec0.12%135 KHz
Apple M4 Pro (14 threads)6.3 ms4.36 sec0.14%240 KHz
Apple M4 Max (16 threads)5.9 ms2.97 sec0.20%353 KHz
Apple M5 Max (18 threads)5.8 ms2.69 sec0.22%390 KHz
Amazon Graviton 4 (64 threads)
AMD EPYC 9R45 (64 threads)
AMD Ryzen 9 9950X (16 threads)9.7 ms3.78 sec0.26%277 KHz
AMD Ryzen 9 9950X (32 threads)9.5 ms3.83 sec0.25%274 KHz

Execution % is execution time divided by proving time. Implied frequency is the padded VM cycle count (220 = 1,048,576 for these runs) divided by proving time, reported in KHz.

Reproducing the results​

Run these commands from the workspace root:

cargo build --locked --profile optimized -p miden-vm-blake3-bench --bin vm-performance
target/optimized/vm-performance --hash eidos --threads 14 --iterations 128 --samples 5

For the single-core rows, use --threads 1 with --iterations 2, 8, 32, or 128. For multi-core results, set --threads to the thread count in the machine's table row.

With --samples 5, the runner collects five measured samples after one unmeasured warmup proof and verifies every proof. Report median execution and proving times and median proof sizes.

Execution time measures the fast interpreter. Proving time includes trace generation but excludes witness construction. RAM consumed is peak process memory.