Jak przyspieszyć kompilację aplikacji Ubuntu (make, cmake, gcc)

11

Kompiluję tutaj kilka programów i mam 4 rdzenie. Czy istnieje sposób, aby powiedzieć make, cmakeczy gcckompilować za pomocą wszystkich rdzeni lub coś, które wpływają?

Luis Alvarado
źródło

Odpowiedzi:

13

Jeśli pakiet go obsługuje, możesz użyć -jflagi, aby zezwolić na uruchamianie równoległych zadań, np .:

make -j8

Więcej szczegółów na temat tej flagi można znaleźć w pytaniu Stackoverflow Dlaczego make -j działa lepiej, gdy przekazuje liczbę większą niż liczba dostępnych rdzeni? .

Kompilacja rozproszona

Jeśli masz wiele maszyn, wypróbuj distcc . Na zaangażowanych maszynach sudo apt-get install distcc. Zakładając, że twoja maszyna kompilacji to 192.168.1.1:

  • na maszynach pomocniczych uruchom:

    sudo distccd --log-file=/tmp/distccd.log --daemon -a 192.168.1.1
    
  • Na komputerze kompilacji, przed uruchomieniem configurelub cmakemusisz określić hosty, których chcesz użyć w procesie kompilacji. Opcjonalnie określ liczbę równoczesnych zadań po ukośniku (domyślnie 4):

    export DISTCC_HOSTS='localhost/4 192.168.1.2/8 192.168.1.3/8'
    

    Niech kompilator użyje distcc:

    export PATH="/usr/lib/distcc:$PATH"
    

    Teraz configurelub cmakeaplikacja i buduj z:

    make -j$(distcc -j)
    

    Pamiętaj, że jeśli wpiszesz /usr/lib/distccdwukrotnie ŚCIEŻKĘ, zawiedzie. Pamiętaj, aby ustawić /usr/lib/distcctylko raz w swoim PATH.

Aby uzyskać więcej informacji, zobacz strony podręcznika dla distcc (1) i distccd (1) .

Lekensteyn
źródło
OMG, że J jest dobry. Poszedłem z 15 minut do mniej niż 1. dzięki L.
Luis Alvarado
Z Distcc może być szybszy, kompilacja PHP została wykonana w 2 minuty, jądro zostało wykonane w 3 minuty (trzy maszyny i5)
Lekensteyn
Spróbuję z distcc, kiedy dojdę do pracy. Wczoraj zadawałem podobne pytanie. Może pomożesz tutaj: askubuntu.com/questions/106810/...
Luis Alvarado
Uruchamianie distccd jako root wydaje się złym planem. Nie użyłem go z kilku powodów, ale kiedy to zrobiłem, nie mogłem użyć roota, ponieważ nie miałem uprawnień na tych komputerach.
AMS
@ams Nie musisz go uruchamiać jako root. Jeśli uruchomisz go jako root i chcesz zmienić użytkowników, użyj distccd --user nobody. W przeciwnym razie będzie działać pod użytkownikiem, który go wykonał.
Lekensteyn