Branch Prediction¶
This chapter discusses how BOOM predicts branches and then resolves these predictions.
BOOM uses two levels of branch prediction - a fast Next-Line Predictor (NLP) and a slower but more complex Backing Predictor (BPD) [1]. In this case, the NLP is a Branch Target Buffer and the BPD is a more complicated structure like a GShare predictor.
- The Next-Line Predictor (NLP)
- The Backing Predictor (BPD)
- Making Predictions
- Jump and Jump-Register Instructions
- Updating the Backing Predictor
- Managing the Global History Register (GHR)
- The Fetch Target Queue (FTQ) for Predictions
- Rename Snapshot State
- The Abstract Branch Predictor Class
- The Two-bit Counter Tables
- The GShare Predictor
- The TAGE Predictor
- Other Predictors
[1] | Unfortunately, the terminology in the literature gets a bit muddled here in what to call different types and levels of branch predictor. Literature has references to different structures; “micro-BTB” versus “BTB”, “NLP” versus “BHT”, and “cache-line predictor” versus “overriding predictor”. Although the Rocket core calls its own predictor the “BTB”, BOOM refers to it as the Next-Line Predictor (NLP) , to denote that it is a combinational predictor that provides single-cycle predictions for fetching “the next line”, and the Rocket BTB encompasses far more complexity than just a “branch target buffer” structure. Likewise, the name Backing Predictor (BPD) was chosen to avoid being overly descriptive of the internal design (is it a simple BHT? Is it tagged? Does it override the NLP ?) while being accurate. If you have recommendations for better names, feel free to reach out! |