1 use na::{Cholesky, DMatrix, DVector};
2
cholesky_100x100(bh: &mut criterion::Criterion)3 fn cholesky_100x100(bh: &mut criterion::Criterion) {
4 let m = DMatrix::<f64>::new_random(100, 100);
5 let m = &m * m.transpose();
6
7 bh.bench_function("cholesky_100x100", move |bh| {
8 bh.iter(|| std::hint::black_box(Cholesky::new(m.clone())))
9 });
10 }
11
cholesky_500x500(bh: &mut criterion::Criterion)12 fn cholesky_500x500(bh: &mut criterion::Criterion) {
13 let m = DMatrix::<f64>::new_random(500, 500);
14 let m = &m * m.transpose();
15
16 bh.bench_function("cholesky_500x500", move |bh| {
17 bh.iter(|| std::hint::black_box(Cholesky::new(m.clone())))
18 });
19 }
20
21 // With unpack.
cholesky_decompose_unpack_100x100(bh: &mut criterion::Criterion)22 fn cholesky_decompose_unpack_100x100(bh: &mut criterion::Criterion) {
23 let m = DMatrix::<f64>::new_random(100, 100);
24 let m = &m * m.transpose();
25
26 bh.bench_function("cholesky_decompose_unpack_100x100", move |bh| {
27 bh.iter(|| {
28 let chol = Cholesky::new(m.clone()).unwrap();
29 let _ = chol.unpack();
30 })
31 });
32 }
cholesky_decompose_unpack_500x500(bh: &mut criterion::Criterion)33 fn cholesky_decompose_unpack_500x500(bh: &mut criterion::Criterion) {
34 let m = DMatrix::<f64>::new_random(500, 500);
35 let m = &m * m.transpose();
36
37 bh.bench_function("cholesky_decompose_unpack_500x500", move |bh| {
38 bh.iter(|| {
39 let chol = Cholesky::new(m.clone()).unwrap();
40 let _ = chol.unpack();
41 })
42 });
43 }
44
cholesky_solve_10x10(bh: &mut criterion::Criterion)45 fn cholesky_solve_10x10(bh: &mut criterion::Criterion) {
46 let m = DMatrix::<f64>::new_random(10, 10);
47 let m = &m * m.transpose();
48 let v = DVector::<f64>::new_random(10);
49 let chol = Cholesky::new(m.clone()).unwrap();
50
51 bh.bench_function("cholesky_solve_10x10", move |bh| {
52 bh.iter(|| {
53 let _ = chol.solve(&v);
54 })
55 });
56 }
57
cholesky_solve_100x100(bh: &mut criterion::Criterion)58 fn cholesky_solve_100x100(bh: &mut criterion::Criterion) {
59 let m = DMatrix::<f64>::new_random(100, 100);
60 let m = &m * m.transpose();
61 let v = DVector::<f64>::new_random(100);
62 let chol = Cholesky::new(m.clone()).unwrap();
63
64 bh.bench_function("cholesky_solve_100x100", move |bh| {
65 bh.iter(|| {
66 let _ = chol.solve(&v);
67 })
68 });
69 }
70
cholesky_solve_500x500(bh: &mut criterion::Criterion)71 fn cholesky_solve_500x500(bh: &mut criterion::Criterion) {
72 let m = DMatrix::<f64>::new_random(500, 500);
73 let m = &m * m.transpose();
74 let v = DVector::<f64>::new_random(500);
75 let chol = Cholesky::new(m.clone()).unwrap();
76
77 bh.bench_function("cholesky_solve_500x500", move |bh| {
78 bh.iter(|| {
79 let _ = chol.solve(&v);
80 })
81 });
82 }
83
cholesky_inverse_10x10(bh: &mut criterion::Criterion)84 fn cholesky_inverse_10x10(bh: &mut criterion::Criterion) {
85 let m = DMatrix::<f64>::new_random(10, 10);
86 let m = &m * m.transpose();
87 let chol = Cholesky::new(m.clone()).unwrap();
88
89 bh.bench_function("cholesky_inverse_10x10", move |bh| {
90 bh.iter(|| {
91 let _ = chol.inverse();
92 })
93 });
94 }
95
cholesky_inverse_100x100(bh: &mut criterion::Criterion)96 fn cholesky_inverse_100x100(bh: &mut criterion::Criterion) {
97 let m = DMatrix::<f64>::new_random(100, 100);
98 let m = &m * m.transpose();
99 let chol = Cholesky::new(m.clone()).unwrap();
100
101 bh.bench_function("cholesky_inverse_100x100", move |bh| {
102 bh.iter(|| {
103 let _ = chol.inverse();
104 })
105 });
106 }
107
cholesky_inverse_500x500(bh: &mut criterion::Criterion)108 fn cholesky_inverse_500x500(bh: &mut criterion::Criterion) {
109 let m = DMatrix::<f64>::new_random(500, 500);
110 let m = &m * m.transpose();
111 let chol = Cholesky::new(m.clone()).unwrap();
112
113 bh.bench_function("cholesky_inverse_500x500", move |bh| {
114 bh.iter(|| {
115 let _ = chol.inverse();
116 })
117 });
118 }
119
120 criterion_group!(
121 cholesky,
122 cholesky_100x100,
123 cholesky_500x500,
124 cholesky_decompose_unpack_100x100,
125 cholesky_decompose_unpack_500x500,
126 cholesky_solve_10x10,
127 cholesky_solve_100x100,
128 cholesky_solve_500x500,
129 cholesky_inverse_10x10,
130 cholesky_inverse_100x100,
131 cholesky_inverse_500x500
132 );
133