有没有办法确定或找到Haswell,Sandy Bridge,Ivy Bridge和Skylake Intel处理器的分支目标缓冲区大小的资源?
答案 0 :(得分:8)
通过Agner Fog检查软件优化资源,http://www.agner.org/optimize/
BTB应该出现在“Intel,AMD和VIA CPU的微体系结构:汇编程序员和编译器制造商的优化指南”中,http://www.agner.org/optimize/microarchitecture.pdf
3.7英特尔Sandy Bridge和Ivy Bridge的分支预测
BTB组织。 Sandy Bridge中的分支目标缓冲区更大 根据非正式的谣言,比在Nehalem。目前尚不清楚它是否有一个级别,如Core 2和更早的处理器,或Nehalem中的两个级别。它每16个字节最多可以处理四个调用指令 码。如果每16字节代码有超过3个分支指令,则条件跳转效率较低。
3.8英特尔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.1分支预测优化”中的一些数据,但仍然没有大小。
它可能看起来很奇怪,但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大小,请查看Matt Godbolt的http://xania.org/201602/haswell-and-ivy-btb
结论
从这些结果来看,似乎Ivy Bridge(因此可能是Sandy Bridge)对无条件分支的BTB查找使用了几乎相同的策略,尽管有更大的表大小:4096个条目分为1024组4种方式。
对于Haswell来说,似乎采用了一种新方法来确定集合,以及一种驱逐条目的新方法。
以及关于分支预测及其事件的更多帖子:
他的代码是公开的,基于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