quatmul.cpp File Reference
#include <iostream>
#include <Eigen/Core>
#include <Eigen/Geometry>
#include <bench/BenchTimer.h>

Functions

template<typename Quat >
EIGEN_DONT_INLINE void quatmul_default (const Quat &a, const Quat &b, Quat &c)
 
template<typename Quat >
EIGEN_DONT_INLINE void quatmul_novec (const Quat &a, const Quat &b, Quat &c)
 
template<typename Quat >
void bench (const std::string &label)
 
int main ()
 

Function Documentation

◆ bench()

template<typename Quat >
void bench ( const std::string &  label)
19  {
20  int tries = 10;
21  int rep = 1000000;
22  BenchTimer t;
23 
24  Quat a(4, 1, 2, 3);
25  Quat b(2, 3, 4, 5);
26  Quat c;
27 
28  std::cout.precision(3);
29 
30  BENCH(t, tries, rep, quatmul_default(a, b, c));
31  std::cout << label << " default " << 1e3 * t.best(CPU_TIMER) << "ms \t" << 1e-6 * double(rep) / (t.best(CPU_TIMER))
32  << " M mul/s\n";
33 
34  BENCH(t, tries, rep, quatmul_novec(a, b, c));
35  std::cout << label << " novec " << 1e3 * t.best(CPU_TIMER) << "ms \t" << 1e-6 * double(rep) / (t.best(CPU_TIMER))
36  << " M mul/s\n";
37 }
#define BENCH(TIMER, TRIES, REP, CODE)
Definition: BenchTimer.h:150
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Scalar * b
Definition: benchVecAdd.cpp:17
Definition: BenchTimer.h:55
const Scalar * a
Definition: level2_cplx_impl.h:32
@ CPU_TIMER
Definition: BenchTimer.h:46
label
Definition: UniformPSDSelfTest.py:24
int c
Definition: calibrate.py:100
t
Definition: plotPSD.py:36
EIGEN_DONT_INLINE void quatmul_novec(const Quat &a, const Quat &b, Quat &c)
Definition: quatmul.cpp:14
EIGEN_DONT_INLINE void quatmul_default(const Quat &a, const Quat &b, Quat &c)
Definition: quatmul.cpp:9

References a, b, BENCH, calibrate::c, Eigen::CPU_TIMER, e(), UniformPSDSelfTest::label, quatmul_default(), quatmul_novec(), and plotPSD::t.

◆ main()

int main ( )
39  {
40  bench<Quaternionf>("float ");
41  bench<Quaterniond>("double");
42 
43  return 0;
44 }

◆ quatmul_default()

template<typename Quat >
EIGEN_DONT_INLINE void quatmul_default ( const Quat &  a,
const Quat &  b,
Quat &  c 
)
9  {
10  c = a * b;
11 }

References a, b, and calibrate::c.

Referenced by bench().

◆ quatmul_novec()

template<typename Quat >
EIGEN_DONT_INLINE void quatmul_novec ( const Quat &  a,
const Quat &  b,
Quat &  c 
)
14  {
16 }
void run(const string &dir_name, LinearSolver *linear_solver_pt, const unsigned nel_1d, bool mess_up_order)
Definition: two_d_poisson_compare_solvers.cc:317

References a, b, calibrate::c, and Eigen::internal::quat_product< Arch, Derived1, Derived2, Scalar >::run().

Referenced by bench().