Survey of Branch Predictors used in open-source RISC-V cores
No Thumbnail Available
Files
Vaismaa_Olli_2024.pdf (840.5 KB) (opens in new window)
Aalto login required (access for Aalto Staff only).
URL
Journal Title
Journal ISSN
Volume Title
Sähkötekniikan korkeakoulu |
Bachelor's thesis
Electronic archive copy is available locally at the Harald Herlin Learning Centre. The staff of Aalto University has access to the electronic bachelor's theses by logging into Aaltodoc with their personal Aalto user ID. Read more about the availability of the bachelor's theses.
Unless otherwise stated, all rights belong to the author. You may download, display and print this publication for Your own personal use. Commercial use is prohibited.
Authors
Date
2024-09-16
Department
Major/Subject
Elektroniikka ja sähkötekniikka
Mcode
ELEC3013
Degree programme
Sähkötekniikan kandidaattiohjelma
Language
en
Pages
29
Series
Abstract
The RISC-V instruction set architecture has matured enough to spawn many open-source processor core implementations. The high performance demands of these rapidly advancing cores naturally inflates the length of their instruction pipelines. Branch instructions pose a major problem for these instruction pipelines as the processor is unable to load new instructions before the previous branch instruction is resolved. Speeding up the pipeline is therefore essential to improving the overall performance of pipelined RISC-V processors. This problem is tackled by branch prediction, a form of speculative execution aiming to improve the efficiency of the pipeline. This thesis reviews the branch predictors used in five notable open-source RISC-V cores. CVA6, BOOM, Rocket, VexRISCV and NaxRISCV were chosen for the evaluation. Each core is analyzed to understand what branch predictor techniques are implemented and how they are designed. This examination is supported by comprehensively explaining branch prediction starting from fundamentals up to advanced predictor types. The evaluation provides insights on the current state of branch prediction in open-source RISC-V projects. Furthermore, it enables new RISC-V projects to make informed decisions on the most suitable branch predictor for the specific needs. Various branch predictor implementations were found across the projects. The branch predictors differed for example by the used programming language, the misprediction delay and the used data structures. Due to these significant differences, it is impossible to identify a single best branch predictor type for all RISC-V processors. Every new branch predictor therefore needs to be designed to fit the specific requirements of the processor such as power consumption, area constraints and design complexity.Avoimen lähdekoodin käskykanta-arkkitehtuuri RISC-V on kehittynyt riittävän pitkälle mahdollistaakseen useita erilaisia prosessoriydintoteutuksia. Erilaisia RISC-V-prosessoreita onkin kehitetty sekä pieniin sulautettuihin järjestelmiin että suuriin datakeskuksiin. Erityisesti avoimen lähdekoodin RISC-V-prosessorit ovat akateemisesti kiinnostavia, sillä kuka tahansa voi tarkastella ja kehittää niiden sisäistä rakennetta. Yksi tärkeimmistä keinoista lisätä prosessorien suorituskykyä on liukuhihnoitus. Liukuhihnoitus mahdollistaa useamman prosessorikäskyn suorittamisen samanaikaisesti, mikä myös kasvattaa prosessorin kokonaissuorituskykyä. Eräs käskytyyppi, haarautumiskäsky, on kuitenkin ongelmallinen näille liukuhihnoille. Esimerkiksi ohjelmakoodin ehtolauseet ja silmukkarakenteet luovat haarautumiskäskyjä. Prosessori ei voi jatkaa käskyjen lataamista liukuhihnaan ennen kuin edeltävät haarautumiskäskyt on käsitelty liukuhihnan myöhemmissä vaiheissa. Tämä aiheuttaa merkittäviä viiveitä ja heikentää prosessorin suorituskykyä, sillä prosessorin on jatkuvasti odotettava näiden käskyjen suorittamista ennen kuin se voi edetä seuraaviin käskyihin. Tämä ongelma voidaan ratkaista haaraennustimilla. Haaraennustimet ovat rakenteita prosessorin sisällä, mitkä spekuloivat haarautumiskäskyjen suuntaa sekä kohdeosoitetta. Ne mahdollistavat sen, että liukuhihna on jatkuvasti täynnä prosessorikäskyjä, eivätkä haarautumiskäskyt aiheuta yhtään viiveitä. Tämä työ tutkii ja vertailee haaraennustimia viidessä avoimen lähdekoodin RISC-V-projektissa: CVA6, BOOM, Rocket, VexRISCV ja NaxRISCV. Tutkimuksen tarkoituksena on antaa kattava ymmärrys näissä projekteissa käytetyistä haaraennustintyypeistä ja rakenteista. Lisäksi tarkastelu antaa ymmärryksen RISC-V-projektien haarautumisen ennakoinnin tämänhetkisestä tilanteesta, sekä mahdollistaa tulevien RISC-V-projektien käyttämään tätä tietoa sopivan haaraennustimen valinnassa. Arvioiduista projekteista edistynein haaraennustin oli BOOM-prosessoriytimessä. Se käytti TAGE-pohjaista haaraennustinta. Sekään ei silti ole paras mahdollinen haaraennustin pelkän väärinennustusprosentin kannalta, sillä erilaiset koneoppimiseen ja neuroverkkoihin perustuvat haaraennustimet voisivat tarjota parempaa suorituskykyä. Ne ovatkin hyvä tulevaisuuden tutkimus- ja kehityskohde avoimen lähdekoodin RISC-V-ytimissä. Tällä hetkellä niitä on toteutettu vain suljetun lähdekoodin järjestelmiin. Tarkastelun tuloksena projekteissa havaittiin muitakin hyvin erilaisia haaraennustimia, mikä heijastaa RISC-V-arkkitehtuurin monipuolisuutta ja muokattavuutta. Eroavaisuuksia olivat esimerkiksi käytetyt ohjelmointikielet, väärinennustusviive ja käytetyt tietorakenteet. Suurten eroavaisuuksien vuoksi on mahdotonta sanoa yksittäistä parasta haaraennustinta kaikille RISC-V-prosessoreille, vaan jokainen uusi haaraennustin täytyykin suunnitella ottaen huomioon esimerkiksi niiden suuresti eroavat tehovaatimukset ja pinta-alarajoitukset. Lisäksi täytyy huomioida edistyneempien ennustintyyppien lisäämä rakenteellinen monimutkaisuus ja sen tuomat kustannukset.Description
Supervisor
Turunen, MarkusThesis advisor
Korsman, AleksiKeywords
RISC-V, branch prediction, open-source, branch instruction