Julia viel langsamer als Java

8

Ich bin neu bei Julia und habe eine einfache Funktion geschrieben, die RMSE (root mean square error) berechnet. ratings ist eine Matrix von Bewertungen, jede Zeile ist [user, film, rating] . Es gibt 15 Millionen Bewertungen. Die Methode rmse() benötigt 12.0 s, aber die Java-Implementierung ist ungefähr 188x schneller: 0.064 s. Warum ist die Julia-Implementierung so langsam? In Java arbeite ich mit einem Array von Rating -Objekten, wenn es ein multidimensionales int -Array wäre, wäre es noch schneller.

%Vor%

EDIT: Nach dem Vermeiden der globalen Variable endet es in 1.99 s (31x langsamer als Java). Nach dem Entfernen der r = ratings[i,:] ist es 0,856 s (13x langsamer).

    
fhucho 22.06.2013, 14:27
quelle

3 Antworten

9

Einige Vorschläge:

  • Benutze keine Globals. Aus technischen Gründen sind sie langsam. Übergeben Sie stattdessen ratings in als Argument.
  • Die Zeile r = ratings[i,:] erstellt eine Kopie, die langsam ist. Verwenden Sie stattdessen predict(r[i,1], r[i,2]) - r[i,3] .
  • square() ist möglicherweise schneller als x*x - probiere es aus.
  • Wenn Sie die blutjunge Julia aus der Quelle verwenden, sehen Sie sich das brandneue NumericExtensions.jl -Paket an. Das hat wahnsinnig optimierte Funktionen für viele gängige numerische Operationen. ( siehe die julia-dev-Liste )
  • Julia muss den Code bei der ersten Ausführung kompilieren. Der richtige Weg, um in Julia zu benchmarken, ist, das Timing mehrmals durchzuführen und das erste Mal zu ignorieren.
Harlan 22.06.2013, 15:13
quelle
7

Für mich läuft der folgende Code in 0,024 Sekunden (und ich bezweifle, dass mein Laptop viel schneller ist als Ihr Computer). Ich habe Bewertungen mit der auskommentierten Zeile initialisiert, da ich die Datei, auf die du dich bezogen hast, nicht hatte.

%Vor%     
tholy 22.06.2013 23:13
quelle
5

Auf meinem System scheint das Problem zu sein, dass Ihre konstantwertige Funktion predict nicht optimiert wird. Durch das Ersetzen der überflüssigen Aufrufe von predict wird der Code in 0,01 Sekunden ausgeführt.

%Vor%     
John Myles White 23.06.2013 03:11
quelle

Tags und Links