我写了两种不同的方法来做同样的事情。我想比较一下哪个会执行得更快。当然,对程序进行基准测试是可能的,但是程序基准测试在不同的机器之间是如何不同的,并且会受到许多外部因素的影响。没有板凳标记,我怎么能计算出哪一个更快?我的想法是,你可以总结程序中所有操作的次数。这是标准做法吗?当你进行基准测试时,似乎有很大的错误空间。
发布于 2016-08-11 15:52:58
我的想法是,你可以总结程序中所有操作的次数。
是的,但除了基准测试之外,其他任何方法都无法轻松、可靠地计算出这些时间。
问题是,这些时候取决于程序(甚至整个系统)之前发生的动态环境。CPU是复杂的野兽,缓存效果(数据缓存和指令缓存)通常是一个主要因素。分支预测也是如此。为什么处理排序数组比处理未排序数组更快?
在汇编语言中对一个小循环进行静态分析是可能的。例如,我可以准确地预测一个简单循环可以在Intel上运行的每一个迭代周期,假设没有缓存错误,基于Agner Fog's显微结构pdf和指令表。超越这一点,就需要越来越多的猜测。
对于花费大量时间优化代码的专家来说,在Ruby这样的高级解释语言中的性能可能是可以预测的,但几乎可以肯定的是,“这将占用这么多微秒时间”,只是“这可能比这稍微快一点或快得多”。
发布于 2016-08-11 14:52:06
算法的复杂性将给你一个理论上的速度比较一个算法。
你的问题是关于一个任意的程序,但一个程序不仅仅是一组算法。
程序的执行速度取决于它正在运行的上下文(I/O、操作系统(多任务处理与否)、硬件)。
因此,除了对一组测量数据进行统计之外,没有其他方法,这是基准测试的定义。
https://stackoverflow.com/questions/38896454
复制相似问题