我有几个用 C++ 编写的迭代算法来解决同样的问题。当在我的机器上针对非常大的输入集运行这些算法时,很容易根据每个算法对给定输入集花费的时间对它们进行分类。
但是这些运行时是基于我的机器以及当时在我的机器上运行的后台进程的数量。它们似乎不可复制。
是否有任何客观的通用指标来量化这些算法的运行时间和速度?我想找到一种方法,无论运行在什么机器上,都能给出相同的结果,并且是可重现的。
我正在寻找计算 CPU 周期数的方法,但这在现代微处理器上看起来很难做到。
所以我提到的每个算法都有两个主要功能,搜索功能和计算功能。我手动数一下可以接受吗?在这两个函数中完成的操作,然后使用它作为指标来比较我的算法?
您需要的答案有多精确和可靠?您愿意投入多少工作来找到它?
std::clock
,它只计算该进程的CPU时间。此类基准测试应该成为每个优化工作的一部分,因为理论考虑中的错误假设或不幸的近似可能会导致代码在实践中表现更差。1 / 1
可能仍然很快)。然后,您还必须考虑这样一个事实:您的 CPU 可能能够“并行运行多个指令”,用于“分支预测”,还可能用于其他用途。因此,很可能您必须使用近似值来保持其可行性,即使这样也会很麻烦。只有在运行时极其关键的代码中才值得付出努力。 这里是关于这个主题的另一个问题。
对于大多数应用程序来说可能足够的方法是选择具有最佳渐近复杂度的算法,并让编译器优化处理其余的事情。