Quelqu'un sais ou trouver un timer pour mesurer le temps des instruction?
Quelqu'un sais ou trouver un timer pour mesurer le temps des instruction?
: : :
Tu veux savoir combien met de temps ton programme pour être exécuté ? Il suffit de compter le nombre de cycle d'horloge nécéssaire à l'exécution de toutes les instructions.
Etape 1 : récupérer la datasheet du µP / µC que tu utilise. Dedant, tu trouve une table qui met en relation le nombre de cycles d'horloge de chaque instruction avec son mode d'adressage.
Etape 2 : faire la somme pour avoir le nombre de cycles d'horloge requis.
Etape 3 : en connaissant la fréquence du processeur et le nombre de division interne de fréquence (4 ?), tu calcule le temps en seconde.
En gros, ca dépends de pas mal de choses...
Bon dev'
Pour les processeurs recents Intel & AMD, le calcul est extremement complexe. Sur ces processeurs, l'instruction rdtsc permet de compter le nombre de cycles d'horloges. Fait une recherche sur ce forum si tu veux en savoir plus.
Je suis pas d'accord avec Smortex, suffit pas de faire l'addition des durées prises individuellement. Ca, c'était bon du temps du 6502 ou du Z80 ...
D'accord avec Blustuff ....
Ici on a affaire a un pentium. Ce processeur comporte une structure "pipeline" en trois niveaux ! C'est un "truc" d'optimisation dynamique grave ce machin ! trop long a expliquer ici, va gratter sur le Net "pentium pipeline" ou va voir dans la doc intel de l'architecture du Pentium !
Une réelle solution, c'est l'instruction " RDTSC " , ca, ok !
accessible depuis le privilège 3, utilisateur ! nickel !
Fait une recherche sur le Net "RDTSC", tu trouveras ton bonheur !
Comment tu le sait ? Il a rien dit Moi, je suis plus branché 68HC11 & co... Donc c'est la seule méthode de compter et de diviser par 4... Et c'est la méthode de base... Même si il est certain que maintenant, cette méthode, elle est complètement inutilisable avec les technologies utilisées...Envoyé par - Robby -
Oui, d'ailleurs il serait bienvenu lucky luke que tu précise a chaque fosi pour quel proc, quel os, etc. Et puis "mesurer le temps des instructions" ca veut pas dire grand chose lol.
J'ajouterais en dehors du fait que c'est pas bien de remmettre ainsi en cause les utilisateurs de ce forum, que l'instruction RDTSC, donne souvent des surprises. Non pas qu'elles ne soit pas fiable, mais que le fonctionement des processeurs recent est tellement complqué, que d'une mesure sur l'autre l'instruction ne donnera pas les même résultats (en déifférence de ecycles j'entends)
Je suis d'accord avec Robby , j'ai pu trouvé ca:Envoyé par - Robby -
Ce code est en c mais c'est des routines asm donc tu dois probablement comprendre!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 double RDTSC(void) { #ifdef linux unsigned long long x; __asm__ volatile (".byte 0x0f, 0x31" : "=A"(x)); return (double)x; #else unsigned long a, b; double x; asm { db 0x0F,0x31 mov [a],eax mov [b],edx } x = b; x *= 4294967296; x += a; return x; #endif }
A bientot
TOUT CE QUI EST VRAISEMBLABLE N'EST PAS FORCEMENT VRAI . MEFIEZ VOUS
pourais tu expliquer ton code quel valeur edx et eax sont suposer contenir
pour quoi tu multipli x par 4294967296... svp
[Balise [code] rajoutée par Smortex]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 double RDTSC(void) { #ifdef linux unsigned long long x; __asm__ volatile (".byte 0x0f, 0x31" : "=A"(x)); return (double)x; #else unsigned long a, b; double x; asm { db 0x0F,0x31 mov [a],eax mov [b],edx } x = b; x *= 4294967296; x += a; return x; #endif
[Pensez-y vous-même à l'avenir. Merci.]
Salut, je fais une explication breve, mais si celle ci ne te suffit pas n'hésite pas a demander !Envoyé par luckylucke
En faitt le nombre est sur 64 bits donc edx contient les 32 bits de poids fort et eax les 32 bits de poids faible or 2^32= 4294967296 ;
tu comprends maintenant pourquoi on multiplie edx par 2^32?? Pour obtenir le nombre sur 64 bits.
TOUT CE QUI EST VRAISEMBLABLE N'EST PAS FORCEMENT VRAI . MEFIEZ VOUS
Merci pour votre aide
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager