1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <iostream> 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <Eigen/Core> 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <Eigen/Geometry> 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <bench/BenchTimer.h> 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace Eigen; 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Quat> 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_DONT_INLINE void quatmul_default(const Quat& a, const Quat& b, Quat& c) 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath c = a * b; 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Quat> 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_DONT_INLINE void quatmul_novec(const Quat& a, const Quat& b, Quat& c) 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath c = internal::quat_product<0, Quat, Quat, typename Quat::Scalar, Aligned>::run(a,b); 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Quat> void bench(const std::string& label) 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int tries = 10; 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int rep = 1000000; 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath BenchTimer t; 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Quat a(4, 1, 2, 3); 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Quat b(2, 3, 4, 5); 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Quat c; 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath std::cout.precision(3); 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath BENCH(t, tries, rep, quatmul_default(a,b,c)); 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath std::cout << label << " default " << 1e3*t.best(CPU_TIMER) << "ms \t" << 1e-6*double(rep)/(t.best(CPU_TIMER)) << " M mul/s\n"; 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath BENCH(t, tries, rep, quatmul_novec(a,b,c)); 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath std::cout << label << " novec " << 1e3*t.best(CPU_TIMER) << "ms \t" << 1e-6*double(rep)/(t.best(CPU_TIMER)) << " M mul/s\n"; 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint main() 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath bench<Quaternionf>("float "); 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath bench<Quaterniond>("double"); 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return 0; 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 48