Zeitbedarf von proceduren

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
haderlump
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

Beitrag von haderlump »

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

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeitbedarf von proceduren

Beitrag von theo »

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.

Benutzeravatar
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

Beitrag von corpsman »

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.
--
Just try it

Soner
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

Beitrag von Soner »

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

martin_frb
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

Beitrag von martin_frb »

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....

Socke
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

Beitrag von Socke »

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

haderlump
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

Beitrag von haderlump »

Danke für die Antworten.
ich werde mich mal näher damit beschäftigen.

Gruß Fritz

Benutzeravatar
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

Beitrag von af0815 »

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).

Euklid
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

Beitrag von Euklid »

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

Antworten