Loop Unrolling
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Veränderung (letzte Änderung)
(keine anderen Diffs, Normalansicht)
Verändert: 9c9
- Situation
- Bei einer Schleife mit sehr kleinem Körper kann der Overhead der Schleife 50% und mehr der Laufzeit ausmachen, da bei jedem Durchgang ein Zähler erhöht wird, dessen Wert getestet wird und dann (meist) zum Beginn des Körpers gesprungen wird.
- Lösung
- Führt man in einem Durchgang den Körper mehrmals aus, so muss der Overhead entsprechend seltener bezahlt werden. Dieser Vorgang nennt sich loop unrolling. Dabei muss darauf geachtet werden, dass der dabei entstehende Objektcode deutlich größer sein kann. Ladezeiten und Cacheeffekte und zusätzlicher Code zur Anpassung der Schleifenparameter müssen dabei gegen den geringeren Overhead pro Durchgang abgewogen werden.
Ein altes Beispiel für loop unrolling in C ist Duff's Device. Eine genauere Beschreiung und Kommentar von Tom Duff findet sich bei http://www.lysator.liu.se/c/duffs-device.html
KategorieOptimierung
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 7. September 2003 20:52 (diff))