[c] Mesurer les temps d'exécution d'une fonction

Mesurer les temps d'exécution d'une fonction [c] - C++ - Programmation

Marsh Posté le 28-11-2002 à 17:59:24    

Comment faire pour mesurer le temps d'exécution d'une fonction en C?
J'ai testé avec la fonction clock(), mais j'ai un résultat =0...

Reply

Marsh Posté le 28-11-2002 à 17:59:24   

Reply

Marsh Posté le 28-11-2002 à 18:01:20    

si tu es sous Windows, tu peux utiliser la fonction GetTickCount(


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 28-11-2002 à 18:02:34    

Non, je voudrais une solution C standard (et c'est pour être compilé sous Unix)...

Reply

Marsh Posté le 28-11-2002 à 20:59:05    

Edit : Correction suite à la remarque de Taz@PPC
 
 
Ca ne reponds pas à ta question, mais si tu travailles sous unix, tu peux utiliser gprof, c'est un profileur.
 
Tu compiles avec gcc [-Wall -pedantic] -pg fichier.c -o monprog.... ca te genere un gmon.out que tu analyses en tapant gprof monprog gmon.out > un_fichier parce que c'est pas mal bavard. Un vi de un_fichier te donnera une sortie comme ce qui suit : ( ca vient d'un truc tout naif que j'ai fait y'a une semaine )
 


 %   cumulative   self              
 time   seconds   seconds    name
 
 35.57      1.75     1.75   addql
 21.34      2.80     1.05   getPosition
 14.84      3.53     0.73   getPixelkList
  9.96      4.02     0.49   createPixel
  9.96      4.51     0.49   getPixelValue
  4.07      4.71     0.20   getDialValue
  2.44      4.83     0.12   buildRepPixelList
  1.22      4.89     0.06   listCompareEps
  0.61      4.92     0.03   addkRepPixelList
  0.00      4.92     0.00   whereStopXY
  0.00      4.92     0.00   createPixelList
  0.00      4.92     0.00   getPixelkMax
  0.00      4.92     0.00   sautLigne
  0.00      4.92     0.00   initPicture
  0.00      4.92     0.00   showPicture
  0.00      4.92     0.00   showPixelRepList


 
Je ne sais pas si il y a un equivalent sous Windows.
 
Si tu peux te contenter d'une analyse à la seconde près, tu peux toujours faire comme ca :
 
..

Code :
  1. #include <time.h>
  2. ..
  3. ..
  4. time_t t1,t2;
  5. time(&t1);
  6. ...
  7. ...
  8. ...
  9. time(&t2);
  10. printf("Execution de la fonction XXXX : %ld secondes", difftime(d2-d1));


 
Dois surement y avoir une solution plus propre...
 
A+


Message édité par Evadream -jbd- le 28-11-2002 à 23:13:30
Reply

Marsh Posté le 28-11-2002 à 23:00:07    

Code :
  1. ...
  2.   #include<time.h>
  3.   ...
  4.   double temps;
  5.   clock_t start;
  6.   ...
  7.  
  8.      start = clock();//le compteur
  9.  
  10.      la_fonction_à_chronométrer();
  11.  
  12.      temps = (double)(clock()-start)/(double)CLOCKS_PER_SEC;
  13.      printf("\nRecherche terminée en %.2f seconde(s)!\n", temps);
  14.   ...


 
 
Merci qui [:0iimou]  


---------------
iteme.free.fr | Mon feedback
Reply

Marsh Posté le 28-11-2002 à 23:08:08    

:non: difftime(t2, t1) et pas la simple différence


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 28-11-2002 à 23:09:46    

Taz@PPC a écrit a écrit :

 :non: difftime(t2, t1) et pas la simple différence




 
Exact, merci de me corriger

Reply

Marsh Posté le 28-11-2002 à 23:32:19    

Je ne suis pas sûr que les fonctions C standard autorisent une précision meilleure que la seconde.
 
EDIT: Apparemment si... (voir au dessus le message d'itm)
 
Par contre, il existe tout de même des moyens comme :


Le problème c'est que toutes ces solutions ne sont pas universelles. Mais si c'est juste pour optimiser un programme, ça peux marcher.
 
P.S.: Tu peux aussi regarder dans les sources de Wine comment ils implementent la fonction GetTickCount.


Message édité par gatorette le 28-11-2002 à 23:34:23

---------------
each day I don't die is cheating
Reply

Marsh Posté le 28-11-2002 à 23:45:52    

qui renvoie un double si je ne m'abuse....


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 29-11-2002 à 13:15:48    

Je propose:
 
Sous Windows: QueryPerformanceCounter et QueryFrequency
Sous Unix: gettimeofday

Reply

Marsh Posté le 29-11-2002 à 13:15:48   

Reply

Marsh Posté le 29-11-2002 à 13:49:42    

Si tu veux pas d'un profiler, il y a la fonction times (dans sys/times.h). Ca donne, en milli secondes, les temps user et systèmes passé dans ton process, ainsi dans ton process et ses enfants. Le truc bien c'est que c'est le temps passé sur ton process, indépendamment de ce que fait le système par ailleurs.

Reply

Marsh Posté le 29-11-2002 à 14:01:45    

sous UNix  
prompt>time ./nom_du_prog
 
 
ca va donner le tps d utilisation CPU moyen ainsi que le tps d execution.


---------------
Je décline toute responsabilité potentielle pour le contenu de mes propos et contenu multimedia (images, videos et sons) + miroir magic.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed