gpt4 book ai didi

haskell - 堆栈 runghc 的多核并行性

转载 作者:行者123 更新时间:2023-12-04 15:18:23 28 4
gpt4 key购买 nike

我一直在研究 script我希望通过换出 mapM 来利用我机器中的多个处理器与 Async.mapConcurrently .

在这种情况下没有观察到速度增加,我想验证 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

是否可以通过堆栈“脚本”使用多个内核?

最佳答案

感谢您提出这个问题,我认为 stack 应该专门处理 GHCRTS 环境变量,并打开了这个问题 https://github.com/commercialhaskell/stack/issues/3444并进行了此更改 https://github.com/commercialhaskell/stack/pull/3445

不幸的是,它并没有解决这种情况,因为 runghc自身 (ghc) 将处理 GHCRTS ,并且它不是使用线程运行时构建的。所以不能使用环境变量解决方案。

我认为应该可以提供-with-rtsopts -N标记为 stack script --compile ,但这似乎不起作用,需要进一步调查。这不适用于 runghc ,因为它使用解释器。

关于haskell - 堆栈 runghc 的多核并行性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46311648/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com