Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: C++ (alle ISO-Standards) ::  wie laufzeit am genausten messen?  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
wer misst misst mist
Unregistrierter




Beitrag wer misst misst mist Unregistrierter 22:07:31 06.01.2017   Titel:   wie laufzeit am genausten messen?            Zitieren

hiho,

die frage ist wahrscheinlich ein bisschen schräg aber ich weiss ehrlich gesagt nicht, wie ich die laufzeit einer funktion gut messen kann. was klar ist, ist, dass ich die funktion wiederholt ausführe und jedes mal neu messe, damit ich eine verwertbare messprobe vorliegen habe. aber wenn ich verschiedene modifikationen der funktion vergleichen möchte in ihrer performance, welche werte muss ich dann verwenden? arithmetisches mittel? mittel ohne ausreisser? median? oder gar das minimum?

LG!
wob
Unregistrierter




Beitrag wob Unregistrierter 23:40:54 06.01.2017   Titel:              Zitieren

Was meinst du mit "verschiedene Modifikationen"? Unterschiedliche Parameter? Dann hängt es natürlich davon ab, welche Modifikation du häufig aufrufst und welche nicht. Spannend ist natürlich auch immer die Variante, die im Durchschnitt am längsten braucht.

Wenn du ein und dieselbe Sache genügend oft misst, sollte sich eigentlich irgendwie ein Gauss um den Erwartungswert der Dauer ergeben.

Du könntest zum Messen z.B. https://github.com/google/benchmark benutzen.
wer misst misst mist
Unregistrierter




Beitrag wer misst misst mist Unregistrierter 00:06:45 07.01.2017   Titel:              Zitieren

mit modifikationen meine ich, dass ich die funktion modifiziere. also dinge ändere, von denen ich zum beispiel glaube, dass sie die funktion schneller machen.

meine frage ist, welchen wert ich dann optimieren soll: den median, das arithmetische mittel oder das minimum. (und ob ich "ausreisser" gezielt eliminieren soll)

profiler und frameworks dazu sind mir durchaus bekannt, es interessiert mich aber auch von einer theoretischen seite her: welcher parameter ist in so einer situation am verlässlichsten.
spätzle2
Unregistrierter




Beitrag spätzle2 Unregistrierter 00:29:47 07.01.2017   Titel:              Zitieren

Man kann nicht richtig verstehen, was du brauchst<"
wob
Unregistrierter




Beitrag wob Unregistrierter 02:25:43 07.01.2017   Titel:              Zitieren

Wenn du signifikante Unterschiede zwischen Median und Mittelwert hast, hast du nicht genügend oft gemessen.

Wie lange dauert denn bei dir eine Messung? Musst du 1 Mio mal messen, um Ergebnisse im Sekundenbereich zu bekommen? Dann ist es kein Problem, einfach oft genug zu messen, sodass seine Frage keine Rolle mehr spielt.

Dauert deine Messung dagegen 1 Stunde und eine zweite nur 50 Minuten, dann reicht das doch schon aus, um zu sehen, welche Variante schneller ist.

Ansonten gilt wie immer: kommt darauf an, was du genau wissen willst. Wieso hast du überhaupt große Ausreißer? Was misst du eigentlich? Spielen externe Effekte eine Rolle?
Mechanics
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.01.2012
Beiträge: 4135
Beitrag Mechanics Mitglied 16:36:46 07.01.2017   Titel:              Zitieren

Ich messe meistens "von Hand". D.h., zuerst einen Test schreiben, der die zu testende Funktion so oft aufruft, dass der Test ingesamt lang genug dauert, z.B. 10 Sekunden. Irgendwas im Nanosekundenbereich einzeln zu messen, macht keinen Sinn.
Dann lasse ich das vielleicht 10-20 mal laufen und schaue, obs Ausreißer gibt. Die versuche ich zu ignorieren. Dann pendelt sich das ganze schnell ein. Ich hatte damit bisher eigentlich noch nie Probleme. Die Werte waren immer recht stabil, und wenn man was optimiert hatte, dann waren sie stabil niedriger.
hustbaer
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.10.2006
Beiträge: 23742
Beitrag hustbaer Mitglied 18:29:44 08.01.2017   Titel:              Zitieren

Eine mMn. gute Variante ist die Messung so lange zu wiederholen, bis nach N (z.B. 100) Versuchen kein schnellerer Durchlauf mehr gefunden wurde als in allen Versuchen davor.
Damit bekommt man halbwegs stabile Werte und es lässt sich einfach automatisieren.

Eine andere Variante ist es den Mittelwert zu nehmen. Wobei ich dazu tendiere Ausreisser zu ignorieren, da einem fast immer das OS irgendwie dreinpfuscht. Diese Werte sind dann allerdings oft nicht ganz trivial zu vergleichen, vor allem wenn die Standardabweichung gross ist und die Mittelwerte knapp beieinander liegen.

_________________
Until every person can enjoy all their human rights, we will not stop. I support Amnesty International. Will you?
https://www.amnesty.org / https://www.amnesty.de / https://www.amnesty.at


Zuletzt bearbeitet von hustbaer am 18:30:18 08.01.2017, insgesamt 1-mal bearbeitet
nachtfeuer
Moderator

Benutzerprofil
Anmeldungsdatum: 08.04.2010
Beiträge: 2229
Beitrag nachtfeuer Moderator 19:02:21 08.01.2017   Titel:              Zitieren

Man könnte auch ein Histogramm erstellen, und ein paar Grundwerte nebeneinanderstellen, jeweils niedrigster Wert, höchster Wert, Bandbreite, Anzahl der Ausreißer usw.

Oder einfach eine Tabelle bzw. mehrere, (mit den stabilsten Werten) siehe auch:
https://www.bernd-leitenberger.de/benchmark.shtml
Arcoth
Moderator

Benutzerprofil
Anmeldungsdatum: 02.10.2013
Beiträge: 3577
Beitrag Arcoth Moderator 16:04:58 09.01.2017   Titel:              Zitieren

hustbaer schrieb:
Eine mMn. gute Variante ist die Messung so lange zu wiederholen, bis nach N (z.B. 100) Versuchen kein schnellerer Durchlauf mehr gefunden wurde als in allen Versuchen davor.
Vom lieben Volkard, diese Methode.

_________________
Obstacles are those frightful things you see when you take your eyes off your goal. - Henry Ford
.keen
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.02.2015
Beiträge: 5
Beitrag .keen Mitglied 21:22:25 09.01.2017   Titel:              Zitieren

Wäre es nicht sinnvoll den Code mit "g++ -s" zu kompilieren und dann das Assembly auszuwerten. Da kann man dann doch genau zählen wie viele Schritte der Prozessor für deine Funktion benötigt.
Dann ist egal, was dein Rechner zum Zeitpunkt der Messung noch zutun hat und mit dem richtigen Script funktioniert die Auswertung auch viel schneller.


- so meine Theorie. Klärt mich bitte auf, wenn ich falsch liege.
C++ Forum :: C++ (alle ISO-Standards) ::  wie laufzeit am genausten messen?  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.