diff options
Diffstat (limited to 'bench/perf_monitoring/gemm/gemm.cpp')
-rw-r--r-- | bench/perf_monitoring/gemm/gemm.cpp | 62 |
1 files changed, 2 insertions, 60 deletions
diff --git a/bench/perf_monitoring/gemm/gemm.cpp b/bench/perf_monitoring/gemm/gemm.cpp index 3ef37d21b..804139db7 100644 --- a/bench/perf_monitoring/gemm/gemm.cpp +++ b/bench/perf_monitoring/gemm/gemm.cpp @@ -1,17 +1,4 @@ -#include <iostream> -#include <fstream> -#include <vector> -#include <Eigen/Core> -#include "../../BenchTimer.h" -using namespace Eigen; - -#ifndef SCALAR -#error SCALAR must be defined -#endif - -typedef SCALAR Scalar; - -typedef Matrix<Scalar,Dynamic,Dynamic> Mat; +#include "gemm_common.h" EIGEN_DONT_INLINE void gemm(const Mat &A, const Mat &B, Mat &C) @@ -19,52 +6,7 @@ void gemm(const Mat &A, const Mat &B, Mat &C) C.noalias() += A * B; } -EIGEN_DONT_INLINE -double bench(long m, long n, long k) -{ - Mat A(m,k); - Mat B(k,n); - Mat C(m,n); - A.setRandom(); - B.setRandom(); - C.setZero(); - - BenchTimer t; - - double up = 1e8*4/sizeof(Scalar); - double tm0 = 4, tm1 = 10; - if(NumTraits<Scalar>::IsComplex) - { - up /= 4; - tm0 = 2; - tm1 = 4; - } - - double flops = 2. * m * n * k; - long rep = std::max(1., std::min(100., up/flops) ); - long tries = std::max(tm0, std::min(tm1, up/flops) ); - - BENCH(t, tries, rep, gemm(A,B,C)); - - return 1e-9 * rep * flops / t.best(); -} - int main(int argc, char **argv) { - std::vector<double> results; - - std::string filename = std::string("gemm_settings.txt"); - if(argc>1) - filename = std::string(argv[1]); - std::ifstream settings(filename); - long m, n, k; - while(settings >> m >> n >> k) - { - //std::cerr << " Testing " << m << " " << n << " " << k << std::endl; - results.push_back( bench(m, n, k) ); - } - - std::cout << RowVectorXd::Map(results.data(), results.size()); - - return 0; + return main_gemm(argc, argv, gemm); } |