123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #include <iostream>
- #include <Eigen/Core>
- #include <bench/BenchUtil.h>
- using namespace Eigen;
- #ifndef REPEAT
- #define REPEAT 100000
- #endif
- #ifndef TRIES
- #define TRIES 20
- #endif
- typedef double Scalar;
- template <typename MatrixType>
- __attribute__ ((noinline)) void bench_reverse(const MatrixType& m)
- {
- int rows = m.rows();
- int cols = m.cols();
- int size = m.size();
- int repeats = (REPEAT*1000)/size;
- MatrixType a = MatrixType::Random(rows,cols);
- MatrixType b = MatrixType::Random(rows,cols);
- BenchTimer timerB, timerH, timerV;
- Scalar acc = 0;
- int r = internal::random<int>(0,rows-1);
- int c = internal::random<int>(0,cols-1);
- for (int t=0; t<TRIES; ++t)
- {
- timerB.start();
- for (int k=0; k<repeats; ++k)
- {
- asm("#begin foo");
- b = a.reverse();
- asm("#end foo");
- acc += b.coeff(r,c);
- }
- timerB.stop();
- }
- if (MatrixType::RowsAtCompileTime==Dynamic)
- std::cout << "dyn ";
- else
- std::cout << "fixed ";
- std::cout << rows << " x " << cols << " \t"
- << (timerB.value() * REPEAT) / repeats << "s "
- << "(" << 1e-6 * size*repeats/timerB.value() << " MFLOPS)\t";
- std::cout << "\n";
- // make sure the compiler does not optimize too much
- if (acc==123)
- std::cout << acc;
- }
- int main(int argc, char* argv[])
- {
- const int dynsizes[] = {4,6,8,16,24,32,49,64,128,256,512,900,0};
- std::cout << "size no sqrt standard";
- // #ifdef BENCH_GSL
- // std::cout << " GSL (standard + double + ATLAS) ";
- // #endif
- std::cout << "\n";
- for (uint i=0; dynsizes[i]>0; ++i)
- {
- bench_reverse(Matrix<Scalar,Dynamic,Dynamic>(dynsizes[i],dynsizes[i]));
- bench_reverse(Matrix<Scalar,Dynamic,1>(dynsizes[i]*dynsizes[i]));
- }
- // bench_reverse(Matrix<Scalar,2,2>());
- // bench_reverse(Matrix<Scalar,3,3>());
- // bench_reverse(Matrix<Scalar,4,4>());
- // bench_reverse(Matrix<Scalar,5,5>());
- // bench_reverse(Matrix<Scalar,6,6>());
- // bench_reverse(Matrix<Scalar,7,7>());
- // bench_reverse(Matrix<Scalar,8,8>());
- // bench_reverse(Matrix<Scalar,12,12>());
- // bench_reverse(Matrix<Scalar,16,16>());
- return 0;
- }
|