E 'un dubbio su strategie parallele e parMap
(Control.Parallel.Strategies)parMap parallelo e strategie
Si tratta di parMap rseq
equivalenza con parMap rpar
.
Dal parMap
utilizza parList
valuta in parallelo, quindi utilizzando rseq
o rpar
verrà valutato in parallelo a WHNF. Non è vero?
Aggiornamento:
Dal
parMap strat f = (`using` parList strat) . map f
parList = parTraversable
parTraversable strat = evalTraversable (rpar `dot` strat)
evalTraversable = traverse
strat2 `dot` strat1 = strat2 . runEval . strat1
parMap rseq
utilizza la strategia
rpar `dot` rseq
che dà:
rpar . runEval . rseq
che dà:
(\x -> x `par` return x) . runEval . (\x -> x `pseq` return x)
E 'difficile pensare al risultato.
Aggiornamento:
vedo, la valutazione pigra prende la prima funzione della composizione prima, e
(\x -> x `par` return x)
garantisce che ogni elemento nel contenitore traslabile possa essere innescato per un parallelo calcolo quando possibile.
Così abbiamo potuto aggiungere che (rpar dot
rseq) è equivalente a (rseq dot
rpar), non è vero?
E che parMap rpar
è ridondante in quanto genera due scintille per ogni elemento attraversabile. !!