spr*_*aff 30 cpu instruction-set cpu-architecture cpu-speed
几年前,我正在学习x86汇编程序,CPU流水线,缓存未命中,分支预测以及所有爵士乐.
这是两个半的故事.我在处理器viz指令重新排序,缓存预加载,依赖性交错等方面阅读了冗长流水线的所有优点.
缺点是规范的任何偏差都是非常昂贵的.例如,IIRC在早期千兆赫时代的某个AMD处理器每次通过指针(!)调用函数时都会有40个周期的惩罚,这显然是正常的.
这不是一个可以忽略不计的"别担心"号码!请记住,"良好设计"通常意味着"尽可能地考虑您的功能"和"在数据类型中编码语义",这通常意味着虚拟接口.
权衡是不执行此类操作的代码每个周期可能获得两个以上的指令.这些是在编写高性能C++代码时需要担心的数字,这些代码在对象设计上很重要并且可以解决数字运算问题.
据我所知,随着我们进入低功耗时代,长CPU流水线趋势已经逆转.这是我的问题:
最新一代x86兼容处理器是否仍然遭受虚拟功能调用,坏分支预测等的严重处罚?
osg*_*sgx 28
早期千兆赫时代的AMD处理器每次调用一个函数时都会有40个周期的惩罚
嗯..这么大..
有一种"间接分支预测"方法,它有助于预测虚拟函数跳转,如果前一段时间存在相同的间接跳转.对于第一个和错误预测的virt,仍然会受到惩罚.功能跳跃.
支持从简单的"预测权利,当前和仅当前一个间接分支完全相同"到非常复杂的两级数十或数百个条目,检测到单个间接jmp指令的2-3个目标地址的周期性交替.
这里有很多进化......
http://arstechnica.com/hardware/news/2006/04/core.ars/7
首先介绍Pentium M:...间接分支预测器.
间接分支预测器
因为间接分支从寄存器加载它们的分支目标,而不是像直接分支那样立即使用它们,所以它们很难预测.Core的间接分支预测器是一个表,用于存储有关前端遇到的每个间接分支的首选目标地址的历史信息.因此,当前端遇到间接分支并将其预测为已采用时,它可以要求间接分支预测器将其指向分支可能需要的BTB中的地址.
http://www.realworldtech.com/page.cfm?ArticleID=rwt051607033728&p=3
间接分支预测最初是在英特尔的Prescott微体系结构和后来的Pentium M中引入的.
所有分支误预测的16-50%是间接的(平均29%).间接分支错误预测的真正价值在于许多较新的脚本或高级语言,例如Ruby,Perl或Python,它们使用解释器.其他常见的间接分支常见元凶包括虚函数(在C++中使用)和对函数指针的调用.
http://www.realworldtech.com/page.cfm?ArticleID=RWT102808015436&p=5
AMD采用了其中一些改进措施; 例如,在Barcelona和后来的处理器中添加间接分支预测器数组.但是,与Core 2相比,K8具有较旧且不太准确的分支预测值.
http://www.agner.org/optimize/microarchitecture.pdf
3.12旧处理器上的 间接跳转间接跳转,间接调用和返回可能每次都转到不同的地址.间接跳转或间接呼叫的预测方法是,在早于PM和K10的处理器中,只是预测它将与上次执行时的目标相同.
和同样的pdf,第14页
间接跳转预测间接跳转或调用是具有两个以上可能目标的控制转移指令.C++程序可以使用...虚函数生成间接跳转或调用.通过将寄存器或内存变量或索引数组指定为跳转或调用指令的目标,在汇编中生成间接跳转或调用.许多处理器只为间接跳转或呼叫提供一个BTB条目.这意味着它总是会被预测到与上次相同的目标.随着具有多态类的面向对象编程变得越来越普遍,越来越需要预测具有多个目标的间接调用.这可以通过为遇到的每个新跳转目标分配新的BTB条目来完成.历史缓冲区和模式历史记录表必须为每个跳转事件提供多于一位信息的空间,以便区分两个以上的可能目标.PM是第一个实现此方法的x86处理器.关于p的预测规则.图12仍然适用于可以完美预测的理论最大周期为mn的修改,其中m是每个间接跳跃的不同目标的数量,因为存在mn个不同的可能的n长度子序列.但是,如果超过BTB或模式历史表的大小,则无法达到该理论最大值.
Agner的手册对许多现代CPU中的分支预测器以及每个制造商的cpus预测器的演变(x86/x86_64)进行了更长时间的描述.
还有很多理论上的"间接分支预测"方法(在Google学者看来); 甚至维基说了一些关于它的话http://en.wikipedia.org/wiki/Branch_predictor#Prediction_of_indirect_jumps /
对于来自agner微观的Atoms:
间接分支的预测根据我的测试,Atom没有间接分支的模式预测器.预计间接分支将与上次分支目标相同.
因此,对于低功率,间接分支预测并不是那么先进.Via Nano也是如此:
预计间接跳跃会与上次跳转到同一目标.
我认为,较短的低功率x86管道具有较低的罚分,7-20个刻度.