par in scala

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

par in scala
Ich verstehe noch nicht so ganz, wie par in scala funktioniert. Nur so als Beispiel aus einer Altklausur:

Folgende Funktion soll man paralelisieren:

def sortCols : Matrix => Matrix = m = > (for ( col <−m. transpose ) yield sortAsc ( col ) ) . transpose

und wo und vor allem warum muss ich nun ein par einfügen ? Aus den Folien und aus eigener Internetrecherche werde ich nicht so ganz schlau …

Einfach "m.transpose " in “m.par.transpose”. Oder kann man nur funktionen aus der Standardbibliothek paralellisieren ? Und wann brauchen ich effektiv das “toList” ?

Danke im Vorraus


[m]par[/m] wandelt die gegebene Datenstruktur in eine [m]ParSeq[/m] um. Die meisten Methoden dieser [m]ParSeq[/m] sind parallel implementiert. Wenn du also im Beispiel [m]m.par[/m] schreibst, dann entsteht eine [m]ParSeq[List[Int]][/m]. [m]toList[/m] brauchst du, um diese [m]ParSeq[/m] wieder in eine Liste zu verwandeln (weil das durch die Signatur der Funktion erfordert wird).


also würde ich vor beide “transpose” jeweils ein “.par” schreiben ? (und einfach heimlich davon ausgehen , dass diese Funktion auch eine parallele Implementierung hat). Oder brauche ich noch ein “.toList”, nach dem ersten “transpose” (das in der “for comprehension” nicht das im yield), da sortCol ja nur eine liste erwartet?


hmm ich hätte das einfach so gemacht:

def sortColsPar: Matrix => Matrix = m => (for(col <- m.transpose) yield sortAsc(col)).par.toList.transpose

Gute Frage, ob man da mehrere pars einfügen soll.


@m0kab0 aber so wandelst du dein “par” direkt wieder in eine liste um , oder?


Ja, tut er.

def sortColsPar: Matrix => Matrix = m => (for(col <- m.transpose.par) yield sortAsc(col)).toList.transpose

Das sollte passen (steht so glaub ich auch bei den Loesungen).