测量算法的实际运行时间

时间:2011-04-02 18:14:36

标签: algorithm cpu performance

近似地,抽象算法操作分配给MIPS的物理指令有多少?至于抽象算法操作,我的意思是基本操作,例如添加划分等。< / p>

我认为这不是严格的测量技术: - )

克加

4 个答案:

答案 0 :(得分:1)

计算机很复杂。如果你想要达到这个水平,你需要开始考虑你正在使用什么样的CPU,你的编译器如何使用这个CPU的指令集,什么变量被保存在哪些寄存器中,它们的位级表示是什么,即使这样,指令的数量也不总是容易映射到实际的运行时间。不同的指令可以执行不同的时钟周期,这甚至不考虑操作系统线程和程序的缓存未命中率。

最后,我们首先使用big-O notatoin是有充分理由的:)


顺便说一下,对于整数,大多数简单的操作(加,减)应该映射到一台机器指令,以防你担心。

答案 1 :(得分:1)

有一个基本MIPS指令列表here。您提到的大多数“基本操作”都是单个MIPS指令或者两个,这可能适用于大多数当前的CPU系列。

然而,这并没有考虑所有任何现代CPU的架构和性能特征。不同的指令通常具有不同的完成时间。当前的CPU通常实现分支预测,指令流水线,内存缓存,并行化以及其他技术的完整列表,以使代码执行更快。

因此,只需要一个算法的汇编代码实现就不会说它的执行速度。您必须在实际硬件上测量和分析代码以获得可比较的结果。事实上,某些算法在某些CPU上可能更有效,即使在同一CPU系列中也是如此。

一个常见的,可以理解的例子是指令缓存的效果。展开循环将消除许多分支操作,从而直观地使代码更快。但是,如果在具有非常少的指令高速缓冲存储器的同一系列的CPU上运行该代码,则对主存储器的添加访问可使其比基于分支的简单循环慢得多。

答案 2 :(得分:1)

这取决于CPU架构。有些处理器需要几个周期用于单个指令,例如divivide,而其他处理器则设法在每个周期内执行所有机器代码指令。

有时候测量一个算法需要多少个浮点运算。但是,这并不考虑I / O(例如读取内存)。

有时在FLOPS(每秒浮点运算)中提供CPU的速度,这有助于为您提供时间估算。同样,不考虑I / O - 而不是多线程问题(也是一个非常重要的测量因素)。

答案 3 :(得分:1)

Donald Knuth在撰写“计算机程序设计艺术”第1卷时解决了这个问题。 在前言中,他给出了在假想机器的汇编代码中呈现算法的冗长理由 -

  

......为了避免这种困境,我有   试图设计一个“理想”   计算机名为“ MIX,”   简单的操作规则......

通过这种方式,可以明智地谈论算法需要多少“周期”,而不必关心机器,缓存,延迟,流水线或计算机优化以节省时间的任何其他方式之间的差异,以牺牲知道需要多长时间为代价。