Hazardi u pipeline-u

Prilikom pipeline izvršavanja instrukcija u pipeline-u mogu da se stvore takve situacije da za neku instrukciju ne može da se izvrši faza predviđena stepenom pipeline-a u kome se ona nalazi. Ove situacije se nazivaju hazardima. Postoje tri vrste hazarda:

Strukturalni hazardi nastaju zbog potrebe da se istovremeno pristupi istom resursu od strane instrukcija koje se nalaze u različitim stepenima pipeline-a. Hazardi podataka nastaju kada je pristup nekom podatku od strane neke instrukcije u nekom stepenu pipeline-a uslovljen prethodnim pristupom tom istom podatku od strane neke prethodne instrukcije iz nekog drugog stepena pipeline-a. Upravljački hazardi nastaju zbog skokova i drugih instrukcija koje menjaju vrednost programskog brojača PC.

U slučaju hazarda instrukcija se zaustavlja u nekom stepenu pipeline-a onoliko perioda signala takta koliko je potrebno da se uzrok hazarda otkloni. Zaustavljanje neke instrukcije u nekom stepenu pipeline-a zaustavlja i instrukcije koje su iza nje u pipeline-u. Time se zaustavlja i ubacivanje novih instrukcija u pipeline. Instrukcijama koje su ispred nje u pipeline-u može se dozvoliti da produže sa izvršavanjem. Zbog toga je direktna posledica pojavljivanja hazarda to da je ubrzavanje izvršavanja programa u pipeline procesoru lošije od onog koje bi teoretski moglo da se postigne.

 Strukturalni hazardi

Strukturalni hazard u pipeline procesoru nastaje kada dve instrukcije koje se nalaze u različitim stepenima pipeline-a treba da pristupe istom resursu. Tipičan primer za ovo je sistem u kome se koristi ista memorija i za instrukcije i za podatke. Ovaj hazard bi mogao da se javi u slučaju razmatranog procesora ukoliko ne bi postojale posebne memorije za instrukcije i podatke. Hazard bi se desio kada bi load ili store instrukcija došla u stepen MEM u kome bi se čitao ili upisivao podatak u memoriju (slika 3-6). Tada očitavanje nove instrukcije i ubacivanje u stepen IF ne bi moglo da se realizuje i bilo bi odloženo za jednu periodu signala takta što je na slikama 3-7 i 3-8 označeno sa stall. Sve ostale instrukcije bi se normalno izvršavale. Način za kompletno eliminisanje ovog strukturalnog hazarda je podela memorije na posebne memorije za instrukcije i podatke, što je i urađeno za razmatrani procesor sa slike 3-4.

Mogu se javiti strukturalni hazardi i kod pristupa drugim resursima. Tako, na primer, procesor koji se razmatra je dosta jednostavan, jer se ne razmatra aritmetika u pokretnom zarezu, kao ni množenje i deljenje celobrojnih veličina. Zbog toga je stepen EX jednostavan i u njemu se za svaku instrukciju faza EX izvršava u jednom taktu. U slučaju pomenutih operacija treba više taktova. Da to ne bi kočilo pipeline stepen EX može da se realizuje kao paralelna veza više funkcionalnih jedinica (slika II-1). Kada neka instrukcija dođe do svoje faze EX šalje se u odgovarajuću EX funkcionalnu jedinicu u kojoj se izvršava u onoliko taktova koliko joj je potrebno. Sada je moguće u ritmu takta, bez zadrške u pipeline-u, instrukcije iz stepena ID slati u različite EX funkcionalne jedinice radi izvršavanja faze EX. Čim se faza EX neke od instrukcija završi u nekoj od funkcionalnih jedinica instrukcija ide kroz stepene MEM i WB radi kompletiranja izvršavanja.

 

Slika 3.6 Računar sa samo jednim memorijskim portom će generisati konflikt kad god se desi obraćanje memoriji

 

 

Slika 3.7 Strukturalni hazard dovodi do zaustavljanja pipeline-a

 

broj perioda signala takta

Instruction

1

2

3

4

5

6

7

8

9

load instruction

IF

ID

EX

MEM

WB

       

Instruction i +  1

 

IF

ID

EX

MEM

WB

     

Instruction i +  2

   

IF

ID

EX

MEM

WB

   

Instruction i +  3

     

Stall

IF

ID

EX

MEM

WB

Instruction i +  4

       

stall

IF

ID

EX

MEM

Slika 3-8 Situacija u pipeline-u kao posledica strukturalnog hazarda

Slika II-1 Stepen EX realizovan kao paralelna veza više funkcionalnih jedinica

Ovo funkcioniše lepo sve dok za instrukcije koje dolaze postoje slobodne EX funkcionalne jedinice. Strukturalni hazard se ovde javlja kada naiđe instrukcija koju treba poslati u neku EX funkcionalnu jedinicu, koja nije raspoloživa jer prethodna instrukcija još uvek nije završila svoju fazu EX u njoj. Zbog toga se ova instrukcija zaustavlja u stepenu ID pipeline-a gde čeka da se odgovarajuća EX funkcionalna jedinica oslobodi. Neki drugi problemi koji se javljaju kod pipeline-ova sa ovako povezanim EX funkcionalnim jedinicama razmatraju se u odeljku ******.

U zavisnostio od toga koliko se često javlja neki strukturalni hazard procenjuje se da li se isplati ubacivanje nekog rešenja kojim se ovaj hazard izbegava ili smanjuje. U nekim situacijama zaustavljanje pipeline-a zbog hazarda može da bude prihvatljivo rešenje.