# zkVM Benchmark - 250910 ## tl;dr **Pico** - **`execute` mode**: Works for three cases but not the mainnet one. - **`prove` mode in CPU**: No case succeed. Even the simplest test case just halt in the midst of the run. Have reported to Brevis team. - **`prove` mode in GPU**: Not sure if Pico has GPU mode and made an inquiry to the dev team. **r0vm** - **`execute` mode**: Works for all test cases - **`prove` mode in CPU**: No case succeed. Even the simplest test case run indefinitely long. Have run it for 5 hrs and still running. - **`prove` mode in GPU**: Complete the first two test cases and error out on the remaining two. --- ## General For CPU, the following benchmark is run on: - chip: AMD Ryzen 7 PRO 4750G with Radeon Graphics - cores: 8 - thread(s) per core: 2 - mem: 48 GB - OS: Ubuntu 24.04.3 LTS But it seems zkVM only use a single core to run guest code during execution mode. Source: - For r0vm: https://github.com/jimmychu0807/grandine-zk/tree/jc/r0vm - For pico: https://github.com/jimmychu0807/grandine-zk/tree/jc/pico | | r0vm | pico | | -------- | -------- | -------- | | `execute` mode | All completed | The last test case failed and [reported](https://github.com/brevis-network/pico/issues/48). See below. | | `prove` mode (CPU) | All test cases ran indefinitely long | Proving for the simplest case just halted and [reported](https://github.com/brevis-network/pico/issues/49). | | `prove` mode (GPU) | First two test cases completed. See below. | Not sure if pico has GPU mode and [inquired](https://github.com/brevis-network/pico/issues/50). | ## `execute` Mode Column headers: - **consensus-spec-test** - consensus spec tests mainnet electra empty block transition - **pectra-wo-epoch** - pectra-devnet-6 without epoch transition - **pectra-wo-epoch** - pectra-devnet-6 with epoch transition - **mainnet-wo-epoch** - mainnet without epoch transition The following results are generated from using execution mode, no zk-proof is generated. Generating zk proof will take **a lot longer**. For **r0vm** | | consensus-spec-test | pectra-wo-epoch | pectra-w-epoch | mainnet-wo-epoch | | -------- | -------- | -------- |--|--| | time elapsed | 5.59s | 117.43s | 927.43s | 3066.35s | | execution cycles | 241,696,768 | 4,909,432,832 | 39,038,484,480 | 116,489,453,568 | For **pico** | | consensus-spec-test | pectra-wo-epoch | pectra-w-epoch | mainnet-wo-epoch | | -------- | -------- | -------- |--|--| | time elapsed | 33.62s | 528.43s | 2592.21s | Panicked with max memory exceeded. [Read explanation](https://github.com/brevis-network/pico/issues/48#issuecomment-3286930946).| | execution cycles | 164,850,074 | 2,555,459,575 | 12,685,893,340 | n.a. | ## `prove` Mode For r0vm, benchmark is done using RiscZero Bonsai network (with GPU capability). | | consensus-spec-test | pectra-wo-epoch | pectra-w-epoch | mainnet-wo-epoch | | -------- | -------- | -------- |--|--| | r0vm | r0vm | r0vm |r0vm |r0vm | | time elapsed | 58.12s | 469.90s | error out | error out | Both errors fail with error logs: ``` Error: Bonsai prover workflow [1963d036-7b19-4856-835b-3a7321abad31] exited: FAILED err: INTERNAL_ERROR Stack backtrace: 0: anyhow::error::<impl anyhow::Error>::msg at /home/jimmychu/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/anyhow-1.0.99/src/backtrace.rs:27:14 1: <risc0_zkvm::host::client::prove::bonsai::BonsaiProver as risc0_zkvm::host::client::prove::Prover>::prove_with_ctx at /home/jimmychu/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/risc0-zkvm-3.0.1/src/host/client/prove/bonsai.rs:154:17 2: risc0_zkvm::host::client::prove::Prover::prove at /home/jimmychu/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/risc0-zkvm-3.0.1/src/host/client/prove/mod.rs:78:14 3: <zkvm_host::backend::risc0::Vm as zkvm_host::backend::VmBackend>::prove at ./zkvm/host/src/backend/risc0.rs:101:33 ```