Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
eccvm.bench.cpp
Go to the documentation of this file.
1#include <benchmark/benchmark.h>
2
8
9using namespace benchmark;
10using namespace bb;
11
15
16namespace {
17
18Builder generate_trace(size_t target_num_gates)
19{
21 using G1 = typename Flavor::CycleGroup;
22 using Fr = typename G1::Fr;
23
24 auto generators = get_precomputed_generators<G1, "test generators", 2>();
25
26 typename G1::element a = generators[0];
27 typename G1::element b = generators[1];
30
31 // Each loop adds 163 gates. Note: builder.get_estimated_num_finalized_gates() is very expensive here (bug?) and
32 // it's actually painful to use a `while` loop
33 size_t num_iterations = target_num_gates / 163;
34 for (size_t _ = 0; _ < num_iterations; _++) {
35 op_queue->add_accumulate(a);
36 op_queue->mul_accumulate(a, x);
37 op_queue->mul_accumulate(b, x);
38 op_queue->mul_accumulate(b, y);
39 op_queue->add_accumulate(a);
40 op_queue->mul_accumulate(b, x);
41 op_queue->eq_and_reset();
42 op_queue->merge();
43 }
44
46 op_queue->append_hiding_op(Fq::random_element(), Fq::random_element());
47
48 Builder builder{ op_queue };
49 return builder;
50}
51
52void eccvm_generate_prover(State& state) noexcept
53{
54
55 size_t target_num_gates = 1 << static_cast<size_t>(state.range(0));
56 for (auto _ : state) {
57 Builder builder = generate_trace(target_num_gates);
58 std::shared_ptr<Transcript> prover_transcript = std::make_shared<Transcript>();
59 ECCVMProver prover(builder, prover_transcript);
60 };
61}
62
63template <typename Prover> void construct_proof(State& state) noexcept
64{
65 size_t target_num_gates = 1 << static_cast<size_t>(state.range(0));
66 for (auto _ : state) {
67 Builder builder = generate_trace(target_num_gates);
68 std::shared_ptr<Transcript> prover_transcript = std::make_shared<Transcript>();
69 Prover prover(builder, prover_transcript);
70 auto proof = prover.construct_proof();
71 benchmark::DoNotOptimize(proof);
72 benchmark::DoNotOptimize(prover.ipa_proof);
73 };
74}
75
76template <typename Prover> void execute_sumcheck(State& state) noexcept
77{
78 size_t target_num_gates = 1 << static_cast<size_t>(state.range(0));
79 for (auto _ : state) {
80 state.PauseTiming();
81 Builder builder = generate_trace(target_num_gates);
82 std::shared_ptr<Transcript> prover_transcript = std::make_shared<Transcript>();
83 Prover prover(builder, prover_transcript);
84 prover.execute_preamble_round();
85 prover.execute_wire_commitments_round();
86 prover.execute_log_derivative_commitments_round();
87 prover.execute_grand_product_computation_round();
88 state.ResumeTiming();
89
90 prover.execute_relation_check_rounds();
91 benchmark::DoNotOptimize(prover.sumcheck_output);
92 };
93}
94
95void eccvm_full_prove(State& state) noexcept
96{
97 construct_proof<ECCVMProver>(state);
98}
99
100void eccvm_full_sumcheck(State& state) noexcept
101{
102 execute_sumcheck<ECCVMProver>(state);
103}
104
105BENCHMARK(eccvm_generate_prover)->Unit(kMillisecond)->DenseRange(12, CONST_ECCVM_LOG_N);
106BENCHMARK(eccvm_full_prove)->Unit(kMillisecond)->DenseRange(12, CONST_ECCVM_LOG_N);
107BENCHMARK(eccvm_full_sumcheck)->Unit(kMillisecond)->DenseRange(12, CONST_ECCVM_LOG_N);
108} // namespace
109
110int main(int argc, char** argv)
111{
113 benchmark::Initialize(&argc, argv);
114 benchmark::RunSpecifiedBenchmarks();
115 benchmark::Shutdown();
116 return 0;
117}
Common transcript class for both parties. Stores the data for the current round, as well as the manif...
BaseTranscript< Codec, HashFunction > Transcript
bb::fq BaseField
Definition bn254.hpp:19
AluTraceBuilder builder
Definition alu.test.cpp:124
FF a
FF b
std::filesystem::path bb_crs_path()
void init_file_crs_factory(const std::filesystem::path &path)
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
constexpr std::span< const typename Group::affine_element > get_precomputed_generators()
BENCHMARK(bench_commit_structured_random_poly< curve::BN254 >) -> Unit(benchmark::kMillisecond)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
Curve::AffineElement G1
static field random_element(numeric::RNG *engine=nullptr) noexcept