aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/benchmarkSlice.cpp
diff options
context:
space:
mode:
authorGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2008-07-09 16:43:11 +0000
committerGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2008-07-09 16:43:11 +0000
commit8f21a5e8621d25080b9ccc1f2b6765f8bc49af0f (patch)
treed8d4821214b0bef00eeb564f636a39aebc900526 /bench/benchmarkSlice.cpp
parent28539e7597c643dbc2b8d4f49dd16bd86fb7251f (diff)
add benchmark for slice vectorization... expected it to be little or
zero benefit... turns out to be 20x speedup. Something is wrong.
Diffstat (limited to 'bench/benchmarkSlice.cpp')
-rw-r--r--bench/benchmarkSlice.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/bench/benchmarkSlice.cpp b/bench/benchmarkSlice.cpp
new file mode 100644
index 000000000..197fe2488
--- /dev/null
+++ b/bench/benchmarkSlice.cpp
@@ -0,0 +1,35 @@
+// g++ -O3 -DNDEBUG benchmarkX.cpp -o benchmarkX && time ./benchmarkX
+
+#include <Eigen/Array>
+
+using namespace std;
+USING_PART_OF_NAMESPACE_EIGEN
+
+#ifndef REPEAT
+#define REPEAT 10000
+#endif
+
+#ifndef SCALAR
+#define SCALAR float
+#endif
+
+int main(int argc, char *argv[])
+{
+ typedef Matrix<SCALAR, Eigen::Dynamic, Eigen::Dynamic> Mat;
+ Mat m(100, 100);
+ m.setRandom();
+
+ for(int a = 0; a < REPEAT; a++)
+ {
+ int r, c, nr, nc;
+ r = Eigen::ei_random<int>(0,10);
+ c = Eigen::ei_random<int>(0,10);
+ nr = Eigen::ei_random<int>(50,80);
+ nc = Eigen::ei_random<int>(50,80);
+ m.block(r,c,nr,nc) += Mat::ones(nr,nc);
+ m.block(r,c,nr,nc) *= SCALAR(10);
+ m.block(r,c,nr,nc) -= Mat::constant(nr,nc,10);
+ }
+ cout << m[0] << endl;
+ return 0;
+}