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
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
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120 std::cout << "\n\n";
00121 }
00122
00123 return 0;
00124 }
00125