sparse_randomsetter.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #define NOGMM
  2. #define NOMTL
  3. #define EIGEN_GOOGLEHASH_SUPPORT 1
  4. #include <map>
  5. #include <ext/hash_map>
  6. #include <google/dense_hash_map>
  7. #include <google/sparse_hash_map>
  8. #ifndef SIZE
  9. #define SIZE 10000
  10. #endif
  11. #ifndef DENSITY
  12. #define DENSITY 0.01
  13. #endif
  14. #ifndef REPEAT
  15. #define REPEAT 1
  16. #endif
  17. #include "BenchSparseUtil.h"
  18. #ifndef MINDENSITY
  19. #define MINDENSITY 0.0004
  20. #endif
  21. #ifndef NBTRIES
  22. #define NBTRIES 10
  23. #endif
  24. #define BENCH(X) \
  25. timer.reset(); \
  26. for (int _j=0; _j<NBTRIES; ++_j) { \
  27. timer.start(); \
  28. for (int _k=0; _k<REPEAT; ++_k) { \
  29. X \
  30. } timer.stop(); }
  31. static double rtime;
  32. static double nentries;
  33. template<typename SetterType>
  34. void dostuff(const char* name, EigenSparseMatrix& sm1)
  35. {
  36. int rows = sm1.rows();
  37. int cols = sm1.cols();
  38. sm1.setZero();
  39. BenchTimer t;
  40. SetterType* set1 = new SetterType(sm1);
  41. t.reset(); t.start();
  42. for (int k=0; k<nentries; ++k)
  43. (*set1)(internal::random<int>(0,rows-1),internal::random<int>(0,cols-1)) += 1;
  44. t.stop();
  45. std::cout << "std::map => \t" << t.value()-rtime
  46. << " nnz=" << set1->nonZeros() << std::flush;
  47. // getchar();
  48. t.reset(); t.start(); delete set1; t.stop();
  49. std::cout << " back: \t" << t.value() << "\n";
  50. }
  51. int main(int argc, char *argv[])
  52. {
  53. int rows = SIZE;
  54. int cols = SIZE;
  55. float density = DENSITY;
  56. EigenSparseMatrix sm1(rows,cols), sm2(rows,cols);
  57. nentries = rows*cols*density;
  58. std::cout << "n = " << nentries << "\n";
  59. int dummy;
  60. BenchTimer t;
  61. t.reset(); t.start();
  62. for (int k=0; k<nentries; ++k)
  63. dummy = internal::random<int>(0,rows-1) + internal::random<int>(0,cols-1);
  64. t.stop();
  65. rtime = t.value();
  66. std::cout << "rtime = " << rtime << " (" << dummy << ")\n\n";
  67. const int Bits = 6;
  68. for (;;)
  69. {
  70. dostuff<RandomSetter<EigenSparseMatrix,StdMapTraits,Bits> >("std::map ", sm1);
  71. dostuff<RandomSetter<EigenSparseMatrix,GnuHashMapTraits,Bits> >("gnu::hash_map", sm1);
  72. dostuff<RandomSetter<EigenSparseMatrix,GoogleDenseHashMapTraits,Bits> >("google::dense", sm1);
  73. dostuff<RandomSetter<EigenSparseMatrix,GoogleSparseHashMapTraits,Bits> >("google::sparse", sm1);
  74. // {
  75. // RandomSetter<EigenSparseMatrix,GnuHashMapTraits,Bits> set1(sm1);
  76. // t.reset(); t.start();
  77. // for (int k=0; k<n; ++k)
  78. // set1(internal::random<int>(0,rows-1),internal::random<int>(0,cols-1)) += 1;
  79. // t.stop();
  80. // std::cout << "gnu::hash_map => \t" << t.value()-rtime
  81. // << " nnz=" << set1.nonZeros() << "\n";getchar();
  82. // }
  83. // {
  84. // RandomSetter<EigenSparseMatrix,GoogleDenseHashMapTraits,Bits> set1(sm1);
  85. // t.reset(); t.start();
  86. // for (int k=0; k<n; ++k)
  87. // set1(internal::random<int>(0,rows-1),internal::random<int>(0,cols-1)) += 1;
  88. // t.stop();
  89. // std::cout << "google::dense => \t" << t.value()-rtime
  90. // << " nnz=" << set1.nonZeros() << "\n";getchar();
  91. // }
  92. // {
  93. // RandomSetter<EigenSparseMatrix,GoogleSparseHashMapTraits,Bits> set1(sm1);
  94. // t.reset(); t.start();
  95. // for (int k=0; k<n; ++k)
  96. // set1(internal::random<int>(0,rows-1),internal::random<int>(0,cols-1)) += 1;
  97. // t.stop();
  98. // std::cout << "google::sparse => \t" << t.value()-rtime
  99. // << " nnz=" << set1.nonZeros() << "\n";getchar();
  100. // }
  101. std::cout << "\n\n";
  102. }
  103. return 0;
  104. }