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

ZogStriP
Messages postés
164
Date d'inscription
dimanche 16 novembre 2003
Statut
Modérateur
Dernière intervention
5 juillet 2005
1 -
utiliser la fonction time (sous linux) marche aussi bien !
cs_AlexMAN
Messages postés
1537
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
1 -
Salut NitRic,

je voulais simplement demander si l'utlisation de l'api GetTickCount ne serait pas plus simple :

int iAvant, iApres;
int iResult;

iAvant = GetTickCount(); //Je sais pas sil ya des arguments, a verifier
{ ...............CODE...............}
iApres = GetTickCount();

iResult = iApres - iAvant;

printf("Voila : %d\n", iResult);


Ca me semble bocou plus simple, bien que je n'ai rien a reprocher a ta methode....

Voila NitRic...Bonne prog !

A++

Alhexman
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
5 -
+1

c'est comme ca que j'ai toujours fait (mais avec clock() )
NitRic
Messages postés
409
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 ::.)~
NitRic
Messages postés
409
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 ...

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.