From Wikipedia, the free encyclopedia
Liukuhihna (engl. instruction pipeline) suorittimen käskykannassa lisää suorittimen suorituskykyä jakamalla käskyn suoritus useampaan vaiheeseen (engl. stage), jolloin joka vaiheessa voi suorittaa eri käskyä.[1] Joka vaiheessa on vain osa käskyn tarvitsemasta logiikasta, jolloin kellotaajuus on käytännössä nopeampi: jokaisen käskyn suoritusaika on sama kuin ilman liukuhihnaa.[1]
Esimerkiksi MIPS-arkkitehtuurissa vaiheet ovat:[2]
Useita liukuhihnan optimointiin tarkoitettuja tekniikoita kehitettiin IBM 7030:tä varten.[3] Liukuhihnoitus on jo varhaisissa mikroprosessoreissa tunnettu tekniikka. Esimerkiksi MOS 6502 ja Zilog Z80 osaavat hakea seuraavan käskyn muistista, kun edellisen suoritus on kesken (prefetch), eli nykytermein niillä on kaksivaiheinen liukuhihna. Intelin tekemä tutkimus havaitsi, että jo tämä yksinkertainen liukuhihnoitus paransi suorituskykyä 35 % lisäten transistorimäärää vain 15 %.[4]
Yksinkertaisessa tapauksessa käskyt ovat kiinteästi ajoitettuja eli ne suoritetaan ohjelman järjestyksessä.[5] Suoritin voi käyttää dynaamista ajoitusta eli epäjärjestyksessä suorittamista (engl. out-of-order execution) vähentääkseen suoritusajan hukkaamista.[5]
Esimerkkitapaus, jossa on kaksi yhteenlaskua:[5]
ld r1, 0(r2) // lataa r1 muistiin r2:n osoittamasta paikasta add r2, r1, r3 // r2 := r1 + r3 add r4, r3, r5 // r4 := r3 + r5
Oletetaan, että r3 ja r5 ovat jo luettuna ja lataus (ld
) aiheuttaa välimuistihutin, jolloin liukuhihna sakkaa latauksen ajaksi.[5] Myöhempi yhteenlasku ei riipu r1:stä ja se voidaan suorittaa aiemmin.[5]
Jotta liukuhihnasta saadaan paras hyöty on sen kaikki vaiheet hyödynnettävä (pidettävä täysinä).[6] Useat tekijät kuten ehtolauseet ja toistorakenteet aiheuttavat liukuhihnan sarjamuotoisuudelle ongelmia.[6]
Esimerkkitapaus:[6]
if (x > 0) { a=0; b=1; c=2; } d=3;
Jos x on suurempi kuin nolla käskyt liukuhihnassa ovat oikein koska if
lauseen runko suoritetaan.[6] Jos taas x on pienempi tai yhtäsuuri kuin nolla if
lauseen runkoa ei suoriteta ja liukuhihna on vähemmän tehokas koska se joutuu perumaan käskyjen tekemiä muutoksia suorittimen tilaan.[6]
Ennakoimalla suorituksen tulosta voitaisiin liukuhihnan vaiheet pitää täysinä ja saada parempi suorituskyky.[6] Haarautumisen ennakointi (engl. branch prediction) pyrkii ennakoimaan miten ehtolause tullaan suorittamaan ja parhaassa tapauksessa liukuhihna pysyy täytenä.[6]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.