Forum: Compiler & IDEs Präzise Zeitmessung für Benchmark unter Embedded Linux


von mr.spock (Gast)


Lesenswert?

Hallo zusammen,

ich möchte ein paar Benchmarks (C sources) auf ein Embedded Linux System 
portieren.

Welche Möglichkeit gibt es zur präzisen Zeitmessung ?

Kann man bei der Funktion clock() aus der time.h Library etwas über die 
Genauigkeit sagen? Gibt es Alternativen?

Wie würdet ihr versuchen Ungenauigkeiten durch das Scheduling des OS zu 
minimieren?

Grüße

von Timmo H. (masterfx)


Lesenswert?

Also ich habe immer sowas gemacht
1
timeval ts;
2
gettimeofday(&ts,0);
Da gehts dann mit ts.tv_usec auf µs runter.
Nach meiner Erfahrung ist es sehr genau.
gettimeofday wird aber glaub ich bald abgeschafft (laut POSIX) und man 
sollte clock_gettime. Ich denke clock() greift auf die gleichen 
Funktionen zurück...

von Klaus W. (mfgkw)


Lesenswert?

Guter Artikel dazu in iX 3/2004, Seite 102

clock() misst nicht die abgelaufene Zeit wie auf der Uhr,
sondern die verbrauchte CPU-Zeit eines Prozesses.
Dieser Wert kann deutlich niedriger sein (wenn andere Prozesse
auch zum Zuge kamen) oder deutlich höher (wenn ein Prozess
im Schnitt mehr als einen Kern bzw. eine CPU zugeteilt bekommt).

Die Genauigkeit ist primär durch die Auflösung begrenzt, die
wiederum erfährt man aus dem Makro CLOCKS_PER_SEC auf dem
jeweiligen System.

von klaus (Gast)


Lesenswert?

Klaus Wachtler schrieb:
> clock() misst nicht die abgelaufene Zeit wie auf der Uhr,
> sondern die verbrauchte CPU-Zeit eines Prozesses.

Ah, das wußte ich nicht. Heißt das time(0) wäre also etwas ungenauer?

von Klaus W. (mfgkw)


Lesenswert?

Das time() aus der C-Lib?
Das löst nur in Sekunden auf (besser gesagt in time_t, und das ist
auf allen Systemen in Sekunden).

Dieses time() misst abgelaufene Uhrzeit im Gegensatz zu clock().
Unabhängig von der Genauigkeit messen clock() und time() völlig
verschiedene Dinge.
Mit time() kannst du messen, wieviele Tage die Baufirma braucht,
um dein Haus einzureissen. Mit clock() wird festgestellt,
wieviele Mannstunden dafür gebraucht wurden, also je nach
Urlaub, Krankenstand und gleichzeitig Beschäftigte und was
letztlich.

Ebenfalls die Uhrzeit (wie time()) wird vom bereits erwähnten
gettimeofday() geliefert, und zwar genauer als von time().

von Klaus W. (mfgkw)


Lesenswert?

Klaus Wachtler schrieb:
> Urlaub, Krankenstand und gleichzeitig Beschäftigte und was
> letztlich.

fehlt noch:
... letztlich als Arbeitszeit auf der Rechnung auftaucht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.