sparse_randomsetter.cpp
Go to the documentation of this file.
00001 
00002 #define NOGMM
00003 #define NOMTL
00004 
00005 #include <map>
00006 #include <ext/hash_map>
00007 #include <google/dense_hash_map>
00008 #include <google/sparse_hash_map>
00009 
00010 #ifndef SIZE
00011 #define SIZE 10000
00012 #endif
00013 
00014 #ifndef DENSITY
00015 #define DENSITY 0.01
00016 #endif
00017 
00018 #ifndef REPEAT
00019 #define REPEAT 1
00020 #endif
00021 
00022 #include "BenchSparseUtil.h"
00023 
00024 #ifndef MINDENSITY
00025 #define MINDENSITY 0.0004
00026 #endif
00027 
00028 #ifndef NBTRIES
00029 #define NBTRIES 10
00030 #endif
00031 
00032 #define BENCH(X) \
00033   timer.reset(); \
00034   for (int _j=0; _j<NBTRIES; ++_j) { \
00035     timer.start(); \
00036     for (int _k=0; _k<REPEAT; ++_k) { \
00037         X  \
00038   } timer.stop(); }
00039 
00040 
00041 static double rtime;
00042 static double nentries;
00043 
00044 template<typename SetterType>
00045 void dostuff(const char* name, EigenSparseMatrix& sm1)
00046 {
00047   int rows = sm1.rows();
00048   int cols = sm1.cols();
00049   sm1.setZero();
00050   BenchTimer t;
00051   SetterType* set1 = new SetterType(sm1);
00052   t.reset(); t.start();
00053   for (int k=0; k<nentries; ++k)
00054     (*set1)(internal::random<int>(0,rows-1),internal::random<int>(0,cols-1)) += 1;
00055   t.stop();
00056   std::cout << "std::map =>      \t" << t.value()-rtime
00057             << " nnz=" << set1->nonZeros() << std::flush;
00058 
00059   // getchar();
00060 
00061   t.reset(); t.start(); delete set1; t.stop();
00062   std::cout << "  back: \t" << t.value() << "\n";
00063 }
00064     
00065 int main(int argc, char *argv[])
00066 {
00067   int rows = SIZE;
00068   int cols = SIZE;
00069   float density = DENSITY;
00070 
00071   EigenSparseMatrix sm1(rows,cols), sm2(rows,cols);
00072 
00073 
00074   nentries = rows*cols*density;
00075   std::cout << "n = " << nentries << "\n";
00076   int dummy;
00077   BenchTimer t;
00078 
00079   t.reset(); t.start();
00080   for (int k=0; k<nentries; ++k)
00081     dummy = internal::random<int>(0,rows-1) + internal::random<int>(0,cols-1);
00082   t.stop();
00083   rtime = t.value();
00084   std::cout << "rtime = " << rtime << " (" << dummy << ")\n\n";
00085   const int Bits = 6;
00086   for (;;)
00087   {
00088     dostuff<RandomSetter<EigenSparseMatrix,StdMapTraits,Bits> >("std::map     ", sm1);
00089     dostuff<RandomSetter<EigenSparseMatrix,GnuHashMapTraits,Bits> >("gnu::hash_map", sm1);
00090     dostuff<RandomSetter<EigenSparseMatrix,GoogleDenseHashMapTraits,Bits> >("google::dense", sm1);
00091     dostuff<RandomSetter<EigenSparseMatrix,GoogleSparseHashMapTraits,Bits> >("google::sparse", sm1);
00092 
00093 //     {
00094 //       RandomSetter<EigenSparseMatrix,GnuHashMapTraits,Bits> set1(sm1);
00095 //       t.reset(); t.start();
00096 //       for (int k=0; k<n; ++k)
00097 //         set1(internal::random<int>(0,rows-1),internal::random<int>(0,cols-1)) += 1;
00098 //       t.stop();
00099 //       std::cout << "gnu::hash_map => \t" << t.value()-rtime
00100 //                 << " nnz=" << set1.nonZeros() << "\n";getchar();
00101 //     }
00102 //     {
00103 //       RandomSetter<EigenSparseMatrix,GoogleDenseHashMapTraits,Bits> set1(sm1);
00104 //       t.reset(); t.start();
00105 //       for (int k=0; k<n; ++k)
00106 //         set1(internal::random<int>(0,rows-1),internal::random<int>(0,cols-1)) += 1;
00107 //       t.stop();
00108 //       std::cout << "google::dense => \t" << t.value()-rtime
00109 //                 << " nnz=" << set1.nonZeros() << "\n";getchar();
00110 //     }
00111 //     {
00112 //       RandomSetter<EigenSparseMatrix,GoogleSparseHashMapTraits,Bits> set1(sm1);
00113 //       t.reset(); t.start();
00114 //       for (int k=0; k<n; ++k)
00115 //         set1(internal::random<int>(0,rows-1),internal::random<int>(0,cols-1)) += 1;
00116 //       t.stop();
00117 //       std::cout << "google::sparse => \t" << t.value()-rtime
00118 //                 << " nnz=" << set1.nonZeros() << "\n";getchar();
00119 //     }
00120     std::cout << "\n\n";
00121   }
00122 
00123   return 0;
00124 }
00125 


libicr
Author(s): Robert Krug
autogenerated on Mon Jan 6 2014 11:33:32