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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 604 fois - Téléchargée 31 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

Messages postés
1
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
13 janvier 2007

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)
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

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 ::.)~
Messages postés
9
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
24 février 2006

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.
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

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 ...
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

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 ::.)~
Afficher les 8 commentaires

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.