Comment accélérer la compilation des applications Ubuntu (make, cmake, gcc)

11

Je compile quelques programmes ici et j'ai 4 cœurs. Est - il possible de dire make, cmakeou gccde compiler en utilisant tous les noyaux ou quelque chose à qui touchent?

Luis Alvarado
la source

Réponses:

13

Si un package le prend en charge, vous pouvez utiliser l' -jindicateur pour autoriser l'exécution de travaux parallèles, par exemple:

make -j8

Plus de détails sur cet indicateur peuvent être trouvés dans la question Stackoverflow Pourquoi faire -j fonctionne mieux quand il est passé un nombre supérieur au nombre de cœurs disponibles? .

Compilation distribuée

Si vous avez plusieurs machines, essayez distcc . Sur les machines concernées, sudo apt-get install distcc. En supposant que votre machine de génération est 192.168.1.1:

  • sur les machines auxiliaires, exécutez:

    sudo distccd --log-file=/tmp/distccd.log --daemon -a 192.168.1.1
    
  • Sur la machine de génération, avant d'exécuter configureou cmakevous devez spécifier les hôtes que vous souhaitez utiliser pour le processus de génération. Facultativement, spécifiez le nombre de travaux simultanés après une barre oblique (par défaut à 4):

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

    Faites en sorte que le compilateur utilise distcc:

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

    Maintenant configureou cmakel'application et créez avec:

    make -j$(distcc -j)
    

    Notez que si vous avez mis /usr/lib/distccdeux fois dans votre PATH, cela échouera. Assurez-vous de /usr/lib/distccne définir qu'une seule fois dans votre PATH.

Pour plus de détails, consultez les pages de manuel de distcc (1) et distccd (1) .

Lekensteyn
la source
OMG que J est bon. Je suis passé de 15 minutes à moins de 1. merci L.
Luis Alvarado
Il peut être plus rapide avec distcc, la compilation de PHP a été effectuée en 2 minutes, le noyau a été effectué en 3 minutes (trois machines i5)
Lekensteyn
J'essaierai avec distcc quand j'arriverai au travail. Je posais une question similaire à ce sujet hier. Vous pouvez peut-être l'aider ici: askubuntu.com/questions/106810/…
Luis Alvarado
L'exécution de distccd en tant que root semble être un mauvais plan. Je ne l'ai pas utilisé pour plusieurs raisons, mais quand je l'ai fait, je ne peux pas avoir utilisé root car je n'avais pas l'autorisation sur ces machines.
Ams
@ams Vous n'avez pas besoin de l'exécuter en tant que root. Si vous l'exécutez en tant que root et souhaitez changer d'utilisateur, utilisez distccd --user nobody. Sinon, il s'exécutera sous l'utilisateur qui l'a exécuté.
Lekensteyn