Obtenir getrusage() pour mesurer le temps de système en C
Je tiens à mesure que le système de temps qu'il faut pour exécuter du code. Pour ce faire, je sais que j'aimerais sandwich dit code entre les deux appels à getrusage(), mais j'obtiens des résultats inattendus...
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <stdio.h>
int main() {
struct rusage usage;
struct timeval start, end;
int i, j, k = 0;
getrusage(RUSAGE_SELF, &usage);
start = usage.ru_stime;
for (i = 0; i < 10000; i++) {
/* Double loop for more interesting results. */
for (j = 0; j < 10000; j++) {
k += 20;
}
}
getrusage(RUSAGE_SELF, &usage);
end = usage.ru_stime;
printf("Started at: %ld.%lds\n", start.tv_sec, start.tv_usec);
printf("Ended at: %ld.%lds\n", end.tv_sec, end.tv_usec);
return 0;
}
J'espère que ce produit de deux nombres différents, mais hélas! Après avoir vu mon ordinateur pense que pour une seconde ou deux, c'est le résultat:
Started at: 0.1999s
Ended at: 0.1999s
Je ne suis pas à l'aide de getrusage() à droite? Pourquoi ne pas ces deux numéros différents? Si je suis fondamentalement mauvais, est-il une autre façon d'utiliser getrusage() pour mesurer le temps au système de code source? Merci pour la lecture.
Veuillez observer que
tv_usec
sont microsecondes, de sorte que votre format doit être %lu.%06u
.OriginalL'auteur Stout Joe | 2012-05-09
Vous devez vous connecter pour publier un commentaire.
Vous êtes incompréhension de la différence entre "utilisateur" et "système". Votre exemple de code est en cours d'exécution principalement en mode utilisateur (c'est à dire, de l'exécution de votre code d'application), alors que vous êtes en mesure de, mais le "système" le temps est une mesure du temps passé à l'exécution en mode noyau (c'est à dire, le système de traitement des appels).
ru_stime
est le champ approprié pour mesurer le temps. Votre application de test arrive juste pas à courir tout moment entre les deux points que vous consultez.OriginalL'auteur Eric Melski
Vous devez utiliser
usage.ru_utime
, qui est l'utilisateur le temps CPU utilisé, à la place.Si le programme est conçu pour s'exécuter sous mode noyau, puis utilisez
ru_stime
. Sinon, utilisezru_utime
.Je voudrais utiliser
clock_gettime
avec le processeur de l'horloge temps...OriginalL'auteur shinkou
Utilisation gprof. Cela donnera à vous donner le temps pris par chaque fonction.
Installer gprof et l'utilisation de ces indicateurs pour la compilation -pg -fprofile-arcs -ftest-coverage.
OriginalL'auteur Manik Sidana