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| {
7 bh.iter(|| std::hint::black_box(LU::new(m.clone())))
8 });
9 }
10
lu_decompose_100x100(bh: &mut criterion::Criterion)11 fn lu_decompose_100x100(bh: &mut criterion::Criterion) {
12 let m = DMatrix::<f64>::new_random(100, 100);
13 bh.bench_function("lu_decompose_100x100", move |bh| {
14 bh.iter(|| std::hint::black_box(LU::new(m.clone())))
15 });
16 }
17
lu_decompose_500x500(bh: &mut criterion::Criterion)18 fn lu_decompose_500x500(bh: &mut criterion::Criterion) {
19 let m = DMatrix::<f64>::new_random(500, 500);
20 bh.bench_function("lu_decompose_500x500", move |bh| {
21 bh.iter(|| std::hint::black_box(LU::new(m.clone())))
22 });
23 }
24
lu_solve_10x10(bh: &mut criterion::Criterion)25 fn lu_solve_10x10(bh: &mut criterion::Criterion) {
26 let m = DMatrix::<f64>::new_random(10, 10);
27 let lu = LU::new(m.clone());
28
29 bh.bench_function("lu_solve_10x10", move |bh| {
30 bh.iter(|| {
31 let mut b = DVector::<f64>::from_element(10, 1.0);
32 lu.solve(&mut b);
33 })
34 });
35 }
36
lu_solve_100x100(bh: &mut criterion::Criterion)37 fn lu_solve_100x100(bh: &mut criterion::Criterion) {
38 let m = DMatrix::<f64>::new_random(100, 100);
39 let lu = LU::new(m.clone());
40
41 bh.bench_function("lu_solve_100x100", move |bh| {
42 bh.iter(|| {
43 let mut b = DVector::<f64>::from_element(100, 1.0);
44 lu.solve(&mut b);
45 })
46 });
47 }
48
lu_solve_500x500(bh: &mut criterion::Criterion)49 fn lu_solve_500x500(bh: &mut criterion::Criterion) {
50 let m = DMatrix::<f64>::new_random(500, 500);
51 let lu = LU::new(m.clone());
52
53 bh.bench_function("", move |bh| {
54 bh.iter(|| {
55 let mut b = DVector::<f64>::from_element(500, 1.0);
56 lu.solve(&mut b);
57 })
58 });
59 }
60
lu_inverse_10x10(bh: &mut criterion::Criterion)61 fn lu_inverse_10x10(bh: &mut criterion::Criterion) {
62 let m = DMatrix::<f64>::new_random(10, 10);
63 let lu = LU::new(m.clone());
64
65 bh.bench_function("lu_inverse_10x10", move |bh| {
66 bh.iter(|| std::hint::black_box(lu.try_inverse()))
67 });
68 }
69
lu_inverse_100x100(bh: &mut criterion::Criterion)70 fn lu_inverse_100x100(bh: &mut criterion::Criterion) {
71 let m = DMatrix::<f64>::new_random(100, 100);
72 let lu = LU::new(m.clone());
73
74 bh.bench_function("lu_inverse_100x100", move |bh| {
75 bh.iter(|| std::hint::black_box(lu.try_inverse()))
76 });
77 }
78
lu_inverse_500x500(bh: &mut criterion::Criterion)79 fn lu_inverse_500x500(bh: &mut criterion::Criterion) {
80 let m = DMatrix::<f64>::new_random(500, 500);
81 let lu = LU::new(m.clone());
82
83 bh.bench_function("lu_inverse_500x500", move |bh| {
84 bh.iter(|| std::hint::black_box(lu.try_inverse()))
85 });
86 }
87
lu_determinant_10x10(bh: &mut criterion::Criterion)88 fn lu_determinant_10x10(bh: &mut criterion::Criterion) {
89 let m = DMatrix::<f64>::new_random(10, 10);
90 let lu = LU::new(m.clone());
91
92 bh.bench_function("lu_determinant_10x10", move |bh| {
93 bh.iter(|| std::hint::black_box(lu.determinant()))
94 });
95 }
96
lu_determinant_100x100(bh: &mut criterion::Criterion)97 fn lu_determinant_100x100(bh: &mut criterion::Criterion) {
98 let m = DMatrix::<f64>::new_random(100, 100);
99 let lu = LU::new(m.clone());
100
101 bh.bench_function("lu_determinant_100x100", move |bh| {
102 bh.iter(|| std::hint::black_box(lu.determinant()))
103 });
104 }
105
lu_determinant_500x500(bh: &mut criterion::Criterion)106 fn lu_determinant_500x500(bh: &mut criterion::Criterion) {
107 let m = DMatrix::<f64>::new_random(500, 500);
108 let lu = LU::new(m.clone());
109
110 bh.bench_function("", move |bh| {
111 bh.iter(|| std::hint::black_box(lu.determinant()))
112 });
113 }
114
115 criterion_group!(
116 lu,
117 lu_decompose_10x10,
118 lu_decompose_100x100,
119 // lu_decompose_500x500,
120 lu_solve_10x10,
121 lu_solve_100x100,
122 lu_inverse_10x10,
123 lu_inverse_100x100,
124 // lu_inverse_500x500,
125 lu_determinant_10x10,
126 lu_determinant_100x100
127 );
128