同一类对象之间的分支预测

时间:2011-11-02 14:40:38

标签: c++ class optimization branch

我正在优化一个程序,并试图避免分支错误预测。我有一个班级的两个对象。在类的主要功能中有几个if分支。每个对象在每个分支上采用不同的方向,并且它们各自一个接一个地运行该功能。我的问题:

由于他们是同一个类的成员,因此共享该功能,他们是否也共享相同的分支预测?基本上,我是在制作系统的TFTFTFTF ......

或者,因为它们是自己的对象,所以它们有自己的分支预测,因此保持一致的预测(TTTTTTT ...和FFFFFFFF ...)

3 个答案:

答案 0 :(得分:2)

不要担心像branch prediction这样的低级细节(它会因处理器的一个型号而异)。将该优化留给编译器(这可能已经足够了)。

如果您想改进您的应用程序,请在算法本身上进行更多工作。并使用剖析&测量。不要忘记过早优化是邪恶的

答案 1 :(得分:2)

由于分支错误预测通常会花费大约10到20个周期,因此当它在一个循环中执行数百次,每次都是非常重要的。无论如何,现代CPU在分支预测方面表现相当不错,因此很难担心这类事情(与5 - 10年前相比)。

答案 2 :(得分:2)

是的,该方法在类的实例之间共享。

这也意味着预测是共享的。

然而,分支预测比“最后”时间更多。处理器将记住一些最后的结果并识别“简单”(循环)模式。因此,如果您经常在两个对象之间切换并且模式结束TFTFTFTFTF,那么处理器将正确猜测下一个结果将是T

但是,从语义的角度来看,您是否考虑过使用基类和两个不同的派生类(+通常的虚拟机制)?