【问题标题】:For loop run timeFor循环运行时间
【发布时间】:2013-04-14 21:05:42
【问题描述】:

我无法理解以下关于处理器速度如何影响某个循环运行时间的概念。

对于具有 3GHz 处理器并且每个周期可以执行 64 位算术的计算机,以下循环将运行多长时间?

long long int x; for(x = 0 x

【问题讨论】:

  • 我希望这可以被优化掉。

标签: loops for-loop integer


【解决方案1】:

编译器可能会完全优化此循环,因为它可能会检测到从未使用过任何结果。

但如果实际编译了循环,则对速度上限的猜测可能是每次迭代两个周期。是的,处理器可能是超分频器,所以它有时可以在一个周期内执行多条指令,但另一方面,一条指令是一个分支,这往往会破坏管道。

所以,如果我们猜测两个循环,那么运行该循环大约需要一个世纪。

irb> 2**63/(3*10**9)/60/60/24/7/52 # => 97 years

我很想说循环永远不会结束,因为这比服务器、UPS 设备和电网的 MTBF 长得多,但也许您可以在 VM 中运行它并定期检查它。 :-)

当然,当经验证据可用时,还有一个关于愚蠢猜测的希腊寓言。为什么不运行循环一小段时间,然后计算 263 次迭代的实际结果?推测很困难,因为除了设计师之外,很少有人真正了解当今复杂的微架构。还有很多实际问题:编译器是否可以展开循环?也许您应该将其编写为汇编,以便您可以测量特定的东西?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2011-11-14
    • 2019-10-07
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    相关资源
    最近更新 更多