计算程序的理论速度?

时间:2016-08-11 12:29:28

标签: ruby performance benchmarking

我写了两种不同的方法来做同样的事情。我想比较哪一个会更快地执行。当然,总是可以进行基准测试,但程序基准测试如何因机器而异,并且可能受到许多外部因素的影响。如何在没有工作台标记的情况下计算哪个更快?我的想法是你将在程序中完成所有操作的时间总和。这是标准的事情吗?看起来,当您进行基准测试时,存在很多错误的空间。

2 个答案:

答案 0 :(得分:3)

  

我的想法是,你要总结程序中所有操作的时间。

是的,但您无法通过基准测试以外的任何方法轻松/可靠地计算出这些时间。

问题在于,这些时间取决于程序(甚至整个系统)之前发生的动态上下文。 CPU是复杂的野兽,缓存效果(数据缓存和指令缓存)通常是一个主要因素。分支预测也是如此。 Why is it faster to process a sorted array than an unsorted array?

可以使用汇编语言对小循环进行静态分析。例如基于Agner Fog's microarchictecture pdf and instruction tables,假设没有缓存未命中,我可以准确地预测一个简单循环可以在Intel Haswell上运行的每次循环的循环次数。超越这个涉及越来越多的猜测。

像Ruby这样的高级解释语言的性能可能在一定程度上可以预测,因为专家会花费大量时间在其中调优代码,但几乎肯定不会#34;这只需要这个微秒数#34; "这可能比#34;。

快一点或多快

答案 1 :(得分:2)

算法复杂度将为您提供算法的理论速度比较。

你的问题是一个任意的程序,但程序不仅仅是一组算法。

程序的执行速度取决于它运行的上下文(I / O,操作系统(多任务处理)或硬件)。

因此,对于一系列测量,没有其他方法可以统计,这是基准的定义。