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

时间:2016-10-14 03:29:20

标签: matlab julia benchmarking eigenvector

我是新的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)

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

Matlab

j = 1000;

A = randn(j,j);

tic

[v, d] = eig(A);

toc

经过的时间 1.161133 秒。

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

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

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

1 个答案:

答案 0 :(得分:5)

Kind of a duplicate of this discussion

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

include(joinpath(dirname(JULIA_HOME),"share","julia","build_sysimg.jl")); build_sysimg(force=true)

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