Jokaisella prosessorin käskyllä on useita vaiheita sen toiminnassa. Jokainen näistä vaiheista kestää yhden CPU-syklin. Nämä vaiheet ovat käskyn haku, käskyn purku, suoritus, muistin käyttö ja takaisinkirjoitus. Vastaavasti nämä saavat suoritettavan käskyn, erottavat toiminnon käytettävistä arvoista päälle, suorita prosessi, avaa rekisteri, johon tulos kirjoitetaan, ja kirjoita tulos avattuun rekisteröidy.
Historialliset järjestyksessä prosessorit
Varhaisissa tietokoneissa suoritin ei käyttänyt ohjeputkea. Näissä prosessoreissa jokaisen yksijaksoisen toiminnon piti tapahtua jokaiselle käskylle. Tämä tarkoitti, että keskimääräisen käskyn käsitteleminen kokonaan kesti viisi kellojaksoa ennen kuin seuraava voitiin käynnistää. Joidenkin toimintojen ei välttämättä tarvitse kirjoittaa mitään tulosta rekisteriin, mikä tarkoittaa, että muistin käyttö- ja takaisinkirjoitusvaiheet voidaan ohittaa.
Ongelma piilee kuitenkin suoritettaessa täydellinen ohje järjestyksessä ennen kuin voidaan siirtyä seuraavaan ohjeeseen. Ongelma on välimuistin puuttuminen. CPU tallentaa aktiivisesti käsittelemänsä tiedot rekisteriin. Tämä voidaan käyttää yhden syklin latenssilla. Ongelmana on, että rekisteri on pieni, koska se on sisäänrakennettu prosessorin ytimeen. Suorittimen on siirryttävä suurempaan, mutta hitaampaan L1-välimuistiin, jos tietoja ei ole jo ladattu. Jos sitä ei ole, sen on siirryttävä uudelleen suurempaan ja hitaampaan L2-välimuistiin. Seuraava vaihe on L3-välimuisti; viimeinen vaihtoehto on järjestelmän RAM. Jokainen näistä vaihtoehdoista vie yhä enemmän suorittimen jaksoja tarkistaakseen.
Nyt tämä ylimääräinen lisätty latenssi voi olla suuri ongelma järjestelmässä, jonka on suoritettava jokainen käsky järjestyksessä kokonaan ennen seuraavan käskyn aloittamista. Se, mikä oli ollut 5-syklinen käskyä kohden suoritin, voi yhtäkkiä jäädä yhteen käskyyn kymmeniä tai satoja kellojaksoja. Koko ajan tietokoneessa ei voi tapahtua mitään muuta. Teknisesti tätä voidaan lieventää jonkin verran käyttämällä kahta itsenäistä ydintä. Mikään ei kuitenkaan estä heitä molempia tekemästä samaa asiaa mahdollisesti samanaikaisesti. Joten moniytiminen reitti ei korjaa tätä.
Klassinen RISC-putkilinja
RISC tulee sanoista Reduced Instruction Set Computer. Se on prosessorin suunnittelutyyli, joka optimoi suorituskyvyn helpottamalla jokaisen käskyn purkamista. Tämä on verrattuna CISC- tai Complex Instruction Set Computeriin, joka suunnittelee monimutkaisempia käskyjoukkoja, joiden ansiosta samojen tehtävien suorittamiseen tarvitaan vähemmän käskyjä.
Klassinen RISC-muotoilu sisältää ohjeputken. Sen sijaan, että suoritettaisiin mitä tahansa viidestä käskyvaiheesta missä tahansa syklissä, liukuhihna sallii kaikkien viiden vaiheen suorittamisen. Tietenkään et voi suorittaa yhden ohjeen kaikkia viittä vaihetta syklissä. Voit kuitenkin asettaa viisi peräkkäistä käskyä jonoon yhden vaiheen siirtymällä. Näin jokaisella kellojaksolla voidaan suorittaa uusi käsky. Tarjoaa potentiaalisen 5-kertaisen suorituskyvyn lisäyksen, mikä lisää ytimen monimutkaisuutta suhteellisen vähän.
Prosessorit, joilla ei ole liukuhihnaa, voivat koskaan olla vain alisekalaariset, koska ne eivät voi suorittaa yhtä täydellistä käskyä sykliä kohden. Tällä ensisijaisella viisivaiheisella liukuhihnalla voit tehdä skalaariprosessorin, joka pystyy suorittamaan jokaisen prosessin ohjeen. Luomalla entistä kauaskantoisempia liukuputkia voit tehdä superskalaarisia suorittimia, jotka voivat suorittaa useamman kuin yhden käskyn kellojaksoa kohden. Tietysti mahdollisia ongelmia on edelleen.
Edelleen peräkkäinen
Mikään näistä ei ratkaise kysymystä siitä, että vastausta odotetaan useiden jaksojen ajan, kun on kysyttävä välimuistin ja RAM-muistin eri tasoja. Se tuo mukanaan myös uuden ongelman. Entä jos yksi käsky perustuu edellisen käskyn ulostuloon? Nämä ongelmat ratkaistaan itsenäisesti edistyneen lähettäjän avulla. Se suunnittelee huolellisesti suoritusjärjestyksen, jotta mikään toisen tuotteeseen perustuva käsky ei ole liian lähellä toisiaan. Se käsittelee myös välimuistin poikkeamat pysäköimällä käskyn ja korvaamalla sen valmistuksessa toisella ohjeet, jotka ovat valmiita suoritettavaksi ja jotka eivät vaadi sen tulosta, jatkamalla ohjetta sen jälkeen valmis.
Nämä ratkaisut voivat toimia tiivistetyissä prosessoreissa, mutta niitä tarvitaan superskalaariprosessorissa, joka suorittaa useampaa kuin yhtä käskyä kelloa kohden. Haaraennustaja on myös erittäin hyödyllinen, koska se voi yrittää ennustaa sellaisen ohjeen lopputuloksen, jolla on useampi kuin yksi mahdollinen lopputulos, ja jatkaa olettaen, että se on oikea, ellei toisin todisteta.
Johtopäätös
Liukulinja mahdollistaa prosessorin kaikkien erillisten ominaisuuksien käytön jokaisessa jaksossa. Se tekee tämän ajamalla eri vaiheita eri käskyistä samanaikaisesti. Tämä ei edes lisää paljon monimutkaisuutta suorittimen suunnitteluun. Se myös mahdollistaa useamman kuin yhden käskyn suorittaa yhden vaiheen sykliä kohden.