【问题标题】:why comparisons operators are so quick?为什么比较运算符这么快?
【发布时间】:2018-11-03 16:29:52
【问题描述】:

根据 Alexandrescu 的文章https://www.facebook.com/notes/facebook-engineering/three-optimization-tips-for-c/10151361643253920/

操作的速度层次是:

  1. 比较
  2. (u)int 加、减、bitops、移位
  3. 浮点加、减(单独的单位!)
  4. 索引数组访问(警告:缓存效果)
  5. (u)int32 数
  6. FP 多重
  7. FP 除法,余数
  8. (u)int 除法,余数

我不明白为什么比较这么快。

如何快速比较两个大数?算法是什么?

【问题讨论】:

  • 恕我直言,(整数)比较与(整数)减法一样快,因为实际上它带有丢弃结果的减法 - 除了处理器状态标志 Z、N、V、C。
  • IMHO, (integer) comparsion is as fast as (integer) subtraction because effectively it is subtration 你说的是cmp 指令,还有另一个指令test,它执行按位与。
  • @ReAl 我也猜到了。另一方面,它是亚历山德雷斯库。 (我的书架上有他的一本书。) ;-) 难道是 discarded result 使比较更快。 (它不需要写回结果。)查看机器命令循环表会有所帮助......
  • cmp 本身并不比 add 快,但是 arith-branch 对(包括 add+jz!,而不仅仅是与 cmp 的组合)的成本与从这个意义上说,单独的分支有时可以“免费”添加cmp

标签: c++ c algorithm


【解决方案1】:

这些比较很快,因为它们很容易。有问题的文章正在谈论数值的比较。一般来说,它们分为两种类型:将一个整数与另一个格式相同的整数进行比较,以及比较两个浮点数。

在整数比较的情况下,使用的整数格式可以以非常直接的方式比较两个值,按特定顺序查看特定位(符号位、高位位,然后是低位-订单位)。

在浮点数的情况下,绝大多数值将表示为in a normalised form,因此您可以按顺序进行比较:

  • 对应的符号位,如果它们相等
  • 对应的指数,如果它们相等
  • 对应的尾数(从高位到低位,按位)。

此类比较在通用处理器中非常常见且非常重要,以至于它们将针对速度进行优化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-23
    • 2011-06-21
    • 2012-02-09
    • 2020-06-23
    • 2018-05-27
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    相关资源
    最近更新 更多