微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何对复杂功能进行良好的基准测试?

我即将在C中对一组复杂函数进行非常详细的基准测试.这是“科学水平”的细节.我想知道,进行严格基准测试的最佳方法是什么?我正在考虑运行它们,比如每次运行10次,平均时间结果并给出标准开发,例如,只使用< time.h>.你们会做些什么来获得良好的基准?

解决方法

当相关分布近似正常时,报告平均值和标准偏差可以很好地描述分布.但是,计算性能测量很少这样.相反,性能测量倾向于更接近泊松分布.这是有道理的,因为计算机上没有多少随机事件会导致程序更快;基本上所有的测量噪声都是在多少随机事件发生导致它减速的情况下. (相比之下,正态分布根本没有直观意义;它需要相信程序在负时间内具有非零概率的完成).

鉴于此,我发现报告程序的多次运行的最短时间非常有用,而不是平均值;分布中的噪声通常是测量系统的噪声,而不是有关算法的有意义的信息.对于具有早期条件和其他快捷方式的复杂算法,您需要更加小心,但是每次运行处理代表性输入平衡的许多运行的最小值通常都很有效.

“每次10次”对我来说听起来很少.我通常会做大约数千(或更多,取决于功能/系统)的运行,除非这是完全不可行的.至少,您需要确保运行时间足够长,以消除对系统状态的任何依赖,其中一些可能会在相当大的时间粒度上发生变化.

您应该注意的另一件事是,基本上每个系统都有一个特定于平台的计时器,它比可用的时间更准确< time.h>.找出它在您的目标平台上的内容并改为使用它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐