Compiler

Welche Hauptwirkung von Loop Unrolling (Schleifenentfaltung) ist richtig?

  1. ADer Aufwand für Zählerprüfung und Verzweigung sinkt, und Befehle lassen sich leichter umordnen
  2. BDer Schleifenrumpf besteht nur noch aus einer Iteration, und der Programmcode wird kleiner
  3. CDie Schleife wird als Funktion herausgelöst und kann von anderen Stellen aufgerufen werden
Antwort und Erläuterung anzeigen

Antwort: A. Der Aufwand für Zählerprüfung und Verzweigung sinkt, und Befehle lassen sich leichter umordnen

Loop Unrolling ist eine Optimierung, die den Schleifenrumpf z. B. viermal aneinanderreiht und die Zahl der Iterationen auf ein Viertel verringert. Zählerprüfung und Verzweigungsbefehle werden weniger, und da Befehle der aneinandergereihten Rümpfe kombiniert und umgeordnet werden können, lassen sich Wartezeiten von Operationen leichter auffüllen. Dafür wird der Code größer und belastet mitunter den Instruktionscache. Dass der Rumpf nur einmal vorkommt und der Code kleiner wird, ist die umgekehrte Beschreibung, und das Herauslösen der Schleife als Funktion ist eine andere Transformation.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Compiler

  1. Welche Berechnung in der obigen Schleife ist Ziel der Verschiebung von schleifeninvarianten Ausdrücken (Loop-Invariant Code Motion, aus der Schleife heraus)? (x und y werden in der Schleife nicht verändert.)
  2. Welche Transformation ist richtig, wenn in der obigen Schleife auf die Indexberechnung i * 4 Strength Reduction angewendet wird?
  3. Was ist der Hauptgrund, warum sich die obige Schleife mit SIMD-Befehlen schwer vektorisieren lässt?
  4. Warum kann der Compiler in der obigen Funktion die Optimierung, das Lesen von *b aus der Schleife herauszuziehen, nicht ohne Weiteres durchführen?
  5. Welche Kombination dessen, was Knoten und Kanten darstellen, ist richtig, wenn bei der Registerzuteilung des Compilers das Verfahren der Färbung des Interferenzgraphen verwendet wird?

Vergleiche zu diesem Thema