Pipeline-architectuur

Instruction pipelining is een techniek die gebruikt wordt in het ontwerp van moderne microprocessoren, microcontrollers en CPU's om hun instructiedoorvoer te verhogen (het aantal instructies dat in een tijdseenheid kan worden uitgevoerd).

Het belangrijkste idee is om de verwerking van een CPU-instructie, zoals gedefinieerd door de instructie-microcode, op te splitsen in een reeks onafhankelijke stappen van microoperaties (ook wel "micro-instructies", "micro-op" of "µop" genoemd), met opslag aan het einde van elke stap. Hierdoor kan de besturingslogica van de CPU's instructies verwerken met de verwerkingssnelheid van de langzaamste stap, wat veel sneller is dan de tijd die nodig is om de instructie als een enkele stap te verwerken.

De term pijpleiding verwijst naar het feit dat elke stap een enkele micro-instructie draagt (zoals een waterdruppel), en elke stap is gekoppeld aan een andere stap (analogie; vergelijkbaar met waterleidingen).

De meeste moderne CPU's worden aangedreven door een klok. De CPU bestaat intern uit logica en geheugen (flipflops). Wanneer het kloksignaal aankomt, slaan de flipflops hun nieuwe waarde op, waarna de logica een periode nodig heeft om de flipflops nieuwe waarden te decoderen. Dan komt de volgende klokpuls aan en de flipflops slaan een andere waarde op, enzovoort. Door de logica in kleinere stukjes te breken en flip flops tussen stukjes logica te plaatsen, wordt de tijd die de logica nodig heeft (om waarden te decoderen tot het genereren van geldige uitgangen afhankelijk van deze waarden) gereduceerd. Op deze manier kan de klokperiode worden verkort. Zo wordt
de RISC-pijpleiding bijvoorbeeld als volgt in vijf fasen verdeeld met een set flipflops tussen elke fase:

  1. Instructie halen
  2. Instructie decoderen en registreren halen
  3. Uitvoeren
  4. Toegang tot het geheugen
  5. Registreren schrijf terug

Processoren met pipelining bestaan inwendig uit fasen (modules) die semi-onafhankelijk kunnen werken aan afzonderlijke micro-instructies. Elke fase is door middel van flipflops verbonden met de volgende fase (als een "ketting") zodat de uitgang van de fase een ingang is naar een andere fase totdat het werk van de verwerkingsinstructies is gedaan. Een dergelijke organisatie van de interne modules van de processor vermindert de totale verwerkingstijd van de instructie.

Een niet-pipeline architectuur is niet zo efficiënt omdat sommige CPU-modules inactief zijn terwijl een andere module actief is tijdens de instructiecyclus. Pipelining verwijdert de inactieve tijd in een pipelined CPU niet volledig, maar het parallel laten werken van CPU-modules verhoogt de instructiedoorvoer.

Een instructiepijplijn zou volledig gepijpt zijn als deze elke klokcyclus een nieuwe instructie kan accepteren. Een pijpleiding die niet volledig gepijpt is, heeft wachtcycli die de voortgang van de pijpleiding vertragen.

Basis vijftrapsleiding in een RISC-machine (IF = Instructie halen, ID = Instructie decoderen, EX = Uitvoeren, MEM = Geheugentoegang, WB = Registreren terug schrijven). De verticale as is de opeenvolgende instructies, de horizontale as is de tijd. Dus in de groene kolom is de vroegste instructie in WB-stadium, en de laatste instructie wordt opgehaald.Zoom
Basis vijftrapsleiding in een RISC-machine (IF = Instructie halen, ID = Instructie decoderen, EX = Uitvoeren, MEM = Geheugentoegang, WB = Registreren terug schrijven). De verticale as is de opeenvolgende instructies, de horizontale as is de tijd. Dus in de groene kolom is de vroegste instructie in WB-stadium, en de laatste instructie wordt opgehaald.

Voordelen en nadelen van Pipelining

Voordelen van Pipelining:

  1. De cyclustijd van de processor wordt verkort; het verhogen van de instructiedoorvoer. Pipelining vermindert niet de tijd die nodig is om een instructie te voltooien; in plaats daarvan verhoogt het het aantal instructies dat tegelijkertijd kan worden verwerkt ("in één keer") en vermindert het de vertraging tussen voltooide instructies (de zogenaamde "doorvoer").
    Hoe meer pijplijnstappen een processor heeft, hoe meer instructies hij "in één keer" kan verwerken en hoe minder vertraging er is tussen voltooide instructies. Elke dominante microprocessor
     voor algemene doeleinden die vandaag de dag wordt geproduceerd, gebruikt ten minste 2 pijplijnfasen tot 30 of 40 fases.
  2. Als er gebruik wordt gemaakt van pipelining, kan de CPU Arithmetic logic unit sneller worden ontworpen, maar zal deze complexer zijn.
  3. Pipelining verhoogt in theorie de prestaties over een niet-pipeline-kern met een factor van het aantal trappen (aangenomen dat de klokfrequentie ook toeneemt met dezelfde factor) en de code is ideaal voor de uitvoering van pijpleidingen.
  4. Pipeline-CPU's werken over het algemeen op een hogere klokfrequentie dan de RAM-klokfrequentie, (vanaf 2008 werken RAM's op een lage frequentie in vergelijking met CPU-frequenties) waardoor de algemene prestaties van computers toenemen.

Nadelen van Pipelining:

Pipelining heeft veel nadelen, hoewel er veel technieken worden gebruikt door ontwerpers van CPU's en compilers om de meeste daarvan te overwinnen; hieronder volgt een lijst van veelvoorkomende nadelen:

  1. Het ontwerp van een niet-pijplijnprocessor is eenvoudiger en goedkoper te produceren, niet-pijplijnprocessor voert slechts één enkele instructie per keer uit. Dit voorkomt vertraging van takken (bij Pipelining wordt elke tak vertraagd) en problemen bij gelijktijdige uitvoering van seriële instructies.
  2. Bij een pipeline-processor verhoogt het inbrengen van flipflops tussen de modules de instructielatentie in vergelijking met een niet-pipeline-processor.
  3. Een niet-pijplijnprocessor zal een gedefinieerde instructiedoorvoer hebben. De prestaties van een pipeline-processor zijn veel moeilijker te voorspellen en kunnen voor verschillende programma's sterk verschillen.
  4. Veel ontwerpen omvatten leidingen met een lengte van 7, 10, 20, 31 en nog meer trappen; een nadeel van een lange pijpleiding is dat wanneer een programma zich vertakt, de hele pijpleiding moet worden doorgespoeld (vrijgemaakt). De hogere doorvoersnelheid van pijpleidingen schiet tekort wanneer de uitgevoerde code veel vertakkingen bevat: de processor kan niet op voorhand weten waar hij de volgende instructie moet lezen, en moet wachten tot de vertakkingsinstructie klaar is, waarbij hij de pijpleiding leeg achterlaat. Dit nadeel kan worden verminderd door te voorspellen of een voorwaardelijke aftakkingsinstructie zich zal vertakken op basis van de vorige activiteit. Nadat de vertakking is opgelost, moet de volgende instructie helemaal door de pijpleiding lopen voordat het resultaat beschikbaar is en de processor weer gaat "werken". In zulke extreme gevallen kunnen de prestaties van een pijplijnprocessor slechter zijn dan die van een niet-pijplijnprocessor.
  5. Helaas zijn niet alle instructies onafhankelijk. In een eenvoudige pijplijn kunnen voor het voltooien van een instructie 5 stappen nodig zijn. Om volledig te kunnen werken, moet deze pijpleiding 4 opeenvolgende onafhankelijke instructies uitvoeren terwijl de eerste wordt voltooid. Elk van deze 4 instructies kan afhankelijk zijn van de output van de eerste instructie, waardoor de regellogica van de pijpleiding wacht en een stilstand of een verspilde klokcyclus in de pijpleiding invoert totdat de afhankelijkheid is opgelost. Gelukkig kunnen technieken zoals doorsturen de gevallen waarin een blokkade nodig is, aanzienlijk verminderen.
  6. Zelfmodificerende programma's kunnen niet goed worden uitgevoerd op een pipeline-architectuur wanneer de instructies die worden gewijzigd in de buurt komen van de instructies die worden uitgevoerd. Dit kan worden veroorzaakt doordat de instructies al in de Prefetch Input Queue staan, zodat de wijziging mogelijk niet van kracht wordt voor de komende uitvoering van de instructies. Instructiecaches maken het probleem nog erger.
  7. Gevaren: Wanneer een programmeur (of compiler) assemblagecode schrijft, gaat hij er over het algemeen van uit dat elke instructie wordt uitgevoerd voordat de volgende instructie wordt uitgevoerd. Wanneer deze veronderstelling niet wordt gevalideerd door pipelining zorgt dit ervoor dat een programma zich verkeerd gedraagt, de situatie staat bekend als een gevaar. Er bestaan
    verschillende
    technieken om gevaren op te lossen of om te werken, zoals doorsturen en vertragen (door het inbrengen van een stalletje of een verspilde klokcyclus).

Voorbeelden

Generieke pijplijn

Rechts is een generieke pijpleiding met vier etappes:

  1. Haal
  2. Decodeer
  3. Uitvoeren
  4. Terugboeking

Het bovenste grijze vak is de lijst met instructies die moeten worden uitgevoerd; het onderste grijze vak is de lijst met instructies die zijn voltooid; en het middelste witte vak is de pijplijn.

De uitvoering is als volgt:

Tijd

Uitvoering

0

Er wachten vier instructies op uitvoering

1

  • de groene instructie wordt uit het geheugen gehaald

2

  • de groene instructie wordt gedecodeerd
  • de paarse instructie wordt uit het geheugen gehaald

3

  • de groene instructie wordt uitgevoerd (de eigenlijke operatie wordt uitgevoerd)
  • de paarse instructie wordt gedecodeerd
  • de blauwe instructie wordt opgehaald

4

  • de resultaten van de groene instructie worden teruggeschreven naar het registerbestand of het geheugen
  • de paarse instructie wordt uitgevoerd
  • de blauwe instructie wordt gedecodeerd
  • de rode instructie wordt opgehaald

5

  • de groene instructie is voltooid
  • de paarse instructie is teruggeschreven
  • de blauwe instructie wordt uitgevoerd
  • de rode instructie wordt gedecodeerd

6

  • De paarse instructie is voltooid
  • de blauwe instructie is teruggeschreven
  • de rode instructie wordt uitgevoerd

7

  • de blauwe instructie is voltooid
  • de rode instructie is teruggeschreven

8

  • de rode instructie is voltooid

9

Alle instructies worden uitgevoerd

Bubbel

Wanneer er een "hik" (onderbreking) in de uitvoering optreedt, ontstaat er een "luchtbel" in de pijplijn waarin niets nuttigs gebeurt. In cyclus 2 wordt het ophalen van de paarse instructie vertraagd en in cyclus 3 bevat de decoderingsfase nu een bel. Alles achter de paarse instructie wordt ook vertraagd, maar alles wat voor de paarse instructie staat gaat verder met de uitvoering.

Het is duidelijk dat, in vergelijking met de uitvoering hierboven, de bubble een totale uitvoeringstijd van 8 klokjes in plaats van 7 uur oplevert.

Bubbels zijn als stalletjes (vertragingen), waarin niets nuttigs zal gebeuren voor het halen, decoderen, uitvoeren en terug te schrijven. Het is als een NOP (afkorting voor No OPeration) code.

Voorbeeld 1

Een typische instructie om twee getallen toe te voegen kan ADD A, B, C zijn, die de waarden in geheugenplaats A en B optelt en vervolgens het resultaat in geheugenplaats C plaatst:

LAD A, R1 LOAD B, R2 ADD R1, R2, R3 STORE R3, C LOAD volgende instructie

De locaties 'R1' en 'R2' zijn registers in de CPU. De waarden die zijn opgeslagen in geheugenlocaties met het label 'A' en 'B' worden in deze registers geladen (gekopieerd) en vervolgens toegevoegd, en het resultaat wordt opgeslagen in een geheugenlocatie met het label 'C'.

In dit voorbeeld is de pijpleiding in drie fasen lang beladen, uitgevoerd en opgeslagen. Elk van de stappen worden pijpleidingstappen genoemd.

Op een niet-pipeline-processor kan slechts één fase tegelijk werken, zodat de hele instructie moet worden voltooid voordat de volgende instructie kan beginnen. Op een pipeline-processor kunnen alle fasen in één keer op verschillende instructies werken. Dus als deze instructie in de uitvoeringsfase is, zal een tweede instructie in de decodeerfase zijn en een derde instructie in de fetchfase.

Voorbeeld 2

Om het concept beter te begrijpen, kunnen we kijken naar een theoretische 3-fasen pijplijn:

Stadium

Beschrijving

Laad

Leesinstructie uit het geheugen

Uitvoeren

Instructie uitvoeren

Winkel

Opslag van het resultaat in het geheugen en/of de registers

en een pseudo-codelijst die moet worden uitgevoerd:

LAD #40, A      MOVE A, B ; kopieer A in B ADD #20, B      STORE B, 0x300 ; sla B op in geheugencel 0x300

Zo zou het worden uitgevoerd:

Klok 1

Laad

Uitvoeren

Winkel

LADEN

 

 

De LOAD-instructie wordt uit het geheugen gehaald.

Klok 2

Laad

Uitvoeren

Winkel

MOVE

LADEN

 

De LOAD-instructie wordt uitgevoerd, terwijl de MOVE-instructie uit het geheugen wordt gehaald.

Klok 3

Laad

Uitvoeren

Winkel

ADD

MOVE

LADEN

De LOAD-instructie bevindt zich in de Store-fase, waar het resultaat (het getal 40) wordt opgeslagen in het register A. In de tussentijd wordt de MOVE-instructie uitgevoerd. Omdat de inhoud van A naar B moet worden verplaatst, moet worden gewacht op het einde van de LOAD-instructie.

Klok 4

Laad

Uitvoeren

Winkel

OPSLAG

ADD

MOVE

De STORE-instructie wordt geladen, terwijl de MOVE-instructie wordt afgewerkt en de ADD wordt berekend.

En zo verder. Merk op dat een instructie soms afhankelijk is van het resultaat van een andere instructie (zoals ons MOVE voorbeeld). Wanneer meer dan één instructie verwijst naar een bepaalde locatie voor een operand, het lezen ervan (als invoer) of het schrijven ervan (als uitvoer), kan het uitvoeren van die instructies in een andere volgorde dan de oorspronkelijke programmavolgorde leiden tot de gevaarlijke situatie (hierboven genoemd).


Generieke 4-fasen pijpleiding; de gekleurde vakjes staan voor instructies onafhankelijk van elkaarZoom
Generieke 4-fasen pijpleiding; de gekleurde vakjes staan voor instructies onafhankelijk van elkaar

Een zeepbel in cyclus 3 vertraagt de uitvoeringZoom
Een zeepbel in cyclus 3 vertraagt de uitvoering

Gerelateerde pagina's

  • Pijpleiding (computer)
  • Parallelle computergebruik
  • Parallellisme op instructieniveau

Vragen en antwoorden

V: Wat is instructie pipelining?


A: Instructiepipelining is een techniek die wordt gebruikt bij het ontwerp van moderne microprocessoren, microcontrollers en CPU's om hun instructiedoorvoer te verhogen door de verwerking van een CPU-instructie te verdelen in een reeks onafhankelijke stappen met opslag aan het einde van elke stap.

V: Hoe werkt pipelining?


A: Pipelining werkt door de logica op te splitsen in kleinere stukken en flipflops in te voegen tussen stukken logica, waardoor de tijd die de logica nodig heeft om waarden te decoderen tot het genereren van geldige outputs afhankelijk van deze waarden, wordt verkort. Dit maakt snellere kloktijden mogelijk.

V: Wat zijn enkele voorbeelden van pijplijnen?


A: Een voorbeeld van een pijplijn is de RISC-pijplijn, die is opgedeeld in vijf fasen met een reeks flipflops tussen elke fase.

V: Hoe verhoogt pipelining de instructiedoorvoer?


A: Pipelining verhoogt de instructiedoorvoer doordat CPU-modules parallel kunnen werken, waardoor de inactieve tijd tijdens een instructiecyclus afneemt en de totale verwerkingstijd toeneemt.

V: Is elke pijplijn volledig gepijplijnd?


A: Nee, niet elke pijplijn is volledig gepijplijnd; sommige pijplijnen hebben wachtcycli die de voortgang in de pijplijn vertragen.

AlegsaOnline.com - 2020 / 2023 - License CC3