我真的很喜欢Repa的接口,即使不考虑它的并发能力,而且我实际上需要repa的数组是顺序的,因为我的数组相对较小,在它们上并行化是无用的,甚至是有害的。
但是,我在使用parallel-io的程序中使用了并行化,因此我将其编译为-threaded并使用+RTS -Nx运行。这就实现了repa的并行化。有没有办法关闭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。
发布于 2012-01-06 17:00:38
使用http://code.ouroborus.net/repa/repa-head的REPA3开发版本。它有一个版本的"force“(如何称为computeS),它将按顺序计算数组。
Repa不会自动对小阵列上的操作进行序列化。使用(map F xs),运行时与'xs‘的大小一样取决于'f’在做什么。Repa不会尝试计算出'f‘在做什么(那会很难),所以它不知道计算会有多昂贵。
https://stackoverflow.com/questions/8652363
复制相似问题