Pipelining ukazov
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).
Glavna zamisel je razdelitev (t. i. "split") obdelave CPU navodila, kot jo določa mikrokoda navodila, na vrsto neodvisnih korakov mikrooperacij (imenovanih tudi "mikroinstrukcije", "mikroop" ali "µop"), pri čemer se na koncu vsakega koraka izvede shranjevanje. To omogoča nadzorni logiki procesorjev, da obdeluje navodila s hitrostjo obdelave najpočasnejšega koraka, ki je veliko hitrejša od časa, potrebnega za obdelavo navodila kot posameznega koraka.
Izraz cevovod se nanaša na dejstvo, da vsak korak nosi eno mikroinstrukcijo (kot kapljica vode) in da je vsak korak povezan z drugim korakom (analogija; podobno kot vodovodne cevi).
Večino sodobnih procesorjev poganja ura. Procesor je notranje sestavljen iz logike in pomnilnika (flip flops). Ko pride signal ure, flip flopi shranijo svojo novo vrednost, nato pa logika potrebuje nekaj časa za dekodiranje novih vrednosti flip flopov. Nato pride naslednji taktni impulz in flip flopi shranijo druge vrednosti itd. Z razdelitvijo logike na manjše dele in vstavljanjem flip flopov med dele logike se skrajša čas, ki ga potrebuje logika (za dekodiranje vrednosti do generiranja veljavnih izhodov glede na te vrednosti). Na ta način se lahko skrajša ura. Na
primer, cevovod RISC je razdeljen na pet stopenj z nizom flip flopov med vsako stopnjo, kot sledi:
- Pridobivanje navodil
- Dekodiranje ukazov in pridobivanje registrov
- Izvedba
- Dostop do pomnilnika
- Register write back
Procesorji s cevnim povezovanjem so notranje sestavljeni iz stopenj (modulov), ki lahko delno neodvisno obdelujejo ločene mikroinstrukcije. Vsaka stopnja je s flip flopi povezana z naslednjo stopnjo (kot "veriga"), tako da je izhod stopnje vhod za drugo stopnjo, dokler ni delo obdelave navodil končano. Takšna organizacija notranjih modulov procesorja skrajša skupni čas obdelave navodil.
Arhitektura brez cevovoda ni tako učinkovita, ker so nekateri moduli procesorja v mirovanju, medtem ko je drug modul aktiven med ciklom ukazov. Pipelining ne odpravi popolnoma časa mirovanja v procesorju s cevovodi, vendar vzporedno delovanje modulov procesorja poveča prepustnost ukazov.
Za cevovod z navodili velja, da je popolnoma cevovoden, če lahko sprejme novo navodilo vsak takt. Cevovod, ki ni popolnoma cevovoden, ima čakalne cikle, ki zakasnijo napredovanje cevovoda.
Osnovni petstopenjski cevovod v stroju RISC (IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Memory access, WB = Register write back). Navpična os so zaporedna navodila, vodoravna os je čas. Tako je v zelenem stolpcu najzgodnejše navodilo v fazi WB, zadnje navodilo pa je v fazi pridobivanja navodil.
Prednosti in slabosti povezovanja po ceveh
Prednosti povezovanja po ceveh:
- Čas cikla procesorja se skrajša, kar poveča prepustnost ukazov. Pipelining ne skrajša časa, potrebnega za dokončanje ukaza, temveč poveča število ukazov, ki jih je mogoče obdelati hkrati ("naenkrat"), in zmanjša zamik med dokončanimi ukazi (imenovan "prepustnost").
Več stopenj cevovoda ima procesor, več ukazov lahko obdela "hkrati" in manjša je zamuda med dokončanimi ukazi. Vsak prevladujoči splošni mikroprocesor, ki se proizvaja danes, uporablja vsaj 2 stopnji cevovoda do 30 ali 40 stopenj. - Če se uporablja cevna povezava, je lahko aritmetična logična enota procesorja zasnovana hitreje, vendar bo bolj zapletena.
- Cevovodno povezovanje teoretično poveča zmogljivost v primerjavi z jedrom brez cevovodnega povezovanja za faktor števila stopenj (ob predpostavki, da se za isti faktor poveča tudi taktna frekvenca), koda pa je idealna za izvajanje po cevovodih.
- Procesorji s cevno vezavo na splošno delujejo pri višji taktni frekvenci od taktne frekvence pomnilnika (od tehnologije iz leta 2008 pomnilniki delujejo pri nižjih frekvencah v primerjavi s frekvencami procesorjev), kar poveča splošno zmogljivost računalnikov.
Slabosti cevovodnega povezovanja:
Pipelining ima veliko pomanjkljivosti, čeprav jih procesorji in oblikovalci prevajalnikov odpravljajo s številnimi tehnikami; v nadaljevanju je seznam pogostih pomanjkljivosti:
- Zasnova procesorja z nepovezanimi vlakni je preprostejša in cenejša za izdelavo, saj procesor z nepovezanimi vlakni izvaja le eno navodilo hkrati. To preprečuje zamude pri vejicah (pri cevastem povezovanju se vsaka veja zakasni) in težave pri hkratnem izvajanju zaporednih ukazov.
- V procesorju s cevnimi povezavami vstavljanje flip flopov med moduli poveča zakasnitev ukazov v primerjavi s procesorjem brez cevnih povezav.
- Procesor, ki ni vezan na celice, bo imel določeno prepustnost ukazov. Uspešnost procesorja s cevnimi povezavami je veliko težje napovedati in se lahko pri različnih programih močno razlikuje.
- Številne zasnove vključujejo cevovode, dolge 7, 10, 20, 31 in celo več stopenj; pomanjkljivost dolgega cevovoda je, da je treba ob vejanju programa celoten cevovod sprati (počistiti). Večja prepustnost cevovodov ne zadostuje, kadar izvajana koda vsebuje veliko vej: procesor ne more vnaprej vedeti, kje bo prebral naslednji ukaz, in mora počakati, da se ukaz vejitve konča, pri čemer ostane cevovod za njim prazen. To pomanjkljivost je mogoče zmanjšati s predvidevanjem, ali se bo pogojni ukaz za vejitev vejil na podlagi predhodnih dejavnosti. Ko je vejitev rešena, mora naslednji ukaz prepotovati celotno pot po cevovodu, preden je njegov rezultat na voljo in procesor spet začne "delati". V takšnih skrajnih primerih je lahko zmogljivost procesorja s cevovodi slabša od procesorja brez cevovodov.
- Žal vsa navodila niso neodvisna. V preprostem cevovodu je za dokončanje enega ukaza lahko potrebnih pet stopenj. Če želi ta cevovod delovati s polno zmogljivostjo, bo moral med dokončanjem prvega izvajati 4 zaporedna neodvisna navodila. Vsako od teh štirih navodil je lahko odvisno od izhoda prvega navodila, zaradi česar mora nadzorna logika cevovoda čakati in v cevovod vnesti zastoj ali izgubljen takt, dokler se odvisnost ne odpravi. Na srečo lahko tehnike, kot je posredovanje, znatno zmanjšajo število primerov, ko je potrebno zaustavljanje.
- Programi, ki se sami spreminjajo, se na cevovodni arhitekturi morda ne bodo pravilno izvajali, če so navodila, ki se spreminjajo, blizu navodilom, ki se izvajajo. To je lahko posledica tega, da so navodila morda že v vhodni čakalni vrsti za predpomnjenje, zato modifikacija morda ne bo učinkovala pri prihodnjem izvajanju navodil. Predpomnilniki za navodila težavo še poslabšajo.
- Nevarnosti: Ko programer (ali prevajalnik) piše kodo zbirnika, običajno predpostavlja, da se vsak ukaz izvrši, preden se izvrši naslednji ukaz. Kadar ta predpostavka ni potrjena s pipeliningom, povzroči nepravilno obnašanje programa, situacija pa je znana kot nevarnost. Obstajajo
različne tehnike za odpravljanje nevarnosti ali njihovo odpravljanje, kot sta posredovanje in zakasnitev (z vstavljanjem zastoja ali zapravljenega takta).
Primeri
Splošni cevovod
Na desni je splošni cevovod s štirimi stopnjami:
- Prinesi
- Dekodiranje
- Izvedba
- Zapisovanje nazaj
V zgornjem sivem polju je seznam ukazov, ki čakajo na izvršitev, v spodnjem sivem polju je seznam dokončanih ukazov, v srednjem belem polju pa je cevovod.
Izvedba je naslednja:
Čas | Izvajanje |
0 | Na izvedbo čakajo štiri navodila |
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | Izvedejo se vsa navodila |
Bubble
Ko pride do "zastoja" (prekinitve) pri izvajanju, se v cevovodu ustvari "mehurček", v katerem se ne zgodi nič koristnega. V ciklu 2 se pri pridobivanju vijoličnega ukaza zamudi in v fazi dekodiranja v ciklu 3 je zdaj mehurček. Vse, kar je za vijoličnim ukazom, je prav tako zadržano, vendar se vse pred vijoličnim ukazom nadaljuje z izvajanjem.
Jasno je, da v primerjavi z zgornjo izvedbo mehurček daje skupni čas izvedbe 8 urnih taktov namesto 7.
Mehurčki so kot zastoji (zamude), v katerih se pri pridobivanju, dekodiranju, izvajanju in pisanju nazaj ne zgodi nič koristnega. To je kot koda NOP (kratica za No OPeration).
Primer 1
Tipičen ukaz za seštevanje dveh števil je ADD A, B, C,
ki sešteje vrednosti v pomnilniških mestih A in B ter rezultat postavi v pomnilniško mesto C. V cevovodnem procesorju bi cevovodni krmilnik to nalogo razdelil na vrsto opravil, podobnih:
Lokaciji 'R1' in 'R2' sta registra v procesorju. Vrednosti, shranjene v pomnilniških mestih z oznakama 'A' in 'B', se naložijo (kopirajo) v ta registra, nato se seštejejo in rezultat se shrani v pomnilniško mesto z oznako 'C'.
V tem primeru je cevovod tristopenjski - nalaganje, izvajanje in shranjevanje. Vsaka od teh stopenj se imenuje faza cevovoda.
V procesorju brez celične strukture lahko naenkrat deluje le ena stopnja, zato se mora celoten ukaz končati, preden se lahko začne naslednji ukaz. Pri procesorju s cevnim povezovanjem lahko vse stopnje hkrati delajo na različnih navodilih. Ko je to navodilo v fazi izvajanja, bo drugo navodilo v fazi dekodiranja, tretje pa v fazi pridobivanja.
Primer 2
Za boljše razumevanje koncepta si lahko ogledamo teoretični tristopenjski cevovod:
Faza | Opis |
Obremenitev | Branje navodil iz pomnilnika |
Izvedba | Izvajanje navodil |
Trgovina | Rezultat shranite v pomnilnik in/ali registre |
in psevdokodo sestavljenega seznama, ki ga je treba izvesti:
Tako bi se izvedel:
Ura 1 | ||
Obremenitev | Izvedba | Trgovina |
LOAD |
|
|
Navodilo LOAD se prenese iz pomnilnika.
Ura 2 | ||
Obremenitev | Izvedba | Trgovina |
PREMIKANJE | LOAD |
|
Izvrši se ukaz LOAD, medtem ko se ukaz MOVE prenese iz pomnilnika.
Ura 3 | ||
Obremenitev | Izvedba | Trgovina |
ADD | PREMIKANJE | LOAD |
Ukaz LOAD je v fazi Store, kjer bo njegov rezultat (številka 40) shranjen v register A. Medtem se izvaja ukaz MOVE. Ker mora vsebino A premakniti v B, mora počakati na zaključek ukaza LOAD.
Ura 4 | ||
Obremenitev | Izvedba | Trgovina |
TRGOVINA | ADD | PREMIKANJE |
Ukaz STORE je naložen, medtem ko se ukaz MOVE zaključuje in se izračunava ukaz ADD.
In tako naprej. Upoštevajte, da je včasih navodilo odvisno od rezultata drugega navodila (kot je naš primer MOVE). Kadar se več kot eno navodilo sklicuje na določeno lokacijo za operand, bodisi z branjem (kot vhod) bodisi s pisanjem (kot izhod), lahko izvajanje teh navodil v vrstnem redu, ki se razlikuje od prvotnega vrstnega reda programa, privede do situacije nevarnosti (omenjene zgoraj).
Splošni 4-stopenjski cevovod; barvni okvirčki predstavljajo navodila, ki so med seboj neodvisna.
Mehurček v 3. ciklu povzroči zamudo pri izvajanju
Sorodne strani
- Cevovod (računalništvo)
- Vzporedno računalništvo
- Vzporednost na ravni ukazov
Vprašanja in odgovori
V: Kaj je povezovanje ukazov?
O: Cevovodenje ukazov je tehnika, ki se uporablja pri načrtovanju sodobnih mikroprocesorjev, mikrokrmilnikov in procesorjev za povečanje prepustnosti ukazov z razdelitvijo obdelave ukaza procesorja na več neodvisnih korakov s shranjevanjem na koncu vsakega koraka.
V: Kako deluje cevovodno povezovanje?
O: Pipelining deluje tako, da razbije logiko na manjše dele in vstavi flip flope med dele logike, kar skrajša čas, ki ga logika potrebuje za dekodiranje vrednosti do generiranja veljavnih izhodov, odvisnih od teh vrednosti. To omogoča hitrejše taktne periode.
V: Kateri so primeri cevovodov?
O: Primer cevovoda je cevovod RISC, ki je razdeljen na pet stopenj z nizom flip flopov med vsako stopnjo.
V: Kako cevovodi povečajo prepustnost ukazov?
O: Potekanje po cevovodih poveča prepustnost ukazov tako, da omogoča vzporedno delovanje procesorskih modulov, kar skrajša čas mirovanja med ciklom ukazov in podaljša skupni čas obdelave.
V: Ali je vsak cevovod popolnoma cevovoden?
O: Ne, vsi cevovodi niso popolnoma cevovodni; nekateri cevovodi imajo čakalne cikle, ki upočasnijo napredovanje po cevovodu.