libeigen/eigen!2509 Closes #2868 Co-authored-by: Rasmus Munk Larsen <rmlarsen@gmail.com>
42 lines
1.1 KiB
C++
42 lines
1.1 KiB
C++
// SPDX-FileCopyrightText: The Eigen Authors
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
#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>);
|