有没有方法可以确定或者找到Haswell、Sandy Bridge、Ivy Bridge和Skylake英特尔处理器的分支目标缓冲区大小?
有没有方法可以确定或者找到Haswell、Sandy Bridge、Ivy Bridge和Skylake英特尔处理器的分支目标缓冲区大小?
您可以通过Agner Fog的软件优化资源了解更多信息,网址为:http://www.agner.org/optimize/
BTB应该包含在《英特尔、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组织。 分支目标缓冲区的组织方式尚不清楚。 看起来相当大。
英特尔可能会在《Intel 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年间的cpu id中没有有关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...
应该有一些性能监控单元(PMU)计数器用于BTB,有实验可以从运行特殊测试程序中获取BTB大小,请查看Matt Godbolt的http://xania.org/201602/haswell-and-ivy-btb。结论:从这些结果来看,似乎Ivy Bridge(因此很可能是Sandy Bridge)对于无条件分支的BTB查找使用了几乎相同的策略,尽管表格大小更大:4096个条目分为1024组,每组4路。对于Haswell,似乎采取了一种新的确定集合和清除条目的方法。他还发表了关于分支预测及其事件的更多帖子: