Compilers

Welk effect van loop unrolling is juist?

  1. AHet testen van het aantal iteraties en sprongen neemt af en instructies zijn gemakkelijker te herordenen
  2. BDe body van de lus wordt slechts één keer geschreven, waardoor de programmacode kleiner wordt
  3. CDe lus wordt als functie afgesplitst, zodat hij vanaf andere plaatsen kan worden aangeroepen
Antwoord en toelichting tonen

Antwoord: A. Het testen van het aantal iteraties en sprongen neemt af en instructies zijn gemakkelijker te herordenen

Loop unrolling is een optimalisatie waarbij de body van de lus bijvoorbeeld viermaal achter elkaar wordt geschreven en het aantal iteraties een vierde wordt. Naast minder test- en sprong-instructies kunnen instructies van de naast elkaar geplaatste bodies worden gecombineerd en herordend, zodat wachttijden van berekeningen gemakkelijker worden opgevuld. De code wordt daarentegen groter en kan de instructiecache onder druk zetten. Dat de body één keer wordt geschreven en de code kleiner wordt, is een omgekeerde beschrijving, en het afsplitsen van een lus als functie is een andere transformatie.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Compilers

  1. Welke berekening in de bovenstaande lus komt in aanmerking voor loop-invariant code motion (verplaatsing buiten de lus)? (x en y worden in de lus niet gewijzigd.)
  2. Welke transformatie is juist als in de bovenstaande lus strength reduction wordt toegepast op de indexberekening i * 4?
  3. Wat is de belangrijkste reden dat de bovenstaande lus moeilijk te vectoriseren is met SIMD-instructies?
  4. Waarom kan de compiler in de bovenstaande functie de optimalisatie waarbij het lezen van *b buiten de lus wordt gebracht niet zonder meer uitvoeren?
  5. Welke combinatie van wat knopen en bogen voorstellen is juist bij de methode van het kleuren van een interferentiegraaf bij registertoewijzing in een compiler?

Vergelijkingen bij dit onderwerp