我非常喜欢Repa
的界面,即使它的并发能力也是如此。而且我实际上需要修复的数组是顺序的,因为我的数组是相对较小的数组,并且它们上的并行化是无用的,甚至是有害的。
但是我在我的程序中使用parallel-io进行并行化,所以我编译它-threaded
并使用+RTS -Nx
运行。这样就可以实现并行化。有没有办法关闭repa的并发功能?
嗯,在写这篇文章时我明白我不太可能需要DIM1
以外的任何东西,所以也许我应该切换到Vector
。但是,问题的答案仍然有用。
我通过并行运行得到的警告信息是
Data.Array.Repa: Performing nested parallel computation sequentially.
You've probably called the 'force' function while another instance was
already running. This can happen if the second version was suspended due
to lazy evaluation. Use 'deepSeqArray' to ensure that each array is fully
evaluated before you 'force' the next one.
我的代码中实际上没有force
。
答案 0 :(得分:3)
使用http://code.ouroborus.net/repa/repa-head中的Repa 3的开发版本。它有一个“force”版本(如何称为computeS),它将按顺序评估数组。
Repa不会自动对小阵列上的操作进行连续处理。使用(map f xs),运行时在很大程度上取决于'f'的作用是'xs'的大小。 Repa不会试图弄清楚'f'正在做什么(这很难),所以它不知道计算的成本有多高。