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