PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeit 2er Programme von außen messen



Mat
13-08-2007, 15:53
Hallo,

ich habe 2 C++ Programme die sehr umfangreich sind. Jetzt würde ich gerne wissen welches der beiden schneller ist. Ich weiß ich könnte beide in eine main verpflanzen und dann über Zeitausgaben arbeiten - ginge das aber nicht einfacher? Evtl. irgendwie von außen? Ich arbeite unter Linux.

Danke

BLUESCREEN3D
13-08-2007, 15:57
In der Shell:

time name_deines_programmes

Mat
13-08-2007, 16:36
danke - leider ist der wert immer etwas anders obwohl ich denselben input habe....
könnte ich das irgendwie genauer machen bzw. wenigstens eindeutig - ich weiß zwar dass es von den laufenden prozessen abhängt aber evtl. geht es ja...

bischi
13-08-2007, 16:41
Solange mehr als ein Thread auf deiner Maschine läuft, bleibt dir nix anderes übrig, als das ganze etwa 100 mal zu messen und dann zu mitteln... Vergleichsprogramme dann natürlich auf der selben Maschine mit der selben Konfiguration testen.

MfG Bischi

PS: Warum es nicht gehen kann: Interrupts, Unterschiedliche Memoryacess-Zeiten, nicht vollständig deterministischer Scheduler,...

Mat
13-08-2007, 17:28
hmm ok danke..

also ist es das normale vorgehen dass man um einen wirklichen beweisenden vergleich zu haben dass man sich z.B ein skript schreibt welches die programme dann mit dem input 100 mal laufen lässt und dann mittelt und dann die resultate vergleicht - UND das alles über den time befehl?

Ich bräuchte wirklich eine valide vorgehensweise da es für meine Diplomarbeit ist ....

bischi
13-08-2007, 17:48
Falls du nen Emulator hast, kanns du natürlich den brauchen (und die Emulatorzeit verwenden...).

MfG Bischi

BLUESCREEN3D
13-08-2007, 17:51
Ich würde auch auf eine lange Programmlaufzeit achten, z.B. durch umfangreiche Eingabedaten oder wovon auch immer das bei dir abhängt. Damit sollten die Werte dann weniger schwanken. Für repräsentative Werte natürlich auch möglichst viele andere Prozesse beenden.

Außerdem hilft dir vllt. Profiling:
Kompilier das Programm mit der Option -pg und führe dann gprof dein_programm aus. Damit kriegst du z.B. auch Informationen darüber, in welcher Funktion wieviel Zeit verbracht wurde.

Und bei Geschwindigkeitsvergleichen darauf achten, die Optimierungen des Compilers zu nutzen, z.B. -O1, -O2, ... beim gcc.

Mat
13-08-2007, 18:04
danke - das mache ich alles bereits ....
dennoch um am ende sagen zu können "Meine version ist schneller" sollte ich natürlich die gesamtlaufzeit betrachten. Natürlich mit den variierenden inputs.

Wäre es also ok sich über Mittelung auf den time-befehl zu halten?

bischi
13-08-2007, 18:37
danke - das mache ich alles bereits ....
dennoch um am ende sagen zu können "Meine version ist schneller" sollte ich natürlich die gesamtlaufzeit betrachten. Natürlich mit den variierenden inputs.

Wäre es also ok sich über Mittelung auf den time-befehl zu halten?

Ich denke grundsätzlich schon. Zumindest dürfte time keines der Programme bevorzugen. Allerdings sind solche Zeitmessungen halt keine exakte Wissenschaft und daher auch nicht zweifelsfrei zu reproduzieren.

Was ich zusätzlich noch machen würde: Schneide die 15% der schnellsten und die 15% der langsamsten Durchläufe raus (damit du keine extremwerte mehr drinn hast).

MfG Bischi

Mat
13-08-2007, 18:43
was genau meinst du mit 15% rausschneiden? Meinst du einfach die 15% der geringesten laufzeiten und 15% der grössten Laufzeiten nicht zur Mittelung hernehmen?

Danke

bischi
13-08-2007, 18:45
was genau meinst du mit 15% rausschneiden? Meinst du einfach die 15% der geringesten laufzeiten und 15% der grössten Laufzeiten nicht zur Mittelung hernehmen?

Jup. Etwa 15% deshalb, weil der Rest bei einer Normalverteilung in
$+-\sigma + Mittelwert$
liegt (exakt müsstest du 16% nehmen :p).

MfG Bischi

Mat
13-08-2007, 20:21
ah - jetza ....:)
Danke - dann nehmen wir doch 16% :)