21
2010
Calculer le temps d’exécution d’une fonction en C++
Utile pour déterminer la différence de performance entre deux morceaux de code, le temps d'exécution d'une fonction est un paramètre fort utile au développeur. Cet article se veut l'équivalent C++ de la classe Chronomètre pour benchmarker les scripts PHP.
Nous allons nous servir de la fonction clock(), faisant partie de time.h. Cette fonction nous retourne un entier de type clock_t. Celui-ci est en fait le nombre de battements d'horloge de votre processeur depuis le lancement du programme. Ce type se comporte comme un entier, et vous pouvez effectuer les opérations standards avec.
Voyons donc comment calculer le temps d'exécution d'une fonction appelée lambda :
#include <iostream>
#include <time.h>
using namespace std;
void lambda(void)
{
// Some code...
}
int main(int argc, char* argv[])
{
clock_t beginTime = clock();
lambda();
clock_t endTime = clock();
cout << "Time: " << (endTime - beginTime) << endl;
return 0;
}
Cependant, le lecteur attentif pourra avoir remarqué l'unité de (endTime - beginTime), qui est homogène à un nombre de battements d'horloge. Comment donc récupérer ce temps en seconde ? Simplement grâce à une constante qui porte bien son nom : CLOCKS_PER_SEC. Ainsi, le code devient :
cout << "Time: " << (endTime - beginTime) / CLOCKS_PER_SEC << endl;
Afin d'avoir une mesure du temps la plus précise possible, nous allons itérer plusieurs fois le calcul sur notre fonction.
int somme = 0;
int iterations = 2;
for(int i = 0 ; i < iterations ; i++)
{
clock_t beginTime = clock();
lambda();
clock_t endTime = clock();
somme += (endTime - beginTime);
}
float moyenne = somme / (iterations * CLOCKS_PER_SEC);
cout << "Average time: " << moyenne << "s." << endl;
A noter que, bien entendu, plus le nombre d'itérations est élevé, plus le résultat moyen sera significatif.