timings-cppad-jit.cpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2022-2025 INRIA
3 //
4 
5 #include "model-fixture.hpp"
6 
10 
13 
19 
21 
22 #include <cppad/core/to_csrc.hpp>
23 #include <iostream>
24 
25 #include <benchmark/benchmark.h>
26 
27 #ifdef _WIN32
28  #define DLL_EXT ".dll"
29 #else
30  #define DLL_EXT ".so"
31 #endif
32 
33 enum
34 {
35  Options = 0
36 };
37 typedef double Scalar;
38 typedef CppAD::AD<Scalar> ADScalar;
39 typedef CppAD::cg::CG<Scalar> CGScalar;
40 typedef CppAD::AD<CGScalar> ADCGScalar;
41 typedef CppAD::ADFun<CGScalar> ADCGFun;
42 
43 typedef Eigen::Matrix<ADScalar, Eigen::Dynamic, 1> ADVectorXs;
44 typedef Eigen::Matrix<ADCGScalar, Eigen::Dynamic, 1, Options> ADCGVectorXs;
45 typedef Eigen::Matrix<ADScalar, Eigen::Dynamic, Eigen::Dynamic> ADMatrixXs;
46 typedef Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> RowMatrixXs;
47 
49 typedef Model::Data Data;
50 
53 
56 
59 
62 
65 
66 struct CPPADJITFixture : benchmark::Fixture
67 {
68  void SetUp(benchmark::State &)
69  {
70  model = MODEL;
71  data = Data(model);
72  int nx = model.nq + 2 * model.nv;
73 
74  const Eigen::VectorXd qmax(Eigen::VectorXd::Ones(model.nq));
75  q = randomConfiguration(model, -qmax, qmax);
76  v = TangentVectorType::Random(model.nv);
77  a = TangentVectorType::Random(model.nv);
78  tau = TangentVectorType::Random(model.nv);
79  X = ConfigVectorType::Zero(nx);
80  X.segment(0, model.nq) = q;
81  X.segment(model.nq, model.nv) = v;
82  X.segment(model.nq + model.nv, model.nv) = a;
83 
86  ad_q = q.cast<ADScalar>();
87  ad_v = v.cast<ADScalar>();
88  ad_a = a.cast<ADScalar>();
89  ad_X = ADConfigVectorType::Zero(nx);
90  ad_X.segment(0, model.nq) = ad_q;
91  ad_X.segment(model.nq, model.nv) = ad_v;
92  ad_X.segment(model.nq + model.nv, model.nv) = ad_a;
93 
96  ad_cg_q = q.cast<ADCGScalar>();
97  ad_cg_v = v.cast<ADCGScalar>();
98  ad_cg_a = a.cast<ADCGScalar>();
99  ad_cg_X = ADCGConfigVectorType::Zero(nx);
100  ad_cg_X.segment(0, model.nq) = ad_cg_q;
101  ad_cg_X.segment(model.nq, model.nv) = ad_cg_v;
102  ad_cg_X.segment(model.nq + model.nv, model.nv) = ad_cg_a;
103  }
104 
105  void TearDown(benchmark::State &)
106  {
107  }
108 
109  CppAD::jit_double toJIT(CppAD::ADFun<Scalar> & ad_fun, const std::string & suffix)
110  {
111  // create csrc_file
112  std::string c_type = "double";
113  std::string name = std::string("jit_JSIM_") + suffix;
114  std::string csrc_file = std::string("./") + name + std::string(".c");
115  std::ofstream ofs;
116  ofs.open(csrc_file, std::ofstream::out);
117  ad_fun.to_csrc(ofs, c_type);
118  ofs.close();
119 
120  // create dll_file
121  std::string dll_file = std::string("./") + name + std::string(DLL_EXT);
122  CPPAD_TESTVECTOR(std::string) csrc_files(1);
123  csrc_files[0] = csrc_file;
124  std::map<std::string, std::string> options;
125  std::string err_msg = CppAD::create_dll_lib(dll_file, csrc_files, options);
126  if (err_msg != "")
127  {
128  std::cerr << name << ": err_msg = " << err_msg << "\n";
129  }
130 
131  // dll_linker
132  dll_linker = std::make_unique<CppAD::link_dll_lib>(dll_file, err_msg);
133  if (err_msg != "")
134  {
135  std::cerr << name << ": err_msg = " << err_msg << "\n";
136  }
137 
138  std::string function_name = std::string("cppad_jit_ad_fun_") + suffix;
139  void * void_ptr = (*dll_linker)(function_name, err_msg);
140  if (err_msg != "")
141  {
142  std::cerr << name << ": err_msg = " << err_msg << "\n";
143  }
144 
145  return reinterpret_cast<CppAD::jit_double>(void_ptr);
146  }
147 
148  std::unique_ptr<CppAD::cg::GenericModel<Scalar>>
149  toBIN(ADCGFun & ad_cg_fun, const std::string & suffix, bool create_jacobian = false)
150  {
151  const std::string function_name = suffix;
152  const std::string library_name = std::string("cg_") + suffix + std::string("_eval");
153  const std::string compile_options = "-Ofast";
154 
155  // generates source code
156  CppAD::cg::ModelCSourceGen<Scalar> cgen(ad_cg_fun, function_name);
157  cgen.setCreateForwardZero(true);
158  cgen.setCreateJacobian(create_jacobian);
159  CppAD::cg::ModelLibraryCSourceGen<Scalar> libcgen(cgen);
160 
161  CppAD::cg::DynamicModelLibraryProcessor<Scalar> dynamicLibManager(libcgen, library_name);
162 
163  CppAD::cg::GccCompiler<Scalar> compiler(PINOCCHIO_CXX_COMPILER);
164  std::vector<std::string> compile_flags = compiler.getCompileFlags();
165  compile_flags[0] = compile_options;
166  compiler.setCompileFlags(compile_flags);
167  dynamicLibManager.createDynamicLibrary(compiler, false);
168 
169  const auto it = dynamicLibManager.getOptions().find("dlOpenMode");
170  if (it == dynamicLibManager.getOptions().end())
171  {
172  dynamicLib_ptr = std::make_unique<CppAD::cg::LinuxDynamicLib<Scalar>>(
173  dynamicLibManager.getLibraryName()
174  + CppAD::cg::system::SystemInfo<>::DYNAMIC_LIB_EXTENSION);
175  }
176  else
177  {
178  int dlOpenMode = std::stoi(it->second);
179  dynamicLib_ptr = std::make_unique<CppAD::cg::LinuxDynamicLib<Scalar>>(
180  dynamicLibManager.getLibraryName() + CppAD::cg::system::SystemInfo<>::DYNAMIC_LIB_EXTENSION,
181  dlOpenMode);
182  }
183 
184  return dynamicLib_ptr->model(function_name.c_str());
185  }
186 
194 
201 
208 
209  // Used in toJIT to keep alive dll_linker that own void_ptr.
210  std::unique_ptr<CppAD::link_dll_lib> dll_linker;
211  // Used in toBIN to keep alive dynamicLib_ptr that own the compiled function.
212  std::unique_ptr<CppAD::cg::DynamicLib<Scalar>> dynamicLib_ptr;
213 
214  static void GlobalSetUp(const ExtraArgs &)
215  {
217  MODEL.lowerPositionLimit.head<3>().fill(-1.);
218  MODEL.upperPositionLimit.head<3>().fill(1.);
219  std::cout << "nq = " << MODEL.nq << std::endl;
220  std::cout << "nv = " << MODEL.nv << std::endl;
221  std::cout << "name = " << MODEL.name << std::endl;
222  std::cout << "--" << std::endl;
223  }
224 
225  static Model MODEL;
226 };
228 
229 static void CustomArguments(benchmark::internal::Benchmark * b)
230 {
231  b->MinWarmUpTime(3.);
232 }
233 
234 // CRBA_WORLD
235 
236 PINOCCHIO_DONT_INLINE static void
237 crbaWorldCall(const pinocchio::Model & model, pinocchio::Data & data, const Eigen::VectorXd & q)
238 {
240  data.M.triangularView<Eigen::StrictlyLower>() =
241  data.M.transpose().triangularView<Eigen::StrictlyLower>();
242 }
243 BENCHMARK_DEFINE_F(CPPADJITFixture, CRBA_WORLD)(benchmark::State & st)
244 {
245  for (auto _ : st)
246  {
248  }
249 }
251 
252 // CRBA_WORLD_AD
253 
255  CppAD::ADFun<Scalar> & ad_fun,
256  const CPPAD_TESTVECTOR(Scalar) & x,
257  CPPAD_TESTVECTOR(Scalar) & M_vector)
258 {
259  M_vector = ad_fun.Forward(0, x);
260 }
261 BENCHMARK_DEFINE_F(CPPADJITFixture, CRBA_WORLD_AD)(benchmark::State & st)
262 {
263  CppAD::Independent(ad_q);
264  pinocchio::crba(ad_model, ad_data, ad_q);
265  ad_data.M.triangularView<Eigen::StrictlyLower>() =
266  ad_data.M.transpose().triangularView<Eigen::StrictlyLower>();
267  ADVectorXs M_vector =
268  Eigen::Map<ADVectorXs>(ad_data.M.data(), ad_data.M.cols() * ad_data.M.rows());
269 
270  CppAD::ADFun<Scalar> ad_fun(ad_q, M_vector);
271  ad_fun.function_name_set("ad_fun_crba");
272 
273  CPPAD_TESTVECTOR(Scalar) x((size_t)model.nq);
274  Eigen::Map<Data::ConfigVectorType>(x.data(), model.nq, 1) = q;
275  CPPAD_TESTVECTOR(Scalar) res_M_vector;
276 
277  for (auto _ : st)
278  {
279  crbaWorldADCall(ad_fun, x, res_M_vector);
280  }
281 }
283 
284 // CRBA_WORLD_AD_JIT
285 
286 BENCHMARK_DEFINE_F(CPPADJITFixture, CRBA_WORLD_AD_JIT)(benchmark::State & st)
287 {
288  CppAD::Independent(ad_q);
289  pinocchio::crba(ad_model, ad_data, ad_q);
290  ad_data.M.triangularView<Eigen::StrictlyLower>() =
291  ad_data.M.transpose().triangularView<Eigen::StrictlyLower>();
292  ADVectorXs M_vector =
293  Eigen::Map<ADVectorXs>(ad_data.M.data(), ad_data.M.cols() * ad_data.M.rows());
294 
295  CppAD::ADFun<Scalar> ad_fun(ad_q, M_vector);
296  ad_fun.function_name_set("ad_fun_crba");
297 
298  CPPAD_TESTVECTOR(Scalar) x((size_t)model.nq);
299  Eigen::Map<Data::ConfigVectorType>(x.data(), model.nq, 1) = q;
300  size_t compare_change = 0, nx = (size_t)model.nq, nM_vector = (size_t)model.nv * (size_t)model.nv;
301  CPPAD_TESTVECTOR(Scalar) M_vector_jit(nM_vector);
302 
303  auto ad_fun_ptr = toJIT(ad_fun, "crba");
304  for (auto _ : st)
305  {
306  ad_fun_ptr(nx, x.data(), nM_vector, M_vector_jit.data(), &compare_change);
307  }
308 }
309 BENCHMARK_REGISTER_F(CPPADJITFixture, CRBA_WORLD_AD_JIT)->Apply(CustomArguments);
310 
311 // CRBA_WORLD_AD_CG
312 
313 BENCHMARK_DEFINE_F(CPPADJITFixture, CRBA_WORLD_AD_CG)(benchmark::State & st)
314 {
315  CppAD::Independent(ad_cg_q);
316  pinocchio::crba(ad_cg_model, ad_cg_data, ad_cg_q, pinocchio::Convention::WORLD);
317  ad_cg_data.M.triangularView<Eigen::StrictlyLower>() =
318  ad_cg_data.M.transpose().triangularView<Eigen::StrictlyLower>();
319 
320  ADCGVectorXs M_vector =
321  Eigen::Map<ADCGVectorXs>(ad_cg_data.M.data(), ad_cg_data.M.cols() * ad_cg_data.M.rows());
322 
323  ADCGFun ad_cg_fun;
324  ad_cg_fun.Dependent(ad_cg_q, M_vector);
325  ad_cg_fun.optimize("no_compare_op");
326 
327  CPPAD_TESTVECTOR(Scalar) x((size_t)model.nq);
328  CPPAD_TESTVECTOR(Scalar) y((size_t)model.nv * (size_t)model.nv);
329  Eigen::Map<Data::ConfigVectorType>(x.data(), model.nq, 1) = q;
330 
331  auto generatedFun_ptr = toBIN(ad_cg_fun, "crba");
332 
333  for (auto _ : st)
334  {
335  generatedFun_ptr->ForwardZero(x, y);
336  }
337 }
338 BENCHMARK_REGISTER_F(CPPADJITFixture, CRBA_WORLD_AD_CG)->Apply(CustomArguments);
339 
340 // COMPUTE_RNEA_DERIVATIVES
341 
343  const pinocchio::Model & model,
345  const Eigen::VectorXd & q,
346  const Eigen::VectorXd & v,
347  const Eigen::VectorXd & a)
348 {
350 }
351 BENCHMARK_DEFINE_F(CPPADJITFixture, COMPUTE_RNEA_DERIVATIVES)(benchmark::State & st)
352 {
353  for (auto _ : st)
354  {
356  }
357 }
358 BENCHMARK_REGISTER_F(CPPADJITFixture, COMPUTE_RNEA_DERIVATIVES)->Apply(CustomArguments);
359 
360 // COMPUTE_RNEA_DERIVATIVES_AD
361 
363  CppAD::ADFun<Scalar> & ad_fun,
364  const CPPAD_TESTVECTOR(Scalar) & x,
365  CPPAD_TESTVECTOR(Scalar) & dtau_da)
366 {
367  dtau_da = ad_fun.Jacobian(x);
368 }
369 BENCHMARK_DEFINE_F(CPPADJITFixture, COMPUTE_RNEA_DERIVATIVES_AD)(benchmark::State & st)
370 {
371  CppAD::Independent(ad_X);
373  ad_model, ad_data, ad_X.segment(0, model.nq), ad_X.segment(model.nq, model.nv),
374  ad_X.segment(model.nq + model.nv, model.nv));
375 
376  ADVectorXs ad_Y(model.nv);
377  Eigen::Map<ADData::TangentVectorType>(ad_Y.data(), model.nv, 1) = ad_data.tau;
378 
379  CppAD::ADFun<Scalar> ad_fun(ad_X, ad_Y);
380 
381  int nx = model.nq + 2 * model.nv;
382  CPPAD_TESTVECTOR(Scalar) x((size_t)nx);
383  Eigen::Map<Data::TangentVectorType>(x.data(), nx, 1) = X;
384  CPPAD_TESTVECTOR(Scalar) res_dtau_da;
385 
386  for (auto _ : st)
387  {
388  computeRNEADerivativesADCall(ad_fun, x, res_dtau_da);
389  }
390 }
391 BENCHMARK_REGISTER_F(CPPADJITFixture, COMPUTE_RNEA_DERIVATIVES_AD)->Apply(CustomArguments);
392 
393 // COMPUTE_RNEA_DERIVATIVES_AD_JIT
394 
395 BENCHMARK_DEFINE_F(CPPADJITFixture, COMPUTE_RNEA_DERIVATIVES_AD_JIT)(benchmark::State & st)
396 {
397  CppAD::Independent(ad_X);
399  ad_model, ad_data, ad_X.segment(0, model.nq), ad_X.segment(model.nq, model.nv),
400  ad_X.segment(model.nq + model.nv, model.nv));
401 
402  ADVectorXs ad_Y(model.nv);
403  Eigen::Map<ADData::TangentVectorType>(ad_Y.data(), model.nv, 1) = ad_data.tau;
404 
405  CppAD::ADFun<Scalar> f(ad_X, ad_Y);
406  CppAD::ADFun<ADScalar, Scalar> af = f.base2ad();
407 
408  int nx = model.nq + 2 * model.nv;
409 
410  CppAD::Independent(ad_X);
411  ADMatrixXs dtau_dx = af.Jacobian(ad_X);
412  ADVectorXs dtau_dx_vector(model.nv * nx);
413  dtau_dx_vector = Eigen::Map<ADVectorXs>(dtau_dx.data(), dtau_dx.cols() * dtau_dx.rows());
414  CppAD::ADFun<double> ad_fun(ad_X, dtau_dx_vector);
415  ad_fun.function_name_set("ad_fun_rnea_derivatives");
416 
417  CPPAD_TESTVECTOR(Scalar) x((size_t)nx);
418  Eigen::Map<Data::TangentVectorType>(x.data(), nx, 1) = X;
419  size_t compare_change = 0, nx_ = (size_t)nx, ndtau_dx = (size_t)model.nv * (size_t)nx;
420  std::vector<double> dtau_dx_jit(ndtau_dx);
421 
422  auto ad_fun_ptr = toJIT(ad_fun, "rnea_derivatives");
423  for (auto _ : st)
424  {
425  ad_fun_ptr(nx_, x.data(), ndtau_dx, dtau_dx_jit.data(), &compare_change);
426  }
427 }
428 BENCHMARK_REGISTER_F(CPPADJITFixture, COMPUTE_RNEA_DERIVATIVES_AD_JIT)->Apply(CustomArguments);
429 
430 // COMPUTE_RNEA_DERIVATIVES_AD_CG
431 
432 BENCHMARK_DEFINE_F(CPPADJITFixture, COMPUTE_RNEA_DERIVATIVES_AD_CG)(benchmark::State & st)
433 {
434  const int nx = model.nq + 2 * model.nv;
435 
436  ADCGFun ad_cg_fun;
437 
438  CppAD::Independent(ad_cg_X);
440  ad_cg_model, ad_cg_data, ad_cg_X.segment(0, model.nq), ad_cg_X.segment(model.nq, model.nv),
441  ad_cg_X.segment(model.nq + model.nv, model.nv));
442  ADCGVectorXs ad_cg_Y(model.nv);
443  Eigen::Map<ADCGData::TangentVectorType>(ad_cg_Y.data(), model.nv, 1) = ad_cg_data.tau;
444  ad_cg_fun.Dependent(ad_cg_X, ad_cg_Y);
445  ad_cg_fun.optimize("no_compare_op");
446 
447  RowMatrixXs jac = RowMatrixXs::Zero(ad_cg_Y.size(), ad_cg_X.size());
448  CPPAD_TESTVECTOR(Scalar) x((size_t)nx);
449  Eigen::Map<Data::TangentVectorType>(x.data(), nx, 1) = X;
450 
451  auto generatedFun_ptr = toBIN(ad_cg_fun, "crba_derivatives", true);
452  CppAD::cg::ArrayView<Scalar> jac_(jac.data(), (size_t)jac.size());
453 
454  for (auto _ : st)
455  {
456  generatedFun_ptr->Jacobian(x, jac_);
457  }
458 }
459 BENCHMARK_REGISTER_F(CPPADJITFixture, COMPUTE_RNEA_DERIVATIVES_AD_CG)->Apply(CustomArguments);
460 
ADCGConfigVectorType
ADCGModel::ConfigVectorType ADCGConfigVectorType
Definition: timings-cppad-jit.cpp:63
ADCGFun
CppAD::ADFun< CGScalar > ADCGFun
Definition: timings-cppad-jit.cpp:41
CPPADJITFixture::data
Data data
Definition: timings-cppad-jit.cpp:188
CPPADJITFixture::ad_cg_model
ADCGModel ad_cg_model
Definition: timings-cppad-jit.cpp:202
computeRNEADerivativesCall
static PINOCCHIO_DONT_INLINE void computeRNEADerivativesCall(const pinocchio::Model &model, pinocchio::Data &data, const Eigen::VectorXd &q, const Eigen::VectorXd &v, const Eigen::VectorXd &a)
Definition: timings-cppad-jit.cpp:342
pinocchio::computeRNEADerivatives
void computeRNEADerivatives(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, const Eigen::MatrixBase< MatrixType1 > &rnea_partial_dq, const Eigen::MatrixBase< MatrixType2 > &rnea_partial_dv, const Eigen::MatrixBase< MatrixType3 > &rnea_partial_da)
Computes the partial derivatives of the Recursive Newton Euler Algorithms with respect to the joint c...
CPPADJITFixture::q
ConfigVectorType q
Definition: timings-cppad-jit.cpp:189
BENCHMARK_REGISTER_F
BENCHMARK_REGISTER_F(CPPADJITFixture, CRBA_WORLD) -> Apply(CustomArguments)
pinocchio::DataTpl
Definition: context/generic.hpp:25
CGScalar
CppAD::cg::CG< Scalar > CGScalar
Definition: timings-cppad-jit.cpp:39
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
ADCGScalar
CppAD::AD< CGScalar > ADCGScalar
Definition: timings-cppad-jit.cpp:40
pinocchio::ModelTpl::lowerPositionLimit
ConfigVectorType lowerPositionLimit
Lower joint configuration limit.
Definition: multibody/model.hpp:187
codegen-rnea.jac
jac
Definition: codegen-rnea.py:41
aligned-vector.hpp
pinocchio::ModelTpl::cast
CastType< NewScalar, ModelTpl >::type cast() const
y
y
ADTangentVectorType
ADModel::TangentVectorType ADTangentVectorType
Definition: timings-cppad-jit.cpp:61
RowMatrixXs
Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > RowMatrixXs
Definition: timings-cppad-jit.cpp:46
pinocchio::Convention::WORLD
@ WORLD
code-generator-algo.hpp
kinematics.hpp
Data
Model::Data Data
Definition: timings-cppad-jit.cpp:49
CPPADJITFixture::toBIN
std::unique_ptr< CppAD::cg::GenericModel< Scalar > > toBIN(ADCGFun &ad_cg_fun, const std::string &suffix, bool create_jacobian=false)
Definition: timings-cppad-jit.cpp:149
model.hpp
setup.data
data
Definition: cmake/cython/setup.in.py:48
CPPADJITFixture::a
TangentVectorType a
Definition: timings-cppad-jit.cpp:191
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...
ADMatrixXs
Eigen::Matrix< ADScalar, Eigen::Dynamic, Eigen::Dynamic > ADMatrixXs
Definition: timings-cppad-jit.cpp:45
pinocchio::ModelTpl< Scalar >::Data
DataTpl< Scalar, Options, JointCollectionTpl > Data
Definition: multibody/model.hpp:58
CPPADJITFixture::SetUp
void SetUp(benchmark::State &)
Definition: timings-cppad-jit.cpp:68
pinocchio::buildModels::humanoidRandom
void humanoidRandom(ModelTpl< Scalar, Options, JointCollectionTpl > &model, bool usingFF=true, bool mimic=false)
Create a humanoid kinematic tree with 6-DOF limbs and random joint placements.
pinocchio::ModelTpl::name
std::string name
Model name.
Definition: multibody/model.hpp:220
CPPADJITFixture::ad_a
ADTangentVectorType ad_a
Definition: timings-cppad-jit.cpp:199
autodiff-rnea.f
f
Definition: autodiff-rnea.py:24
pinocchio::randomConfiguration
void randomConfiguration(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, const Eigen::MatrixBase< ConfigVectorIn1 > &lowerLimits, const Eigen::MatrixBase< ConfigVectorIn2 > &upperLimits, const Eigen::MatrixBase< ReturnType > &qout)
Generate a configuration vector uniformly sampled among provided limits.
Definition: joint-configuration.hpp:315
rnea.hpp
b
Vec3f b
collision-with-point-clouds.nx
int nx
Definition: collision-with-point-clouds.py:40
anymal-simulation.model
model
Definition: anymal-simulation.py:8
joint-configuration.hpp
CPPADJITFixture::MODEL
static Model MODEL
Definition: timings-cppad-jit.cpp:225
ADCGVectorXs
Eigen::Matrix< ADCGScalar, Eigen::Dynamic, 1, Options > ADCGVectorXs
Definition: timings-cppad-jit.cpp:44
CPPADJITFixture::X
ConfigVectorType X
Definition: timings-cppad-jit.cpp:193
DLL_EXT
#define DLL_EXT
Definition: timings-cppad-jit.cpp:30
model-fixture.hpp
pinocchio::ModelTpl::TangentVectorType
VectorXs TangentVectorType
Dense vectorized version of a joint tangent vector (e.g. velocity, acceleration, etc)....
Definition: multibody/model.hpp:95
Options
@ Options
Definition: timings-cppad-jit.cpp:35
collision-with-point-clouds.X
X
Definition: collision-with-point-clouds.py:36
ConfigVectorType
Model::ConfigVectorType ConfigVectorType
Definition: timings-cppad-jit.cpp:57
cartpole.v
v
Definition: cartpole.py:153
data.hpp
CPPADJITFixture::GlobalSetUp
static void GlobalSetUp(const ExtraArgs &)
Definition: timings-cppad-jit.cpp:214
CPPADJITFixture::ad_cg_data
ADCGData ad_cg_data
Definition: timings-cppad-jit.cpp:203
x
x
CPPADJITFixture::ad_data
ADData ad_data
Definition: timings-cppad-jit.cpp:196
inverse-dynamics._
_
Definition: inverse-dynamics.py:22
CPPADJITFixture::toJIT
CppAD::jit_double toJIT(CppAD::ADFun< Scalar > &ad_fun, const std::string &suffix)
Definition: timings-cppad-jit.cpp:109
setup.name
name
Definition: cmake/cython/setup.in.py:179
q
q
inverse-kinematics-3d.it
int it
Definition: inverse-kinematics-3d.py:17
PINOCCHIO_BENCHMARK_MAIN_WITH_SETUP
PINOCCHIO_BENCHMARK_MAIN_WITH_SETUP(CPPADJITFixture::GlobalSetUp)
ADCGTangentVectorType
ADCGModel::TangentVectorType ADCGTangentVectorType
Definition: timings-cppad-jit.cpp:64
CPPADJITFixture::ad_cg_v
ADCGTangentVectorType ad_cg_v
Definition: timings-cppad-jit.cpp:205
TangentVectorType
Model::TangentVectorType TangentVectorType
Definition: timings-cppad-jit.cpp:58
CPPADJITFixture::model
Model model
Definition: timings-cppad-jit.cpp:187
CPPADJITFixture::v
TangentVectorType v
Definition: timings-cppad-jit.cpp:190
autodiff-rnea.dtau_da
dtau_da
Definition: autodiff-rnea.py:29
a
Vec3f a
crbaWorldADCall
static PINOCCHIO_DONT_INLINE void crbaWorldADCall(CppAD::ADFun< Scalar > &ad_fun, const CPPAD_TESTVECTOR(Scalar) &x, CPPAD_TESTVECTOR(Scalar) &M_vector)
Definition: timings-cppad-jit.cpp:254
CPPADJITFixture::tau
TangentVectorType tau
Definition: timings-cppad-jit.cpp:192
CPPADJITFixture::ad_X
ADConfigVectorType ad_X
Definition: timings-cppad-jit.cpp:200
ADCGModel
pinocchio::ModelTpl< ADCGScalar > ADCGModel
Definition: timings-cppad-jit.cpp:54
CPPADJITFixture::ad_q
ADConfigVectorType ad_q
Definition: timings-cppad-jit.cpp:197
ADScalar
CppAD::AD< Scalar > ADScalar
Definition: timings-cppad-jit.cpp:38
ADModel
pinocchio::ModelTpl< ADScalar > ADModel
Definition: timings-cppad-jit.cpp:51
fill
fill
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...
computeRNEADerivativesADCall
static PINOCCHIO_DONT_INLINE void computeRNEADerivativesADCall(CppAD::ADFun< Scalar > &ad_fun, const CPPAD_TESTVECTOR(Scalar) &x, CPPAD_TESTVECTOR(Scalar) &dtau_da)
Definition: timings-cppad-jit.cpp:362
crbaWorldCall
static PINOCCHIO_DONT_INLINE void crbaWorldCall(const pinocchio::Model &model, pinocchio::Data &data, const Eigen::VectorXd &q)
Definition: timings-cppad-jit.cpp:237
pinocchio::ModelTpl::nv
int nv
Dimension of the velocity vector space.
Definition: multibody/model.hpp:101
CPPADJITFixture::dll_linker
std::unique_ptr< CppAD::link_dll_lib > dll_linker
Definition: timings-cppad-jit.cpp:210
CPPADJITFixture::dynamicLib_ptr
std::unique_ptr< CppAD::cg::DynamicLib< Scalar > > dynamicLib_ptr
Definition: timings-cppad-jit.cpp:212
CPPADJITFixture::ad_cg_q
ADCGConfigVectorType ad_cg_q
Definition: timings-cppad-jit.cpp:204
ADConfigVectorType
ADModel::ConfigVectorType ADConfigVectorType
Definition: timings-cppad-jit.cpp:60
ADCGData
ADCGModel::Data ADCGData
Definition: timings-cppad-jit.cpp:55
CPPADJITFixture
Definition: timings-cppad-jit.cpp:66
CPPADJITFixture::TearDown
void TearDown(benchmark::State &)
Definition: timings-cppad-jit.cpp:105
BENCHMARK_DEFINE_F
BENCHMARK_DEFINE_F(CPPADJITFixture, CRBA_WORLD)(benchmark
Definition: timings-cppad-jit.cpp:243
CustomArguments
static void CustomArguments(benchmark::internal::Benchmark *b)
Definition: timings-cppad-jit.cpp:229
CPPADJITFixture::ad_model
ADModel ad_model
Definition: timings-cppad-jit.cpp:195
pinocchio::ModelTpl::ConfigVectorType
VectorXs ConfigVectorType
Dense vectorized version of a joint configuration vector.
Definition: multibody/model.hpp:87
sample-models.hpp
Model
pinocchio::ModelTpl< Scalar > Model
Definition: timings-cppad-jit.cpp:48
CPPADJITFixture::ad_v
ADTangentVectorType ad_v
Definition: timings-cppad-jit.cpp:198
Scalar
double Scalar
Definition: timings-cppad-jit.cpp:37
jacobian.hpp
pinocchio::ModelTpl< Scalar >
ADData
ADModel::Data ADData
Definition: timings-cppad-jit.cpp:52
crba.hpp
pinocchio::ModelTpl::upperPositionLimit
ConfigVectorType upperPositionLimit
Upper joint configuration limit.
Definition: multibody/model.hpp:190
X
pinocchio::ModelTpl::nq
int nq
Dimension of the configuration vector representation.
Definition: multibody/model.hpp:98
ExtraArgs
Store custom command line arguments.
Definition: model-fixture.hpp:24
CPPADJITFixture::ad_cg_X
ADCGConfigVectorType ad_cg_X
Definition: timings-cppad-jit.cpp:207
ADVectorXs
Eigen::Matrix< ADScalar, Eigen::Dynamic, 1 > ADVectorXs
Definition: timings-cppad-jit.cpp:43
CPPADJITFixture::ad_cg_a
ADCGTangentVectorType ad_cg_a
Definition: timings-cppad-jit.cpp:206


pinocchio
Author(s):
autogenerated on Mon Apr 7 2025 02:41:45