2013-02-22 1 views
7

Ich versuche, die Ausführungszeit mit Hilfe von Scala-Parallelismus zu beschleunigen.Verwenden Scala-Parallelismus beim Iterieren über eine Java-konvertierte Liste zu unveränderlichen

var imList = scala.collection.JavaConversions.asScalaBuffer(normalQLFolderList) 

und dann die Vorteile von mehreren Kernen zu nehmen, wenn ich Iterieren:

So eine Java Arraylist zu einem unveränderlichen, die ich verwende, um zu konvertieren

for (i <- imList .par) { 
} 

Bin ich unter Ausnutzung von scala Parallelität in der richtigen Weise? In diesem Fall wird über eine Liste iteriert. Gibt es einen großen Leistungseinbruch auf asScalaBuffer?

+2

der Scala'ish Weg (x => yourfunction (x)) – Rajesh

+0

ich stimme nicht ganz mit, dass: es gibt nichts grundlegend falsch mit "für" Schleifen in Scala - es ist eine andere Art, dasselbe zu sagen. Manchmal kann eine explizite For-Schleife deutlicher sein, besonders beim Flatmapping. –

Antwort

5

Sammlungen, die in konstanter Zeit in ihre parallelen Gegenstücke konvertiert werden können, umfassen veränderbare und unveränderliche Hash-Maps und Hash-Sätze, Bereiche, Vektoren und Arrays. Bei allen anderen Sammlungstypen, einschließlich Wrappern für Sammlungen, die aus Java stammen, ruft der Aufruf par den Inhalt der Sammlung in ein Format auf, das für die Parallelisierung besser geeignet ist.

http://docs.scala-lang.org/overviews/parallel-collections/conversions.html

Allerdings, je nachdem, wie groß die Sammlung ist, und wie teuer der for Block ist, könnte es sein, durchaus sinnvoll zu zahlen für diese Umwandlung:

Dies wird hier näher beschrieben wird. Je mehr der parallele Block for pro Element verarbeitet, desto mehr amortisieren sich die Kosten der Konvertierung.

Ich würde sagen, wenn die Berechnung für jedes Element etwas nichttriviales beinhaltet (zB schafft es mindestens neue Objekte) zahlt sich für die Umwandlung sinnvoll aus, aber eine gute Idee ist, den Leistungsunterschied zwischen der sequentiellen Version und der Parallelität zu messen Version, die par beinhaltet Aufruf: wäre imList.par.map

http://docs.scala-lang.org/overviews/parallel-collections/performance.html

Verwandte Themen