我试图描述一些函数,它们以不同的方式实现同一算法的不同版本。我已经增加了每个函数运行的次数,因此单个函数中花费的总时间大约为1分钟(以显示性能差异)。
现在,运行几次测试产生了令人困惑的结果。同一个函数的多个执行之间存在巨大的变化(+-50%),因此确定哪个函数是最快的(这是测试的目标)几乎是不可能的。
在运行测试之前,是否有什么特别的事情需要我去处理,以便得到更平滑的测量结果?如果失败了,运行测试几次并计算每个函数的平均值是不是正确的?
最佳答案
有很多东西要检查!
首先,确保您的函数实际上是CPU绑定的。如果是,请确保在测试中禁用了所有CPU调节、涡轮模式和节能模式(在BIOS中)。如果您仍然有问题,请尝试将您的流程固定到单个核心。也可能禁用超线程。
所有这一切的目标是确保您的代码在一个内核上运行时不会有太多中断。如果您在Linux上,可以从可用内核的OS列表中删除一个内核并使用它(因此该内核不可能受到干扰)。
运行测试几次是个好主意,但使用平均值(算术平均值)不是。相反,使用中值、最小值或其他不受异常值影响的度量。通常,偶尔的长测试运行可以完全抛出(除非您正在构建一个实时系统!).
关于c - 针对短代码获得可靠的性能测量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25665090/