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
7
8using namespace benchmark;
9
10namespace bb {
11
12using Flavor = MegaFlavor;
13
14void _bench_round(::benchmark::State& state, void (*F)(ProtogalaxyProver_<Flavor>&))
15{
16 using Builder = typename Flavor::CircuitBuilder;
18 using DeciderVerificationKey = DeciderVerificationKey_<Flavor>;
19 using ProtogalaxyProver = ProtogalaxyProver_<Flavor>;
20
22 auto log2_num_gates = static_cast<size_t>(state.range(0));
23
24 const auto construct_key = [&]() {
28 };
29
30 // TODO(https://github.com/AztecProtocol/barretenberg/issues/938): Parallelize this loop, also extend to more than
31 // k=1
32 std::shared_ptr<DeciderProvingKey> decider_pk_1 = construct_key();
33 auto honk_vk_1 = std::make_shared<Flavor::VerificationKey>(decider_pk_1->get_precomputed());
34 auto decider_vk_1 = std::make_shared<DeciderVerificationKey>(honk_vk_1);
35 std::shared_ptr<DeciderProvingKey> decider_pk_2 = construct_key();
36 auto honk_vk_2 = std::make_shared<Flavor::VerificationKey>(decider_pk_2->get_precomputed());
37 auto decider_vk_2 = std::make_shared<DeciderVerificationKey>(honk_vk_2);
40
41 ProtogalaxyProver folding_prover({ decider_pk_1, decider_pk_2 }, { decider_vk_1, decider_vk_2 }, transcript);
42
43 // prepare the prover state
44 folding_prover.accumulator = decider_pk_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_key();
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_key(); })
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.keys_to_fold);
67}) -> DenseRange(14, 20) -> Unit(kMillisecond);
68BENCHMARK_CAPTURE(bench_round_mega, fold, [](auto& prover) {
69 prover.update_target_sum_and_fold(prover.keys_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
A DeciderProvingKey is normally constructed from a finalized circuit and it contains all the informat...
The DeciderVerificationKey encapsulates all the necessary information for a Mega Honk Verifier to ver...
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.
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 > &))
BENCHMARK_CAPTURE(bench_round_mega, oink, [](auto &prover) { prover.run_oink_prover_on_each_incomplete_key();}) -> DenseRange(14, 20) -> Unit(kMillisecond)
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 > &))
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
BENCHMARK_MAIN()