parMap
並列戦略と(Control.Parallel.Strategies)についての疑問です。
parMap rseq
と同等程度ですparMap rpar
。
parMap
を使用するためparList
、並列に評価されるため、 or のいずれrseq
かrpar
を使用すると、WHNF と並列に評価されます。ではない ?
アップデート:
以来
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
戦略を使用します
rpar `dot` rseq
これは次を与えます:
rpar . runEval . rseq
これは次を与えます:
(\x -> x `par` return x) . runEval . (\x -> x `pseq` return x)
結果を考えるのは難しいです。
アップデート:
なるほど、遅延評価は合成の最初の関数を最初に取り、
(\x -> x `par` return x)
可能であれば、トラバース可能なコンテナ内のすべての要素が並列計算のために起動されることを許可します。
したがって、 (rpar rseq) は(rseq dot
rpar dot
)と同等であると付け加えることができますよね?
これparMap rpar
は、通過可能な要素ごとに 2 つのスパークを生成するという点で冗長です。!!