我曾经在一个脚本上工作,希望通过使用
在那种情况下没有观察到速度的提升,我想验证
给定一个文件
如果我按照以下方式编译文件:
然后按以下方式运行它:
它会产生以下错误文本:
Async.mapConcurrently
替换mapM
来利用我的机器中的多个处理器。在那种情况下没有观察到速度的提升,我想验证
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
是否可以使用多个核心来运行堆栈“脚本”?