Fefes ersten Vortrag habe ich ja leider verpasst, aber zum zweiten Vortrag bin ich dann doch rein, obwohl ich anfangs ein wenig skeptisch war. Ein paar Sachen muss man Fefe jedoch neidlos zugestehen … was C angeht hat er richtig Ahnung. Die Kernaussage war dafür recht schlicht: „Lesbarer Code ist wichtiger als Optimierung“.
Don’t use Inline
- das macht der Compiler von alleine wo es sinnvoll ist
- in modernen Compilern ist da eine sehr gute Optimierung
Range checks
- kann man immer machen
- optimiert der Compiler gegebenenfalls automatisch weg wo sie unnötig sind
Strength Reduction
- der Compiler macht automatisch shifts draus
Sizeof
- optimiert der Compiler automatisch, auch bei mehrfachem Einsatz
- keine „magic numbers“ verwenden
Tail recursion
- kann man in eine nichtrekursive Funktion auflösen
- macht der gcc automatisch
- nicht icc und sun-cc
Aliasing
- der Compiler muss hier sehr vorsichtig optimieren
- (außer der gcc, der optimiert alles weg, aber dafür hat Fefe ja einen Bugreport geschrieben)
- hier ist manuelle Optimierung möglich (aber lohnt sich kaum)
Dead Code
- Compiler/Linker kann Code bzw. Objectfiles weglassen
- Beim kompilieren von Bibliotheken jede Funktion in ein eigenes Objectfile packen
Inline Assembler
- braucht man praktisch nie
- ist blöd zu debuggen
- besser nicht (lohnt sich auch kaum bei modernen Compilern)
Shifting
- schwer in C zu programmieren
- optimiert der Compiler automatisch
Pre- vs. Post-Operation
- auch hier kaum noch Optimierungsmöglichkeiten
Memory Hierarchien
- hier lässt sich am meisten tunen
- ein Cache Miss schlägt mit 250 CPU-Cycles Penalty zu buche
- das ist meist der teuerste Schaden und am wichtigsten zu optimieren
Aha … also gute Neuigkeiten für Spaghettiprogrammierer wie mich … einfach weitermachen, der Compiler optimiert das schon. 🙂
Kommentare gesperrt wegen Spam
Comment by Christian — 7. Juni 2012 @ 08:08