Optimisation des performances

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 »

Au sujet du formateur

bertrand

L’équipe LTM

Formation & développement mobile iOS/Android/Web

Contacter l’équipe