近似地,抽象算法操作分配给MIPS的物理指令有多少?至于抽象算法操作,我的意思是基本操作,例如添加,划分等。< / p>
我认为这不是严格的测量技术: - )
克加
答案 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,” 简单的操作规则......
通过这种方式,可以明智地谈论算法需要多少“周期”,而不必关心机器,缓存,延迟,流水线或计算机优化以节省时间的任何其他方式之间的差异,以牺牲知道需要多长时间为代价。