Chronometrer les fontions

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Chronometrer les fontions

Message par Fig »

Bonjour,

Je suis sûr que qques uns d'entre vous se sont déja penché sur le problème de savoir quel était entre deux codes ou deux instructions la plus rapide.
Je cherche un bout de code pour chronometrer précisement une éxecution.

par exemple :

Code : Tout sélectionner

[pseudo code ON]
startchrono()
for i=1 to 2000
instruction(s) à tester
next i

finchrono()

affiche le temps écoulé en msec.
[/pseudocode OFF]
Si quelqu'un a ça dans sa boite à outil, ça m'interresse :onfire:
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Code : Tout sélectionner

Global Chrono

Procedure StarChrono()
 chrono = EllapsedMillisecs()
endprocedure

Procedure StopChrono()
 fin = EllapsedMillisecs() - Chrono
 debug fin
endprocedure
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Message par Fig »

#heaven

heu qui c ki se tape encore l'air #jaune ?


c moa


Merci bien en tout cas :wink:
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Progi1984 a écrit :

Code : Tout sélectionner

Global Chrono

Procedure StarChrono()
 chrono = EllapsedMillisecs()
endprocedure

Procedure StopChrono()
 fin = EllapsedMillisecs() - Chrono
 debug fin
endprocedure
oui en gros c'est çà.
sauf que - ATTENTION - on ne devrait jamais faire des tests de vitesse
avec le debugger activé !

donc vaut mieux un truc du genre :

Code : Tout sélectionner

Macro StarChrono()
  chrono = EllapsedMillisecs()
EndMacro

Macro StopChrono()
  MessageRequester("resultat", Str(EllapsedMillisecs() - chrono))
EndMacro
Image
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

JE sais... ms j'ai fait ca de tete et rapidement !

Mais j'ai fait une erreur :(

PS : as tu vu cairo en MP ?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

pas encore progi - je vais voir.
Image
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Pour mesurer des valeurs inférieurs à la ms il y a ceci :

Code : Tout sélectionner

; Idea from Erix14 / Djes
; Return the time elapsed between Start & Stop in second
; 0.001 = 1 ms
; 0.000001=1 µs
; Caution ! : If the installed hardware supports a high-resolution performance counter
; MeasureHiResIntervalStart return 1 / 0 if no hardware support 
; Use this functions for measure interval < 1 ms

Global MeasureHiResIntervalTime.l

ProcedureDLL MeasureHiResIntervalStart()
  QueryPerformanceFrequency_(@retour)
  If retour <>0 : retour = 1 : EndIf
  QueryPerformanceCounter_(@MeasureHiResIntervalTime)  
  ProcedureReturn retour
EndProcedure

ProcedureDLL.f MeasureHiResIntervalStop()
  QueryPerformanceCounter_(@Temp)
  Difference=Temp-MeasureHiResIntervalTime
  QueryPerformanceFrequency_(@HiResTimerFrequency)
  Periode.f=1/HiResTimerFrequency
  DureeTotale.f=Difference*Periode
  ProcedureReturn DureeTotale
EndProcedure


;/ Test1 : For Next
If MeasureHiResIntervalStart()
  For n=0 To 10000
  Next n
  Debug MeasureHiResIntervalStop()
EndIf

;/ Test2 : Repeat : Until
If MeasureHiResIntervalStart()
  Repeat
    a+1
  Until a=10000
  Debug MeasureHiResIntervalStop()
EndIf

Debug "The fastest is For/Next"
Répondre