在Haskell中的并行计算

8
当我运行这个Haskell代码段时,只有一个CPU被加载。 虽然fg都是无意义的,但在可用时,它不应该加载两个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
1个回答

10

您需要使用线程选项进行编译,即 ghc -O2 -threaded snippet.hs,然后在命令行中传递可执行文件的核心数量,例如四个核心的情况如下:

./snippet +RTS -N4

或者你可以只使用-N让机器选择核心数。

参见http://www.haskell.org/haskellwiki/Haskell_for_multicores


尝试过了,但我仍然只看到100%的负载,而不是200%的负载(我的CPU有4个核心)。 - Cartesius00
等等,我忘了你还需要向可执行文件传递核心数,像这样:./snippet +RTS -N4 表示四个核心。 - Vic Smith
10
只返回翻译后的文本:如果您想让程序为您计算核心,请仅传递“-N”。 - dflemstr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接