En vanlig femstegspipeline FDEMW FDEMW FDEMW FDEMW tid
En superskalär femstegspipeline av grad 2 tid FDEMW FDEMW FDEMW FDEMW FDEMW FDEMW FDEMW FDEMW
Beroenden ger stopp i röret tid FDEMW FDEMW FDEMW FDEMW FDEMW FDEMW FDEMW FDEMW stall Instruktion 1 beräknar ett värde......som instruktion 2 använder
Extra hårdvara zÖkad bandbredd från instruktionscache zDubbla instruktionsavkodare zFler läsportar på registerfilen zBypassing ökar kvadratiskt (4n 2 ) zFlera funktionsenheter - dubbel ALU zFlera portar till datacacheminnet
Heltal parallellt med flyttal zInstruktionsuppsättningen har ofta separata register för heltal och flyttal zFunktionsenheterna är alltid separata zSällsynt med beroenden mellan heltals- och flyttalsinstruktioner zSeparata bypassvägar
Mer att göra för avkodaren zSka upptäcka beroenden zSka skicka instruktioner till rätt enhet zMer att göra tar längre tid - superskalära datorer har ofta 2-3 avkodningssteg zPPro/II/iii har 3-7 steg, beror på hur man räknar
Ny pipeline zTvå avkodningssteg, Decode och Register read zHoppinstruktioner: yEfter D-steget vet vi vart vi ska hoppa yEfter R-steget vet vi om vi ska hoppa FDREMW
Hopp blir dyrt tid FDREM FD--- F---- FDREM FDR-- FD--- F---- FDREM W - - W W
Branch penalties zMisfetch penalty (1 cykel, D-steget) yförlorad tid när man hämtat ett hopp och gissar rätt att man ska hoppa zMispredict penalty (2 cykler, D + R) yförlorad tid vid felgissning yförst i R-steget vet man att gissningen var fel FDREMW Samtidigt hämtas alltid nästa instruktion i ordningsföljd
Superpipelining zstartar en instruktion per klockcykel zhar extra kort cykeltid yE1 och E2 behövs för ALU, en beroende instruktion kan inte starta i cykeln efter F1F2D1D2E1E2M1M2W1W2 FDEMW vanlig femstegspipeline superpipelinad av grad 2
Exempel zPentium Pro/II/iii, Pentium 4 är superpipelinade zExec tar 1 steg, decode tar många - ojämnt! Pentium: 5 steg PPro/II/iii: 10 steg P4: 20 steg
Latens (latency) zLatens - cykler tills resultat kan användas zALU-instruktioner har ofta latens 1 yberoende instruktion kan köras i nästa cykel - men inte i samma! zLOAD i femstegpipeline har latens 2 zHopp har ofta lång latens ysärskilt när hoppgissningen misslyckas
Genomsnittlig grad av superpipelining zAnta: yOm Load och hopp har latens 3, ALU 1 yLoad och hopp är vardera 25% av de utförda instruktionerna zGenomsnittlig grad av superpipelining: y0,25 x 3 + 0,25 x 3 + 0,50 x 1 = 2,0
Tolkning zVärdet 2 betyder att: ydet program som körs bör vara sådant att det för det mesta finns 2 saker att göra samtidigt yi genomsnitt ska varje instruktion följas av en oberoende instruktion zDet finns gränser för hur mycket som finns att göra samtidigt i typiska program yvärden på 2-4 är rimliga, knappast mer
Precisa felavbrott zDynamisk instruktionsschemaläggning ger problem: var var man vid felavbrottet? zPrecisa avbrott: det går att peka ut en instruktion, så att den och alla tidigare instruktioner är helt utförda, och alla senare instruktioner inte är utförda alls.
Hårdvara för precisa avbrott zHoppgissning i alla nya processorer zFelgissade hopp händer ofta, måste klaras zHårdvara för att ångra felspekulation finns zSamma kretsar används vid felavbrott
Instruktionsfönster zLagrar hämtade instruktioner zDatorn utför instruktioner ur fönstret zOm utförda instruktioner plockas bort direkt så blir felavbrotten oprecisa zSparas utförda instruktioner tills alla tidigare har utförts får vi precisa felavbrott
Instruktionsfönster FDREMWFDREMWFDREMWFDREMWFDREMWFDREMWFDREMWFDREMWFDREMW utförd och klar instruktions- fönster (fullt just nu) FDREMWFDREMW hämtas ej FDREMW
Instruktionsfönster med oprecisa avbrott FDREMW FDREMW FDREMW FDREMW FDREMW FDREMW FDREMW FDREMW FDREMW utförd och klar instruktionsfönster (fullt just nu) hämtad FDREMW FDREMW FDREMW utförd och klar
EMW EMW Instruktionsfönster med precisa avbrott - bild 1 FDREMW FDREMW FDRW FDREW FDREMW FDREMW FDRE FDREM FDREM utförd och klar instruktionsfönster (fullt just nu) FDR FDR hämtas ej FDREM Alla write- back-steg görs när den sista blir klar EM M
W W W W Instruktionsfönster med precisa avbrott - bild 2 FDREM FDREM FDREM utförd och klar instruktionsfönstret stegas fram hämtas ej FDREM FDREM FDREM FDREM FDREMW FDREMW FDREM DREMW nu hämtas de väntande instruktionerna
Reorder buffer - omordningsbuffert zLagrar färdiga resultat på väg till registret zKan kombineras med instruktionsfönstret zVäntar tills tidigare instruktioner är klara innan ett resultat skrivs till sitt register
Reorder buffer + instruktionsfönster zFIFO zPlats bokas vid avkodning av instruktion zNär instruktionens resultat är beräknat lagras det i reorder buffer zNär ett register ska läsas tittar man först i reorder buffer och väljer nyaste värdet
Reorder buffer vid felspekulation zVid felgissat hopp innehåller reorder buffer resultat från instruktioner som aldrig skulle ha utförts (hoppvillkoret var inte uppfyllt) zReorder buffer raderar snabbt de platser som bokats efter det felgissade hoppet (de senaste platserna i FIFOn nollställs)