1 use na::{DMatrix, DVector, LU};
2 
3 // Without unpack.
lu_decompose_10x10(bh: &mut criterion::Criterion)4 fn lu_decompose_10x10(bh: &mut criterion::Criterion) {
5     let m = DMatrix::<f64>::new_random(10, 10);
6     bh.bench_function("lu_decompose_10x10", move |bh| bh.iter(|| test::black_box(LU::new(m.clone()))));
7 }
8 
lu_decompose_100x100(bh: &mut criterion::Criterion)9 fn lu_decompose_100x100(bh: &mut criterion::Criterion) {
10     let m = DMatrix::<f64>::new_random(100, 100);
11     bh.bench_function("lu_decompose_100x100", move |bh| bh.iter(|| test::black_box(LU::new(m.clone()))));
12 }
13 
lu_decompose_500x500(bh: &mut criterion::Criterion)14 fn lu_decompose_500x500(bh: &mut criterion::Criterion) {
15     let m = DMatrix::<f64>::new_random(500, 500);
16     bh.bench_function("lu_decompose_500x500", move |bh| bh.iter(|| test::black_box(LU::new(m.clone()))));
17 }
18 
lu_solve_10x10(bh: &mut criterion::Criterion)19 fn lu_solve_10x10(bh: &mut criterion::Criterion) {
20     let m = DMatrix::<f64>::new_random(10, 10);
21     let lu = LU::new(m.clone());
22 
23     bh.bench_function("lu_solve_10x10", move |bh| bh.iter(|| {
24         let mut b = DVector::<f64>::from_element(10, 1.0);
25         lu.solve(&mut b);
26     }));
27 }
28 
lu_solve_100x100(bh: &mut criterion::Criterion)29 fn lu_solve_100x100(bh: &mut criterion::Criterion) {
30     let m = DMatrix::<f64>::new_random(100, 100);
31     let lu = LU::new(m.clone());
32 
33     bh.bench_function("lu_solve_100x100", move |bh| bh.iter(|| {
34         let mut b = DVector::<f64>::from_element(100, 1.0);
35         lu.solve(&mut b);
36     }));
37 }
38 
lu_solve_500x500(bh: &mut criterion::Criterion)39 fn lu_solve_500x500(bh: &mut criterion::Criterion) {
40     let m = DMatrix::<f64>::new_random(500, 500);
41     let lu = LU::new(m.clone());
42 
43     bh.bench_function("", move |bh| bh.iter(|| {
44         let mut b = DVector::<f64>::from_element(500, 1.0);
45         lu.solve(&mut b);
46     }));
47 }
48 
lu_inverse_10x10(bh: &mut criterion::Criterion)49 fn lu_inverse_10x10(bh: &mut criterion::Criterion) {
50     let m = DMatrix::<f64>::new_random(10, 10);
51     let lu = LU::new(m.clone());
52 
53     bh.bench_function("lu_inverse_10x10", move |bh| bh.iter(|| test::black_box(lu.try_inverse())));
54 }
55 
lu_inverse_100x100(bh: &mut criterion::Criterion)56 fn lu_inverse_100x100(bh: &mut criterion::Criterion) {
57     let m = DMatrix::<f64>::new_random(100, 100);
58     let lu = LU::new(m.clone());
59 
60     bh.bench_function("lu_inverse_100x100", move |bh| bh.iter(|| test::black_box(lu.try_inverse())));
61 }
62 
lu_inverse_500x500(bh: &mut criterion::Criterion)63 fn lu_inverse_500x500(bh: &mut criterion::Criterion) {
64     let m = DMatrix::<f64>::new_random(500, 500);
65     let lu = LU::new(m.clone());
66 
67     bh.bench_function("lu_inverse_500x500", move |bh| bh.iter(|| test::black_box(lu.try_inverse())));
68 }
69 
lu_determinant_10x10(bh: &mut criterion::Criterion)70 fn lu_determinant_10x10(bh: &mut criterion::Criterion) {
71     let m = DMatrix::<f64>::new_random(10, 10);
72     let lu = LU::new(m.clone());
73 
74     bh.bench_function("lu_determinant_10x10", move |bh| bh.iter(|| test::black_box(lu.determinant())));
75 }
76 
lu_determinant_100x100(bh: &mut criterion::Criterion)77 fn lu_determinant_100x100(bh: &mut criterion::Criterion) {
78     let m = DMatrix::<f64>::new_random(100, 100);
79     let lu = LU::new(m.clone());
80 
81     bh.bench_function("lu_determinant_100x100", move |bh| bh.iter(|| test::black_box(lu.determinant())));
82 }
83 
lu_determinant_500x500(bh: &mut criterion::Criterion)84 fn lu_determinant_500x500(bh: &mut criterion::Criterion) {
85     let m = DMatrix::<f64>::new_random(500, 500);
86     let lu = LU::new(m.clone());
87 
88     bh.bench_function("", move |bh| bh.iter(|| test::black_box(lu.determinant())));
89 }
90 
91 criterion_group!(lu,
92     lu_decompose_10x10,
93     lu_decompose_100x100,
94 //    lu_decompose_500x500,
95     lu_solve_10x10,
96     lu_solve_100x100,
97     lu_inverse_10x10,
98     lu_inverse_100x100,
99 //    lu_inverse_500x500,
100     lu_determinant_10x10,
101     lu_determinant_100x100
102 );