Comment calculer le temp d'exécution de certaines fonctions ou bout de code dans ces programme

5/5 (8 avis)

Snippet vu 13 173 fois - Téléchargée 33 fois

Contenu du snippet

Un simple exemple du: comment calculer le temp d'exécution pour optimisation ou autre ... Code en C

Source / Exemple :


/*
    Fichier chrono.h

  • /
#ifndef CHRONO_H #define CHRONO_H #include <stdio.h> #include <time.h> #if defined(__cplusplus) && __cplusplus extern "C" { #endif /* Pour s'assurer que clock_t soit bien définie */ #ifndef _CLOCK_T_DEFINED typedef long clock_t; #define _CLOCK_T_DEFINED #endif static clock_t STARTCLOCK; static clock_t ENDCLOCK; #define StartClock() STARTCLOCK=clock(); #define StopClock() ENDCLOCK=clock(); static void ShowClock(char * prefix, short show_unformated) { printf("\n*****************************************************\n"); if ( prefix != NULL ) { printf("-- %s --\n", prefix); } printf("Elapsed time: %4.2f\n", (double) ( ( ENDCLOCK - STARTCLOCK ) / CLOCKS_PER_SEC )); if ( show_unformated == 1 ) { printf("Unformated: %d\n", (ENDCLOCK - STARTCLOCK)); } printf("*****************************************************\n"); } #if defined(__cplusplus) && __cplusplus } #endif #endif /* Fin du fichier chrono.h */ /* Comment l'utiliser !? C'est simlpe, très simple
  • /
#include <string.h> #include "chrono.h" int main(int argc, char* argv[]) { char machaine[50]; int i = 0; StartClock(); /* Début */ for ( ; i < 5000; i++ ) { strcpy(machaine, "une chaine a copier ici"); } StopClock(); /* Fin */ ShowClock("strcpy() test", 1); /* affiche le résultat */ /* C'est tout! Simplement 3 petites lignes */ return 0; }

Conclusion :


Devrait fonctionner sous la plupart des compilateurs C/C++ ou les fonctions clock() et printf() existe ... stdio.h(printf) et time.h(clock) sont requis.

A voir également

Ajouter un commentaire Commentaires
anneclo Messages postés 1 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 13 janvier 2007
13 janv. 2007 à 22:13
Quelqu'un peut-il m'expliquer pourquoi l'exécution de ce bout de programme ne me rend que des zéros ? (avec windows et devc 4.9.9)
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
16 avril 2004 à 03:16
exactement comme mon code, sauf que moi j'ai fait ceci pour 'formater' si on veut le résultat ...


StartClock();
// instructions ...
StopClock();
ShowSlock("prefix ici, sinon NULL", 0 ou 1);


tout simplement, StartClock() et StopClock() sont des #define donc

StartClock(); // sera remplacé par STARTCLOCK = clock();
et
StopClock(); // sera remplacé par ENDCLOCK = clock();

et le ShowClock() est une petite fonction qui permet d'afficher le résultat tout simplement ...


~(.:: NitRic ::.)~
cs_Pacifica Messages postés 9 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 24 février 2006
14 avril 2004 à 21:02
Moi que je veux connaitre le temps d'execution d'une de mes instructions je fais ceci:
#include <time.h>
void main()
{
clock_t D,F;
D=clock();
instruction...
F=clock();
printf("Temps=%f\n\r",(F-D)/CLK_TCK);
}
J'utilse ceci car pour moi je trouve que c'est rapide.
Voilà pour ma part,
Pacifica.
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
11 avril 2004 à 18:24
j'allais oublier, alexman, GetTickCount() renvoie un DWORD et non un int

typedef unsigned long DWORD;

un entier non signé 32bits ... un int est(par défaut) signé

ca peut servir à éviter par exemple: signed/unsigned mismatch
qui n'est qu'un warning mais bon ...
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
11 avril 2004 à 18:18
Vous êtes difficile hein ...

time() renvoie l'heure, si ton process perd dison .03 sec de temp CPU à cause d'un autre programme ou autre, le temp d'exécution de ton programme va être .03 sec plus haut en utilisant time(), même chose pour GetTickCount() qui renvoie le uptime de Windows. clock() renvoie le temp CPU utilisé par le process appellant sans compter le temp CPU utilisé par d'autre process, si les autres process en cours font perdre .03 sec à ton process, ce .03 sec ne sera pas calculé avec clock(), ce qui est, à mon avis, plus précis que GetTickCount() & time() ...

En plus, mon code, d'après mes connaissances, est portable, Windows, Linux/Unix, Mac, etc ... un simple copier/coller et hop! le tour est joué!


~(..: NitRic ::.)~

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.