众所周知,随机分支会花费大量开销。 And there was a post in SO answering such question.
许多CPU架构中的跳转指令都可以看到类似的性能影响。 And there was a post in SO for such theme as well
因此,如果您使用函数指针等编程模式或只是普通的可继承的基于C ++类的函数调用,我们必须支付分支未命中的成本。
即使对于最先进的硬件分支预测算法也只能进行基于全局共享地址历史的分支预测,也许它可能推测性地获取分支目标地址代码等等。
但根据定义,它不适用于第一次执行。
许多嵌入式设备,智能手机等应该要求最高性能
调用数百万个函数调用,并且可能不希望更改软件体系结构,就像将所有间接跳转转换为直接跳转一样......
如果条件如下,
以下是否能达到最佳效果?
我想知道任何动态/静态代码重写间接直接跳转的例子。
我发现的论文是在源代码级别将虚函数调用转换为静态函数调用,但是对于软件开发人员来说,二进制链接时间优化似乎更好。
答案 0 :(得分:2)
你是说你可以近乎确定地预测分支将去哪里,但CPU不能?当分支预测失败时会产生沉重的成本;如果您的分支预测表很热并且每次都在达到相同的路径,我认为分支预测可能会成功。 (如果它不一致,那么显然预测不能100%成功。)
答案 1 :(得分:1)
CPU已经为您执行此操作,请参阅Branch Prediction。
答案 2 :(得分:1)
对于函数指针和虚函数,您需要预测分支的目标,因为您无法在编译时知道接下来需要执行哪些代码。