Optimisation du GCC

Gazette Linux n°88 Mars 2003

par Justin Piszcz (Copyright © 2003) jpiszcz@lucidpixels.com

traduction par Chiev Christian(tous droits réservés) christian.chiev@gmail.com


Justin Piszcz


J'ai un processeur Pentium 3 866MHZ. J'ai commencé à réfléchir après avoir lu l'article "freshmeat" sur l'optimisation GCC il y a quelque jour.
Je me suis donc posé la question suivant: A quelle vitesse le gcc compilerait le noyau si le gcc lui-meme était optimisé?
J'ai choisi le temps de compilation du noyau comme banc d'essai, parce que je pense que c'est un bon banc d'essai, et beaucoup d'autre personne l'utilisent également comme banc d'essai pour la performance du systeme. A un moment ou un autre, une grande partie des utilisateurs de linux devront également franchir le pas et compiler le noyau, donc j'ai pensé que je devrai faire un banc d'essai sur quelque chose d'utile et donner aux personnes une idée générale du temps qu'il faut pour compiler sans optimisation.
Mon test est donc constitué de la maniére suivante:

  1. Execution de 10 compilations du noyau et calcul du temps moyen.
  2. Le noyau en question est la dernière version stable du noyau Linux.
  3. Le GCC utilisé, pour les tests, est le dernier GCC stable.

Avec un compilateur non optimisé, (configure;make;make install)
Temps moyen de 10 'make bzImage':
Temps: 12.42 minutes (762 secondes)

Avec un compilateur optimisé, j'ai spécifiquement utilisé:

-O3 -pipe -fomit-frame-pointer -funroll-loops -march=pentium3 -mcpu=pentium3
-mfpmath=sse -mmmx -msse
Dans le cas où vous vous demandez comment le faire, c'est dans le FAQ de l'archive du GCC. Les lines suivantes sont ceux que j'ai utilisé:
   ./configure ; make BOOT_CFLAGS="optimization flags" bootstrap ; make install
Temps moyen de 10 'make bzImage'
Temps: 9.31 minutes (571 seconds)

J'ai compilé presque tous ce que je pouvais exécuté sur ma machine linux. J'ai utilisé un gestionnaire de paquet s'appelant relink pour gérer l'ensemble de mes paquets installés.

Optimisation du compilateur seul:
offre un augmentation de la vitesse de: 33% (ou 3:11 minutes, 191 seconds plus rapide). Cela peut paraitre faible, mais pour un gros probleme de compilation, cela reduira significativement le temps de compilation faisant éxécuter ces QT & Mozilla plus rapidement.

L'actuel test consiste à:

cd /usr/src/Linux

for i in `seq 1 10`

do

  make dep

  make clean

  /usr/bin/time make bzImage 2>> /home/war/log

done
Dans le cas où vous vous poseriez la question sur le temps passé par compilation et de combien le processeur est utilisé, vous les trouverez ci-dessous:
Pas d'optimisation (Standard GCC-3.2.2):

   720.88user 34.54system 12:43.97elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k

   719.06user 35.69system 12:42.09elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   719.14user 34.37system 12:39.64elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   720.52user 36.42system 12:46.68elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k

   721.07user 33.86system 12:41.59elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   718.95user 35.65system 12:41.31elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   721.83user 36.26system 12:51.54elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k

   720.29user 34.18system 12:40.63elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   719.14user 34.80system 12:39.19elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   721.16user 33.88system 12:41.93elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k


Compilateur optimisé (GCC-3.2.2 w/ "-O3 -pipe -fomit-frame-pointer -funroll-loops
-march=pentium3 -mcpu=pentium3 -mfpmath=sse -mmmx -msse")

   532.09user 33.62system 9:32.76elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k

   531.57user 32.92system 9:29.25elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   532.99user 33.12system 9:31.18elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   532.58user 33.16system 9:30.57elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   533.18user 32.96system 9:31.34elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   534.01user 32.21system 9:32.50elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k

   532.59user 33.41system 9:31.56elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   532.76user 33.68system 9:32.01elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   534.19user 32.54system 9:31.92elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   534.11user 32.76system 9:32.40elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
Note: Je realise quelques-unes des optimisations, plus spécifiquement (-fomit-frame-pointer) qui peut ne pas être une bonne fonctionnalité d'optimisation, en particulier pour le débogage.
Cependant mon but est d'augmenter la performance du compilateur and ne pas me préoccuper du débogage.

 


Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux

Cet article est publié selon les termes de la Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site http://www.traduc.org/Gazette_Linux

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.