Joh*_*ell 7 cpu assembly programming-languages system
我经常读到,从一个perf的角度看,在汇编指令级别的分支是不好的.但我还没有真正理解为什么会这样.所以为什么?
Mar*_*ers 12
大多数现代处理器预取指令,甚至在代码流到达该指令之前推测性地执行它们.有一个分支意味着突然有两个不同的指令可能是下一条指令.至少有三种可能的方式可以与预取相互作用:
根据处理器和特定代码,与没有分支的等效代码相比,分支可能会或可能不会产生显着的性能影响.如果执行代码的处理器使用分支预测(大多数情况下)并且大部分正确猜测特定代码段,则可能不会对性能产生显着影响.另一方面,如果它大多猜错了,它可能会给你一个巨大的减速.
对于特定的代码段,很难预测删除分支是否会显着加快代码速度.当微观优化时,最好测量两种方法的性能而不是猜测.