Sunteți pe pagina 1din 12

Cap. 7.

SISTEME PIPELINE
Tehnica pipeline reprezint o metod de mbuntire a performanelor
unui procesor sau a unei uniti aritmetice prin executarea simultan a mai
multor instruciuni sau operaii. Aceast tehnic utilizeaz paralelismul, prin
suprapunerea fazelor de execuie ale instruciunilor sau a etapelor de execuie
ale unei operaii aritmetice. Un sistem pipeline poate fi comparat cu o linie de
asamblare a unui produs, n care exist mai multe posturi de lucru, fiecare dintre
acestea fiind specializat pentru o anumit operaie, iar la captul benzii este
obinut produsul final.
7.1. Structura unui sistem pipeline
Tehnica pipeline descompune un proces secvenial n mai multe
subprocese care sunt executate de uniti (etaje) diferite. Un etaj execut un
subproces i produce un rezultat intermediar, care reprezint o intrare pentru
etajul urmtor. Rezultatul final este obinut numai dup ce toate subprocesele
au trecut prin ntregul sistem pipeline. Figura 7.1 ilustreaz structura de baz a
unui sistem pipeline cu m etaje.

Unitate de Control

Date de
ieire

Date de
intrare

R1

C1

Etaj E1

R2

C2

Etaj E2

Rm

Cm

Etaj Em

Fig. 7.1
Un etaj Ei const dintr-un registru de intrare Ri i un circuit de prelucrare
Ci care poate fi secvenial, combinaional sau inteligent. Registrele pstreaz
rezultatele pariale pe msur ce acestea se deplaseaz prin sistemul pipeline.
Un semnal comun de ceas determin ca registrele s i schimbe starea n mod
sincron. In fiecare ciclu de ceas, fiecare etaj transfer rezultatele sale pariale la
urmtorul etaj i calculeaz un nou set de rezultate. Perioada semnalului de
ceas trebuie s fie suficient de mare pentru ca etajul cel mai lent s termine
execuia operaiei sale. In plus, trebuie s existe un interval de timp suficient
pentru ca un registru s memoreze datele elaborate de etajul anterior. Deci,
perioada ceasului trebuie s fie mai mare dect ntrzierea maxim a etajului
cel mai lent, plus timpul necesar pentru memorarea datelor ntr-un registru.

Avantajul acestei tehnici const n faptul c un sistem pipeline cu m etaje


poate procesa simultan pn la m seturi independente de subprocese. Aceste
subprocese se deplaseaz prin sistemul pipeline etaj cu etaj astfel nct, atunci
cnd sistemul pipeline este plin, sunt executate n mod concurent m operaii
distincte, fiecare ntr-un etaj diferit. In acest mod un nou rezultat final este
generat la ieirea sistemului pipeline n fiecare ciclu de ceas.
7.2. Tipuri de sisteme pipeline
Sistemele pipeline sunt mprite, de obicei, n dou categorii: de
instruciuni i aritmetice. Un sistem pipeline de instruciuni este realizat pentru a
mbunti performanele unui calculator prin suprapunerea eficient a fazelor
de execuie ale instruciunilor. Sistemele pipeline aritmetice implementeaz
anumite funcii ale unitii aritmetice i logice cum ar fi adunarea, nmulirea i
mprirea n virgul mobil.
Un sistem pipeline din oricare categorie poate fi proiectat n dou moduri:
static sau dinamic.
Un sistem pipeline static poate executa un singur tip de operaie la un
moment dat. Operaia executat de un asemenea sistem poate fi schimbat
numai dup ce acesta este golit, atunci cnd ultimele date de intrare au trecut
prin toate etajele. De exemplu, s considerm un sistem pipeline static care
poate executa operaiile de adunare i nmulire. De fiecare dat cnd sistemul
pipeline comut de la o operaie de nmulire la una de adunare, acesta trebuie
golit i trebuie setat pentru noua operaie. Performanele sistemelor pipeline
statice vor fi reduse n mod semnificativ dac tipul operaiilor se modific n mod
frecvent.
Un sistem pipeline dinamic poate executa mai multe tipuri de operaii la un
moment dat. Pentru a executa o anumit operaie asupra unor date de intrare,
datele trebuie s parcurg anumite etaje ntr-o anumit ordine. S presupunem
c figura 7.2 reprezint un sistem pipeline dinamic cu trei etaje, care poate
executa adunarea i nmulirea n acelai timp asupra unor date diferite.
Pentru execuia operaiei de nmulire, datele de intrare trebuie s
parcurg etajele 1, 2 i 3; pentru execuia operaiei de adunare, datele trebuie
s parcurg numai etajele 1 i 3.
La intrarea etajului 1 se pot aplica dou seturi de date D1 i D2. Deoarece
ambele seturi de date urmeaz s utilizeze etajul 3, intervalul de timp dintre
aplicarea datelor D1 i D2 la intrrile sistemului pipeline trebuie s fie astfel ales
nct aceste date s nu ajung n etajul 3 n acelai ciclu de ceas; n caz
contrar, apare o coliziune. In general, n cazul sistemelor pipeline dinamice
mecanismul care controleaz momentul n care datele trebuie aplicate la intrare
este mult mai complex dect n cazul sistemelor statice.

Intrare
D1, D2
Registru
Etaj 1
Circuit de
prelucrare

Registru
Etaj 2
Circuit de
prelucrare

Registru
Etaj 3
Circuit de
prelucrare
Ieire

Fig. 7.2
7.3. Sisteme pipeline de instruciuni
7.3.1. Principi
In cazul unei arhitecturi von Neumann, procesul de execuie a
instruciunilor implic mai multe faze. Mai nti, unitatea de control a
procesorului ncarc instruciunea din memoria cache sau din memoria
principal. Apoi, unitatea de control decodific instruciunea pentru a determina
tipul operaiei care trebuie executat. Dac operaia necesit operanzi, unitatea
de control determin adresa fiecrui operand dup care i ncarc din memoria
cache sau din memoria principal. Operaia este apoi executat i, n sfrit,
rezultatul este memorat n locaia specificat.
Un sistem pipeline de instruciuni mbuntete performanele unui
procesor prin suprapunerea prelucrrii mai multor instruciuni diferite. Acest
lucru se realizeaz prin divizarea procesului de execuie a instruciunilor n mai
multe faze. Un sistem pipeline de instruciuni este n mod normal transparent
programatorilor i este gestionat automat de ctre unitatea de control a UCP i
de ctre compilatoare.
In general execuia unei instruciuni se poate descompune n urmtoarele
operaii simple:
1. Extragerea instruciunii (IF - Instruction Fetch): aducerea instruciunii din
memoria cache sau din memoria principal.

2. Decodificarea instruciunii (ID - Instruction Decoding): identificarea


operaiei care trebuie executat.
3. ncrcarea operanzilor (OF - Operand Fetch): adresarea i citirea
operanzilor necesari.
4. Execuia instruciunii (EX - Execution): executarea operaiei specificate
asupra operanzilor.
5. Scrierea rezultatelor (WB - Write-Back): actualizarea operanzilor
destinaie.
Figura 7.4 prezint un sistem pipeline de instruciuni cu cinci etaje, fiecare
etaj avnd ca obiectiv executarea uneia dintre operaiile precizate mai sus. Un
sistem pipeline de instruciuni suprapune operaiile executate de aceste etaje
asupra unor instruciuni diferite cu scopul de a obine, pentru o secven de
instruciuni, un timp total de execuie mult mai redus.

Registru
Etaj 1
Extragere instruciune IF
Registru
Etaj 2
Decodificare instruciune ID
Registru
Etaj 3
ncrcare operanzi OF

Registre, memorii
cache, memorie
principala

Registru
Etaj 4
Execuie EX
Registru
Etaj 5
Scriere rezultate WB

Fig. 7.4
Ca un exemplu, se consider figura 7.5, care prezint execuia unei
secvene de patru instruciuni.

Cicluri
i1
i2
i3

IF

ID

OF

EX

WB

IF

ID

OF

EX

WB

IF

ID

OF

EX

WB

IF

ID

OF

EX

i4

WB

Fig. 7.5
In timpul primului ciclu, (o perioad de ceas) instruciunea i1 este ncrcat
din memorie. In cel de-al doilea ciclu, instruciunea i1 este decodificat n timp
ce instruciunea i2 este ncrcat din memorie. Acest proces continu pn
cnd toate instruciunile sunt executate. Ultima instruciune se termin dup opt
cicluri de ceas.
Dei, prin utilizarea tehnicii pipeline, crete viteza de execuie a
instruciunilor, aceast tehnic poate pune anumite probleme. Unele din aceste
probleme i soluiile posibile sunt prezentate n seciunile urmtoare.
7.3.2. Indisponibilitatea instruciunilor (The fetching problem)
In general, furnizarea rapid a instruciunilor pentru un sistem pipeline este
costisitoare din punct de vedere al resurselor necesare. O metod simpl pentru
mbuntirea gradului de utilizare al unui sistem pipeline este utilizarea
bufferelor pentru memorarea instruciunilor i a datelor care vor fi transmise la
intrarea sistemului. Gradul de utilizare al unui sistem pipeline este definit ca
raportul ntre timpul n care etajele sistemului sunt utilizate i timpul total. Un
sistem pipeline este utilizat 100% din timp dac fiecare etaj este utilizat n
fiecare ciclu de ceas.
In unele situaii, sistemul pipeline trebuie golit i rencrcat, de exemplu,
atunci cnd apare o instruciune de salt sau o ntrerupere. Timpul necesar
pentru rencrcare poate fi minimizat prin ncrcarea n avans a instruciunilor i
a datelor n memoria cache din cadrul procesorului, fapt care va permite
transferul acestora imediat la intrarea sistemului pipeline. Dac instruciunile i
datele necesare execuiei vor fi ncrcate i memorate n memoria cache nainte
ca acestea s fie necesare, sistemul pipeline va avea o surs continu de
informaii. Utilizarea unor algoritmi de prencrcare adecvai asigur faptul c
instruciunile potenial necesare vor fi disponibile n majoritatea timpului.
Dac, n schimb, nu este asigurat un flux continuu de instruciuni sau
operanzi, sistemul pipeline nu va fi alimentat corespunztor i vor exista etaje
care nu lucreaz n fiecare ciclu de ceas. In aceast situaie gradul de utilizare
al sistemului va scdea.
7.3.3. ntrzierea introduse de etaje (bottleneck problem)
Aceast problem se refer la complexitatea operaiilor executate de
etajele sistemului pipeline. Dac un etaj execut operaii mai complexe fa de

alte etaje, timpul necesar pentru terminarea acestor operaii va crete. Ca


urmare, perioada ceasului trebuie aleas n funcie de acest timp, ceea ce
reduce performanele ntregului sistem. O soluie posibil a acestei probleme
este divizarea etajului respectiv n mai multe etaje. O alt soluie este de a se
realiza mai multe copii ale acestui etaj, care s execute n paralel respectiva
operaie.
7.3.4 Emiterea instruciunilor (The issuing problem)
Aceast problem apare atunci cnd o instruciune disponibil nu poate fi
executat. Cauzele care pot genera o astfel de situaie sunt urmtoarele:
- resursa necesar nu este disponibil (hazard structural); (n acest
context, prin resurs se nelege o unitate hard)
- exist o dependen de o instruciune anterioar (hazard de date);
- intervenia instruciunilor de salt care modific succesiunea de execuie a
instruciunilor (hazardul de control).
7.3.4.1 Hazardul structural
Hazardul structural se refer la situaia n care o resurs necesar nu este
disponibil pentru execuia instruciunii. Un hazard structural apare ca rezultat al
conflictelor la accesarea resurselor ntre instruciuni. Un tip de hazard structural
care poate apare se datoreaz modului de proiectare al unitilor de execuie.
Dac o unitate de execuie, care necesit mai multe cicluri de ceas, nu este de
tip pipeline i nu exist mai multe uniti de acelai tip, atunci nu se pot lansa n
execuie mai multe instruciuni care utilizeaz aceast unitate.
Un alt tip de hazard structural care poate apare se datoreaz proiectrii
setului de registre. Dac un set de registre nu are mai multe porturi de
citire/scriere, atunci operaiile multiple de citire/scriere nu pot fi executate
simultan. De exemplu, n anumite situaii sunt necesare dou operaii de scriere
n registre n acelai ciclu de ceas. Aceste operaii nu sunt posibile dac setul
de registre are un singur port de scriere.
Efectul unui hazard structural poate fi eliminat n mod simplu prin
implementarea unitilor de execuie multiple i prin utilizarea unui set de
registre cu porturi multiple de citire sau scriere.
7.3.4.2. Hazardul de date
Hazardul de date apare atunci cnd exist dependene de date ntre
instruciunea curent i o instruciune precedent. In cazul unui procesor care
nu utilizeaz tehnica pipeline, instruciunile sunt executate secvenial, iar
execuia unei instruciuni este terminat naintea nceperii execuiei urmtoarei
instruciuni. Astfel, instruciunile sunt executate n aceeai ordine n care apar n
program. Situaia este diferit n cazul unui procesor care utilizeaz tehnica
pipeline, la care execuia instruciunilor este suprapus. O instruciune poate fi
lansat n execuie i terminat naintea terminrii instruciunii precedente.
Hazardul de date, cunoscut i sub numele de problema dependenei datelor,
apare ca rezultat al suprapunerii execuiei (sau schimbrii ordinii de execuie) a

instruciunilor ntre care exist dependene de date. Pentru a nelege aceast


problem s considerm c ntr-un program apare urmtoarea secven de
instruciuni:
; R2=R3+R4
i1 : ADD R2, R3, R4
; R5=R2+R1
i2 : ADD R5, R2, R1
Instruciunea i2 depinde de i1 , deoarece utilizeaz rezultatul instruciunii i1
(coninutul registrului R2) ca o dat de intrare. In figura 7.6 este prezentat
execuia celor dou instruciuni n sistemul pipeline considerat.
Cicluri
i1
i2

1
IF

2
ID
IF

3
OF
ID
Fig. 7.6

4
EX
OF

5
WB
EX

6
WB

Dup cum se constat instruciunea i2 ajunge n faza OF nainte ca i1 s


treac prin faza WB. Aceast situaie conduce la utilizarea vechiului coninut al
registrului R2 pentru calcularea unei noi valori a variabilei R5 i deci, la un
rezultat invalid. Pentru a se obine un rezultat valid, instruciunea i2 nu trebuie
s ajung n faza OF pn cnd i1 nu trece prin faza WB. In timpul execuiei
problema semnalat poate fi rezolvat n dou moduri (figura 7.7):
- execuia fazei OF a instruciunii i2 este ntrziat cu dou cicluri cu ceas
sau
- lansarea n execuie a instruciunii i2 este ntrziat cu dou cicluri de
ceas.
In ambele cazuri faza OF a instruciunii i2 este executat dup ce
coninutul registrului R2 a fost reactualizat de faza WB a instruciunii i1 .
Cicluri
i1
i2

1
IF

Cicluri
i1
i2

1
IF

2
ID
IF

3
OF
ID

2
ID
-

3
OF
-

4
EX
4
EX
IF
Fig. 7.7

5
WB
5
WB
ID

OF

EX

WB

OF

EX

WB

Pentru realizarea acestor ntrzieri, se adug la sistemul pipeline un


circuit suplimentar, numit circuit de interblocare (pipeline interlock). Acest circuit
detecteaz dependenele ntre date i ntrzie instruciunile dependente pn la
rezolvarea conflictului.
O alt posibilitate const n rezolvarea acestui tip de hazard n timpul
compilrii. Compilatorul detecteaz aceste dependene i rearanjeaz
instruciunile astfel nct hazardurile de date s fie eliminate.

De exemplu, considerm cele patru instruciuni de mai jos. Dup cum se


poate observa exist un conflict de date ntre instruciunile i1 i i2 . Acest conflict
poate fi eliminat prin reordonarea instruciunilor astfel nct instruciunile i3 i i4 ,
care nu sunt dependente de i1 i i2 , s fie inserate ntre acestea din urm.
(figura 7.8).
; R2=R3+R4
i1 : ADD R2, R3, R4
; R5=R2+R1
i2 : ADD R5, R2, R1
; R6=R6+R7
i3 : ADD R6, R6, R7
; R8=R8+R7
i4 : ADD R8, R8, R7
Cicluri
i1
i3
i4
i2

1
IF

2
ID
IF

3
OF
ID
IF

4
EX
OF
ID
IF

5
WB
EX
OF
ID

WB
EX
OF

WB
EX

WB

Fig. 7.8
Dac nu este posibil rearanjarea instruciunilor, ntrzierile necesare pot
fi realizate de ctre compilator prin inserarea un numr necesar de instruciuni
NOP (No Operation).
Exist trei tipuri principale de hazarduri de date: RAW (Read After Write),
WAR (Write After Read) i WAW (Write After Write). Numele hazardului indic
ordinea de execuie a operaiilor pentru a se obine un rezultat valid; dac
aceast ordine nu este respectat, se poate obine un rezultat invalid. Aceste
hazarduri sunt explicate n continuare. Se presupune c exist dou instruciuni
i1 i i2 , iar i2 trebuie executat dup i1 .
RAW. Acest de hazard indic faptul c i2 trebuie s citeasc sursa de
date dup ce i1 a scris aceast dat. Dac aceast ordine nu este respectat se
produce un rezultat invalid deoarece data din locaia citit nu a fost
reactualizat.
De exemplu, n secvena urmtoare:
; R2 = R3 + R4
i1 : ADD R2, R3, R4
; R5 = R2 + R1
i2 : ADD R5, R2, R1
se poate obine un rezultat invalid dac i2 citete registrul R2 nainte ca i1 s
scrie n acest registru.
WAR. Acest hazard indic faptul c i2 trebuie s scrie ntr-o anumit
locaie dup ce i1 a citit data coninut n acea locaie. Dac aceast ordine nu
este pstrat coninutul acelei locaii de memorie este alterat. De exemplu, n
secvena:
; R2 = R3 + R4
i1 : ADD R2, R3 , R4
; R4 = R5 + R6
i2 : ADD R4, R5, R6

se poate obine un rezultat invalid dac i2 scrie n registrul R4 nainte ca i1 s


citeasc acest registru, caz n care instruciunea i1 va utiliza un coninut incorect
al registrului R4.
WAW. Acest hazard indic faptul c i2 trebuie s scrie ntr-o anumit
locaie dup ce i1 a scris n aceeai locaie. De exemplu, n secvena:
; R2 = R3 + R4
i1 : ADD R2, R3, R4
; R2 = R5 + R6
i2 : ADD R2, R5, R6
valoarea din registrul R2 este recalculat de ctre i2 . Dac ordinea de execuie
este inversat, iar i2 scrie n registrul R2 nainte ca i1 s scrie n acest registru,
R2 va conine o valoare incorect.
Hazardurile de tip WAR i WAW nu pot apare atunci cnd ordinea de
execuie a instruciunilor din program este pstrat.
In arhitecturile actuale, dependenele ntre instruciuni (Data Dependancy)
sunt verificate n mod static de compilator i/sau n mod dinamic (n timpul
execuiei) de circuite specializate.
Au fost dezvoltate numeroase tehnici statice de verificare a dependenelor
pentru a se utiliza avantajul paralelismului. Aceste tehnici pot detecta
majoritatea dependenelor. Totui, anumite dependene nu pot fi detectate la
compilare. De exemplu, nu este posibil s se determine ntotdeauna adresele
efective de memorie utilizate de instruciunile de ncrcare i memorare pentru a
putea detecta posibilele dependene ntre acestea. In cazul indirectrii, de
exemplu, adresele efective de memorie vor fi cunoscute numai dup execuia
instruciunii i, astfel, dependenele ntre instruciuni pot fi determinate numai n
mod dinamic. In general, verificarea dinamic a dependenelor are avantajul c
poate detecta dependenele care sunt imposibil sau dificil de detectat la
compilare. Pentru a se folosi avantajele ambelor metode, n practic se
utilizeaz adesea o verificare combinat (static i dinamic) a dependenelor.
Una dintre mai des utilizate tehnici pentru verificarea dinamic a
dependenelor este metoda tabelei de rezultate (scoreboard). Ideea de baz a
acestei metode este utilizarea unui mecanism pentru identificarea disponibilitii
operanzilor i a unitilor funcionale n calculele succesive.
7.3.5 Metoda tabelei de rezultate (Scoreboard)
Metoda tabelei de rezultate poate fi utilizat la calculatoarele ale cror
uniti funcionale multiple permit terminarea execuiei instruciunilor ntr-o
ordine diferit de cea n care apar n program. Conform acestei metode se
pstreaz n anumite buffere (care constituie tabela de rezultate) informaii
despre starea fiecrei instruciuni lansate n execuie, starea fiecrui registru i a
fiecrei uniti funcionale. Prin consultarea tabelei de rezultate unitatea de
comand poate determina dac, la un moment dat, trebuie s atepte pentru
execuia unei anumite instruciuni. Dac ateptarea nu este necesar, unitatea
funcional corespunztoare ncepe imediat execuia instruciunii. Dac trebuie
s se atepte (de exemplu, unul din operanzii de intrare nu este nc disponibil),
execuia noii instruciuni este ntrziat.

O tabel de rezultate este fi format din trei pri: starea instruciunilor,


starea unitilor funcionale i starea registrelor destinaie.
Figura 7.9 reprezint un instantaneu al coninutului acestor tabele pentru
urmtorul program care calculeaz expresia C+D+A*B.
LOAD
LOAD
LOAD
LOAD
MUL
ADD
ADD

R1, A
R2, B
R3, C
R4, D
R5, R1, R2
R2, R3, R4
R2, R2, R5

; R5 = A B
; R2 = C + D
; R2 = R2 + R5 = C + D + A * B

Starea instruciunilor
Lansat

Faza OF
terminat

Faza EX
terminat

Faza WB
terminat

LOAD R1, A

Da

Da

Da

Da

LOAD R2, B
LOAD R3, C
LOAD R4, D
MUL R5, R1, R2
ADD R2, R3, R4
ADD R2, R2, R5

Da
Da
Da
Da
Da

Da
Da
Da
Da

Da
Da
Da

Da
Da

Instruciune

Starea unitilor funcionale


ID
Unita- Nume unitate Ocupat
te
1
LOAD/STORE
Da
2
3
4

nmulire
Adunare_1
Adunare_2

Da
Da
Nu

Registre surs

Registru
destinaie

RS1 Disp

Rs2

Disp

R1
R3

R2
R4

Da
Nu

R4
R5
R2

Da
Da

Starea registrelor destinaie


R1
ID unitate

R2
3

R3

R4

R5

R6

Fig. 7.9
Presupunem c sistemul de calcul dispune de urmtoarele patru uniti
funcionale: o unitate de ncrcare i memorare - LOAD/STORE, o unitate de
nmulire, i dou uniti de adunare.
Tabela de stare a instruciunilor arat dac o instruciune este sau nu
lansat n execuie. Dac o instruciune este lansat n execuie, tabela arat n
care faz de execuie se afl instruciunea. Dup ce o instruciune este
ncrcat din memorie i decodificat, se va ncerca lansarea execuiei acesteia

utiliznd unitatea funcional corespunztoare. O instruciune va fi lansat n


execuie dac unitatea funcional este disponibil i nu exist alt instruciune
activ care utilizeaz acelai registru destinaie; n caz contrar, lansarea este
ntrziat. Cu alte cuvinte, o instruciune este lansat n execuie atunci cnd nu
exist hazarduri structurale i hazarduri WAW. Atunci cnd exist asemenea
hazarduri, lansarea n execuie acestei instruciuni i a instruciunilor urmtoare
este ntrziat pn cnd hazardurile sunt eliminate. In acest fel, instruciunile
dependente sunt lansate n execuie n ordinea n care apar n program, n timp
ce instruciunile independente pot fi executate ntr-o ordine diferit.
Tabela de stare a unitilor funcionale arat dac o unitate funcional
este ocupat sau nu. O unitate funcional este consider ocupat dac
execuia unei instruciuni de ctre aceast unitate nu a fost nc terminat.
Pentru o unitate ocupat, tabela identific, de asemenea, disponibilitatea
registrul destinaie i a registrelor surs. Un registru surs al unei uniti este
disponibil dac nu apare ca destinaie pentru nici o alt unitate anterioar, care
este n curs de execuie.
Tabela de stare a registrelor destinaie indic destinaia registrelor care nu
au fost nc nscrise. Pentru fiecare din aceste registre se identific unitatea
funcional activ care va executa scrierea n registru.
In timpul fazei de extragere a operanzilor, tabelele sunt monitorizate
pentru a determina dac registrele surs sunt disponibile pentru a fi citite de
ctre o unitate funcional activ. Dac nici unul din registrele surs nu este
utilizat ca registru destinaie de ctre alte uniti funcionale active, unitatea
citete operanzii din aceste registre i ncepe execuia operaiei. Dup
terminarea execuiei, tabela de rezultate testeaz dac exist hazarduri WAR
nainte de a permite scrierea rezultatului n registrul destinaie. Dac nu exist
hazarduri WAR, tabela de rezultate indic unitii funcionale s scrie rezultatul
n registrul destinaie.
In figura 7.9, tabelele indic faptul c execuia primelor trei instruciuni
LOAD a fost terminat i operanzii acestora au fost nscrii n registrul
destinaie. Ultima instruciune LOAD a fost lansat n execuie de ctre unitatea
LOAD/STORE (unitatea 1). La aceast instruciune, s-a terminat extragerea
operandului, dar nu s-a nscris nc operandul n registrul R4. Unitatea de
nmulire execut instruciunea MUL, iar prima instruciune ADD este transmis
unitii Adunare_1. Aceast unitate ateapt pentru ca registrul R4 s fie nscris
de ctre unitatea LOAD/STORE nainte de a ncepe execuia. Acest lucru este
necesar deoarece exist un hazard RAW ntre ultima instruciune LOAD i
prima instruciune ADD. In acest moment, a doua instruciune ADD nu poate fi
lansat n execuie, deoarece utilizeaz registrul R2 ca registru surs i
destinaie. Registrul R2 este ocupat n acest moment cu prima instruciune
ADD. Atunci cnd registrul R4 este nscris de unitatea LOAD/STORE, unitatea
Adunare_1 va ncepe execuia.
Ulterior coninutul tabelei de rezultate se modific. Dup cum se ilustreaz
n figura 7.10, dac unitatea LOAD/STORE (unitatea 1) a terminat execuia (a
nscris n R4 valoarea variabilei D), unitatea Adunare_1 poate termina faza de
ncrcare a operanzilor i ncepe faza de execuie. Dup terminarea execuiei

rezultatul poate fi nscris n registrul R2 deoarece unitatea de nmulire a


terminat faza de citire a operanzilor i este acum n faza de execuie. A doua
instruciune ADD va fi transmis acum unitii Adunare_2.
Ct timp unitatea de nmulire nu a citit coninutul registrului R2 unitii
Adunare_1 nu i se va permite scrierea rezultatului n registrul R2; aceasta
deoarece exist un hazard WAR ntre instruciunea MUL i prima instruciune
ADD.
Starea instruciunilor
Instruciune

Lansat

LOAD R1, A
LOAD R2, B
LOAD R3, C
LOAD R4, D
MUL R5, R1, R2
ADD R2, R3, R4
ADD R2, R2, R5

Faza OF
terminat

Faza EX
terminat

Faza WB
terminat

Da
Da
Da
Da
Da
Da

Da
Da
Da
Da
Da
Da

Da
Da
Da
Da

Da
Da
Da
Da
Da
Da
Da

Da

Starea unitilor funcionale


ID
unitate
1
2
3
4

Nume
unitate

Ocupat

LOAD/STOR
E
nmulire

Nu

Registru
destinaie
Rd

Da
NU
Da

Adunare_1
Adunare_2

Registre surs

Rs1 Disp Rs2

Disp

R5

R1

Da

R2

Da

R2

R2

Da

R5

Nu

Starea registrelor destinaie


R1
ID
unitate

R2

R3

R4

R5

R6

Fig. 7.10
Componenta principal n cazul metodei tabelei de rezultate este tabela
de stare a registrelor destinaie. Aceast tabel este utilizat pentru a soluiona
hazardurile de date ntre instruciuni. De fiecare dat cnd o instruciune este
lansat n execuie, registrul destinaie al instruciunii este marcat ca fiind
ocupat. Registrul destinaie rmne ocupat pn cnd execuia instruciunii este
terminat. Atunci cnd se pregtete lansarea unei noi instruciuni, sunt testai
operanzii acesteia pentru a nu exista conflicte ntre registre cu instruciunile
precedente a cror execuie nu a fost terminat.

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