Ich bin neu bei Julia und arbeite hauptsächlich in Mathematica, also habe ich wahrscheinlich einige elementare Fehler im Umlauf. Ich versuchte herauszufinden, wie lange Julia brauchte, um das Eigensystem einer zufälligen Matrix zu berechnen, und fand es 5-6 mal langsamer als in Mathematica.Eigenkompositionen sind in Julia fünfmal langsamer als in Mathematica?
In Julia:
D=1000*(rand(1000,1000)-0.5);
@time (E,F)=eig(D);
Out: elapsed time: 7.47950706 seconds (79638920 bytes allocated*)
In Mathematica:
[email protected]@Eigensystem[RandomReal[{-500, 500}, {1000, 1000}]]
Out: 1.310408
Für 2000 x 2000 Arrays es ähnlich ist, obwohl die Julia Ergebnis etwas weniger verlangsamt als das Äquivalent Mathematica Ruf, aber es ist immer noch langsamer ; Julia braucht 22 Sekunden, während Mathematica es in 8 Sekunden berechnet.
Soweit ich in der Julia standard library for linear algebra gelesen habe, werden Dekompositionen durch den Aufruf von LAPACK, die ich dachte, dass es sehr gut sein sollte, implementiert, so dass ich verwirrt bin, warum der Julia-Code so viel langsamer läuft. Weiß jemand, warum das so ist? Führt es eine Art Symmetrie- oder Array-Symmetrie-Erkennung durch, die Mathematica nicht tut? Oder ist es eigentlich langsamer?
Auch dies ist eine Syntaxfrage und wahrscheinlich ein dummer Fehler, aber wie ändert man den Ausgleich in Julia? Ich habe versucht,
@time (E,F)=eig(D[, balance=:nobalance]);
genau wie kopiert und aus der Julia manuell eingefügt, aber es gab nur einen Syntaxfehler, so etwas nicht stimmt.
Ich benutze Windows 7 64-Bit, mit Julia Version 0.2.0 64-Bit, installiert mit der instructions at Steven Johnson's site, mit Anaconda installiert zuerst, um die Voraussetzungen zu kümmern. Ich benutze Mathematica Student Edition Version 9.0.1.
EDIT 1:
Executing versioninfo()
ergab
Julia Version 0.2.0
Commit 05c6461 (2013-11-16 23:44 UTC)
Platform Info:
System: Windows (x86_64-w64-mingw32)
WORD_SIZE: 64
BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY)
LAPACK: libopenblas
LIBM: libopenlibm
So sieht es aus wie ich die openBLAS für LAPACK und BLAS bin mit. Sobald ich die Mathematica-Implementierungsinformation bekomme, werde ich das auch hinzufügen.
EDIT 2:
Es scheint, dass Windows Mathematica probably uses Intel MKL BLAS.
Wissen Sie, welche [BLAS] (http://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms#Implementations) Implementierung Ihre Julia verwendet? Es kann große Leistungsunterschiede geben, wenn es nicht auf Ihre Architektur abgestimmt ist. – rhashimoto
Ein weiterer Beweis dafür, dass die Benchmarks auf der Julia-Website nicht fair sind. Ich habe ähnliches Performance-Problem [hier] (http://stackoverflow.com/questions/19208014/is-the-julia-language-really-as-fast-as-it-claims) erlebt. – juliohm
@julohm, die Ergebnisse sind real und drücken echte Leistungsunterschiede zwischen den Sprachen aus. Aber die Benchmarks testen nicht alles, und selbst in einer schnellen Sprache kann es immer Fehler oder nicht optimale Algorithmen geben. Anstatt das nächste Mal abfällig zu sein, versuchen Sie, ein Problem zu stellen; Sie können überrascht sein, was möglich ist. – tholy