我是新的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)
答案 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)
如果您使用的是预先构建的二进制文件,那么它不会针对您的系统进行优化,这将启用优化。