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

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

解决方法

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

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

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

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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...