phantom-zone/benches/ntt.rs
benches/ntt.rsRaw
1use bin_rs::{Ntt, NttBackendU64, NttInit};
2use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
3use itertools::Itertools;
4use rand::{thread_rng, Rng};
5use rand_distr::Uniform;
6
7fn benchmark(c: &mut Criterion) {
8 let mut group = c.benchmark_group("ntt");
9 // 55
10 for prime in [36028797017456641] {
11 for ring_size in [1 << 11, 1 << 15] {
12 let ntt = NttBackendU64::new(&prime, ring_size);
13 let mut rng = thread_rng();
14
15 let a = rng
16 .sample_iter(Uniform::new(0, prime))
17 .take(ring_size)
18 .collect_vec();
19 group.bench_function(
20 BenchmarkId::new("forward", format!("q={prime}/{ring_size}")),
21 |b| {
22 b.iter_batched_ref(
23 || a.clone(),
24 |mut a| black_box(ntt.forward(&mut a)),
25 criterion::BatchSize::PerIteration,
26 )
27 },
28 );
29 }
30 }
31
32 group.finish();
33}
34
35criterion_group!(ntt, benchmark);
36criterion_main!(ntt);