Compilers

Leer met meerkeuzevragen hoe compilers werken, van lexicale en syntactische analyse via tussenrepresentaties in SSA-vorm en optimalisaties zoals constant folding en loop unrolling tot registertoewijzing.

Oefen 10 vragenWillekeurige vragen uit dit onderwerp · ongeveer 5 minuten Dit onderwerp oefenenAlle vragen over dit onderwerp in willekeurige volgorde Zwakke vragenAlleen de laatst fout beantwoorde vragen opnieuw oefenen

Compilers: kernpunten

Een compiler is software die een door een mens geschreven programma vertaalt naar machinecode die de CPU kan uitvoeren. De broncode wordt via lexicale analyse (opdelen in tokens), syntactische analyse (opbouwen van een boomstructuur volgens de grammatica) en semantische analyse (controle van typen en namen) omgezet in een tussenrepresentatie (IR).

Op de tussenrepresentatie worden optimalisaties uitgevoerd, zoals constant folding, eliminatie van gemeenschappelijke subexpressies, inlining, loop unrolling en vectorisatie. Ten slotte genereren registertoewijzing en instructieplanning code die bij de CPU past. Wie begrijpt hoe optimalisatie werkt, weet hoe snelle programma's worden geschreven en hoe de prestaties van de hardware worden benut.

Alle vragen over Compilers (50)

  1. Welke uitspraak over de rol van lexicale analyse in een compiler is juist?
  2. Wat doet de parsing (syntactische analyse) van een compiler?
  3. Welke fout wordt het best gevonden door de semantische analyse van een compiler?
  4. Welke uitspraak over een abstracte syntaxisboom (AST) is juist?
  5. Wat is het belangrijkste voordeel van het gebruik in een compiler van een tussenrepresentatie (IR) die niet van de brontaal en niet van de CPU afhangt?
  6. Welke uitspraak over een basisblok (basic block) is juist?
  7. Welke combinatie van wat knopen en pijlen in een controleflowgraaf voorstellen is juist?
  8. Welke uitspraak over de tussenrepresentatie in SSA-vorm is juist?
  9. Als de bovenstaande code in SSA-vorm wordt gebracht, komt na het if-statement een uitdrukking zoals "x3 = φ(x1, x2)". Welke uitspraak over de werking van deze φ-functie is juist?
  10. Welk voorbeeld van constant folding in een compiler is juist?
  11. Welke code ontstaat uiteindelijk als op de bovenstaande code herhaaldelijk constant propagation en constant folding worden toegepast?
  12. Welke uitspraak is juist over wat gebeurt als op de bovenstaande code common subexpression elimination wordt toegepast?
  13. Wat wordt bij het verwijderen van dode code (dead code elimination) verwijderd?
  14. Welke combinatie van voordeel en nadeel van het inlinen (inline expansion) van functies is juist?
  15. Welk effect van loop unrolling is juist?
  16. 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.)
  17. Welke transformatie is juist als in de bovenstaande lus strength reduction wordt toegepast op de indexberekening i * 4?
  18. Wat is de belangrijkste reden dat de bovenstaande lus moeilijk te vectoriseren is met SIMD-instructies?
  19. Waarom kan de compiler in de bovenstaande functie de optimalisatie waarbij het lezen van *b buiten de lus wordt gebracht niet zonder meer uitvoeren?
  20. Welke combinatie van wat knopen en bogen voorstellen is juist bij de methode van het kleuren van een interferentiegraaf bij registertoewijzing in een compiler?
  21. Wat gebeurt er met de gegenereerde code als bij registertoewijzing een "spill" optreedt?
  22. Wat is het belangrijkste doel van instructieplanning (instruction scheduling) in een compiler?
  23. Welk effect heeft het toepassen van tail call optimization op de laatste recursieve aanroep van de bovenstaande functie?
  24. Welk verschil tussen een compiler en een interpreter is juist?
  25. Welke uitspraak over een uitvoeringsomgeving die JIT-compilatie gebruikt is juist?
  26. Welke uitspraak over de basisopzet van LLVM is juist?
  27. In welke situatie wordt de instelling zonder optimalisatie (zoals -O0) bij de optie voor het optimalisatieniveau van een compiler vaak gebruikt?
  28. Welke uitspraak over profielgestuurde optimalisatie (PGO) is juist?
  29. Welke optimalisatie wordt het best mogelijk gemaakt door link-time optimization (LTO)?
  30. In C is overflow van gehele getallen met teken ongedefinieerd gedrag. Welke code kan een compiler die de bovenstaande functie optimaliseert op deze grondslag genereren?
  31. Welke van de fouten in een programma kan al tijdens het compileren worden gevonden?
  32. Wat is het belangrijkste voordeel van typecontrole door de compiler in een taal met statische types?
  33. Wat wordt vaak gebruikt om de regels voor het herkennen van tokens bij lexicale analyse weer te geven?
  34. Welk soort grammatica wordt gebruikt om de grammatica van veel programmeertalen weer te geven en vormt de basis van parsing?
  35. Welke vorm van de abstracte syntaxisboom van de expressie 2 + 3 * 4 is juist?
  36. Welke uitspraak over driehoeksadrescode (three-address code), een tussenrepresentatie, is juist?
  37. Wat wordt bepaald bij de levendigheidsanalyse (liveness analysis) die als voorbereiding op registertoewijzing wordt uitgevoerd?
  38. 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?
  39. Hoeveel keer worden de iteratietest en sprong uitgevoerd als een lus met 100 iteraties wordt herschreven met loop unrolling waarbij de body viermaal achter elkaar wordt gezet? (100 is deelbaar door 4.)
  40. Welke algemene volgorde waarin uit een C-programma een uitvoerbaar bestand ontstaat is juist?
  41. Hoe heet de optimalisatie waarbij een korte reeks gegenereerde machinecode door een klein venster wordt bekeken en onnodige combinaties van instructies door betere instructies worden vervangen?
  42. Welke combinatie van een optimalisatie die na het inlinen van sq in de bovenstaande code volgt en het resultaat daarvan is juist?
  43. Welke uitspraak over software pipelining is juist?
  44. Waarom herordent een compiler onder strikte instellingen de optelling (a + b) + c van floating-pointgetallen niet eigenmachtig tot a + (b + c)?
  45. Welk soort instructie wordt gebruikt bij automatische vectorisatie door een compiler?
  46. Welke basisvoorwaarde moet een optimalisatie van een compiler respecteren?
  47. Welke uitspraak over instructieselectie (instruction selection), een van de fasen van codegeneratie, is juist?
  48. Welke uitspraak over een cross-compiler is juist?
  49. Als een met optimalisatie gecompileerd programma met een debugger wordt onderzocht, wordt de waarde van sommige variabelen soms als "niet beschikbaar" weergegeven. Wat is de belangrijkste reden?
  50. 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?

Vergelijkingen bij dit onderwerp

Andere onderwerpen in Computersystemen