diff options
author | Gael Guennebaud <g.gael@free.fr> | 2008-10-21 00:05:45 +0000 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2008-10-21 00:05:45 +0000 |
commit | 9e02e42ff6757da1c96518a24c913a01250564ee (patch) | |
tree | 06bc6c9a16666035aced1aeede3ddf93eae2f41f /bench/sparse_randomsetter.cpp | |
parent | 3645d6c138b6e7710f3c3e2bca1e790b6b93d5d7 (diff) |
add the bench file for the RandomSetter
Diffstat (limited to 'bench/sparse_randomsetter.cpp')
-rw-r--r-- | bench/sparse_randomsetter.cpp | 104 |
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; +} + |