Wat is Registertoewijzing (register allocation)?

Compilerstap die variabelen en tussenwaarden van het programma toewijst aan een beperkt aantal CPU-registers. Wordt bepaald met onder meer het kleuren van een interferentiegraaf, zodat tegelijk gebruikte waarden niet in hetzelfde register komen.

Japanse benaming: レジスタ割り当て

“Registertoewijzing (register allocation)” komt voor in 3 oefenvragen uit 1 onderwerpen, bijv. Compilers.

Vakgebied: Compilers

Nu oefenen: vragen over Registertoewijzing (register allocation)

Welke combinatie van wat knopen en bogen voorstellen is juist bij de methode van het kleuren van een interferentiegraaf bij registertoewijzing in een compiler?

  1. AKnopen zijn instructies, bogen de volgorde van uitvoering van instructies
  2. BKnopen zijn registers, bogen de bedrading tussen registers
  3. CKnopen zijn waarden, bogen de relatie dat ze gelijktijdig leven
Antwoord en toelichting tonen

Antwoord: C. Knopen zijn waarden, bogen de relatie dat ze gelijktijdig leven

In een interferentiegraaf zijn variabelen en tussenwaarden de knopen, en twee waarden die op een zeker moment beide nog worden gebruikt (leven) worden door een boog verbonden. Waarden die door een boog zijn verbonden zijn gelijktijdig nodig en kunnen niet in hetzelfde register staan. Bij k registers kan de toewijzing, als de graaf met k kleuren kan worden gekleurd zodat buren niet dezelfde kleur hebben, worden gedaan door elke kleur met een register te laten overeenkomen. Als dat niet lukt, worden sommige waarden naar het geheugen weggeschreven (spill). Het is geen graaf van de volgorde van instructies of de bedrading van registers.

Wat gebeurt er met de gegenereerde code als bij registertoewijzing een "spill" optreedt?

  1. AEr komen instructies bij om waarden naar de stack weg te schrijven en terug te lezen, waardoor het gemakkelijk trager wordt
  2. BHet aantal registers neemt automatisch toe, zodat alle waarden in registers kunnen staan
  3. COngebruikte waarden worden verwijderd, zodat het aantal instructies afneemt
Antwoord en toelichting tonen

Antwoord: A. Er komen instructies bij om waarden naar de stack weg te schrijven en terug te lezen, waardoor het gemakkelijk trager wordt

Een spill is het in het geheugen (op de stack) plaatsen van sommige waarden wanneer er meer gelijktijdig levende waarden zijn dan registers. Bij elk gebruik van zo'n waarde is een leesinstructie nodig en bij elke wijziging een schrijfinstructie, zodat het aantal instructies toeneemt en het door de geheugentoegangen gemakkelijk trager wordt. De compiler laat daarom vaak gebruikte waarden, bijvoorbeeld in lussen, in registers en kiest weinig gebruikte waarden om te spillen. Het aantal registers ligt vast door de CPU en neemt niet toe, en het verwijderen van overbodige waarden is iets anders.

Vragen met “Registertoewijzing (register allocation)” (3)

  1. Welke combinatie van wat knopen en bogen voorstellen is juist bij de methode van het kleuren van een interferentiegraaf bij registertoewijzing in een compiler?
  2. Wat gebeurt er met de gegenereerde code als bij registertoewijzing een "spill" optreedt?
  3. Wat wordt bepaald bij de levendigheidsanalyse (liveness analysis) die als voorbereiding op registertoewijzing wordt uitgevoerd?

Verwante termen

Spill Abstracte syntaxisboom (AST) Basic block Common subexpression elimination Constant folding Control-flow-graaf (CFG) Inlining Instructiescheduling Intermediaire representatie (IR) JIT-compilatie (just-in-time)

Naar de woordenlijst