计算一个程序的理论速度?

Calculate the theoretical speed of a program?

我写了两种不同的方法来做同样的事情。我想比较一下哪个执行得更快。当然,始终可以进行基准测试,但是程序基准测试可能因机器而异,并且会受到许多外部因素的影响。如果没有基准测试,我怎么能计算出哪个更快?我的想法是,您将对程序中完成的所有操作的时间求和。这是标准的做法吗?似乎当您进行基准测试时,出错的空间很大。

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

你的问题是关于任意程序的,但程序不仅仅是算法的集合。

程序的执行速度取决于它所处的环境运行(I/Os、操作系统(多任务处理与否)、硬件)。

所以除了对一堆测量值进行统计之外没有其他方法,这是基准的定义。

My thought would be that you would sum the times of all the operations done in the program.

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

问题是这些时间取决于您程序中(甚至系统范围内)之前发生的事情的动态上下文。 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 这样的高级解释语言的性能对于花费大量时间调整代码的专家来说可能在某种程度上是可以预测的,但几乎可以肯定不是 "this will take this number of microseconds",只有 "this is probably a bit or a lot faster than that".