Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
ultra_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_ultrahonk(State& state,
14 void (*test_circuit_function)(UltraCircuitBuilder&, size_t)) noexcept
15{
16 size_t num_iterations = 10; // 10x the circuit
17 bb::mock_circuits::construct_proof_with_specified_num_iterations<UltraProver>(
18 state, test_circuit_function, num_iterations);
19}
20
24static void construct_proof_ultrahonk_power_of_2(State& state) noexcept
25{
26 auto log2_of_gates = static_cast<size_t>(state.range(0));
27 bb::mock_circuits::construct_proof_with_specified_num_iterations<UltraProver>(
28 state, &bb::mock_circuits::generate_basic_arithmetic_circuit<UltraCircuitBuilder>, log2_of_gates);
29}
30
34static void construct_proof_ultrahonk_zk_power_of_2(State& state) noexcept
35{
36 auto log2_of_gates = static_cast<size_t>(state.range(0));
37 bb::mock_circuits::construct_proof_with_specified_num_iterations<UltraZKProver>(
38 state, &bb::mock_circuits::generate_basic_arithmetic_circuit<UltraCircuitBuilder>, log2_of_gates);
39}
40
45static void construct_proof_ultrahonk_1M_gates_dyadic_2_20(State& state) noexcept
46{
47 // Target just below 2^20 so that after finalization it rounds to exactly 2^20
48 size_t num_gates = (1 << 20) - 1000; // ~1,047,576 gates
49
50 // Verify actual dyadic size
52 bb::mock_circuits::generate_basic_arithmetic_circuit_with_target_gates<UltraCircuitBuilder>(builder, num_gates);
54 size_t dyadic_size = instance->dyadic_size();
55 info("construct_proof_ultrahonk_1M_gates_dyadic_2_20: requested=",
56 num_gates,
57 ", actual_gates=",
58 builder.num_gates(),
59 ", dyadic_size=",
60 dyadic_size);
61
62 bb::mock_circuits::construct_proof_with_specified_num_iterations<UltraProver>(
63 state, &bb::mock_circuits::generate_basic_arithmetic_circuit_with_target_gates<UltraCircuitBuilder>, num_gates);
64}
65
70static void construct_proof_ultrahonk_1M_gates_dyadic_2_21(State& state) noexcept
71{
72 // Target above 2^20 so that after finalization it rounds to 2^21
73 size_t num_gates = (1 << 20) + 1000; // ~1,049,576 gates
74
75 // Verify actual dyadic size
77 bb::mock_circuits::generate_basic_arithmetic_circuit_with_target_gates<UltraCircuitBuilder>(builder, num_gates);
79 size_t dyadic_size = instance->dyadic_size();
80 info("construct_proof_ultrahonk_1M_gates_dyadic_2_21: requested=",
81 num_gates,
82 ", actual_gates=",
83 builder.num_gates(),
84 ", dyadic_size=",
85 dyadic_size);
86
87 bb::mock_circuits::construct_proof_with_specified_num_iterations<UltraProver>(
88 state, &bb::mock_circuits::generate_basic_arithmetic_circuit_with_target_gates<UltraCircuitBuilder>, num_gates);
89}
90
91// Define benchmarks
92BENCHMARK_CAPTURE(construct_proof_ultrahonk, sha256, &generate_sha256_test_circuit<UltraCircuitBuilder>)
93 ->Unit(kMillisecond);
94BENCHMARK_CAPTURE(construct_proof_ultrahonk,
95 ecdsa_verification,
96 &stdlib::generate_ecdsa_verification_test_circuit<UltraCircuitBuilder>)
97 ->Unit(kMillisecond);
98
99BENCHMARK(construct_proof_ultrahonk_power_of_2)
100 // 2**15 gates to 2**20 gates
101 ->DenseRange(15, 20)
102 ->Unit(kMillisecond);
103
104BENCHMARK(construct_proof_ultrahonk_zk_power_of_2)
105 // 2**15 gates to 2**20 gates
106 ->DenseRange(15, 20)
107 ->Unit(kMillisecond);
108
109BENCHMARK(construct_proof_ultrahonk_1M_gates_dyadic_2_20)->Unit(kMillisecond);
110BENCHMARK(construct_proof_ultrahonk_1M_gates_dyadic_2_21)->Unit(kMillisecond);
111
112int main(int argc, char** argv)
113{
114 // Enable BB_BENCH profiling
116
117 // Run benchmarks
118 ::benchmark::Initialize(&argc, argv);
119 if (::benchmark::ReportUnrecognizedArguments(argc, argv))
120 return 1;
121 ::benchmark::RunSpecifiedBenchmarks();
122 ::benchmark::Shutdown();
123
124 // Print detailed profiling stats
125 std::cout << "\n=== Detailed BB_BENCH Profiling Stats ===\n";
127
128 return 0;
129}
std::shared_ptr< Napi::ThreadSafeFunction > instance
void info(Args... args)
Definition log.hpp:75
AluTraceBuilder builder
Definition alu.test.cpp:124
GlobalBenchStatsContainer GLOBAL_BENCH_STATS
Definition bb_bench.cpp:621
bool use_bb_bench
Definition bb_bench.cpp:173
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
void print_aggregate_counts_hierarchical(std::ostream &) const
Definition bb_bench.cpp:351
BENCHMARK_CAPTURE(construct_proof_ultrahonk, ecdsa_verification, &stdlib::generate_ecdsa_verification_test_circuit< UltraCircuitBuilder >) -> Unit(kMillisecond)
BENCHMARK(construct_proof_ultrahonk_1M_gates_dyadic_2_20) -> Unit(kMillisecond)
int main(int argc, char **argv)