// g++ -O3 -DNDEBUG -I.. -fopenmp benchOpenMP.cpp -o benchOpenMP && ./benchOpenMP 2> /dev/null // icpc -fast -fno-exceptions -DNDEBUG -I.. -openmp benchOpenMP.cpp -o benchOpenMP && ./benchOpenMP 2> /dev/null #include #include "BenchUtil.h" #include "basicbenchmark.h" // #include // #include "BenchTimer.h" // // using namespace std; // USING_PART_OF_NAMESPACE_EIGEN // // enum {LazyEval, EarlyEval, OmpEval}; // // template // double benchSingleProc(const MatrixType& mat, int iterations, int tries) __attribute__((noinline)); // // template // double benchBasic(const MatrixType& mat, int iterations, int tries) // { // const int rows = mat.rows(); // const int cols = mat.cols(); // // Eigen::BenchTimer timer; // for(uint t=0; t(Matrix4d(), 10000, 10) << "s " << benchBasic(Matrix4d(), 10000, 10) << "s \n"; #define BENCH_MATRIX(TYPE, SIZE, ITERATIONS, TRIES) {\ double single = benchBasic(Matrix(SIZE,SIZE), ITERATIONS, TRIES); \ double omp = benchBasic (Matrix(SIZE,SIZE), ITERATIONS, TRIES); \ std::cout << #TYPE << ", " << #SIZE << "x" << #SIZE << ": " << single << "s " << omp << "s " \ << " => x" << single/omp << " (" << omp_get_num_procs() << ")" << std::endl; \ } BENCH_MATRIX(double, 32, 1000, 10); BENCH_MATRIX(double, 128, 10, 10); BENCH_MATRIX(double, 512, 1, 6); BENCH_MATRIX(double, 1024, 1, 4); return 0; }