【问题标题】:Are these cpu operations same?这些 cpu 操作是否相同?
【发布时间】:2012-05-18 16:52:01
【问题描述】:

考虑以下两个cpu操作:

sum = 1 + 1 + 1 + 1 + 1 + 1+ 1+......n次

和 总和 = 1 * n

现在我想知道这两个操作在复杂性和 cpu 时间方面是不同的。 我也可以将这些视为原子操作吗?

【问题讨论】:

  • 我猜编译器会做他的优化,他们会花同样的时间。

标签: performance cpu complexity-theory atomic cpu-cycles


【解决方案1】:

ADD 和 MUL 是不同的操作。

在第一个语句中,您有 N ADD 操作 -> 许多 cicles。

在第二个你有一个操作 -> 几个周期。

但是,这取决于编译器将如何执行这些语句。 (编译器可能会在编译时将 1+1+1+...+1 替换为 N,因此可执行文件将执行一次操作。但在这种情况下编译器将执行 N 次操作。)

UPDATE:存在 MUL 操作:http://en.wikipedia.org/wiki/X86_instruction_listings

【讨论】:

  • 但是cpu里没有乘法运算,只有加减法。
  • 有乘法指令(在 x86/x64 中),我相信通常没有除法指令。
  • 但我认为这些乘法运算不能是原子的
【解决方案2】:

在 x86 上,ADD 执行聚合只需不到一个周期,MUL 大约需要 2.7 个周期。

编译器中的优化器非常聪明。如果您正在做一个乘法,它可以使用移位来更快地执行并添加它。

编写您的代码,以尽可能简单的方式说明您正在做什么,编译器和处理器将通过为您提供快速代码来奖励您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2023-03-15
    相关资源
    最近更新 更多