1

I was having trouble understanding the following concepts of how processor speed affects how long a certain loop runs for.

For a computer with a 3GHz processor, and can do 64-bit arithmetic per cycle, for how long will the following loop run?

long long int x; for(x = 0 x<=0; x--){}

4

1 回答 1

0

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

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

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

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

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

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

于 2013-04-14T21:14:37.453 回答