II dio Mikroprocesor
2.13. Superskalarni procesori

2.13.3. Ograničenja pri obradi

Redoslijed izvršavanja instrukcija radi postizanja većeg nivoa paralelizma se mijenja u skladu sa pravilima zavisnosti instrukcija. Poštovanje tih pravila obezbjeđuje korektno izvršavanje instrukcija. Svaka promjena redoslijeda izvršavanja instrukcija mora da zadovolji sljedeća pravila:

a) Zavisnost od prethodnih podataka (zavisnost upis-čitanje)
    U nizu instrukcija

AR           R1, R2          ; (R1) + (R2) →R1
STORE    R4,  0(R1)     ; (R4)           → (R1)

druga instrukcija može da bude dohvaćena i dekodirana ali ne može da bude izvršena prije prve, jer adresa upisa sadržaja registra R4 zavisi od vrijednosti koja se izračunava u prvoj instrukciji. Izvršavanje druge instrukcije mora da se odloži za onoliko ciklusa časovnika koliko je potrebno da takva zavisnost bude otklonjena. Između instrukcija j i k (j > k) postoji zavisnost od prethodnih podataka, odnosno zavisnost od toka podataka ili zavisnost upis-čitanje ukoliko izvršenje instrukcije j zavisi od izvršenja instrukcije k.
b) Proceduralna zavisnost
Prisustvo instrukcije grananja usložnjava operacije u vodu instrukcija. Instrukcija koja slijedi iza operacije (uslovnog) grananja zavisi od procedure grananja i ne može biti izvršena prije izvršavanja instrukcije koja sadrži grananje. Ovo je primjer proceduralne zavisnosti instrukcija.

Dodatni oblik proceduralne zavisnosti je prisutan kod instrukcija promjenljive dužine. Takve instrukcije moraju biti bar djelimično dekodirane da bi se odredila adresa naredne instrukcije koju treba dohvatiti. Ovaj zahtjev sprečava istovremeno dohvatanje više instrukcija što je jedno od osnovnih načela funkcionisanja vodova instrukcija kod superskalarnih procesora. Zbog toga se superskalarna arhitektura češće sreće kod RISC procesora čije su instrukcije najčešće fiksne dužine, za razliku od CISC procesora koji vrlo često imaju veliki broj instrukcija promjenljive dužine.

c) Zavisnost od resursa
Zavisnost od resursa predstavlja slučaj kada dve ili više instrukcija istovremeno zahtijevaju isti resurs (npr. memoriju, keš, FPU, FXU, ...). Zavisnost od resursa se javlja i kod voda instrukcija kada ne postoji dovoljno tokova za obradu koraka instrukcije. Ovaj tip zavisnosti se otklanja dupliranjem broja kritičnih resursa ili, ako je u pitanju vod instrukcija, uvođenjem dodatnih nivoa u postojeći vod.

d) Zavisnost od izlaza
U nizu instrukcija

AR        R2, R1             ; (R2) + (R1) → R2
MOVE   R3, R2 + 1       ; (R2) + 1      →R3
MOVE   R2, R1 + 1       ; (R1) + 1      →R2
MOVE   R4, R2 + R3     ; (R2) + (R3) →R4

druga instrukcija zavisi od rezultata prve instrukcije. Sličan odnos je i između četvrte i prve, četvrte i druge, kao i između četvrte i treće instrukcije. Dakle, raspored izvršavanja prve, druge i četvrte instrukcije ne smije da se promijeni. Osim toga, treća instrukcija mora da se izvrši prije četvrte.  Međutim, između treće i prve instrukcije takođe postoji zavisnost, jer bi izvršavanje treće instrukcije prije prve dovelo do nekorektnog sadržaja u registru R3 i samim tim do nekorektnih izlaznih vrijednosti prve instrukcije. Da bi ova izlazna vrijednost bila korektna (jer kasnije predstavlja ulaz u drugu instrukciju) izvršavanje treće instrukcije mora da bude odloženo sve dok postoji opasnost da bi njeni rezultati mogli da budu preklopljeni izvršavanjem instrukcije koja je prije nje u redoslijedu dohvatanja. Ovakav oblik zavisnosti se naziva zavisnost od izlaza.

e) Antizavisnost
U prethodnom primjeru

AR        R2, R1             ; (R2) + (R1) → R2
MOVE   R3, R2 + 1       ; (R2) + 1      →R3
MOVE   R2, R1 + 1       ; (R1) + 1      →R2
MOVE   R4, R2 + R3     ; (R2) + (R3) →R4

pošto treća instrukcija ažurira sadržaj registra R2, ona ne smije da završi izvršavanje prije nego što druga instrukcija započne svoje izvršavanje i dohvati operande. Ovakva zavisnost se u literaturi naziva antizavisnost ili zavisnost pisanje–pisanje. Ime antizavisnost ukazuje na obrnutu zavisnost u odnosu na normalan redoslijed izvršavanja kada instrukcija j mijenja neku vrijednost koju koristi instrukcija k (j < k). U slučaju antizavisnosti instrukcija k mijenja vrijednost koju koristi instrukcija j.

Redoslijed obrade instrukcija    <    Index    >    Tehnike izvršavanja instrukcija