Julia (Julia lang) Leistung im Vergleich zu Fortran und Python

Angepasst ich ein einfaches Programm zum berechnen und zeichnen Sie die Bewegung der Wirbel, der um Julia zu testen, die Sprache, ich schrieb auch es in Python keinen bestimmten Grund.

(Disclaimer: 1. Alle performance-Vergleich auf stackoverflow habe ich zu Lesen bekommt schlug für eine nicht umfassende/richtig/gut geschrieben/relevanten etc. etc. - Ich behaupte nicht, dies ist ein wirklicher Vergleich, ich würde nur gerne wissen, wie die Julia schneller. 2. Ich kenne die python optimiert werden konnten, umgesetzt in Cython etc, das ist nicht Teil dieser Diskussion, es ist nur hier, um einen Verweis auf gleichwertige Funktionen in Julia und Python.)

Den code und performance-Ergebnisse gesehen worden in einem gist.

Die Leistung von Julia ist deutlich langsamer als Fortran. Die Zeiten, die zum ausführen der Berechnung selbst sind (50000 Zeitschritte):

Fortran: 0.051s
Julia: 2.256s
Python: 30.846s

Julia ist viel langsamer (~44-mal langsam), als mit Fortran, die Lücke verengt sich, ist aber immer noch signifikant mit 10x mehr Zeit Schritte( 0.50s vs 15.24s ).

Diese Ergebnisse unterscheiden sich deutlich von denen in den Abbildungen auf die julia-Startseite. Was mache ich falsch? Konnte ich beheben, die Julia zu sein, die deutlich schneller sind?

Ich habe skim Lesen Sie die Julia-Performance-Tipps Seite und den code, der hinter dem Vergleich, auf der Julia home page und nichts steht mir zu beheben.

Interessanterweise auch Julia wird extrem langsam geladen, PyPlot ( 5secs ish!!) und viel langsamer als Python zu Lesen, der text-Datei. Konnte ich irgendetwas tun, um zu verbessern, diese Dinge?

Beachten Sie, dass die Zeiten oben nicht zeigen Ladezeit für Julia und Python, es ist nur der raw-Zeit für die Berechnung, soweit ich weiß - siehe code. Für fortran, die ganze Sache. Das Plotten ausgeschaltet wurde, grob gesagt, in jedem Fall zu ermöglichen, Geschwindigkeits-Vergleich.

Computer: Intel i7-3770, 16GB ram, SSD, HD, OS: Ubuntu 13.10 64bit., Fortran: gfortran, GNU Fortran (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1, Julia: Version 0.3.0-prerelease+396 (2013-12-12 00:18 UTC), Commit c5364db* (0 Tage alt, master), x86_64-linux-gnu, Python: 2.7.5+


Update:

Basierend auf ivarne Rat ich schrieb die Julia script (aktualisiert im Kern oben): Strukturierung Routinearbeit in Funktionen deklarieren der Typ der alles und spaltet die verschiedenen Elemente der Matrizen in verschiedene arrays, wo anwendbar. (Ich inbegriffen Float64 in ganz wenigen Orten, wie ich habe versucht, Float32, um zu sehen, ob das geholfen, es hat nicht die meisten der Zeit).

Die Ergebnisse sind wie folgt:

50,000 mal vor:

Fortran: 0.051s (entire programme)
Julia: raw calc.: 0.201s, calc. and return (?): 0.758s, total exec.: 6.947s

500,000 mal vor:

Fortran: 0.495s (entire programme)
Julia: raw calc.: 1.547s, calc. and return (?): 2.094s, total exec.: 8.521s

Fazit:

  • Können Sie die Geschwindigkeit Julia ein wenig Recht.

  • Können Sie erhebliche Auswirkungen auf die anscheinend Geschwindigkeit von Julia je nachdem, wie Sie Messen Leistung.

  • Sie erwähnte mit BLAS in den benchmarks. Und matmul Leistung ist fast identisch in Fortran, C, Julia und MATLAB, auch gibt es Weg. Es könnte nicht fairer Vergleich zwischen den Sprachen, wenn ein guter Teil der Prüfung ausgegeben wird, in einige vorkompilierte Bibliothek. Vielleicht sollten Sie versuchen, ersetzen den Teil des Codes mit BLAS Anrufe, wenn möglich und der Vergleich nochmal?
  • Es gibt keine Notwendigkeit zu erklären, Typen, Funktionen in Julia, es sei denn, Sie wollen, um es für die multiple dispatch. Liste Verstehens in der Regel erhalten Sie die richtige Art ohne Mühe auch. Wenn Sie einen Typ/eine, unveränderliche Strukturen, müssen Sie erklären, Arten zu erhalten, die anständige Leistung.
  • Ein +1 für gerade den Haftungsausschluss.
InformationsquelleAutor SColvin | 2013-12-16
Schreibe einen Kommentar