Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeit 2er Programme von außen messen
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
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...
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,...
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 ....
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.
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?
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
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
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
ah - jetza ....:)
Danke - dann nehmen wir doch 16% :)
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.