title: Optimisation dirigée par les profils
text: # Optimisation dirigée par les profils
  
  En programmation informatique, l'optimisation dirigée par les profils (profile-guided optimization ou PGO en anglais) est la pratique qui consiste à optimiser la compilation statique d'un logiciel pour une utilisation type.
  
  ## Principe
  
  La compilation est faite en avance de temps (ahead-of-time), c'est-à-dire qu'elle est realisée statiquement avant la livraison du logiciel, et avant son installation, ce qui gèle les capacités du logiciel. L'inconvénient est que le compilateur n'a pas les informations nécessaires pour décider comment générer au mieux le code source (placement du code dans les fichiers exécutables, allocation de registres, où optimiser les boucles, utilisation du profil au lieu d'heuristiques) puisqu'il ne sait pas comment le logiciel sera utilisé, et donc quelles portions de code seront les plus utilisées.
  
  L'optimisation dirigée par les profils vise à fournir au compilateur des informations sur l'utilisation attendue du logiciel, afin de guider ses décisions pour obtenir un code plus performant dans les cas d'utilisation fournis.
  
  ## Méthodologie
  
  Pour utiliser l'optimisation dirigée par les profils, il faut :
  
  * définir les cas d'utilisations que l'on souhaite optimiser
  * instrumenter le logiciel
  * exécuter les cas d'utilisation sur le logiciel instrumenté
  * récolter les profils d'utilisation
  * recompiler le logiciel en fournissant au compilateur les profils précédemment créés.
  
  Comme pour toute optimisation, il est nécessaire de :
  
  * définir ce que l'on veut optimiser
  * définir une cible à atteindre pour l'optimisation
  * mesurer les performances sans optimisation
  * optimiser le code
  * mesurer les performances après optimisation
  * décider si l'optimisation appliquée doit être conservée ou pas.
  
  ## Compilateurs
  
  Exemples de compilateurs capables de faire de l'optimisation dirigée par les profils :
  
  * GNU Compiler Collection
  * Intel C++ Compiler et Intel Fortran compilers
  * Microsoft Visual C++
  * Oracle Solaris Studio (précédemment appelé Sun Studio).
  