2016-10-14 8 views
1

私は新しいJuliaユーザーであり、できるだけ早く大きな行列の固有ベクトルを見つける必要があります。私はジュリアは、次の例のために早くMatlabのように実行するのに問題を抱えている:時間Julia vs. 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メガバイト、0.11%をGC時間)

Matlabの

J = 1000;

A = randn(j,j); 

tic 

[v, d] = eig(A); 

toc 

経過時間が1.161133秒です。

私はmaxNumCompThreads = 1を使用して比較する1つのスレッドでMatlabもチェックしましたが、これまでと同様の時間(1.16秒)を与えています。私はまた、プリコンパイルするために2回実行することによってJuliaをスピードアップしようとしました。また、blas_set_num_threads(4)も設定しましたが、これは役に立ちません。

私のジュリアコードを改善する方法についてのアドバイスは本当にありがたいです!

*(私はOSXエルキャピタン10.11.6にMatlabの2015bとジュリア0.4.7を使用しています)

+1

[Eigendecompositionの数は、Juliaの方がMathematicaより5倍遅いですか?](http://stackoverflow.com/questions/21641621/eigendecompositions-are-5-times-slower-in-julia-than-in- mathematica) –

+1

はい。他の質問をご覧ください。この問題は、MKLがOpenBLASよりも速いようです。 –

答えて

4

Kind of a duplicate of this discussion

通常、ジュリアのパフォーマンスについて話すとき、あなたは言語が実際にどのように機能するかについて話しています。この場合、JuliaとMATLABの両方が、固有値計算を行うための最適化されたC/Fortranライブラリを呼び出すだけです。これは、BLAS構成に依存しています。 MATLABにはMKLのバージョンが付属しているので、多くの場合OpenBLASよりも速い別のライブラリを使用していますが、Julia GithubレポのREADMEの説明に従ってMKLを使用してJuliaを構築できます。あなたはそれがあなたのシステム用に最適化されていない事前に構築されたバイナリを使用している場合

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

を、そしてこれは、最適化を可能にします:たぶん、あなたsysimgを助けることができる再構築。

関連する問題