gpt4 book ai didi

haskell - 并行 parMap 和策略

转载 作者:行者123 更新时间:2023-12-03 15:10:43 25 4
gpt4 key购买 nike

对并行策略有疑问,parMap (控制.并行.策略)

大约是 parMap rseq等价于 parMap rpar .

由于parMap使用 parList它并行计算,因此使用 rseqrpar将与 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 dot rseq) 等价于 (rseq dot rpar),不是吗?

parMap rpar是多余的,因为它为每个可遍历元素生成两个 Spark 。 !!

最佳答案

快速烟雾测试表明是的 parMap rseqparMap rpar两者都得到并行评估。

import Control.Parallel.Strategies

fib 0 = 1
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

main = print resultPlain where
resultPlain = [fib 34, fib 34, fib 34, fib 34]
resultPar = parMap rpar id [fib 34, fib 34, fib 34, fib 34]
resultSeq = parMap rseq id [fib 34, fib 34, fib 34, fib 34]

然后,使用每种 result_____我为编译的二进制文件计时
ghc -threaded --make rpar
time ./rpar +RTS -N4

看到了 resultPlainresultPar 长得多或 resultSeq (大约长 2 倍)和 resultParresultSeq时间相对一致。

GHC 对 Eval 的实际解释的更多细节monad 是缺乏的,但鉴于 parMap strat f = withStrategy (parList strat) . map f连同这个实验的结果,我有信心说列表中的每个元素都被激发以对 WHNF 进行评估。

关于haskell - 并行 parMap 和策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15193283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com