Laufzeitmessung Prozedur

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Eradikator
Beiträge: 33
Registriert: Sa 8. Jun 2013, 19:45

Laufzeitmessung Prozedur

Beitrag von Eradikator »

Moin,
ich bekomme bei der Laufzeitmessung einer Prozedur bei mehrmaligen Aufruf unterschiedliche Werte. Von z.b. 25+-3 ms springt der Wert dann auf 35 +-3 ms.
Die Laufzeitmessung habe ich mit Queryperformance programmiert.
Wie bekomm ich denn konstantere Werte?

Grüße

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Laufzeitmessung Prozedur

Beitrag von Scotty »

Du könntest das Multitasking deaktivieren (Stichwort: Single user mode). Oder einfach mehrere Werte nehmen und mitteln.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Laufzeitmessung Prozedur

Beitrag von mschnell »

Bei modernen Prozessoren und Desktop-Betriebssystemen kann die Laufzeit nur annähernd bestimmt werden (z.B. Prozedur 1 Mio Mal aufrufen und den Durchschnitt bilden).

Je nachdem was sonst noch auf dem Rechner geschieht, kann z.B. die Effizienz des Caches sehr schwanken.

-Michael

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: Laufzeitmessung Prozedur

Beitrag von Euklid »

Eradikator hat geschrieben: Wie bekomm ich denn konstantere Werte?
Die CPU springt in den Energiesparmodus, wenn sie nicht ausgelastet ist. Es braucht ein paar Millisekunden, bis sie die volle Leistung abrufen kann.

Wenn Du allgemein prüfen möchtest, weilche Prozeduren die meiste CPU-Zeit benötigen, kannst Du gprof verwenden. Dazu musst Du in den Linker-Einstellungen von Lazarus das zugehörige Häckchen setzen. Zur genauen Bedienung musst Du mal googeln.

Viele Grüße, Euklid

Eradikator
Beiträge: 33
Registriert: Sa 8. Jun 2013, 19:45

Re: Laufzeitmessung Prozedur

Beitrag von Eradikator »

Hallo,
Wie lässt sich denn das Multitasking abschalten? Ich hab es über den Taskmanager und Systemsteuerung versucht und habe keine Möglichkeit gefunden.
gprof werde ich heute mal testen.

Danke euch.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Laufzeitmessung Prozedur

Beitrag von Scotty »

Eradikator hat geschrieben:Wie lässt sich denn das Multitasking abschalten?
Das war eher als scherzhafte Bemerkung gedacht, die den Grund der Varianz verdeutlichen soll. Unter Linux kann man den "Runlevel" ändern, Windows bietet so etwas nicht. Zähl einfach, wie oft deine Routine durchlaufen wird, addiere die jeweiligen Messungen und wenn es um die Ausgabe geht, dann dividiere die Summe durch die Anzahl der Messungen.
Zuletzt geändert von Scotty am Mo 12. Aug 2013, 10:58, insgesamt 1-mal geändert.

Eradikator
Beiträge: 33
Registriert: Sa 8. Jun 2013, 19:45

Re: Laufzeitmessung Prozedur

Beitrag von Eradikator »

Ach so, wieder 'was gelernt ;-)

jus
Beiträge: 52
Registriert: Fr 6. Mai 2011, 13:29

Re: Laufzeitmessung Prozedur

Beitrag von jus »

Bei Intel Prozessoren kann man bei neueren Prozessorgenerationen ab Nehalem auch direkt den Assemblerbefehl RDTSC verwenden, da dieser wieder mit einer konstante Rate läuft. Siehe "AW: Zeitmessung für Programmroutinen".
Generell würde es mich aber bei Mehrprozessorsystemen nicht wundern, dass die gleiche Programmroutine bei unterschiedlicher Prozessorlast, und die wird schwer beeinflußbar sein, unterschiedliche Zeit benötigt.

Lg,
jus

Eradikator
Beiträge: 33
Registriert: Sa 8. Jun 2013, 19:45

Re: Laufzeitmessung Prozedur

Beitrag von Eradikator »

Hallo,
danke euch. Ich mache das jetzt so, dass ich die Prozedur 100 mal aufrufe, die Laufzeit aufsummiere und die Summe wieder durch 100 teile.

Grüß euch

Antworten