Pour compiler un progiciel sur un poste de travail avec de nombreux cœurs de processeur (disons 12), l'étape de configuration prend souvent beaucoup plus de temps que l'étape de compilation proprement dite car elle ./configure
effectue les tests un par un, tout en make -j
s'exécutant gcc
ainsi que d'autres commandes en parallèle.
Je pense que c'est un énorme gaspillage de ressources que de laisser les 11 cœurs restants inactifs la plupart du temps en attendant la fin du ralentissement ./configure
. Pourquoi doit-il effectuer les tests de manière séquentielle? Chaque test dépend-il les uns des autres? Je peux me tromper, mais il semble que la majorité d'entre eux soient indépendants.
Plus important encore, existe-t-il des moyens d'accélérer ./configure
?
Edit: Pour illustrer la situation, voici un exemple avec GNU Coreutils
cd /dev/shm
rm -rf coreutils-8.9
tar -xzf coreutils-8.9.tar.gz
cd coreutils-8.9
time ./configure
time make -j24
Résultats:
# For `time ./configure`
real 4m39.662s
user 0m26.670s
sys 4m30.495s
# For `time make -j24`
real 0m42.085s
user 2m35.113s
sys 6m15.050s
Avec coreutils-8.9 , ./configure
prend 6 fois plus longtemps que make
. Bien que vous ./configure
utilisiez moins de temps CPU (regardez les temps "utilisateur" et "sys"), cela prend beaucoup plus de temps ("réel") car il n'est pas parallélisé. J'ai répété le test plusieurs fois (avec les fichiers pertinents restant probablement dans le cache mémoire) et les délais sont à moins de 10%.