Wat is Pipelining?

Techniek waarbij de verwerking van instructies wordt opgedeeld in stappen zoals ophalen, decoderen en uitvoeren, zodat meerdere instructies licht verschoven tegelijk worden verwerkt.

Japanse benaming: パイプライン処理

“Pipelining” komt voor in 5 oefenvragen uit 3 onderwerpen, bijv. CPU en architectuur, Compilers, LSI-ontwerpflow en EDA.

Vijftrapspijplijn en een bubbel door een load-use-hazard Tijd (klokcycli) 1 2 3 4 5 6 7 8 9 Instructie lw x1, 0(x2) IF ID EX MEM WB add x3, x1, x4 IF ID Bubbel EX MEM WB sub x5, x6, x7 IF ID EX MEM WB or x8, x9, x10 IF ID EX MEM WB add gebruikt meteen de x1 die lw laadt (load-use-hazard) Zelfs met forwarding (pijlen) blijft 1 klok bubbel over Zonder stall wordt elke klok één instructie voltooid IF instructie ophalen · ID decoderen, registers lezen EX uitvoeren · MEM geheugentoegang · WB terugschrijven
Vijftrapspijplijn en een bubbel door een load-use-hazard · Bekijken in het figurenoverzicht

Vakgebied: CPU en architectuur

Hoe een pipeline de doorvoer verhoogt

Een pipeline splitst de verwerking van instructies op in trappen die door registers van elkaar worden gescheiden, zoals een lopende band. De klassieke RISC-pipeline met vijf trappen bestaat uit instruction fetch, decoderen en registers lezen, uitvoeren, geheugentoegang en write-back. Terwijl één instructie wordt uitgevoerd, wordt de volgende gedecodeerd en een derde opgehaald, dus idealiter wordt elke klokcyclus één instructie voltooid en nadert de doorvoer vijf keer die van een ontwerp zonder pipeline. De latentie van een afzonderlijke instructie neemt niet af en wordt zelfs iets groter, omdat elke instructie nu alle pipelineregisters doorloopt.

Waarom de versnelling tegenvalt

De klokperiode moet de traagste trap plus de registeroverhead dekken: clock-to-Q-vertraging, setuptijd en clock skew. Als de logica niet gelijkmatig kan worden verdeeld, bepaalt de langste trap de frequentie en staan de andere een deel van elke cyclus stil. Diepere pipelines maken elke trap korter, maar de vaste registeroverhead wordt een groter deel van de periode, en de penalty voor foutief voorspelde sprongen groeit, omdat meer gedeeltelijk verwerkte instructies moeten worden weggegooid. Voorbij een bepaald punt verlaagt het toevoegen van trappen de prestaties en verhoogt het het vermogen; daarom is de pipelinediepte een afgewogen ontwerpkeuze.

Hazards en hoe ze worden afgehandeld

Drie soorten hazards verstoren de ideale stroom. Structurele hazards ontstaan wanneer twee instructies in dezelfde cyclus dezelfde resource nodig hebben. Data hazards ontstaan wanneer een instructie een resultaat nodig heeft dat nog niet is weggeschreven; forwarding, of bypassing, leidt resultaten rechtstreeks uit latere trappen terug, hoewel een load die direct wordt gevolgd door het gebruik ervan in de klassieke pipeline doorgaans nog steeds een stallcyclus kost. Control hazards komen van sprongen, waarvan de uitkomst pas enkele trappen na de fetch bekend is; sprongvoorspelling gokt het pad en spoelt de verkeerde instructies weg bij een misser.

Pipelining buiten de CPU

RISC-instructiesets, met uniforme instructielengten en load/store-architecturen, zijn ontworpen om netjes te pipelinen; x86-processors bereiken vergelijkbaar gedrag door complexe instructies op te splitsen in eenvoudige micro-operaties. Hetzelfde idee geldt voor elk synchroon datapad: door registers in te voegen om een lang kritiek pad op te splitsen, stijgt de maximale klokfrequentie ten koste van latentie, en tools voor high-level synthesis bieden dit aan als pipeliningoptie. Software pipelining is de tegenhanger in de compiler: daarbij overlappen verschillende lusiteraties, zodat loads, berekeningen en stores parallel verlopen, met proloog- en epiloogcode rond de lus.

Nu oefenen: vragen over Pipelining

Wat is het belangrijkste doel van pipelining in een CPU?

  1. ADe instructieverwerking in meerdere trappen verdelen en trappen van verschillende instructies laten overlappen, zodat de doorvoer toeneemt
  2. BDe uitvoeringstijd (latentie) van één instructie altijd verkorten
  3. CHet aantal instructies verminderen om het programma kleiner te maken
Antwoord en toelichting tonen

Antwoord: A. De instructieverwerking in meerdere trappen verdelen en trappen van verschillende instructies laten overlappen, zodat de doorvoer toeneemt

Een pipeline laat de trappen instructie ophalen, decoderen, uitvoeren, geheugentoegang en terugschrijven als in een lopende band overlappen, zodat per klokcyclus één instructie klaar komt en de doorvoer toeneemt. Bij 5 trappen is dat ideaal circa 5 keer zo snel. De verwerkingstijd (latentie) van één instructie wordt juist iets langer. Gegevensafhankelijkheden, sprongen en conflicten om middelen kunnen de stroom verstoren (hazards); hiertegen worden forwarding en sprongvoorspelling ingezet.

Welke uitspraak over software pipelining is juist?

  1. AEen techniek om het aantal pipelinestadia van de CPU met software te vergroten
  2. BEen techniek om een lus in functies te verdelen en parallel op meerdere threads uit te voeren
  3. CEen techniek om bewerkingen van verschillende iteraties te laten overlappen en zo wachttijden op te vullen
Antwoord en toelichting tonen

Antwoord: C. Een techniek om bewerkingen van verschillende iteraties te laten overlappen en zo wachttijden op te vullen

Bij software pipelining wordt het werk van één iteratie van de lus in fasen verdeeld, zoals "lezen, rekenen, schrijven", en worden de instructies zo geordend dat in één iteratie bijvoorbeeld het schrijven van iteratie i, de berekening van iteratie i+1 en het lezen van iteratie i+2 worden uitgevoerd. Tijdens de wachttijd van een leesactie kan de berekening van andere iteraties doorgaan, zodat rekeneenheden niet stil hoeven te staan. Voor en na de lus is code voor voorbereiding en opruiming nodig. Het is geen techniek om de stadia van de CPU te wijzigen of met threads te parallelliseren.

Veelgestelde vragen

Verkort pipelining de latentie van een instructie?

Nee. Pipelining verhoogt de doorvoer door instructies te laten overlappen, maar elke instructie doorloopt nog steeds elke trap en duurt door de registeroverhead meestal iets langer.

Wat zijn de drie soorten pipeline hazards?

Structurele hazards door conflicten over resources, data hazards door afhankelijkheden van resultaten die nog niet beschikbaar zijn, en control hazards door sprongen. Typische oplossingen zijn gedupliceerde resources, forwarding en sprongvoorspelling.

Waarom maak je de pipeline niet zo diep mogelijk?

De registeroverhead blijft gelijk terwijl de logica per trap kleiner wordt, dus de winst neemt af, en foutieve sprongvoorspellingen verspillen in een diepere pipeline meer werk. Ook het vermogen en de ontwerpcomplexiteit nemen toe.

“Pipelining” in de toelichting

Vragen met “Pipelining” (5)

  1. Wat is het belangrijkste doel van pipelining in een CPU?
  2. Welke uitspraak over software pipelining is juist?
  3. Welke uitspraak over RISC (reduced instruction set computer) is juist?
  4. Welke volgorde is de juiste basisvolgorde waarin een CPU een instructie verwerkt?
  5. Hoe heet de technologie die automatisch RTL genereert uit een beschrijving van een algoritme in onder meer C of C++?

Verwante termen

Doorvoer (throughput) Sprongvoorspelling (branch prediction) Numerieke apertuur (NA) RTL (register transfer level) High-level synthesis (HLS) Logische synthese Cachecoherentie Cachegeheugen DMA (direct memory access) DVFS (dynamic voltage and frequency scaling)

Naar de woordenlijst