Math-Linux.com

Knowledge base dedicated to Linux and applied mathematics.

Accueil > Linux > Commande du jour > Accélérer le processus de compilation et de build avec GNU make

Accélérer le processus de compilation et de build avec GNU make

Toutes les versions de cet article : <English> <français>


La construction/compilation fréquente de librairies ou de projets via GNU make peut prendre beaucoup de temps. Pour accélérer ces compilations, on peut utiliser make -jN o๠N est le nombre de build parallèles. Par exemple :

make -j4

fera 4 compilations en parallèle.

Considérations matérielles

Evidemment, vous ne pouvez pas faire quelque chose comme :

make -j256

C’est la meilleure manière de voir votre ordinateur figé !!!
Vous devez donc vérifier les informations matérielles de votre CPU. Combien de coeurs possédez vous (incluant le multi threading) :

NB_CORES=$(grep -c '^processor' /proc/cpuinfo)

Vous pouvez également utiliser dmidecode :

dmidecode -t processor | grep "Core Count"
Core Count: 8
Core Count: 8

ici vous avez deux processeurs (2 fois Core Count) avec 8 coeurs. Vous pouvez également utiliser la commande lspcu :

lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 23
Stepping:              7
CPU MHz:               1998.000
BogoMIPS:              4999.98
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              3072K
NUMA node0 CPU(s):     0-3

Considérations système

Une fois le nombre de coeurs déterminé, on doit avoir un système qui continue à répondre durant la compilation. On utilise l’option -l de make
-l [load], —load-average[=load]
Spécifie qu’aucun nouveau job (commande) doit àªtre lancé si d’autres jobs sont en cours d’exécution et que la chage moyenne est d’au moins le paramètre load

Pour bénéficier d’une exploitation maximale des processeurs sans figer votre système, exportez la variable d’environnement MAKEFLAGS :

NB_CORES=$(grep -c '^processor' /proc/cpuinfo)
export MAKEFLAGS="-j$((NB_CORES+1)) -l${NB_CORES}"
make

Ou :

NB_CORES=$(grep -c '^processor' /proc/cpuinfo)
make -j$((NB_CORES+1)) -l${NB_CORES}

cela signifie que la charge moyenne ne dépasse pas le nombre de coeurs.

Configuration persistente

Pour garder cette configuration de manière persistente, ajouter dans votre.bashrc ou .bash_profile :

NB_CORES=$(grep -c '^processor' /proc/cpuinfo)
export MAKEFLAGS="-j$((NB_CORES+1)) -l${NB_CORES}"

Un dernier exemple en ligne de commande

Si vous ne voulez pas opérer de configuration particulière :

make -j9 -l8

Remarque

Vous pouvez si le montant de votre RAM le permet doubler le nombre de jobs par rapport au nombre de CPU, notamment si votre CPU supporte l’hyper-threading. Typiquement, si vous avez 32 dual cores, vous pouvez lancer 128 jobs (32x2-coeursx2-hyperthreading). Merci à Andrew Stormont pour sa contribution.

Dans la même rubrique

  1. Historique des commandes : history
  2. Archivage et compression de données : tar
  3. Taille du disque et de répertoire : df du
  4. Quelle est la version de mon noyau Linux : uname
  5. Comment éteindre ou redémarrer son pc : shutdown
  6. Nombre de lignes, de mots d’un fichier : wc
  7. Chronométrer une tâche : time
  8. Accéder à une page de manuel : man
  9. Lancer une commande un jour donné, à une heure donnée : at
  10. Affichage du calendrier en ligne de commande : cal
  11. Effacer l’écran et enlever certains caractères bizarres : clear reset
  12. Ouverture et fermeture de session : login, logout et password
  13. Rechercher un fichier : locate, find et which
  14. Comment synchroniser les données mémoire sur le disque : sync
  15. Télécharger de la musique et des vidéos .mp3, .wma, .avi, .mpg , divx avec google
  16. How to shut down or reboot: shutdown command
  17. SVN — Comment ignorer des fichiers ou des répertoires avec subversion ?
  18. Comment définir un timeout lors d’une tentative de connexion SSH ?
  19. phpMyAdmin : rechercher et remplacer dans une base MySQL
  20. Comment chiffrer/déchiffrer un fichier ou un répertoire sous Linux ?
  21. Trouver/déterminer les options avec lesquelles python a été compilé
  22. Trouver/déterminer la version de numpy de numpy que j’utilise
  23. Accélérer le processus de compilation et de build avec GNU make
  24. Comment faire un déni de service en BASH à l’aide de fork ?
  25. Linux Comment supprimer une imprimante en ligne de commande
  26. Linux comment se connecter à Windows via remote desktop RDP en CentOS 7 / RedHat 7
  27. Comment générer des certificats auto-signés OpenSSL sous Linux CentOs/RedHat pour Apache/httpd
  28. Programmation des actions(tâches) régulières : crontab
  29. Faire un diff sur des fichiers distants en utilisant ssh
  30. Trouver les processus consommant le plus de cpu/mémoire à l’aide de la commande ps