Sunteți pe pagina 1din 40

- Curs 10-

Banda de asamblare este o tehnică în care mai multe instrucțiuni sunt


executate simultan.
Se utilizează intens în procesoarele moderne:
 AMD Opteron X4 (Barcelona)
 procesoarele Intel

Exemplu:
Un ciclu de spălare pentru rufe versiunea non-pipe:

– Introducerea rufelor în mașina de spălat

–După terminarea ciclului de spălare, se introduc rufele în uscator

–Rufele uscate se calcă

–Rufele călcate se pun într-un loc pentru utilizarea lor viitoare

–Se repornește cu ciclul de spălare

2
Cât timp este necesar pentru un ciclu de spălare ?

3
Versiunea bandă de asamblare

 După terminarea primului ciclu de spălare și încărcarea uscatorului cu


rufe, se poate iniția un nou ciclu de spălare

 Se scot rufele din uscător și se începe procesul de călcare a lor, se mută


rufele spălate în uscător și se pune o nouă încărcătură în mașina de
spălat

 Se pun rufele la loc sigur și se continuă procesul

4
Cât timp durează versiunea pipeline ?

5
Observații:

 Perioada de ceas alocată fiecărei operații trebuie să fie egală

 Banda de asamblare îmbunătățește performanța/ ramdamentul


(throughput) sistemului

 Timpul total pentru executarea tuturor task-urilor este mai mic

 Varianta pipeline este mult mai rapidă decât varianta non-pipe

6
Banda de asamblare la MIPS

•Pas 1 – Citire instrucțiune din memorie

•Pas 2 – Citirea registrelor cât timp se decodifică instrucțiunea.

•Pas 3 – Execuția operației sau calcularea unei adrese

•Pas 4 – Accesarea unui operand în memoria de date

•Pas 5 – Scrierea rezultatului într-un registru

Obs: Din formatul instrucțiunilor MIPS rezultă posibilitatea apariției


simultane a citirii și a decodificării.

Pipe-ul va fi discutat având în vedere 8 instrucțiuni: lw (load word), sw (store


word), add, sub, AND, OR, slt (setează mai mic decât), beq (salt pe egalitate)

7
R
E
M
E
M
B
E
R

F
R
O
M

C
O
U
R
S
E
7 !!!!

Procesorului MIPS care operează


într-un singur ciclu de ceas 8
Exemplu MIPS

Să se compare rezultatele versiunilor non-pipe și pipe pentru:

–Acces la memorie 200ps

–Operație ALU 200ps

–Citirea unui registru sau scrierea lui 100ps

–În versiunea single-cycle, fiecare instrucțiune va dura exact un ciclu de


ceas.

9
Timpii pentru versiunea fără bandă de asamblare

Instrucțiu Citire Citire reg. Operație Acces Scriere Timp total


nea instr. ALU date reg.
lw 200 ps 100 ps 200 ps 200 ps 100 ps 800 ps
sw 200 ps 100 ps 200 ps 200 ps 700 ps
Add, sub, 200 ps 100 ps 200 ps 100 ps 600 ps
AND, OR,
slt

beq 200 ps 100 ps 200 ps 500 ps

Ceasul va trebui să fie suficient de lent pentru a permite execuția


oricărei instrucțiuni valoarea ceasului va fi de 800 ps

10
Varianta bandă de asamblare

În cazul ideal creșterea vitezei este egală cu numărul de stagii al benzii de


asamblare.

11
CONCLUZII

•Toate instrucțiunile MIPS au aceeași lungime

•MIPS are doar câteva formate de instrucțiuni care au câmpul – registru sursă – în
acceași poziție pentru fiecare instrucțiune.

•Operanzii în memorie apar doar în instrucțiunile sw

•Operanzii trebuie să fie aliniați în memorie

Această simetrie presupune că al doilea stagiu de pipe poate începe citirea registrului
în același timp în care hardware-ul determină tipul instrucțiunii citite. Dacă nu ar
exista această simetrie stagiul 2 de pipe ar trebui împărțit, rezultând astfel 6 stagii de
pipe.

Această restricție presupune utilizarea stagiului de execuție pentru calcularea adresei


de memorie și apoi accesarea memoriei în următorul stagiu.

Datele cerute pot fi transferate între procesor și memorie într-un singur stagiu de pipe.

12
Hazardul în pipeline

Hazard – situația în care într-un pipe, următoarea instrucțiune nu poate fi


executată în următorul ciclu de ceas.
I. Hazardul structural – o instrucțiune planificată nu poate fi executată în
propriul ciclu de ceas deoarece hardware-ul nu suportă combinația de
instrucțiuni planificate pentru execuție.

Unde poate apărea un hazard structural ?

Daca am avea o singura memorie, hazardul


structural ar apărea în ciclul 4 când dorim să
accesăm datele din memorie, dar și sa
extragem o nouă instrucțiune. 13
Hazardul de date

II. Hazardul de date – instrucțiunea planificată spre execuție nu poate fi


executată în ciclul de ceas deoarece datele necesare execuției nu sunt încă
disponibile.

add $s0, $t0, $t1


sub $t2, $s0, $t3

Un client solicită ridicarea rufelor, dar ele nu se regăsesc în dulap. Va trebui


timp să căutăm în tot dulapul.

Rezultatul adunării va fi disponibil abia în ciclul 5 de ceas de unde rezultă că


sunt necesari 3 ciclii de ceas de așteptare. O soluție ar fi să tratăm aceste
situații prin intermediul compilatorului, dar aceste situații sunt atât de dese
încât nu ne putem baza pe compilator să le rezolve.

forwarding, bypassing
14
Forwarding

Valoarea registrului $s0 este replasată cu valoarea corecta.


Nu se poate face forward la valoarea produsă de MEM deoarece ar trebui
să ne întoarcem în timp.
Notări:
IF = instruction fetch
ID = decodificare instrucțiune/citire register
EX = execuție operație ALU
MEM = acces la memorie
WB = scriere în registre 15
Hazard de date la încărcare

Valoarea conținută de MEM poate fi sau nu folosită de către EX. Pentru a putea
determina dacă valoarea este necesară va trebui să așteptăm un ciclu de ceas,
adică introducem un stall. Chiar dacă folosim tehnica FORWARDING, tot va
trebui să stăm un ciclu de ceas.

Conceptul de “pipeline stall” este echivalent cu “bubble”.

16
Exemplu
Se consideră următorul program C:

A = B + E;

C = B + F;
lw $t1, 0($t0);
lw $t2, 4($t0);
add $t3, $t1, $t2;
sw $t3, 12($t0); Codul MIPS considerând că toate
variabilele sunt deja în memorie,
lw $t4, 8($t0); adresabile de la adresa de baza $t0
add $t5, $t1, $t4;
sw $t5, 16($t0)

17
III. Hazardul de control

Apar când este necesar să luăm o decizie bazată pe rezultatul unei instrucțiuni
cât timp alte instrucțiuni sunt în execuție.

Se face extragere de instrucțiune iar în următorul ciclu de ceas trebuie să avem


BEQ. După primirea acestei instrucțiuni începem imediat stall-urile și ele se
termină în momentul în care știm adresa de la care trebuie să executăm următorul
FETCH.

18
Predicția

 Procesoarele utilizează predicția atunci când au instucțiuni de ramificație.


 Metoda cea mai simplă este să presupunem că nu vom avea ramificații.
Doar în cazul apariției lor, se vor lua în considerare – altfel pipe-ul va
funcționa la viteza maximă.

Predicția nu este luată în considerare.

19
Predicția este luată în considerare.
Inserarea de stall-uri simplifică lucrurile cel puțin în ciclul de ceas
imediat următor ramificației.

20
În cazul programelor scrise…

 În cazul ciclurilor de programare avem instrucțiuni care întorc execuția


programului la începutul ciclului.

 În acest caz putem prezice că întotdeauna vom considera ramificațiile care ne


conduc la o adresă anterioară.

Predicții hardware dinamice:


În acest caz putem schimba predicția în timpul execuției programului pe baza
unui istoric. Se menține un istoric pentru fiecare decizie de ramificație luată și
vom utiliza acest istoric pentru a lua o decizie la momentul curent de timp.

Decizii întârziate:
Ramificația întârziată execută întotdeauna următoarea instrucțiune secvențială
iar ramificația se execută după terminarea execuției de întârziere.

21
Calea de date în versiunea pipeline și controlul ei
Stagiile de execuție ale unei instrucțiuni
1. IF – citirea următoarei instrucțiuni oferite de PC
2. ID – decodificarea instrucțiunii
3. IE – execuția instrucțiunii
4. MEM – memorarea rezultatului și incrementarea lui PC
Observație – în cazul instrucțiunilor LOAD sau STORE se modifică pasul 3.
Cum se execută instrucțiunea BRANCH ?

 Toate stagiile unui pipeline trebuie să fie echilibrate – toate stagiile trebuie să
dureze aproximativ același timp.
 Un task trebuie să folosească toate stagiile și ordinea să fie aceeași pentru
toate task-urile.
 Între stagii trebuie să existe registre deoarece nu toate stagiile au acceași
durată.

22
Fiecare stagiu trebuie să posede resurse hardware care sunt necesare execuției task-ului.

Pipeline-ul poate fi întrerupt de anumite evenimente interne sau de evenimente


externe – excepții / întreruperi.

Pipeline-ul trebuie golit și starea procesului salvată pentru a putea fi reluată.

MIPS posedă: o colecție de registre generale, PC, o memorie cache de instrucțiuni și


una de date

Fiecare registru general dar și PC-ul are lungimea de 32 de biți – 4 bytes – 1 cuvânt

Procesul MIPS prezintă o arhitectură de tip load-store, toate instrucțiunile au registre


sau operanzi imediați.

Instrucțiuni Aritmetice – logice

Încărcare/memorare

Ramificație
23
Hazard RAW – read after write • Instrucțiunea i+1 are o dependență
RAW de instrucțiunea i, deoarece unul
dintre registrele sale de intrare, R7, este
Exemplul 1: registru de ieșire pentru instrucțiunea i
• Instrucțiunea i+2 are o dependență
i: R7 = R12 + R15
RAW cu instrucțiunea i, din același
i+1: R8 = R7 – R12 motiv
i+2: R15 = R8 + R7 • Instrucțiunea i+2 are o dependență
RAW cu instrucțiunea i+1 deoarece
unul dintre registrele de instrare, R8,
este registru de ieșire pentru
instrucțiunea i+1
• R12 nu cauzează nici o dependență
Exemplul 2:

i1: add r1, r2, r3


r1 este citit de o instrucțiune care vine
i2: lw r4, 0(r1)
după o instrucțiune care scrie în r1
i3: sw 12(r1), r4

24
Hazard WAW – write after write

i1: add r3, 4(r4) //un operand în registru și cel de al doilea în memorie

i2: mov r3, r5

Hazard WAR – write after read

i1: mov 20(r3), 30(r4) // este o mutare în memorie, necesită


//calcularea a două adrese efective.

i2: add r3, 1 // incrementare r3

25
26
 IF – instrucțiunea este citită din memorie de la adresa indicată de PC. Se
presupune că instrucțiunea nu este o instrucțiune de tip branch și de aceea se
incrementează PC către următoarea instrucțiune.

 ID – Instrucțiunea este decodificată și tipul ei este identificat. Alte task-uri


precum extensia la 32 de biți sunt executate.

 EX – în cazul unei instrucțiuni aritmetico-logice, ALU realizează operația


aritmetică sau logică. În caz de LOAD sau STORE adresa addr = Rs + depl se
determină (depl este mărit la 32 de biți în stagiul ID) – în caz de branch, PC-ul
va indica valoarea corectă pentru următoarea instrucțiune

 MEM – În cazul LOAD, conținutul Mem[addr] este citită (din memoria cache).
Dacă instrucțiunea este STORE, conținutul acelei locații este modificat. Dacă
nu avem nici una dintre aceste două instrucțiuni, atunci în acest stagiu nu se
întâmplă nimic.

 WB – Dacă instrucțiunea este un branch – dar nu STORE – rezultatul operației


(sau cel al unui LOAD) este memorat în registrul rezultat.

27
Excepții

 Stagiul write-back – plasează rezultatele înapoi în fișierele de


registre la mijlocul căii de date.

 Selecția următoarei valorii din PC, ce alege între incrementarea lui


PC și adresa de ramificație din stagiul MEM.

28
Versiunea pipe a căii de date

29
Execuția instrucțiunii lw

30
Execuția instrucțiunii lw

31
Execuția instrucțiunii lw

32
Execuția instrucțiunii lw

33
Execuția instrucțiunii lw

34
Execuția instrucțiunii lw – versiunea corectă, cu ultimul bug eliminat

Excepția Write-Back a fost rezolvată. Numărul registrului provine


de la MEM/WB prin intermediul căii de date. Ne trebuie încă 5 biți
să adăugăm la registre.
35
Exemplu de diagramă pipeline pentru 5 instrucțiuni:

36
Controlul în pipeline

37
38
Liniile de control pentru cele 3 stagii

39
Versiunea finală de control

40

S-ar putea să vă placă și