Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
protogalaxy_rounds.bench.cpp
Go to the documentation of this file.
1#include <benchmark/benchmark.h>
2
6
7using namespace benchmark;
8
9namespace bb {
10
11using Flavor = MegaFlavor;
12
13void _bench_round(::benchmark::State& state, void (*F)(ProtogalaxyProver_<Flavor>&))
14{
15 using Builder = typename Flavor::CircuitBuilder;
17 using VerifierInstance = VerifierInstance_<Flavor>;
18 using ProtogalaxyProver = ProtogalaxyProver_<Flavor>;
19
21 auto log2_num_gates = static_cast<size_t>(state.range(0));
22
23 const auto construct_inst = [&]() {
27 };
28
29 // TODO(https://github.com/AztecProtocol/barretenberg/issues/938): Parallelize this loop, also extend to more than
30 // k=1
31 std::shared_ptr<ProverInstance> prover_inst_1 = construct_inst();
32 auto honk_vk_1 = std::make_shared<Flavor::VerificationKey>(prover_inst_1->get_precomputed());
33 auto verifier_inst_1 = std::make_shared<VerifierInstance>(honk_vk_1);
34 std::shared_ptr<ProverInstance> prover_inst_2 = construct_inst();
35 auto honk_vk_2 = std::make_shared<Flavor::VerificationKey>(prover_inst_2->get_precomputed());
36 auto verifier_inst_2 = std::make_shared<VerifierInstance>(honk_vk_2);
39
40 ProtogalaxyProver folding_prover(
41 { prover_inst_1, prover_inst_2 }, { verifier_inst_1, verifier_inst_2 }, transcript);
42
43 // prepare the prover state
44 folding_prover.accumulator = prover_inst_1;
45 folding_prover.deltas.resize(log2_num_gates);
46 std::fill_n(folding_prover.deltas.begin(), log2_num_gates, 0);
47 folding_prover.perturbator = Flavor::Polynomial::random(1 << log2_num_gates);
48 folding_prover.transcript = Flavor::Transcript::prover_init_empty();
49 folding_prover.run_oink_prover_on_each_incomplete_instance();
50
51 for (auto _ : state) {
52 F(folding_prover);
53 }
54}
55
56void bench_round_mega(::benchmark::State& state, void (*F)(ProtogalaxyProver_<MegaFlavor>&))
57{
58 _bench_round(state, F);
59}
60
61BENCHMARK_CAPTURE(bench_round_mega, oink, [](auto& prover) { prover.run_oink_prover_on_each_incomplete_instance(); })
62 -> DenseRange(14, 20) -> Unit(kMillisecond);
63BENCHMARK_CAPTURE(bench_round_mega, perturbator, [](auto& prover) { prover.perturbator_round(prover.accumulator); })
64 -> DenseRange(14, 20) -> Unit(kMillisecond);
65BENCHMARK_CAPTURE(bench_round_mega, combiner_quotient, [](auto& prover) {
66 prover.combiner_quotient_round(prover.accumulator->gate_challenges, prover.deltas, prover.prover_insts_to_fold);
67}) -> DenseRange(14, 20) -> Unit(kMillisecond);
69 prover.update_target_sum_and_fold(prover.prover_insts_to_fold,
70 prover.combiner_quotient,
71 prover.alphas,
72 prover.relation_parameters,
73 prover.perturbator_evaluation);
74}) -> DenseRange(14, 20) -> Unit(kMillisecond);
75
76} // namespace bb
77
MegaCircuitBuilder CircuitBuilder
static void construct_arithmetic_circuit(Builder &builder, const size_t target_log2_dyadic_size=4, bool include_public_inputs=true)
Populate a builder with a specified number of arithmetic gates; includes a PI.
A ProverInstance is normally constructed from a finalized circuit and it contains all the information...
The VerifierInstance encapsulates all the necessary information for a Mega Honk Verifier to verify a ...
AluTraceBuilder builder
Definition alu.test.cpp:123
Unit(benchmark::kMillisecond) -> RangeMultiplier(2) ->Range(2, MAX_BATCH_SIZE) ->Iterations(1000)
std::filesystem::path bb_crs_path()
void init_file_crs_factory(const std::filesystem::path &path)
Entry point for Barretenberg command-line interface.
void _bench_round(::benchmark::State &state, void(*F)(ProtogalaxyProver_< Flavor > &))
DenseRange(MIN_LOG_NUM_GRUMPKIN_POINTS, MAX_LOG_NUM_GRUMPKIN_POINTS) -> Unit(benchmark::kMillisecond)
void bench_round_mega(::benchmark::State &state, void(*F)(ProtogalaxyProver_< MegaFlavor > &))
BENCHMARK_CAPTURE(bench_round_mega, oink, [](auto &prover) { prover.run_oink_prover_on_each_incomplete_instance();}) -> DenseRange(14, 20) -> Unit(kMillisecond)
void fold(State &state) noexcept
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
BENCHMARK_MAIN()