当我运行这个 Haskell 片段时,它只加载了 1 个 CPU。两个f
和 g
是无意义的,但它不应该在可用时加载两个 CPU 吗?编译为 ghc -O2 snippet.hs
.
f x = 1 + (f $! x)
g x = 5 + (g $! x)
z = a `par` b `seq` a+b
where
a = f 3
b = g 5
main = do
print z
最佳答案
您需要使用线程选项进行编译,即ghc -O2 -threaded snippet.hs
,然后在命令行上传递可执行文件的核心数,如下所示,四个核心:
./snippet +RTS -N4
或者您可以让机器仅使用
-N
来选择内核数。 .见 http://www.haskell.org/haskellwiki/Haskell_for_multicores
关于haskell - Haskell 中的并行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12250167/