Optimisation et transformations de code
Master InformatiqueParcours Science et ingénierie du logiciel (SIL)
Description
Cette UE présente des techniques de transformation de programmes permettant d’améliorer sensiblement leurs performances en termes de vitesse d’exécution et de consommation d’énergie.
Compétences requises
À l'entrée de cet enseignement, un étudiant devrait savoir :
Écrire des programmes complexes dans un langage impératif
Les mécanismes fondamentaux d’architecture des ordinateurs (principes des processeurs et des mémoires).
Les mécanismes fondamentaux des compilateurs.
Compétences visées
À l'issue de cet enseignement un étudiant saura :
comprendre les interactions logiciels-matériels
améliorer sensiblement la performance des programmes : temps d’exécution et consommation d’énergie
identifier les sources et les moyens d’amélioration de performance : parallélisme (multi-threading, vectorisation), localité des accès aux données, spécialisation, mémoïsation de fonctions.
Disciplines
- Informatique
Syllabus
Analyse de boucles et de boucles imbriquées : analyse de dépendances, localité temporelle et spatiale des accès aux données, validité des transformations.
Transformation de boucles et de boucles imbriquées : échange de boucles, fusion/fission de boucles, pavage de boucles, torsion de boucles.
Généralisation des transformations de boucles avec le modèle polyédrique.
Transformations génériques : réduction du nombre d’opérations, pré-calculs, réduction du nombre de conditionnelles, réduction de force, calcul approximé.
Optimisations des fonctions : inlining, spécialisation, mémoïsation (fonctions récursives).
Techniques d’analyse et de profilage de code : outils de profilage (gprof, perf, papi, likwid), registres compteurs, modèle roofline.
Bibliographie
Fedor G Pikus, 2021. The Art of Writing Efficient Programs: An advanced programmer's guide to efficient hardware utilization and compiler optimizations using C++ examples. Packt Publishing.
Paul Feautrier and Christian Lengauer. 2011. Polyhedron model. In Encyclopedia of Parallel Computing, David Padua (Ed.). Springer US, 1581–1592. DOI:http://dx.doi.org/10.1007/978-0-387-09766-4_502