2011-08-30 50 views
39

有誰知道如何獲得cabal install利用並行?我正在編譯GHC,雖然我不知道GHC本身是否可以執行並行編譯,當然,cabal install可以同時運行多個編譯,不是嗎?至少對於不同的獨立包?我可以使用`cabal install`來使用多個核心嗎?

有誰知道是否有可能以及如何去做?

+0

這是什麼動機?網絡傳輸不是主要瓶頸嗎?另外,如果存在共享依賴關係,那麼無法構建錯誤? – amindfv

+2

@amindfv:對我來說,瓶頸在編譯數十個haskell源文件。關於並行的依賴關係,並行'cabal install'將不得不尊重它們。但是仍然有平行性。 –

+0

還有一個開放[stack issue](https://github.com/commercialhaskell/stack/issues/644)...(如果您使用堆棧而不是cabal-install) – mb21

回答

17

有一個Google Summer of Code project this summer並行cabal-install。雖然尚未合併到主線,但鏈接的文章提供了抓取源代碼並自行構建的說明。

+3

此鏈接現已停止。這有沒有更新? – donatello

+0

@ donatello:查看下面米哈伊爾答案的更新。我會看看我是否可以修復鏈接。 – hammar

51

我是一個在編寫這個夏季代碼項目的人。補丁已發送給鄧肯,但他還沒有審查。請注意,我的代碼在包粒度上工作,所以在構建單個包時不會加速。我目前正在研究一個parallel wrapper around ghc --make,這將解決這個問題(我希望最終將它合併到主線cabal-install)。

更新(2012年2月):鄧肯審查了我的補丁,我需要納入他的反饋並重新提交它們。我希望在本月底之前完成這件事。

更新(2012年4月):我對updated my patches迴應鄧肯的評論。新代碼稍慢,但對Cabal庫的更改要少得多。

更新(2012年6月):Duncan Coutts just merged the parallel branch into Cabal HEAD。並行安裝將在下一個cabal-install版本中提供。

更新(2012年10月)cabal-install 1.16.0 has just been released。這是包含我的並行補丁的第一個正式版本。

+0

太棒了!你能否給我們一個關於最終補丁能做什麼的簡短總結?正常/分析編譯是否平行?單包是否使用多核?謝謝。 – nh2

+0

「ghc-parmake」的狀態是什麼? – nh2

+1

@ nh2也許我應該寫一篇關於並行安裝當前狀態的博客文章。現在,您可以按照[這裏]的討論(https://github.com/haskell/cabal/issues/976)。簡短回答:在'〜/ .cabal/config'中添加一行'jobs:n'(其中n是一個正整數);這使'cabal install'使用n個線程。這只是封裝級別的並行性;模塊和組件不是並行構建的。 –

34

完成米哈伊爾Glushenkov的回答記錄的使用了一下:

由於陰謀1.16.0的,你現在可以使用

cabal install -j [pkgs…] 

默認爲每個核心一個作業。它也提供了更清潔的輸出。

您可以並行安裝默認使用:

echo "jobs: $(getconf _NPROCESSORS_ONLN)" >> ~/.cabal/config 

或(小集團安裝1.18+):

echo 'jobs: $ncpus' >> ~/.cabal/config 

獲取最新與小集團安裝:

cabal update 
cabal install cabal-install --bindir ~/bin --upgrade-dependencies 
+4

從[Cabal 1.18](https://github.com/haskell/cabal/commit/99264248db78835b308232943038e6cbce4e72a4),您可以將'jobs'設置爲'$ ncpus'或一些要運行的作業。 – akamch

相關問題