我可以使用"cabal install"来使用多个内核吗?

Nor*_*sey 39 parallel-processing haskell multicore build cabal

有谁知道如何cabal install利用并行性?我正在使用GHC编译,虽然我不知道GHC本身是否可以进行并行构建,但肯定cabal install可以并行运行多个编译,不是吗?至少对于独特的独立包装?

有谁知道它是否可能以及如何做到这一点?

Mik*_*kov 51

我是那个正在编写Summer of Code项目的人.这些补丁已发送给Duncan,但他尚未对其进行审核.请注意,我的代码以包的粒度工作,因此在构建单个包时不会获得任何加速.我正在研究一个并行包装器ghc --make,它将解决这个问题(我希望cabal-install最终将它合并到主线).

更新(2012年2月):Duncan审核了我的补丁,我需要收集他的反馈并重新提交.我希望在本月底之前完成这项工作.

更新(2012年4月):我已经根据Duncan的评论更新了我的补丁.新代码有点慢,但对Cabal库的更改要少得多.

更新(2012年6月):Duncan Coutts 刚刚将并行分支合并为Cabal HEAD.并行安装将在下一cabal-install版本中提供.

更新(2012年10月):cabal-install1.16.0 刚刚发布.这是第一个包含我的并行补丁的正式版本.


Tob*_*obu 34

完成Mikhail Glushenkov的答案,记录使用情况:

从cabal 1.16.0开始,您现在可以使用了

cabal install -j [pkgs…]
Run Code Online (Sandbox Code Playgroud)

默认为每个核心一个作业.它还提供更清洁的输出.

您可以将并行安装默认设置为:

echo "jobs: $(getconf _NPROCESSORS_ONLN)" >> ~/.cabal/config
Run Code Online (Sandbox Code Playgroud)

或者(cabal-install 1.18+):

echo 'jobs: $ncpus' >> ~/.cabal/config
Run Code Online (Sandbox Code Playgroud)

获取最新的cabal-install:

cabal update
cabal install cabal-install --bindir ~/bin --upgrade-dependencies
Run Code Online (Sandbox Code Playgroud)

  • 从[Cabal 1.18](https://github.com/haskell/cabal/commit/99264248db78835b308232943038e6cbce4e72a4)开始,您可以将`jobs`设置为`$ ncpus`或要运行的多个作业. (4认同)

ham*_*mar 17

今年夏天有一个Google Summer of Code项目进行并行化cabal-install.虽然尚未将其合并到主线中,但链接的文章提供了获取源并自行构建源的说明.

  • 这个链接现在已经死了.有没有更新? (3认同)