Mesurer la performance d'un programme est quelque chose de très difficile; d'abord parcequ'il faut définir la performance, ensuite parceque toutes les approches naïves fonctionnent assez mal.
Si on se base sur le temps d'éxécution, la première chose qu'on demande à une mesure est d'être reproductible. Les éxécutions multiple du même programme peuvent montrer des temps très différents, en principe on mesure donc plutôt une performance empirique en faisant une moyenne dans des conditions normalisées — sans cela on ne peut pas grarantir la reproductibilité.
Les biais typiques sont:
- la machine
- l'OS
- le bruit de fond de l'OS (i.e. processus concurrents)
- les variables d'environnement (même non utilisées!)
Même en normalisant toutes ces conditions, on peut observer des facteurs 10 sur la vitesse d'éxécution d'un programme. (Tu éxécutes ton programme Lundi puis Mardi, directement après un fresh-reboot en single-user et les temps d'éxécution diffèrent d'un facteur 10)!
Si tu veux mesurer sérieusement les peformances d'un programme, tu peux par exemple décider du protocole suivant:
choix de la machine et l'OS;
écriture d'un script qui éxécute ton programme N+1 fois et se souvient des N dernières mesures de temps, en ajoutant une variable d'environnement inutile de longueur entre 1 et 8 (pour avoir tous les types d'alignement mémoire possibles);
boot en single-user et éxécution du script.
Un référence classique sur le sujet:
"Producing Wrong Data Without Doing Anything Obviously Wrong!"
# Pas de conclusion hâtive
Posté par Michaël (site web personnel) . En réponse au journal Quand Pythran fait tourner du Python plus vite que du C++, c'est que.... Évalué à 3.
Mesurer la performance d'un programme est quelque chose de très difficile; d'abord parcequ'il faut définir la performance, ensuite parceque toutes les approches naïves fonctionnent assez mal.
Si on se base sur le temps d'éxécution, la première chose qu'on demande à une mesure est d'être reproductible. Les éxécutions multiple du même programme peuvent montrer des temps très différents, en principe on mesure donc plutôt une performance empirique en faisant une moyenne dans des conditions normalisées — sans cela on ne peut pas grarantir la reproductibilité.
Les biais typiques sont:
- la machine
- l'OS
- le bruit de fond de l'OS (i.e. processus concurrents)
- les variables d'environnement (même non utilisées!)
Même en normalisant toutes ces conditions, on peut observer des facteurs 10 sur la vitesse d'éxécution d'un programme. (Tu éxécutes ton programme Lundi puis Mardi, directement après un fresh-reboot en single-user et les temps d'éxécution diffèrent d'un facteur 10)!
Si tu veux mesurer sérieusement les peformances d'un programme, tu peux par exemple décider du protocole suivant:
Un référence classique sur le sujet:
"Producing Wrong Data Without Doing Anything Obviously Wrong!"
http://www-plan.cs.colorado.edu/diwan/asplos09.pdf