timings-cholesky.cpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2018-2025 CNRS
3 //
4 
5 #include "model-fixture.hpp"
6 
18 
19 #include <iostream>
20 
22 {
23  void SetUp(benchmark::State & st)
24  {
26  lhs.setZero(model.nv);
27  rhs.setRandom(model.nv);
28  A.setZero(model.nv, model.nv);
29  B.setRandom(model.nv, model.nv);
30  Minv.setZero(model.nv, model.nv);
31  }
32 
33  void TearDown(benchmark::State & st)
34  {
36  }
37 
38  Eigen::VectorXd lhs;
39  Eigen::VectorXd rhs;
40  Eigen::MatrixXd A;
41  Eigen::MatrixXd B;
42  Eigen::MatrixXd Minv;
43 
44  static void GlobalSetUp(const ExtraArgs & extra_args)
45  {
46  ModelFixture::GlobalSetUp(extra_args);
47  }
48 };
49 
50 static void CustomArguments(benchmark::internal::Benchmark * b)
51 {
52  b->MinWarmUpTime(3.);
53 }
54 
55 // choleskyDecompose
56 
57 PINOCCHIO_DONT_INLINE static void
59 {
61 }
62 BENCHMARK_DEFINE_F(CholeskyFixture, CHOLESKY_DECOMPOSE)(benchmark::State & st)
63 {
65  for (auto _ : st)
66  {
68  }
69 }
70 BENCHMARK_REGISTER_F(CholeskyFixture, CHOLESKY_DECOMPOSE)->Apply(CustomArguments);
71 
72 // Dense choleskyDecompose
73 
74 PINOCCHIO_DONT_INLINE static void
75 denseCholeksyDecomposeCall(Eigen::LDLT<Eigen::MatrixXd> & M_ldlt, const pinocchio::Data & data)
76 {
77  M_ldlt.compute(data.M);
78 }
79 BENCHMARK_DEFINE_F(CholeskyFixture, DENSE_CHOLESKY_DECOMPOSE)(benchmark::State & st)
80 {
82  data.M.triangularView<Eigen::StrictlyLower>() =
83  data.M.transpose().triangularView<Eigen::StrictlyLower>();
84  Eigen::LDLT<Eigen::MatrixXd> M_ldlt(data.M);
85  for (auto _ : st)
86  {
88  }
89 }
90 BENCHMARK_REGISTER_F(CholeskyFixture, DENSE_CHOLESKY_DECOMPOSE)->Apply(CustomArguments);
91 
92 // CHOLESKY_SOLVE
93 
95  const pinocchio::Model & model, const pinocchio::Data & data, Eigen::VectorXd & rhs)
96 {
98 }
99 BENCHMARK_DEFINE_F(CholeskyFixture, CHOLESKY_SOLVE)(benchmark::State & st)
100 {
101  for (auto _ : st)
102  {
104  }
105 }
106 BENCHMARK_REGISTER_F(CholeskyFixture, CHOLESKY_SOLVE)->Apply(CustomArguments);
107 
108 // CHOLESKY_UDUtv
109 
111  const pinocchio::Model & model, const pinocchio::Data & data, Eigen::VectorXd & rhs)
112 {
114 }
115 BENCHMARK_DEFINE_F(CholeskyFixture, CHOLESKY_UDUtv)(benchmark::State & st)
116 {
117  for (auto _ : st)
118  {
120  }
121 }
122 BENCHMARK_REGISTER_F(CholeskyFixture, CHOLESKY_UDUtv)->Apply(CustomArguments);
123 
124 // CHOLESKY_COMPUTE_M_INV
125 
127  const pinocchio::Model & model, const pinocchio::Data & data, Eigen::MatrixXd & Minv)
128 {
130 }
131 BENCHMARK_DEFINE_F(CholeskyFixture, CHOLESKY_COMPUTE_M_INV)(benchmark::State & st)
132 {
133  for (auto _ : st)
134  {
136  }
137 }
138 BENCHMARK_REGISTER_F(CholeskyFixture, CHOLESKY_COMPUTE_M_INV)->Apply(CustomArguments);
139 
140 // CHOLESKY_SOLVE_COLUMN
141 
143  const pinocchio::Model & model, const pinocchio::Data & data, Eigen::MatrixXd & Minv)
144 {
145  pinocchio::cholesky::solve(model, data, Minv.col(10));
146 }
147 BENCHMARK_DEFINE_F(CholeskyFixture, CHOLESKY_SOLVE_COLUMN)(benchmark::State & st)
148 {
150  for (auto _ : st)
151  {
153  }
154 }
155 BENCHMARK_REGISTER_F(CholeskyFixture, CHOLESKY_SOLVE_COLUMN)->Apply(CustomArguments);
156 
157 // CHOLESKY_M_INV_MULT_V
158 
159 PINOCCHIO_DONT_INLINE static void
160 choleskyMInvMultV(const Eigen::MatrixXd & Minv, const Eigen::VectorXd & rhs, Eigen::VectorXd & lhs)
161 {
162  lhs.noalias() = Minv * rhs;
163 }
164 BENCHMARK_DEFINE_F(CholeskyFixture, CHOLESKY_M_INV_MULT_V)(benchmark::State & st)
165 {
167  for (auto _ : st)
168  {
169  choleskyMInvMultV(Minv, rhs, lhs);
170  }
171 }
172 BENCHMARK_REGISTER_F(CholeskyFixture, CHOLESKY_M_INV_MULT_V)->Apply(CustomArguments);
173 
174 // CHOLESKY_M_INV_MULT_B
175 
176 PINOCCHIO_DONT_INLINE static void
177 choleskyMInvMultB(const Eigen::MatrixXd & Minv, const Eigen::MatrixXd & B, Eigen::MatrixXd & A)
178 {
179  A.noalias() = Minv * B;
180 }
181 BENCHMARK_DEFINE_F(CholeskyFixture, CHOLESKY_M_INV_MULT_B)(benchmark::State & st)
182 {
184  for (auto _ : st)
185  {
186  choleskyMInvMultB(Minv, B, A);
187  }
188 }
189 BENCHMARK_REGISTER_F(CholeskyFixture, CHOLESKY_M_INV_MULT_B)->Apply(CustomArguments);
190 
191 // CHOLESKY_DENSE_M_INVERSE
192 
193 PINOCCHIO_DONT_INLINE static void
194 choleskyDenseMInverse(const Eigen::MatrixXd & M, Eigen::MatrixXd & A)
195 {
196  A.noalias() = M.inverse();
197 }
198 BENCHMARK_DEFINE_F(CholeskyFixture, CHOLESKY_DENSE_M_INVERSE)(benchmark::State & st)
199 {
201  data.M.triangularView<Eigen::StrictlyLower>() =
202  data.M.transpose().triangularView<Eigen::StrictlyLower>();
203  for (auto _ : st)
204  {
206  }
207 }
208 BENCHMARK_REGISTER_F(CholeskyFixture, CHOLESKY_DENSE_M_INVERSE)->Apply(CustomArguments);
209 
210 // computeMinverseQ
211 
213  const pinocchio::Model & model, pinocchio::Data & data, const Eigen::VectorXd & q)
214 {
216 }
217 BENCHMARK_DEFINE_F(ModelFixture, COMPUTE_M_INVERSE_Q)(benchmark::State & st)
218 {
219  for (auto _ : st)
220  {
222  }
223 }
224 BENCHMARK_REGISTER_F(ModelFixture, COMPUTE_M_INVERSE_Q)->Apply(CustomArguments);
225 
fwd.hpp
CholeskyFixture::lhs
Eigen::VectorXd lhs
Definition: timings-cholesky.cpp:38
CholeskyFixture::TearDown
void TearDown(benchmark::State &st)
Definition: timings-cholesky.cpp:33
pinocchio::DataTpl
Definition: context/generic.hpp:25
choleskySolveCall
static PINOCCHIO_DONT_INLINE void choleskySolveCall(const pinocchio::Model &model, const pinocchio::Data &data, Eigen::VectorXd &rhs)
Definition: timings-cholesky.cpp:94
PINOCCHIO_DONT_INLINE
#define PINOCCHIO_DONT_INLINE
Function attribute to forbid inlining. This is a compiler hint that can be not respected.
Definition: include/pinocchio/macros.hpp:53
ModelFixture::model
pinocchio::Model model
Definition: model-fixture.hpp:79
choleskyUDUtvCall
static PINOCCHIO_DONT_INLINE void choleskyUDUtvCall(const pinocchio::Model &model, const pinocchio::Data &data, Eigen::VectorXd &rhs)
Definition: timings-cholesky.cpp:110
ModelFixture::TearDown
void TearDown(benchmark::State &)
Definition: model-fixture.hpp:51
B
B
ModelFixture
Definition: model-fixture.hpp:37
pinocchio::Convention::WORLD
@ WORLD
model.hpp
setup.data
data
Definition: cmake/cython/setup.in.py:48
pinocchio::crba
const DataTpl< Scalar, Options, JointCollectionTpl >::MatrixXs & crba(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q, const Convention convention=Convention::LOCAL)
Computes the upper triangular part of the joint space inertia matrix M by using the Composite Rigid B...
visitor.hpp
choleskyMInvMultV
static PINOCCHIO_DONT_INLINE void choleskyMInvMultV(const Eigen::MatrixXd &Minv, const Eigen::VectorXd &rhs, Eigen::VectorXd &lhs)
Definition: timings-cholesky.cpp:160
denseCholeksyDecomposeCall
static PINOCCHIO_DONT_INLINE void denseCholeksyDecomposeCall(Eigen::LDLT< Eigen::MatrixXd > &M_ldlt, const pinocchio::Data &data)
Definition: timings-cholesky.cpp:75
choleskyDecomposeCall
static PINOCCHIO_DONT_INLINE void choleskyDecomposeCall(const pinocchio::Model &model, pinocchio::Data &data)
Definition: timings-cholesky.cpp:58
pinocchio::cholesky::UDUtv
Mat & UDUtv(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, const DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< Mat > &m)
Performs the multiplication by using the Cholesky decomposition of M stored in data.
b
Vec3f b
ModelFixture::SetUp
void SetUp(benchmark::State &)
Definition: model-fixture.hpp:39
pinocchio::computeMinverse
const DataTpl< Scalar, Options, JointCollectionTpl >::RowMatrixXs & computeMinverse(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q)
Computes the inverse of the joint space inertia matrix using Articulated Body formulation.
aba.hpp
CustomArguments
static void CustomArguments(benchmark::internal::Benchmark *b)
Definition: timings-cholesky.cpp:50
anymal-simulation.model
model
Definition: anymal-simulation.py:8
pinocchio::cholesky::solve
Mat & solve(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, const DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< Mat > &y)
Return the solution of using the Cholesky decomposition stored in data given the entry ....
ModelFixture::GlobalSetUp
static void GlobalSetUp(const ExtraArgs &extra_args)
Definition: model-fixture.hpp:55
joint-configuration.hpp
CholeskyFixture::GlobalSetUp
static void GlobalSetUp(const ExtraArgs &extra_args)
Definition: timings-cholesky.cpp:44
CholeskyFixture::A
Eigen::MatrixXd A
Definition: timings-cholesky.cpp:40
model-fixture.hpp
CholeskyFixture::Minv
Eigen::MatrixXd Minv
Definition: timings-cholesky.cpp:42
choleskyDenseMInverse
static PINOCCHIO_DONT_INLINE void choleskyDenseMInverse(const Eigen::MatrixXd &M, Eigen::MatrixXd &A)
Definition: timings-cholesky.cpp:194
se3.hpp
urdf.hpp
PINOCCHIO_BENCHMARK_MAIN_WITH_SETUP
PINOCCHIO_BENCHMARK_MAIN_WITH_SETUP(CholeskyFixture::GlobalSetUp)
data.hpp
CholeskyFixture::SetUp
void SetUp(benchmark::State &st)
Definition: timings-cholesky.cpp:23
simulation-contact-dynamics.A
A
Definition: simulation-contact-dynamics.py:110
inverse-dynamics._
_
Definition: inverse-dynamics.py:22
M
M
q
q
CholeskyFixture
Definition: timings-cholesky.cpp:21
CholeskyFixture::rhs
Eigen::VectorXd rhs
Definition: timings-cholesky.cpp:39
computeMinverseQCall
static PINOCCHIO_DONT_INLINE void computeMinverseQCall(const pinocchio::Model &model, pinocchio::Data &data, const Eigen::VectorXd &q)
Definition: timings-cholesky.cpp:212
choleskyMInvMultB
static PINOCCHIO_DONT_INLINE void choleskyMInvMultB(const Eigen::MatrixXd &Minv, const Eigen::MatrixXd &B, Eigen::MatrixXd &A)
Definition: timings-cholesky.cpp:177
cholesky.hpp
pinocchio::cholesky::decompose
const DataTpl< Scalar, Options, JointCollectionTpl >::MatrixXs & decompose(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data)
Compute the Cholesky decomposition of the joint space inertia matrix M contained in data.
pinocchio::cholesky::computeMinv
Mat & computeMinv(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, const DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< Mat > &Minv)
Computes the inverse of the joint space inertia matrix M from its Cholesky factorization.
pinocchio::ModelTpl::nv
int nv
Dimension of the velocity vector space.
Definition: multibody/model.hpp:101
BENCHMARK_DEFINE_F
BENCHMARK_DEFINE_F(CholeskyFixture, CHOLESKY_DECOMPOSE)(benchmark
Definition: timings-cholesky.cpp:62
BENCHMARK_REGISTER_F
BENCHMARK_REGISTER_F(CholeskyFixture, CHOLESKY_DECOMPOSE) -> Apply(CustomArguments)
sample-models.hpp
choleskySolveColumnCall
static PINOCCHIO_DONT_INLINE void choleskySolveColumnCall(const pinocchio::Model &model, const pinocchio::Data &data, Eigen::MatrixXd &Minv)
Definition: timings-cholesky.cpp:142
pinocchio::ModelTpl< context::Scalar, context::Options >
crba.hpp
ExtraArgs
Store custom command line arguments.
Definition: model-fixture.hpp:24
CholeskyFixture::B
Eigen::MatrixXd B
Definition: timings-cholesky.cpp:41
simulation-closed-kinematic-chains.rhs
rhs
Definition: simulation-closed-kinematic-chains.py:134
choleskyComputeMInvCall
static PINOCCHIO_DONT_INLINE void choleskyComputeMInvCall(const pinocchio::Model &model, const pinocchio::Data &data, Eigen::MatrixXd &Minv)
Definition: timings-cholesky.cpp:126


pinocchio
Author(s):
autogenerated on Wed Apr 16 2025 02:41:51