(有意义的)跳转指令的成本?

Der*_*unk 5 x86 assembly

对不起......(过早的)优化是所有邪恶的根源,但我想知道:拥有一个jmp指令而不是拥有它(无分支代码)需要多少钱?我正在学习如何计算这些东西的方法.这纯粹是探索性的,不实用,我试图找到理论问题的方法,我的测试代码提出了这个问题.谢谢.

mik*_*era 8

如果你真的想知道,你必须在你的架构上测试它.

但总的来说,在现代处理器上,无条件跳转的成本最低.除了极少量的指令缓存开销外,它基本上是免费的.它可能会与相邻指令并行执行,因此甚至可能不会花费您一个时钟周期.这是因为跳转可以由几个并行执行单元中的一个执行.

以这种方式看待 - 主内存的单次读取可能要贵100-200倍.

它更普遍地是分支预测的子集,但是没有分支错误预测的风险,因此您不必刷新指令管道,这是与条件跳转相关的主要成本.

  • 我全球都同意,但跳转和内存访问之间的比较是不公平的.跳转是无成本的,因为它被缓存(通过分支预测引擎)并且内存访问很昂贵,因为它没有被缓存(主内存访问).它们在缓存时都很快,当它们错过各自的缓存时都很慢.关于并行执行的相同评论,如果CPU没有别的办法,跳转是没有成本的.如果CPU对执行单元有很高的压力,则成本会更高. (4认同)