我一直在努力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
是否有可能利用具有堆棧多核「劇本「?