Julia与Matlab对特征向量计算进行基准测试

1 benchmarking matlab eigenvector julia

我是一个新的Julia用户,我需要尽快找到大矩阵的特征向量*.我无法让Julia以与Matlab一样快的速度运行以下示例:

朱莉娅

const j = 1000 ::Int

A = Array{Float64}(j,j)

B = Array{Float64}(j,j)

f(x) = eigvecs(x)

A = randn(j,j)

B = f(A)

@time f(A)
Run Code Online (Sandbox Code Playgroud)

输出时间:2.950973秒(12.31 k分配:76.445 MB,0.11%gc时间)

MATLAB

j = 1000;

A = randn(j,j);

tic

[v, d] = eig(A);

toc
Run Code Online (Sandbox Code Playgroud)

经过的时间是1.161133秒.

我还检查了Matlab的1个线程,使用maxNumCompThreads = 1进行比较,但它仍然提供了与之前类似的时间(1.16s).我也尝试通过运行两次预编译加速Julia,并设置blas_set_num_threads(4)但这没有帮助.

我真的很感激有关如何改进我的Julia代码的任何建议!

*(我在OSX El Capitan 10.11.6上使用Matlab 2015b和Julia 0.4.7)

Chr*_*kas 5

有点像这个讨论的副本.

通常在谈论朱莉娅表演时,你谈论的是语言实际上是如何运作的.在这种情况下,Julia和MATLAB都只是调用经过良好优化的C/Fortran库来进行特征值计算.这依赖于BLAS配置.MATLAB附带了一个MKL版本,所以它也只是使用一个不同的库,在许多情况下比OpenBLAS快,但你可以使用Julia Github repo上README中的指令用MKL构建Julia.也许重建你的sysimg可能会有所帮助:

include(joinpath(dirname(JULIA_HOME),"share","julia","build_sysimg.jl")); build_sysimg(force=true)
Run Code Online (Sandbox Code Playgroud)

如果您使用的是预先构建的二进制文件,那么它不会针对您的系统进行优化,这将启用优化.