II dio Mikroprocesor
2.13. Superskalarni procesori

2.13.8. Promjena naziva registara

Ako instrukcije počinju i završavaju sa obradom u redoslijedu učitavanja, tada su vrijednosti u svim (opštim) registrima procesora jedinstveno određene u svakom trenutku izvršavanja programa. Ako su početak ili završetak obrade instrukcija nezavisni od redoslijeda dohvatanja tada može da se pojavi svih 5 prethodno navedenih zavisnosti. Zavisnost od izlaza i antizavisnost mogu da se jave jer vrijednosti registara u slučaju promjene redoslijeda izvršavanja operacija ne bi odgovarale vrijednostima registara u skladu sa zadatim tokom izvršavanja programa. Ova dva tipa zavisnosti nastaju zbog zahtjeva za istovremenom upotrebom istog registra i mogu da generišu veliki broj ograničenja i da umanje performanse izvršavanja čitavog niza instrukcija. Ovaj problem je naročito izražen kada se koriste različite metode registarske optimizacije kod RISC procesora.

U ovakvim situacijama performanse se mogu poboljšati promjenom naziva registara. Promjena se izvodi tako što se registri procesora dinamički određuju i dodjeljuju instrukcijama. Kada se pri izvršavanju instrukcije javi registar kao izlazni operand, tada se instrukciji dodjeljuje novi registar u koji se upisuje izračunata vrijednost. Naredne instrukcije koje zahtijevaju ovu vrijednost kao ulazni argument mijenjaju oznake registara tako da se referišu na novi registar koji sadrži tu vrijednost. Na taj način instrukcije koje originalno sadrže referencu na jedan isti registar mogu da se referišu na različite registre u zavisnosti od zahtijevane vrijednosti. Na primjer, niz instrukcija, dat u opisu zavisnosti od izlaza i antizavisnosti
AR         R2, R1            ; (R2a) + (R1a) →R2b
MOVE    R3, R2 + 1      ; (R2b) + 1       →(R3b)
MOVE    R2, R1 + 1      ; (R1a) + 1       →(R2c)
MOVE    R4, R2 + R3    ; (R2c) + (R3b) →(R4b)

se promjenom naziva registara mijenja u niz instrukcija

AR        Rb, Ra
MOVE   Rb, Rb +1
MOVE   Rc, Ra +1
MOVE   Rb, Rc + Rb

Indeks u nazivu registra označava hardverski registar koji se alocira radi čuvanja vrijednosti.

U ovom zapisu ne postoji antizavisnost tako da prva i treća instrukcija mogu da se izvršavaju istovremeno. Pri optimizaciji koda može da se zahtijeva i optimizacija upotrebe registara. U ovom primjeru bi se takva optimizacija sprovela još jednom promjenom naziva registara. Kako se registri obično označavaju sa R1, R2, ... dobijeni optimizovani (po broju registara) niz instrukcija ima oblik

AR         R2, R1
MOVE    R2, R2 + 1
MOVE    R3, R1 + 1
MOVE    R2, R3 + R2

Početak i kraj obrade instrukcija su u redoslijedu nezavisnom od redoslijeda dohvatanja    <    Index    >    2.14. Vježbe