Calculer le temps d'execution - C - Programmation
Marsh Posté le 25-05-2009 à 23:00:50
Pourquoi ne pas utiliser du profiling pour faire ça ?
Par exemple -gprof avec gcc ?
Marsh Posté le 25-05-2009 à 23:01:41
ReplyMarsh Posté le 30-05-2009 à 13:30:12
Finalement j'ai opté pour clock();
Code :
|
suffisait de connaître le nombre de ticks/clocks par seconde
après diviser par CLOCKS_PER_SEC si l'on veut en secondes,
ou encore enlever 3 zéros de la constante, pour passer en ms, 10^-3 !
Si quelqu'un tombe sur la page, on sait jamais
Marsh Posté le 30-05-2009 à 14:10:08
clock c'ets juste atroce en terme de précision ...
ensuite ta méthode est foireuse :
- une division ca suffit pas besoind 'en fiare 2
- diviser par double(CLOCKS_PER_SEC) me parait meilleur ...
Marsh Posté le 30-05-2009 à 20:13:12
Code :
|
avec clock_t comme type pour start et end !
et ça marche hyper bien pour moi ...
Marsh Posté le 31-05-2009 à 12:40:29
lol, oui, comme y'a %ld, donc entier et non relatif, même un 0,1 ms n'apparaitera pas, mais bon, ça me va bien comme ça.
Marsh Posté le 01-06-2009 à 10:31:37
Joel F a écrit : sinon gettimeofday |
Tention avec gettimeofday, certaines implémentations ont une résolution de l'ordre du tick (10ms sur la plupart des systèmes, sauf à bidouiller le HZ), même si l'horloge est annoncée comme ayant une précision de la microseconde (ce qui est vrai).
J'en ai fait les frais sous un Linusque
Donc +1 pour QueryPerformanceCoutner sous win32, ou les différentes clocks fournies par le système via POSIX (on obtient la résolution par clock_getres).
Edit: ah et aussi, gettimeofday() est affectée par la synchro du temps système (adjtime), donc elle peut accélérer ou ralentir sur certains intervalles.
Marsh Posté le 01-06-2009 à 13:02:23
gettimeofday à part mesurer le temps qui passe, ça ne te diras jamais combien toi tu as à consommé.
Marsh Posté le 01-06-2009 à 13:07:44
Gf4x3443 a écrit : |
Certes. Les clock POSIX j'ai trjrs eu du mal a en faire qq chose
Marsh Posté le 01-06-2009 à 15:01:18
J'ai pas aimé l'API perso, du temps ou je devais faire des calculs de performances. Suivant les OS, ils n'ont pas les mêmes compteurs, et on bourre son code de #ifdef SunOS, #ifdef Linux, #ifdef BSD...
Le seul avantage que je lui trouve, c'est de pouvoir compter facilement le temps (on l'obtient direct depuis la struct), alors que les PerformanceCounter de win32 travaillent en fréquence et en nombre de ticks. C'est moins "naturel" quand on veut mesurer des intervalles.
Marsh Posté le 25-05-2009 à 22:48:35
Bonjour,
Je voudrais calculer le temps d'execution, des differents algos de tri, en cherchant un peu comment marquer le temps, j'ai trouvé dans une source, time(0) dont la valeur est affectée à une variable entière, quelques secondes plutard, la valeur de retour de time(0) est affectée à une deuxième variable, end, par exemple, sauf que le temps n'a pas changé depuis, bien que des secondes se sont écoulés, vous auriez pas d'autres méthodes, pour calculer le temps d'execution d'une partie du code, à l'échelle des milisecondes ?
Merci d'avance