Gibt es noch eine kleinere Zeit: ElapsedMilliseconds()
Gibt es noch eine kleinere Zeit: ElapsedMilliseconds()
Hallo, guten Tag .
Gine es noch eine kleinere Zeiteinheit zum Afragen?
Danke.
Gruss
Gine es noch eine kleinere Zeiteinheit zum Afragen?
Danke.
Gruss
Re: Gibt es noch eine kleinere Zeit: ElapsedMilliseconds()
Wie kann man hier von bitte eine hochgenaue Zeitabfrage zwischen 2 Positionen machen?
Danke.
GRuss
Danke.
GRuss
Code: Alles auswählen
Procedure.q ElapsedCPUCycles()
Protected tc.q
QueryPerformanceCounter_(@tc.q)
ProcedureReturn tc.q
EndProcedure
mytimer.q = ElapsedCPUCycles()
Debug mytimer.q
Re: Gibt es noch eine kleinere Zeit: ElapsedMilliseconds()
Code: Alles auswählen
Global QueryPerformanceFrequency.q : QueryPerformanceFrequency_(@QueryPerformanceFrequency)
Procedure.f MeasureTime() ; Gibt die Zeitdifferenz wischen zwei Aufrufen zurück (in Sekunden)
Static OldTime.q
Protected Time.q, Delay.f
QueryPerformanceCounter_(@Time)
Delay = (Time - OldTime)/QueryPerformanceFrequency
OldTime = Time
ProcedureReturn Delay
EndProcedure
MeasureTime()
Delay(0) ; hier irgendwelche Sachen ...
Debug StrF(MeasureTime()*1e6)+" µs"PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Gibt es noch eine kleinere Zeit: ElapsedMilliseconds()
Jup danke.
Wie kann man µs abfrage ohne über eine Procedure machen zwischen 2 Ereignissen.
Weil das aufrufen der Procedure verbraucht auch schon Zeit.
Ich brauche es sehr genau, weil ich eine Wave-Datei zerlegen möchte in Byte.
Das heißt eine Wavdatei Zeitgenau aus dem Memspeicher auslesen: 1/44000Hz genauigkeit
Danke.
Gruss
Wie kann man µs abfrage ohne über eine Procedure machen zwischen 2 Ereignissen.
Weil das aufrufen der Procedure verbraucht auch schon Zeit.
Ich brauche es sehr genau, weil ich eine Wave-Datei zerlegen möchte in Byte.
Das heißt eine Wavdatei Zeitgenau aus dem Memspeicher auslesen: 1/44000Hz genauigkeit
Danke.
Gruss
- NicTheQuick
- Ein Admin
- Beiträge: 8837
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Gibt es noch eine kleinere Zeit: ElapsedMilliseconds()
Ähm, Moment mal. Ich glaube du gehst da an irgendwas ganz falsch ran.
Fang lieber mal von vorne an zu erklären, was du vorhast. Wahrscheinlich versuchst du gerade etwas, was niemals funktionieren wird auf deine Weise.
Fang lieber mal von vorne an zu erklären, was du vorhast. Wahrscheinlich versuchst du gerade etwas, was niemals funktionieren wird auf deine Weise.
Re: Gibt es noch eine kleinere Zeit: ElapsedMilliseconds()
Auch die Funktion selbst ist ein Aufruf.funker hat geschrieben:Wie kann man µs abfrage ohne über eine Procedure machen zwischen 2 Ereignissen.
Weil das aufrufen der Procedure verbraucht auch schon Zeit.
Und selbst diese "genaue" Zeitmessung hat eine Auflösungsgrenze von einigen µs.
Das geht nicht. Dafür ist die Zeitmessung der CPU nicht geeignet.funker hat geschrieben:Das heißt eine Wavdatei Zeitgenau aus dem Memspeicher auslesen: 1/44000Hz genauigkeit
Das musst du wenn dann berechnen.
Also errechnen, wie viele Bytes bei einer Frequenz von 44kHz und Signalauflöung innerhalb von x-µs liegen müssten
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Gibt es noch eine kleinere Zeit: ElapsedMilliseconds()
Jup danke.
Ich möchte eine Zeit messen ohne Procedure:
-zeit festhalten
- a=b+c
-zeit ausgeben
-zeit festhalten
- a=b/c
-zeit ausgeben
Ds möchte ich bitte einmal wissen, wie das geht?
Danke.
Gruss
Ich möchte eine Zeit messen ohne Procedure:
-zeit festhalten
- a=b+c
-zeit ausgeben
-zeit festhalten
- a=b/c
-zeit ausgeben
Ds möchte ich bitte einmal wissen, wie das geht?
Danke.
Gruss
Re: Gibt es noch eine kleinere Zeit: ElapsedMilliseconds()
Dieses Beispiel geht nicht!
Für b+c brauch eine CPU ca. 1 Taktzyklus, bei einer 3,6 GHz Maschine wäre das eine Zeit von 0,28 Nanosekunden!!
Um Zeit von einem Befehl zu messen, musst du den Befehl mehrmals aufführen und dann durch die Ausführungsschnitte teilen.
Um den Fehler durch die Schleife selbst zu minimieren, kannst du die Schleife noch mal im Leerlauf messen.
Zum Beispiel so:
In die Procedure Funktion() kannst du nun deinen zu messenden Befehl schreiben, wie im Beispiel Sin(a).
Die Ausgabe wäre dann zB:
Für b+c brauch eine CPU ca. 1 Taktzyklus, bei einer 3,6 GHz Maschine wäre das eine Zeit von 0,28 Nanosekunden!!
Um Zeit von einem Befehl zu messen, musst du den Befehl mehrmals aufführen und dann durch die Ausführungsschnitte teilen.
Um den Fehler durch die Schleife selbst zu minimieren, kannst du die Schleife noch mal im Leerlauf messen.
Zum Beispiel so:
Code: Alles auswählen
Prototype.i MeasureEvaluationTime_Function()
Procedure.i MeasureEvaluationTime_EmptyFunction()
EndProcedure
Procedure.d MeasureEvaluationTime(Function.MeasureEvaluationTime_Function)
Protected Frequency.q, Time0.q, Time1.q, Time2.q
Protected Loop.i, Loops.i=1
QueryPerformanceFrequency_(@Frequency)
Repeat
Loops * 2
QueryPerformanceCounter_(@Time0)
For Index = 1 To Loops
MeasureEvaluationTime_EmptyFunction()
Next
QueryPerformanceCounter_(@Time1)
For Index = 1 To Loops
Function()
Next
QueryPerformanceCounter_(@Time2)
Until Time2 - Time1 > 1000000
ProcedureReturn ((Time2-Time1)-(Time1-Time0))/Frequency/Loops
EndProcedure
Procedure Function()
Protected a.f = 1.23
Sin(a)
EndProcedure
Define Time.d = MeasureEvaluationTime(@Function())
MessageRequester("EvaluationTime", StrD(Time*1e9,3)+" ns")
Die Ausgabe wäre dann zB:
Das heißt, die CPU brauch etwa 18 Nanosekunden oder 0,018 µm oder 0,000018 ms---------------------------
EvaluationTime
---------------------------
18.080 ns
---------------------------
OK
---------------------------
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Gibt es noch eine kleinere Zeit: ElapsedMilliseconds()
Jup danke.
Werde ich jetzt anwenden.
Gruss
Werde ich jetzt anwenden.
Gruss