poulpy/benches/operations.rs
benches/operations.rsRaw
1use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion};
2use math::ring::Ring;
3use math::modulus::Operations;
4
5fn add_vec_unary(c: &mut Criterion) {
6 fn runner(r: Ring<u64>) -> Box<dyn FnMut()> {
7
8 let mut p0: math::poly::Poly<u64> = r.new_poly();
9 let mut p1: math::poly::Poly<u64> = r.new_poly();
10 for i in 0..p0.n(){
11 p0.0[i] = i as u64;
12 p1.0[i] = i as u64;
13 }
14 println!("{}", r.n());
15 Box::new(move || {
16 r.modulus.add_vec_unary_assign::<8>(&p0.0, &mut p1.0);
17 })
18 }
19
20 let mut b: criterion::BenchmarkGroup<'_, criterion::measurement::WallTime> = c.benchmark_group("add_vec_unary");
21 for log_n in 11..17 {
22
23 let n: usize = 1<<log_n as usize;
24 let q_base: u64 = 0x1fffffffffe00001u64;
25 let q_power: usize = 1usize;
26 let r: Ring<u64> = Ring::<u64>::new(n, q_base, q_power);
27 let runners = [
28 ("prime", {
29 runner(r)
30 }),
31 ];
32 for (name, mut runner) in runners {
33 let id = BenchmarkId::new(name, n);
34 b.bench_with_input(id, &(), |b, _| b.iter(&mut runner));
35 }
36 }
37}
38
39criterion_group!(benches, add_vec_unary);
40criterion_main!(benches);