3

背景

众所周知,随机分支会花费大量开销。 SO中有一个帖子回答了这样的问题。

在许多 CPU 架构中,跳转指令可以看到类似的性能影响。在 SO 中也有针对此类主题的帖子

因此,如果您使用诸如函数指针之类的编程模式或只是基于普通可继承 C++ 类的函数调用,我们必须付出分支未命中的代价。

即使对于最先进的硬件分支预测算法也只能进行基于全局共享地址历史的分支预测,并且可能会推测性地获取分支目标地址代码等。

但根据定义,它不适用于第一次执行。

许多嵌入式设备、智能手机等都需要在

  • 开机时间
  • 第一次执行像浏览器这样的应用程序

它调用了数百万个函数调用,并且可能不想显着改变软件架构,比如将所有间接跳转转换为直接跳转......

如果条件如下,

条件:

  • 必须以最高速度运行
    • 在第一次运行
    • 跳跃对 cpu 来说看起来完全随机

以下是最好的结果吗?

而且我想知道任何将动态/静态代码重写为间接跳转到直接跳转的示例。

如何获得最佳性能:

我发现的论文是在源代码级别将虚拟函数调用转换为静态函数调用,但从软件开发人员的角度来看,二进制链接时间优化似乎更好。

4

3 回答 3

2

你是说你可以几乎确定地预测分支会去哪里,但 CPU 不能?当分支预测失败时,会产生巨大的成本;如果您的分支预测表很热并且每次都在同一条路径上,我认为分支预测可能会成功。(如果不一致,那么显然预测无法 100% 成功。)

于 2012-06-28T18:42:18.510 回答
1

对于函数指针和虚函数,您需要预测分支的目标,因为在编译时您无法知道接下来需要执行哪些代码。

http://en.wikipedia.org/wiki/Branch_target_predictor

于 2012-06-28T20:23:48.680 回答
1

CPU 已经在为您执行此操作,请参阅分支预测

于 2012-06-28T18:44:13.690 回答