En grenprediktionsenhet ( branch prediction unit ) är en enhet som ingår i mikroprocessorer med en pipeline-arkitektur som förutsäger om ett villkorligt hopp kommer att utföras i ett körbart program. Förutsägelse av gren minskar rörledningens vilotid genom att förladda och exekvera instruktioner som måste exekveras efter att en villkorlig greninstruktion exekveras. Förutsägelse av grenar spelar en avgörande roll, eftersom det i de flesta fall (noggrannheten för förutsägelse av grenar i moderna processorer överstiger 90%) gör det möjligt att optimalt använda processorns beräkningsresurser [1] .
Utan grenförutsägelse måste pipelinen vänta tills den villkorliga greninstruktionen exekveras för att göra nästa hämtning. Branch predictor undviker att slösa tid på att försöka lista ut en gren. Grenen väljs baserat på tidigare resultat av tillståndskontrollen. Den avsedda grenen laddas sedan och exekveras delvis. Om det sedan visar sig att förutsägelsen var felaktig, kasseras resultaten av den felaktiga grenen och den korrekta grenen laddas in i pipelinen, vilket orsakar en fördröjning. Mängden fördröjning beror på transportörens längd. För Intel Core i7-processorn är pipelinedjupet 14 steg.
"Jump prediction" bör särskiljas från "jump address prediction" . Syftet med förgreningsadressförutsägelse är att välja adressen för en villkorad eller ovillkorlig förgrening innan avkodning och exekvering av förgreningsinstruktionen.
Det finns två huvudmetoder för grenförutsägelse:
Statiska grenprediktionsmetoder är de enklaste. Kärnan i dessa metoder är att olika typer av övergångar:
I moderna processorer används statiska metoder endast när dynamiska metoder inte kan användas.
Ett exempel på trivial statisk förutsägelse implementerad i tidiga processorer av SPARC- och MIPS-arkitekturerna .
I detta fall görs antagandet att den villkorliga grenen aldrig kommer att utföras.
Ett exempel på statisk förutsägelse implementerad i moderna processorer.
I det här fallet görs antagandet att någon bakåtövergång kommer att utföras och någon framåtgående övergång inte. Metoden används som ett "skyddsnät".
2a ISIP tat
Navigationshistoriktabellen analyseras. Tabellen innehåller:
Tabellen uppdateras efter varje övergång. Algoritmen ändrar valet av förgrening om resultatet av villkoret avvek två gånger från de tidigare resultaten. Genom att använda de minst signifikanta bitarna av instruktionsadressen kan flera instruktioner förutsägas innan de avkodas.
För den första nivån utförs historiken för de sista k grenarna, för den andra nivån pekar k på malltabellen.
Varje villkorlig gren i ett omfattning har sin egen grenhistorik. Övergångsmönster kan vara delade eller specifika.
Global grenförutsägelse lagrar inte separat historik för varje övergång, utan använder den allmänna historiken. Alla mönster i övergångar påverkar denna historia, men irrelevanta register kan förorena historien.
En hybridprediktor kan välja resultaten av de mest framgångsrika prediktorerna baserat på historia, eller använda majoritetsfunktionen av ett udda antal prediktorer.
Loopprediktorn kan använda loopräknaren för att räkna antalet hopp till början av loopen. Denna prediktor kan användas i en hybridprediktor.
En indirekt gren kan ha fler än två grenar. De senaste processorerna har möjlighet att välja mer än två villkor med hjälp av en adaptiv prediktor på två nivåer. Processorer utan stöd för indirekt grenförutsägelse kan använda statisk förutsägelse eller ta det tidigare värdet.
Processor Technologies | Digital|||||||||
---|---|---|---|---|---|---|---|---|---|
Arkitektur | |||||||||
Instruktionsuppsättning arkitektur | |||||||||
maskinord | |||||||||
Parallellism |
| ||||||||
Genomföranden | |||||||||
Komponenter | |||||||||
Energihantering |