Skip to content

Commit 71e4805

Browse files
authored
Merge pull request #3233 from o1-labs/volhovm/pu-folding-benchmarks
PU: Add benches for folding
2 parents f44db09 + 3627e56 commit 71e4805

File tree

3 files changed

+247
-80
lines changed

3 files changed

+247
-80
lines changed

saffron/Cargo.toml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,10 @@ path = "og-flow/main.rs"
5858
[[bench]]
5959
name = "read_proof_bench"
6060
harness = false
61+
62+
[[bench]]
63+
name = "folding_bench"
64+
harness = false
65+
66+
[features]
67+
bench = []

saffron/benches/folding_bench.rs

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
//! Run this bench using `cargo criterion -p saffron --bench folding_bench` or
2+
//! `cargo bench --bench folding_bench`
3+
4+
use criterion::{black_box, criterion_group, criterion_main, BatchSize, Criterion, SamplingMode};
5+
use kimchi::{circuits::domains::EvaluationDomains, groupmap::GroupMap};
6+
use mina_curves::pasta::Vesta;
7+
use poly_commitment::{commitment::CommitmentCurve, SRS as _};
8+
9+
use saffron::{
10+
folding::{
11+
folding_prover, folding_verifier, prove_relaxed,
12+
testing::{generate_random_inst_wit_core, generate_random_inst_wit_relaxed},
13+
verify_relaxed,
14+
},
15+
ScalarField,
16+
};
17+
18+
fn bench_folding(c: &mut Criterion) {
19+
let mut group = c.benchmark_group("folding_ip");
20+
group.sampling_mode(SamplingMode::Linear);
21+
group.sample_size(30);
22+
23+
let mut rng = o1_utils::tests::make_test_rng(None);
24+
25+
let srs = poly_commitment::precomputed_srs::get_srs_test();
26+
let group_map = <Vesta as CommitmentCurve>::Map::setup();
27+
28+
let domain: EvaluationDomains<ScalarField> =
29+
EvaluationDomains::<ScalarField>::create(srs.size()).unwrap();
30+
31+
group.bench_function("folding_prover", |b| {
32+
b.iter_batched(
33+
|| {
34+
let relaxed = generate_random_inst_wit_relaxed(&srs, domain, &mut rng);
35+
let core = generate_random_inst_wit_core(&srs, domain, &mut rng);
36+
(core, relaxed)
37+
},
38+
|((core_instance, core_witness), (relaxed_instance, relaxed_witness))| {
39+
black_box(folding_prover(
40+
&srs,
41+
domain.d1,
42+
&core_instance,
43+
&core_witness,
44+
&relaxed_instance,
45+
&relaxed_witness,
46+
))
47+
},
48+
BatchSize::LargeInput,
49+
)
50+
});
51+
52+
group.bench_function("folding_verifier", |b| {
53+
b.iter_batched(
54+
|| {
55+
let (relaxed_instance, relaxed_witness) =
56+
generate_random_inst_wit_relaxed(&srs, domain, &mut rng);
57+
let (core_instance, core_witness) =
58+
generate_random_inst_wit_core(&srs, domain, &mut rng);
59+
let (_, _, cross_term) = folding_prover(
60+
&srs,
61+
domain.d1,
62+
&core_instance,
63+
&core_witness,
64+
&relaxed_instance,
65+
&relaxed_witness,
66+
);
67+
(core_instance, relaxed_instance, cross_term)
68+
},
69+
|(core_instance, relaxed_instance, cross_term)| {
70+
black_box(folding_verifier(
71+
&core_instance,
72+
&relaxed_instance,
73+
cross_term,
74+
))
75+
},
76+
BatchSize::LargeInput,
77+
)
78+
});
79+
80+
group.bench_function("prover_relaxed", |b| {
81+
b.iter_batched(
82+
|| generate_random_inst_wit_relaxed(&srs, domain, &mut rng),
83+
|(relaxed_instance, relaxed_witness)| {
84+
black_box(prove_relaxed(
85+
&srs,
86+
domain,
87+
&group_map,
88+
&mut rand::thread_rng(), // it is not possible to pass &rng to both arguments of iter_batched
89+
&relaxed_instance,
90+
&relaxed_witness,
91+
))
92+
},
93+
BatchSize::LargeInput,
94+
)
95+
});
96+
97+
let (relaxed_instance, relaxed_witness) =
98+
generate_random_inst_wit_relaxed(&srs, domain, &mut rng);
99+
let proof = prove_relaxed(
100+
&srs,
101+
domain,
102+
&group_map,
103+
&mut rng,
104+
&relaxed_instance,
105+
&relaxed_witness,
106+
);
107+
108+
group.bench_function("verifier_relaxed", |b| {
109+
b.iter(|| {
110+
black_box(verify_relaxed(
111+
&srs,
112+
domain,
113+
&group_map,
114+
&mut rng,
115+
&relaxed_instance,
116+
&proof,
117+
))
118+
})
119+
});
120+
}
121+
122+
criterion_group!(benches, bench_folding);
123+
criterion_main!(benches);

0 commit comments

Comments
 (0)