ElapsedNanoseconds() - Temps système écoulés en nanosecondes

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

ElapsedNanoseconds() - Temps système écoulés en nanosecondes

Message par Le Soldat Inconnu »

Salut,

J'avais besoin de plus précis que le ElapsedMilliseconds.

Donc voici 1000 fois plus précis

Code : Tout sélectionner

Procedure.q ElapsedTime()
	Protected ElapsedTime.q
	QueryPerformanceCounter_(@ElapsedTime)
	ProcedureReturn ElapsedTime
EndProcedure

Procedure.q ElapsedNanoseconds()
	Protected ElapsedTime.q
	Static Frequency.q
	QueryPerformanceCounter_(@ElapsedTime)
	If Frequency = 0
		QueryPerformanceFrequency_(@Frequency)
	EndIf
	ElapsedTime * 1000000 / Frequency
	ProcedureReturn ElapsedTime
EndProcedure

Temps1 = ElapsedTime()
Delay(1000)
Temps2 = ElapsedTime()
Delay(1000)
Temps3 = ElapsedTime()
Delay(1000)
Temps4 = ElapsedTime()

Debug "Retour du compteur de performance"
Debug Temps2 - Temps1
Debug Temps3 - Temps2
Debug Temps4 - Temps3

Temps1 = ElapsedNanoseconds()
Delay(1000)
Temps2 = ElapsedNanoseconds()
Delay(1000)
Temps3 = ElapsedNanoseconds()
Delay(1000)
Temps4 = ElapsedNanoseconds()

Debug "Temps système écoulé en nanosecondes"
Debug Temps2 - Temps1
Debug Temps3 - Temps2
Debug Temps4 - Temps3
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: ElapsedNanoseconds() - Temps système écoulés en nanoseco

Message par case »

8O

je savais pas qu'on pouvait avoir plus précis que la milliseconde en temps système
ImageImage
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: ElapsedNanoseconds() - Temps système écoulés en nanoseco

Message par Backup »

pareil ! ;)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: ElapsedNanoseconds() - Temps système écoulés en nanoseco

Message par comtois »

case a écrit :je savais pas qu'on pouvait avoir plus précis que la milliseconde en temps système
C'est que tu ne lis pas assez la FAQ de DVP :)
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: ElapsedNanoseconds() - Temps système écoulés en nanoseco

Message par PAPIPP »

Bonjour LSI
J'ai obtenu des valeurs négatives.
Après correction TEMPSx.Q, les résultats sont meilleurs.

Code : Tout sélectionner

Procedure.q ElapsedTime()
  Protected ElapsedTime.q
  QueryPerformanceCounter_(@ElapsedTime)
  ProcedureReturn ElapsedTime
EndProcedure

Procedure.q ElapsedNanoseconds()
  Protected ElapsedTime.q
  Static Frequency.q
  QueryPerformanceCounter_(@ElapsedTime)
  If Frequency=0
    QueryPerformanceFrequency_(@Frequency)
  EndIf
  ElapsedTime*1000000/Frequency
  ProcedureReturn ElapsedTime
EndProcedure

Temps1.q=ElapsedTime()
Delay(1000)
Temps2.q=ElapsedTime()
Delay(1000)
Temps3.q=ElapsedTime()
Delay(1000)
Temps4.q=ElapsedTime()

Debug "Retour du compteur de performance"
Debug Temps2-Temps1
Debug Temps3-Temps2
Debug Temps4-Temps3

Temps1=ElapsedNanoseconds()
Delay(1000)
Temps2=ElapsedNanoseconds()
Delay(1000)
Temps3=ElapsedNanoseconds()
Delay(1000)
Temps4=ElapsedNanoseconds()

Debug "Temps système écoulé en nanosecondes"
Debug Temps2-Temps1
Debug Temps3-Temps2
Debug Temps4-Temps3

@+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: ElapsedNanoseconds() - Temps système écoulés en nanoseco

Message par djes »

Oui, c'est vieux comme Hérode ce truc, mais bon, c'est bien d'avoir un topic là-dessus ;)

A noter que c'est moyennement fiable, voir là : http://www.purebasic.fr/english/viewtop ... ceCounter_, sauf à avoir besoin d'un comptage très précis assez court sur la durée.

Il y a plusieurs exemples sur les forums.
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: ElapsedNanoseconds() - Temps système écoulés en nanoseco

Message par PAPIPP »

Bonjour à tous

La procédure suivante donne le nombre de cycle machine. Elle évite les API
Et d’autre part elle donne les mêmes résultats.

Code : Tout sélectionner

Procedure.q nbcs()
  !RDTSC
  ProcedureReturn
EndProcedure
http://www.purebasic.fr/french/viewtopi ... TSC#p97997

On peut donc trouver un rapport entre le nb de cycles et le temps en nanoseconde.

Code : Tout sélectionner

Procedure.q nbcs()
  !RDTSC
  ProcedureReturn
EndProcedure

Procedure.q ElapsedTime()
  Protected ElapsedTime.q
  QueryPerformanceCounter_(@ElapsedTime)
  ProcedureReturn ElapsedTime
EndProcedure

Procedure.q ElapsedNanoseconds()
  Protected ElapsedTime.q
  Static Frequency.q
  QueryPerformanceCounter_(@ElapsedTime)
  If Frequency=0
    QueryPerformanceFrequency_(@Frequency)
  EndIf
  ElapsedTime*1000000/Frequency
  ProcedureReturn ElapsedTime
EndProcedure

Temps1.q=ElapsedTime()
Delay(1000)
Temps2.q=ElapsedTime()
Delay(1000)
Temps3.q=ElapsedTime()
Delay(1000)
Temps4.q=ElapsedTime()

Debug "Retour du compteur de performance"
Debug Temps2-Temps1
Debug Temps3-Temps2
Debug Temps4-Temps3

Temps1=ElapsedNanoseconds()
Delay(1000)
Temps2=ElapsedNanoseconds()
Delay(1000)
Temps3=ElapsedNanoseconds()
Delay(1000)
Temps4=ElapsedNanoseconds()

Debug "Temps système écoulé en nanosecondes"
Debug Temps2-Temps1
Debug Temps3-Temps2
Debug Temps4-Temps3

Temps1=nbcs()
Delay(1000)
Temps2=nbcs()
Delay(1000)
Temps3=nbcs()
Delay(1000)
Temps4=nbcs()
Debug "Temps système écoulé en cycle"
Debug Temps2-Temps1
Debug Temps3-Temps2
Debug Temps4-Temps3

@+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: ElapsedNanoseconds() - Temps système écoulés en nanoseco

Message par djes »

Notre ami idle avait fait un très beau code là-dessus : http://www.purebasic.fr/english/viewtop ... ceCounter_
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: ElapsedNanoseconds() - Temps système écoulés en nanoseco

Message par djes »

Répondre