Le tableau suivant résume les performances de différents compilateurs et options de compilation. Le test utilisé est l'émulateur PC bochs version 2.0.2, ecrit en C++, bootant une disquette d'installation NetBSD. L'élément de mesure est la fréquence du processeur reportée par le kernel NetBSD.
Les machines utilisées pour les mesures sont:
compilateur | processeur | options | résultat |
gcc3.3.3 | UltrasparcIII 1Ghz | -O | 2.32Mhz |
gcc3.3.3 | UltrasparcIII 1Ghz | -O3 -mcpu=v9 -mtune=ultrasparc3 | 2.86Mhz |
gcc3.3.3 | UltrasparcIII 1Ghz | -O3 -mcpu=v9 -mtune=ultrasparc3 -fbranch-probabilities | 2.96Mhz |
SUNWspro | UltrasparcIII 1Ghz | 2.29Mhz | |
SUNWspro | UltrasparcIII 1Ghz | -xO5 -native | 3.11Mhz |
SUNWspro | UltrasparcIII 1Ghz | -xO5 -native -xdepend=yes | 3.16Mhz |
SUNWspro | UltrasparcIII 1Ghz | -xO5 -native -xdepend=yes -xprofile=use | 3.31Mhz |
gcc3.3.2 | PIII 1Ghz | -O | 2.46Mhz |
gcc3.3.2 | PIII 1Ghz | -O3 -mcpu=pentium3 -march=pentium3 -mmmx | 2.87Mhz |
gcc3.3.2 | PIII 1Ghz | -O3 -mcpu=pentium3 -march=pentium3 -mmmx -fbranch-probabilities | 3.17Mhz |
Le compilateur et les options de compilation ont une influence certaine sur les performances du binaire résultant. On a tout interêt à faire quelque tests pour determiner les options les mieux adaptées au logiciel. Attention aux options spécifiques au CPU (-march de gcc, ou -native de SUNWspro), le binaire résultant peut ne pas tourner sur un processeur plus ancien (par exemple les binaires compilés -native ou mtune=ultrasparc3 sur un UltraSparc3 ne fonctionneront pas sur UltraSparc 1 ou 2).
Même si gcc a fait des progrès, il n'est pas encore au niveau du compilateur SUNWspro sur sparc.
La collecte de statistiques permet d'indiquer au compilateur le comportement dynamique du programme qui peut ainsi effectuer des optimisations supplémentaires sur les prédictions de branchement et le placement des données en mémoire. Cela consiste à compiler le programme avec une options ajoutant du code de collecte de statistiques, et à faire tourner le programme en utilisation normale (attention, le code de collecte ralentit l'exécution de manière significative). Cela va créer des fichiers de statistiques, qui seront ensuite utilisés par le compilateur lors de la compilation suivante. Attention, il faut absolument utiliser les même options de compilation (en particulier d'optimisation) pour la collecte de statistiques et l'utilisation des statistiques. Il ne faut donc changer, entre deux compilations, que l'option permettant de passer de la collecte à l'utilisation.
Pour gcc3.3.2 et 3.3.3, l'option permettant de collecter les statistiques est -fprofile-arcs. Un programme compilé avec cette options générera un fichier <sourcename>.da pour chaque fichier source, dans le répertoire ou se trouve le fichier source. L'option -fbranch-probabilities indique au compilateur d'utiliser ces fichiers .da lors des phases d'optimisations.
Pour SUNWspro, l'option -xprofile=collect lors des phases de compilation et d'édition de lien permet d'activer la collecte de statistiques sur le programme, dans un fichier <name>.profile/feedback, <name> étant le nom de l'exécutable. Ces statistiques seront ensuite utilisées si -xprofile=use est spécifié lors des phases de compilation et d'edition de liens.