parBuffer
的{{3}}说
parBuffer :: Int -> Strategy a -> Strategy [a]
与evalBuffer类似,但在将列表元素推入缓冲区时会并行计算列表元素。“
evalBuffer :: Int -> Strategy a -> Strategy [a]
evalBuffer是(懒惰)列表的滚动缓冲区策略组合器。 evalBuffer并不像类型所暗示的那样具有组合性。实际上,它只是将列表元素评估为弱头正常形式,而忽略了策略参数r0。“
我的问题的第一部分是否意味着parBuffer
也忽视了它的战略论点?如果它只是忽视它,为什么它甚至会提供一个战略论点呢?
我的问题的第二部分是如何确定使用parBuffer
的缓冲区大小?如果parBuffer
始终保持缓冲区大小为n
,那么n=1
和n=10
除了必须在内存中保留更多火花之外还有什么区别?我认为选择n=<number of threads>"
可能是明智之举,但我不知道这会如何改善,因为parBuffer
在消耗火花时仍会产生火花,无论是n=1
或n=4
。
答案 0 :(得分:1)
第一个答案:parBuffer
需要Strategy
来评估列表的一个元素,然后返回Strategy
来评估整个列表。所以是的,它并行地评估列表。但它仍然需要知道如何评估每个项目。 (你想要正常形式还是弱头正常形式还是......?)所以它不会忽略第一个参数。
第二......基准吗?我怀疑答案取决于每个火花的确切工作量,您拥有的数据依赖性等等。