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

  FORUM HardWare.fr
  Programmation
  C

  Calculer le temps d'execution

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Calculer le temps d'execution

n°1887819
Nethacker
rule televisions, rule minds
Posté le 25-05-2009 à 22:48:35  profilanswer
 

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

mood
Publicité
Posté le 25-05-2009 à 22:48:35  profilanswer
 

n°1887826
Elmoricq
Modérateur
Posté le 25-05-2009 à 23:00:50  profilanswer
 

Pourquoi ne pas utiliser du profiling pour faire ça ?
Par exemple -gprof avec gcc ?


Message édité par Elmoricq le 25-05-2009 à 23:01:21
n°1887827
Joel F
Real men use unique_ptr
Posté le 25-05-2009 à 23:01:41  profilanswer
 

sinon gettimeofday ou QueryPerformanceCounter

n°1887900
Taz
bisounours-codeur
Posté le 26-05-2009 à 10:31:15  profilanswer
 

times(2) / getrusage(2)

n°1889770
Nethacker
rule televisions, rule minds
Posté le 30-05-2009 à 13:30:12  profilanswer
 

Finalement j'ai opté pour clock();
 

Code :
  1. #include<time.h>
  2. #include<stdio.h>
  3.  
  4. int main(void)
  5. {
  6.  clock_t ticks1, ticks2;
  7.  
  8.  ticks1=clock();
  9.  ticks2=ticks1;
  10.  while((ticks2/CLOCKS_PER_SEC-ticks1/CLOCKS_PER_SEC)<1)
  11.    ticks2=clock();
  12.  
  13.  printf("Took %ld ticks to wait one second.\n",ticks2-ticks1);
  14.  printf("This value should be the same as CLOCKS_PER_SEC which is %ld.\n",CLOCKS_PER_SEC);
  15.  return 0;
  16. }


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 :)

n°1889772
Joel F
Real men use unique_ptr
Posté le 30-05-2009 à 14:10:08  profilanswer
 

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

n°1889827
Nethacker
rule televisions, rule minds
Posté le 30-05-2009 à 20:13:12  profilanswer
 

Code :
  1. start = clock();
  2. selection(nombres,N);
  3. end = clock();
  4. printf("Tableau trié en %ld ms \n",(end-start)/1000);


avec clock_t comme type pour start et end !
et ça marche hyper bien pour moi ...
 

n°1889863
Joel F
Real men use unique_ptr
Posté le 31-05-2009 à 07:51:30  profilanswer
 

mesure un truc qui dure 0,01ms et on en reparle

n°1889894
Nethacker
rule televisions, rule minds
Posté le 31-05-2009 à 12:40:29  profilanswer
 

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.

n°1890046
Gf4x3443
Killing perfection
Posté le 01-06-2009 à 10:31:37  profilanswer
 

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.

Message cité 1 fois
Message édité par Gf4x3443 le 01-06-2009 à 10:35:46

---------------
Petit guide Kerberos pour l'administrateur pressé
mood
Publicité
Posté le 01-06-2009 à 10:31:37  profilanswer
 

n°1890077
Taz
bisounours-codeur
Posté le 01-06-2009 à 13:02:23  profilanswer
 

gettimeofday à part mesurer le temps qui passe, ça ne te diras jamais combien toi tu as à consommé.

n°1890079
Joel F
Real men use unique_ptr
Posté le 01-06-2009 à 13:07:44  profilanswer
 

Gf4x3443 a écrit :


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


 
Certes. Les clock POSIX j'ai trjrs eu du mal a en faire qq chose :/

n°1890109
Gf4x3443
Killing perfection
Posté le 01-06-2009 à 15:01:18  profilanswer
 

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.


Message édité par Gf4x3443 le 01-06-2009 à 15:01:42

---------------
Petit guide Kerberos pour l'administrateur pressé

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

  Calculer le temps d'execution

 

Sujets relatifs
problème lors de l'execution/ source pas OK ^^"JCL utilisation de COND pour arrêter execution job
Apelle de la fonction Click de composant crée ou cour de l'executionLancer 2 actions en meme temps ?
[SQL]Calculer le nombre de lundi entre 2 datesVSB execution sub asynchrone
execution d'un .SQL dans un .BAT[wxWidget] calculer le temps d'éxecution d'un bout de code
[C] Calculer le temps d'exécution d'une boucle.calculer temps d'exécution d'un prog
Plus de sujets relatifs à : Calculer le temps d'execution


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