Wat is Out Of Order Execution?

Computers zijn complexe machines waarvan geen enkel onderdeel complexer is dan de CPU. Op basisniveau lijkt het erop dat de CPU relatief eenvoudig moet zijn. Er is een reeks opdrachten voor nodig, verwerkt ze en voert vervolgens de gegevens uit. Dit lijkt echter weinig op de werkelijke werking van moderne CPU's.

Subscalair naar superscalair

Vroege CPU's waren precies zoals je zou verwachten. Ze namen de instructies afzonderlijk op, in de volgorde waarin ze ze kregen, verwerkten ze tot ze voltooid waren en gingen toen verder met de volgende instructie. CPU's van dit type waren subscalair en konden minder dan één instructie per klokcyclus voltooien. CPU-ontwerpers stelden vast dat er veel verschillende fasen waren bij het voltooien van een instructie. Elk van deze fasen vereiste verschillende hardware. Dit betekende dat bij het uitvoeren van een enkele instructie door de hele reeks tegelijk, sommige delen van de hardware inactief waren. In elke soort processor is inactieve hardware nutteloze hardware.

Om deze inactieve hardware te gebruiken, werden CPU-ontwerpen bijgewerkt om een ​​pijplijnbenadering te gebruiken. Hierdoor werd de hardware voor elke fase verder gescheiden, maar konden ze allemaal tegelijkertijd worden gebruikt door een reeks instructies. Hoewel het nog steeds een paar cycli duurde voordat elke instructie door de pijplijn ging, was de totale doorvoer één instructie per cyclus. Dit maakte CPU's scalair.

Om meer te kunnen doen, moesten processors superscalair worden gemaakt. Om dit te bereiken zijn meerdere parallelle pijpleidingen geïmplementeerd.

Pipelines gevoed houden met data

Het belangrijkste prestatieprobleem met computers is meestal geheugenlatentie. Veel instructies werken op gegevens, en dus moeten er gegevens beschikbaar zijn om de instructie uit te voeren. De vraag is, wat doe je als je op die gegevens moet wachten omdat ze niet onmiddellijk beschikbaar zijn? Traditioneel was het antwoord gewoon stoppen en wachten tot het beschikbaar kwam. Hierdoor blijft de hele pijplijn leeg, mogelijk voor honderden CPU-cycli. Het wordt nog erger wanneer twee instructies in parallelle pijplijnen moeten wachten op geheugen, omdat de eerste zelfs het verzoek om de gegevens van de tweede zal tegenhouden. Hoewel CPU-cachegeheugen dit probleem kan verhelpen, kan het het nog steeds niet oplossen. Er was een nieuw paradigma nodig om het op te lossen. Die paradigmaverschuiving was Out Of Order Execution of OOO.

De eerste fase van een pijplijn is het decoderen van de instructie. Dit betekent uitzoeken wat er moet gebeuren en controleren of de gegevens die nodig zijn voor de operatie beschikbaar zijn. In een OOO CPU worden gedecodeerde instructies toegevoegd aan een wachtrij. Ze worden pas uit de wachtrij gehaald en daadwerkelijk verwerkt als de gegevens die ze nodig hebben beschikbaar zijn. Cruciaal is dat het niet uitmaakt in welke volgorde de instructies aan de wachtrij zijn toegevoegd. Als een vroege instructie wacht op gegevens, kan een recentere instructie doorgaan als deze klaar is voor gebruik. OOO-processors kunnen de instructies die ze moeten verwerken opnieuw ordenen op basis van de wachtrij met komende instructies en welke daarvan klaar zijn voor uitvoering.

Kritieke afhankelijkheden

Dit proces veronderstelt twee dingen. Allereerst dat het mogelijk is om op betrouwbare wijze echte afhankelijkheden te identificeren en af ​​te handelen. Ten tweede dat u valse afhankelijkheden betrouwbaar kunt afhandelen en identificeren. Wat is het verschil? Welnu, een echte afhankelijkheid is een afhankelijkheid die helemaal niet kan worden beperkt in een OOO-systeem. Het gemakkelijkste voorbeeld is het lezen-na-schrijven. Als je een instructie hebt die wat gegevens moet schrijven en een andere die die gegevens moet lezen, is er geen manier om die instructies opnieuw te ordenen. Ze moeten worden ingevuld in de volgorde waarin ze zijn gepresenteerd, anders krijg je onzingegevens.

Een valse afhankelijkheid is er een die kan worden verborgen met een andere slimme truc. Laten we het voorbeeld van schrijven-na-lezen nemen. Op het eerste gezicht zou je kunnen denken dat je gegevens niet kunt overschrijven voordat je ze hebt gelezen. De zaken liggen echter niet zo eenvoudig. Wat als u een andere plaats heeft waar u de nieuwe gegevens kunt schrijven, en dan kunt u de nieuwe en oude gegevens gewoon verwisselen zodra de oude gegevens zijn gelezen? Dit is het proces van het hernoemen van registers en het is essentieel voor OOO-verwerking.

Doorgaans definieert een instructieset een bepaald aantal architecturale registers die in het systeem worden gebruikt. Je kunt letterlijk niemand anders aanspreken. Maar wat als u overprovisioning registreert? Je kunt ze gewoon grotendeels verbergen, ze gebruiken om gegevens op te slaan die nog niet verwerkt hadden moeten worden, en dan gewoon de labels van de verborgen en architectonische registers verwisselen als de tijdlijn weer klopt. Op elk moment zijn er precies de juiste hoeveelheid architectonische registers, ze zijn alleen niet noodzakelijkerwijs altijd op dezelfde plaats. Een real-world analogie zou hot-desking zijn.

Conclusie

Out Of Order-uitvoering is een verwerkingsparadigma waarbij instructies dynamisch opnieuw kunnen worden gerangschikt tijdens uitvoering door de CPU. Dit gebeurt op basis van de vroegst uitgegeven instructies waarover gegevens beschikbaar zijn. Dit betekent dat instructies die in de pijplijn worden geladen altijd klaar zijn om te worden uitgevoerd en dat er geen vertragingen zijn tijdens het wachten op gegevens. Het is natuurlijk nodig om een ​​wachtrij te hebben die lang genoeg is om niet vol te raken met instructies die op gegevens wachten, maar dat is een uitdaging bij de implementatie. OOO-uitvoering is afhankelijk van het hernoemen van registers om valse afhankelijkheden te verbergen. Zelfs als deze instructies in de verkeerde volgorde worden uitgevoerd, worden de registers zodanig hernoemd dat dit feit voor de rest van de computer verborgen blijft.



Leave a Comment

Hoe een harde schijf te klonen

Hoe een harde schijf te klonen

In het moderne digitale tijdperk, waarin gegevens een waardevol bezit zijn, kan het klonen van een harde schijf op Windows voor velen een cruciaal proces zijn. Deze uitgebreide gids

Hoe repareer ik het stuurprogramma WUDFRd kan niet worden geladen op Windows 10?

Hoe repareer ik het stuurprogramma WUDFRd kan niet worden geladen op Windows 10?

Krijgt u tijdens het opstarten van uw computer de foutmelding dat het stuurprogramma WUDFRd niet op uw computer kan worden geladen?

Hoe u NVIDIA GeForce Experience-foutcode 0x0003 kunt oplossen

Hoe u NVIDIA GeForce Experience-foutcode 0x0003 kunt oplossen

Ervaar je NVIDIA GeForce-ervaring met foutcode 0x0003 op je desktop? Zo ja, lees dan de blog om te zien hoe u deze fout snel en eenvoudig kunt oplossen.

3D-printen: problemen oplossen met het buigen van de onderkant van de print (olifantenpoot)

3D-printen: problemen oplossen met het buigen van de onderkant van de print (olifantenpoot)

Het kan vervelend zijn om te maken te krijgen met buigingen aan de onderkant van een afdruk. Hier ziet u hoe u de olifantenpoot kunt repareren in 3D-printen.

Basisprincipes van 3D-printen: hechting van het printerbed

Basisprincipes van 3D-printen: hechting van het printerbed

Leren over 3D-printen? Dit is wat u moet weten over ahesie van het printerbed.

How to Use Auto Clicker for Chromebook

How to Use Auto Clicker for Chromebook

Today, were going to delve into a tool that can automate repetitive clicking tasks on your Chromebook: the Auto Clicker. This tool can save you time and

Fix Roku speelt geen audio of video af

Fix Roku speelt geen audio of video af

Als Roku geen audio of video afspeelt, biedt deze gids voor probleemoplossing u een reeks handige oplossingen om het probleem op te lossen.

Fix Roku-kanaal kon inhoud niet laden

Fix Roku-kanaal kon inhoud niet laden

Als Roku een foutmelding geeft dat de inhoud op de kanalen niet kan worden geladen, kunt u uw apparaat opnieuw opstarten of een nieuw account maken.

Oplossing: Chromebook laadt geen afdrukvoorbeeld

Oplossing: Chromebook laadt geen afdrukvoorbeeld

Als uw Chromebook het afdrukvoorbeeld niet kan laden, start u uw laptop, printer en router opnieuw op. Verwijder bovendien de printer en installeer deze opnieuw.

Een GPU verwijderen van een Windows-pc in 2023

Een GPU verwijderen van een Windows-pc in 2023

Moet u de GPU van uw pc verwijderen? Ga met me mee terwijl ik uitleg hoe je een GPU van je pc verwijdert in deze stapsgewijze handleiding.