首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Repa中的嵌套并行

Repa中的嵌套并行
EN

Stack Overflow用户
提问于 2015-10-07 00:44:34
回答 1查看 132关注 0票数 3

下面的代码使用repa-3.4.0.1生成(可怕的)“嵌套并行”错误

代码语言:javascript
复制
import Control.Monad.Identity (runIdentity, liftM)
import Data.Array.Repa              as R
import Data.Array.Repa.Repr.Unboxed
import Data.Vector.Unboxed
import Test.Framework
import Test.Framework.Providers.QuickCheck2
import Test.QuickCheck hiding (generate,output)

main :: IO ()
main = defaultMainWithArgs [prop,prop] ["--maximum-generated-tests=1"]

prop = testProperty "Test" $ property prop_fmap

prop_fmap :: Arr Int -> Bool
prop_fmap x = fmapT id x == x




newtype Arr r = Arr (Array U DIM1 r) deriving (Eq, Show)

instance (Arbitrary r, Unbox r) => Arbitrary (Arr r) where
    arbitrary = replM arbitrary
    shrink = shrinkNothing

replM :: (Unbox r, Monad mon) => mon r -> mon (Arr r)
replM = let n = 6
        in liftM (Arr . fromUnboxed (Z:.n)) . replicateM n

fmapT :: (Unbox a, Unbox b) => (a -> b) -> Arr a -> Arr b
fmapT f (Arr v) = Arr $ force' $ R.map f $ v

force' :: (Shape sh, Unbox r) => Array D sh r -> Array U sh r
force' = runIdentity . computeP

确切的错误是:

代码语言:javascript
复制
Performing nested parallel computation sequentially.   You've probably
called the 'compute' or 'copy' 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 'compute' the next one. 

我正在用ghc Main -threaded编译,用Main +RTS -N2运行。我尝试过在deepSeqArray的定义中使用fmapT,但这并没有帮助。由于测试是独立的(除了对随机性进行排序),所以在本例中甚至不清楚嵌套并行是如何实现的。

有趣的是,如果我将main更改为quickCheck prop_fmap,它将成功地完成100个测试。因此,似乎测试框架( monad排序可能是一个更普遍的问题)与QuickCheck不同。

对于为什么会出现这个错误,以及如何在进行并行计算的同时避免它,有什么想法吗?

注意:使用Identity monad:ref1ref2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-16 12:16:50

问题是test-framework是隐式多线程的(例如,请参阅 )。

适合我的解决方案是使用选项defaultMainWithArgs运行--threads=1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32981990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档