In C geschriebene DLL ... welche Linkereinstellungen, um optimale Leistung zu erzielen?



  • Kleiner Edit dazu:

    SeppJ schrieb:

    Was die geschwindigkeit bringt sind die Optimierungseinstellungen beim Compilieren. Keine Ahnung wie die genau beim VS-Compiler heißen. -O vielleicht? Sollte sich jedenfalls extrem einfach finden lassen.

    Habe ich schon gefunden, aber ich will es noch weiter optimieren. Ich kann es mir nicht erlauben, irgendwas redundantes in der DLL zu hinterlassen.



  • Gestern abend habe ich mir noch einmal den Maschinencode meiner DLL angesehen und gemerkt, dass, falls eine Prozedur nicht auf die nächste 0x###F-Adresse endet, Füllbytes (in diesem Falle 0xCC) einfügt, um die nächste Prozedur wieder auf eine 0x###0-Adresse setzen zu können. Mir ist klar, dass der Compiler (oder Linker, ich weiß jetzt nicht, wer das übernimmt) den Ort der Funktionen absichtlich so ausrichtet, dass sie auf einer durch 16 teilbaren Adresse liegen, damit der Zugriff schneller erfolgt, aber gesetzt dem Fall, ich würde die Füllbytes manuell löschen, würde der Speicherplatz, den ich gewinnen würde, den Laufzeitverlust wettmachen?



  • Was haben die Füllbytes mit der Laufzeit zu tun? Die werden doch nicht ausgeführt...



  • Jochen Kalmbach schrieb:

    Was haben die Füllbytes mit der Laufzeit zu tun? Die werden doch nicht ausgeführt...

    Aber eingeladen, deshalb. Ich weiß, es ist unglaublich pedantisch, aber ich versuche einfach, alles abzuwägen.



  • Das würde ich eher sein lassen. Ganz davon abgesehen wie du das überhaupt realisieren willst? Willst du die Bytes entfernen und dann die Adressen händisch korrigieren oder wie? Das halte ich für keine intelligente Idee, wenn man nicht hundertprozentig weiß, was man da tut. Das Alignment wird auch nicht ohne Grund gemacht. Meist will man gerade den Effekt erzeugen, dass es schneller geht. Also warum sollen die Bytes weg? Viel mehr wirst du erreichen, wenn du deine DLL nicht dauernd entlädst und neu lädst oder gleich mit dem Programm verlinkst. Oder kauf dir einen schnelleren Rechner.



  • Nick Unbekannt schrieb:

    Das würde ich eher sein lassen. Ganz davon abgesehen wie du das überhaupt realisieren willst?

    Da wüsste ich schon was, keine Sorge.

    Nick Unbekannt schrieb:

    Willst du die Bytes entfernen und dann die Adressen händisch korrigieren oder wie? Das halte ich für keine intelligente Idee, wenn man nicht hundertprozentig weiß, was man da tut.

    Das weiß ich auch.

    Nick Unbekannt schrieb:

    Das Alignment wird auch nicht ohne Grund gemacht. Meist will man gerade den Effekt erzeugen, dass es schneller geht. Also warum sollen die Bytes weg?

    Also wird es mehr schaden als nutzen, was? Na gut, dann lass ich es.

    Nick Unbekannt schrieb:

    Viel mehr wirst du erreichen, wenn du deine DLL nicht dauernd entlädst und neu lädst oder gleich mit dem Programm verlinkst. Oder kauf dir einen schnelleren Rechner.

    Direkt verlinken geht nicht, aber wenn ich erkläre, warum, ist der halbe Tag vorbei. Und ich besitze bereits einen schnellen Rechner, aber andere vielleicht nicht. 😉



  • Dir ist aber schon bewusst, dass redundanter Code das Programm nicht aus bremst? Eher im Gegenteil. Dadurch dass nicht ständig im Code hin und her gesprungen werden muss, läuft die Abarbeitung wesentlich flotter.
    Und einen Profiler hast du schon mal zu Rate gezogen? Falls nicht schau dich mal bei AMD um. Ob der was taugt weiß ich nicht, er kostet aber nichts.



  • Als ob der Versuch deiner Mikrooptimierungen auch nur irgendwas bringt.



  • Wenn er nur eine kleine Bibliothek will, die dann nur sehr schnell ausgeführt wird, könnte er auch auf Grösse optimieren. Aber lieber verbessert er seinen eigentlichen Code anstatt stundenlang die perfekte Optionskombination herauszufinden, die bei der nächsten Erweiterung nicht mehr optimal ist.



  • Nick Unbekannt schrieb:

    Dir ist aber schon bewusst, dass redundanter Code das Programm nicht aus bremst? Eher im Gegenteil. Dadurch dass nicht ständig im Code hin und her gesprungen werden muss, läuft die Abarbeitung wesentlich flotter.

    Weiß ich auch, keine Sorge. Ich wollte nur wissen, ob der Vorteil einer kleinen DLL die Nachteile ebendieser ausgleicht, und da dem nicht der Fall ist, habe ich dies verworfen.

    Praxiskenner schrieb:

    Als ob der Versuch deiner Mikrooptimierungen auch nur irgendwas bringt.

    Siehe oben. Ich habe bloss gefragt, ob diese Optimierung etwas bringen würde.

    Compilerkenner schrieb:

    Wenn er nur eine kleine Bibliothek will, die dann nur sehr schnell ausgeführt wird, könnte er auch auf Grösse optimieren. Aber lieber verbessert er seinen eigentlichen Code anstatt stundenlang die perfekte Optionskombination herauszufinden, die bei der nächsten Erweiterung nicht mehr optimal ist.

    Naja, der Basiscode steht schon, und gestern konnte ich noch einmal ein paar unnütze Anweisungen (im C-Code, keine Sorge, an den Maschinencode habe ich mich dank eurer Ratschläge nicht rangetraut) löschen. Jetzt bin ich gerade noch dabei, Bugs zu beheben.

    Aber wenn es nicht mehr Optimierungsmöglichkeiten gibt, muss ich das wohl hinnehmen.


Anmelden zum Antworten