Zeitbedarf von proceduren
-
- Beiträge: 185
- Registriert: Fr 18. Jan 2013, 09:29
- OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6
- CPU-Target: Celeron
Zeitbedarf von proceduren
Hallo zusammen
Gibt es eine Möglichkeit den tatsächlichen Zeitbedarf einer Procedure oder Funktion festzustellen.
Hintergrund: in einem Timergesteuerten Thread sollte die Arbeit erledigt sein, bevor der Timer erneut aufgerufen wird.
Wahrscheinlich ist die Ausführungszeit auf einem modernen Prozessor so kurz, (es werden keine Betriebssystemroutinen benutzt) dass das kein Problem darstellt, aber interessieren würde es mich trotzdem. Es ist natürlich klar, dass die Taktfrequenz hier eine Rolle spielt.
Ich hab schon mit Atmel-Controllern gearbeitet, und da konnte man im Debuger die verbrauchte Zeit ablesen.
Gruß Fritz
Gibt es eine Möglichkeit den tatsächlichen Zeitbedarf einer Procedure oder Funktion festzustellen.
Hintergrund: in einem Timergesteuerten Thread sollte die Arbeit erledigt sein, bevor der Timer erneut aufgerufen wird.
Wahrscheinlich ist die Ausführungszeit auf einem modernen Prozessor so kurz, (es werden keine Betriebssystemroutinen benutzt) dass das kein Problem darstellt, aber interessieren würde es mich trotzdem. Es ist natürlich klar, dass die Taktfrequenz hier eine Rolle spielt.
Ich hab schon mit Atmel-Controllern gearbeitet, und da konnte man im Debuger die verbrauchte Zeit ablesen.
Gruß Fritz
Re: Zeitbedarf von proceduren
Man kann mit GetTickCount in Unit lclintf den Zeitunterschied messen.
Evtl. muss man die Fkt 1000x aufrufen, um was zu sehen.
Ist nicht sonderlich genau, aber für den Hausgebrauch reicht's.
Evtl. muss man die Fkt 1000x aufrufen, um was zu sehen.
Ist nicht sonderlich genau, aber für den Hausgebrauch reicht's.
- corpsman
- Lazarusforum e. V.
- Beiträge: 1498
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Zeitbedarf von proceduren
Wenn du unter Linux Arbeitest kannst du auch Valgrind versuchen.
Auf einem der Letzten Stuttgarter Lazarustreffen wurde gezeigt, dass man so auch recht gut "Zeitfresser" im Programm finden kann.
Auf einem der Letzten Stuttgarter Lazarustreffen wurde gezeigt, dass man so auch recht gut "Zeitfresser" im Programm finden kann.
--
Just try it
Just try it
-
- Beiträge: 623
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: Zeitbedarf von proceduren
Wenn du das nur für Windows willst und sehr kurze Zeiten brauchst, (kürzer als Gettickcount messen kann) dann nimm :
http://msdn.microsoft.com/de-de/library/windows/desktop/ms644904%28v=vs.85%29.aspx
Wie mann es mit Delphi/lazarus verwendet:
http://www.google.de/#hl=de&q=queryperformancecounter+delphi
http://msdn.microsoft.com/de-de/library/windows/desktop/ms644904%28v=vs.85%29.aspx
Wie mann es mit Delphi/lazarus verwendet:
http://www.google.de/#hl=de&q=queryperformancecounter+delphi
-
- Beiträge: 572
- Registriert: Mi 25. Mär 2009, 21:12
- OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
- CPU-Target: mostly 32 bit
Re: Zeitbedarf von proceduren
Auf Betriebssystemen wie Windows oder vielen Linux Distributionen nuetzt das nix.
Selbst wenn du die Zeit gemessen hast, kannst du dich nicht darauf verlassen, dass es immer in der Zeit fertig ist.
Auf dem Betriebssystem laufen mehrere Anwendungen (inklusive Kernel, Treiber, etc). Das Betriebssystem kann (und tut es auch) deine Anwendung regelmäßig unterbrechen. (Auch wenn du keine Betriebssystem Funktionen aufrufst). Daher kann es jederzeit auch mal beliebig laenger dauern....
Selbst wenn du die Zeit gemessen hast, kannst du dich nicht darauf verlassen, dass es immer in der Zeit fertig ist.
Auf dem Betriebssystem laufen mehrere Anwendungen (inklusive Kernel, Treiber, etc). Das Betriebssystem kann (und tut es auch) deine Anwendung regelmäßig unterbrechen. (Auch wenn du keine Betriebssystem Funktionen aufrufst). Daher kann es jederzeit auch mal beliebig laenger dauern....
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Zeitbedarf von proceduren
haderlump hat geschrieben:Hintergrund: in einem Timergesteuerten Thread sollte die Arbeit erledigt sein, bevor der Timer erneut aufgerufen wird.
Per Definition kann die Arbeit in einem Thread erst wieder aufgerufen werden, wenn der Thread diese abgearbeitet hat.
Falls du mehrere Threads hast, die die selbe Aufgabe (Prozedur) bearbeiten, kann man das mit Critical Sections serialisieren.
Falls du nach auftreten eines Ereignisses (Timer) eine Arbeit nach einer bestimmten Zeit abgearbeitet haben möchtest, führt kein Weg um ein Echtzeit-Betriebssystem weiter. Dieses stellt sicher, dass Prozesse mit der Priorität "Echtzeit" nach Auftreten des Ereignisses "sehr bald" ausgeführt werden (undefinierte Zeit, aber nach oben nicht unbegrenzt).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 185
- Registriert: Fr 18. Jan 2013, 09:29
- OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6
- CPU-Target: Celeron
Re: Zeitbedarf von proceduren
Danke für die Antworten.
ich werde mich mal näher damit beschäftigen.
Gruß Fritz
ich werde mich mal näher damit beschäftigen.
Gruß Fritz
- af0815
- Lazarusforum e. V.
- Beiträge: 6209
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Zeitbedarf von proceduren
Weiche / Harte Echtzeit siehe Wiki oder auch hier: HU-Uni Berlin.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 10:38
- OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
- Wohnort: Hessen
- Kontaktdaten:
Re: Zeitbedarf von proceduren
Hallo Fritz,
zur Designzeit kannst Du die Prozessorzeit einzelner Prozeduren mit gprof feststellen. Das gilt dann natürlich nur für Dein System - aber so dürfte es ja auch bei Deinem Beispiel mit den Amtel-Controllern gewesen sein.
Um gprof nutzen zu können, musst Du das entsprechende Häckchen in den Compiler-Einstellungen setzen.
Viele Grüße, Euklid
zur Designzeit kannst Du die Prozessorzeit einzelner Prozeduren mit gprof feststellen. Das gilt dann natürlich nur für Dein System - aber so dürfte es ja auch bei Deinem Beispiel mit den Amtel-Controllern gewesen sein.
Um gprof nutzen zu können, musst Du das entsprechende Häckchen in den Compiler-Einstellungen setzen.
Viele Grüße, Euklid