Code : OPE
Résumé
Objectif
Optimiser son développement, son logiciel !
En partant de la modélisation du logiciel et de l’utilisation de Design Patterns (notamment du GOF), en passant par les optimisations des codes à base de threads et en recherchant à paralléliser les calculs jusqu’au langage lui-même, vous découvrirez comment optimiser la performance de votre développement.
Exercices
De nombreux exercices sont prévus, notamment sur les patterns et la programmation parallèle
Public
Développeurs, architectes
Pré-requis
Bonnes connaissances de l’analyse et de l’implémentation objet. Expérience requise en développement d’applications avec un langage objet. Connaissances de base d’UML.
Durée
3 jours
Programme détaillé
Programme de la formation
Introduction
- Les différents types d’optimisation attendus dans une application ?
- Optimisation avec des langages natifs et des langages managés
- Optimiser quoi ? : Architecture / Performance cpu / taille de code / mémoire
- Importance d’avoir une architecture optimale
- Les différentes pistes d’optimisations possibles
Méthodologie d’optimisation
- Les mesures, les outils, lesquels : comment faire ?
- Process explorer et process monitor de sysinternals
- Code Analyst d’AMD
- Mise en place de tests unitaires précis : Optimisez et constatez les régressions
- Méthodologie pour optimiser
Comprendre le système
- Fonctionnement des processeurs, disques, mémoire
Comprendre l’objet et ses règles
- La gestion des instances en mémoire : instances simple, en cas d’héritage …
- Le placement du code dans le système, « rebasing »
- Mécanismes de construction et de destruction
- Impact des MLK sur la non performance
- Dépendance des packages et frameworks
Éviter la création des objets
- Dans un langage objet : maîtriser et réduire le nombre d’objets
- Ré utiliser et factoriser les instances
- Utiliser un modèle du GOF
Le pattern poids mouche : présentation, motivation, solution et structure
- Etude d’un cas et résolution avec le pattern.
- Travail pratique :
- Utilisation d’un parc à pois mouche dans une application
Utiliser les « Factories » pour optimiser la création des objets
- Travail pratique :
- Introduction d’une « abstract factory » dans une application
Introduction de « singletons » dans une application
- Avantages et inconvénients
Gestion d’algorithmes de pools d’objets
- Exemple d’application
Introduction des caches de ressources
- Explication du principe
- Création et gestion d’un cache
- Exemple d’application utilisant des caches
- Gestion grâce aux références faibles
Gestion d’instances virtuelles
- Intention et motivation
- Introduction du modèle « proxy » : structure
- Exemple de code et d’application
- Travail pratique :
- Utilisation du modèle « proxy » dans une application
Introduction des caches de calculs
- Introduction
- Utilisation caches de calcul
- Exemple d’une application
- Mesures et performances obtenues
- Travail pratique :
- Modification d’une application existante pour introduire un cache de calcul
Utilisation des Multiple Core des processeurs
- Gestion des threads (multi langage)
- Programmation parallèle
- Loi de Amdahl
- Anti patterns de Design : singletons
- Architecture CUDA de NVidia
- Problème des bibliothèques non « thread safe »
- Travail pratique :
- Analyse et « re design » d’une application à paralléliser
Choix des bibliothèques utilisées
- Bien connaître la performance et les limitations de ses bibliothèques
- Exemples concrets
- Mesures et performances
Les Réglages
- Options de compilation (pour C et C++)
- Réglages des environnements managés
Les trucs purement C++
- Trucs et astuces de code C++
- Mettez certaines méthodes « inline »
- Utiliser les smarts pointers « inline » de « boost »
- Allouer les objets « jeunes » et à court cycle de vie sur la pile
- Utiliser les objets « static »
- Utiliser le « const »
- Favoriser les callback plutôt que les fonctions virtuelles
- Notion de langage machine, analyse des codes machine
Divers
- Impact des « garbage collector » sur les performances
- Impact des « smart pointers C++ » sur les performances
- Optimiser l’échantillonnage de ses tests unitaires : algorithme de « PairWise »