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.
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).
Einige Vorschläge:
ratings
in als Argument. 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. NumericExtensions.jl
-Paket an. Das hat wahnsinnig optimierte Funktionen für viele gängige numerische Operationen. ( siehe die julia-dev-Liste ) 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.
Tags und Links performance julia-lang