Sunteți pe pagina 1din 35

Calculatoare Numerice (2)

- Cursul 9 ILP & Superscalar


Facultatea de Automatic i Calculatoare Universitatea Politehnica Bucureti

20.02.2013

Din episoadele anterioare


Sistemele moderne de meorie paginat pun la dispoziie:
Translaie, Protecie, Memorie Virtual.

Informaiile legate de translaie i protecie stocate n tabele de pagini, inute n memoria principal Informaiile legate de translaie i protecie caching n translation-lookaside buffer (TLB) pentru a permite translaia+verificarea proteciei ntr-un singur ciclu de ceas, n majoritatea cazurilor Memoria virtual interacioneaz cu design-ul memoriei cache

Complex Pipelining: Motivaie


Banda de asamblare devine complex atunci cnd avem nevoie de performan mrit pentru:
Uniti floating-point cu laten mare sau care sunt doar parial n b.a. Sisteme de memorie cu timp variabil de acces Uniti aritmetice i de memorie multiple

Floating-Point Unit (FPU)


Mult mai mult hardware dect o unitate pe ntregi
Single-cycle FPU nu este o idee fezabil

E comun s avem mai multe FPU-uri E comun s avem diferite tipuri de FPU-uri: Fadd, Fmul, Fdiv, Un FPU poate s fie n b.a., parial n b.a. sau fr b.a. Pentru a folosi concurent mai multe FPU-uri, trebuie s avem nevoie de o tabel de registre dedicat (FPR) care s aib mai multe porturi de citire i de scriere
5

Caracteristici pentru unitile funcionale


fully pipelined partially pipelined
1cyc 1cyc 1cyc

2 cyc

2 cyc

Unitile funcionale au registre interne dedicate b.a.

operanzii sunt memorai atunci cnd o instruciune intr n unitatea funcional instruciunile urmtoare pot rescrie tabela de registre n timpul operaiilor cu laten mare

Floating-Point ISA
Interaciunea dintre cile de date pentru ntregi i floating-point sunt determinate de ISA RISC-V ISA
tabele de registre separate pentru instruciuni FP i cu ntregi Singura interaciune este printr-un set de instruciuni tip move/convert (unele ISA nu permit nici mcar asta) load/store separate pentru FPR i GPR, dar ambele folosesc GPR pentru calculul adreselor

Sisteme de memorie reale


Abordri comune pentru mbuntirea performanei memoriei: Cache-uri - single cycle, mai puin n cazul unui miss stall Memorie pe bancuri accese multiple la memorie conflicturi pe bancuri Operaii n dou faze (separ cererea la memorie de rspuns), majoritatea fr pregtiri iniiale rspunsuri out-of-order

Latena acceselor la memoria principal este de obicei mult mai mare de un ciclu, i de cele mai multe ori, total imprevizibil Gsirea unei soluii este o problem central pentru arhitectura calculatoarelor
8

Probleme n controlul b.a. complexe


Conflicte structurale n etapa de execuie dac un FPU sau o unitate de memorie nu este n b.a. i dureaz mai mult de un ciclu Conflicte structurale la writ-back datorate latenelor variabile ale diferitelor uniti funcionale Hazarde la un write out-of-order datorate latenelor diferitelor uniti funcionale Cum s rezolvm excepiile? Mem ALU IF ID Issue GPRs FPRs WB

Fadd
Fmul Fdiv

Complex In-Order Pipeline


Inst. PC Mem
D Decode GPRs X1

X2

Data Mem

X3

ntrzie writeback a.. toate operaiile au aceeai laten la etapa W


Porturile de Write nu sunt niciodat supra-aglomerate (one inst. in & one inst. out la fiecare ciclu) ntrzie b.a. la op. cu laten mare ex.: divide, cache miss Trateaz excepiile in-order la commit point

FPRs

X1

X2

FAdd

X3

X2

FMul

X3

Cum putem s prevenim ca latena mare la writeback s afecteze operaiile simple pe ntregi (single-cycle)? Bypassing
10

Unpipelined FDiv X2 divider X3

Commit Point

In-Order Superscalar Pipeline


PC

Inst. 2 D Mem

Dual Decode

GPRs

X1

X2

Data Mem

X3

Fetch la dou instruciuni per ciclu; lanseaz ambele simultan dac una este integer/memory i cealalt este floating point Mod eficient de a mri productivitatea, de ex. Alpha 21064 (1992) & Seria MIPS R5000 (1996) Aceeai idee poate fi extins prin duplicaea unitilor funcionale (ex. 4-issue UltraSPARC & Alpha 21164) dar porturile suplimentare de GPR i costurile pt. Bypassing cresc rapid
11

FPRs

X1

X2

FAdd

X3

X2

FMul

X3

Unpipelined divider X3 FDiv X2 Commit Point

Tipuri de hazarde de date


Luai, de exemplu, urmtorul tip de operaie
rk ri op rj

Dependene de date
r3 -> r1 op r2 r5 -> r3 op r4 Read-after-Write (RAW) hazard Write-after-Read (WAR) hazard Write-after-Write (WAW) hazard

Anti-dependen
r3 -> r1 op r2 r1 -> r4 op r5

Dependen de ieiri
r3 -> r1 op r2 r3 -> r6 op r7
12

Dependene de registre vs. memorie


Hazardele de date datorate operanzilor din registre pot fi depistate n etapa de decode, dar hazardele datorate operanzilor din memorie pot fi determinate numai dup calculul adresei efective Store: Load: M[r1 + disp1] <- r2 r3 <- M[r4 + disp2]

Oare (r1 + disp1) = (r4 + disp2) ?

13

Hazarde de date, un exemplu


I1 I2 I3 I4 I5 I6 FDIV.D FLD FMUL.D FDIV.D FSUB.D FADD.D f6, f2, f0, f8, f10, f6, f6, 45(x3) f2, f6, f0, f8, f4 f2 f6 f2 f4

RAW Hazards WAR Hazards WAW Hazards


14

Instruction Scheduling
I1 I2 FDIV.D FLD f6, f2, f6, 45(x3) f4

I1
f4
f2 f6 f2

I3
I4 I5 I6

FMULT.D
FDIV.D FSUB.D FADD.D

f0,
f8, f10, f6,

f2,
f6, f0, f8,

I2

I3
I4

Ordonri valide: in-order I1 out-of-order I2

I2
I1 I2

I3
I3 I3

I4
I4 I5

I5
I5 I4

I6
I6 I6

I5 I6

out-of-order I1

15

Out-of-order Completion
In-order Issue
I1 FDIV.D f6, f6, f4 Latency 4

I2
I3

FLD
FMULT.D f0,

f2,
f2,

45(x3)
f4

1
3

I4
I5

FDIV.D
FSUB.D

f8,
f10,

f6,
f0,

f2
f6

4
1

I6

FADD.D
1 2

f6,

f8,

f2
3 5 4 6 5 6

in-order comp

1 2 3 4

out-of-order comp 1 2 2 3 1 4 3 5 5 4 6 6

B.A. Complexe
ALU IF ID Issue Mem WB Fadd Fmul

GPRs FPRs Putem s rezolvm hazardele la write fr s egalm toate b.a. i fr s facem bypass?

Fdiv

17

Cnd este sigur s lansm o instruciune?


Presupunem c o structur de date ine evidena tuturor instruciunilor din toate unitile funcionale Trebuie fcute urmtoarele verificri nainte de a lansa n execuie o instruciune Este disponibil unitate funcional cerut? Sunt disponibile datele de intrare? RAW? Este sigur s scrii la destinaie? WAR? -> WAW? Exist vreun conflict structural n etapa de WB?

18

Structur de date pentru execuii corecte


ine evidena tuturor unitilor funcionale Name Busy Op Dest Src1 Src2 Int Mem Add1 Add2 Add3 Mult1 Mult2 Div Instruciunea i, la lansare n execuie, consult tabela
FU available? RAW? WAR? WAW?

check the busy column search the dest column for is sources search the source columns for is destination search the dest column for is destination

Se adaug o intrare n tabel dac nu se detecteaz nici un hazard Intrarea este scoas din tabel dup Write-Back
19

Simplificarea structurii de date Presupunem execuie In-order


Presupunem c instruciunea nu este trimis n execuie dac exist un hazard RAW sau unit. func. este ocupat, i c operanzii sunt memorai intern de ctre unit. func. la primire:
Instruciunea trimis poate s cauzeze: WAR hazard ?
NU: Operanzii sunt citii la lansare n execuie

WAW hazard ?
DA: Out-of-order completion

20

Simplificm structura de date ...


Nu avem hazard WAR
-> nu e nevoie s memorm src1 i src2

Nu se lanseaz n execuie o operaie n cazul unui hazard WAW


-> numele unui registru poate apare cel mult odat n coloana dest

WP[reg#] : vector de bii pentru memorarea regitrelor n care se vor face operaii de scriere
Bii setai la lansare i teri n etapa de WB -> Fiecare etap din b.a. a fiecrei unit. func. trebuie s conin cmpul dest i un flag care s indice dac acesta este valid perechea (we, ws)

21

Tabel de scoruri pentru execuie Inorder


Busy[FU#] : vector de bii ce indic disponibilitatea FU.
(FU = Int, Add, Mult, Div) Aceti bii sunt hardcodai n FU.

WP[reg#] : vector de bii care s nregistreze dac scrierile n reg. sunt n ateptare (Write Pending).
Aceti bii sunt setai la lansarea n execuie a op. i teri la Write Back

Unitatea verific instruciunea (opcode dest src1 src2) n tabel nainte de a o lansa n execuie
FU available? RAW? WAR? WAW? Busy[FU#] WP[src1] sau WP[src2] nu poate apare WP[dest]
22

Dinamica tabelei de scoruri


Functional Unit Status
Int(1) Add(1) Mult(3) Div(4)

Registers Reserved WB for Writes


f6 f6, f6, f6, f6, f0, f0, f8, f8, f8 f6 f6
f2 f2 f0 f0 f8 f8 f10 f10

t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11
I1 I2 I3 I4 I5 I6

I1 I2
I3 I4 I5

f6
f2 f0 f6 f6 f6 f2

I2

f0
f0 f8 f8 f10 f8

f6
f0

I1
I3

f8 f10 f8
f6 f6
FDIV.D FLD FMULT.D FDIV.D FSUB.D FADD.D f6, f2, f0, f8, f10, f6, f6, 45(x3) f2, f6, f0, f8, f4 f4 f2 f6 f2

I5 I4
I6

I6

Limitrile execuiei In-Order: un exemplu


1 2 3 4 5 6 FLD FLD FMULT.D f6, FSUB.D FDIV.D FADD.D f2, f4, f4, f8, f4, f10, 34(x2) 45(x3) f2 f2, f2, f6, f2 f8 f4 latency 1 long 3 1 4 1

5 6

In-order:

1 (2,1) . . . . . . 2 3 4 4 3 5 . . . 5 6 6

Restriciile execuiei In-order previn ca instruciunea 4 s fie lansat


24

Execuia Out-of-Order
ALU Mem

IF

ID

Issue
Fadd

WB

Fmul

Buffer-ul din etapa Issue ine mai multe instruciuni care ateapt lansarea n execuie. Decode adaug instruciunea urmtoare la buffer dac este loc i dac instruciunea nu cauzeaz un hazard WAR sau WAW.
Not: WAR este posibil deoarece execuia este out-of-order (WAR nu era posibil pentru in-order cu memoriarea operanzilor n FU)

Orice instruciune din buffer pentru care hazardele RAW sunt rezolvate, poate fi lansat. La write back (WB) se pot introduce n buffer noi instruciuni.
25

Limitri: In-Order i Out-of-Order


1 2 3 4 5 6 FLD FLD FMULT.D f6, FSUB.D FDIV.D FADD.D f2, f4, f4, f8, f4, f10, 34(x2) 45(x3) f2 f2, f2, f6, 3 f2 f8 f4 1 4 1 latency 1 long

5 6

In-order: Out-of-order:

1 (2,1) . . . . . . 2 3 4 4 3 5 . . . 5 6 6 1 (2,1) 4 4 . . . . 2 3 . . 3 5 . . . 5 6 6

Execuia Out-of-order nu ne aduce o mbuntire semnificativ!


26

Cte instruciuni pot fi inute n b.a.?


Care dintre proprietile ISA limiteaz numrul de instruciuni din b.a? Numrul de registre

Execuia Out-of-order de sine stttoare nu aduce nici o mbuntire seminificativ!

27

Rezolvarea lipsei de registre


B.a. Floating Point nu pot fi umplute de cele mai multe ori cu un numr mic de registre.
IBM 360 avea doar 4 registre floating-point

Poate o microarhitectur s foloseasc mai multe registre dect cele specificate n ISA fr s piard compatibilitatea cu ISA ?
Robert Tomasulo de la IBM a sugerat o soluie ingenioas n 1967 folosind tehnica register renaming

28

Limitri: In-Order i Out-of-Order


1 2 3 4 5 6 FLD FLD FMULT.D f6, FSUB.D FDIV.D FADD.D f2, f4, f4, f8, f4, f10, 34(x2) 45(x3) f2 f2, f2, f6, 3 f2 f8 f4 1 4 1 latency 1 long

X
5 6

In-order: 1 (2,1) . . . . . . 2 3 4 4 3 5 . . . 5 6 6 Out-of-order: 1 (2,1) 4 4 5 . . . 2 (3,5) 3 6 6

Orice antidependen poate fi eliminat prin redenumire. (renaming != spaiu de stocare suplimentar) Poate fi fcut n hardware? DA!

Register Renaming
ALU IF ID Issue Mem WB

Fadd
Fmul

Etapa Decode face register renaming i adaug instruciunile etapei Issue n instruction ReOrder Buffer (ROB) - redenumirea face imposibile hazardele WAR sau WAW
Orice instruciune din ROB al carei hazarde RAW au fost satisfcute poate fi lansat. - Out-of-order or dataflow execution
30

Structuri folosite la renaming


Renaming table & regfile
Reorder buffer

Ins# use exec op

p1

src1

p2

src2

t1 t2 . . tn

Load Unit

FU

FU

Store Unit

< t, result >


Instruction template (i.e., tag t) este alocat de etapa Decode care asociaz acesta cu registrul din tabela de registre Dup execuia instruciunii, tag-ul este dealocat
31

Management-ul Reorder Buffer


Ins# use exec op p1 src1 p2 src2 t1 t2 . . Destination registers . are renamed to the instructions slot tag

ptr2 next to deallocate ptr1 next available ROB este alocat circular

tn

Un slot de instruciune este gata de execuie cnd:


Conine o instruciune valid (bitul use e setat) Nu a nceput nc execuia (bitul exec este liber) Ambii operanzi sunt disponibili (p1 i p2 sunt setai)

Bitul exec este setat cnd instruciunea ncepe execuia Cnd o instruciune a terminat execuia, bitul use este ters ptr2 este incrementat doar dac bitul use este marcat ca liber

32

Renaming & Out-of-order Issue


Un exemplu Renaming table
f1 f2 f3 f4 f5 f6 f7 f8
p data
v1 t1 t5 t2 1 2 2 0 1 0 1 1 1 0 1 0 1 1 0

Reorder buffer
Ins# use exec op p1
LD LD

src1

p2 src2

t1 t2

v1

3
4 5

0
1 0 0

MUL
SUB DIV

1 0
1 1

v2 t2
v1 v1

1 1
1 0 1

v1 v1
v1 t4 v4

t3 t4 t5
. .

t3
v4 t4

data / ti

1 FLD 2 FLD 3 FMULT.D 4 FSUB.D 5 FDIV.D 6 FADD.D


33

f2, f4, f6, f8, f4, f10,

34(x2) 45(x3) f4, f2, f2, f6,

f2 f2 f8 f4

Cnd sunt tag-urile nlocuite de date?

Oricnd o unit. func. produce date

La terminarea execuiei unei instruciuni

Cnd poate fi reutilizat un nume?

IBM 360/91 Floating-Point Unit


R. M. Tomasulo, 1967
1 2 3 4 5 6

p p p p p p

tag/data tag/data tag/data tag/data tag/data tag/data

load buffers (from memory)

instructions

Floating-Point 1 p tag/data Regfile


2 p tag/data 3 p tag/data 4 p tag/data

...

Distribute instruction templates by functional units

1 p tag/data p tag/data 2 p tag/data p tag/data 1 p tag/data p tag/data 3 p tag/data p tag/data 2 p tag/data p tag/data
Adder
Mult

< tag, result >


Magistrala comun asigur faptul c datele sunt p tag/data store buffers p tag/data disponibile imediat pentru toate instruciunile care au (to memory) p tag/data nevoie de ele. Compar tag-urile, dac egale atunci copiaz valoarea & i seteaz Presence Bit p. 34

Eficien?
Register Renaming i Out-of-order execution au fost implementate prima dat n 1969 la IBM 360/91 dar nu au aprut n modelele urmtoare pn n anii 90. De ce ? Motive 1.Eficiente doar pentru o clas foarte mic de programe 2.Latena memoriei era o problem mult mai mare 3.Excepiile nu sunt precise! nc o problem trebuia rezolvat mai nti
Transferul controlului
35

Acknowledgements
These slides contain material developed and copyright by:
Arvind (MIT) Krste Asanovic (MIT/UCB) Joel Emer (Intel/MIT) James Hoe (CMU) John Kubiatowicz (UCB) David Patterson (UCB)

MIT material derived from course 6.823 UCB material derived from course CS252

36