Home | History | Annotate | Download | only in bench
      1 
      2 //g++ -O3 -g0 -DNDEBUG  sparse_transpose.cpp -I.. -I/home/gael/Coding/LinearAlgebra/mtl4/ -DDENSITY=0.005 -DSIZE=10000 && ./a.out
      3 // -DNOGMM -DNOMTL
      4 // -DCSPARSE -I /home/gael/Coding/LinearAlgebra/CSparse/Include/ /home/gael/Coding/LinearAlgebra/CSparse/Lib/libcsparse.a
      5 
      6 #ifndef SIZE
      7 #define SIZE 10000
      8 #endif
      9 
     10 #ifndef DENSITY
     11 #define DENSITY 0.01
     12 #endif
     13 
     14 #ifndef REPEAT
     15 #define REPEAT 1
     16 #endif
     17 
     18 #include "BenchSparseUtil.h"
     19 
     20 #ifndef MINDENSITY
     21 #define MINDENSITY 0.0004
     22 #endif
     23 
     24 #ifndef NBTRIES
     25 #define NBTRIES 10
     26 #endif
     27 
     28 #define BENCH(X) \
     29   timer.reset(); \
     30   for (int _j=0; _j<NBTRIES; ++_j) { \
     31     timer.start(); \
     32     for (int _k=0; _k<REPEAT; ++_k) { \
     33         X  \
     34   } timer.stop(); }
     35 
     36 int main(int argc, char *argv[])
     37 {
     38   int rows = SIZE;
     39   int cols = SIZE;
     40   float density = DENSITY;
     41 
     42   EigenSparseMatrix sm1(rows,cols), sm3(rows,cols);
     43 
     44   BenchTimer timer;
     45   for (float density = DENSITY; density>=MINDENSITY; density*=0.5)
     46   {
     47     fillMatrix(density, rows, cols, sm1);
     48 
     49     // dense matrices
     50     #ifdef DENSEMATRIX
     51     {
     52       DenseMatrix m1(rows,cols), m3(rows,cols);
     53       eiToDense(sm1, m1);
     54       BENCH(for (int k=0; k<REPEAT; ++k) m3 = m1.transpose();)
     55       std::cout << "  Eigen dense:\t" << timer.value() << endl;
     56     }
     57     #endif
     58 
     59     std::cout << "Non zeros: " << sm1.nonZeros()/float(sm1.rows()*sm1.cols())*100 << "%\n";
     60 
     61     // eigen sparse matrices
     62     {
     63       BENCH(for (int k=0; k<REPEAT; ++k) sm3 = sm1.transpose();)
     64       std::cout << "  Eigen:\t" << timer.value() << endl;
     65     }
     66 
     67     // CSparse
     68     #ifdef CSPARSE
     69     {
     70       cs *m1, *m3;
     71       eiToCSparse(sm1, m1);
     72 
     73       BENCH(for (int k=0; k<REPEAT; ++k) { m3 = cs_transpose(m1,1); cs_spfree(m3);})
     74       std::cout << "  CSparse:\t" << timer.value() << endl;
     75     }
     76     #endif
     77 
     78     // GMM++
     79     #ifndef NOGMM
     80     {
     81       GmmDynSparse  gmmT3(rows,cols);
     82       GmmSparse m1(rows,cols), m3(rows,cols);
     83       eiToGmm(sm1, m1);
     84       BENCH(for (int k=0; k<REPEAT; ++k) gmm::copy(gmm::transposed(m1),m3);)
     85       std::cout << "  GMM:\t\t" << timer.value() << endl;
     86     }
     87     #endif
     88 
     89     // MTL4
     90     #ifndef NOMTL
     91     {
     92       MtlSparse m1(rows,cols), m3(rows,cols);
     93       eiToMtl(sm1, m1);
     94       BENCH(for (int k=0; k<REPEAT; ++k) m3 = trans(m1);)
     95       std::cout << "  MTL4:\t\t" << timer.value() << endl;
     96     }
     97     #endif
     98 
     99     std::cout << "\n\n";
    100   }
    101 
    102   return 0;
    103 }
    104 
    105