In-order versus out-of-order: volgorde, hazards en IPC

Een CPU met in-order-uitvoering geeft instructies uit en voert ze uit in programmavolgorde. Als een eerdere instructie wacht, bijvoorbeeld door een cachemisser, stoppen ook de instructies erachter. Een CPU met out-of-order-uitvoering controleert de afhankelijkheden, voert eerst de instructies uit die klaar zijn en legt de resultaten in programmavolgorde vast via de reorder buffer (ROB). Omdat tijdens wachttijd andere instructies kunnen doorgaan, is de IPC hoger, maar zijn register renaming en schakelingen voor instructieselectie nodig, waardoor omvang en vermogen van de schakeling toenemen.

KenmerkIn-order-uitvoeringOut-of-order-uitvoering
Volgorde van uitgifte en uitvoeringProgrammavolgordeInstructies die klaar zijn worden eerst uitgevoerd, in gewijzigde volgorde
Vastleggen van resultaten (retire)ProgrammavolgordeIn programmavolgorde, via de reorder buffer (ROB)
Als een eerdere instructie wachtOok de latere instructies stoppen (stall)Onafhankelijke latere instructies gaan alvast door
Omgang met datahazardsForwarding en stalls. De instructievolgorde wordt aan de compiler overgelatenNaast forwarding plant de hardware instructies dynamisch
Schijnbare afhankelijkheden (WAR, WAW)Omdat de volgorde behouden blijft, zijn ze meestal geen probleemVerwijderd door register renaming, die fysieke registers opnieuw toewijst
Belangrijkste extra schakelingenWeinig. Eenvoudige pipelineRenamingtabel, fysieke registers, issue queue, ROB, load/store-queues
Invloed van cachemissersGroot. Elke misser legt de pipeline gemakkelijk stilBinnen een venster van honderden instructies gaan andere instructies door, zodat een deel van de wachttijd wordt verborgen
IPCLager. Bij dezelfde uitgiftebreedte lager dan out-of-orderHoog. Gecombineerd met een brede uitgifte ruim boven 1
Omvang en vermogen van de schakelingKlein. Prestaties per oppervlak of per watt zijn gemakkelijk hoog te makenGroot. Selectieschakelingen en de ROB kosten extra oppervlak en vermogen
Waar gebruiktMicrocontrollers, kleine embedded cores, sommige cores die energiezuinigheid voorop stellen, rekencores van GPU'sKrachtige cores in pc's, servers en smartphones

De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.

Wanneer welke variant?

In-order-uitvoering
Wanneer oppervlak en vermogen klein moeten blijven, of wanneer de uitvoeringstijd goed voorspelbaar moet zijn. Gebruikt in microcontrollers, embedded cores en ontwerpen met veel kleine cores naast elkaar.
Out-of-order-uitvoering
Wanneer één thread zo snel mogelijk moet worden uitgevoerd. Gebruikt in de krachtige cores van pc's, servers en smartphones.
Combinatie
Er zijn configuraties waarin op één chip krachtige out-of-order-cores staan naast zuinige cores die in-order zijn of een beperkte out-of-order-opbouw hebben. Zwaar werk gaat naar de krachtige cores en licht werk naar de zuinige cores, zodat prestaties en vermogen beide goed zijn.

Veelgestelde vragen

Kan out-of-order-uitvoering de resultaten van een programma veranderen?

Binnen één thread niet. Ook al wordt de uitvoeringsvolgorde gewijzigd, echte data-afhankelijkheden (RAW) worden gerespecteerd en de resultaten worden via de reorder buffer in programmavolgorde vastgelegd. Bij een verkeerde sprongvoorspelling of een exceptie worden de resultaten van de latere instructies weggegooid en wordt de juiste toestand hersteld, zodat het van buitenaf lijkt alsof alles in programmavolgorde is uitgevoerd.

Kan ook in-order-uitvoering meerdere instructies per cyclus uitvoeren?

Ja. Er bestaan in-order-superscalaire processors die, met behoud van de volgorde, naburige onafhankelijke instructies tegelijk uitgeven. Maar als een eerdere instructie stopt, kunnen de latere niet verder, dus de IPC stijgt niet zoveel als bij out-of-order.

Wat doen register renaming en de ROB precies?

Register renaming verwijdert schijnbare afhankelijkheden (WAR en WAW) die ontstaan door hergebruik van dezelfde registernaam, door fysieke registers opnieuw toe te wijzen, zodat meer instructies parallel kunnen worden uitgevoerd. De ROB bewaart de resultaten van instructies die in gewijzigde volgorde zijn uitgevoerd en legt ze in programmavolgorde vast, wat precieze excepties mogelijk maakt.

Hoe verhoog je de prestaties van een in-order-CPU?

De compiler ordent de instructies zo dat wachten minder vaak voorkomt, bijvoorbeeld door een instructie die het resultaat van een load gebruikt verder van die load te plaatsen. Naast het beperken van stalls via forwarding helpen ook een data-indeling die cachemissers vermindert en prefetching.

Test uw begrip

Welke methode onderzoekt de afhankelijkheden tussen instructies en voert uitvoerbare instructies uit in een andere volgorde dan het programma om de prestaties te verhogen?

  1. AIn-order uitvoering
  2. BOut-of-order uitvoering
  3. CSingle-cycle uitvoering
Antwoord en toelichting tonen

Antwoord: B. Out-of-order uitvoering

Bij out-of-order uitvoering worden instructies die wachten op het resultaat van een eerdere instructie of op gegevens uit het geheugen naar achteren geschoven en worden latere instructies die gereed zijn eerst uitgevoerd. Een groot voordeel is dat tijdens de wachttijd van een cachemiss ander werk kan worden gedaan. Hiervoor zijn onder meer een schakeling die uitvoerbare instructies zoekt in een venster van honderden instructies, registerhernoeming en een reorder buffer die resultaten in de oorspronkelijke volgorde vastlegt nodig, zodat schakeling en vermogen groot worden.

Welk mechanisme legt in een out-of-order CPU de resultaten van in andere volgorde uitgevoerde instructies vast (retire) in de oorspronkelijke programmavolgorde?

  1. AReorder buffer
  2. BSnoopfilter
  3. CTLB
Antwoord en toelichting tonen

Antwoord: A. Reorder buffer

De reorder buffer is een mechanisme dat de resultaten van in andere volgorde uitgevoerde instructies tijdelijk bewaart en in de programmavolgorde vastlegt (retire); in recente krachtige kernen biedt hij plaats voor enkele honderden instructies. Bij een foute sprongvoorspelling of uitzondering kunnen de resultaten van latere instructies worden weggegooid en kan de juiste toestand worden hersteld, zodat het van buiten lijkt alsof het programma in volgorde is uitgevoerd (precieze uitzonderingen).

Wat is het belangrijkste doel van registerhernoeming (register renaming) in out-of-order CPU's?

  1. AHet aantal registers verminderen om de schakeling kleiner te maken
  2. BFysieke registers opnieuw toewijzen zonder de door het programma gebruikte registernamen te wijzigen, om schijnbare afhankelijkheden (WAR en WAW) weg te nemen
  3. CDe registerwaarden versleutelen
Antwoord en toelichting tonen

Antwoord: B. Fysieke registers opnieuw toewijzen zonder de door het programma gebruikte registernamen te wijzigen, om schijnbare afhankelijkheden (WAR en WAW) weg te nemen

Omdat het aantal registers in de instructieset beperkt is tot circa 16 tot 32, worden dezelfde registernamen hergebruikt en ontstaan afhankelijkheden die niets met de werkelijke gegevensstroom te maken hebben (anti-afhankelijkheid WAR en uitvoerafhankelijkheid WAW). Registerhernoeming wijst dynamisch honderden fysieke registers toe en gebruikt bij elke schrijfbewerking een nieuw fysiek register om deze weg te nemen, zodat meer instructies parallel kunnen worden uitgevoerd. Echte afhankelijkheden (RAW) kunnen niet worden weggenomen.

  1. Hoe heet de processorarchitectuur die in één klokcyclus meerdere instructies tegelijk uitgeeft en uitvoert?
  2. Welke techniek geeft in een pipeline, wanneer de volgende instructie het resultaat van de vorige direct gebruikt (data hazard), het rekenresultaat rechtstreeks door aan de volgende instructie zonder te wachten op schrijven naar het register?
  3. Welke maat geeft het aantal instructies aan dat per klokcyclus kan worden uitgevoerd?

Oefenvragen over CPU en architectuur

Belangrijke termen uitgelegd

Out-of-order-uitvoering
Methode om de prestaties te verbeteren door afhankelijkheden tussen instructies te analyseren en instructies die kunnen worden uitgevoerd in een andere volgorde dan die van het programma uit te voeren. De resultaten worden in de reorder buffer in de oorspronkelijke volgorde vastgelegd.
Superscalair
Processorarchitectuur die in één klokcyclus meerdere instructies tegelijk uitgeeft en uitvoert. Meerdere rekeneenheden zijn naast elkaar geplaatst en van elkaar onafhankelijke instructies worden parallel verwerkt.
IPC
Afkorting van Instructions Per Cycle: het aantal instructies dat per klokcyclus kan worden uitgevoerd. Geeft de efficiëntie van het CPU-ontwerp weer; de prestatie is bij benadering het product van IPC en klokfrequentie. Het omgekeerde is CPI.
Pipelining
Techniek waarbij de verwerking van instructies wordt opgedeeld in stappen zoals ophalen, decoderen en uitvoeren, zodat meerdere instructies licht verschoven tegelijk worden verwerkt.
Sprongvoorspelling (branch prediction)
Techniek die de uitkomst van een voorwaardelijke sprong voor de uitvoering voorspelt en vooruit instructies verwerkt zonder de pipeline stil te leggen. Bij een foute voorspelling wordt het werk opnieuw gedaan.

Verwante vergelijkingen