Profiler un programme
Mesurer avant de changer quoi que ce soit : chronométrer un extrait, choisir entre profileur par instrumentation et par échantillonnage, lire temps propre et temps cumulé, un graphe en flammes, et éviter les mesures qui trompent.
- 22 cartes
- 5 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Mises en situation
- Comprendre
Quelques cartes du deck
Profilage : de quoi s'agit-il ?
Voir la réponse
Mesure, pendant une exécution réelle, du temps ou de la mémoire consommés par chaque partie d'un programme.
L'intuition se trompe souvent sur ce qui coûte : on mesure d'abord, on décide ensuite. Sans mesure, on optimise une ligne qui pesait 1 % du temps.
Dans ce rapport
cProfile, quelle fonction faut-il optimiser en premier ?
```text
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.013 0.013 0.013 0.013 p.py:1(lent)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
1 0.000 0.000 0.013 0.013 p.py:7(main)
50 0.000 0.000 0.000 0.000 p.py:6(rapide)
1 0.000 0.000 0.013 0.013 {built-in method builtins.exec}
1 0.000 0.000 0.013 0.013 p.py:1(<module>)`lentmainrapide<module>
Voir la réponse
lentlenta le plus grostottime: le temps est dépensé dans son propre corps.mainet<module>ont le mêmecumtime, mais seulement parce qu'elles appellentlent.rapideest appelée 50 fois et coûte pourtant presque rien.Pour chronométrer un extrait, on le répète plusieurs fois et on retient le … ou la médiane des temps, car le bruit de la machine ne fait que ralentir une mesure.
Voir la réponse
Pour chronométrer un extrait, on le répète plusieurs fois et on retient le minimum ou la médiane des temps, car le bruit de la machine ne fait que ralentir une mesure.
La moyenne est tirée vers le haut par une exécution gênée par un autre processus.
timeit.repeatrend la liste des temps de chaque série : on en retient lemin.Profileur : de quoi s'agit-il ?
Voir la réponse
Outil qui exécute un programme en observant combien de temps (ou de mémoire) chaque fonction consomme et combien de fois elle est appelée.
Il existe deux familles : par instrumentation (chaque appel est enregistré, comme
cProfile, précis mais plus lent) et par échantillonnage (on regarde la pile à intervalles réguliers, léger donc utilisable en production).La première exécution d'une fonction met 900 ms, les suivantes 40 ms. Un collègue conclut que la fonction met 900 ms. Que lui répondre ?
- Le 900 ms est la vraie valeur : les exécutions suivantes sont faussées par le cache et ne comptent pas
- Il faut faire la moyenne des deux valeurs mesurées, soit environ 470 ms
- Il faut recompiler tout le programme avant chacune des mesures effectuées
- Démarrage à froid : on répète et on retient la médiane après échauffement
Voir la réponse
Démarrage à froid : on répète et on retient la médiane après échauffement
La première exécution charge le code et les données et remplit les caches. Selon la question, on mesure le démarrage à froid ou le régime établi, mais jamais un mélange des deux.