4 ms·
Comparing OpenBLAS and MKL with `peakflops` in Julia, there's definitely an advantage for MKL: julia> using LinearAlgebra julia> BLAS.vendor() :op
by stillyslalom 6y ago
Comparing OpenBLAS and MKL with `peakflops` in Julia, there's definitely an advantage for MKL:
julia> using LinearAlgebra
julia> BLAS.vendor()
:openblas64
julia> BLAS.set_num_threads(1)
julia> peakflops()
3.9023447970402664e10
julia> using LinearAlgebra
julia> BLAS.vendor()
:mkl
julia> BLAS.set_num_threads(1)
julia> peakflops()
4.8113846984735275e10
That's close to the ~50 Gflops I saw in @celrod's benchmarks.
- danieldk 6y agoThe plot thickens. As I reported elsewhere in the thread, the slow code paths were selected on my machine, unless I override the mkl_serv_intel_cpu_true function to always return true. However, this was with PyTorch. I have now also compiled the ACE DGEMM benchmark and linked against MKL iomp: $ ./mt-dgemm 1000 | grep GFLOP GFLOP/s rate: 69.124168 GF/s Most-used function is mt-dgemm libmkl_def.so [.] mkl_blas_def_dgemm_kernel_zen So, it is clearly using a GEMM kernel. Now I wonder what is different between PyTorch and this simple benchmark, causing PyTorch to result in a slow SSE code path.
- danieldk 6y agoFound the discrepancy. I use single precision in PyTorch. When I benchmark sgemm, the SSE code path is selected. Conclusion: MKL detects Zen now, but currently only implements a Zen code path for dgemm and not for sgemm. To get good performance for sgemm, you have to fake being an Intel CPU. Edit, longer description: https://github.com/pytorch/builder/issues/504 https://github.com/pytorch/builder/issues/504