2016-10-14 35 views
1

我是一個新的Julia用戶,我需要儘快找到大矩陣的特徵向量*。我遇到了麻煩朱莉婭爲下面的例子一樣快,Matlab的運行: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ķ分配:76.445 MB,0.11% GC時間)

Matlab的

J = 1000;

A = randn(j,j); 

tic 

[v, d] = eig(A); 

toc 

經過時間爲1.161133秒。

我也檢查了Matlab與1個線程進行比較,使用maxNumCompThreads = 1,但它仍然給與以前相似的時間(1.16s)。我也試圖通過運行兩次預加速來加速Julia,並且還設置了blas_set_num_threads(4),但這沒有幫助。

我真的很感激任何關於如何改善我的朱莉婭代碼的建議!

*(我用Matlab的2015B和OSX埃爾卡皮坦10.11.6朱莉婭0.4.7)

+1

可能的重複[特徵分解在Julia比Mathematica慢5倍](http://stackoverflow.com/questions/21641621/eigendecompositions-are-5-times-slower-in-julia-than-in-數學) –

+1

是的。請看另一個問題。對於這個問題,MKL似乎比OpenBLAS更快。 –

回答

4

Kind of a duplicate of this discussion

通常在談論朱莉婭的表現時,你在談論語言是如何運作的。在這種情況下,Julia和MATLAB都只是調用經過優化的C/Fortran庫來進行特徵值計算。這依賴於BLAS配置。 MATLAB帶有一個MKL版本,所以它也只是使用了一個不同的庫,在許多情況下,它比OpenBLAS更快,但是您可以使用Julia Github回購軟件的README中的說明,使用MKL構建Julia。也許重建你sysimg可以幫助:

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

如果您使用的是預編譯的二進制那麼它不爲你的系統進行了優化,這將使優化。