My question is how they co-exist and work together in modern CPU architecture?
How branch predictor and branch target buffer co-exist?
4.2k views Asked by fyang29 At
1
There are 1 answers
Related Questions in CPU
- "android-22" can't be found in android SDK
- how to merge both cpp and js support in cocos2d to use via command prompt
- Mixing a CocosSharp game with UIViewControllers
- EXE_BAD_BADACCESS trying to access GKMatch?
- Adding new methods to Cocos2d-x SimpleAudioEngine
- gamesalad to unity3D?
- Cocos2D: Recognize multiple tiles next to each other
- cocos2d-js draw circle not instantly
- Xcode 6: Semantic issues while compiling cocos2d-x project
- Static linking error when compiling myGame in Cocos2d-x v3.6
Related Questions in CPU-ARCHITECTURE
- "android-22" can't be found in android SDK
- how to merge both cpp and js support in cocos2d to use via command prompt
- Mixing a CocosSharp game with UIViewControllers
- EXE_BAD_BADACCESS trying to access GKMatch?
- Adding new methods to Cocos2d-x SimpleAudioEngine
- gamesalad to unity3D?
- Cocos2D: Recognize multiple tiles next to each other
- cocos2d-js draw circle not instantly
- Xcode 6: Semantic issues while compiling cocos2d-x project
- Static linking error when compiling myGame in Cocos2d-x v3.6
Related Questions in BRANCH-PREDICTION
- "android-22" can't be found in android SDK
- how to merge both cpp and js support in cocos2d to use via command prompt
- Mixing a CocosSharp game with UIViewControllers
- EXE_BAD_BADACCESS trying to access GKMatch?
- Adding new methods to Cocos2d-x SimpleAudioEngine
- gamesalad to unity3D?
- Cocos2D: Recognize multiple tiles next to each other
- cocos2d-js draw circle not instantly
- Xcode 6: Semantic issues while compiling cocos2d-x project
- Static linking error when compiling myGame in Cocos2d-x v3.6
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Popular Tags
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
You've got it slightly reversed. On every fetch you index into your branch predictor, which tells you whether the instruction that you have just received will be decoded into a taken branch. If not, you fetch the next sequential address. But if your branch predictor says that it will be a taken branch, you don't know which instruction to fetch next, since you haven't decoded this instruction yet. So in order to not waste cycles waiting for the branch to resolve, you would use a Branch Target Buffer(or BTB). A BTB stores previous addresses where branch redirected the control flow. Using this mechanism you are trying to predict where the control flow will be redirected this time. This technique has 100% success rate for unconditional branches, function calls, and returns when paired with a Return Address Stack. On conditional branches the success rate is slightly lower, but is still really good given high temporal locality of branch targets. As an example you could consider a backwards branch of a loop, which will always branch to the same location.
When the branch instruction is actually resolved (usually in Decode or Execute stage of the pipeline, depending on the implementation), you will adjust the values in both the branch predictor and the BTB in order to have more up to date information for future predictions.
Here is a pictorial explanation how BTB lookup and update happen: