Haarautumisen ennakointi

Haarautumisen ennakointi () on tietokoneen suorittimen ominaisuus, joka tähtää suorituskyvyn parantamiseen. Jotta käskykannan liukuhihna toimii tehokkaasti on sen vaiheet pidettävä täytettyinä.

Haarautumisen ennakointi pyrkii ennakoimaan miten ehtolause tai toistorakenne tullaan suorittamaan ja parhaassa tapauksessa liukuhihna pysyy täytenä. Pidemmällä liukuhihnalla väärin ennakoinnin kustannus seuraa syvemmällä liukuhihnan vaiheessa.

Toistorakenteet yleensä suoritetaan useita kertoja ja taaksepäin suuntautuvat haarat yleensä suoritetaan. Yksinkertaisin ennakointi katsoo haaran suunnan ja ennakoi taaksepäin suuntautuvan suorittamisen. Tätä kutsutaan staattiseksi haaran ennakoimiseksi koska se ei riipu ohjelmasuorituksen historiasta.

Eteenpäin suuntautuvat haarat ovat vaikeasti ennakoitavissa tietämättä enempää tietystä ohjelmasta. Tätä varten suorittimet käyttävät dynaamista haaran ennakoimista, jolloin käytetään ohjelmasuorituksen historiaa arvioimisessa kumpi haara suoritetaan. Dynaamista ennakointia varten suorittimet pitävät taulua viimeisistä sadoista (tai tuhansista) haarautumiskäskyistä. Yhden bitin dynaaminen ennakointi muistaa suoritettiinko haara viimeksi ja ennakoi tapahtuuko sama seuraavalla kerralla. Kahden bitin dynaaminen ennakointi sisältää neljä tilaa: vahva suoritus, heikko suoritus, heikko ohitus, vahva ohitus.

Virheellisestä ennakoinnista aiheutuva suorituskykyhaitta voi olla merkittävästi suurempi kuin liukuhihnan uudelleentäyttöön tarvittava aika.

Haarautumisen ennakointiin perustuvaa spekulatiivista suoritusta käytettiin jo IBM 7030 -tietokoneessa.

Spectre-tietoturva-aukko perustuu haarautumisen ennakoinnissa ja spekulatiivisessa suorituksessa olevaan virheeseen.

Lähteet

Aiheesta muualla 
 Branch Prediction Is Not A Solved Problem: Measurements, Opportunities, and Future Directions (PDF) 

Suorittimet