是否有任何方法或任何资源可以确定Haswell、Sandy Bridge、Ivy Bridge和Skylake Intel处理器的分支目标缓冲区大小?
查看Agner Fog的软件优化资源,http://www.agner.org/optimize/
BTB应在"英特尔、AMD和VIA CPU的微体系结构:汇编程序员和编译器制造商的优化指南"中,http://www.agner.org/optimize/microarchitecture.pdf
3.7 Intel Sandy Bridge和Ivy Bridge 中的分支预测
BTB组织。Sandy Bridge中的分支目标缓冲区更大根据非官方传言,尼哈莱姆的情况比尼哈莱姆要好。目前还不知道它是像Core 2和更早的处理器那样有一个级别,还是像Nehalem那样有两个级别。它每16字节最多可以处理4条调用指令密码如果每16字节代码中有3个以上的分支指令,则条件跳转的效率较低。
3.8 Intel Haswell、Broadwell和Skylake 中的分支预测
BTB组织。分支目标缓冲区的组织结构未知。它看起来相当大。
英特尔可能会在"英特尔64与IA-32体系结构优化参考手册"中介绍一些数据http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html关于"3.4.1BranchPredictionOptimization",但仍然没有大小。
这看起来可能很奇怪,但1998-2000年cpuid中没有关于BTB的信息:http://www.installaware.com/forums/oldattachments/02142006163/tstcpuid.c(Gerald J.Heim,德国图宾根大学)http://www.felixcloutier.com/x86/CPUID.html或者在英特尔员工的一些公开材料中。。。
* This table describes the possible cache and TLB configurations * as documented by Intel. For now AMD doesn't use this but gives * exact cache layout data on CPUID 0x8000000x. * * MAX_CACHE_FEATURES_ITERATIONS limits the possible cache information * to 80 bytes (of which 16 bytes are used in generic Pentii2). * With 80 possible caches we are on the safe side for one or two years. * * Strange enough no BHT, BTB or return stack data is given this way...
BTB应该有一些性能监测单元(PMU)计数器,并且有实验可以通过运行特殊的测试程序来获得BTB的大小,请检查http://xania.org/201602/haswell-and-ivy-btbMatt Godbolt
结论
从这些结果来看,Ivy Bridge(因此可能还有Sandy Bridge)对无条件分支的BTB查找使用了几乎相同的策略,尽管表的大小更大:4096个条目分为1024组4种方式。
对于Haswell来说,似乎已经采取了一种确定集合的新方法,以及一种驱逐条目的新方法。
以及更多关于分支预测及其事件的帖子:
- http://xania.org/201602/bpu-part-one更新的英特尔处理器上的静态分支预测
- http://xania.org/201602/bpu-part-two分支预测-第二部分
- http://xania.org/201602/bpu-part-three当代英特尔芯片中的BTB)
- http://xania.org/201602/bpu-part-four分支目标缓冲区,第2部分
根据Agner的测试,他的代码是公开的:https://github.com/mattgodbolt/agner:https://github.com/mattgodbolt/agner/blob/master/tests/btb_size.py,https://github.com/mattgodbolt/agner/blob/master/tests/branch.py