(Basis) Performanten C++ Code schreiben?
-
Hallo zusammen,
ich konnte nachweisen, dass sich das Programm anders Verhalten hat zw. Debug und Release mit den exakt gleichen Eingabeparametern. Der Nachweis wurde zusätzlich auf einem Dritt-Rechner geprüft. Es waren keine Un-initialisierten Variablen im Spiel, das war die erste Prüfung die ich durchgeführt hatte.
Hatte ich das #pragma optimize("", off) auskommentiert, so war der Fehler bzw. das andere Laufverhalten wieder da. (Meine Erwartung: Das Programm verhält sich exakt gleich - egal welche Build-Konfiguration.)
Ich schau mal, ob ich den Code finde, zu einem Testprogramm abstrippen kann und würde diesen dann in einen neuen Thread posten.
Torsten Robitzki schrieb:
einem offensichtlichem Anfänger
Ich nehme mal an Du meinst mich
Nur mal interessenshalber gefragt: Aus welchem Post schließt Du das? Wo ziehst Du die Grenze?So ich hab einiges mitgenommen, danke euch allen.
Wünsche Euch auf jeden Fall schon einmal schöne Feiertage!
Viele Grüße,
-
Meiner Erfahrung nach ist es sinnvoller erst das Programm vollständig und fehlerfrei zu implementieren und danach mit einem Profiler wie VerySleepy nachzuschauen wo die Performance einbricht.
So erfuhr ich beispielsweise dass mein Programm 100000 mal einen eigentlich konstantem Wert ausrechnete. Und das kostete Zeit...
Natürlich ist ein schöner Codestil auch wichtig.
-
jb schrieb:
[1] Wie messt ihr den dann die Performance? Kapselt ihr dann immer diese Funktionen in kleine Testprogramme?
Unterschiedlich, eher nicht. Jedenfalls gings mir meist nicht um einzelne Funktionen, sondern um größere Abläufe. Man schaut sich auch an, was man insgesamt machen könnte. So ein Prozess kann bei uns durchaus Tage oder länger laufen, je nach Datenmenge usw. Dann schaut man, ob man vielleicht vorverarbeitete Daten cachen kann und obs Sinn macht. Man schaut sich an, ob man Aufgaben an mehrere Threads verteilen könnte (in den letzten Jahren haben wir sehr viel auf Mutltithreading umgestellt und optimiert, früher wars aber nicht der Fall). Wenn man mit Multithreading anfängt, kommen oft erstmal zig neue Probleme auf. Wenn man sich einen Überblick verschafft hat, kann man auch einzelne Bereiche profilen. Wenn man Glück hat, fallen irgendwelche Hotspots auf, kann aber gut sein, dass nichts besonderes auffällt. Dann muss man sich erstmal grob die Teile raussuchen, die viel Zeit verbrauchen und sich genauer anschauen, was die eigentlich machen und ob mans nicht anders machen könnte. Dann kann man vielleicht auch mal ein Testprogramm schreiben, um die Funktionalität besser einzeln testen zu können und schaut sich das dann wieder im Gesamtkontext an. Und der endgültige Test ist dann, dass man den Prozess über eine Referenzdatenmenge laufen lässt und schaut, ob das schneller geworden ist. Einige Prozesse haben wir in den letzten Jahren um Größenordnungen optimiert.
Die Profiler sollten mit Release Code zurechtkommen. VerySleepy kenne ich nicht, aber wir haben alle möglichen freien und kommerziellen Profiler bei uns in der Arbeit und die kommen alle mit Release Builds zu recht. Wie gut sie aber mit dem Programm insgesamt "zurechtkommen" ist aber eine andere Frage, weil einige Profiler damit schon lang überfordert sind. Früher war AQTime mein Favorit, mittlerweile kann ich damit praktisch nicht mehr arbeiten und benutzt in letzter Zeit eigentlich nur noch den VS Profiler.
-
Hi Jakob,
jb schrieb:
Torsten Robitzki schrieb:
einem offensichtlichem Anfänger
Ich nehme mal an Du meinst mich
Nur mal interessenshalber gefragt: Aus welchem Post schließt Du das? Wo ziehst Du die Grenze?Ja, solche kleinteiligen Performance-Sorgen sind eigentlich typisch für Berufsanfänger
Ich wollte Dich auch in keinster Weise diskreditieren. Die Grenze liegt meiner Meinung nach bei 2,6 Jahren und 421 selbst gemachten Fehlern 
mfg Torsten
-
Hallo Torsten,
ich hab es nicht als diskreditierend verstanden, mich hat es nur interessiert. Der Ursprung der Performance-Sorgen ist meine Arbeit - und wenn man mit so wenig Änderungen am Code doch einiges gewinnen kann (mal den Optimizer außen vor gelassen), warum den dann nicht? ^^ Es schadet keinem und der Entwickler macht sich diesbzgl. Gedanken. Alles auf den Optimizer zu verschieben und selbst Gehirn abschalten, so möchte ich persönlich nicht entwickeln - möchte die Linke und Rechte Grenze meiner Programmiersprache und Umgebung kennen.
Und dafür finde ich dieses Forum total super
Hier sind einfach "massig" Entwickler die ziemlich viel Erfahrung haben oder auch eine andere Sichtweise einbringen können und es wäre schlichtweg blöd, diese nicht zu nutzen/abzufragen.Viele Grüße
---
Hallo Mechanics,
danke Dir, für Deine Erfahrung und Vorgehensweise.
Viele Grüße