Gentoo Archives: gentoo-commits

From: "Marion Age (titefleur)" <titefleur@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo commit in xml/htdocs/doc/fr: gcc-optimization.xml metadoc.xml
Date: Tue, 04 Mar 2008 13:18:41
Message-Id: E1JWX2T-0005Hn-Q4@stork.gentoo.org
1 titefleur 08/03/04 13:18:37
2
3 Modified: metadoc.xml
4 Added: gcc-optimization.xml
5 Log:
6 new french translation : gcc-optimization
7
8 Revision Changes Path
9 1.137 xml/htdocs/doc/fr/metadoc.xml
10
11 file : http://sources.gentoo.org/viewcvs.py/gentoo/xml/htdocs/doc/fr/metadoc.xml?rev=1.137&view=markup
12 plain: http://sources.gentoo.org/viewcvs.py/gentoo/xml/htdocs/doc/fr/metadoc.xml?rev=1.137&content-type=text/plain
13 diff : http://sources.gentoo.org/viewcvs.py/gentoo/xml/htdocs/doc/fr/metadoc.xml?r1=1.136&r2=1.137
14
15 Index: metadoc.xml
16 ===================================================================
17 RCS file: /var/cvsroot/gentoo/xml/htdocs/doc/fr/metadoc.xml,v
18 retrieving revision 1.136
19 retrieving revision 1.137
20 diff -u -r1.136 -r1.137
21 --- metadoc.xml 3 Mar 2008 13:14:47 -0000 1.136
22 +++ metadoc.xml 4 Mar 2008 13:18:37 -0000 1.137
23 @@ -1,5 +1,5 @@
24 <?xml version="1.0" encoding="UTF-8"?>
25 -<!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/fr/metadoc.xml,v 1.136 2008/03/03 13:14:47 cam Exp $ -->
26 +<!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/fr/metadoc.xml,v 1.137 2008/03/04 13:18:37 titefleur Exp $ -->
27 <!DOCTYPE metadoc SYSTEM "/dtd/metadoc.dtd">
28
29 <metadoc lang="fr" parent="/doc/en/metadoc.xml">
30 @@ -440,7 +440,7 @@
31 <file id="zsh">/doc/fr/zsh.xml</file>
32 <file id="change-chost">/doc/fr/change-chost.xml</file>
33 <file id="xfce-config">/doc/fr/xfce-config.xml</file>
34 - <file id="gcc-optimization">/doc/en/gcc-optimization.xml</file>
35 + <file id="gcc-optimization">/doc/fr/gcc-optimization.xml</file>
36 <file id="vpnc-howto">/doc/en/vpnc-howto.xml</file>
37 <file id="qa-autofailure">/proj/fr/qa/autofailure.xml</file>
38 <file id="qa-automagic">/proj/fr/qa/automagic.xml</file>
39
40
41
42 1.1 xml/htdocs/doc/fr/gcc-optimization.xml
43
44 file : http://sources.gentoo.org/viewcvs.py/gentoo/xml/htdocs/doc/fr/gcc-optimization.xml?rev=1.1&view=markup
45 plain: http://sources.gentoo.org/viewcvs.py/gentoo/xml/htdocs/doc/fr/gcc-optimization.xml?rev=1.1&content-type=text/plain
46
47 Index: gcc-optimization.xml
48 ===================================================================
49 <?xml version='1.0' encoding='UTF-8'?>
50 <!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
51 <!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/fr/gcc-optimization.xml,v 1.1 2008/03/04 13:18:37 titefleur Exp $ -->
52
53 <guide link="/doc/fr/gcc-optimization.xml">
54 <title>Guide d'optimisation de la compilation</title>
55
56 <author title="Auteur">
57 <mail link="nightmorph@g.o">Joshua Saddler</mail>
58 </author>
59 <author title="Traducteur">
60 <mail link="titefleur@g.o">Marion Agé</mail>
61 </author>
62
63 <abstract>
64 Ce guide constitue une introduction à l'optimisation du code compilé en
65 utilisant des variables CFLAGS et CXXFLAGS sûres de manière sensée. Il décrit
66 également la théorie sur laquelle se base l'optimisation en général.
67 </abstract>
68
69 <!-- The content of this document is licensed under the CC-BY-SA license -->
70 <!-- See http://creativecommons.org/licenses/by-sa/2.5 -->
71 <license/>
72
73 <version>1.8</version>
74 <date>2007-11-09</date>
75
76 <chapter>
77 <title>Introduction</title>
78 <section>
79 <title>Que sont les CFLAGS et les CXXFLAGS&nbsp;?</title>
80 <body>
81
82 <p>
83 Les CFLAGS et CXXFLAGS sont des variables d'environnement utilisées pour dire au
84 compilateur GNU Compiler Collection, <c>GCC</c>, quels genres de paramètres
85 utiliser quand il compile le code source. Les CFLAGS s'appliquent au code écrit
86 en C alors que les CXXFLAGS s'appliquent au code écrit en C++.
87 </p>
88
89 <p>
90 Ces variables peuvent permettre de diminuer le nombre de messages de débogage
91 d'un programme, d'augmenter les niveaux d'alertes d'erreurs et, bien sûr,
92 d'optimiser le code obtenu. Le <uri
93 link="http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Invoking-GCC.html#Invoking-GCC">manuel
94 de GCC</uri> maintient une liste exhaustive des options disponibles et de leur
95 utilité.
96 </p>
97
98 </body>
99 </section>
100 <section>
101 <title>Comment sont-elles utilisées&nbsp;?</title>
102 <body>
103
104 <p>
105 Les CFLAGS et CXXFLAGS peuvent être utilisées de deux façons. La première est de
106 les définir pour chaque programme avec les fichiers Makefiles générés par
107 <c>automake</c>.
108 </p>
109
110 <p>
111 Toutefois, cette méthode ne doit pas être utilisée lors de l'installation de
112 paquets installés depuis l'arbre Portage. À la place de cela, réglez vos
113 variables CFLAGS et CXXFLAGS dans le fichier <path>/etc/make.conf</path>. De
114 cette façon, tous les paquets qui seront compilés utiliseront les options que
115 vous avez spécifiées.
116 </p>
117
118 <pre caption="Les CFLAGS dans le /etc/make.conf">
119 CFLAGS="-march=athlon64 -O2 -pipe"
120 CXXFLAGS="${CFLAGS}"
121 </pre>
122
123 <p>
124 Comme vous pouvez le voir, la variable CXXFLAGS est paramétrée pour utiliser
125 toutes les options présentes dans la variable CFLAGS. Généralement, ceci vous
126 suffira et ne créera pas de problème. Vous ne devriez pas avoir besoin de
127 spécifier des options supplémentaires dans votre variable CXXFLAGS.
128 </p>
129
130 </body>
131 </section>
132 <section>
133 <title>Idées fausses</title>
134 <body>
135
136 <p>
137 Bien que les variables CFLAGS et CXXFLAGS peuvent se révéler très utiles pour
138 obtenir du code source plus léger et/ou des binaires plus rapides, elles peuvent
139 aussi détériorer les fonctionnalités de votre code, augmenter son poids,
140 ralentir son temps d'exécution, et même causer des erreurs de compilation&nbsp;!
141 </p>
142
143 <p>
144 Les CFLAGS ne sont pas magiques&nbsp;; elles ne vont pas rendre automatiquement
145 votre système plus rapide ou vos binaires plus légers. Le fait d'ajouter encore
146 et encore des options pour essayer d'optimiser votre système est le meilleur
147 moyen d'obtenir des erreurs. À partir d'un moment, vous serez confronté à la loi
148 des rendements décroissants.
149 </p>
150
151 <p>
152 Malgré les vantards que vous trouverez sur Internet, les CFLAGS et CXXFLAGS
153 aggressives sont de loin plus susceptibles de nuire à vos programmes que de les
154 améliorer. Gardez à l'esprit que ces options existent en premier lieu pour être
155 utilisées à des endroits spécifiques et à des fins spécifiques. Le fait qu'une
156 variable CFLAG particulière soit bonne pour un fragment de code ne signifie pas
157 qu'elle soit adaptée à la compilation de tout ce que vous aurez installé sur
158 votre machine&nbsp;!
159 </p>
160
161 </body>
162 </section>
163 <section>
164 <title>Prêt&nbsp;?</title>
165 <body>
166
167 <p>
168 Maintenant que vous êtes informé des risques encourus, jetons un coup d'œil à
169 quelques options sûres et raisonnables à utiliser pour l'optimisation de votre
170 ordinateur. Cela vous tiendra en bonne posture et vous fera aimer des
171 développeurs la prochaine fois que vous rapporterez un problème sur le <uri
172 link="http://bugs.gentoo.org">Bugzilla</uri>. (Les développeurs vont
173 généralement vous prier de bien vouloir recompiler un paquet avec un minimum de
174 CFLAGS afin de voir si le problème persiste. Souvenez-vous, les options
175 agressives peuvent ruiner le code.)
176 </p>
177
178 </body>
179 </section>
180 </chapter>
181 <chapter>
182 <title>Optimisation</title>
183 <section>
184 <title>Les bases</title>
185 <body>
186
187 <p>
188 Le but de l'utilisation des CFLAGS et CXXFLAGS est de créer un code conçu
189 spécialement pour votre système&nbsp;; celui-ci devrait fonctionner parfaitement
190 tout en étant léger et rapide, si possible. Quelques fois ces conditions sont
191 mutuellement exclusives, donc nous allons nous en tenir aux combinaisons connues
192 pour fonctionner correctement. Idéalement, ce sont les meilleures disponibles
193 quelque soit l'architecture du processeur. Nous expliquerons ce que sont les
194 options agressives plus tard ainsi vous saurez ce à quoi il faut faire
195 attention. Nous ne parlerons pas de chaque option listée dans le manuel de
196 <c>GCC</c> (il y en a des centaines), mais nous couvrirons les options
197 classiques, les plus courantes.
198 </p>
199
200 <note>
201 À tout moment si vous n'êtes pas sûr de l'utilité d'une option, référez-vous au
202 chapitre approprié du <uri
203 link="http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Optimize-Options.html#Optimize-Options">manuel
204 de GCC</uri>. Si vous êtes toujours dubitatif, essayez Google ou jetez un œil
205 aux <uri link="http://gcc.gnu.org/lists.html">listes de diffusion</uri> de
206 <c>GCC</c>.
207 </note>
208
209 </body>
210 </section>
211 <section>
212 <title>-march</title>
213 <body>
214
215 <p>
216 La première et la plus importante des options est <c>-march</c>. Elle indique au
217 compilateur quel code il doit produire pour <uri
218 link="http://fr.wikipedia.org/wiki/Microarchitecture">l'architecture</uri> (ou
219 <e>arch</e>) de votre processeur&nbsp;: elle indique qu'il doit fournir un code
220 pour un certain type de processeur. Les différents processeurs ont des capacités
221 différentes, supportent des jeux d'instructions différents et exécutent le code
222 de façon différente. L'option <c>-march</c> va permettre de signaler au
223 compilateur quel code créer spécifiquement pour votre processeur, avec toutes
224 ses capacités, ses fonctionnalités, ses jeux d'instructions, ses gorges
225 (NdT&nbsp;: "quirks"), et ainsi de suite.
226 </p>
227
228 <p>
229 Même si la variable CHOST dans le <path>/etc/make.conf</path> spécifie
230 l'architecture générale utilisée, <c>-march</c> devrait toujours être renseignée
231 pour que les programmes puissent être optimisés pour votre processeur en
232 particulier. Les processeurs x86 et x86-64 (entre autres) doivent utiliser
233 l'option <c>-march</c>.
234 </p>
235
236 <p>
237 Quel type de processeur avez-vous&nbsp;? Pour le savoir, tapez ceci&nbsp;:
238 </p>
239
240 <pre caption="Information du CPU">
241 $ <i>cat /proc/cpuinfo</i>
242 </pre>
243
244 <p>
245 À présent, voyons l'option <c>-march</c> en action. Cet exemple est paramétré
246 pour un vieux processeur Pentium III&nbsp;:
247 </p>
248
249 <pre caption="/etc/make.conf: Pentium III">
250 CFLAGS="-march=pentium3"
251 CXXFLAGS="${CFLAGS}"
252 </pre>
253
254 <p>
255 Voici un autre exemple pour un processeur AMD 64&nbsp;bits&nbsp;:
256 </p>
257
258 <pre caption="/etc/make.conf: AMD64">
259 CFLAGS="-march=athlon64"
260 CXXFLAGS="${CFLAGS}"
261 </pre>
262
263 <p>
264 Les options <c>-mtune</c> et <c>-mcpu</c> sont également disponibles. Elles ne
265 sont normalement utilisées que s'il n'y a pas d'option <c>-march</c> disponible
266 pour votre processeur&nbsp;; certaines architectures de processeurs peuvent
267 avoir besoin de <c>-mtune</c> ou même de <c>-mcpu</c>. Malheureusement, le
268 comportement de <c>GCC</c> n'est pas vraiment cohérent avec la façon dont chaque
269 option se comporte d'une architecture à l'autre.
270 </p>
271
272 <p>
273 Sur les processeurs x86 et x86-64, l'option <c>-march</c> va générer du code
274 spécifique à tous les processeurs en utilisant tous ses jeux d'instructions
275 disponibles et les bonnes interfaces d'applications binaires (NdT&nbsp;: ABI,
276 pour «&nbsp;Application Binary Interface&nbsp;»)&nbsp;; il n'y aura pas de
277 problème de compatibilité ascendante pour les processeurs plus vieux ou
278 différents. Si vous n'avez pas besoin d'exécuter du code sur d'autres systèmes
279 que celui sur lequel vous utilisez Gentoo, continuez d'utiliser <c>-march</c>.
280 Vous ne devriez prendre en considération <c>-mtune</c> que si vous devez générer
281 du code pour des vieux processeurs tels que les i386 et i486. L'option
282 <c>-mtune</c> produit du code plus générique que <c>-march</c>&nbsp;; même s'il
283 va harmoniser le code pour un processeur spécifique, il ne prendra pas compte
284 des jeux d'instructions disponibles et de l'ABI. N'utilisez pas <c>-mcpu</c> sur
285 les systèmes x86 ou x86-64, car c'est déconseillé pour ces architectures.
286 </p>
287
288 <p>
289 Seuls les processeurs non-x86/x86-64 (tels que Sparc, Alpha, et PowerPC) peuvent
290 avoir besoin de <c>-mtune</c> ou de <c>-mcpu</c> au lieu de <c>-march</c>. Sur
291 ces architectures, <c>-mtune</c>/<c>-mcpu</c> vont parfois se comporter
292 simplement comme <c>-march</c> (sur x86/x86-64)... mais avec un nom d'option
293 différent. De nouveau, le comportement de <c>GCC</c> et le nommage des options
294 ne sont pas homogènes selon les architectures, donc assurez-vous de bien lire le
295 <uri
296 link="http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Submodel-Options.html#Submodel-Options">manuel</uri>
297 de <c>GCC</c> pour déterminer celles que vous devez utiliser sur votre système.
298 </p>
299
300 <note>
301 Pour plus de suggestions de paramètres pour les options
302 <c>-march</c>/<c>-mtune</c>/<c>-mcpu</c>, veuillez lire le chapitre 5 du
303 <uri link="/doc/fr/handbook/">Manuel d'installation de Gentoo</uri> approprié à
304 votre architecture. De même, lisez la liste des <uri
305 link="http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Submodel-Options.html#Submodel-Options">options
306 spécifiques</uri> aux architectures dans le manuel de <c>GCC</c>, qui détaillent
307 davantage les différences entre <c>-march</c>, <c>-mcpu</c>, et <c>-mtune</c>.
308 </note>
309
310 </body>
311 </section>
312 <section>
313 <title>-O</title>
314 <body>
315
316 <p>
317 La variable suivante est <c>-O</c>. Elle contrôle le niveau global
318 d'optimisation. Plus vous augmentrez le niveau d'optimisation, plus la
319 compilation du code prendra du temps et utilisera de la mémoire.
320 </p>
321
322 <p>
323 Il y a cinq paramètres <c>-O</c>&nbsp;: <c>-O0</c>, <c>-O1</c>, <c>-O2</c>,
324 <c>-O3</c>, et <c>-Os</c>. Vous ne devrez utiliser qu'un seul d'entre eux dans
325 le fichier <path>/etc/make.conf</path>.
326 </p>
327
328 <p>
329 À l'exception de <c>-O0</c>, les paramètres <c>-O</c> activent chacun plusieurs
330 options supplémentaires, donc assurez-vous de bien lire le chapitre sur les
331 <uri
332 link="http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Optimize-Options.html#Optimize-Options">options
333 d'optimisation</uri> du manuel de <c>GCC</c> pour savoir quelles options sont
334 activées à chaque niveau <c>-O</c>, ainsi que pour obtenir quelques explications
335 sur ce qu'elles font.
336 </p>
337
338 <p>
339 Examinons chaque niveau d'optimisation&nbsp;:
340 </p>
341
342 <ul>
343 <li>
344 <c>-O0</c>: Ce niveau (la lettre "O" suivie d'un zéro) désactive entièrement
345 l'optimisation, c'est le niveau par défaut si aucun niveau <c>-O</c> n'est
346 spécifié dans les variables CFLAGS ou CXXFLAGS. Votre code ne sera pas
347 optimisé&nbsp;: ce n'est généralement pas ce qui est voulu.
348 </li>
349 <li>
350 <c>-O1</c>: C'est le niveau le plus classique d'optimisation. Le compilateur
351 va essayer de générer un code plus rapide et plus léger sans prendre plus de
352 temps à compiler. C'est relativement classique, mais cela devrait
353 fonctionner dans tous les cas.
354 que le travail soit fait.
355 </li>
356 <li>
357 <c>-O2</c>: Un étape au-dessus du <c>-O1</c>. C'est le niveau
358 <e>recommandé</e> d'optimisation sauf si vous avez des besoins spécifiques.
359 Le niveau <c>-O2</c> va activer quelques options en plus de celles du
360 <c>-O1</c>. Avec le niveau <c>-O2</c>, le compilateur va tenter d'augmenter
361 les performances du code sans faire de compromis sur la taille et sans
362 prendre trop de temps à compiler.
363 </li>
364 <li>
365 <c>-O3</c>: Il s'agit du plus haut niveau d'optimisation possible mais aussi
366 du plus risqué. Le temps de compilation sera plus long avec cette option qui
367 en fait ne <e>devrait pas être utilisée de façon globale avec <c>GCC</c>
368 4.x</e>. Le comportement de <c>GCC</c> a changé de façon significative
369 depuis la version 3.x. Dans la version 3.x, <c>-O3</c> a montré que son
370 utilisation conduisait à des temps d'exécution marginaux plus rapides
371 qu'avec <c>-O2</c>, mais ce n'est plus le cas avec <c>GCC</c> 4.x. Compiler
372 tous vos paquets avec <c>-O3</c> <e>produira</e> des plus gros binaires qui
373 demanderont plus de mémoire et va augmenter de façon significative les
374 étranges erreurs de compilation ou provoquer des comportements inattendus
375 pour les programmes (y compris des erreurs). Les inconvénients sont plus
376 nombreux que les avantages&nbsp;; souvenez-vous du principe des rendements
377 décroissants. <b>L'utilisation du niveau <c>-O3</c> n'est pas recommandé
378 pour <c>GCC</c> 4.x.</b>
379 </li>
380 <li>
381 <c>-Os</c>: Ce niveau va optimiser votre code en taille. Il active toutes
382 les options du niveau <c>-O2</c> qui n'influent pas sur la taille du code
383 généré. Il peut être utile pour les machines qui ont une taille très limitée
384 d'espace libre sur le disque dur et/ou qui ont des processeurs avec une
385 petite taille de cache. Toutefois, ce niveau peut tout à fait causer
386 d'autres problèmes, c'est pourquoi il est filtré par beaucoup d'ebuilds dans
387 l'arbre. L'utilisation de <c>-Os</c> n'est pas recommandé.
388 </li>
389 </ul>
390
391 <p>
392 Comme mentionné précédemment, le niveau <c>-O2</c> est le niveau requis pour
393 l'optimisation. Si certains paquets créent des erreurs de compilation,
394 assurez-vous que vous n'utilisez pas <c>-O3</c>. Comme option de repli, essayez
395 de régler vos variables CFLAGS et CXXFLAGS a un niveau d'optimisation plus bas,
396 tel que <c>-O1</c> ou même <c>-O0 -g2 -ggdb</c> (pour les rapports d'erreurs et
397 la vérification des problèmes si possible) et recompilez le paquet.
398 </p>
399
400 </body>
401 </section>
402 <section>
403 <title>-pipe</title>
404 <body>
405
406 <p>
407 Une option sûre et sympa à utiliser est <c>-pipe</c>. Cette option en fait n'a
408 pas d'effet sur le code généré, mais va accélerer le processus de compilation.
409 Elle dit au compilateur d'utiliser des tubes à la place des fichiers temporaires
410 pendant les différentes étapes de la compilation.
411 </p>
412
413 </body>
414 </section>
415 <section>
416 <title>-fomit-frame-pointer</title>
417 <body>
418
419 <p>
420 C'est une option très commune créée dans le but de réduire la taille du code
421 généré. Elle est active pour tous les niveaux de <c>-O</c> (à l'exception de
422 <c>-O0</c>) sur les architectures pour lesquelles faire cela ne va pas pas
423 interférer avec le débogage (tels que les x86-64), mais vous pourriez avoir
424 besoin de l'activer vous-même en l'ajoutant à vos options. Bien que le manuel du
425 compilateur GNU <c>GCC</c> ne spécifie pas toutes les architectures sur
426 lesquelles elle est active en utilisant <c>-O</c>, vous aurez besoin de
427 l'activer explicitement sur les architectures x86. Toutefois, l'utilisation de
428 cette option rendra le débogage difficile, voire impossible.
429 </p>
430
431 <p>
432 En particulier, cela rend le débogage des applications écrites en Java beaucoup
433 plus difficile, bien que Java ne soit pas le seul code affecté par l'utilisation
434 de cette option. Donc même si cette option peut aider, elle rend le débogage
435 plus délicat&nbsp;: les traçages en particulier seront inutiles. Toutefois, si
436 vous n'avez pas l'intention de faire trop de débogage de logiciels et que vous
437 n'avez pas ajouté d'autres CFLAGS en relation avec le débogage telles que
438 <c>-ggdb</c>, alors vous pouvez essayer d'utiliser <c>-fomit-frame-pointer</c>.
439 </p>
440
441 <impo>
442 Ne combinez <e>pas</e> <c>-fomit-frame-pointer</c> avec l'option similaire
443 <c>-momit-leaf-frame-pointer</c>. L'utilisation de cette dernière est obsolète,
444 <c>-fomit-frame-pointer</c> fait déjà son travail comme il faut. De plus,
445 <c>-momit-leaf-frame-pointer</c> a montré des impacts négatifs sur les
446 performances du code.
447 <!--
448 source for this info:
449 http://www.coyotegulch.com/products/acovea/aco5p4gcc40.html
450 -->
451 </impo>
452
453 </body>
454 </section>
455 <section>
456 <title>-msse, -msse2, -msse3, -mmmx, -m3dnow</title>
457 <body>
458
459 <p>
460 Ces options activent les jeux d'instructions <uri
461 link="http://fr.wikipedia.org/wiki/Streaming_SIMD_Extensions">SSE</uri>, <uri
462 link="http://fr.wikipedia.org/wiki/SSE2">SSE2</uri>, <uri
463 link="http://fr.wikipedia.org/wiki/SSE3">SSE3</uri>, <uri
464 link="http://fr.wikipedia.org/wiki/MMX_%28processeur%29">MMX</uri>, et <uri
465 link="http://fr.wikipedia.org/wiki/3DNow%21">3DNow!</uri> pour les architectures
466 x86 et x86-64. Elles sont pratiques principalement pour le multimédia, le jeu et
467 d'autres tâches de calcul à virgule flottante, bien qu'elles contiennent
468 plusieurs autres améliorations mathématiques. Ces jeux d'instructions se
469 trouvent dans les CPU les plus modernes.
470 </p>
471
472 <impo>
473 Assurez-vous de vérifier que votre processeur supporte ces options en exécutant
474 la commande <c>cat /proc/cpuinfo</c>. La sortie va inclure quelques jeux
475 d'instruction supplémentaires supportés. Notez que <b>pni</b> n'est qu'un nom
476 différent pour SSE3.
477 </impo>
478
479 <p>
480 Normalement vous n'avez pas besoin d'ajouter ces options dans le fichier
481 <path>/etc/make.conf</path> si vous utilisez la bonne option <c>-march</c> (par
482 exemple, <c>-march=nocona</c> implique <c>-msse3</c>). Il y a quelques
483 exceptions notables pour les nouveaux processeurs VIA et AMD64 qui supportent
484 des instructeurs non implicites avec <c>-march</c> (tel que SSE3). Pour les
485 processeurs comme ceux-là, vous devrez activer les options supplémentaires où il
486 faut après avoir regardé la sortie de <c>cat /proc/cpuinfo</c>.
487 </p>
488
489 <note>
490 Vous devriez regarder la <uri
491 link="http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options">liste</uri>
492 des options x86 et spécifiques aux x86-64 pour voir les jeux d'instructions qui
493 sont activés simplement par l'option du type de processeur. Si une instruction
494 est listée, alors vous n'avez pas besoin de la spécifier, elle sera activée en
495 utilisant le bon paramètre <c>-march</c>.
496 </note>
497
498 </body>
499 </section>
500 </chapter>
501 <chapter>
502 <title>Questions courantes sur l'optimisation</title>
503 <section>
504 <title>J'obtenais de meilleures performances avec -funroll-loops
505 -fomg-optimize&nbsp;!</title>
506 <body>
507
508 <p>
509 Non, vous <e>pensez</e> juste que c'était le cas parce que quelque vous a
510 persuadé que le fait de mettre plus d'options était une bonne chose. Les options
511 offensives vont seulement nuire à vos applications quand elles sont utilisées à
512 l'échelle du système. Même le <uri
513 link="http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Optimize-Options.html#Optimize-Options">manuel</uri>
514 de <c>GCC</c> dit que le fait d'utiliser les options <c>-funroll-loops</c> et
515 <c>-funroll-all-loops</c> provoque un alourdissement du code et le rend plus
516 lent à l'exécution. Pourtant, pour une raison quelconque, ces deux options,
517 ainsi que <c>-ffast-math</c>, <c>-fforce-mem</c>, <c>-fforce-addr</c>, et les
518 autres similaires, continuent à être très populaires chez les personnes qui
519 suivent une course à la vantardise.
520 </p>
521
522 <p>
523 La vérité sur ce sujet, c'est qu'il s'agit d'options dangereusement aggressives.
524 Jetez un œil sur les <uri link="http://forums.gentoo.org">forums de
525 Gentoo</uri> et au <uri link="http://bugs.gentoo.org">Bugzilla</uri> pour voir
526 ce que font ces options&nbsp;: rien de bon&nbsp;!
527 </p>
528
529 <p>
530 Vous n'avez pas besoin d'utiliser ces options de manière globale dans les
531 variables CFLAGS et CXXFLAGS. Elles ne feront que nuire à vos performances.
532 Elles peuvent vous faire croire que votre système est à la pointe et a de hautes
533 performances, mais elles ne feront rien d'autre que de gonfler votre code et
534 provoquer des bogues marqués INVALID ou WONTFIX.
535 </p>
536
537 <p>
538 Vous n'avez pas besoin d'options dangereuses telles que celles-ci. <b>Ne les
539 utilisez pas</b>. Collez aux options classiques&nbsp;: <c>-march</c>, <c>-O</c>,
540 et <c>-pipe</c>.
541 </p>
542
543 </body>
544 </section>
545 <section>
546 <title>Que dire au sujet des niveaux de l'option -O supérieurs à 3&nbsp;?</title>
547 <body>
548
549 <p>
550 Certains utilisateurs friment d'avoir de bien meilleures performances grâce à
551 l'utilisation de <c>-O4</c>, <c>-O9</c>, et plus encore, mais en réalité les
552 niveaux de l'option <c>-O</c> supérieurs à 3 n'ont aucun effet. Le compilateur
553 peut accepter des CFLAGS telles que <c>-O4</c>, mais en fait il ne va rien en
554 faire. Il n'optimise que pour <c>-O3</c>, rien de plus.
555 </p>
556
557 <p>
558 Besoin de plus de preuves&nbsp;? Regardez le <uri
559 link="http://gcc.gnu.org/viewcvs/trunk/gcc/opts.c?revision=124622&amp;view=markup">code
560 source</uri> de <c>GCC</c>&nbsp;:
561 </p>
562
563 <pre caption="Source code de -O">
564 if (optimize >= 3)
565 {
566 flag_inline_functions = 1;
567 flag_unswitch_loops = 1;
568 flag_gcse_after_reload = 1;
569 /* Allow even more virtual operators. */
570 set_param_value ("max-aliased-vops", 1000);
571 set_param_value ("avg-aliased-vops", 3);
572 }
573 </pre>
574
575 <p>
576 Comme vous pouvez le voir, une valeur supérieure à 3 est tout simplement traitée
577 comme un <c>-O3</c>.
578 </p>
579
580 </body>
581 </section>
582 <section>
583 <title>Que dire au sujet des options redondantes&nbsp;?</title>
584 <body>
585
586 <p>
587 Souvent, les variables CFLAGS et CXXFLAGS qui sont mises à plusieurs niveaux de
588 <c>-O</c> sont spécifiées comme redondantes dans le fichier
589 <path>/etc/make.conf</path>. Parfois cela se fait par ignorance, mais c'est
590 également fait pour éviter le filtrage des options ou le remplacement des
591 options.
592 </p>
593
594 <p>
595 Le filtrage/remplacement des options est réalisé dans beaucoup d'ebuilds de
596 l'arbre Portage. Cela est habituellement dû au fait que les paquets n'arrivent
597 pas à compiler avec certains niveaux de <c>-O</c> ou que le code source est
598 trop facilement alteré avec d'autres options utilisées. L'ebuild va filtrer
599 certaines ou toutes les options CFLAGS et CXXFLAGS, ou alors il les remplacera
600 par un différent niveau <c>-O</c>.
601 </p>
602
603 <p>
604 Le <uri
605 link="http://devmanual.gentoo.org/ebuild-writing/functions/src_compile/build-environment/index.html">manuel
606 du développeur Gentoo</uri> explique où et comment le filtrage et le
607 remplacement des options fonctionnent.
608 </p>
609
610 <p>
611 Il est possible d'éviter le filtrage des <c>-O</c> par redondance en listant les
612 options pour un certain niveau, tel que <c>-O3</c>, en faisant quelque chose
613 comme cela&nbsp;:
614 </p>
615
616 <pre caption="Spécifier les CFLAGS redondantes">
617 CFLAGS="-O3 -finline-functions -funswitch-loops"
618 </pre>
619
620 <p>
621 Toutefois, <brite>ce n'est pas une chose intelligente à faire</brite>. Les
622 CFLAGS ont une bonne raison pour d'être filtrées&nbsp;! Si les options sont
623 filtrées, cela signifie qu'il n'est pas sûr de compiler un paquet avec ces
624 options. Il n'est clairement <e>pas</e> prudent de compiler votre système entier
625 avec <c>-O3</c> si certaines des options mises par ce niveau vont causer des
626 problèmes avec certains paquets. Ainsi, n'essayez pas d'être plus "fûté" que les
627 développeurs qui maintiennent ces paquets. <e>Faites confiance aux
628 développeurs</e>. Le filtrage des options et leur remplacement est fait dans
629 votre intérêt&nbsp;! Si un ebuild spécifie des options alternatives, n'essayez
630 donc pas de les contourner.
631 </p>
632
633 <p>
634 Vous allez sans doute continuer à rencontrer des difficultés lors de la
635 compilation d'un paquet avec des options inacceptables. Si vous rapportez vos
636 problèmes sur le Bugzilla, les options que vous utilisez dans le fichier
637 <path>/etc/make.conf</path> seront facilement visibles et il vous sera dit de
638 recompiler sans ces options. Épargnez-vous le problème de recompiler en
639 n'utilisant tout simplement pas les options redondantes&nbsp;! Ne prétendez
640 pas que vous êtes forcément meilleur que les développeurs.
641 </p>
642
643 </body>
644 </section>
645 <section>
646 <title>Que dire au sujet des LDFLAGS&nbsp;?</title>
647 <body>
648
649 <p>
650 Vous ne devrez certainement pas les définir. Il se peut que vous ayez entendu
651 qu'elles accélèrent le temps de chargement des applications, ou qu'elles
652 réduisent la taille des binaires produits, mais elles peuvent également empêcher
653 tout simplement vos applications de fonctionner. Ces options ne sont pas
654 officiellement supportées, et vos bogues pourraient être fermés ou marqués
655 INVALID si vous rapportez des erreurs concernant des paquets utilisant les
656 LDFLAGS. Dans le meilleur des cas, vous devez recompiler tous les paquets
657 affectés sans ces LDFLAGS.
658 </p>
659
660 </body>
661 </section>
662 <section>
663 <title>Puis-je utiliser les paramètres définis par paquet&nbsp;?</title>
664 <body>
665
666 <p>
667 Il n'y a pas de méthode qui permettrait de définir des CFLAGS ou d'autres
668 variables par paquet, bien qu'il existe quelques <uri
669 link="http://forums.gentoo.org/viewtopic-p-3832057.html#3832057">moyens un peu
670 brutaux</uri> pour forcer Portage à le faire.
671 </p>
672
673 <p>
674 Vous <e>ne devriez pas</e> essayer de forcer Portage à utiliser des variables
675 par paquet, puisqu'il ne le supporte en aucune manière et que cela risque de
676 grandement compliquer les rapports de bogue. Renseignez juste vos variables dans
677 le fichier <path>/etc/make.conf</path> afin de les utiliser de manière globale
678 sur le système.
679 </p>
680
681 </body>
682 </section>
683 </chapter>
684
685 <chapter>
686 <title>Ressources</title>
687 <section>
688 <body>
689
690 <p>
691 Les ressources suivantes sont d'une certaine utilité pour comprendre
692 l'optimisation&nbsp;:
693 </p>
694
695 <ul>
696 <li>
697 Le <uri link="http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/">manuel de GNU
698 GCC</uri>
699 </li>
700 <li>
701 Le chapitre 5 du <uri link="/doc/en/handbook/">Manuel d'installation de
702 Gentoo</uri>
703 </li>
704 <li><c>man make.conf</c></li>
705 <li><uri link="http://fr.wikipedia.org">Wikipedia</uri></li>
706 <li>
707 <uri link="http://www.coyotegulch.com/products/acovea/">Acovea</uri>, une
708 suite de test et d'analyse comparative (NdT&nbsp;: "benchmarking") qui peut
709 être utile pour déterminer de quelle façon les différentes options de
710 compilation intéragissent et affectent le code généré, bien sûr ces
711 suggestions de code ne sont pas appropriées pour une utilisation globale.
712 Cette suite est disponible dans Portage&nbsp;: <c>emerge acovea</c>.
713 </li>
714 <li>Les <uri link="http://forums.gentoo.org">forums Gentoo</uri></li>
715 </ul>
716
717 </body>
718 </section>
719 </chapter>
720 </guide>
721
722
723 --
724 gentoo-commits@l.g.o mailing list