Superskalar mikroarkitektur
I jagten efter højere ydeevne kan man finde på at skrue op for ressourcerne.
Hvis der er mere end en instruktion der udfører sin X-fase samtidigt, taler
man om en superskalar maskine.
Det er en naturlig følge af en simpel pipeline arkitektur, og de første superskalar arkitekturer kom da også kort efter disse. Valget af X fasen skyldes den indsigt at denne fase er særligt meget brugt og ofte af instruktioner som ikke har en dataafhængighed. Men for at have flere instruktioner er man også nødt til at udvide andre dele af arkitekturen.
En simpel 2-vejs superskalar kan derfor håndtere to instruktioner samtidigt i
faserne F,D,X og W, men kun 1 instruktion samtidigt i fase M. Det er motiveret
af at fase M er dyrere end de andre. Tilgengæld kan man knytte en delmængde af de mulige faser
til forskellige klasser af instruktioner: f.eks. det er således at ikke alle har en fase M. Vi kan derfor gøres det ved at udvide M for de instruktioner vi ved bruger M.
Man kan også undgå en fase W for instruktioner der ikke skriver til et resultat
registerfilen.
Eksempel: Superskalar
Faser:
- Tilgængelige ressourcer:
F:2,D:2,X:2,M:1,W:2 - Alle faser taget har en latenstid på 1
inorder(F,D,X,M,W)
Begrænsninger på instruktioner:
| Instruktion | Faser | Dataafhængigheder | |
|---|---|---|---|
| Aritmetik | op a b |
FDXW |
depend(X,a), depend(X,b), produce(X,b) |
| Læsning | movq (a),b |
FDXMMW |
depend(X,a), produce(M,b) |
| Skrivning | movq b,(a) |
FDXMM |
depend(X,a), depend(M,b) |
Overvej afviklingen af følgende program:
01234567 -- Vigtige dataafhængigheder
movq (r10),r11 FDXMMW -- produce(M,r11)
addq $100,r11 FDDDDXW -- depend(X,r11), produce(X,r11)
movq r11,(r10) FDDDXMM -- depend(M,r11)
subq $8,r10 FFFFDXW --
subq $1,r12 FFFDXW --
- periode: Nu kan vi indhente og afkode både første og anden instruktion
- periode: Begge instruktioner flyttes til afkodning og de to næste bliver indhentet. Her finder vi ud af at der er en dataafhængighed mellem de to første og sikre at anden instruktion blive stalled i
D. - periode: Tredje instruktion (skrivning) flyttes til afkodning, men
subqbliver stalled iF, da der ikke er plads iD. - periode: Sker ikke noget nyt.
- periode: Venter på læsning
- periode: Læsningen er færdig og alle instruktioner kan flyttes frem. Skrivningen behøver ikke at blive stalled, da afhængigheden til
r11først er i faseM. - og 7. periode og frem forløber som forventet.
Hvis vi igen kigger på søjlerne i plottet, har ingen af disse flere forekomster af faserne end vi har ressourcer til rådighed. Der er altså højst 2 F'er, D'er osv., men kun højest et M. Dertil ser vi at søjlerne oppefra lister faserne bagfra og vi ved derfor at disse bliver udført in-order.
Hvis vi udregner CPI for denne maskine bliver den nu CPI = 8/5 = 1,6. Dette er signifikant mindre en vores simple pipeline maskine, hvilket var CPI = 2,4. I dette tilfælde kan vi se at den sidste subtraktion (den vi kunne flytte frem) endda fås gratis. Vi kan endda forvente at clock perioden for denne superskalar arkitektur er omkring det samme for vores simple pipeline; der er kun en mindre overhead for mere styring af de flere enheder.