Skip to content

Commit 8408359

Browse files
committed
fix bench
1 parent 0948ae2 commit 8408359

File tree

1 file changed

+154
-60
lines changed

1 file changed

+154
-60
lines changed

test-curves/benches/small_mul.rs

Lines changed: 154 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use ark_ff::UniformRand;
22
use ark_std::rand::{rngs::StdRng, Rng, SeedableRng};
33
use ark_test_curves::bn254::{Fr, FrConfig};
4-
use criterion::{criterion_group, criterion_main, Criterion};
4+
use criterion::{criterion_group, criterion_main, BatchSize, Criterion};
55

66
// Hack: copy over the helper functions from the Montgomery backend to be benched
77

@@ -42,77 +42,171 @@ fn mul_small_bench(c: &mut Criterion) {
4242

4343
let mut group = c.benchmark_group("Fr Arithmetic Comparison");
4444

45-
group.bench_function("mul_u64", |bench| {
46-
let mut i = 0;
47-
bench.iter(|| {
48-
i = (i + 1) % SAMPLES;
49-
criterion::black_box(a_s[i].mul_u64(b_u64_s[i]))
50-
})
45+
// group.bench_function("Addition (Fr + Fr)", |b| {
46+
// let mut i = 0usize;
47+
// b.iter_batched_ref(
48+
// || {
49+
// let pair = (a_s[i], c_s[i]);
50+
// i += 1; if i == SAMPLES { i = 0; }
51+
// pair
52+
// },
53+
// |pair| {
54+
// let (a, c) = *pair;
55+
// let a = criterion::black_box(a);
56+
// let c = criterion::black_box(c);
57+
// criterion::black_box(a + c)
58+
// },
59+
// BatchSize::SmallInput,
60+
// )
61+
// });
62+
63+
group.bench_function("mul_u64", |b| {
64+
let mut i = 0usize;
65+
b.iter_batched_ref(
66+
|| {
67+
let pair = (a_s[i], b_u64_s[i]);
68+
i += 1; if i == SAMPLES { i = 0; }
69+
pair
70+
},
71+
|pair| {
72+
let (a, bu) = *pair;
73+
let a = criterion::black_box(a);
74+
let bu = criterion::black_box(bu);
75+
criterion::black_box(a.mul_u64(bu))
76+
},
77+
BatchSize::SmallInput,
78+
)
5179
});
5280

53-
group.bench_function("mul_i64", |bench| {
54-
let mut i = 0;
55-
bench.iter(|| {
56-
i = (i + 1) % SAMPLES;
57-
criterion::black_box(a_s[i].mul_i64(b_i64_s[i]))
58-
})
59-
});
81+
// group.bench_function("mul_u64_new", |b| {
82+
// let mut i = 0usize;
83+
// b.iter_batched_ref(
84+
// || {
85+
// let pair = (a_s[i], b_u64_s[i]);
86+
// i += 1; if i == SAMPLES { i = 0; }
87+
// pair
88+
// },
89+
// |pair| {
90+
// let (a, bu) = *pair;
91+
// let a = criterion::black_box(a);
92+
// let bu = criterion::black_box(bu);
93+
// criterion::black_box(a.mul_u64_new(bu))
94+
// },
95+
// BatchSize::SmallInput,
96+
// )
97+
// });
98+
99+
// group.bench_function("mul_i64", |b| {
100+
// let mut i = 0usize;
101+
// b.iter_batched_ref(
102+
// || {
103+
// let pair = (a_s[i], b_i64_s[i]);
104+
// i += 1; if i == SAMPLES { i = 0; }
105+
// pair
106+
// },
107+
// |pair| {
108+
// let (a, bi) = *pair;
109+
// let a = criterion::black_box(a);
110+
// let bi = criterion::black_box(bi);
111+
// criterion::black_box(a.mul_i64(bi))
112+
// },
113+
// BatchSize::SmallInput,
114+
// )
115+
// });
60116

61117
// Note: results might be worse than in real applications due to branch prediction being wrong
62118
// 50% of the time
63-
group.bench_function("mul_u128", |bench| {
64-
let mut i = 0;
65-
bench.iter(|| {
66-
i = (i + 1) % SAMPLES;
67-
criterion::black_box(a_s[i].mul_u128(b_u128_s[i]))
68-
})
119+
// group.bench_function("mul_u128", |b| {
120+
// let mut i = 0usize;
121+
// b.iter_batched(
122+
// || {
123+
// let pair = (a_s[i], b_u128_s[i]);
124+
// i += 1; if i == SAMPLES { i = 0; }
125+
// pair
126+
// },
127+
// |(a, bu)| {
128+
// let a = criterion::black_box(a);
129+
// let bu = criterion::black_box(bu);
130+
// criterion::black_box(a.mul_u128(bu))
131+
// },
132+
// BatchSize::SmallInput,
133+
// )
134+
// });
135+
136+
// group.bench_function("mul_i128", |b| {
137+
// let mut i = 0usize;
138+
// b.iter_batched(
139+
// || {
140+
// let pair = (a_s[i], b_i128_s[i]);
141+
// i += 1; if i == SAMPLES { i = 0; }
142+
// pair
143+
// },
144+
// |(a, bi)| {
145+
// let a = criterion::black_box(a);
146+
// let bi = criterion::black_box(bi);
147+
// criterion::black_box(a.mul_i128(bi))
148+
// },
149+
// BatchSize::SmallInput,
150+
// )
151+
// });
152+
153+
group.bench_function("standard mul (Fr * Fr)", |b| {
154+
let mut i = 0usize;
155+
b.iter_batched_ref(
156+
|| {
157+
let pair = (a_s[i], b_fr_s[i]);
158+
i += 1; if i == SAMPLES { i = 0; }
159+
pair
160+
},
161+
|pair| {
162+
let (a, bf) = *pair;
163+
let a = criterion::black_box(a);
164+
let bf = criterion::black_box(bf);
165+
criterion::black_box(a * bf)
166+
},
167+
BatchSize::SmallInput,
168+
)
69169
});
70170

71-
group.bench_function("mul_i128", |bench| {
72-
let mut i = 0;
73-
bench.iter(|| {
74-
i = (i + 1) % SAMPLES;
75-
criterion::black_box(a_s[i].mul_i128(b_i128_s[i]))
76-
})
77-
});
78-
79-
group.bench_function("standard mul (Fr * Fr)", |bench| {
80-
let mut i = 0;
81-
bench.iter(|| {
82-
i = (i + 1) % SAMPLES;
83-
criterion::black_box(a_s[i] * b_fr_s[i])
84-
})
85-
});
86-
87-
// Benchmark mul_u128 specifically with inputs known to fit in u64
88-
group.bench_function("mul_u128 (u64 inputs)", |bench| {
89-
let mut i = 0;
90-
bench.iter(|| {
91-
i = (i + 1) % SAMPLES;
92-
// Call mul_u128 but provide a u64 input cast to u128
93-
criterion::black_box(a_s[i].mul_u128(b_u64_as_u128_s[i]))
94-
})
95-
});
171+
// // Benchmark mul_u128 specifically with inputs known to fit in u64
172+
// group.bench_function("mul_u128 (u64 inputs)", |b| {
173+
// let mut i = 0usize;
174+
// b.iter_batched(
175+
// || {
176+
// let pair = (a_s[i], b_u64_as_u128_s[i]);
177+
// i += 1; if i == SAMPLES { i = 0; }
178+
// pair
179+
// },
180+
// |(a, bu)| {
181+
// let a = criterion::black_box(a);
182+
// let bu = criterion::black_box(bu);
183+
// criterion::black_box(a.mul_u128(bu))
184+
// },
185+
// BatchSize::SmallInput,
186+
// )
187+
// });
96188

97189
// Benchmark the auxiliary function directly (assuming it's made public)
98190
// Note: Requires mul_u128_aux to be pub in montgomery_backend.rs
99191
// Need to import it if not already done via wildcard/specific import
100192
// Let's assume it's accessible via a_s[i].mul_u128_aux(...) for now
101-
group.bench_function("mul_u128_aux (u128 inputs)", |bench| {
102-
let mut i = 0;
103-
bench.iter(|| {
104-
i = (i + 1) % SAMPLES;
105-
criterion::black_box(a_s[i].mul_u128_aux(b_u128_s[i]))
106-
})
107-
});
108-
109-
group.bench_function("Addition (Fr + Fr)", |bench| {
110-
let mut i = 0;
111-
bench.iter(|| {
112-
i = (i + 1) % SAMPLES;
113-
criterion::black_box(a_s[i] + c_s[i])
114-
})
115-
});
193+
// group.bench_function("mul_u128_aux (u128 inputs)", |b| {
194+
// let mut i = 0usize;
195+
// b.iter_batched_ref(
196+
// || {
197+
// let pair = (a_s[i], b_u128_s[i]);
198+
// i += 1; if i == SAMPLES { i = 0; }
199+
// pair
200+
// },
201+
// |pair| {
202+
// let (a, bu) = *pair;
203+
// let a = criterion::black_box(a);
204+
// let bu = criterion::black_box(bu);
205+
// criterion::black_box(a.mul_u128_aux(bu))
206+
// },
207+
// BatchSize::SmallInput,
208+
// )
209+
// });
116210

117211
group.finish();
118212
}

0 commit comments

Comments
 (0)