我一直在努力script其中我希望通过更换mapM
与Async.mapConcurrently
来利用我的机器中的多个处理器。多堆并行与堆栈runghc
在这种情况下观察没有速度增加,我想验证runghc
确实可以利用多个核心。
给定文件Foo.hs
:
import Control.Concurrent
main = print =<< Control.Concurrent.getNumCapabilities
如果我编译如下文件:
stack ghc -- -threaded Foo.hs
,然后运行它,如下所示:
./Foo
它返回的结果1
。这是预期的,因为没有提供RTS选项。运行它,而不是如下:
./Foo +RTS -N
返回数字6
,因为有6个处理器在我的机器(带nproc
同意)。
然而,当我运行“解释模式”的剧本,像这样:
GHCRTS="-N" stack runghc Foo.hs
它产生以下错误文本:
Running /home/kostmo/.stack/programs/x86_64-linux/ghc-nopie-8.0.2/bin/ghc-pkg --no-user-package-db list --global exited with ExitFailure 1
ghc-pkg: the flag -N requires the program to be built with -threaded
是否有可能利用具有堆栈多核“剧本“?