6#include <benchmark/benchmark.h>
18using namespace benchmark;
26class ChonkBench :
public benchmark::Fixture {
29 static constexpr size_t NUM_ITERATIONS_MEDIUM_COMPLEXITY = 5;
31 void SetUp([[maybe_unused]] const ::benchmark::State& state)
override
40BENCHMARK_DEFINE_F(ChonkBench, VerificationOnly)(benchmark::State& state)
42 size_t NUM_APP_CIRCUITS = 1;
46 for (
auto _ : state) {
49 benchmark::DoNotOptimize(verifier.verify(proof));
56BENCHMARK_DEFINE_F(ChonkBench, Full)(benchmark::State& state)
58 size_t NUM_APP_CIRCUITS =
static_cast<size_t>(state.range(0));
61 for (
auto _ : state) {
70BENCHMARK_DEFINE_F(ChonkBench, ProofCompress)(benchmark::State& state)
72 size_t NUM_APP_CIRCUITS = 1;
76 for (
auto _ : state) {
84BENCHMARK_DEFINE_F(ChonkBench, ProofDecompress)(benchmark::State& state)
86 size_t NUM_APP_CIRCUITS = 1;
91 size_t mega_num_pub_inputs =
94 for (
auto _ : state) {
102BENCHMARK_DEFINE_F(ChonkBench, VerifyIndividual)(benchmark::State& state)
104 const size_t num_proofs =
static_cast<size_t>(state.range(0));
110 for (
auto _ : state) {
111 for (
size_t i = 0; i < num_proofs; i++) {
113 benchmark::DoNotOptimize(verifier.verify(proof));
118#define ARGS Arg(ChonkBench::NUM_ITERATIONS_MEDIUM_COMPLEXITY)->Arg(2)
120BENCHMARK_REGISTER_F(ChonkBench, Full)->Unit(benchmark::kMillisecond)->ARGS;
121BENCHMARK_REGISTER_F(ChonkBench, VerificationOnly)->Unit(benchmark::kMillisecond);
122BENCHMARK_REGISTER_F(ChonkBench, ProofCompress)->Unit(benchmark::kMillisecond);
123BENCHMARK_REGISTER_F(ChonkBench, ProofDecompress)->Unit(benchmark::kMillisecond);
124BENCHMARK_REGISTER_F(ChonkBench, VerifyIndividual)->Unit(benchmark::kMillisecond)->Arg(1)->Arg(2)->Arg(4)->Arg(8);
129void bn254_point_decompression(benchmark::State& state)
137 compressed[i] = from_buffer<uint256_t>(compressed_buf, i *
sizeof(
uint256_t));
140 for (
auto _ : state) {
144 points[i] = g1::affine_element::from_compressed(compressed[i]);
147 benchmark::DoNotOptimize(points);
150BENCHMARK(bn254_point_decompression)->Unit(benchmark::kMillisecond);
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)
constexpr size_t NUM_POINTS
#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)
std::vector< uint8_t > read_file(const std::string &filename, size_t bytes=0)
BENCHMARK(bench_commit_structured_random_poly< curve::BN254 >) -> Unit(benchmark::kMillisecond)
void parallel_for(size_t num_iterations, const std::function< void(size_t)> &func)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Computes Oink proof length from flavor traits.
auto range(size_t size, size_t offset=0) const