Wat is Constant folding?

Optimalisatie waarbij expressies waarvan de waarde al bij het compileren vaststaat vooraf worden berekend en door de resulterende constante worden vervangen. Zo wordt 3 * 4 bijvoorbeeld 12. Vermindert berekeningen tijdens de uitvoering.

Japanse benaming: 定数畳み込み

“Constant folding” komt voor in 6 oefenvragen uit 1 onderwerpen, bijv. Compilers.

Vakgebied: Compilers

Nu oefenen: vragen over Constant folding

Welk voorbeeld van constant folding in een compiler is juist?

  1. AEen deel dat dezelfde functie vele malen aanroept samenvoegen tot één aanroep
  2. Bx = 3 * 4 tijdens het compileren berekenen en tot x = 12 maken
  3. CDe body van een lus viermaal achter elkaar zetten en zo het aantal iteraties verminderen
Antwoord en toelichting tonen

Antwoord: B. x = 3 * 4 tijdens het compileren berekenen en tot x = 12 maken

Constant folding is een optimalisatie waarbij expressies waarvan de waarde al tijdens het compileren vaststaat vooraf worden berekend en door de resulterende constante worden vervangen. 3 * 4 is bij elke uitvoering 12, zodat tijdens de uitvoering niet hoeft te worden vermenigvuldigd. In combinatie met constant propagation kunnen ook berekeningen via variabelen in één keer worden gefold. Er zijn ook aandachtspunten, zoals dat bij floating point de afrondingsmethode gelijk moet zijn. Het achter elkaar zetten van lusbodies is loop unrolling, en het samenvoegen van functie-aanroepen is een andere optimalisatie.

“Constant folding” in de toelichting

Vragen met “Constant folding” (6)

  1. Welk voorbeeld van constant folding in een compiler is juist?
  2. Welke code ontstaat uiteindelijk als op de bovenstaande code herhaaldelijk constant propagation en constant folding worden toegepast?
  3. Welke uitspraak over de teruggegeven waarde en de resterende code van de bovenstaande functie is juist wanneer constant propagation, constant folding en verwijdering van dode code voldoende zijn toegepast?
  4. Wat wordt bij het verwijderen van dode code (dead code elimination) verwijderd?
  5. Welke combinatie van voordeel en nadeel van het inlinen (inline expansion) van functies is juist?
  6. Welke combinatie van een optimalisatie die na het inlinen van sq in de bovenstaande code volgt en het resultaat daarvan is juist?

Verwante termen

Numerieke apertuur (NA) Inlining Via Loop unrolling Abstracte syntaxisboom (AST) Basic block Common subexpression elimination Control-flow-graaf (CFG) Instructiescheduling Intermediaire representatie (IR)

Naar de woordenlijst