From a63f92356a89b02f1ce611d32bac0c6102acb9d8 Mon Sep 17 00:00:00 2001 From: Guilhem Saurel <guilhem.saurel@laas.fr> Date: Tue, 24 Jul 2018 10:33:28 +0200 Subject: [PATCH] add rbdl-benchmark with google benchmarks & fix pinocchio-benchmark --- README.md | 4 ++++ src/CMakeLists.txt | 12 ++++++++++-- src/rbdl-benchmark.cpp | 43 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 src/rbdl-benchmark.cpp diff --git a/README.md b/README.md index 96a0d6b..df6b6e6 100644 --- a/README.md +++ b/README.md @@ -103,4 +103,8 @@ popd ./prefix/bin/rbdl-bench models/romeo/romeo_description/urdf/romeo.urdf ./prefix/bin/pinocchio-bench models/simple_humanoid.urdf ./prefix/bin/pinocchio-bench models/romeo/romeo_description/urdf/romeo.urdf +sudo cpupower frequency-set --governor performance +./prefix/bin/pinocchio-benchmark +./prefix/bin/rbdl-benchmark +sudo cpupower frequency-set --governor powersave ``` diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fc15aca..fc84ba5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,8 +9,16 @@ ADD_EXECUTABLE(pinocchio-bench pinocchio-bench) PKG_CONFIG_USE_DEPENDENCY(pinocchio-bench pinocchio) INSTALL(TARGETS pinocchio-bench RUNTIME DESTINATION bin) +# RBDL & benchmark +ADD_EXECUTABLE(rbdl-benchmark rbdl-benchmark) +PKG_CONFIG_USE_DEPENDENCY(rbdl-benchmark rbdl) +PKG_CONFIG_USE_DEPENDENCY(rbdl-benchmark benchmark) +TARGET_LINK_LIBRARIES(rbdl-benchmark rbdl_urdfreader pthread) +INSTALL(TARGETS rbdl-benchmark RUNTIME DESTINATION bin) + # Pinocchio & benchmark ADD_EXECUTABLE(pinocchio-benchmark pinocchio-benchmark) -PKG_CONFIG_USE_DEPENDENCY(pinocchio-bench pinocchio) -PKG_CONFIG_USE_DEPENDENCY(pinocchio-bench benchmark) +PKG_CONFIG_USE_DEPENDENCY(pinocchio-benchmark pinocchio) +PKG_CONFIG_USE_DEPENDENCY(pinocchio-benchmark benchmark) +TARGET_LINK_LIBRARIES(pinocchio-benchmark pthread) INSTALL(TARGETS pinocchio-benchmark RUNTIME DESTINATION bin) diff --git a/src/rbdl-benchmark.cpp b/src/rbdl-benchmark.cpp new file mode 100644 index 0000000..2984fe9 --- /dev/null +++ b/src/rbdl-benchmark.cpp @@ -0,0 +1,43 @@ +#include <iostream> +#include <fstream> + +#include <benchmark/benchmark.h> + +#include <rbdl/rbdl.h> +#include <rbdl/addons/urdfreader/urdfreader.h> + +static void BM_RBDL_RNEA(benchmark::State& state) +{ + RigidBodyDynamics::Model* model = new RigidBodyDynamics::Model(); + + // Load an urdf file provided by the user + RigidBodyDynamics::Addons::URDFReadFromFile("models/simple_humanoid.urdf", model, true); + std::cout << "RBDL Benchmark" << std::endl; + std::cout << " model: " << "models/simple_humanoid.urdf" << std::endl; + std::cout << " nq: " << model->q_size << std::endl; + std::cout << " nv: " << model->qdot_size << std::endl; + + RigidBodyDynamics::Math::VectorNd q = + RigidBodyDynamics::Math::VectorNd::Random(model->q_size); + RigidBodyDynamics::Math::VectorNd qdot = + RigidBodyDynamics::Math::VectorNd::Random(model->qdot_size); + RigidBodyDynamics::Math::VectorNd tau = + RigidBodyDynamics::Math::VectorNd::Random(model->qdot_size); + RigidBodyDynamics::Math::VectorNd qddot = + RigidBodyDynamics::Math::VectorNd::Random(model->qdot_size); + + for (auto _: state) + { + q = RigidBodyDynamics::Math::VectorNd::Random(model->q_size); + qdot = RigidBodyDynamics::Math::VectorNd::Random(model->qdot_size); + tau = RigidBodyDynamics::Math::VectorNd::Random(model->qdot_size); + qddot = RigidBodyDynamics::Math::VectorNd::Random(model->qdot_size); + + RigidBodyDynamics::ForwardDynamics(*model, q, qdot, tau, qddot); + //std::cout << "qddot after ABA: " << qddot.transpose() << std::endl; + } +} + +BENCHMARK(BM_RBDL_RNEA); + +BENCHMARK_MAIN(); -- GitLab