Mac*_*zie 54 optimization performance cpu-speed
我知道这是一个微观优化,所以我问出纯粹的好奇心.
逻辑上,微处理器不需要比较相等运算符的两个操作数的所有位以确定"FALSE"结果.
注意,这与编程有关,因为它会影响程序的执行速度.
Meh*_*ari 48
通常,微处理器使用电门进行比较而不是像这样逐步进行比较.它一次检查所有位.
Ree*_*sey 29
这取决于您的平台,但一般情况下,它将执行相同的操作.
例如,在X86上,您可以通过查看程序集的工作原理来看到这一点.查看X86汇编控制流操作 - 无论您是在进行相等还是不等,它都是以2个操作完成的.
首先,进行CMP(比较)操作.然后检查比较是否相等,不等于等等.这只是检查比较的结果 - 在这两种情况下,你正在进行2次操作.
然而,在许多更高级别的编程语言中,情况有所不同.许多语言在平等方面定义不平等 - 检查不平等,进行等式检查,然后再检查是否为假.这使得在这些语言中(显微镜)更快地达到平等.许多语言也允许你专门写两种语言 - 但许多人倾向于在平等方面写出不平等,这通常会使得平等稍快一些.
Tom*_*eys 12
听起来你应该阅读英特尔64和IA-32架构优化参考手册.
在那里查看您使用的说明中的"管道延迟"和"管道延迟".可以说,使用整数执行的所有操作都需要大约1个时钟周期才能执行(每秒40亿次).从内存中读取数据可能需要100-1000,具体取决于您使用的数据量.更重要的是.
Mic*_*ael 11
比较通常实现为忽略结果的减法.CPU中的加法器将同时对所有位进行操作,因此这是一个恒定时间操作.
然后等于确定输出是否为0.在x86上,有比较结果设置的标志,分支通过jz或jnz完成(如果为零则跳转,如果不为零则跳转).所以不,没有真正的速度差异.
其他平台(例如ARM和IA64)的行为类似.
正如其他答案所暗示的那样,指令本身将以相同的速度执行。
您可能会遇到差异的地方是分支预测或缓存效果。这会因处理器和编译器的不同而有所不同,因此不可能进行概括。如果您处于这会产生影响的水平,唯一知道的方法就是尝试和测量。
归档时间: |
|
查看次数: |
22080 次 |
最近记录: |