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