This repository is a place for accurate benchmarks between Julia and MATLAB and comparing the two.
Various commonly used operations for Matrix operations, Mathematical calculations, Data Processing, Image processing, Signal processing, and different algorithms are tested.
This repository will be extended as more functions are added to the JuliaMatlab repository, which is meant to map all the Matlab functions to Julia native functions.
- Latest Julia language is used (compatible with 1.0.4 and higher).
- Julia + Intel MKL is also tested. (https://github.com/JuliaComputing/MKL.jl)
- Different number of BLAS threads are tested (
BLAS.set_num_threads(n)
) - For some of the functions, Julia's SIMD is tested instead of built-in functions.
- Accurate benchmarking tools are used both in Julia and MATLAB to get an reliable result
Addition of 2 square matrices where each is multiplied by a scalar.
- MATLAB Code -
mA = (scalarA .* mX) + (scalarB .* mY)
. - Julia Code -
mA = (scalarA .* mX) .+ (scalarB .* mY)
(Using the dot for Loop Fusion).
Multiplication of 2 square matrices after a scalar is added to each.
- MATLAB Code -
mA = (scalarA + mX) * (scalarB + mY)
. - Julia Code -
mA = (scalarA .+ mX) * (scalarB .+ mY)
(Using the dot for Loop Fusion).
Set of operations which are element wise.
- MATLAB Code -
mD = abs(mA) + sin(mB);
,mE = exp(-(mA .^ 2));
andmF = (-mB + sqrt((mB .^ 2) - (4 .* mA .* mC))) ./ (2 .* mA);
. - Julia Code -
mD = abs.(mA) .+ sin.(mB);
,mE = exp.(-(mA .^ 2));
andmF = (-mB .+ sqrt.((mB .^ 2) .- (4 .* mA .* mC))) ./ (2 .* mA);
(Using the dot for Loop Fusion).
Download repository. Or add the package in Julia:
] add https://github.com/juliamatlab/Julia-Matlab-Benchmark
-
From console:
include("JuliaMain.jl");
-
From MATLAB command line :
MatlabMain
- From MATLAB command line
MatlabAnalysisMain
.
- Images of the performance test will be created and displayed.
- From Julia command line
include("JuliaAnalysisMain.jl");
.
- Images of the performance test will be created and displayed.
-
This repository will be extended as more functions are added to the MatLang repository, which is meant to map all the Matlab functions to Julia native functions
-
Check if Julia code is efficient. using https://github.com/JunoLab/Traceur.jl and https://docs.julialang.org/en/v1/manual/performance-tips/index.html
-
Add Python (NumPy): Code has been converted from MATLAB to python using smop. Still needs working https://github.com/aminya/smop
-
Add Octave.
coming soon
-
System Model - Dell Latitude 5590 https://www.dell.com/en-ca/work/shop/dell-tablets/latitude-5590/spd/latitude-15-5590-laptop
-
CPU - Intel(R) Core(TM) i5-8250U @ 1.6 [GHz] 1800 Mhz, 4 Cores, 8 Logical Processors.
-
Memory - 1x8GB DDR4 2400MHz Non-ECC
-
Windows 10 Professional 64 Bit
-
WORD_SIZE: 64
-
MATLAB R2018b.
- BLAS Version (
version -blas
) -Intel(R) Math Kernel Library Version 2018.0.1 Product Build 20171007 for Intel(R) 64 architecture applications, CNR branch AVX2
- LAPACK Version (
version -lapack
) -Intel(R) Math Kernel Library Version 2018.0.1 Product Build 20171007 for Intel(R) 64 architecture applications CNR branch AVX2 Linear Algebra Package Version 3.7.0
- BLAS Version (
Two version of Julia was used:
-
JuliaMKL: Julia 1.4.0 + MKL.
- Julia Version (
versioninfo()
) -Julia VersionVersion 1.4.0-DEV.233 Commit 32e3c9ea36 (2019-10-02 12:28 UTC)
; - BLAS Version -
LinearAlgebra.BLAS.vendor(): Intel MKL
. For tutorial to install https://github.com/JuliaComputing/MKL.jl - LAPACK Version -
libopenblas64_
. - LIBM Version -
libopenlibm
. - LLVM Version -
libLLVM-6.0.1 (ORCJIT, skylake)
. - JULIA_NUM_THREADS = 1. This number of threads is different from BLAS threads. BLAS threads is changed in the code by
BLAS.set_num_threads(1)
andBLAS.set_num_threads(4)
- Julia Version (
-
Julia: Julia 1.4.0
- Julia Version (
versioninfo()
) -Julia VersionVersion 1.4.0-DEV.233 Commit 32e3c9ea36 (2019-10-02 12:28 UTC)
; - BLAS Version -
LinearAlgebra.BLAS.vendor(): openBlas64
. - LAPACK Version -
libopenblas64_
. - LIBM Version -
libopenlibm
. - LLVM Version -
libLLVM-6.0.1 (ORCJIT, skylake)
. - JULIA_NUM_THREADS = 1. This number of threads is different from BLAS threads. BLAS threads is changed in the code by
BLAS.set_num_threads(1)
andBLAS.set_num_threads(4)
- Julia Version (
The idea for this repository is taken from https://github.com/aminya/MatlabJuliaMatrixOperationsBenchmark which was a fork from https://github.com/RoyiAvital/MatlabJuliaMatrixOperationsBenchmark