Calcul de temps de traitement en C

Calcul de temps de traitement en C - Programmation

Marsh Posté le 04-12-2001 à 15:32:14    

Salut,
Voilà, je cherche le moyen de calculer le temps mis par l'exécution d'une certaine fonction, afin de le comparer avec d'autres méthodes (il s'agit simplement de tris de tableaux)...
Quelqu'un peut-il m'indiquer la  fonction ? Je sais qu'il y en a une, mais pas moyend de la retrouver
Merci d'avance...

Reply

Marsh Posté le 04-12-2001 à 15:32:14   

Reply

Marsh Posté le 04-12-2001 à 15:33:05    

clock() avant
clock() apres...

Reply

Marsh Posté le 04-12-2001 à 15:35:54    

Merci !  
euh, des détails sur la syntaxe ? comment récupérer le temps ?
Merci !

Reply

Marsh Posté le 04-12-2001 à 15:38:00    

si t sous windows prefere GetTickCount qui me semble est un chtit peu plus precise

Reply

Marsh Posté le 04-12-2001 à 15:39:33    

time.h
ca renvoi des clock_t
 
et tu fais (clock_t2 - clock_t2)/CLOCK_PER_SEC

Reply

Marsh Posté le 04-12-2001 à 15:41:49    

euh, au risk de passer pour un bléro, vous pouvez filer un petit exple ?
 
si j'ai bien compris :  
clock();
fonction_à_exécuter();
clock();
 
Mais pour le calcul ?
Merci encore

Reply

Marsh Posté le 04-12-2001 à 15:44:14    

euh, et CLOCK_PER_SEC, je l'initialise à combien svp ?
Merci pour la 6ème fois je crois :o)

Reply

Marsh Posté le 04-12-2001 à 15:44:22    

plutot
 
 
var = clock();
calcul
var = clock()-var;
 
et var contient le tps ecoule

Reply

Marsh Posté le 04-12-2001 à 15:44:53    

CLOCK_PER_SEC  c une constante, utilise sans toucher et ce sera OK

Reply

Marsh Posté le 04-12-2001 à 15:47:05    

Pilou51 a écrit a écrit :

euh, et CLOCK_PER_SEC, je l'initialise à combien svp ?
Merci pour la 6ème fois je crois :o)  




Il est defini dans time.h...
 
"normalement" clock doit renvoyer des milisecondes avec une precision de 10 ms et pas beaucoup plus d'une heure...
 
GetTickCount doit marcher de la meme maniere je suppose ?

Reply

Marsh Posté le 04-12-2001 à 15:47:05   

Reply

Marsh Posté le 04-12-2001 à 15:47:39    

euh, CLOCK_PER_SEC est undeclared...
il est défini dans time.h normalement non ?

Reply

Marsh Posté le 04-12-2001 à 15:48:54    

Pilou51 a écrit a écrit :

euh, CLOCK_PER_SEC est undeclared...
il est défini dans time.h normalement non ?  




essayes CLOCKS_PER_SEC

Reply

Marsh Posté le 04-12-2001 à 15:51:23    

euh c ok maintenant...
mais le temps de calcul semble être trop court...
il affiche toujours 0 (et je suis en long)...  
d'autres précisions ?

Reply

Marsh Posté le 04-12-2001 à 15:54:27    

Ben si tu fais un calcul pour optimiser la fonction, ne la fais pas tourner une fois mais bpc de fois
 
ensuite si tu veux de la precision vire la division par CLOCKS_PER_SEC

Reply

Marsh Posté le 04-12-2001 à 15:54:39    

Pilou51 a écrit a écrit :

euh c ok maintenant...
mais le temps de calcul semble être trop court...
il affiche toujours 0 (et je suis en long)...  
d'autres précisions ?  




moins de 10ms...
 
Tu travailles avec quoi ?
Dans visual il me semble qu'il y a un profiler qui te donnent le temps moyen dans chaque methode de ton projet...

Reply

Marsh Posté le 04-12-2001 à 15:58:58    

oui effectivement je bosse sous visual...
je maîtrise pas vraiment, j'ai toujours codé sous Nunux, et du Java... tu peux m'en dire plus sur cette option de Visual stp ?
Merci

Reply

Marsh Posté le 04-12-2001 à 15:59:08    

BENB a écrit a écrit :

 
moins de 10ms...
 
Tu travailles avec quoi ?
Dans visual il me semble qu'il y a un profiler qui te donnent le temps moyen dans chaque methode de ton projet...  




 
il est mauvais ce profiler, je trouve  
 
(m'a deja sorti des resultats 100% bidon, louche)

Reply

Marsh Posté le 04-12-2001 à 16:04:07    

même en virant le CLOCKS_PER_SEC il me met toujours 0...
bizarre non ?

Reply

Marsh Posté le 04-12-2001 à 16:05:38    

chrisbk a écrit a écrit :

 
 
il est mauvais ce profiler, je trouve  
 
(m'a deja sorti des resultats 100% bidon, louche)  




 
A l'epoque (en 1997 - 1998 Visual 5.0) il fallait quand verifier... mais ca avait l'air correct en general...

Reply

Marsh Posté le 04-12-2001 à 16:07:43    

BENB a écrit a écrit :

 
 
A l'epoque (en 1997 - 1998 Visual 5.0) il fallait quand verifier... mais ca avait l'air correct en general...  




 
il m'a facher, celui du 6
J'avais une fonction A, mettons qu'elle tournait en 5s (tps mesure au GetTickCount)
 
je me casse a l'optmiser SIMD . temps 2.5s (GetTickCount tjs)
 
 
G passer ca au profiler de visu , il m'a sorti que ma fonction optimise etait ~25% plus lente que la normale
 
depuis je le boude :D

Reply

Marsh Posté le 04-12-2001 à 16:09:17    

je peux en savoir plus sur le GetTickCount stp ?

Reply

Marsh Posté le 04-12-2001 à 16:14:07    

chrisbk a écrit a écrit :

 
 
il m'a facher, celui du 6
J'avais une fonction A, mettons qu'elle tournait en 5s (tps mesure au GetTickCount)
 
je me casse a l'optmiser SIMD . temps 2.5s (GetTickCount tjs)
 
 
G passer ca au profiler de visu , il m'a sorti que ma fonction optimise etait ~25% plus lente que la normale
 
depuis je le boude :D  




Par contre il ralenti toute l'appli...
Mais il est capable de te dire combien de temps tu passes dans une methode en fonction de l'appelant...
 
ou si prefere de te faire des graphes d'appel en te disant pour une methode donnee ou est passe le temps...
 
Je ne suis pas sure d'etre tres claire la :D
 
Sinon pour l'invoquer c'est dans les menus de Visual me semble-t-il...

Reply

Marsh Posté le 04-12-2001 à 16:14:10    

#include <windows.h>
 
.....
 
 
 
DWORD a = GetTickCount();
 
//calcul
 
a = GetTickCount()-a;
 
printf("tps en ms : %d\n",a);

Reply

Marsh Posté le 04-12-2001 à 16:16:30    

BENB a écrit a écrit :

 
Par contre il ralenti toute l'appli...
Mais il est capable de te dire combien de temps tu passes dans une methode en fonction de l'appelant...
 
ou si prefere de te faire des graphes d'appel en te disant pour une methode donnee ou est passe le temps...
 
Je ne suis pas sure d'etre tres claire la :D
 
Sinon pour l'invoquer c'est dans les menus de Visual me semble-t-il...  




 
pur le mettre en route, fo deja la version enterprise de visu
 
ensuite faut aller dans project-settings-link-enable profiling
 
ensuite build - profile
 
a noter truc c.h.i.a.n.t c'est qu'il ne changera pas le rep courant de votre programme (genre il le lancera dans monProjet\debug a la place de monProjet, ce qui peut etre chaint si vous charger des fichiers avec des chemins relatifs)
 
 
Sinon ca aide pour savoir cbien de fois tu hit une fonction, mais pour le tps que tu passe dedans ca me semblait un peu pipo... (suite a cette xp)

Reply

Marsh Posté le 04-12-2001 à 16:32:01    

OK ça marche !!!
Les résultats sont à peu près cohérents entre le profiler et le GetClickCount..
Merci bcp à tous les deux !

Reply

Marsh Posté le 05-12-2001 à 11:42:23    

Tu peux recuperer un profiler hierarchique ici:
http://www.codercorner.com/News.htm
(c'est du C++ je crois, mais ca doit etre faisable
de l'adapter pour du C..
et puis si t'es sous visual, le C++ ca passe :) )
 
A+
LEGREG

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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