Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
mega_honk.bench.cpp
Go to the documentation of this file.
1#include <benchmark/benchmark.h>
2
6
7using namespace benchmark;
8using namespace bb;
9
13static void construct_proof_megahonk(State& state, void (*test_circuit_function)(MegaCircuitBuilder&, size_t)) noexcept
14{
15 size_t num_iterations = 10; // 10x the circuit
16 bb::mock_circuits::construct_proof_with_specified_num_iterations<MegaProver>(
17 state, test_circuit_function, num_iterations);
18}
19
23static void construct_proof_megahonk_power_of_2(State& state) noexcept
24{
25 auto log2_of_gates = static_cast<size_t>(state.range(0));
26 bb::mock_circuits::construct_proof_with_specified_num_iterations<MegaProver>(
27 state, &bb::mock_circuits::generate_basic_arithmetic_circuit<MegaCircuitBuilder>, log2_of_gates);
28}
29
30static void get_row_power_of_2(State& state) noexcept
31{
32 auto log2_of_gates = static_cast<size_t>(state.range(0));
33 size_t gates = 1 << log2_of_gates;
35 for (auto& poly : polynomials.get_all()) {
36 poly = bb::Polynomial<bb::fr>(gates);
37 }
38 for (auto _ : state) {
39 for (size_t i = 0; i < gates; i++) {
40 benchmark::DoNotOptimize(polynomials.get_row(i));
41 }
42 }
43}
44
48static void construct_proof_megahonk_poseidon2_hash(State& state) noexcept
49{
50 const auto num_inputs = static_cast<size_t>(state.range(0));
51
53 bb::generate_poseidon2_hash_test_circuit<MegaCircuitBuilder>(builder, num_inputs);
55 info("construct_proof_megahonk_poseidon2_hash: num_inputs=",
56 num_inputs,
57 ", actual_gates=",
58 builder.num_gates(),
59 ", dyadic_size=",
60 instance->dyadic_size());
61
62 bb::mock_circuits::construct_proof_with_specified_num_iterations<MegaProver>(
63 state, &bb::generate_poseidon2_hash_test_circuit<MegaCircuitBuilder>, num_inputs);
64}
65
66// Define benchmarks
67// Sweep input sizes so dyadic domain ranges 2^15..2^19 (Mega: ~12 gates/input).
68BENCHMARK(construct_proof_megahonk_poseidon2_hash)
69 ->Arg(1500)
70 ->Arg(3000)
71 ->Arg(6000)
72 ->Arg(12000)
73 ->Arg(24000)
74 ->Arg(50000)
75 ->Unit(kMillisecond);
76
77// This exists due to an issue where get_row was blowing up in time
78BENCHMARK_CAPTURE(construct_proof_megahonk, sha256, &generate_sha256_test_circuit<MegaCircuitBuilder>)
79 ->Unit(kMillisecond);
80BENCHMARK_CAPTURE(construct_proof_megahonk,
81 ecdsa_verification,
82 &stdlib::generate_ecdsa_verification_test_circuit<MegaCircuitBuilder>)
83 ->Unit(kMillisecond);
84
85BENCHMARK(get_row_power_of_2)
86 // 2**15 gates to 2**20 gates
87 ->DenseRange(15, 20)
88 ->Unit(kMillisecond);
89
90BENCHMARK(construct_proof_megahonk_power_of_2)
91 // 2**15 gates to 2**20 gates
92 ->DenseRange(15, 20)
93 ->Unit(kMillisecond);
94
95int main(int argc, char** argv)
96{
98
99 ::benchmark::Initialize(&argc, argv);
100 if (::benchmark::ReportUnrecognizedArguments(argc, argv))
101 return 1;
102 ::benchmark::RunSpecifiedBenchmarks();
103 ::benchmark::Shutdown();
104
105 std::cout << "\n=== Detailed BB_BENCH Profiling Stats ===\n";
107
108 return 0;
109}
std::shared_ptr< Napi::ThreadSafeFunction > instance
Structured polynomial class that represents the coefficients 'a' of a_0 + a_1 x .....
A container for polynomials handles used by the prover.
AllValuesType get_row(size_t row_idx) const
#define info(...)
Definition log.hpp:93
AluTraceBuilder builder
Definition alu.test.cpp:124
int main(int argc, char **argv)
BENCHMARK_CAPTURE(construct_proof_megahonk, ecdsa_verification, &stdlib::generate_ecdsa_verification_test_circuit< MegaCircuitBuilder >) -> Unit(kMillisecond)
GlobalBenchStatsContainer GLOBAL_BENCH_STATS
Definition bb_bench.cpp:822
bool use_bb_bench
Definition bb_bench.cpp:175
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
BENCHMARK(bench_commit_structured_random_poly< curve::BN254 >) -> Unit(benchmark::kMillisecond)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
PureSha256 sha256
void print_aggregate_counts_hierarchical(std::ostream &) const
Definition bb_bench.cpp:548