Come velocizzare la compilazione di app Ubuntu (make, cmake, gcc)


11

Sto compilando alcuni programmi qui e ho 4 core. C'è un modo per dirlo make, cmakeo gccper compilare usando tutti i core o qualcosa che influenzi?

Risposte:


13

Se un pacchetto lo supporta, è possibile utilizzare il -jflag per consentire l'esecuzione di lavori paralleli, ad esempio:

make -j8

Maggiori dettagli su questo flag sono disponibili nella domanda StackOverflow Perché -j funziona meglio quando viene passato un numero maggiore del numero di core disponibili? .

Compilazione distribuita

Se disponi di più macchine, prova con distcc . Sulle macchine coinvolte, sudo apt-get install distcc. Supponendo che la tua macchina di compilazione sia 192.168.1.1:

  • sulle macchine helper, esegui:

    sudo distccd --log-file=/tmp/distccd.log --daemon -a 192.168.1.1
    
  • Sulla macchina di compilazione, prima di eseguire configureo cmakeè necessario specificare gli host che si desidera utilizzare per il processo di compilazione. Facoltativamente, specificare il numero di lavori simultanei dopo una barra (l'impostazione predefinita è 4):

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

    Fai in modo che il compilatore usi distcc:

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

    Ora configureo cmakel'applicazione e compilare con:

    make -j$(distcc -j)
    

    Nota che se hai inserito /usr/lib/distccdue volte il tuo PERCORSO, fallirà. Assicurati di impostare /usr/lib/distccsolo una volta nel tuo PATH.

Per maggiori dettagli, consultare le pagine di manuale di distcc (1) e distccd (1) .


OMG che J è buono. Sono passato da 15 minuti a meno di 1. grazie L.
Luis Alvarado,

Può essere più veloce con distcc, la compilazione di PHP è stata eseguita in 2 minuti, il kernel è stato eseguito in 3 minuti (tre macchine i5)
Lekensteyn,

Proverò con distcc quando arrivo al lavoro. Ieri stava facendo una domanda simile a riguardo. Forse puoi aiutarci qui: askubuntu.com/questions/106810/…
Luis Alvarado,

Eseguire distccd come root sembra un cattivo piano. Non l'ho usato per alcuni motivi, ma quando l'ho fatto non posso aver usato root perché non avevo i permessi su quelle macchine.
AMS

@ams Non è necessario eseguirlo come root. Se lo esegui come root e vuoi cambiare utente, usa distccd --user nobody. Altrimenti, verrà eseguito sotto l'utente che lo ha eseguito.
Lekensteyn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.