2011-08-30 11 views
39

Paralellikten yararlanmak için cabal install'un nasıl alınacağını bilen var mı? GHC ile derleme yapıyorum ve GHC'nin kendisinin paralel olarak yapıp yapamayacağını bilmeme rağmen, cabal install kesinlikle birden fazla derlemeyi paralel olarak çalıştırabilir, değil mi? En azından bağımsız, bağımsız paketler için?Birden fazla çekirdek kullanmak için 'cabal install' alabilir miyim?

Mümkün olup olmadığını ve nasıl yapılacağını bilen var mı?

+0

:

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

en son cabal yüklemek alın Bunun için motivasyon nedir? Ağ transferleri için ana darboğaz değil mi? Ayrıca, paylaşılan bağımlılıklar varsa, hatalar birbirine çarpılamaz mı? – amindfv

+2

@amindfv: Benim için darboğaz, düzinelerce haskell kaynak dosyası derleniyor. Ve bağımlılıklar, paralel yapıda, paralel olarak 'cabal install' onlara saygı duymak zorunda kalacaktı. Fakat hala var olan paralellik var. –

+0

Ayrıca bir açık [yığın sorunu] (https://github.com/commercialhaskell/stack/issues/644) ... (cabal-install yerine yığın kullanıyorsanız) – mb21

cevap

17

cabal-install'u paralelleştirmek için Google Summer of Code project this summer vardı. Henüz ana çizgiye dahil edilmemiş olsa da, bağlantılı makale kaynağı ele geçirip kendiniz inşa etmek için gerekli talimatları içerir.

+3

Bu bağlantı artık öldü.Bu konuda herhangi bir güncelleme var mı? – donatello

+0

@donatello: Aşağıdaki Mikhail'in cevabındaki güncellemeye bakın. Bağlantıyı tamir edip edemeyeceğimi göreceğim. – hammar

51

Bu Yaz Kodu projesi üzerinde çalışan kişiyim. Yamalar Duncan'a gönderildi, ancak henüz onları incelemedi. Kodumun paket parçacığında çalıştığını unutmayın, böylece tek bir paket oluştururken hızlanmayacaksınız. Şu anda bu sorunu çözecek bir parallel wrapper around ghc --make üzerinde çalışıyorum (en sonunda ana hattı cabal-install içine birleştirilmesini umuyoruz).

Güncelleştirme (Şubat 2012): Duncan yamalarımı inceledi, geribildirimlerini eklemeli ve bunları yeniden göndermem gerekiyor. Bunu bu ayın bitiminden önce bitirmeyi umuyorum.

Güncelleştirme (Nisan 2012): Duncan'ın yorumlarına yanıt olarak updated my patches çalışıyorum. Yeni kod biraz daha yavaş, ancak Cabal kütüphanesinde çok daha az değişiklik gerektiriyor.

Güncelleştirme (Haziran 2012): Duncan Coutts just merged the parallel branch into Cabal HEAD. Paralel yükleme, bir sonraki cabal-install sürümünde kullanıma sunulacak.

Güncelleştirme (Ekim 2012): cabal-install 1.16.0 has just been released. Bu benim paralel yamalarımı içeren ilk resmi sürümdür. Kullanımı biraz belgelemek için Mikhail Glushenkov cevabı tamamlanması

+0

Bu harika! Son yamanın neler yapabileceğine dair kısa bir özet verebilir misiniz? Normal/profilleme derlemeleri paralel midir? Tek paketler şimdi birden çok çekirdek kullanıyor mu? Teşekkür ederim. – nh2

+0

Ve ghc-parmake'nin durumu nedir? – nh2

+1

@ nh2 Belki de geçerli paralel yükleme durumu hakkında bir blog yazısı yazmalıyım. Şimdilik tartışmayı buradan takip edebilirsiniz (https://github.com/haskell/cabal/issues/976). Kısa cevap: '~/.cabal/config' adında bir 'iş: n' satırı (n pozitif bir tam sayıdır) eklemek; Bu, 'cabal install' işlevini n thread yapar. Bu sadece paket düzeyinde paralelliktir; Modüller ve bileşenler paralel olarak oluşturulmamıştır. –

34

:

cabal 1.16.0 itibariyle, artık çekirdek başına bir işe

cabal install -j [pkgs…] 

Bu varsayılan kullanabilirsiniz. Aynı zamanda daha temiz çıktı sağlar. Sen paralel yapabilirsiniz

ile varsayılan yükler:

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

Veya (cabal yükleyin 1.18+):

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

[Cabal 1.18] (https://github.com/haskell/cabal/commit/99264248db78835b308232943038e6cbce4e72a4) 'işler' ayarını '$ ncpus' olarak veya çalıştırılacak bir dizi iş olarak ayarlayabilirsiniz. – akamch