Objectif :
Découvrir et mettre en œuvre les bonnes stratégies de développement et de compréhension du matériel afin de garantir un haut niveau de performance dans des applications C++.
Bénéfices attendus :
Connaître les sources logicielles et matérielles de la performance.
Savoir adapter sa pratique du langage C++ afin de garantir les performances d’un logiciel.
Public :
Ingénieurs, techniciens et scientifiques soucieux des performances de leur logiciels.
Une première expérience en C++ est nécessaire.
Programme :
Introduction
Historique des architectures modernes C++ comme un langage performant
Adéquation Architecture/Algorithme
Cycle de vie des objets
Valeur, référence, pointeur
Optimisation et élision des copies
Sémantique de transfert
Principe de la RAII
Pointeur à sémantique riche
Règle du zéro
Mise en pratique : exercices, évaluation
Gestion du polymorphisme
Polymorphisme d’inclusion
Polymorphisme paramétrique
Coût et surcoût du polymorphisme
Le CRTP
Mise en pratique : exercices, évaluation
Impact de l’architecture
Application Compute bound et Memory bound
Principe de fonctionnement des caches
Impact sur le design logiciel
Impact sur l’utilisation des composants de STL
Mise en pratique : exercices, évaluation
Techniques d’optimisation de code
Fusion et fission des boucles
Tuilage
Array of Structures/Structure of Arrays Le modèle AoSoA
Mise en pratique : exercices, évaluation