为短代码获得可靠的性能测量

我正在尝试分析一些函数,这些函数以不同的方式实现相同算法的不同版本。 我增加了每个函数运行的次数,这样在单个函数中花费的总时间大约是1分钟(以揭示性能差异)。

现在,运行几次测试会产生令人困惑的结果。 在同一函数的多次执行之间存在巨大的可变性(+ – 50%),并且因此确定哪个函数最快(这是测试的目标)几乎是不可能的。

在运行测试之前,我应该注意一些特殊的事情吗?这样我可以获得更平滑的测量结果吗? 如果不这样做,是多次运行测试并计算每个函数的平均值?

有很多事情需要检查!

首先,确保您的函数实际上是CPU绑定的。 如果是这样,请确保已禁用(在BIOS中)所有CPU限制,turbo模式和省电模式以进行测试。 如果仍有问题,请尝试将流程固定到单个核心。 也许也禁用超线程。

所有这一切的目标是确保您的代码在单个核心上运行热,而不会造成太多中断。 如果您使用的是Linux,则可以从可用内核的操作系统列表中删除单个内核并使用该内核(因此不会对该内核造成干扰)。

多次运行测试是一个好主意,但使用平均值(算术平均值)不是。 相反,使用不受exception值影响的中位数或最小值或其他一些测量值。 通常,偶尔的长测试运行可以完全抛弃(除非你正在建立一个实时系统!)。