Subversion Repositories svn LFS-FR

Rev

Rev 1075 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1075 jmengual 1
AUTEUR :		Jim Gifford <lfs-hints at jg555.com>
2
		A l'origine par Gerard Beekmans < gerard at linuxfromscratch.org >
3
		A l'origine par Thomas -Balu-Walter < tw at itreff.de >
4
		A l'origine par Eric Olinger <eric at supertux.com> optimization2.txt
5
 
6
DATE :		30-10-2003
7
 
8
DATE DE TRADUCTION :    29-05-2009
9
 
1079 jmengual 10
LICENCE :	GNU Free Documentation License Version 1.2
1075 jmengual 11
 
12
SYNOPSIS :	Optimisation du compilateur
13
 
14
DESCRIPTION :	Cette astuce joue le rôle d'un guide sur la marche à suivre ou
15
sur ce qu'il ne faut pas faire à propos des optimisations du compilateur.
16
 
17
PREREQUIS :	Aucun
18
 
19
ASTUCE :
20
 
21
L'origine de ce texte est la version 2.4.3 du livre LFS - Chapitre 6. Je l'ai
22
modifié un peu pour créer cette astuce.
23
 
24
La plupart des programmes et des bibliothèques sont compilés par défaut avec le
25
niveau d'optimisation 2 (les options gcc sont -g et -O2) et pour un processeur
26
particulier. Sur un système Intel, les logiciels sont compilés par défaut pour
27
les processeurs i386. Si vous ne souhaitez pas exécuter de logiciels sur une
28
autre machine que la vôtre, vous pourriez vouloir changer les options du
29
compilateur par défaut pour qu'ils soient compilés avec un niveau d'optimisation
30
plus élevé et que le code généré soit spécifique à votre architecture.
31
 
32
Il y a plusieurs façons de modifier les options du compilateur par défaut. Une
33
de ces façons est d'éditer tous les fichiers Makefile que vous pouvez trouver
34
dans un paquet, d'y chercher les variables CFLAGS et CXXFLAGS (un paquet bien
35
conçu utilisera la variable CFLAGS pour définir les options du compilateur gcc
36
et CXXFLAGS pour les options du compilateur g++) et de changer leur valeur. Des
37
paquets comme binutils, gcc, glibc et d'autres contiennent de nombreux fichiers
38
Makefile dans de nombreux sous-répertoires, cela pourrait prendre beaucoup de
39
temps. Au lieu de ça, il y a une façon plus simple de faire les choses : créer
40
les variables d'environnement CFLAGS et CXXFLAGS. La plupart des scripts configure
41
lisent les variables CFLAGS et CXXFLAGS et les utilisent dans les
42
fichiers Makefile. Certains paquets ne suivent pas cette convention et
43
nécessitent d'être édités à la main.
44
 
45
Pour initialiser ces variables, vous pouvez exécuter les commandes suivantes
46
dans bash (ou les ajouter à votre .bashrc si vous voulez qu'elles soient
47
présentes tout le temps) :
48
 
49
    export CFLAGS="-O3 -march=<architecture>" &&
50
    CXXFLAGS=$CFLAGS
51
 
52
C'est un ensemble minimal d'optimisation qui marche sur la plupart des systèmes.
53
L'option march compilera les binaires avec des instructions spécifiques pour le
54
processeur que vous avez précisé. Ceci signifie que vous ne pourrez pas copier ce
55
binaire sur un processeur d'une gamme inférieure et l'exécuter. Ceci pourra soit
56
être peu fiable ou alors ne marchera pas du tout (ça donnera des erreurs comme
57
"Illegal Instruction, core dumped"). Vous devriez lire la page Info de GCC pour
58
trouver d'autres drapeaux d'optimisation. Dans la variable d'environnement
59
ci-dessus, vous devez remplacer <architecture> par un identifiant de processeur
60
approprié comme i586, i686, powerpc ou autres. Je suggère de jetter un coup
61
d'oeil au document gcc-manual disponible sur
62
http://gcc.gnu.org/onlinedocs/gcc_toc.html, section "Hardware Models and
63
Configurations".
64
 
65
/*
66
 * Note de l'éditeur
67
 * "Reboant" a laissé une note sur le fait que l'utilisation de -Os
68
 * (Optimisation pour la taille) montre des résultats incroyablement bons. Si
69
 * vous voulez des binaires de petite taille plutôt qu'un temps d'exécution
70
 * rapide, vous pouvez vouloir jeter un coup d'oeil à cela.
71
 */
72
 
73
Gardez en tête que si vous trouvez un paquet qui ne se compile pas ou qui
74
renvoie des erreurs comme "erreur de segmentation, core dumped", cela a certainement
75
à voir avec les optimisations du compilateur. Essayez d'abaiser le niveau
76
d'optimisation en remplaçant -O3 par -O2. Si cela ne marche pas, essayez -O ou
77
laissez tout tel quel. Essayez aussi de changer l'option -march. Les
78
compilateurs sont très sensibles à certains matériels. Une mémoire défectueuse
79
peut causer des problèmes de compilation quand des niveaux d'optimisation
80
élevés, comme -O3, sont utilisés. Le fait que je n'aie pas de problèmes en
81
compilant tous mes paquets avec -O3 ne signifie pas que vous n'aurez pas de
82
problèmes. Un autre problème peut être la version de Binutils installée sur
83
votre système qui cause souvent des problèmes de compilation dans Glibc (ceci
84
peut être observé surtout avec RedHat car RedHat utilise souvent des logiciels
85
en version béta qui ne sont pas toujours très stables).
86
 
87
"RedHat aime flirter avec le risque mais on vous laisse prendre le risque"
88
("RedHat likes living on the bleeding edge, but leaves the bleeding up to you")
89
(Citation d'une personne sur la liste de diffusion lfs-discuss).
90
 
91
DEFINITIONS DES DRAPEAUX :
92
 
93
Pour plus d'informations sur les drapeaux d'optimisation du compilateur,
94
regardez les pages sur la commande gcc présente dans les docs en ligne de GCC
95
3.3.1 :
96
 
97
http://gcc.gnu.org/onlinedocs/gcc-3.3.1/gcc/Optimize-Options.html#Optimize%20Options
98
http://gcc.gnu.org/onlinedocs/gcc-3.3.1/gcc/i386-and-x86-64-Options.html#i386%20and%20x86-64%20Options
99
 
100
-s
101
        Une option de l'éditeur de liens qui supprime du binaire
102
        toutes les tables de symboles et les informations de repositionnement.
103
 
104
-O3
105
        Ce drapeau initialise le niveau d'optimisation pour le binaire.
106
                3	Le niveau le plus haut, du code machine spécifique est
107
                    engendré. Ajoute auto-magiquement les drapeaux
108
                    -finline-functions et -frename-registers.
109
                2   La plupart des Makefile spécifient ceci par défaut, procèdent
110
                    à toutes les optimisations supportées qui n'impliquent pas de
111
                    compromis temps-mémoire. Ajoute le drapeau -fforce-mem
112
                    auto-magiquement.
113
                1  	Un minimum d'optimisations sont effectuées. C'est ainsi par défaut
114
                    si rien n'est spécifié.
115
 
116
                s   Comme O2 mais fait des optimisations supplémentaires pour
117
                    la taille.
118
 
119
-fomit-frame-pointer
120
        Dit au compilateur de ne pas sauvegarder le pointeur de frame dans un
121
        registre pour les fonctions qui n'en ont pas besoin. Ceci supprime les
122
        instructions de sauvegarde, d'initialisation et de restauration des
123
        pointeurs de frame et libère un registre supplémentaire pour de
124
        nombreuses fonctions. Cela rend le débogage impossible sur certaines
125
        machines.
126
 
127
-march=pentium3
128
        Définit le jeu d'instructions à utiliser lors de la compilation. -mpcu
129
        est implicitement identique à -march quand seul -march est spécifié.
130
                i386            Processeur Intel 386
131
                i486            Processeur Intel/AMD 486
132
                pentium         Processeur Intel Pentium
133
                pentiumpro      Processeur Intel Pentium Pro
134
		        pentium2		Processeur Intel PentiumII/Celeron
135
		        pentium3		Processeur Intel PentiumIII/Celeron
136
                pentium4        Processeur Intel Pentium 4/Celeron
137
                k6              Processeur AMD K6
138
		        k6-2			Processeur AMD K6-2
139
		        K6-3			Processeur AMD K6-3
140
                athlon          Processeur AMD Athlon/Duron
141
		        athlon-tbird	Processeur AMD Athlon Thunderbird
142
		        athlon-4		Processeur AMD Athlon Version 4
143
		        athlon-xp		Processeur AMD Athlon XP
144
		        athlon-mp		Processeur AMD Athlon MP
145
		        winchip-c6		Processeur Winchip C6
146
		        winchip2		Processeur Winchip 2
147
		        c3			    Processeur VIA C3 Cyrix
148
 
149
-mmmx
150
-msse
151
-msse2
152
-m3dnow
153
        Ces options activent ou désactivent l'utilisation des fonctions intégrées
154
        qui permettent un accès direct aux extensions MMX, SSE, 3Dnow du jeu
155
        d'instructions.
156
 
157
LIENS SUR L'OPTIMISATION :
158
 
159
Drapeaux fiables à utiliser avec Gentoo 1.4
160
http://www.freehackers.org/gentoo/gccflags/flag_gcc3.html
161
 
162
Sécuriser & Optimiser Linux : la solution ultime 2.0
163
http://www.openna.com/products/books/sol/solus.php
164
 
165
EXPERIENCE PERSONNELLE :
166
 
167
J'ai utilisé tous les niveaux d'optimisation possibles, mais à ma déception, les
168
résultats varient suivant les paquets. Utiliser -O(un chiffre) avec GCC 3.3.1
169
peut donner des résultats imprévisibles.
170
 
171
Vous pouvez voir certains de ces résultats imprévisibles dans les bogues suivants
172
envoyés à GCC :
173
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12590
174
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=10655
175
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=8440
176
 
177
VERSION:	1.2
178
 
179
HISTORIQUE DES CHANGEMENTS :
180
        1.2 Corrections de fautes de frappe
181
		1.1 Corrections de fautes de frappe et d'erreurs de copier-coller
182
		1.0 Adoption par Jim Gifford
183
 
184
 Vous pouvez consulter les nouvelles versions de ce document sur http://cvs.jg555.com/viewcvs.cgi/lfs-hints
185
 
186
HISTORIQUE DE LA TRADUCTION :
187
        29-05-2009 - Traduction de la version 1.2