==================================== GEMM (General Matrix-Matrix Product) [TOC:2] ==================================== The benchmark tests the GEMM Operation ---- LATEX --------------------------------------------------------------------- C \leftarrow \beta C + \alpha\,A\,B -------------------------------------------------------------------------------- where - $\alpha$ and $\beta$ are scalars, - $C$ is a $m \times n$ matrix, - $A$ is a $m \times k$ matrix and - $B$ is a $k \times n$ matrix. In the benchmarks we used $m = n = k$ and $\alpha = \beta =1$. However, these can easily be modified to more general cases by setting macros in the compile command: - `-DMIN_M=`, `-DMIN_K=`, `-DMIN_N=` defines the minimal dimensions. - `-DMAX_M=`, `-DMAX_K=`, `-DMAX_N=` defines the maximal dimensions. - `-DINC_M=`, `-DINC_K=`, `-DINC_N=` defines the increment of dimensions in the benchmark. - `-DALPHA=`, `-DBETA=` defines the scalar values being used. Also the element types for $A$, $B$, $C$ and the scalars $\alpha$ and $\beta$ can be set through - `-DTYPE_A=`, `-DTYPE_B=`, `-DTYPE_C=`, `-DTYPE_ALPHA=`, `-DTYPE_BETA=` In this benchmarks we only test homogeneous types, e.g. `type` is `double`. Single Precision ================ ---- IMAGE ----------------- BLAS3/bench.sgemm.mflops.svg ---------------------------- Double Precision ================ ---- IMAGE ----------------- BLAS3/bench.dgemm.mflops.svg ---------------------------- Complex Single Precision ======================== ---- IMAGE ----------------- BLAS3/bench.cgemm.mflops.svg ---------------------------- Complex Double Precision ======================== ---- IMAGE ----------------- BLAS3/bench.zgemm.mflops.svg ---------------------------- Raw Results from Benchmarks =========================== ---- SHELL (path=BLAS3,hostname=heim) ------------------------------------------ make BLAS_FUNCTIONS=gemm clean make BLAS_FUNCTIONS=gemm ./sgemm_MKL > report.sgemm_MKL ./dgemm_MKL > report.dgemm_MKL ./cgemm_MKL > report.cgemm_MKL ./zgemm_MKL > report.zgemm_MKL ./sgemm_Eigen > report.sgemm_Eigen ./dgemm_Eigen > report.dgemm_Eigen ./cgemm_Eigen > report.cgemm_Eigen ./zgemm_Eigen > report.zgemm_Eigen ./sgemm_openBLAS > report.sgemm_openBLAS ./dgemm_openBLAS > report.dgemm_openBLAS ./cgemm_openBLAS > report.cgemm_openBLAS ./zgemm_openBLAS > report.zgemm_openBLAS ./sgemm_BLIS > report.sgemm_BLIS ./dgemm_BLIS > report.dgemm_BLIS ./cgemm_BLIS > report.cgemm_BLIS ./zgemm_BLIS > report.zgemm_BLIS gnuplot plot.sgemm.mflops gnuplot plot.dgemm.mflops gnuplot plot.cgemm.mflops gnuplot plot.zgemm.mflops -------------------------------------------------------------------------------- Single Precision ---------------- ---- SHELL (path=BLAS3,hostname=heim) ------------------------------------------ cat report.sgemm_MKL cat report.sgemm_Eigen cat report.sgemm_openBLAS cat report.sgemm_BLIS -------------------------------------------------------------------------------- Double Precision ---------------- ---- SHELL (path=BLAS3,hostname=heim) ------------------------------------------ cat report.dgemm_MKL cat report.dgemm_Eigen cat report.dgemm_openBLAS cat report.dgemm_BLIS -------------------------------------------------------------------------------- Complex Single Precision ------------------------ ---- SHELL (path=BLAS3,hostname=heim) ------------------------------------------ cat report.cgemm_MKL cat report.cgemm_Eigen cat report.cgemm_openBLAS cat report.cgemm_BLIS -------------------------------------------------------------------------------- Complex Double Precision ------------------------ ---- SHELL (path=BLAS3,hostname=heim) ------------------------------------------ cat report.zgemm_MKL cat report.zgemm_Eigen cat report.zgemm_openBLAS cat report.zgemm_BLIS --------------------------------------------------------------------------------