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