Template Funktionen versus Inline Funktionen



  • Tomahawk schrieb:

    Nexus schrieb:

    hustbaer schrieb:

    @Nexus:
    Man kann Templates wunderbar dafür verwenden etwas auf Performance zu optimieren.

    Ja, aber eben nicht primär. Meiner Meinung nach werden Templates hauptsächlich der Abstraktion wegen eingesetzt. Spielt natürlich auch eine Rolle, wie zeitkritisch das Projekt gerade ist, an dem man arbeitet. Je nachdem kann es schon sinnvoll sein, z.B. dynamische durch statische Polymorphie zu ersetzen, oder mit Metaprogrammierung bereits Berechnungen zur Kompilierzeit auszuführen.

    Aber da Tomahawk in letzter Zeit mit seiner Schach-Engine stark in Richtung Premature Optimization tendiert, ist es für ihn sicher gut zu wissen, dass Templates mehr können als nur optimieren. 😉

    Natürlich sind Templates nur dazu da "zu optimieren". Was tut man denn mit Templates? Die Übersichtlichkeit und Wartbarkeit des Codes wird optimiert. Redundante Strukturen automatisch ersetzt oder Berechnungen zu Kompilezeit ausgeführt. Indirektionen verringert, parametrisiert, ...

    Premature Optimization wäre es in einem früheren Stadium gewesen. Jetzt geht es ganz klar darum

    1. die Knotenleistung (=Performance) parallel mit
    2. der Selektivität der Suche,
    3. dem Zeitmanagement in Partien und
    4. dem Schachwissen (Midgame+Endgame)

    zu optimieren. Wobei 1. der einzige deterministische Bereich ist, der keinen Trade-Off hat. 2-4 sind immer nur Kompromisse. Wird zB an 2. gearbeitet, bedeutet ist das ein Trade-Off Präzision vs. Spekulation.

    Du solltest aber auch berücksichtigen, dass der Return-On-Investment bei kumulativen Basement den Trade-Off deutlich präzessisiert.



  • Tomahawk schrieb:

    Natürlich sind Templates nur dazu da "zu optimieren". Was tut man denn mit Templates? Die Übersichtlichkeit und Wartbarkeit des Codes wird optimiert.

    Ich habe mich auf Ausführungsgeschwindigkeit bezogen. Der Begriff "Optimierung" wird sehr oft in diesem Zusammenhang verwendet.

    Tomahawk schrieb:

    Premature Optimization wäre es in einem früheren Stadium gewesen. Jetzt geht es ganz klar darum [...] zu optimieren.

    Okay, sollte kein Vorwurf sein. Beim Lesen deiner Posts habe ich zum Teil befürchtet, dass du sehr viel Zeit in Mikrooptimierungen investierst, obwohl z.B. bei Algorithmen viel mehr herausgeholt werden könnte. Aber gut, dass du auch andere Teile berücksichtigst. 🙂

    Tomahawk schrieb:

    Und ja, mir sind schon einige Prinzipien der Abstraktion klar, aber hat das auch wirklich immer einen Sinn?

    Natürlich nicht immer. Es besteht die Gefahr des Overengineerings, was genauso schlecht ist. Nicht zuletzt ist – wie du sagst – ein persönliches Abwägen entscheidend.

    Was man einfach vermeiden sollte, sind voreilige Schlüsse, die sich im Nachhinein negativ auswirken. Lieber einmal zu viel Zeit messen, und sich vielleicht am Anfang auf sauberes Design konzentrieren. Wenn man schönen und schnellen Code kombinieren kann, umso besser. Aber ich denke, dessen bist du dir bewusst. 😉



  • Nexus schrieb:

    hustbaer schrieb:

    @Nexus:
    Man kann Templates wunderbar dafür verwenden etwas auf Performance zu optimieren.

    Ja, aber eben nicht primär. Meiner Meinung nach werden Templates hauptsächlich der Abstraktion wegen eingesetzt.

    Ich sehe das etwas anders. Templates werden oft dafür eingesetzt etwas schöner umsetzen zu können, etwas zu vereinfachen oder zu generalisieren. Das stimmt schon.
    Templates werden nach meiner Erfahrung aber genauso oft eingesetzt um etwas auf Performance zu optimieren.

    Zu sagen der "primäre Zweck" von Templates sei immer das eine aber nicht das andere halte ich für falsch.



  • Über sowas denkst Du für die Optimierung eine Schach(!) Engine nach? Ich programmiere Simulationssoftware die für eine Rechnung wochenlang auf sehr teuren Workstations läuft. Ich würde aber niemals auf die Idee kommen einen this pointer wegzuoptimieren, denn dieser optimiert meine Performance und mein Stundensatz ist immer noch deutlich höher als der der Maschinen.
    Ich musste auch oft enttäuscht feststellen, dass ein moderner Compiler die tolle Optimierung, an der ich ein paar Stunden gearbeitet habe sowieso macht und das Programm nachher genauso schnell lief wie vorher. Nur der Code ist deutlich schlechter geworden und es hat sinnlos Zeit gekostet.

    Zur Eingagsfrage tippe ich auf exakt das gleiche Ergebnis.

    MSVC9 konnte auch schon mehrere Dateien parallel compilieren.



  • damit ihr nicht mehr soviel zeit verschwendet.
    http://de.wikipedia.org/wiki/Profiler_(Programmierung)



  • brotbernd schrieb:

    Über sowas denkst Du für die Optimierung eine Schach(!) Engine nach? Ich programmiere Simulationssoftware die für eine Rechnung wochenlang auf sehr teuren Workstations läuft. Ich würde aber niemals auf die Idee kommen einen this pointer wegzuoptimieren, ...

    Ist etwas Wahres dran, THX. 🙂


Anmelden zum Antworten