Haswell,Sandy Bridge,Ivy Bridge和Skylake的BTB大小?

时间:2016-07-21 19:33:50

标签: x86 cpu intel cpu-architecture branch-prediction

有没有办法确定或找到Haswell,Sandy Bridge,Ivy Bridge和Skylake Intel处理器的分支目标缓冲区大小的资源?

1 个答案:

答案 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/agnerhttps://github.com/mattgodbolt/agner/blob/master/tests/btb_size.pyhttps://github.com/mattgodbolt/agner/blob/master/tests/branch.py