Wat is Spill?

Bij registertoewijzing het tijdelijk naar het geheugen (stack) wegschrijven van een deel van de waarden wanneer er meer waarden tegelijk in gebruik zijn dan er registers zijn. Het aantal opslag- en laadinstructies neemt toe, waardoor het langzamer wordt.

Japanse benaming: スピル

“Spill” komt voor in 4 oefenvragen uit 2 onderwerpen, bijv. Compilers, GPU-programmeren.

Vakgebied: Compilers

Nu oefenen: vragen over Spill

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.

In een functie bedraagt het grootste aantal gelijktijdig levende waarden 5. Als de interferentiegraaf buiten deze 5 geen beperkingen oplegt, hoeveel registers zijn dan minstens nodig om alle waarden zonder spill in registers te plaatsen?

  1. A5
  2. B4
  3. C10
Antwoord en toelichting tonen

Antwoord: A. 5

De 5 gelijktijdig levende waarden interfereren allemaal met elkaar, zodat de 5 knopen in de interferentiegraaf allemaal door bogen verbonden zijn (een volledige graaf) en minstens 5 kleuren nodig zijn om te kleuren. In een eenvoudig geval waarin levensduren als intervallen kunnen worden weergegeven, zoals bij rechtlijnige code, kan met het maximale aantal gelijktijdig levende waarden aan kleuren worden gekleurd, zodat 5 registers volstaan. Met 4 is ergens een spill nodig, waarbij een waarde naar het geheugen wordt weggeschreven. 10 is meer dan nodig.

“Spill” in de toelichting

Vragen met “Spill” (4)

  1. Wat gebeurt er met de gegenereerde code als bij registertoewijzing een "spill" optreedt?
  2. In een functie bedraagt het grootste aantal gelijktijdig levende waarden 5. Als de interferentiegraaf buiten deze 5 geen beperkingen oplegt, hoeveel registers zijn dan minstens nodig om alle waarden zonder spill in registers te plaatsen?
  3. Welke combinatie van wat knopen en bogen voorstellen is juist bij de methode van het kleuren van een interferentiegraaf bij registertoewijzing in een compiler?
  4. Wat kan er gebeuren in een GPU-kernel als het registergebruik per thread te hoog is?

Verwante termen

Registertoewijzing (register allocation) GPU-kernel GPU Streaming multiprocessor (SM) Abstracte syntaxisboom (AST) Basic block Common subexpression elimination Constant folding Control-flow-graaf (CFG) Inlining

Naar de woordenlijst