# 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
```