1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// g++ -O3 -DNDEBUG -DMATSIZE=<x> benchmark.cpp -o benchmark && time ./benchmark
2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <iostream>
4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <Eigen/Core>
6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef MATSIZE
8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define MATSIZE 3
9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif
10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace std;
12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace Eigen;
13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef REPEAT
15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define REPEAT 40000000
16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif
17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef SCALAR
19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define SCALAR double
20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif
21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint main(int argc, char *argv[])
23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    Matrix<SCALAR,MATSIZE,MATSIZE> I = Matrix<SCALAR,MATSIZE,MATSIZE>::Ones();
25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    Matrix<SCALAR,MATSIZE,MATSIZE> m;
26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    for(int i = 0; i < MATSIZE; i++)
27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        for(int j = 0; j < MATSIZE; j++)
28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        {
29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            m(i,j) = (i+MATSIZE*j);
30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        }
31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    asm("#begin");
32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    for(int a = 0; a < REPEAT; a++)
33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    {
34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        m = Matrix<SCALAR,MATSIZE,MATSIZE>::Ones() + 0.00005 * (m + (m*m));
35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    }
36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    asm("#end");
37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    cout << m << endl;
38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    return 0;
39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
40