Programme de la formation
Base sur les performances des architectures moderne
- Rapides bases d'assembleur (pour les exemples suivant)
- Architecture: Hiérarchie de mémoire/cache, Out-of-order, Prédiction, Effet des cache d'instructions décodée
- Conséquences: Interpreter les résultats des outils de sampling d'instruction (perf), Interpreter les microbench
- Système d'exploitation et appels système: Ce qui est cher, Ce qui est bloquant
Runtime de OCaml
- Cours assez exhaustif du fonctionnement du GC
- Coût des différentes parties du GC: algorithmiques pire et moyen, effets inhabituels, Cas d'exemple d'effets inattendus
- FFI (partie pertinente pour les perf): Allocations/invariants, Annotations [@...] / boxing, Racines
Compilateur OCaml
- Architecture: Suivre les transformations des différentes constructions à travers les passes
- Coût des constructions du langage
- Tour guidé des optimisations
- Différences avec les compilateur/runtime C-like
Outils
- perf et outils dérivés
- Faire correctement des benchmarks: Analyser quel type de performances est recherché (vitesse/latence (moyenne/pire) ... ), Analyser des statistiques de bench, Bench de non-régression
- Valgrind/callgrind/cachegrind...
- Le debugger gdb
Approches pour agir sur les performances
- Utiliser les optimisations / choisir des structures de code adaptées: Contrôler les optimisations, Vérifier qu'elles s'appliquent
- Traduire des parties en C-like: Analyser la pertinence, Utiliser efficacement la FFI
- Trouver, reconnaître et corriger des anti pattern
- Corriger des fuites mémoire et sur allocations: Réduire des lifetimes, Liste des types de fuites
Organiser l'optimisation d'un projet
- Estimer quels sont les performances atteignable pour un programme: Segmenter le programme et séparer l'analyse, Comparer avec la réalité
- Trouver ce qui a un sens à optimiser: Prioriser les choses les plus utiles, Quoi ne pas optimiser