380
7 Optimierung
enthalten. Daher können sich die Themenbereiche zwischen dem Kapitel 6 und dem
gegenwärtigen Kapitel überlappen. Der Schwerpunkt des Kapitels 6 liegt bei fundamentalen Techniken der Abbildung auf Ausführungsplattformen. Dagegen liegt der
Schwerpunkt des gegenwärtigen Kapitels eher bei (ggf. optionalen) Verbesserungen
gegenüber den fundamentalen Techniken.
7.1 High-Level-Optimierungen
High-Level-Optimierungen können auf den Quellcode eingebetteter Software angewendet werden. Die Erkennung regulärer Strukturen wie beispielsweise von Zugriffsmustern für Felder (engl. arrays) kann auf der Quellcodeebene einfacher sein als
auf der Ebene der Maschinensprache. Die Quellcodeebene ist auch deshalb nützlich,
weil die Wirkung vieler Optimierungen durch eine Transformation auf dem Quellcode ausgedrückt und so leicht nachvollziehbar gemacht werden kann. In manchen
Fällen kann man den Effekt einer Transformation durch Hinweise an den Compiler
ausdrücken, was ebenfalls zur Nachvollziehbarkeit beiträgt.
7.1.1 Einfache Schleifentransformationen
Auf Spezifikationen lassen sich eine Reihe von Schleifentransformationen anwenden.
Nachfolgend beschreiben wir einige davon:
• Schleifenpermutation: Wir betrachten ein zweidimensionales Array. Der CStandard [290] legt fest, dass zweidimensionale Felder im Speicher wie in Abb.
7.2 beschrieben abgelegt werden. Aufeinanderfolgende Werte des zweiten Indexes werden auf einen zusammenhängenden Speicherbereich abgebildet. Diese
Anordnung wird auch row-major order [406] genannt.
Abb. 7.2 Speicher-Layout für ein
2-dimensionales Array p[j][k] in C
…
k=0
k=1
…
k=0
k=1
…
k=0
k=1
…
…
j=0
j=1
j=2
Précédent

- 398/485

Suivant