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

  FORUM HardWare.fr
  Programmation

  Comment connaitre le temp d'éxécution d'une boucle en C++ ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment connaitre le temp d'éxécution d'une boucle en C++ ?

n°20327
LMF
///Miste & TDSiste
Posté le 25-03-2001 à 17:59:02  profilanswer
 

Dans mon programme, il y a un tri (une boucle) or j'aimerais savoir comment connaitre le temps que l'ordinateur à mis pour l'éffectuer.
Il y a la fonction  clock, mais dans mon cas, elle me donne le temps écoulé depuis le lancement du programme ce qui me sert à rien.
 
J'utilise Borland C++ Builder 5.
 
Merci

mood
Publicité
Posté le 25-03-2001 à 17:59:02  profilanswer
 

n°20328
verdoux
And I'm still waiting
Posté le 25-03-2001 à 18:16:41  profilanswer
 

Tu peux utiliser une fois l'appel clock AVANT d'entrer dans la boucle et une fois APRES la boucle, puis faire la différence.

n°20332
line
Bisounours'Land
Posté le 25-03-2001 à 18:19:38  profilanswer
 

Verdoux a écrit a écrit :

Tu peux utiliser une fois l'appel clock AVANT d'entrer dans la boucle et une fois APRES la boucle, puis faire la différence.




ouah la grosse astuce :)

n°20333
verdoux
And I'm still waiting
Posté le 25-03-2001 à 18:20:46  profilanswer
 

C'est pas comme ça que tout le monde fait ? :D

n°20631
BifaceMcLe​OD
The HighGlandeur
Posté le 27-03-2001 à 02:30:22  profilanswer
 

Verdoux> Si, bien sûr.
 
Attention, si tu es sur PC avec un OS Microsoft (sauf Windows NT et Windows 2000), et que ta boucle est rapide, tu risques d'avoir des surprises en voyant le temps écoulé : 0 millisecondes, ou, de temps en temps, 55 millisecondes. En tout cas, toujours un multiple de 55 millisecondes.
 
C'est parce que, pour des raisons historiques, l'horloge du PC (sous DOS) est modifiée 18,2 fois (environ) par seconde, et la résolution de clock() est donc celle-là. Windows NT et UNIX n'ont évidemment pas ce problème.
 
Comment faire dans ce cas ? C'est simple, répéter l'opération n fois, avec n suffisamment grand pour obtenir la précision souhaitée (en général, une précision de l'ordre du pourcent ou de quelques pourmilles est largement suffisante).
 
Personnellement, je travaille actuellement sur des opérations qui durent quelques centaines de nanosecondes. Résultat, pour obtenir une précision suffisante dans la mesure du temps d'exécution, je suis obligé de les répéter 10 millions de fois...

n°20634
tfj57
Posté le 27-03-2001 à 05:24:38  profilanswer
 

Bonjour à toutes et à tous,
 
Pour les Pentiums, il y a une instruction assembleur (rdtsc) qui permet de récupérer la valeur d'un compteur interne sur 64 bits qui est incrémenté à la fréquence du CPU.
Il est donc possible de l'utiliser pour faire des mesures très précises.
Voici, ci-dessous, un exemple de programme en Visual C++ 6.0.
Bien sûr, il est possible d'ajouter au début une fonction qui détermine automatiquement la fréquence du CPU …
 
Salutations
----------------------------------
#define CPUFREQ 450000000.0 /* Mettre Ici la fréquence du CPU */
 
/* Recupération du compteur interne sur 64 bits */
void RDTSC(v)
DWORD *v;
{
  _asm
  {
    push eax
    push ebx
    push ecx
    push edx
    mov ebx,v
    mov ecx,0
    rdtsc   /* codes : 0x0F 0x31 */
    mov [ebx+0],eax
    mov [ebx+4],edx
    pop edx
    pop ecx
    pop ebx
    pop eax
  }
}
 
main()
{
  _int64 t0,t1,tajust; /* Entiers sur 64 bits */
  double t;
 
  RDTSC(&t0);
 
  RDTSC(&t0);
  RDTSC(&t1);
  tajust=t1-t0;
 
  RDTSC(&t0);
  /* code a mesurer */
  ...
  RDTSC(&t1);
  t=(t1-t0-tajust)/(double)CPUFREQ; /* t en s, t1-t0-tajust en cycles cpu */
  ...
}

n°20647
LMF
///Miste & TDSiste
Posté le 27-03-2001 à 09:32:31  profilanswer
 

Merci pour vos réponses.


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

  Comment connaitre le temp d'éxécution d'une boucle en C++ ?

 

Sujets relatifs
[ASP & JAVASCRIPT] connaitre les repertoire[HTML] [JAVASCRIPT] connaitre la position du curseur dans un TEXTAREA
est il utile de connaitre plusieurs ou tous les langages ????????[HTML] [JAVASCRIPT] Coment connaitre la taille d'une layer ??
Execution d'une macro dans powerpoint:[ASP]Execution d'une page ASP sur un autre server
[VBSCRIPT] comment connaitre le contenu d'un dossier ?[Moteur php] Comment stopper l'execution d'un script ??
[ASP] Utilisation de RECORDCOUNT & boucle avec creation de variableBesoin de connaitre Syntaxe pour conditionnel complexe VBScript
Plus de sujets relatifs à : Comment connaitre le temp d'éxécution d'une boucle en C++ ?


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