我想编写一个并行评估数组中项目的策略。旧的策略使用parArr
实现此功能(请参见此处)。但是,在新的Control.Parallel.Strategies模块中找不到它。
例如,对列表进行并行评估:map f myList `using` parList rdeepseq
我希望能够做类似这样的事情:amap f myArr `using` parArr rdeepseq
,其中amap
来自Data.Array.Base,并对每个元素应用一个函数(按顺序)。
以下内容似乎有效,但我想知道它是否正确,并想知道如何定义自己的parArr
。
这个有效:amap ((+1) `using` rpar) $ Array.array (0,4) [(0,10),(1,20),(2,30),(3,40),(4,50)]
using
rpar”很奇怪。它会并行地计算表达式“(+1)”,这没有太多意义,因为“(+1)”是一个 lambda 表达式,已经在 WHNF 中,没有剩余的待求值部分。你可能想要使用“amap ((using
rpar).(+1))”吧? - Rotsorrepa
或vector
呢? - Don Stewartrepa
或vector
肯定更灵活,但我正在尝试通过使用策略来限制对现有代码库的更改,从而引入并行性。使用策略,我可以在算法和并行行为之间有良好的分离。如果它有效,下一步将是查看您的建议。谢谢 +1 - vis