arnaucube
arnaucube/phantom-zonePublic Self-hosted repository
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);