Siirete ennustamine

Joonis 1: Näide kuidas käsud liiguvad läbi 4-sammulisest konveierist ehk torust. Ühte värvi kastid kujutavad ühte instruktsiooni. Kui lilla käsk on hüpe, mis sõltub rohelise käsu tulemusest, siis ei saa hüppele järgnevat sinist käsku kohe kindlalt sisse lugeda, sest ei ole teada, kas hüpe toimub ja võib-olla tuleb hoopis mõni teine käsk sisse lugeda. Üks võimalus on oodata, kuni roheline käsk saab täidetud, aga see tekitab viivise. Parem variant on siirete ennustamine

Siirete ennustamine (inglise keeles branch prediction) on programmi koodis oleva siirde ehk hüppe ennustamine, kas hüppe toimub või mitte, enne, kui see on kindlalt teada. Siirete ennustamise eesmärgiks on protsessori tööd kiirendada. Kuna instruktsioonide konveier on mitmesammuline ja käsu täitmiseks kulub mitu takti, siis hüppele järgnevaid käske ei saa alati kohe mällu laadida, vaid tuleb oodata, kuni eelnevad käsud on konveieri läbinud ja nende tulemuse järgi on teada, kas hüpe toimub. Selle ootamise vältimiseks kasutatakse siirete ennustamist ja selle efektiivsusel on tänapäeva protsessorite kiiruse määramisel oluline roll.

Siire ehk hüpe tehakse vastava protsessori instruktsiooniga. Selle instruktsiooniga muudetakse programmiloenduri väärtust ja hakatakse uusi käske lugema teiselt aadressilt, mis ei pruugi kohe järgneda hüppe enda aadressile. Hüpped on tihtipeale tingimuslikud ja võivad sõltuda näiteks staatusregistri lippude väärtustest. Osadel juhtudel hüpe sooritatakse ja osadel juhtudel mitte. Et hüppe sooritamine või mittesooritamine oleks kindel, peavad varasemad käsud olema täidetud, millest see otsus sõltub ja mis näiteks staatusregistri väärtusi muudavad.

Kui siirete ennustamist ei ole, siis peab protsessor ootama, kuni siirde toimumise määravad käsud täidetakse ja alles siis saab õigelt aadressilt järgmised käsud sisse lugeda. Siirete ennustamisega üritatakse seda aja raiskamist vältida ja hakatakse kohe ennustatavaid käske täitma. Kui hiljem selgub, et ennustati valesti, siis nende käskude tulemused jäetakse kõrvale ja hakatakse õigeid käske täitma. Käskude kõrvalejätmisel tekkiv ümberlülitamine tekitab viivise konveieri töös, aga ilma ennustamiseta tekiks see viivis alati. Kuna tänapäeva protsessoritel on üpris pikad konveierid, võib käsu tulemuse ootamine kesta kümneid takte.

Kui siiret esimest korda kohatakse, siis on vähe informatsiooni, mille põhjal ennustada. Siirete ennustamise käigus võidakse meelde jätta, kas teatud hüppe tehti või mitte. Edaspidi saab sama siirde juures selle järgi ennustada, kas hüpe pigem toimub või mitte. Erinevate algoritmide abil on võimalik ennustada, et hüpe tehakse tihedamini kui jäetakse tegemata, või et hüpe tehakse iga teine kord.


From Wikipedia, the free encyclopedia · View on Wikipedia

Developed by Nelliwinne