[Débutant] Optimiser la compilation
Le
Ganymede
Salut à tous,
Si j'ai bien compris, les applications fournies sur les CD de Mandrake sont
destinées à tous les processeurs de la famille i586 - ce qui est tout à
fait normal pour assurer une large compatibilité.
Mais j'ai entendu dire qu'il était possible d'optimiser la compilation d'un
programme pour des processeurs plus évolués que le 586.
Cela m'intéresserait, car d'une part j'utilise un athlon-XP, et d'autre part
la commande `uname -a' me retourne la valeur "i686". J'en déduis que si je
compile un programme à l'aide de la commande make, le programme de
compilation produira un binaire optimisé pour i686, mais pas pour un
athlon-XP.
Donc, ma question est : comment faire en sorte que la compilation prenne en
compte les particularités du processeur ? Faut-il ajouter une option après
la commande make ? (J'ai regardé dans `man make', mais je n'ai pas trouvé.)
Faut-il changer quelque chose dans le makefile ?
Merci,
Julien
Si j'ai bien compris, les applications fournies sur les CD de Mandrake sont
destinées à tous les processeurs de la famille i586 - ce qui est tout à
fait normal pour assurer une large compatibilité.
Mais j'ai entendu dire qu'il était possible d'optimiser la compilation d'un
programme pour des processeurs plus évolués que le 586.
Cela m'intéresserait, car d'une part j'utilise un athlon-XP, et d'autre part
la commande `uname -a' me retourne la valeur "i686". J'en déduis que si je
compile un programme à l'aide de la commande make, le programme de
compilation produira un binaire optimisé pour i686, mais pas pour un
athlon-XP.
Donc, ma question est : comment faire en sorte que la compilation prenne en
compte les particularités du processeur ? Faut-il ajouter une option après
la commande make ? (J'ai regardé dans `man make', mais je n'ai pas trouvé.)
Faut-il changer quelque chose dans le makefile ?
Merci,
Julien

Poser une question


Moi j'ai :
Linux gentoo 2.4.22 #6 dim sep 21 13:17:02 CEST 2003 i686 AMD Athlon(tm) XP
2000+ AuthenticAMD GNU/Linux
Cela renseigne uniquement selon la façon dont le noyau a été compilé.
En fait, il faut que le compilateur reçoivent les bonnes options.
Ceci devrait t'intéresser :
http://reviewed.homelinux.org/en/howtocflags.html
En gros, il faut définir les variables environnementales suivantes, dans un
script de login :
export CHOST="i686-pc-linux-gnu"
export CFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"
export CXXFLAGS="${CFLAGS}"
Néanmoins, ceci n'est pas une solution universelle, et il faut parfois
éditer le makefile, ou indiquer les options sur la ligne de commande à
make, par exemple avec :
make 'CFLAGS = -march=athlon-xp -O3 -pipe -fomit-frame-pointer'
A voir donc selon le cas.
A noter aussi que les meilleures options varient selon le programme à
compiler, il n'est donc pas certain qu'un réglage globale soit *la*
solution.
--
Richard
Attention, tou de même:
pour compîler des applications et être capable de les debugger,
il faut -O2 à la place de -O3 et ne _pas_ mettre -fomit-frame-pointer
D'une façon générale, il est plus prudent de laisser -O2,
car le -O3 peut générer des problèmes vicieux avec certains programmes
pour lesquels il ne faut surtout pas que le compilateur réordonne
les instructions executées.
oui, et ajouter -g bien sûr.
cela dit -fomit-frame-pointer est une option d'optimisation assez efficace,
et il est bête de ne pas l'utiliser.
L'option -O2 réordonne déjà les instructions. -O3, en plus de ce que fait
-O2, met en ligne automatiquement certaines fonctions. Il est vrai que des
bugs dus à l'utilisation de -O3 (ou de -finline-functions) sont
régulièrement trouvés, mais il existe aussi des bugs ailleurs dans gcc.
Utiliser -O2 ne garantit donc pas l'absence de problème. Et si personne
n'utilise gcc avec l'option -O3, cela va être dur de débogguer cette option
de gcc :-)
L'utilisation de -O3 peut aussi ralentir le code, par rapport à -O2. Mais,
bon, j'avais déjà dit que les meilleures options dépendent du programme.
--
Richard
Merci pour votre réponse.
Cependant, je n'ai pas encore tout compris. En particulier : qu'est-ce qu'un
"script de login" ? Est-ce un simple script ou y a-t-il une procédure
spéciale pour l'activer ?
Tu peux mettre ça dans un simple script, où même le taper directement dans
bash (ou un autre shell). Néanmoins, si tu écris ces lignes dans .bashrc
(ou le fichier semblable de ton shell), ce serait fait une fois pour toute
à chaque lancement de bash.
--
Richard