#include #include #include using namespace Eigen; template EIGEN_DONT_INLINE void foo1(const Mat& m1, const Mat& m2, Mat& m3, Mat& m4, Mat& mr) { m3.noalias() = m1 * m2; m4.noalias() = m1 * m2; mr += m3 + m4; // mr = m1 * m2 + m1 * m2; } template void foo2(int size = S) { Matrix m1(size,size), m2(size,size), m3(size,size), m4(size,size), mr(size,size); for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { m1(i,j) = (i+1)*(j+1); m2(j,i) = (i+1)*(j+1); } mr(i,i) = 0; } BenchTimer t; BENCH(t, 10, 1000000, foo1(m1,m2,m3,m4,mr)); std::cout << t.best() << "\n"; } int main() { foo2<6>(); foo2(6); }