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.
| Kenmerk | In-order-uitvoering | Out-of-order-uitvoering |
|---|---|---|
| Volgorde van uitgifte en uitvoering | Programmavolgorde | Instructies die klaar zijn worden eerst uitgevoerd, in gewijzigde volgorde |
| Vastleggen van resultaten (retire) | Programmavolgorde | In programmavolgorde, via de reorder buffer (ROB) |
| Als een eerdere instructie wacht | Ook de latere instructies stoppen (stall) | Onafhankelijke latere instructies gaan alvast door |
| Omgang met datahazards | Forwarding en stalls. De instructievolgorde wordt aan de compiler overgelaten | Naast forwarding plant de hardware instructies dynamisch |
| Schijnbare afhankelijkheden (WAR, WAW) | Omdat de volgorde behouden blijft, zijn ze meestal geen probleem | Verwijderd door register renaming, die fysieke registers opnieuw toewijst |
| Belangrijkste extra schakelingen | Weinig. Eenvoudige pipeline | Renamingtabel, fysieke registers, issue queue, ROB, load/store-queues |
| Invloed van cachemissers | Groot. Elke misser legt de pipeline gemakkelijk stil | Binnen een venster van honderden instructies gaan andere instructies door, zodat een deel van de wachttijd wordt verborgen |
| IPC | Lager. Bij dezelfde uitgiftebreedte lager dan out-of-order | Hoog. Gecombineerd met een brede uitgifte ruim boven 1 |
| Omvang en vermogen van de schakeling | Klein. Prestaties per oppervlak of per watt zijn gemakkelijk hoog te maken | Groot. Selectieschakelingen en de ROB kosten extra oppervlak en vermogen |
| Waar gebruikt | Microcontrollers, kleine embedded cores, sommige cores die energiezuinigheid voorop stellen, rekencores van GPU's | Krachtige cores in pc's, servers en smartphones |
De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.