Documente Academic
Documente Profesional
Documente Cultură
Exemplu:
Un ciclu de spălare pentru rufe versiunea non-pipe:
2
Cât timp este necesar pentru un ciclu de spălare ?
3
Versiunea bandă de asamblare
4
Cât timp durează versiunea pipeline ?
5
Observații:
6
Banda de asamblare la MIPS
7
R
E
M
E
M
B
E
R
F
R
O
M
C
O
U
R
S
E
7 !!!!
9
Timpii pentru versiunea fără bandă de asamblare
10
Varianta bandă de asamblare
11
CONCLUZII
•MIPS are doar câteva formate de instrucțiuni care au câmpul – registru sursă – în
acceași poziție pentru fiecare instrucțiune.
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.
Datele cerute pot fi transferate între procesor și memorie într-un singur stagiu de pipe.
12
Hazardul în pipeline
forwarding, bypassing
14
Forwarding
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.
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.
18
Predicția
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…
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.
Fiecare registru general dar și PC-ul are lungimea de 32 de biți – 4 bytes – 1 cuvânt
Î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:
24
Hazard WAW – write after write
i1: add r3, 4(r4) //un operand în registru și cel de al doilea în memorie
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.
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.
27
Excepții
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
36
Controlul în pipeline
37
38
Liniile de control pentru cele 3 stagii
39
Versiunea finală de control
40