【发布时间】:2013-04-14 21:05:42
【问题描述】:
我无法理解以下关于处理器速度如何影响某个循环运行时间的概念。
对于具有 3GHz 处理器并且每个周期可以执行 64 位算术的计算机,以下循环将运行多长时间?
long long int x; for(x = 0 x
【问题讨论】:
-
我希望这可以被优化掉。
我无法理解以下关于处理器速度如何影响某个循环运行时间的概念。
对于具有 3GHz 处理器并且每个周期可以执行 64 位算术的计算机,以下循环将运行多长时间?
long long int x; for(x = 0 x
【问题讨论】:
编译器可能会完全优化此循环,因为它可能会检测到从未使用过任何结果。
但如果实际编译了循环,则对速度上限的猜测可能是每次迭代两个周期。是的,处理器可能是超分频器,所以它有时可以在一个周期内执行多条指令,但另一方面,一条指令是一个分支,这往往会破坏管道。
所以,如果我们猜测两个循环,那么运行该循环大约需要一个世纪。
irb> 2**63/(3*10**9)/60/60/24/7/52 # => 97 years
我很想说循环永远不会结束,因为这比服务器、UPS 设备和电网的 MTBF 长得多,但也许您可以在 VM 中运行它并定期检查它。 :-)
当然,当经验证据可用时,还有一个关于愚蠢猜测的希腊寓言。为什么不运行循环一小段时间,然后计算 263 次迭代的实际结果?推测很困难,因为除了设计师之外,很少有人真正了解当今复杂的微架构。还有很多实际问题:编译器是否可以展开循环?也许您应该将其编写为汇编,以便您可以测量特定的东西?
【讨论】: