timings-cg.cpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2018 CNRS
3 // Copyright (c) 2020-2025 INRIA
4 //
5 
6 #include "model-fixture.hpp"
7 
9 
23 #include "pinocchio/macros.hpp"
28 
30 
31 #include <iostream>
32 
34 {
35  void SetUp(benchmark::State & st)
36  {
38  }
39 
40  void TearDown(benchmark::State & st)
41  {
43  }
44 
46  CONTACT_MODELS_6D6D;
48  CONTACT_DATAS_6D6D;
49 
50  // Initialize all as a global variable to avoid long running time
51  static std::unique_ptr<pinocchio::CodeGenRNEA<double>> RNEA_CODE_GEN;
52  static std::unique_ptr<pinocchio::CodeGenABA<double>> ABA_CODE_GEN;
53  static std::unique_ptr<pinocchio::CodeGenCRBA<double>> CRBA_CODE_GEN;
54  static std::unique_ptr<pinocchio::CodeGenMinv<double>> MINV_CODE_GEN;
55  static std::unique_ptr<pinocchio::CodeGenRNEADerivatives<double>> RNEA_DERIVATIVES_CODE_GEN;
56  static std::unique_ptr<pinocchio::CodeGenABADerivatives<double>> ABA_DERIVATIVES_CODE_GEN;
57  static std::unique_ptr<pinocchio::CodeGenConstraintDynamicsDerivatives<double>>
59 
60  static void GlobalSetUp(const ExtraArgs & extra_args)
61  {
62  ModelFixture::GlobalSetUp(extra_args);
63 
64  const std::string RF = "RLEG_ANKLE_R";
65  const std::string LF = "LLEG_ANKLE_R";
72  CONTACT_MODELS_6D6D.push_back(ci_RF);
73  CONTACT_MODELS_6D6D.push_back(ci_LF);
74 
75  pinocchio::RigidConstraintData cd_RF(ci_RF);
76  pinocchio::RigidConstraintData cd_LF(ci_LF);
77  CONTACT_DATAS_6D6D.push_back(cd_RF);
78  CONTACT_DATAS_6D6D.push_back(cd_LF);
79 
80  RNEA_CODE_GEN = std::make_unique<pinocchio::CodeGenRNEA<double>>(ModelFixture::MODEL);
81  ABA_CODE_GEN = std::make_unique<pinocchio::CodeGenABA<double>>(ModelFixture::MODEL);
82  CRBA_CODE_GEN = std::make_unique<pinocchio::CodeGenCRBA<double>>(ModelFixture::MODEL);
83  MINV_CODE_GEN = std::make_unique<pinocchio::CodeGenMinv<double>>(ModelFixture::MODEL);
85  std::make_unique<pinocchio::CodeGenRNEADerivatives<double>>(ModelFixture::MODEL);
87  std::make_unique<pinocchio::CodeGenABADerivatives<double>>(ModelFixture::MODEL);
89  std::make_unique<pinocchio::CodeGenConstraintDynamicsDerivatives<double>>(
90  ModelFixture::MODEL, CONTACT_MODELS_6D6D);
91 
92  RNEA_CODE_GEN->initLib();
93  RNEA_CODE_GEN->loadLib(true, PINOCCHIO_CXX_COMPILER);
94  ABA_CODE_GEN->initLib();
95  ABA_CODE_GEN->loadLib(true, PINOCCHIO_CXX_COMPILER);
96  CRBA_CODE_GEN->initLib();
97  CRBA_CODE_GEN->loadLib(true, PINOCCHIO_CXX_COMPILER);
98  MINV_CODE_GEN->initLib();
99  MINV_CODE_GEN->loadLib(true, PINOCCHIO_CXX_COMPILER);
100  RNEA_DERIVATIVES_CODE_GEN->initLib();
101  RNEA_DERIVATIVES_CODE_GEN->loadLib(true, PINOCCHIO_CXX_COMPILER);
102  ABA_DERIVATIVES_CODE_GEN->initLib();
103  ABA_DERIVATIVES_CODE_GEN->loadLib(true, PINOCCHIO_CXX_COMPILER);
105  CONSTRAINT_DYNAMICS_DERIVATIVES_CODE_GEN->loadLib(true, PINOCCHIO_CXX_COMPILER);
106  }
107 };
108 
110 CGFixture::CONTACT_MODELS_6D6D;
112 CGFixture::CONTACT_DATAS_6D6D;
113 std::unique_ptr<pinocchio::CodeGenRNEA<double>> CGFixture::RNEA_CODE_GEN;
114 std::unique_ptr<pinocchio::CodeGenABA<double>> CGFixture::ABA_CODE_GEN;
115 std::unique_ptr<pinocchio::CodeGenCRBA<double>> CGFixture::CRBA_CODE_GEN;
116 std::unique_ptr<pinocchio::CodeGenMinv<double>> CGFixture::MINV_CODE_GEN;
117 std::unique_ptr<pinocchio::CodeGenRNEADerivatives<double>> CGFixture::RNEA_DERIVATIVES_CODE_GEN;
118 std::unique_ptr<pinocchio::CodeGenABADerivatives<double>> CGFixture::ABA_DERIVATIVES_CODE_GEN;
119 std::unique_ptr<pinocchio::CodeGenConstraintDynamicsDerivatives<double>>
121 
122 static void CustomArguments(benchmark::internal::Benchmark * b)
123 {
124  b->MinWarmUpTime(3.);
125 }
126 
127 // RNEA
128 
130  const pinocchio::Model & model,
132  const Eigen::VectorXd & q,
133  const Eigen::VectorXd & v,
134  const Eigen::VectorXd & a)
135 {
136  pinocchio::rnea(model, data, q, v, a);
137 }
138 BENCHMARK_DEFINE_F(CGFixture, RNEA)(benchmark::State & st)
139 {
140  for (auto _ : st)
141  {
142  rneaCall(model, data, q, v, a);
143  }
144 }
146 
147 // RNEA_CODE_GEN
148 
149 BENCHMARK_DEFINE_F(CGFixture, RNEA_CODE_GEN)(benchmark::State & st)
150 {
151  for (auto _ : st)
152  {
153  RNEA_CODE_GEN->evalFunction(q, v, a);
154  }
155 }
156 BENCHMARK_REGISTER_F(CGFixture, RNEA_CODE_GEN)->Apply(CustomArguments);
157 
158 // RNEA_JACOBIAN_CODE_GEN
159 
160 BENCHMARK_DEFINE_F(CGFixture, RNEA_JACOBIAN_CODE_GEN)(benchmark::State & st)
161 {
162  for (auto _ : st)
163  {
164  RNEA_CODE_GEN->evalJacobian(q, v, a);
165  }
166 }
167 BENCHMARK_REGISTER_F(CGFixture, RNEA_JACOBIAN_CODE_GEN)->Apply(CustomArguments);
168 
169 // RNEA_DERIVATIVES_CODE_GEN
170 
171 BENCHMARK_DEFINE_F(CGFixture, RNEA_DERIVATIVES_CODE_GEN)(benchmark::State & st)
172 {
173  for (auto _ : st)
174  {
175  RNEA_DERIVATIVES_CODE_GEN->evalFunction(q, v, a);
176  }
177 }
178 BENCHMARK_REGISTER_F(CGFixture, RNEA_DERIVATIVES_CODE_GEN)->Apply(CustomArguments);
179 
180 // CRBA
181 
182 PINOCCHIO_DONT_INLINE static void
183 crbaWorldCall(const pinocchio::Model & model, pinocchio::Data & data, const Eigen::VectorXd & q)
184 {
186 }
187 BENCHMARK_DEFINE_F(CGFixture, CRBA)(benchmark::State & st)
188 {
189  for (auto _ : st)
190  {
192  }
193 }
195 
196 // CRBA_CODE_GEN
197 
198 BENCHMARK_DEFINE_F(CGFixture, CRBA_CODE_GEN)(benchmark::State & st)
199 {
200  for (auto _ : st)
201  {
202  CRBA_CODE_GEN->evalFunction(q);
203  }
204 }
205 BENCHMARK_REGISTER_F(CGFixture, CRBA_CODE_GEN)->Apply(CustomArguments);
206 
207 // COMPUTE_M_INVERSE
208 
210  const pinocchio::Model & model, pinocchio::Data & data, const Eigen::VectorXd & q)
211 {
213 }
214 BENCHMARK_DEFINE_F(CGFixture, COMPUTE_M_INVERSE)(benchmark::State & st)
215 {
216  for (auto _ : st)
217  {
219  }
220 }
221 BENCHMARK_REGISTER_F(CGFixture, COMPUTE_M_INVERSE)->Apply(CustomArguments);
222 
223 // COMPUTE_M_INVERSE_CODE_GEN
224 
225 BENCHMARK_DEFINE_F(CGFixture, COMPUTE_M_INVERSE_CODE_GEN)(benchmark::State & st)
226 {
227  for (auto _ : st)
228  {
229  MINV_CODE_GEN->evalFunction(q);
230  }
231 }
232 BENCHMARK_REGISTER_F(CGFixture, COMPUTE_M_INVERSE_CODE_GEN)->Apply(CustomArguments);
233 
234 // ABA
235 
237  const pinocchio::Model & model,
239  const Eigen::VectorXd & q,
240  const Eigen::VectorXd & v,
241  const Eigen::VectorXd & tau)
242 {
244 }
245 BENCHMARK_DEFINE_F(CGFixture, ABA)(benchmark::State & st)
246 {
247  for (auto _ : st)
248  {
249  abaWorldCall(model, data, q, v, tau);
250  }
251 }
253 
254 // ABA_CODE_GEN
255 
256 BENCHMARK_DEFINE_F(CGFixture, ABA_CODE_GEN)(benchmark::State & st)
257 {
258  for (auto _ : st)
259  {
260  ABA_CODE_GEN->evalFunction(q, v, tau);
261  }
262 }
263 BENCHMARK_REGISTER_F(CGFixture, ABA_CODE_GEN)->Apply(CustomArguments);
264 
265 // ABA_JACOBIAN_CODE_GEN
266 
267 BENCHMARK_DEFINE_F(CGFixture, ABA_JACOBIAN_CODE_GEN)(benchmark::State & st)
268 {
269  for (auto _ : st)
270  {
271  ABA_CODE_GEN->evalJacobian(q, v, tau);
272  }
273 }
274 BENCHMARK_REGISTER_F(CGFixture, ABA_JACOBIAN_CODE_GEN)->Apply(CustomArguments);
275 
276 // ABA_DERIVATIVES_CODE_GEN
277 
278 BENCHMARK_DEFINE_F(CGFixture, ABA_DERIVATIVES_CODE_GEN)(benchmark::State & st)
279 {
280  for (auto _ : st)
281  {
282  ABA_DERIVATIVES_CODE_GEN->evalFunction(q, v, tau);
283  }
284 }
285 BENCHMARK_REGISTER_F(CGFixture, ABA_DERIVATIVES_CODE_GEN)->Apply(CustomArguments);
286 
287 // CONSTRAINT_DYNAMICS_DERIVATIVES
288 
290  const pinocchio::Model & model,
292  const Eigen::VectorXd & q,
293  const Eigen::VectorXd & v,
294  const Eigen::VectorXd & tau,
296  & contact_models_6d6d,
298 {
299  pinocchio::constraintDynamics(model, data, q, v, tau, contact_models_6d6d, contact_datas_6d6d);
301  model, data, contact_models_6d6d, contact_datas_6d6d);
302 }
303 BENCHMARK_DEFINE_F(CGFixture, CONSTRAINT_DYNAMICS_DERIVATIVES)(benchmark::State & st)
304 {
305  pinocchio::initConstraintDynamics(model, data, CONTACT_MODELS_6D6D);
306  for (auto _ : st)
307  {
309  model, data, q, v, tau, CONTACT_MODELS_6D6D, CONTACT_DATAS_6D6D);
310  }
311 }
312 BENCHMARK_REGISTER_F(CGFixture, CONSTRAINT_DYNAMICS_DERIVATIVES)->Apply(CustomArguments);
313 
314 // CONSTRAINT_DYNAMICS_DERIVATIVES_CODE_GEN
315 
316 BENCHMARK_DEFINE_F(CGFixture, CONSTRAINT_DYNAMICS_DERIVATIVES_CODE_GEN)(benchmark::State & st)
317 {
318  for (auto _ : st)
319  {
320  CONSTRAINT_DYNAMICS_DERIVATIVES_CODE_GEN->evalFunction(q, v, tau);
321  }
322 }
323 BENCHMARK_REGISTER_F(CGFixture, CONSTRAINT_DYNAMICS_DERIVATIVES_CODE_GEN)->Apply(CustomArguments);
324 
BENCHMARK_REGISTER_F
BENCHMARK_REGISTER_F(CGFixture, RNEA) -> Apply(CustomArguments)
CGFixture::TearDown
void TearDown(benchmark::State &st)
Definition: timings-cg.cpp:40
computeMinverseQCall
static PINOCCHIO_DONT_INLINE void computeMinverseQCall(const pinocchio::Model &model, pinocchio::Data &data, const Eigen::VectorXd &q)
Definition: timings-cg.cpp:209
abaWorldCall
static PINOCCHIO_DONT_INLINE void abaWorldCall(const pinocchio::Model &model, pinocchio::Data &data, const Eigen::VectorXd &q, const Eigen::VectorXd &v, const Eigen::VectorXd &tau)
Definition: timings-cg.cpp:236
CGFixture::CONSTRAINT_DYNAMICS_DERIVATIVES_CODE_GEN
static std::unique_ptr< pinocchio::CodeGenConstraintDynamicsDerivatives< double > > CONSTRAINT_DYNAMICS_DERIVATIVES_CODE_GEN
Definition: timings-cg.cpp:58
CGFixture::SetUp
void SetUp(benchmark::State &st)
Definition: timings-cg.cpp:35
pinocchio::DataTpl
Definition: context/generic.hpp:25
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
cppadcg.hpp
CGFixture::RNEA_CODE_GEN
static std::unique_ptr< pinocchio::CodeGenRNEA< double > > RNEA_CODE_GEN
Definition: timings-cg.cpp:51
macros.hpp
compute-all-terms.hpp
pinocchio::computeConstraintDynamicsDerivatives
void computeConstraintDynamicsDerivatives(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const std::vector< RigidConstraintModelTpl< Scalar, Options >, ConstraintModelAllocator > &contact_models, std::vector< RigidConstraintDataTpl< Scalar, Options >, ConstraintDataAllocator > &contact_data, const ProximalSettingsTpl< Scalar > &settings, const Eigen::MatrixBase< MatrixType1 > &ddq_partial_dq, const Eigen::MatrixBase< MatrixType2 > &ddq_partial_dv, const Eigen::MatrixBase< MatrixType3 > &ddq_partial_dtau, const Eigen::MatrixBase< MatrixType4 > &lambda_partial_dq, const Eigen::MatrixBase< MatrixType5 > &lambda_partial_dv, const Eigen::MatrixBase< MatrixType6 > &lambda_partial_dtau)
CGFixture::PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR
static PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(pinocchio::RigidConstraintModel) CONTACT_MODELS_6D6D
ModelFixture::TearDown
void TearDown(benchmark::State &)
Definition: model-fixture.hpp:51
aligned-vector.hpp
ModelFixture
Definition: model-fixture.hpp:37
pinocchio::Convention::WORLD
@ WORLD
code-generator-algo.hpp
kinematics.hpp
setup.data
data
Definition: cmake/cython/setup.in.py:48
CGFixture
Definition: timings-cg.cpp:33
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...
pinocchio::aba
const DataTpl< Scalar, Options, JointCollectionTpl >::TangentVectorType & aba(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q, const Eigen::MatrixBase< TangentVectorType1 > &v, const Eigen::MatrixBase< TangentVectorType2 > &tau, const Convention convention=Convention::LOCAL)
The Articulated-Body algorithm. It computes the forward dynamics, aka the joint accelerations given t...
CGFixture::GlobalSetUp
static void GlobalSetUp(const ExtraArgs &extra_args)
Definition: timings-cg.cpp:60
constrained-dynamics-derivatives.hpp
pinocchio::CONTACT_6D
@ CONTACT_6D
Point contact model.
Definition: algorithm/contact-info.hpp:22
rnea.hpp
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
anymal-simulation.model
model
Definition: anymal-simulation.py:8
rneaCall
static PINOCCHIO_DONT_INLINE void rneaCall(const pinocchio::Model &model, pinocchio::Data &data, const Eigen::VectorXd &q, const Eigen::VectorXd &v, const Eigen::VectorXd &a)
Definition: timings-cg.cpp:129
forward-dynamics-derivatives.tau
tau
Definition: forward-dynamics-derivatives.py:25
ModelFixture::GlobalSetUp
static void GlobalSetUp(const ExtraArgs &extra_args)
Definition: model-fixture.hpp:55
center-of-mass.hpp
CGFixture::RNEA_DERIVATIVES_CODE_GEN
static std::unique_ptr< pinocchio::CodeGenRNEADerivatives< double > > RNEA_DERIVATIVES_CODE_GEN
Definition: timings-cg.cpp:55
joint-configuration.hpp
pinocchio::RigidConstraintModelTpl
Definition: algorithm/constraints/fwd.hpp:14
model-fixture.hpp
urdf.hpp
pinocchio::RigidConstraintDataTpl
Definition: algorithm/constraints/fwd.hpp:16
cartpole.v
v
Definition: cartpole.py:153
pinocchio::initConstraintDynamics
void initConstraintDynamics(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const std::vector< RigidConstraintModelTpl< Scalar, Options >, Allocator > &contact_models)
Init the forward dynamics data according to the contact information contained in contact_models.
inverse-dynamics._
_
Definition: inverse-dynamics.py:22
PINOCCHIO_BENCHMARK_MAIN_WITH_SETUP
PINOCCHIO_BENCHMARK_MAIN_WITH_SETUP(CGFixture::GlobalSetUp)
q
q
PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR
#define PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(T)
Definition: container/aligned-vector.hpp:13
CGFixture::ABA_DERIVATIVES_CODE_GEN
static std::unique_ptr< pinocchio::CodeGenABADerivatives< double > > ABA_DERIVATIVES_CODE_GEN
Definition: timings-cg.cpp:56
constraintDynamicsDerivativeCall
PINOCCHIO_DONT_INLINE void constraintDynamicsDerivativeCall(const pinocchio::Model &model, pinocchio::Data &data, const Eigen::VectorXd &q, const Eigen::VectorXd &v, const Eigen::VectorXd &tau, const PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(pinocchio::RigidConstraintModel) &contact_models_6d6d, PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(pinocchio::RigidConstraintData) &contact_datas_6d6d)
Definition: timings-cg.cpp:289
a
Vec3f a
cholesky.hpp
CGFixture::ABA_CODE_GEN
static std::unique_ptr< pinocchio::CodeGenABA< double > > ABA_CODE_GEN
Definition: timings-cg.cpp:52
ModelFixture::MODEL
static pinocchio::Model MODEL
Definition: model-fixture.hpp:86
BENCHMARK_DEFINE_F
BENCHMARK_DEFINE_F(CGFixture, RNEA)(benchmark
Definition: timings-cg.cpp:138
CGFixture::CRBA_CODE_GEN
static std::unique_ptr< pinocchio::CodeGenCRBA< double > > CRBA_CODE_GEN
Definition: timings-cg.cpp:53
centroidal.hpp
pinocchio::rnea
const DataTpl< Scalar, Options, JointCollectionTpl >::TangentVectorType & rnea(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q, const Eigen::MatrixBase< TangentVectorType1 > &v, const Eigen::MatrixBase< TangentVectorType2 > &a)
The Recursive Newton-Euler algorithm. It computes the inverse dynamics, aka the joint torques accordi...
CGFixture::MINV_CODE_GEN
static std::unique_ptr< pinocchio::CodeGenMinv< double > > MINV_CODE_GEN
Definition: timings-cg.cpp:54
CustomArguments
static void CustomArguments(benchmark::internal::Benchmark *b)
Definition: timings-cg.cpp:122
contact-info.hpp
crbaWorldCall
static PINOCCHIO_DONT_INLINE void crbaWorldCall(const pinocchio::Model &model, pinocchio::Data &data, const Eigen::VectorXd &q)
Definition: timings-cg.cpp:183
sample-models.hpp
jacobian.hpp
pinocchio::ModelTpl< context::Scalar, context::Options >
constrained-dynamics.hpp
crba.hpp
pinocchio::constraintDynamics
const DataTpl< Scalar, Options, JointCollectionTpl >::TangentVectorType & constraintDynamics(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q, const Eigen::MatrixBase< TangentVectorType1 > &v, const Eigen::MatrixBase< TangentVectorType2 > &tau, const std::vector< RigidConstraintModelTpl< Scalar, Options >, ConstraintModelAllocator > &contact_models, std::vector< RigidConstraintDataTpl< Scalar, Options >, ConstraintDataAllocator > &contact_datas, ProximalSettingsTpl< Scalar > &settings)
Computes the forward dynamics with contact constraints according to a given list of contact informati...
fwd.hpp
ExtraArgs
Store custom command line arguments.
Definition: model-fixture.hpp:24
pinocchio::LOCAL
@ LOCAL
Definition: multibody/fwd.hpp:50


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