2013-04-14 214 views
1

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

对于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 

我很想说,循环将永远不会完成,因为这比MTBF为服务器,UPS设备,以及电网更长的时间,但也许你可以在虚拟机中运行它,它设置检查点定期。 :-)

当然,当经验证据可用时,希腊的寓言就是猜测的愚蠢。为什么不在少量时间内运行循环,然后计算迭代的实际结果?这种猜测是困难的,因为除了设计师之外,很少有人真正理解今天复杂的微架构。还有很多实际问题:编译器是否可以展开循环?也许你应该把它写在汇编中,这样你就可以测量一些特定的东西了?