Wie programmiere ich performant? Literaturtipps?
-
Hallo, Leute!
Kann mir jemand Bücher/URLs zum Thema "Wie programmiere ich performant?" empfehlen?
Oder sonstige Tipps wie ich da vorgehen kann?
Viele Grüße und vielen Dank
Sören
-
Wie wäre es mit einem Algorithmus-Buch. Die Wahl der richtigen Datenstrukturen und Algorithmen ist ja idr der entscheidende Faktor.
-
soerenP schrieb:
Kann mir jemand Bücher/URLs zum Thema "Wie programmiere ich performant?" empfehlen?
Meinst du jetzt wie man möglichst wenig Tastendrücke braucht? Oder willst du performante Programme schreiben?
-
Hört sich auf den ersten Blick nicht so allgemein an (Algorithmen), wie ichs gerne hätte, aber ich schau auf jeden Fall mal nach, danke!
-
fooBarFighter schrieb:
Meinst du jetzt wie man möglichst wenig Tastendrücke braucht? Oder willst du performante Programme schreiben?
Nein, die Programme sollten performant werden. So faul bin ich dann doch nicht

-
Also, ich hatte mir in etwa so etwas vogestellt:
Was sollte man in seinem Programm vermeiden? Was frisst unnötig Prozessorleistung?
Wo lohnt es sich z.B. an Überichlichkeit zu sparen, wenn es dafür schneller wird...
Wie regele ich am besten die Kommunikation zwischen Objekten?
-
Es gibt keine einfache Antwort auf diese Frage. Warum das so ist kann man in diesem Artikel gut nachlesen:
-
Ich finde, Du solltest TAOCP lesen.

-
Ich kenn nur TAFKAP

Nein, habs gegooglet, ich schaus mir mal an.
Vielen Dank an alle!
Sören
-
Hi,
versuchs mal mit
Scott Meyers Effektiv C++ programmieren"
Scott Meyers "Mehr Effektiv C++ programmieren"
oder ich sag mal so: Kreative Faulheit. Nichts machen was nicht muß und immer nur das machen was muß und nichts doppelt.
Keine Objekte mit Standardargumenten erstellen und dann ändern, sondern gleich mit aktuellen Argumenten erstellen.
Nur das berechnen, was auch wirklich weiter verwendet wird.
Mit Exceptions sparsam umgehen, nicht als Steuerstrukturen verwenden...
Niedrige Operationen verwenden, also besser Shift als Multiplikation wenn das möglich ist, Addition vor Multiplikation, zur Compilezeit berechenbare Werte auch dort berechnen, tief geschachtelte Felder vermeiden...
Und letztlich gilt immer noch, daß kleinere Programme nicht so viel Code durchschleusen müssen und daher schon von Hause aus eine Chance haben effizienter zu sein. (natürlich bei sonst gleicher Programmqualität.)Gruß Mümmel
-
soerenP schrieb:
Hört sich auf den ersten Blick nicht so allgemein an (Algorithmen), wie ichs gerne hätte, aber ich schau auf jeden Fall mal nach, danke!
Du suchst was allgemeineres als das?
-
muemmel schrieb:
Niedrige Operationen verwenden, also besser Shift als Multiplikation wenn das möglich ist,
Ein klassisches Beispiel für premature Optimizing... Auf modernen Prozessoren können Multiplikationen sogar schneller sein als bit-shifting.
-
skals schrieb:
Auf modernen Prozessoren können Multiplikationen sogar schneller sein als bit-shifting.
Achja? Nenne bitte ein Beispiel!
-
Egal was von beiden schneller ist, von einem zeitgemäßen Compiler kann man erwarten, daß er vernünftig optimiert. Und die Entscheidung ob Shift oder Multiplikation schneller ist, dürfte eine der einfachsten sein.
-
hustbaer schrieb:
skals schrieb:
Auf modernen Prozessoren können Multiplikationen sogar schneller sein als bit-shifting.
Achja? Nenne bitte ein Beispiel!
jede cpu mit SSE.
-
Vielleicht suchst du sowas:
Efficient C++ | ISBN: 0201379503
-
rapso schrieb:
Kilo Byte = 1000, 1 Kilobyte = 1024, da Eigenbegriff
falsch, 1 kilobyte = 1000 bytes. 1024 bytes = 1 kibibyte.

-
Du solltest besonders auf minmalen Speicherverbrauch achten! Speicherzugriffe sind im Vergleich zu der Rechengeschwindigkeit moderne CPUs teuer!
-
muemmel schrieb:
Und letztlich gilt immer noch, daß kleinere Programme nicht so viel Code durchschleusen müssen und daher schon von Hause aus eine Chance haben effizienter zu sein. (natürlich bei sonst gleicher Programmqualität.)
Nicht wirklich.
-
rapso schrieb:
hustbaer schrieb:
skals schrieb:
Auf modernen Prozessoren können Multiplikationen sogar schneller sein als bit-shifting.
Achja? Nenne bitte ein Beispiel!
jede cpu mit SSE.
Hihi, ok, wenn was parallel geht dann stimmt das

Die muss man halt im Moment selbst mit intrinsics/inline asm schreiben da es noch keinen wirklich guten SSE Vectorizer gibt (oder bin ich nur nichtmehr am Laufenden?).-----
z.T. Programmgrösse: es kommt eigentlich nur drauf an wie gross der oft durchlaufene Code im Vergleich zum Cache ist. Wenn ein Programm komplett in den Cache passt, ein anderes (welches das gleiche tut) dagegen nicht, dann macht das schon meist einen Unterschied.
Wenn beide komplett in den L1 Cache passen ist es natürlich egal.