Metaprogrammierung Frage



  • Hallo,

    ich frage mich ob es sinnvoll ist alle mögliche Algorithmen in template-Metaprogrammierung zu übersetzen um die höchstmögliche Geschwindigkeit rauszuholen.
    Dann wäre es sinnvoll dass (ich) man ab dem Moment es immer benutzt damit später die template-Metaprogrammierung schneller zu umsetzen ist weil (ich) man ja erfahrung da dran (habe) hat.

    ist es sinnvoll ja/nein - Wieso? (Wo wäre es besser diese Technik zu benutzen?)

    Danke schonmal

    MfG



  • Wenn dir die Ausgangsinformationen zur Compile-Zeit noch nicht vorliegen, kannst du auch keine Template-Metaprogrammierung benutzen. Und ich glaube auch nicht, dass du irgendwann mal irgendwelche Algorithmen aus der Graphentheorie in Template-Metaprogrammierung benötigen wirst.



  • Sinnvoll ist es dann, wenn Du die Eingabedaten der Algorithmen zur Compilezeit kennst und "Magic Numbers" im Code vermeiden willst.

    Unmöglich ist es dann, wenn die Eingabedaten zur Compilezeit sowieso nicht bekannt sind, daher erübrigt sich hier die Frage.



  • Danke euch beiden,

    darüber hab ich garnicht nachgedacht obwohl ich wusste, dass alles während der Compilerzeit übersetzt werden. Dann ist die Frage unbrauchbar. Schade, dass es hier keine Danke buttons gibt.

    MfG



  • Und wenn für die Ausführung irgendeines Algorithmus' schon alles nötige zur compile time bekannt ist, können auch "normal" geschriebene Funktionen schon dann ausgeführt werden (constexpr).
    @Zenter: Also so hört es sich für mich an, als gäbs das nicht allzuviel Überschneidung, aber vielleicht hast du ja mal ein Beispiel, was du meinst. 🙂

    edit: waaaay too lahm 😉



  • Hi Dobi,

    ich habe kein konkretes Beispiel. Die Frage war auf die Allgemeinigkeit bezogen.



  • in template-Metaprogrammierung zu übersetzen um die höchstmögliche Geschwindigkeit rauszuholen

    Templates sind Generalisierungen, Geschwindigkeit wird mit Spezialisierung auf Problemgroesse und Hardware erreicht. D.h. Dein Wunsch nach maximaler Geschwindigkeit wird nicht durch Templates erfuellt.

    PS: Dein Deutsch ist grauenhaft.


  • Mod

    knivil schrieb:

    in template-Metaprogrammierung zu übersetzen um die höchstmögliche Geschwindigkeit rauszuholen

    Templates sind Generalisierungen, Geschwindigkeit wird mit Spezialisierung auf Problemgroesse und Hardware erreicht. D.h. Dein Wunsch nach maximaler Geschwindigkeit wird nicht durch Templates erfuellt.

    Aber Templatemetaprogrammierung bietet, was er möchte. Denn durch die Metaprogrammierung reicht es, den allgemeinen Algorithmus zu programmieren, der dann aber zur Compilezeit anhand der Zusatzinformationen zu einer spezialisierten Variante optimiert werden kann.

    Beispiel Determinante (Ich nehme mal o.B.d.A. die Leibniz-Formel):
    Im allgemeinen (NxN-Matrix, N unbekannt) hast du eine rekursive Funktion, die jeweils die Unterdeterminanten ausrechnet und zusammenmutlipliziert. Ungünstig. Wenn aber N bekannt ist, kann mit Templates zu Compilezeit bestimmt werden, wie die Gesamtformel aussieht. Also z.B. für N=2 das berühmte ad-bc. Und das ist die optimalste Version, die du hinschreiben kannst (solange die Koeffizienten unbekannt sind). Dabei musstest du aber bloß einmal die Leibnizformel als TMP programmieren, anstatt alle Fälle hinzuschreiben.

    Das wird zum Beispiel von einigen Bibliotheken zur Arbeit mit (kleinen) Matrizen gemacht, weil das allgemein sehr gut funktioniert mit den Operationen der linearen Algebra. Die brauchen zwar immer ewig (= ein paar Sekunden) zum Compilieren, aber an die resultierende Laufzeit kommt nix ran.



  • Dein Einwand ist mir bewusst, jedoch wurde geschrieben:

    höchstmögliche Geschwindigkeit

    Da dachte ich dann in erster Linie an SSE. Ich traue dem Compiler zwar zu, SSE Code zu erzeugen, trotzdem ist dieser im Allgemeinen nicht optimal.



  • Hi Seppj,

    danke für deinen Beitrag hat mir echt weitergeholfen.

    knivil schrieb:

    höchstmögliche Geschwindigkeit

    Da dachte ich dann in erster Lieneie an SSE. Ich traue dem Compiler zwar zu, SSE Code zu erzeugen, trotzdem ist dieser im Allgemeinen nicht optimal.

    Damit meinte ich die höchstmögliche Geschwindigkeit die man mit der template-Metaprogrammierung gewinnen kann.

    knivil schrieb:

    PS: Dein Deutsch ist grauenhaft.

    Bleib bitte das nächste mal Sachlicher. Es geht hier nicht darum, dass ich nicht so gut Deutsch kann wie andere hier im Forum es geht darum, dass hier Leute geholfen werden.
    Wenn du meine Frage nicht verstanden hast, dann kann ich sie gerne präziser stellen.
    Außerdem kannst du es gerne per pm mir sagen dass ich kein Deutsch kann ... ist kein Problem, es gibt ja in Deutschland niemanden der kein perfektes Deutsch kann so wie es aussieht.

    MfG


  • Mod

    Zenter schrieb:

    knivil schrieb:

    PS: Dein Deutsch ist grauenhaft.

    Bleib bitte das nächste mal Sachlicher. Es geht hier nicht darum, dass ich nicht so gut Deutsch kann wie andere hier im Forum es geht darum, dass hier Leute geholfen werden.
    Wenn du meine Frage nicht verstanden hast, dann kann ich sie gerne präziser stellen.
    Außerdem kannst du es gerne per pm mir sagen dass ich kein Deutsch kann ... ist kein Problem, es gibt ja in Deutschland niemanden der kein perfektes Deutsch kann so wie es aussieht.

    Wenn du mit anderen Leuten schriftlich kommunizierst, dann ist es schon wichtig, dass du dir Mühe gibst. Du willst schließlich gelesen werden. Wenn du unleserlich schreibst, hat dies zwei Effekte:
    1. Man liest deine Beiträge vielleicht gar nicht erst. Schließlich sind hier nur freiwillige Helfer unterwegs. Wenn du dir nicht die Mühe machst, verständlich zu schreiben, wieso sollten sie es denn lesen?
    2. Du wirst gleich in die Schublade der Schluderer gesteckt. Wir wissen aus Erfahrung, wer schluderig schreibt, der programmiert auch unsauber. Denn beide Prozesse sind eng verwandt: Man bringt jeweils die eigenen Gedanken in eine Form, dass jemand anderes diese verstehen kann. Dabei ist es für den Vorgang an sich nicht entscheidend, ob das Ziel ein Computer oder ein Mensch ist.

    P.S.: Es ist übrigens vollkommen ok, hier Fragen auf Englisch zu stellen.



  • Hey Seppj,

    ich finde du hast schon Recht. Aber wo bitte sind meine Beiträge unleserlich? Ich finde man kann sie sehr gut und ohne Probleme lesen und auch verstehen. Ich versuche immer meine Beiträge übersichtlich zu halten und so wenig wie möglich Fehler zu machen. Na klar gibt es hier und da ein paar orthographische Fehler aber das tut nichts zur Sache.

    Solche Anmerkungen wie von Knivil lenken nur vom Thema ab und dadurch entstehen solche Diskussionen wie diese hier, die garnichts mit dem eigentlichen Thema zu tun haben. Dies war nie mein Ziel.

    MfG



  • Deswegen nutzt auch jeder static_cast<>...



  • Wahrscheinlich Off topic, da ich langsam den Faden verliere:

    1.) Es waren 4 Worte eingeleitet durch PS, die Diskussion hast du begonnen.

    2.)

    Damit meinte ich die höchstmögliche Geschwindigkeit die man mit der template-Metaprogrammierung gewinnen kann.

    Also du moechtest alles mit TMP realisieren, damit du die Geschwindigkeit von TMP hast.

    3.)

    Deswegen nutzt auch jeder static_cast<>...

    Mir faellt schwer, dass als Antwort irgendwie zu einem Beitrag zuzuordnen.

    4.)

    es gibt ja in Deutschland niemanden der kein perfektes Deutsch kann



  • PS: Ironie



  • knivil schrieb:

    1.) Es waren 4 Worte eingeleitet durch PS, die Diskussion hast du begonnen.

    Du hast mich damit angeregt etwas dagegen zu sagen .. du kannst nicht behaupten dass ich nur an der Diskussion schuld bin, außerdem spielt es keine Rolle mehr.

    knivil schrieb:

    4.)

    es gibt ja in Deutschland niemanden der kein perfektes Deutsch kann

    PS: Ironie



  • Ach, deine Frage wurde doch toll beantwortet. Wenn es danach mal ein Bischen offtopic/meta wird, ist das doch kein Drama. 😉


Log in to reply