aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/sparse_randomsetter.cpp
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2008-10-21 00:05:45 +0000
committerGravatar Gael Guennebaud <g.gael@free.fr>2008-10-21 00:05:45 +0000
commit9e02e42ff6757da1c96518a24c913a01250564ee (patch)
tree06bc6c9a16666035aced1aeede3ddf93eae2f41f /bench/sparse_randomsetter.cpp
parent3645d6c138b6e7710f3c3e2bca1e790b6b93d5d7 (diff)
add the bench file for the RandomSetter
Diffstat (limited to 'bench/sparse_randomsetter.cpp')
-rw-r--r--bench/sparse_randomsetter.cpp104
1 files changed, 104 insertions, 0 deletions
diff --git a/bench/sparse_randomsetter.cpp b/bench/sparse_randomsetter.cpp
new file mode 100644
index 000000000..7868e177a
--- /dev/null
+++ b/bench/sparse_randomsetter.cpp
@@ -0,0 +1,104 @@
+
+#define NOGMM
+#define NOMTL
+
+#include <map>
+#include <ext/hash_map>
+#include <google/dense_hash_map>
+#include <google/sparse_hash_map>
+
+#ifndef SIZE
+#define SIZE 10000
+#endif
+
+#ifndef DENSITY
+#define DENSITY 0.01
+#endif
+
+#ifndef REPEAT
+#define REPEAT 1
+#endif
+
+#include "BenchSparseUtil.h"
+
+#ifndef MINDENSITY
+#define MINDENSITY 0.0004
+#endif
+
+#ifndef NBTRIES
+#define NBTRIES 10
+#endif
+
+#define BENCH(X) \
+ timer.reset(); \
+ for (int _j=0; _j<NBTRIES; ++_j) { \
+ timer.start(); \
+ for (int _k=0; _k<REPEAT; ++_k) { \
+ X \
+ } timer.stop(); }
+
+int main(int argc, char *argv[])
+{
+ int rows = SIZE;
+ int cols = SIZE;
+ float density = DENSITY;
+
+ EigenSparseMatrix sm1(rows,cols), sm2(rows,cols);
+
+
+ int n = rows*cols*density;
+ std::cout << "n = " << n << "\n";
+ int dummy;
+ BenchTimer t;
+
+ t.reset(); t.start();
+ for (int k=0; k<n; ++k)
+ dummy = ei_random<int>(0,rows-1) + ei_random<int>(0,cols-1);
+ t.stop();
+ double rtime = t.value();
+ std::cout << "rtime = " << rtime << " (" << dummy << ")\n\n";
+ const int Bits = 6;
+ for (;;)
+ {
+ {
+ RandomSetter<EigenSparseMatrix,StdMapTraits,Bits> set1(sm1);
+ t.reset(); t.start();
+ for (int k=0; k<n; ++k)
+ set1(ei_random<int>(0,rows-1),ei_random<int>(0,cols-1)) += 1;
+ t.stop();
+ std::cout << "std::map => \t" << t.value()-rtime
+ << " nnz=" << set1.nonZeros() << "\n";getchar();
+ }
+ {
+ RandomSetter<EigenSparseMatrix,GnuHashMapTraits,Bits> set1(sm1);
+ t.reset(); t.start();
+ for (int k=0; k<n; ++k)
+ set1(ei_random<int>(0,rows-1),ei_random<int>(0,cols-1)) += 1;
+ t.stop();
+ std::cout << "gnu::hash_map => \t" << t.value()-rtime
+ << " nnz=" << set1.nonZeros() << "\n";getchar();
+ }
+ {
+ RandomSetter<EigenSparseMatrix,GoogleDenseHashMapTraits,Bits> set1(sm1);
+ t.reset(); t.start();
+ for (int k=0; k<n; ++k)
+ set1(ei_random<int>(0,rows-1),ei_random<int>(0,cols-1)) += 1;
+ t.stop();
+ std::cout << "google::dense => \t" << t.value()-rtime
+ << " nnz=" << set1.nonZeros() << "\n";getchar();
+ }
+ {
+ RandomSetter<EigenSparseMatrix,GoogleSparseHashMapTraits,Bits> set1(sm1);
+ t.reset(); t.start();
+ for (int k=0; k<n; ++k)
+ set1(ei_random<int>(0,rows-1),ei_random<int>(0,cols-1)) += 1;
+ t.stop();
+ std::cout << "google::sparse => \t" << t.value()-rtime
+ << " nnz=" << set1.nonZeros() << "\n";getchar();
+ }
+ std::cout << "\n\n";
+ }
+
+ return 0;
+}
+