6#include <benchmark/benchmark.h>
15using namespace benchmark;
23class ChonkBench :
public benchmark::Fixture {
26 static constexpr size_t NUM_ITERATIONS_MEDIUM_COMPLEXITY = 5;
28 void SetUp([[maybe_unused]] const ::benchmark::State& state)
override
37BENCHMARK_DEFINE_F(ChonkBench, VerificationOnly)(benchmark::State& state)
39 size_t NUM_APP_CIRCUITS = 1;
43 for (
auto _ : state) {
46 benchmark::DoNotOptimize(verifier.verify(proof));
53BENCHMARK_DEFINE_F(ChonkBench, Full)(benchmark::State& state)
55 size_t NUM_APP_CIRCUITS =
static_cast<size_t>(state.range(0));
58 for (
auto _ : state) {
67BENCHMARK_DEFINE_F(ChonkBench, ProofCompress)(benchmark::State& state)
69 size_t NUM_APP_CIRCUITS = 1;
73 for (
auto _ : state) {
81BENCHMARK_DEFINE_F(ChonkBench, ProofDecompress)(benchmark::State& state)
83 size_t NUM_APP_CIRCUITS = 1;
90 for (
auto _ : state) {
98BENCHMARK_DEFINE_F(ChonkBench, VerifyIndividual)(benchmark::State& state)
100 const size_t num_proofs =
static_cast<size_t>(state.range(0));
106 for (
auto _ : state) {
107 for (
size_t i = 0; i < num_proofs; i++) {
109 benchmark::DoNotOptimize(verifier.verify(proof));
117BENCHMARK_DEFINE_F(ChonkBench, BatchVerify)(benchmark::State& state)
119 const size_t num_proofs =
static_cast<size_t>(state.range(0));
125 for (
size_t i = 0; i < num_proofs; i++) {
126 inputs[i] = { proof, vk_and_hash };
129 for (
auto _ : state) {
134#define ARGS Arg(ChonkBench::NUM_ITERATIONS_MEDIUM_COMPLEXITY)->Arg(2)
136BENCHMARK_REGISTER_F(ChonkBench, Full)->Unit(benchmark::kMillisecond)->ARGS;
137BENCHMARK_REGISTER_F(ChonkBench, VerificationOnly)->Unit(benchmark::kMillisecond);
138BENCHMARK_REGISTER_F(ChonkBench, ProofCompress)->Unit(benchmark::kMillisecond);
139BENCHMARK_REGISTER_F(ChonkBench, ProofDecompress)->Unit(benchmark::kMillisecond);
140BENCHMARK_REGISTER_F(ChonkBench, VerifyIndividual)->Unit(benchmark::kMillisecond)->Arg(1)->Arg(2)->Arg(4)->Arg(8);
141BENCHMARK_REGISTER_F(ChonkBench, BatchVerify)->Unit(benchmark::kMillisecond)->Arg(1)->Arg(2)->Arg(4)->Arg(8);
static bool verify(std::span< const Input > inputs)
Verify multiple Chonk proofs with batched IPA verification.
Verifier for Chonk IVC proofs (both native and recursive).
static std::vector< uint8_t > compress_chonk_proof(const ChonkProof &proof)
static ChonkProof decompress_chonk_proof(const std::vector< uint8_t > &compressed, size_t mega_num_public_inputs)
#define GOOGLE_BB_BENCH_REPORTER(state)
std::filesystem::path bb_crs_path()
void init_file_crs_factory(const std::filesystem::path &path)
Entry point for Barretenberg command-line interface.
std::pair< ChonkProof, std::shared_ptr< MegaZKFlavor::VKAndHash > > accumulate_and_prove_with_precomputed_vks(size_t num_app_circuits, auto &precomputed_vks, const bool large_first_app=true)
Perform a specified number of circuit accumulation rounds.
std::vector< std::shared_ptr< typename MegaFlavor::VerificationKey > > precompute_vks(const size_t num_app_circuits, const bool large_first_app=true)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static constexpr size_t HIDING_KERNEL_PROOF_LENGTH_WITHOUT_PUBLIC_INPUTS