Pipelining ukazov je tehnika, ki se uporablja pri načrtovanju sodobnih mikroprocesorjev, mikrokrmilnikov in centralnih procesorjev za povečanje prepustnosti ukazov (število ukazov, ki se lahko izvedejo v časovni enoti). Gre za obliko vzporednega izvajanja, kjer se obdelava enega ukaza razdeli na več stopenj in se več ukazov obdeluje vzporedno, vsaka v svoji stopnji cevovoda.
Glavna zamisel je razdelitev obdelave CPU navodila, kot jo določa mikrokoda, na vrsto neodvisnih korakov — mikrooperacij (imenovanih tudi mikroinstrukcije, mikroop ali µop). Med tema korakoma se vstavijo registarski pomnilniki (t. i. cevni registri), ki hranijo vmesne rezultate. Tako lahko različni ukazi hkrati zasedajo različne stopnje cevovoda, kar poveča število dokončanih ukazov na enoto časa.
Kako deluje cevovod
Večino sodobnih procesorjev poganja ura. Procesor je notranje sestavljen iz logike in pomnilnika (flip flops). Ob prihodu takta (clock edge) flip flopi posodobijo svoje vrednosti, nato logika v medtaktu (combinational logic) izvede potrebne izračune in pripravi vhod za naslednji tak. Če je logika zelo kompleksna, traja ta izračun dlje; razdelitev logike na manjše dele in vstavljanje flip flopov med te dele skrajša čas posameznega koraka in omogoči višjo frekvenco ure.
Analogija s cevovodom pojasni delovanje: vsak korak nosi eno mikroinstrukcijo (kot kapljico vode) in je povezan z naslednjim korakom, tako da izhod ene stopnje postane vhod druge, dokler ukaz ne zaključi vseh stopenj. To omogoča, da se za dokončanje enega ukaza porabi enako število stopenj kot prej, vendar v steady-state režimu procesor dokončuje en ukaz na takt (če je cevovod popolnoma izkoriščen).
Primer: petstopenjski RISC cevovod
Za RISC cevovod je pogosto opisano pet osnovnih stopenj, razdeljenih z nizi flip flopov:
- Pridobivanje navodil
- Dekodiranje ukazov in pridobivanje registrov
- Izvedba
- Dostop do pomnilnika
- Register write back
V takem cevovodu medtem ko ena stopnja izvaja dekodiranje druge stopnje že pridobivajo registre, tretja izvaja aritmetične operacije, četrta dostopa do podatkovnega pomnilnika in peta zapisuje rezultat. Takšna organizacija skrajša skupni čas obdelave na ukaz in poveča prepustnost.
Vrste konfliktov (hazardov) in rešitve
- Strukturni konflikti: nastanejo, ko dve stopnji istočasno zahtevata isti fizični vir (npr. en pomnilnik za navodila in podatke). Rešitev: podvojitev virov ali časovno razporejanje (stalli).
- Podatkovni konflikti (data hazards): ko ukaz zahteva rezultat prejšnjega ukaza, ki še ni bil zapisan. Rešitve vključujejo forwarding/bypassing (posredovanje vmesnih rezultatov neposredno med stopenjami), pipeline interlocks (avtomatsko vnašanje zamikov) ali napredne tehnike kot so Tomasulo algoritem in register renaming v out-of-order procesorjih.
- Kontrolni konflikti (control hazards): povezani s skoki in vejitvami (branch), kjer ni znano, katera navodila sledijo. Rešitve: napovedovanje skokov (branch prediction), spekulativno izvajanje in hitri mehanizmi za izmet (pipeline flush), kadar se napoved izkaže za napačno.
Konflikti povzročijo stalle (čakalne cikle) ali vstavitev tako imenovanih bubble v cevovod, kar zmanjša njegovo učinkovitost. Zato sodobni procesorji kombinirajo več mehanizmov za zmanjšanje vpliva hazardov: napredno napovedovanje vej, forwarding, register renaming, out-of-order execution in večnitenje ali superskalarno izvajanje, da dosežejo visoko prepustnost kljub omejitvam cevovoda.
Prednosti in omejitve
- Prednosti: večja prepustnost ukazov (higher IPC pri pravilni zasnovi), boljša izraba zgradbe procesorja, višje frekvence ure z delitvijo kompleksne logike.
- Omejitve: zavisnost med ukazi in vejitve zmanjšujejo idealno povečanje prepustnosti; dodani registri povečajo latentnost posameznega ukaza (latency), kompleksnost nadzornih logik in poraba energije naraščata z globino cevovoda in dodatnimi mehanizmi za odpravljanje hazardov.
Ko cevovod ni popolnoma izkoriščen
Cevovod je popolnoma cevovoden, če lahko sprejme novo navodilo vsak takt. V praksi pa so zaradi hazardov, omejenih virov ali napačnih napovedi veje v cevovodu pogosto prisotni čakalni cikli, ki zavirajo napredovanje cevovoda. Merilo učinkovitosti je povprečno število ciklov na ukaz (CPI) — idealno je CPI = 1 za popolnoma izkoriščen cevovod, realne arhitekture pa dosežejo višje vrednosti zaradi omenjnih učinkov.
Na koncu je pipelining temelj sodobnih procesorskih arhitektur: z ustreznim upravljanjem hazardov in dodatnimi tehnikami (superskalarno izvajanje, out-of-order execution, spekulativno izvajanje, napredno napovedovanje) omogoča znatno povečanje zmogljivosti, vendar zahteva premišljeno strojno in programsko podporo za optimalno delovanje.



