Es besteht ein Zweifel über parallele Strategien und parMap
(Control.Parallel.Strategies)
Es geht um parMap rseq
Äquivalenz mit parMap rpar
.
Da parMap
parList
verwendet, wird parallel ausgewertet, so dass entweder rseq
oder rpar
parallel zu WHNF ausgewertet wird. Ist es nicht?
Aktualisierung:
Seit
%Vor% parMap rseq
verwendet die Strategie
was ergibt:
%Vor%was ergibt:
%Vor%Es ist schwer, über das Ergebnis nachzudenken.
Aktualisierung:
Ich sehe, die faule Bewertung nimmt zuerst die erste Funktion der Komposition und
%Vor%gewährt, dass jedes Element im durchsuchbaren Container nach Möglichkeit für eine parallele Berechnung ausgelöst wird.
Also könnten wir hinzufügen, dass (rpar dot
rseq) äquivalent zu (rseq dot
rpar) ist, oder?
Und das parMap rpar
ist insofern redundant, als es für jedes verfahrbare Element zwei Funken erzeugt. !!
Ein schneller Rauchtest zeigt, dass ja parMap rseq
und parMap rpar
beide parallel ausgewertet werden.
und dann mit jeder Art von result_____
habe ich die kompilierten Binaries
und sah, dass resultPlain
war viel länger als resultPar
oder resultSeq
(etwa 2x länger) und resultPar
und resultSeq
wurden vergleichsweise identisch zeitlich festgelegt.
Weitere Details zu GHCs tatsächlicher Interpretation der Eval
Monade fehlen, aber angesichts der parMap strat f = withStrategy (parList strat) . map f
zusammen mit den Ergebnissen dieses Experiments bin ich zuversichtlich, dass jedes Element in der Liste zur Auswertung an WHNF ausgelöst wird.
Tags und Links haskell