1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// g++ -O3 -DNDEBUG benchmarkX.cpp -o benchmarkX && time ./benchmarkX
2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <iostream>
4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <Eigen/Core>
5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace std;
7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace Eigen;
8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef VECTYPE
10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define VECTYPE VectorXLd
11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif
12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef VECSIZE
14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define VECSIZE 1000000
15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif
16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef REPEAT
18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define REPEAT 1000
19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif
20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint main(int argc, char *argv[])
22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath	VECTYPE I = VECTYPE::Ones(VECSIZE);
24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath	VECTYPE m(VECSIZE,1);
25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath	for(int i = 0; i < VECSIZE; i++)
26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath	{
27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath		m[i] = 0.1 * i/VECSIZE;
28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath	}
29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath	for(int a = 0; a < REPEAT; a++)
30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath	{
31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath		m = VECTYPE::Ones(VECSIZE) + 0.00005 * (m.cwise().square() + m/4);
32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath	}
33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath	cout << m[0] << endl;
34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath	return 0;
35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
36