我正在优化一个程序,并试图避免分支错误预测。我有一个类的两个对象。在类的主要函数中,有几个 if
分支。每个对象在每个分支上都采取不同的方向,并且它们各自依次运行该函数。我的问题:
由于它们是同一类的成员,因此共享该函数,它们是否也共享相同的分支预测?本质上,我是不是让系统变得 TFTFTTF...
或者,由于它们是自己的对象,因此它们有自己的分支预测,因此保持一致的预测(TTTTTTT ...和 FFFFFFFF ...)
最佳答案
是的,该方法在类的实例之间共享。
这也意味着预测是共享的。
但是,分支预测不仅仅限于“最后”时间。处理器将记住一些最后的结果并识别“简单”(循环)模式。因此,如果您不断地在两个对象之间交换并且模式最终为 TFTPFTTFFF
,那么处理器将正确猜测下一个结果将是 T
。
但是,从语义的角度来看,您是否考虑过使用基类和两个不同的派生类(+通常的虚拟机制)?
关于c++ - 同一类对象之间的分支预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7982196/