Files
eigen/benchmarks/quatmul.cpp
Rasmus Munk Larsen 3108f6360e Migrate Eigen benchmarks to the Google benchmark framework
libeigen/eigen!2132

Closes #3025

Co-authored-by: Rasmus Munk Larsen <rmlarsen@gmail.com>
2026-02-17 20:51:36 -08:00

39 lines
1.0 KiB
C++

#include <benchmark/benchmark.h>
#include <Eigen/Core>
#include <Eigen/Geometry>
using namespace Eigen;
template <typename Quat>
EIGEN_DONT_INLINE void quatmul_default(const Quat& a, const Quat& b, Quat& c) {
c = a * b;
}
template <typename Quat>
EIGEN_DONT_INLINE void quatmul_novec(const Quat& a, const Quat& b, Quat& c) {
c = internal::quat_product<0, Quat, Quat, typename Quat::Scalar>::run(a, b);
}
template <typename Quat>
static void BM_QuatMul_Default(benchmark::State& state) {
Quat a(4, 1, 2, 3), b(2, 3, 4, 5), c;
for (auto _ : state) {
quatmul_default(a, b, c);
benchmark::DoNotOptimize(c.coeffs().data());
}
}
template <typename Quat>
static void BM_QuatMul_NoVec(benchmark::State& state) {
Quat a(4, 1, 2, 3), b(2, 3, 4, 5), c;
for (auto _ : state) {
quatmul_novec(a, b, c);
benchmark::DoNotOptimize(c.coeffs().data());
}
}
BENCHMARK(BM_QuatMul_Default<Quaternionf>);
BENCHMARK(BM_QuatMul_NoVec<Quaternionf>);
BENCHMARK(BM_QuatMul_Default<Quaterniond>);
BENCHMARK(BM_QuatMul_NoVec<Quaterniond>);