Clojure Performance, große Schleife über große Vektoren

8

Ich führe elementweise Operationen an zwei Vektoren in der Größenordnung von 50.000 Elementen in der Größe durch und habe unbefriedigende Leistungsprobleme (einige Sekunden). Gibt es irgendwelche offensichtlichen Leistungsprobleme, wie zum Beispiel die Verwendung einer anderen Datenstruktur?

%Vor%     
zenna 14.05.2013, 01:18
quelle

2 Antworten

11

Versuchen Sie Folgendes:

%Vor%

Einige Anmerkungen:

  • map ping eine Funktion an mehrere Sammlungen verwendet ein Element von jedem als die Argumente für die Funktion - keine Notwendigkeit interleave und partition für diese.
  • Wenn Ihre Daten 1 und 0 sind, ist xor schneller als die absolute Differenz

Zeitgesteuertes Beispiel:

%Vor%

Nach dem Aufwärmen der JVM ...

%Vor%     
A. Webb 14.05.2013 01:36
quelle
5

Sie sollten sich die core.matrix ansehen, wenn Sie an einer guten Leistung für große Vektoroperationen interessiert sind.

>

Insbesondere die vectorz-clj -Bibliothek (eine core.matrix-Implementierung) hat einige sehr schnelle Implementierungen für die gebräuchlichsten Vektoroperationen mit double -Werten.

%Vor%

d. unter 20ns pro Paar Elemente - das ist ziemlich schnell: Sie wären schwer zu schlagen, ohne auf Low-Level-Array-Fiddling-Code zurückgreifen.

    
mikera 14.05.2013 13:18
quelle

Tags und Links