ed: If I remember my numbers right, these predictors buy a few percentage of performance improvement across entire benchmark suites, which is quite hard to get through a purely microarchitectural feature.
ed: If I remember my numbers right, these predictors buy a few percentage of performance improvement across entire benchmark suites, which is quite hard to get through a purely microarchitectural feature.
While local and global predictors describe which direction a direct branch may take, they do little to help indirect branches.
Take the example jmp [rax]. While condition codes for direct branches can be speculated, the value contained within rax isn't easily speculated either.
However, we can make note of where jmp [rax] took us the last time we executed. This mapping from branch instruction address to target address is precisely what a BTB is.
As for when they were invented, I believe the first paper on them is Lee83; I'm pretty sure the original Pentium had one.
Lee83 http://www.eecs.berkeley.edu/Pubs/TechRpts/1983/CSD-83-121.p...