【发布时间】:2012-12-31 13:23:29
【问题描述】:
我目前正在ReaderT r (Rand StdGen) a 中处理我希望并行运行的计算。我遇到了Monad Parallel,它似乎会做我想做的事。
ReaderT 已经有一个 MonadParallel 实例,但我必须从 monad-random 为 Rand 创建自己的实例。但是,我不确定我做对了。我对 Haskell 中的并行编程不太熟悉,但我相信在并行中运行计算应该给出与正常运行时相同的值。因为我的 Rand 的 bindM2 实例使用 split(因此从同一个初始生成器获得一组不同的随机数),所以我的实例不是这种情况。
instance P.MonadParallel (Rand StdGen) where
bindM2 f ma mb = do
split1 <- getSplit
split2 <- getSplit
let a = evalRand ma split1
let b = evalRand mb split2
a `par` b `pseq` f a b
虽然我觉得有理由忽略这一点(数字仍然是随机的,对吗?)我也忍不住觉得我错过了一些东西。这样可以吗?还是有更好的解决方案?
【问题讨论】:
标签: haskell random parallel-processing