Apprendre les méthodes d'optimisation des compilateurs
Un tutoriel de Guy Grave
Le 2016-08-26 12:15:32, par LittleWhite, Responsable 2D/3D/Jeux
Bonjour à tous,
J'ai le plaisir de vous proposer un tutoriel écrit par Guy Grave, alias mewtow, sur les optimisations effectuées par les compilateurs.
Bonne lecture.
Lire le tutoriel
Voir d'autres articles de mewtow
Tous les meilleurs cours et tutoriels pour apprendre le langage C.
J'ai le plaisir de vous proposer un tutoriel écrit par Guy Grave, alias mewtow, sur les optimisations effectuées par les compilateurs.
Bonne lecture.
Lire le tutoriel
Voir d'autres articles de mewtow
-
ternelExpert éminent séniorJe ne comprends pas l'objet de ce tutoriel.
On ne rentre pas assez dans le détail pour comprendre ce qui est gagné, et il y a trop de prérequis pour comprendre pourquoi ca optimise.
Par exemple, il n'y a pas d'explication succinte de ce qu'est le fonctionnement en pipeline (et du coup pourquoi le compilateur est si fort à s'en servir)le 26/08/2016 à 14:59 -
PyramidevExpert éminentPersonnellement, j'ai bien aimé ce tuto.
Cela donne un bon panorama des types d'optimisation des compilateurs C.Envoyé par Guy Grave
Je pense qu'il faut le préciser explicitement dans le tutoriel. Sinon, un lecteur risque d'interpréter que l'inlining augmente toujours la taille du code, parfois un peu et souvent beaucoup.le 26/08/2016 à 17:51 -
C'est un choix volontaire de ma part de ne pas aller aussi loin, choix qui tient à plusieurs raisons. Premièrement, l'article aurait été beaucoup plus compliqué et aurait demandé beaucoup plus de pré-requis pour être compris dans sa totalité. En l'état, cet article est plus accessible, notamment pour des grands débutants. Et même ainsi, l'article n'est pas parfait, vu qu'il demande de solides connaissances en architecture des ordinateurs (les rappels nécessaires n'étant pas faits pour gagner de la place), mais c'est une chose qui est absolument nécessaire quand on parle d'optimisations bas-niveau. Deuxièmement, il aurait fallu que je rédige un véritable cours, équivalent à plusieurs chapitre d'un livre portant sur la compilation. Je n'avais ni la motivation ni le temps pour cela.
Pour cet article, j'ai préféré me restreindre aux optimisations valables quelque soit le langage (tant que celui-ci est impératif) et non d'optimisations spécifiques au C/C++, histoire de viser large en terme de lecteurs.le 28/08/2016 à 18:05 -
sambia39Membre expérimentéBonsoir,
Je suis d'avis avec @leternel et personnellement je suis étonnée que l’on ne parle pas de: Graphe de flots d’exécution de contrôle, analyse globale de flot de données ou encore les divers algorithmes de flot de données, car c’est là-dessus que compilateur se base pour effectuer les optimisations nécessaires (en utilisant les techniques) par exemple: Le remplacement de code récurrent plus exactement, « l’élimination des sous-expressions communes » dans le graphe de flot de contrôle, optimisation de boucle en appliquant les techniques dites de déplacement de code qui transfère du code à l’extérieur des boucles, l’élimination des variables d’induction qui permet par exemple d’éliminer les variables i; j, k des boucles locales, et enfin le réducteur de force qui remplace les opérations coûteuses par la moins coûteuse et c'est bien dommage que la section « II-B-5. Réduction en force » ne rentre pas en détail dans optimisation des boucles avec des exemples soutenu dans une section spéciale.
Pour moi, s’il faut parler d’optimisation faite par le compilateur il faut donc, allé plus en profondeur; à commencer, par un résumé, de façon brève du rôle de l’optimiseur et comment il réalise les optimisations. Cela sous-entend que l’on doit aussi présenter de façon brève les différents algorithmes et technique que le compilateur utilise.
Malgré le manque de certaines explications le tutoriel est très bien et fort utile pour comprendre certaines technique optimisations faites par le compilateur.
à bientôt.le 27/08/2016 à 1:40 -
picodevMembre émériteBonjour,
un petit mot sur certaines «nouveautés» depuis C99 comme le contrat avec le mot clé restrict ou les directives d'alignement auraient pu trouver leur place dans ce document, au demeurant agréable à lire. Peut-être aurait-on pu y trouver aussi des traces d'aide à l'optimisation spécifiques à certains compilateurs comme par exemple pour gcc les attributs de fonctions pure,const,hot, cold, …, les builtins prefetch, …le 27/08/2016 à 15:19 -
chrtopheResponsable SystèmesCependant, dans le cas des toutes petites fonctions, l'inlining peut réduire la taille du code, puisqu'on élimine l'appel de la fonction.
Je pense qu'il faut le préciser explicitement dans le tutoriel. Sinon, un lecteur risque d'interpréter que l'inlining augmente toujours la taille du code, parfois un peu et souvent beaucoup.le 27/08/2016 à 12:06 -
gros_rougeotMembre actifMerci, tuto très intéressant.le 01/09/2016 à 16:11
-
BkteroModérateurIl enchaine en ce moment !
Remarques :
- section II A 2, le lien vers Wiki ne fonctionne pas.
- section II C 6, il est dit "dernière optimisation", mais il y a la section II C 7 et II C 8 (qui dit elle aussi "dernière optimisation" ^^)le 26/08/2016 à 14:17 -
LittleWhiteResponsable 2D/3D/Jeuxle 26/08/2016 à 17:17
-
chrtopheResponsable Systèmesoui logique,
Le compilateur supprime les appels de fonctions inutiles.le 27/08/2016 à 14:57