Programmation efficace

L'objectif est de former les programmeurs à codes des applications efficaces optimisables par compilation avancée, et de comprendre les phénomènes de dégradation/accélération des performances, comme le ralentissement des temps d'exécution ou l'augmentation de la consommation d'énergie.

S1 3 ECTS 24h OPT Site web

Description

Dans ce cours, nous aborderons de nombreux sujets liés à l’informatique haute performance, à la programmation efficace et à l’optimisation des performances des codes. Écrire des codes corrects, c’est bien, écrire des codes corrects et efficaces, c’est mieux. Nous étudierons ensemble comment les logiciels et le matériel interagissent, comment les compilateurs optimisent le code, comment aider les compilateurs à le faire efficacement et comment vérifier l’efficacité de l’exécution d’un logiciel sur une machine. Nous traiterons principalement des programmes séquentiels. Les programmes parallèles seront traités dans un cours plus avancé

Plan

  1. Notions de performance des programmes : définition, métriques, mesure.
  2. Statistiques et expériences en informatique
    • a. Rappel sur les statistiques appliquées et la mesure des performances
    • b. Métriques : métriques empiriques versus théoriques, différents types de moyennes
    • c. Tests statistiques : vérification de la normalité, test t de Student, test de Kolmogorov-Smirnov, test de Wilcoxon-Mann-Whitney
  3. Optimisation des performances des programmes séquentiels
    • a. Analyse de code
    • b. Optimisation locale du code
    • c. Optimisations par fenêtre glissante
    • d. Optimisations globales du code
  4. Parallélisme au niveau des instructions
    • a. Ordonnancement local des instructions
    • b. Ordonnancement des boucles pour le parallélisme au niveau des instructions
    • c. Optimisation des fonctions
  5. Optimisation des performances pour la hiérarchie de mémoire
    • a. Effets du cache sur le parallélisme au niveau des instructions
    • b. Transformation des nids de boucles pour optimiser l’utilisation du cache
    • c. Réduction de la taille du code
    • d. Optimisation de la disposition de la mémoire des programmes

### Modalités de contrôle des connaissances ###

  • Un mini projet intermédiaire ou exposé 30%.
  • Un examen terminal écrit 70%, 2 heures.
  • Examen écrit de seconde session de 2h ou un oral.

Ressources

Tout le matériel des cours et des travaux pratiques sera disponible sur notre serveur: moodle.