If statement 比较运算符在编程中如何利用CPU周期

If statement 比较运算符在编程中如何利用CPU周期,if-statement,conditional-statements,coding-style,software-design,instruction-set,If Statement,Conditional Statements,Coding Style,Software Design,Instruction Set,如果我有以下条件,那么哪个比较条件执行得快(在CPU周期和时间方面): if(1

如果我有以下条件,那么哪个比较条件执行得快(在CPU周期和时间方面):

if(1<2)
如果(1<100)

在您的示例中没有动态值,只有常量,所以编译器(AOT或JIT)可以优化这两个条件,并且编译后的代码不会包含
if
s。因此,这些条件之间没有区别

即使存在动态值,这两种情况也会具有相同的速度。由于与值的比较是快速操作,因此与2或1000的比较将具有相同的时间

例如,对于x86 64位<代码>如果(值<2)将转换为如下内容:

cmp rax, 2
jl condition_succeded_label
根据Torbjörn Granlund的介绍,Intel/AMD CPU对
CMP
指令有1个周期的延迟(下面是L64),现代Intel/AMD CPU的每个核心最多可以并行执行4条
CMP
指令(下面是T64,吞吐量)。无论常量操作数是2还是1000。


可能不同的是分支预测失误,当CPU预测错误的分支时,可能需要花费10-20个CPU周期()或更多(取决于CPU型号、缓存中的数据、内存速度)。虽然比较本身需要0.25-1个周期,如上表所示。

谢谢,提供的参考非常有用。
cmp rax, 2
jl condition_succeded_label