H. *_*ell 3 parallel-processing multithreading haskell knuth
我正在尝试将knuthBendix应用于大量的重写规则.因此,我尝试让它在不同的集合上并行工作.
例如,我尝试运行:
import Control.Parallel
import Control.Parallel.Strategies
import Math.Algebra.Group.StringRewriting
knuthBendixOptimized rs = as' `par` bs' `pseq` as' ++ bs' where
(as, bs) = splitAt 3000 rs
as' = knuthBendix as
bs' = knuthBendix bs
Run Code Online (Sandbox Code Playgroud)
我编译使用ghc -threaded,我执行通过+RTS -N.如果我并行运行其他算法,它就可以工作.但对于knuthBendix,它没有.
有人知道解决方案吗?
谢谢,弗兰兹
我相信问题在于你在打电话as' `pseq`.这评估as'为WHNF,这意味着它只确定列表是否为空.但是您希望对列表进行全面评估:
import Control.Parallel.Strategies
forceList :: [a] -> [a]
forceList = withStrategy (evalList rseq)
-- or use rdeepseq to force the evaluation of everything
knuthBendixOptimized rs = forceList as'
`par` forceList bs'
`pseq` as' ++ bs'
where
(as, bs) = splitAt 3000 rs
as' = knuthBendix as
bs' = knuthBendix bs
Run Code Online (Sandbox Code Playgroud)
请注意,Haskell通常的术语是并行性.而并发用于在明确工作IO与线程和他们沟通.请参阅GHC手册.