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