#include #include #include #include using namespace Eigen; #ifndef REPEAT #define REPEAT 1000000 #endif enum func_opt { TV, TMATRIXV }; template struct func; template struct func { static __attribute__ ((noinline)) res run( arg1& a1, arg2& a2 ) { asm (""); return a1 * a2; } }; template struct func { static __attribute__ ((noinline)) res run( arg1& a1, arg2& a2 ) { asm (""); return a1.matrix() * a2; } }; template struct test_transform { static void run() { arg1 a1; a1.setIdentity(); arg2 a2; a2.setIdentity(); BenchTimer timer; timer.reset(); for (int k=0; k<10; ++k) { timer.start(); for (int k=0; k Trans;\ typedef Matrix Vec;\ typedef func Func;\ test_transform< Func, Trans, Vec >::run();\ } int main(int argc, char* argv[]) { run_test(TV, float, Isometry, AutoAlign, 3); run_test(TV, float, Isometry, DontAlign, 3); run_test(TV, float, Isometry, AutoAlign, 4); run_test(TV, float, Isometry, DontAlign, 4); run_test(TMATRIXV, float, Isometry, AutoAlign, 4); run_test(TMATRIXV, float, Isometry, DontAlign, 4); }