123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- #define NOGMM
- #define NOMTL
- #define EIGEN_GOOGLEHASH_SUPPORT 1
- #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(); }
- static double rtime;
- static double nentries;
- template<typename SetterType>
- void dostuff(const char* name, EigenSparseMatrix& sm1)
- {
- int rows = sm1.rows();
- int cols = sm1.cols();
- sm1.setZero();
- BenchTimer t;
- SetterType* set1 = new SetterType(sm1);
- t.reset(); t.start();
- for (int k=0; k<nentries; ++k)
- (*set1)(internal::random<int>(0,rows-1),internal::random<int>(0,cols-1)) += 1;
- t.stop();
- std::cout << "std::map => \t" << t.value()-rtime
- << " nnz=" << set1->nonZeros() << std::flush;
- // getchar();
- t.reset(); t.start(); delete set1; t.stop();
- std::cout << " back: \t" << t.value() << "\n";
- }
-
- int main(int argc, char *argv[])
- {
- int rows = SIZE;
- int cols = SIZE;
- float density = DENSITY;
- EigenSparseMatrix sm1(rows,cols), sm2(rows,cols);
- nentries = rows*cols*density;
- std::cout << "n = " << nentries << "\n";
- int dummy;
- BenchTimer t;
- t.reset(); t.start();
- for (int k=0; k<nentries; ++k)
- dummy = internal::random<int>(0,rows-1) + internal::random<int>(0,cols-1);
- t.stop();
- rtime = t.value();
- std::cout << "rtime = " << rtime << " (" << dummy << ")\n\n";
- const int Bits = 6;
- for (;;)
- {
- dostuff<RandomSetter<EigenSparseMatrix,StdMapTraits,Bits> >("std::map ", sm1);
- dostuff<RandomSetter<EigenSparseMatrix,GnuHashMapTraits,Bits> >("gnu::hash_map", sm1);
- dostuff<RandomSetter<EigenSparseMatrix,GoogleDenseHashMapTraits,Bits> >("google::dense", sm1);
- dostuff<RandomSetter<EigenSparseMatrix,GoogleSparseHashMapTraits,Bits> >("google::sparse", sm1);
- // {
- // RandomSetter<EigenSparseMatrix,GnuHashMapTraits,Bits> set1(sm1);
- // t.reset(); t.start();
- // for (int k=0; k<n; ++k)
- // set1(internal::random<int>(0,rows-1),internal::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(internal::random<int>(0,rows-1),internal::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(internal::random<int>(0,rows-1),internal::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;
- }
|