Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1317 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°256376
thenutskil​ler
1+1=3
Posté le 28-11-2002 à 17:59:24  profilanswer
 

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...

mood
Publicité
Posté le 28-11-2002 à 17:59:24  profilanswer
 

n°256378
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 28-11-2002 à 18:01:20  profilanswer
 

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


---------------
J'ai un string dans l'array (Paris Hilton)
n°256383
thenutskil​ler
1+1=3
Posté le 28-11-2002 à 18:02:34  profilanswer
 

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

n°256507
Evadream -​jbd-
Posté le 28-11-2002 à 20:59:05  profilanswer
 

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
n°256624
ITM
Avatar peint à la main
Posté le 28-11-2002 à 23:00:07  profilanswer
 

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
n°256632
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 28-11-2002 à 23:08:08  profilanswer
 

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


---------------
du bon usage de rand [C] / [C++]
n°256639
Evadream -​jbd-
Posté le 28-11-2002 à 23:09:46  profilanswer
 

Taz@PPC a écrit a écrit :

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




 
Exact, merci de me corriger

n°256651
gatorette
Posté le 28-11-2002 à 23:32:19  profilanswer
 

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
n°256660
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 28-11-2002 à 23:45:52  profilanswer
 

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


---------------
du bon usage de rand [C] / [C++]
n°256927
kenshiro18​2
Posté le 29-11-2002 à 13:15:48  profilanswer
 

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

mood
Publicité
Posté le 29-11-2002 à 13:15:48  profilanswer
 

n°257079
matafan
Posté le 29-11-2002 à 13:49:42  profilanswer
 

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.

n°257100
Gugus2000
Profil : Rien
Posté le 29-11-2002 à 14:01:45  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
Vitesse d'execution de code STL sous VisualC++ !?!?Retourner plusieurs résultats d'une fonction
Fonction select ...[PHP] appel d'une fonction dans un autre fichier
PHP et sécurité, exécution de scripts via un formulaire.faire appel a une fonction qui se trouve dans un autre fichier !
Difference entre une procedure et une fonction ??[VB] Une fonction qui renvoie une valeur
Récupérer le temps en ms, c possible ? -ntFonction en Shell...
Plus de sujets relatifs à : [c] Mesurer les temps d'exécution d'une fonction


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR