monad-par例子中parfib的空间分析

时间:2011-10-09 15:35:20

标签: haskell parallel-processing

在github上阅读parfib.hs code时,我看到了关于monadic版本内存分配的评论:

Monad-par version:
fib(38) non-threaded: 23.3s 23.1s
fib(38) 1 thread :    24.7s 24.5s
fib(38) 4 threads:     8.2s 31.3s
fib(40) 4 threads:    20.6s 78.6s **240GB allocated**

是否有任何纸质或博客文章解释了这个巨大的内存占用?非monadic版本的内存分配在代码注释中记录为17GB(对于fib(42))。我搜索了Simon Marlow的par monad论文和演示,但我没有看到对parfib的记忆足迹的任何分析。

1 个答案:

答案 0 :(得分:4)

我认为这是我在源代码中的评论。最大的问题是monad-par的默认实现使用了一种优雅但可能效率低下的体系结构,其中Par计算生成一系列Par动作作为惰性数据结构。这对于分离出调度程序逻辑非常有用,但编译器并没有完全去除(消除)中间数据结构。

有各种众所周知的方法可以让它变得更好。它只是花时间来实现它们。如果你看一下github存储库上的一些最新开发(在分支上),我们开始使用其前期工作(“Haskell CnC”)中探讨的一些备用调度策略来填充monad-par。

我们希望将下一个主要版本中的默认调度程序更改为parfib行为更接近“原始”par / pseq的内容。