Sunteți pe pagina 1din 7

Paralelism la nivel de

instruciune

Din 1985 toate procesoarele utilizeaz pipeline pentru creterea performanelor

Suprapunerea de instruciuni aa cum este i cazul pentru pipeline se numete


paralelism la nivel de instruciune

Pentru a crea un paralelism ct mai eficient avem n esen dou metode:

Hardware-ul poate determina i exploata paralelismul n mod dinamic;


Folosim tehnologia software pentru a determina paralelismul n mod static la momentul compilrii

CPI (cycles per instruction)

= + + +

Tehnica

Efect de reducere pentru

Forwarding

Potenialele stall-uri pt hazardele de date

Salturi ntrziate

Stall-urile pt hazardele de control

Programare dinamic de baz

Stall-urile pt hazardele de date din


dependine

Salturi ntrziate

Stall-urile pt hazardele de control

Programare dinamic de baz

Stall-urile pt hazardele de date din


dependine

Pentru MIPS tipic avem: media apariiilor salturilor dinamice este de 15% - 25%
Putem executa ntre 3 i 6 instruciuni MIPS pn a avea un salt; pre puine
instruciuni pentru a ne gndi la un paralelism paralelism la nivel de blocuri
ILP (Instruction Level Parallelism) poate fi crescut prin exploatarea parelismului
din interiorul unui ciclu
Adunarea a dou array-uri de 1000 elemente n paralel:
for (i=1; i< 1000; i=i+1)
x[i] = x[i] + y[i]
Fiecare iteraie poate fi suprapus cu orice alt iteraie va exista o conversie de
la acest tip de ciclu la un paralelism la nivelul instruciunii
Se desface ciclul static de ctre compilator sau dinamic de ctre hardware. O alt
metod este aceea de a utiliza instruciuni vectori
Codul prezentat poate fi executat n 4 intruciuni dac avem procesoare care
lucreaz pe vectori: 2 instr de LOAD; 1 instr de ADD i 1 instr STORE BACK. Aceste
instruciuni pot fi executate n pipe.

Dependine de date i hazarde

Este critic s determinm cum o instruciune depinde de alta pentru determinarea


paralelismului existent ntr-un program. Practic trebuie determinat cte
instruciuni pot fi executate n paralel.

Dac 2 instruciuni sunt paralele => ele pot fi executate ntr-un pipe de adncime
arbitrar fr a cauza stall-uri

Exist 3 tipuri de dependine:

Dependine de date
Dependine de nume
Dependine de control

O instruciune j prezint o dependin de date fa de instruciunea i dac:

Instr i produce un rezultat care va fi utilizat de instr j SAU


Instr j prezint de depin de date de instruciunea k, iar instruciunea k prezint o depin de date
fa de instruciunea i

OBS !!!! ADD R1, R1, R1 nu se consider dependin

Dac 2 instruciuni prezint dependine de date, ele nu pot fi executate simultan,


sau nu pot fi complet suprapuse => hazarde de date

Execuia paralel pe un procesor cu interlocks

Procesor fr interlocks, compilatorul nu poate programa instruciuni dependente


astfel nct ele s fie complet suprapuse => execuie incorect a programului

Dependina de date implic :

Posibilitatea unui hazard


Ordinea de execuie
Ct de mult paralelism poate fi exploatat

O dependin poate fi eliminat astfel:

Meninem dependina dar eliminm hazardul


Eliminam dependina prin transformarea codului

Dependine de nume

O dependin de nume apare cnd 2 instruciuni utilizeaz acelai registru sau


aceeai locaie de memorie (nume), dar nu exist un flux de date ntre
instruciunile asociate cu acest nume

O antidependen ntre instruciunile i i j apare cnd instruciunea j scrie un


registru sau o locaie de memorie care este citit de instr i => trebuie meninut
ordinea

O dependin de ieire apare instr i i j scriu acelai registru sau aceeai locaie de
memorie =>trebuie meninut ordinea

Soluia cea mai utilizat de soluionare este redenumirea. Redenumirea poate fi


fcut static de ctre compilator sau dinamic de ctre hardware

Hazarde posibile

Considerm 2 instr i i j i instr i precede instr j

RAW instr j incearc s citeasc o surs nainte ca instr i s scrie n ea


(dependin de date adeverat)

WAW instr j ncearc s scrie un operand nainte ca el s fie scris de instr i


(dependin de ieire)

WAR instr j ncearc s scrie o destinaie nainte ca ea s fie citit de i


(antidependin)

RAR nu este hazard

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