gemm_common.h File Reference
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include "eigen_src/Eigen/Core"
#include "../BenchTimer.h"

Go to the source code of this file.

Typedefs

typedef SCALAR Scalar
 
typedef Matrix< Scalar, Dynamic, Dynamic > Mat
 

Functions

template<typename Func >
EIGEN_DONT_INLINE double bench (long m, long n, long k, const Func &f)
 
template<typename Func >
int main_gemm (int argc, char **argv, const Func &f)
 

Typedef Documentation

◆ Mat

typedef Matrix<Scalar, Dynamic, Dynamic> Mat

◆ Scalar

typedef SCALAR Scalar

Function Documentation

◆ bench()

template<typename Func >
EIGEN_DONT_INLINE double bench ( long  m,
long  n,
long  k,
const Func &  f 
)
18  {
19  Mat A(m, k);
20  Mat B(k, n);
21  Mat C(m, n);
22  A.setRandom();
23  B.setRandom();
24  C.setZero();
25 
26  BenchTimer t;
27 
28  double up = 1e8 * 4 / sizeof(Scalar);
29  double tm0 = 4, tm1 = 10;
31  up /= 4;
32  tm0 = 2;
33  tm1 = 4;
34  }
35 
36  double flops = 2. * m * n * k;
37  long rep = std::max(1., std::min(100., up / flops));
38  long tries = std::max(tm0, std::min(tm1, up / flops));
39 
40  BENCH(t, tries, rep, f(A, B, C));
41 
42  return 1e-9 * rep * flops / t.best();
43 }
#define BENCH(TIMER, TRIES, REP, CODE)
Definition: BenchTimer.h:150
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Matrix< SCALARA, Dynamic, Dynamic, opt_A > A
Definition: bench_gemm.cpp:47
Matrix< Scalar, Dynamic, Dynamic > C
Definition: bench_gemm.cpp:49
Matrix< SCALARB, Dynamic, Dynamic, opt_B > B
Definition: bench_gemm.cpp:48
Definition: BenchTimer.h:55
Derived & setRandom(Index size)
Definition: Random.h:147
Definition: matrices.h:74
static int f(const TensorMap< Tensor< int, 3 > > &tensor)
Definition: cxx11_tensor_map.cpp:237
#define min(a, b)
Definition: datatypes.h:22
#define max(a, b)
Definition: datatypes.h:23
SCALAR Scalar
Definition: gemm_common.h:13
int * m
Definition: level2_cplx_impl.h:294
char char char int int * k
Definition: level2_impl.h:374
t
Definition: plotPSD.py:36
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217

References BENCH, e(), f(), k, m, max, min, n, Eigen::PlainObjectBase< Derived >::setRandom(), and plotPSD::t.

Referenced by main_gemm().

◆ main_gemm()

template<typename Func >
int main_gemm ( int  argc,
char **  argv,
const Func &  f 
)
46  {
47  std::vector<double> results;
48 
49  std::string filename = std::string("gemm_settings.txt");
50  if (argc > 1) filename = std::string(argv[1]);
51  std::ifstream settings(filename);
52  long m, n, k;
53  while (settings >> m >> n >> k) {
54  // std::cerr << " Testing " << m << " " << n << " " << k << std::endl;
55  results.push_back(bench(m, n, k, f));
56  }
57 
58  std::cout << RowVectorXd::Map(results.data(), results.size());
59 
60  return 0;
61 }
std::map< std::string, Array< float, 1, 8, DontAlign|RowMajor > > results
Definition: dense_solvers.cpp:10
EIGEN_DONT_INLINE double bench(long m, long n, long k, const Func &f)
Definition: gemm_common.h:18
string filename
Definition: MergeRestartFiles.py:39
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286

References bench(), f(), MergeRestartFiles::filename, k, m, n, results, and oomph::Global_string_for_annotation::string().

Referenced by main().