没有并行化的修复

Yro*_*irg 7 haskell repa

我真的很喜欢它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.
Run Code Online (Sandbox Code Playgroud)

force我的代码实际上没有.

Ben*_*ier 3

使用http://code.ouroborus.net/repa/repa-head的 Repa 3 开发版本。它有一个“force”版本(如何称为computeS),它将按顺序评估数组。

Repa 不会自动对小型数组上的操作进行排序。使用 (map f xs) 时,运行时间取决于 'f' 正在执行的操作以及 'xs' 的大小。Repa 不会尝试计算出“f”正在做什么(这会很困难),因此它不知道计算的成本有多大。