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

  FORUM HardWare.fr
  Programmation
  ASM

  [ASM]Comment afficher la durée d'éxécution d'un programme en asm?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ASM]Comment afficher la durée d'éxécution d'un programme en asm?

n°677424
jijiz
Posté le 18-03-2004 à 18:41:39  profilanswer
 

Bonjour,
 
Je suis en train de faire un programme qui demande des saisies et éffectue diverses opérations, j'aimerais retourner la durée d'éxécution de ce programme. Comment faire? je n'ai pas d'idées.
 
 
Merci

mood
Publicité
Posté le 18-03-2004 à 18:41:39  profilanswer
 

n°677563
jijiz
Posté le 18-03-2004 à 21:32:54  profilanswer
 

upla

n°677675
bjone
Insert booze to continue
Posté le 19-03-2004 à 01:21:06  profilanswer
 

OS ?

n°677702
jijiz
Posté le 19-03-2004 à 08:14:25  profilanswer
 

c'est de l'asm 80x86 sous windows xp (pkoi tu as besoin de connaitre l'os?)

n°677945
bjone
Insert booze to continue
Posté le 19-03-2004 à 11:52:24  profilanswer
 

savoir ce que tu as le droit de faire, et le mode de fonctionnement du CPU.
 
le mieux c'est de passer par l'API QueryPerformanceCounter/QueryPerformanceFrequency, ou GetTickCount...

n°678007
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 19-03-2004 à 12:26:54  profilanswer
 

sinon t'utilises RDTSC pour connaitre le nombre de cycles, et tu fais une règle de 3 en fonction de la puissance de ton processeur :D
exemple : un programme bouffe 400 000 cycles (via RDTSC) sur un processeur à 133 Mhz (133 000 000 de cycles par seconde)
=> temps passé en secondes = 400 000 / 133 000 000 = 0.03 secondes
 
OK je sors
[:neowen]


---------------
J'ai un string dans l'array (Paris Hilton)
n°678029
bjone
Insert booze to continue
Posté le 19-03-2004 à 12:47:01  profilanswer
 

non tu sors, parcequ'il faut être en ring 0 pour utiliser RDTSC sous un noyau NT, donc tu peux pas sous un process win32.  :whistle: (je vérifies dans le doute :D)
 
---- autant pour moi y'a pas de problème de ring 0 (donc c'est moi qui sors  :whistle:  :jap: )


Message édité par bjone le 19-03-2004 à 12:54:45
n°678051
drasche
Posté le 19-03-2004 à 13:21:14  profilanswer
 

prendre le temps consacré à ton processus me semble la meilleure solution :jap: (GetProcessTimes)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°678064
jijiz
Posté le 19-03-2004 à 13:32:30  profilanswer
 

mais je voudrais calculer cette durée en asm dans le prog lui même.

n°678071
drasche
Posté le 19-03-2004 à 13:42:21  profilanswer
 

si tu veux savoir combien de temps prend ton programme pour s'exécuter, soit tu te tapes la doc pour savoir combien de cycle prennent les instructions, soit tu demandes à Windows combien de temps il a consacré à ton programme, avec GetProcessTimes. Tu fais quelques appels API Win32 pour d'abord identifier ton process, puis savoir combien de temps il a passé sur le CPU. Rien t'empêche de le faire en ASM mais ces appels me semblent un passage obligé. Ensuite, tu interprêtes les données reçues en ASM :D


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
mood
Publicité
Posté le 19-03-2004 à 13:42:21  profilanswer
 

n°678512
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 19-03-2004 à 23:14:12  profilanswer
 

jijiz a écrit :

mais je voudrais calculer cette durée en asm dans le prog lui même.


ben c'est comme je t'ai dit, t'as qu'a utiliser RDTSC
exemple :

Code :
  1. push edx
  2. push eax
  3. rdtsc   // récupère le nbre de cycles depuis le dernier rdtsc dans edx:eax
  4. push eax   // sauvegarde le nb de cycles
  5. [...]   // ton programme
  6. rdtsc   // nb de cycles depuis le rdtsc précédent
  7. pop edx // récupère le nb de cycles précédent
  8. sub eax,edx // soustrait le nb de cycles actuels et le nb de cycles précédent


résultat : dans eax, tu as le nombre de cycles utilisés par ton programme, il ne te reste plus qu'a utiliser la méthode que je t'ai donné plus haut en fonction de la vitesse de ton processeur pour calculer le temps


Message édité par Harkonnen le 19-03-2004 à 23:32:49

---------------
J'ai un string dans l'array (Paris Hilton)
n°678513
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 19-03-2004 à 23:15:04  profilanswer
 

drasche a écrit :

si tu veux savoir combien de temps prend ton programme pour s'exécuter, soit tu te tapes la doc pour savoir combien de cycle prennent les instructions,


rdtsc roulaize :o


Message édité par Harkonnen le 19-03-2004 à 23:15:21

---------------
J'ai un string dans l'array (Paris Hilton)
n°678516
R3g
fonctionnaire certifié ITIL
Posté le 19-03-2004 à 23:20:49  profilanswer
 

Harkonnen a écrit :

sinon t'utilises RDTSC pour connaitre le nombre de cycles, et tu fais une règle de 3 en fonction de la puissance de ton processeur :D
exemple : un programme bouffe 400 000 cycles (via RDTSC) sur un processeur à 133 Mhz (133 000 000 de cycles par seconde)
=> temps passé en secondes = 400 000 / 133 000 000 = 0.03 secondes
 
OK je sors
[:neowen]

J'y connais rien en ASM et j'ai aucune idée de ce que veut dire RDTSC, mais ta méthode suppose que ton prog est le seul processus à s'éxécuter sur la machine, non ?


---------------
Au royaume des sourds, les borgnes sont sourds.
n°678517
drasche
Posté le 19-03-2004 à 23:21:16  profilanswer
 

Harkonnen a écrit :

rdtsc roulaize :o


ouais mais sous Win.... si son process est mis en pause le temps qu'une autre tâche s'exécute, il fait quoi?
 
edit: brillamment grillé par R3g [:poischich]


Message édité par drasche le 19-03-2004 à 23:21:54

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°678524
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 19-03-2004 à 23:30:56  profilanswer
 

rdtsc ne concerne que le processus dans lequel il est lancé, c'est une instruction très bas niveau, les résultats obtenus ne sont valables que pour son propre processus.
il suffit de faire un test tout con pour s'en rendre compte : encadrer un bloc asm avec 2 rdtsc, le lancer sous différentes configurations, et on se rend compte qu'on obtient toujours peu ou prou la même chose


Message édité par Harkonnen le 19-03-2004 à 23:31:34

---------------
J'ai un string dans l'array (Paris Hilton)
n°678525
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 19-03-2004 à 23:32:10  profilanswer
 

bjone a écrit :

non tu sors, parcequ'il faut être en ring 0 pour utiliser RDTSC sous un noyau NT, donc tu peux pas sous un process win32.  :whistle: (je vérifies dans le doute :D)
 
---- autant pour moi y'a pas de problème de ring 0 (donc c'est moi qui sors  :whistle:  :jap: )


c'est bien ce qu'il me semblait, je l'utilise sans souci sous XP :o


---------------
J'ai un string dans l'array (Paris Hilton)
n°678526
R3g
fonctionnaire certifié ITIL
Posté le 19-03-2004 à 23:32:17  profilanswer
 

Harkonnen a écrit :

rdtsc ne concerne que le processus dans lequel il est lancé, c'est une instruction très bas niveau, les résultats obtenus ne sont valables que pour son propre processus.
il suffit de faire un test tout con pour s'en rendre compte : encadrer un bloc asm avec 2 rdtsc, le lancer sous différentes configurations, et on se rend compte qu'on obtient toujours peu ou prou la même chose

Donc ta méthode permet d'obtenir le temps d'utilisation CPU, mais je crois que ce que demandais jijiz c'est le temps d'execution du prog.


---------------
Au royaume des sourds, les borgnes sont sourds.
n°678528
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 19-03-2004 à 23:35:28  profilanswer
 

R3g a écrit :

Donc ta méthode permet d'obtenir le temps d'utilisation CPU, mais je crois que ce que demandais jijiz c'est le temps d'execution du prog.


ma méthode permet d'obtenir le nombre de cycles pris par un groupe d'instructions.
sachant que la fréquence d'un processeur signifie le nombre de cycles qu'il est capable de traiter en une seconde, il suffit juste :
- d'encadrer tout le programme par 2 rdtsc,
- et une fois qu'on a le nombre de cycles total du prog, le diviser par le nombre total de cycles traitables par le processeur en une seconde (1 000 000 000 pour un processeur à 1 Ghz par exemple), pour obtenir le temps d'éxécution du prog en secondes [:sinclaire]


---------------
J'ai un string dans l'array (Paris Hilton)
n°678567
bjone
Insert booze to continue
Posté le 20-03-2004 à 01:20:28  profilanswer
 

l'approche rdtsc permet d'avoir une mesure temporelle à la précision de l'horloge cpu, ce que aucuns timers matériels permettent de faire...
 
mais attention à RDTSC: la fréquence d'horloge CPU étant variable, la mesure peut être faussée (ie overclocking à la mano par un utilitaire, ou changement de fréquence automatique pour les portables)

n°678653
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-03-2004 à 12:01:38  profilanswer
 

bjone a écrit :

l'approche rdtsc permet d'avoir une mesure temporelle à la précision de l'horloge cpu, ce que aucuns timers matériels permettent de faire...
 
mais attention à RDTSC: la fréquence d'horloge CPU étant variable, la mesure peut être faussée (ie overclocking à la mano par un utilitaire, ou changement de fréquence automatique pour les portables)


:jap: :jap:
finalement, mon idée de départ était pas si con :D


---------------
J'ai un string dans l'array (Paris Hilton)
n°678676
bjone
Insert booze to continue
Posté le 20-03-2004 à 12:37:26  profilanswer
 

wai j'y avais pensé, mais j'étais persuadé qu'on avait pas les droits de le faire à cause du niveau de privilège, ptet passke quand j'avais essayé a un moment, j'avais d'autres trucs qui passaient sous W9x et pu sous un noyau NT :D

n°678778
manu025
Posté le 20-03-2004 à 15:53:18  profilanswer
 

Beaucoup de gens font encore de l'assembleur sous windows ?

n°678971
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-03-2004 à 19:44:56  profilanswer
 

manu025 a écrit :

Beaucoup de gens font encore de l'assembleur sous windows ?


Y'a au moins moi :D


---------------
J'ai un string dans l'array (Paris Hilton)
n°679002
bjone
Insert booze to continue
Posté le 20-03-2004 à 20:43:44  profilanswer
 

manu025 a écrit :

Beaucoup de gens font encore de l'assembleur sous windows ?


 
si tu veux faire du temps réel, vo mieux avoir une culture à ce niveau.
 
si tu fais du SQL ça te sert à rien....

n°704303
christophe​_d13
L'efficacité à tout prix.
Posté le 20-04-2004 à 22:13:00  profilanswer
 

Sous Windows tu as des fonctions pratiques pour mesurer les durée : GetTickCount te renvoi la durée depuis que l'OS est démarré... En ms
 
Si tu veux plus de précision sous Windows, il y a un reste que les anciens du dos connaissent (merci microsoft) : le 8253 via les fonctions QueryPerformanceFrequency et QueryPerformanceCounter... La précision du tick est de 12 / 14.318MHz soit environ 838ns.
 
Parfois on doit pouvoir se passer de RDTSC !
Voire même mesurer la fréquence du CPU...


Message édité par christophe_d13 le 20-04-2004 à 22:15:15
mood
Publicité
Posté le   profilanswer
 


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

  [ASM]Comment afficher la durée d'éxécution d'un programme en asm?

 

Sujets relatifs
Afficher une suite de photos...mysql_fetch_row ????Comment modifier un fichier texte a partir d'un programme
Traduction d'un programme en assembleurAppel d'un programme
afficher htmllancer programme au démarrag de windows!
[ASM] Parcours d'un tableau "BYTE" et "WORD"[oracle] Afficher tous les triggers.
[SQL] Afficher Les "x" Plus grands IDs...[ASM] Conversion entier en chaine decimal
Plus de sujets relatifs à : [ASM]Comment afficher la durée d'éxécution d'un programme en asm?


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