question sur le temps d'exeution

Tout sur les langages de programmation.

question sur le temps d'exeution

Messagepar anyone » 20 Novembre 2014, 19:21

s'il vous plait j'ai besoin d'un outil (sur windows) une commande,ou un soft
qui calcule le temps d'execution d'un .exe ,et principe de calcule du temps au niveau assembleur et merci d'avance :)
anyone
Visiteur
Visiteur
 
Messages: 23
Inscription: 25 Octobre 2014, 14:46

Re: question sur le temps d'exeution

Messagepar anyone » 21 Novembre 2014, 04:31

OK!
on peut utiliser l'instruction asm :RDTSC (read time stamp counter) qui met dans EDX:EAX le nbre des tick d'horloge
ecoulés . on va l'utiliser de la façon suivante:
RDTSC
CDQ ;le resultat etant en quadeWord (EDX:EAX)
MOV QWORD PTR [base+0],EAX
;bloc d'instruction dont on veut calcule
;le tmps d'execution
RDTSC
SUB EAX,QWORD PTR [base+0]
jusqu'à maintenant on a trouvé le nombre de cycles d'horloge il faut donc le diviser par la frequence d'horloge de votre processeur
pour savoir le temps d'exe du bloc :gné: sur ce je vous demande votre avis! est-ce que j'ai raison ou pas!
anyone
Visiteur
Visiteur
 
Messages: 23
Inscription: 25 Octobre 2014, 14:46

Re: question sur le temps d'exeution

Messagepar etherlord » 21 Novembre 2014, 07:13

Cela peut fonctionner, mais ne fournira pas forcément un résultat correct avec les architectures actuelles (multi-core). Il est recommandé d'utiliser l'API QueryPerformanceCounter.

etherlord
etherlord
Triumvirat
Triumvirat
 
Messages: 2490
Inscription: 22 Mars 2004, 16:12

Re: question sur le temps d'exeution

Messagepar anyone » 21 Novembre 2014, 18:09

merci etherlod :D ;
l'API QueryPerformanceCounter ça a l'air bien pour se simplifier la vie
anyone
Visiteur
Visiteur
 
Messages: 23
Inscription: 25 Octobre 2014, 14:46

Re: question sur le temps d'exeution

Messagepar anyone » 23 Novembre 2014, 23:36

mais j'ai un petit probleme avec cette API :oops:
le resultat est stocké dans un LARGE_INTEGER mais moi je code en C ,et j'ai pas trouvé le
format (%<qqch>) pour afficher ce resultat avec printf. j'ai testé %ll mais ça n'a pas marché :cry:
anyone
Visiteur
Visiteur
 
Messages: 23
Inscription: 25 Octobre 2014, 14:46

Re: question sur le temps d'exeution

Messagepar etherlord » 24 Novembre 2014, 07:45

Pour prendre en charge les très grands nombres, il faut utiliser une librairie (Bignum, GMP, etc.)

etherlord
etherlord
Triumvirat
Triumvirat
 
Messages: 2490
Inscription: 22 Mars 2004, 16:12

Re: question sur le temps d'exeution

Messagepar dionosis » 24 Novembre 2014, 13:35

Salut,

hXXp://msdn.microsoft.com/en-us/library/windows/desktop/aa383713%28v=vs.85%29.aspx

Pas besoin de lib de BigNum ici :)
S'il compile le long long alors il peut au pire effectuer des calculs dessus.
Mais peut-être même pas besoin...

@anyone>
Quel compilateur emploies tu ?

Utilise le QuadPart de la structure et sers toi de "%I64d" si VS (2008 min), "%lld" si autre (pas trop ancien).
Si ton implémentation de printf ne le supporte quand même pas, mets à jour ton compilateur ou si tu ne peux pas (ça m'étonnerait, c'est une problématique d'embarqué habituellement) écrit simplement un équivalent en utilisant des divisions successives vu que comme précisé plus haut tu es en mesure d'effectuer des calculs dessus.

++
Avatar de l’utilisateur
dionosis
Maître des ténèbres
Maître des ténèbres
 
Messages: 507
Inscription: 09 Octobre 2009, 21:43

Re: question sur le temps d'exeution

Messagepar Horgh » 24 Novembre 2014, 14:24

anyone a écrit:mais j'ai un petit probleme avec cette API :oops:
le resultat est stocké dans un LARGE_INTEGER mais moi je code en C ,et j'ai pas trouvé le
format (%<qqch>) pour afficher ce resultat avec printf. j'ai testé %ll mais ça n'a pas marché :cry:


https://stackoverflow.com/questions/284 ... g-long-int
Avatar de l’utilisateur
Horgh
Maître des ténèbres
Maître des ténèbres
 
Messages: 526
Inscription: 21 Janvier 2010, 16:24

Re: question sur le temps d'exeution

Messagepar anyone » 24 Novembre 2014, 14:34

dionosis a écrit:@anyone>
Quel compilateur emploies tu ?

j'utilise le GNU GCC Compiler,
voici le code que j'ai ecrit :
Code: Tout sélectionner
#include<stdio.h>
#include<windows.h>
#include<Winbase.h>
int main(){
   int x=0,y=12;
 LARGE_INTEGER *p,*q;
 LARGE_INTEGER r;
 QueryPerformanceCounter(p);
 x=y*x-y*y;  //pour tester
 QueryPerformanceCounter(q);
 if(QueryPerformanceCounter(p)&&QueryPerformanceCounter(q))
   r=(*q)-(*p);  // erreur de compilation: il n'arrive pas à soustraire 2 LARGE_INTEGER
                  //"invalid operands to binary - "
 printf("%lld",r);
 return 0;
 }
anyone
Visiteur
Visiteur
 
Messages: 23
Inscription: 25 Octobre 2014, 14:46

Re: question sur le temps d'exeution

Messagepar dionosis » 24 Novembre 2014, 15:12

@anyone>
Apparemment tu n'as lu ni la doc que je t'ai linkée, ni ma réponse, ni tes cours sur les pointeurs, ni tes cours sur les optimisations du compilateur (pour ce dernier c'est pardonnable).

Code: Tout sélectionner
#include <windows.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    LARGE_INTEGER p, q;

    QueryPerformanceCounter(&p);
    Sleep(123);
    QueryPerformanceCounter(&q);
    printf("%llu",(unsigned long long)(q.QuadPart) - (unsigned long long)(p.QuadPart));

    return 0;
 }


++
Avatar de l’utilisateur
dionosis
Maître des ténèbres
Maître des ténèbres
 
Messages: 507
Inscription: 09 Octobre 2009, 21:43

Re: question sur le temps d'exeution

Messagepar anyone » 24 Novembre 2014, 18:00

mes respects ! :shock:
anyone
Visiteur
Visiteur
 
Messages: 23
Inscription: 25 Octobre 2014, 14:46


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités