Vous êtes ici

  1. Accueil
  2. Compilation et optimisation de code

Compilation et optimisation de code

Compilation et optimisation de code

En pratique :

Volume horaire de cours : 12
Volume horaire global de TP : 6
Langue principale : français

Description du contenu de l'enseignement

L'objectif de ce module est de présenter et de mettre en pratique quelques techniques
d'optimisation de codes informatiques. En effet, si l'étude théorique de l’algorithmique
nous indique quels algorithmes sont les plus efficaces selon un ou plusieurs critères pour
résoudre certains problèmes, une implémentation ne tenant pas compte des spéci?cités de
l’environnement cible (logiciel et matériel) passe à côté de gains potentiels de performances,
voire offre des performances dégradées. Ce module montrera comment, en rassemblant des
informations sur l'environnement ciblé, et grâce à des outils de mesure, et l'observation de
l'assembleur produit par le compilateur, on peut améliorer les performances de certains
codes.
Le langage C, GCC, et les outils classiques sous Linux sur architecture x86_64 serviront
de support aux travaux pratiques.


Compétences à acquérir

A la ?n de ce module, l’étudiant doit être capable :
• De citer les différentes étapes de la compilation d’un binaire à partir de sources C,
• De gérer la compilation d’un projet en C grâce aux Make?le,
• D’obtenir des caractéristiques (caches, prédiction de branchement) d’une machine,
• De mettre en œuvre des outils de mesure pour mesurer les performances d’un
programme, d’une fonction ou d’une portion de code isolée,
• De proposer des éventuelles améliorations d’un code source a?n d’en améliorer les
performances (caches, branchements, inlining , . . . ), et d’évaluer le gain potentiel
obtenu.


Modalités d’organisation et de suivi

Plan du cours
• Les différentes étapes de la compilation en C
– Production d’exécutables et de librairies partagées avec GCC
– Compilation séparée avec les Make?les
• Mesure des performances : principes, simulation, instrumentation
• Caches : généralités, obtenir les spéci?cités des caches d’une machine, mesures
• Branchements : généralités, mesures
• Appels de fonctions : coût, librairies statiques et partagées, inlining
• Optimisations effectuées par les compilateurs


Bibliographie, lectures recommandées

• Ulrich Drepper, What Every Programmer Should Know About Memory, https://people.freebsd.org/~lstewart/articles/cpumemory.pdf, 2007
• Why is it faster to process a sorted array than an unsorted array? https://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array, 2012